<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>MAS_AuthHub</name>
	<version>1.0.9</version>
    <mincmsversion>2.2.10</mincmsversion>
	<help><![CDATA[PHN0eWxlPgoubWFzLWRvYy10YWJzIHsgbWFyZ2luOiAyMHB4IDAgMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH0KLm1hcy1kb2MtdGFicyBhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAxMHB4IDIwcHg7IG1hcmdpbi1yaWdodDogNXB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMzMzOyB9Ci5tYXMtZG9jLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1kb2MtdGFicyBhOmhvdmVyIHsgYmFja2dyb3VuZDogI2U5ZTllOTsgfQoubWFzLWRvYy1jb250ZW50IHsgcGFkZGluZzogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZDogI2ZmZjsgfQoubWFzLWRvYy1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWRvYy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9Cjwvc3R5bGU+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLXRhYnMgbWFzLWRvYy10YWJzLWhlbHAiPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtZG9jLXRhYiBhY3RpdmUiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1oZWxwLWdlbmVyYWwiPkdlbmVyYWw8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWhlbHAtY29uZmlndXJhdGlvbiIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1jb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1oZWxwLXByb3RvY29scyIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1wcm90b2NvbHMiPlByb3RvY29sczwvYT4KICA8YSBocmVmPSIjTUFTX0F1dGhIdWItaGVscC1zZWN1cml0eSIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItaGVscC1zZWN1cml0eSI+U2VjdXJpdHk8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWhlbHAtdHJvdWJsZXNob290aW5nIiBjbGFzcz0ibWFzLWRvYy10YWIiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1oZWxwLXRyb3VibGVzaG9vdGluZyI+VHJvdWJsZXNob290aW5nPC9hPgo8L2Rpdj4KCjxkaXYgY2xhc3M9Im1hcy1kb2MtY29udGVudCBtYXMtZG9jLWNvbnRlbnQtaGVscCI+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItaGVscC1nZW5lcmFsIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIGFjdGl2ZSI+CiAgICA8aDM+R2VuZXJhbDwvaDM+Cgo8aDQ+T3ZlcnZpZXc8L2g0Pgo8cD5NQVMgQXV0aEh1YiBjZW50cmFsaXplcyBzaWduLWluIGZvciBDTVMgTWFkZSBTaW1wbGUgYWRtaW4gYW5kIE1BTVMgZnJvbnRlbmQgdXNlcnMuIEl0IHN1cHBvcnRzIE9BdXRoMiwgT3BlbklEIENvbm5lY3QsIFNBTUwgc2VydmljZSBwcm92aWRlciBmbG93cywgV2ViQXV0aG4gcGFzc2tleXMsIGFuZCBvcHRpb25hbCBPQXV0aCBhdXRob3JpemF0aW9uIHNlcnZlciBlbmRwb2ludHMgZm9yIHlvdXIgb3duIGNsaWVudHMuPC9wPgoKPGg0PlF1aWNrIHN0YXJ0PC9oND4KPG9sPgogIDxsaT5BZGQgc2VjcmV0cyB0byBzaXRlIGNvbmZpZy5waHAgdW5kZXIgdGhlIG1hc19hdXRoaHViIGFycmF5IChzZWUgQ29uZmlndXJhdGlvbiB0YWIpLjwvbGk+CiAgPGxpPk9wZW4gRXh0ZW5zaW9ucywgdGhlbiBNQVMgQXV0aEh1YiwgYW5kIGdyYW50IE1hbmFnZSAvIFVzZSBwZXJtaXNzaW9ucyB0byB0aGUgcmlnaHQgYWRtaW4gZ3JvdXBzLjwvbGk+CiAgPGxpPk9uIHRoZSBJZGVudGl0eSBwcm92aWRlcnMgdGFiLCBhZGQgYW5kIGVuYWJsZSBhdCBsZWFzdCBvbmUgcHJvdmlkZXIgKEF6dXJlIEFELCBHb29nbGUsIFNBTUwgSWRQLCBhbmQgc28gb24pLjwvbGk+CiAgPGxpPkluIE1BTVMgbW9kdWxlIHByZWZlcmVuY2VzLCBzZXQgQXV0aGVudGljYXRpb24gbW9kdWxlIHRvIE1BU19BdXRoSHViIHdoZW4gdXNpbmcgZnJvbnRlbmQgU1NPLjwvbGk+CiAgPGxpPkVuYWJsZSBDTVNNUyBhZG1pbiBTU08gYW5kL29yIE1BTVMgZnJvbnRlbmQgU1NPIG9uIHRoZSBTZXR0aW5ncyB0YWIsIHRoZW4gdGVzdCBzaWduLWluIGFuZCByZXZpZXcgdGhlIEF1ZGl0IGxvZy48L2xpPgo8L29sPgoKPGg0PlN5c3RlbSByZXF1aXJlbWVudHM8L2g0Pgo8dWw+CiAgPGxpPkNNUyBNYWRlIFNpbXBsZSAyLjIuMTA8L2xpPgogIDxsaT5QSFAgNy40LjA8L2xpPgogIDxsaT5NQU1TIDEuMCsgYW5kIENNU01TRXh0IDEuMCsgcmVjb21tZW5kZWQgZm9yIE1BTVMgZnJvbnRlbmQgU1NPIChub3QgcmVxdWlyZWQgdG8gaW5zdGFsbCBBdXRoSHViKTwvbGk+CiAgPGxpPkhUVFBTIG9uIHRoZSBwdWJsaWMgc2l0ZSBmb3IgT0F1dGgsIFNBTUwsIGFuZCBXZWJBdXRobiBjYWxsYmFja3M8L2xpPgo8L3VsPgoKPGg0PkNyZWRpdHM8L2g0Pgo8cD5EZXZlbG9wZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5tYXN0ZXIzMzk1PC9hPiB8IDxhIGhyZWY9Im1haWx0bzppbmZvQG5ld3N0YXJnZXRlZC5jb20iPmluZm9AbmV3c3RhcmdldGVkLmNvbTwvYT48L3A+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItaGVscC1jb25maWd1cmF0aW9uIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIj4KICAgIDxoMz5Db25maWd1cmF0aW9uPC9oMz4KCjxoND5TZWNyZXRzIGluIGNvbmZpZy5waHA8L2g0Pgo8cD5OZXZlciBzdG9yZSBjbGllbnQgc2VjcmV0cyBvciBzaWduaW5nIGtleXMgaW4gdGhlIGRhdGFiYXNlLiBVc2UgdGhlIHNpdGUgcm9vdCBjb25maWcucGhwIGFycmF5IG1hc19hdXRoaHViLiBTZWUgdG8tZG8vY29uZmlnLm1hc19hdXRoaHViLmV4YW1wbGUucGhwIGluIHRoZSBtb2R1bGUgZm9sZGVyIGZvciBhIHNhbXBsZSBzaGFwZS48L3A+Cjx1bD4KICA8bGk+PGNvZGU+ZW5jcnlwdGlvbl9rZXk8L2NvZGU+OiAzMi1ieXRlIHJhbmRvbSB2YWx1ZSBmb3IgZW5jcnlwdGluZyBzdG9yZWQgdG9rZW5zPC9saT4KICA8bGk+PGNvZGU+c2lnbmluZ19rZXk8L2NvZGU+OiBTZWNyZXQgZm9yIEpXVCAvIGh1YiBzZXNzaW9uIHNpZ25pbmc8L2xpPgogIDxsaT48Y29kZT5wcm92aWRlcnM8L2NvZGU+OiBQZXItcHJvdmlkZXIgb3ZlcnJpZGVzIChmb3IgZXhhbXBsZSBjbGllbnRfc2VjcmV0IGZvciBBenVyZSBBRCk8L2xpPgo8L3VsPgoKPGg0PlNldHRpbmdzIHRhYjwvaDQ+Cjx1bD4KICA8bGk+PHN0cm9uZz5FbmFibGUgQ01TTVMgYWRtaW4gU1NPPC9zdHJvbmc+OiBBbGxvd3MgZXh0ZXJuYWwgaWRlbnRpdHkgcHJvdmlkZXJzIHRvIHNpZ24gdXNlcnMgaW50byB0aGUgQ01TTVMgYWRtaW4gd2hlbiBsaW5rZWQgYWNjb3VudHMgZXhpc3QuIFdoZW4gZW5hYmxlZCwgcHJvdmlkZXIgYnV0dG9ucyBhcHBlYXIgb24gL2FkbWluL2xvZ2luLnBocCAobm8gdGhlbWUgZWRpdCByZXF1aXJlZCkuPC9saT4KICA8bGk+PHN0cm9uZz5BZG1pbiBTU08gcHJlc2VudGF0aW9uPC9zdHJvbmc+OiBCdXR0b25zIGtlZXBzIHVzZXJuYW1lL3Bhc3N3b3JkIHBsdXMgU1NPIGxpbmtzLiBBdXRvLXJlZGlyZWN0IHNlbmRzIHRoZSBicm93c2VyIHN0cmFpZ2h0IHRvIHRoZSBJZFAgd2hlbiBhIGRlZmF1bHQgKG9yIHNpbmdsZSkgcHJvdmlkZXIgaXMgc2V0LjwvbGk+CiAgPGxpPjxzdHJvbmc+RW5hYmxlIE1BTVMgZnJvbnRlbmQgU1NPPC9zdHJvbmc+OiBFbmFibGVzIE1BTVMgZnJvbnRlbmQgbG9naW4gdmlhIGNvbmZpZ3VyZWQgcHJvdmlkZXJzLjwvbGk+CiAgPGxpPjxzdHJvbmc+QXV0by1saW5rIGFjY291bnRzIGJ5IHZlcmlmaWVkIGVtYWlsPC9zdHJvbmc+OiBMaW5rcyBuZXcgbG9naW5zIHRvIGV4aXN0aW5nIENNUyBvciBNQU1TIHVzZXJzIHdoZW4gZW1haWwgaXMgdmVyaWZpZWQgYnkgdGhlIElkUC48L2xpPgogIDxsaT48c3Ryb25nPkh1YiBzZXNzaW9uIFRUTCAoc2Vjb25kcyk8L3N0cm9uZz46IExpZmV0aW1lIG9mIGh1YiBzZXNzaW9uIHJlY29yZHMgYmVmb3JlIHJlLWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLjwvbGk+CiAgPGxpPjxzdHJvbmc+UmF0ZSBsaW1pdCAocmVxdWVzdHMgcGVyIGhvdXIgcGVyIElQKTwvc3Ryb25nPjogQmFzaWMgcGVyLUlQIHRocm90dGxpbmcgb24gc2Vuc2l0aXZlIGZyb250ZW5kIGFjdGlvbnMuPC9saT4KPC91bD4KCjxoND5PdGhlciBhZG1pbiB0YWJzPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPklkZW50aXR5IHByb3ZpZGVyczwvc3Ryb25nPjogQWRkIE9BdXRoL09JREMvU0FNTC9XZWJBdXRobiBkcml2ZXJzLCBjbGllbnQgSURzLCByZWRpcmVjdCBVUklzLCBhbmQgbWV0YWRhdGEuPC9saT4KICA8bGk+PHN0cm9uZz5NQU1TIGNvbXBhdGliaWxpdHk8L3N0cm9uZz46IEpJVCB1c2VyIGNyZWF0aW9uLCBkdXBsaWNhdGUtZW1haWwgcG9saWN5LCBhbmQgTUFNUyBpbnRlZ3JhdGlvbiBzdGF0dXMuPC9saT4KICA8bGk+PHN0cm9uZz5PQXV0aCBjbGllbnRzPC9zdHJvbmc+OiBSZWdpc3RlciBjb25maWRlbnRpYWwgY2xpZW50cyB0aGF0IG1heSB1c2UgdGhpcyBodWIgYXMgYW4gT0F1dGgyIGF1dGhvcml6YXRpb24gc2VydmVyLjwvbGk+CiAgPGxpPjxzdHJvbmc+U2Vzc2lvbnMgYW5kIHRva2Vuczwvc3Ryb25nPjogVmlldyBhbmQgcmV2b2tlIGFjdGl2ZSBodWIgc2Vzc2lvbnMgYW5kIHJlZnJlc2ggdG9rZW5zLjwvbGk+CiAgPGxpPjxzdHJvbmc+QXVkaXQgbG9nPC9zdHJvbmc+OiBTZWN1cml0eSBhbmQgc2lnbi1pbiBldmVudHMgd2l0aCBDU1YgZXhwb3J0LjwvbGk+CjwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItaGVscC1wcm90b2NvbHMiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPlByb3RvY29sczwvaDM+Cgo8aDQ+T0F1dGgyIC8gT0lEQzwvaDQ+CjxwPlN0YW5kYXJkIGF1dGhvcml6YXRpb24tY29kZSBmbG93IGZvciBzb2NpYWwgYW5kIGVudGVycHJpc2UgSWRQcy48L3A+Cjx1bD4KICA8bGk+PGNvZGU+b2F1dGhfc3RhcnQ8L2NvZGU+LCA8Y29kZT5vYXV0aF9jYWxsYmFjazwvY29kZT48L2xpPgogIDxsaT48Y29kZT5vYXV0aF9hdXRob3JpemU8L2NvZGU+LCA8Y29kZT5vYXV0aF90b2tlbjwvY29kZT4gKHdoZW4gZW5hYmxlZCBmb3IgcmVnaXN0ZXJlZCBjbGllbnRzKTwvbGk+CiAgPGxpPjxjb2RlPm9pZGNfZGlzY292ZXJ5PC9jb2RlPiAod2VsbC1rbm93biBPcGVuSUQgY29uZmlndXJhdGlvbiBmb3IgcmVseWluZyBwYXJ0aWVzKTwvbGk+CjwvdWw+Cgo8aDQ+U0FNTDwvaDQ+CjxwPlNlcnZpY2UtcHJvdmlkZXIgZW5kcG9pbnRzIGZvciBTQU1MIDIuMCBJZFBzLjwvcD4KPHVsPgogIDxsaT48Y29kZT5zYW1sX2FjczwvY29kZT46IEFzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlIChQT1NUIGJpbmRpbmcpPC9saT4KICA8bGk+PGNvZGU+c2FtbF9tZXRhZGF0YTwvY29kZT46IFNQIG1ldGFkYXRhIFhNTCBmb3IgSWRQIGNvbmZpZ3VyYXRpb248L2xpPgo8L3VsPgoKPGg0PldlYkF1dGhuPC9oND4KPHA+UGFzc3dvcmRsZXNzIHBhc3NrZXlzIGZvciBsaW5rZWQgdXNlcnMgKHJlcXVpcmVzIEhUVFBTIGFuZCBjb21wYXRpYmxlIGJyb3dzZXJzKS48L3A+Cjx1bD4KICA8bGk+PGNvZGU+d2ViYXV0aG48L2NvZGU+OiByZWdpc3RyYXRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGNlcmVtb25pZXM8L2xpPgo8L3VsPgoKPGg0Pk1BTVM8L2g0Pgo8cD5NQU1TIGNhbGxzIHRoaXMgbW9kdWxlIHdoZW4gYXV0aF9tb2R1bGUgaXMgc2V0IHRvIE1BU19BdXRoSHViLjwvcD4KPHVsPgogIDxsaT48Y29kZT5tYW1zX2xvZ2luPC9jb2RlPjogZnJvbnRlbmQgU1NPIGVudHJ5IGZyb20gTUFNUyB0ZW1wbGF0ZXM8L2xpPgo8L3VsPgo8cCBjbGFzcz0iaW5mb3JtYXRpb24iPk1BTVNSZWdpc3RyYXRpb24gaXMgaW5zdGFsbGVkOiBkdXBsaWNhdGUtZW1haWwgYW5kIEpJVCBwb2xpY2llcyBvbiB0aGUgTUFNUyB0YWIgYXBwbHkuPC9wPgogIDwvZGl2PgogIDxkaXYgaWQ9Ik1BU19BdXRoSHViLWhlbHAtc2VjdXJpdHkiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPlNlY3VyaXR5PC9oMz4KCjxoND5Qcm90ZWN0IHNlY3JldHM8L2g0Pgo8cD5EZW55IEhUVFAgYWNjZXNzIHRvIGNvbmZpZy5waHAgdmlhIHNlcnZlciBydWxlcy4gUm90YXRlIGVuY3J5cHRpb25fa2V5IGFuZCBzaWduaW5nX2tleSBpZiBjb21wcm9taXNlIGlzIHN1c3BlY3RlZCAodXNlcnMgbXVzdCBzaWduIGluIGFnYWluKS48L3A+Cgo8aDQ+QXVkaXQgbG9nPC9oND4KPHA+UmV2aWV3IGZhaWxlZCBsb2dpbnMsIHByb3ZpZGVyIGVycm9ycywgYW5kIGFjY291bnQgbGlua2luZyBldmVudHMgcmVndWxhcmx5LiBFeHBvcnQgQ1NWIGZvciBsb25nLXRlcm0gcmV0ZW50aW9uLjwvcD4KCjxoND5TZXNzaW9uczwvaDQ+CjxwPlJldm9rZSBzZXNzaW9ucyB3aGVuIHN0YWZmIGxlYXZlIG9yIGRldmljZXMgYXJlIGxvc3QuIFNob3J0ZXIgVFRMIHJlZHVjZXMgZXhwb3N1cmUuPC9wPgoKPGg0PlBlcm1pc3Npb25zPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPk1hbmFnZSBNQVNfQXV0aEh1YjogZnVsbCBhZG1pbiB0YWJzLCBwcm92aWRlcnMsIGNsaWVudHMsIGF1ZGl0IGV4cG9ydC48L3N0cm9uZz48L2xpPgogIDxsaT48c3Ryb25nPlVzZSBNQVNfQXV0aEh1YjogcmVxdWlyZWQgZm9yIHNvbWUgYXV0b21hdGVkIG9wZXJhdGlvbnMgYW5kIEFQSS1zdHlsZSB1c2UuPC9zdHJvbmc+PC9saT4KPC91bD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1oZWxwLXRyb3VibGVzaG9vdGluZyIgY2xhc3M9Im1hcy1kb2Mtc2VjdGlvbiI+CiAgICA8aDM+VHJvdWJsZXNob290aW5nPC9oMz4KCjxoND5TU08gZG9lcyBub3Qgd29yazwvaDQ+Cjx1bD4KICA8bGk+Q29uZmlybSB0aGUgcHJvdmlkZXIgaXMgZW5hYmxlZCBhbmQgcmVkaXJlY3QgVVJJcyBtYXRjaCBleGFjdGx5IChzY2hlbWUsIGhvc3QsIHBhdGgpLjwvbGk+CiAgPGxpPkNoZWNrIHRoYXQgdGhlIENNUyBvciBNQU1TIHVzZXIgaXMgbGlua2VkIChvciBhdXRvLWxpbmsgYnkgZW1haWwgaXMgZW5hYmxlZCBhbmQgZW1haWwgaXMgdmVyaWZpZWQpLjwvbGk+CiAgPGxpPkluc3BlY3QgdGhlIEF1ZGl0IGxvZyBhbmQgUEhQIGVycm9yIGxvZyBmb3IgcHJvdmlkZXItc3BlY2lmaWMgZXJyb3JzLjwvbGk+CiAgPGxpPkZvciBDTVMgYWRtaW4gU1NPLCBlbmFibGUgaXQgb24gU2V0dGluZ3MsIHRoZW4gb3BlbiAvYWRtaW4vbG9naW4ucGhwOiBwcm92aWRlciBidXR0b25zIHNob3VsZCBhcHBlYXIgdW5kZXIgdGhlIHBhc3N3b3JkIGZvcm0gKG9yIGF1dG8tcmVkaXJlY3QgaWYgdGhhdCBtb2RlIGlzIHNlbGVjdGVkKS4gVXNlIHRoZSBBZG1pbiBTU08gc3RhcnQgVVJMIG9uIHRoZSBJZGVudGl0eSBwcm92aWRlcnMgdGFiIHRvIHRlc3QuPC9saT4KPC91bD4KCjxoND5PQXV0aCAvIE9JREMgZXJyb3JzPC9oND4KPHVsPgogIDxsaT5WZXJpZnkgY2xpZW50X2lkIGFuZCBjbGllbnRfc2VjcmV0IGluIGNvbmZpZy5waHAgbWF0Y2ggdGhlIElkUCBwb3J0YWwuPC9saT4KICA8bGk+RW5zdXJlIHNlcnZlciB0aW1lIGlzIGNvcnJlY3QgKHNrZXcgYnJlYWtzIHRva2VuIHZhbGlkYXRpb24pLjwvbGk+CiAgPGxpPkZvciBhdXRob3JpemF0aW9uLXNlcnZlciBtb2RlLCBjb25maXJtIHRoZSBPQXV0aCBjbGllbnQgcmVkaXJlY3QgVVJJcyBhcmUgcmVnaXN0ZXJlZCBpbiBBdXRoSHViLjwvbGk+CjwvdWw+Cgo8aDQ+TUFNUyBpbnRlZ3JhdGlvbjwvaDQ+Cjx1bD4KICA8bGk+TUFNUyBwcmVmZXJlbmNlcyBtdXN0IGxpc3QgTUFTX0F1dGhIdWIgYXMgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZS48L2xpPgogIDxsaT5DbGVhciBNQU1TIGFuZCBDTVMgY2FjaGVzIGFmdGVyIGNoYW5naW5nIHByb3ZpZGVycyBvciBodWIgc2V0dGluZ3MuPC9saT4KPC91bD4KCjxoND5TdXBwb3J0PC9oND4KPHA+Rm9yIHNpdGUtc3BlY2lmaWMgaXNzdWVzIGNvbnRhY3QgPGEgaHJlZj0iaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3Q8L2E+PC9wPgogIDwvZGl2Pgo8L2Rpdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICB2YXIgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXMtZG9jLXRhYnMtaGVscCcpOwogIGlmICghcm9vdCB8fCAhcm9vdC5wYXJlbnROb2RlKSB7IHJldHVybjsgfQogIHZhciBjb250YWluZXIgPSByb290LnBhcmVudE5vZGU7CiAgdmFyIHRhYnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kb2MtdGFiJyk7CiAgdmFyIHNlY3Rpb25zID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtZG9jLXNlY3Rpb24nKTsKICB0YWJzLmZvckVhY2goZnVuY3Rpb24odGFiKSB7CiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpOwogICAgICB0YWJzLmZvckVhY2goZnVuY3Rpb24odCkgeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgICAgc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzKSB7IHMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICB2YXIgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpOwogICAgICBpZiAocGFuZWwpIHsgcGFuZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7IH0KICAgIH0pOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4K]]></help>
	<about><![CDATA[PHN0eWxlPgoubWFzLWRvYy10YWJzIHsgbWFyZ2luOiAyMHB4IDAgMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH0KLm1hcy1kb2MtdGFicyBhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAxMHB4IDIwcHg7IG1hcmdpbi1yaWdodDogNXB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMzMzOyB9Ci5tYXMtZG9jLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1kb2MtdGFicyBhOmhvdmVyIHsgYmFja2dyb3VuZDogI2U5ZTllOTsgfQoubWFzLWRvYy1jb250ZW50IHsgcGFkZGluZzogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZDogI2ZmZjsgfQoubWFzLWRvYy1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWRvYy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9Cjwvc3R5bGU+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLXRhYnMgbWFzLWRvYy10YWJzLWFib3V0Ij4KICA8YSBocmVmPSIjTUFTX0F1dGhIdWItYWJvdXQtbW9kdWxlIiBjbGFzcz0ibWFzLWRvYy10YWIgYWN0aXZlIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItYWJvdXQtbW9kdWxlIj5Nb2R1bGU8L2E+CiAgPGEgaHJlZj0iI01BU19BdXRoSHViLWFib3V0LWNvbXBhdCIgY2xhc3M9Im1hcy1kb2MtdGFiIiBkYXRhLXRhYj0iTUFTX0F1dGhIdWItYWJvdXQtY29tcGF0Ij5Db21wYXRpYmlsaXR5PC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1hYm91dC1zdW1tYXJ5IiBjbGFzcz0ibWFzLWRvYy10YWIiIGRhdGEtdGFiPSJNQVNfQXV0aEh1Yi1hYm91dC1zdW1tYXJ5Ij5TdW1tYXJ5PC9hPgogIDxhIGhyZWY9IiNNQVNfQXV0aEh1Yi1hYm91dC1jaGFuZ2Vsb2ciIGNsYXNzPSJtYXMtZG9jLXRhYiIgZGF0YS10YWI9Ik1BU19BdXRoSHViLWFib3V0LWNoYW5nZWxvZyI+Q2hhbmdlIGxvZzwvYT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLWNvbnRlbnQgbWFzLWRvYy1jb250ZW50LWFib3V0Ij4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1hYm91dC1tb2R1bGUiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24gYWN0aXZlIj4KICAgIDxoMz5Nb2R1bGU8L2gzPgoKPHA+PHN0cm9uZz5OYW1lPC9zdHJvbmc+IE1BUyBBdXRoSHViPC9wPgo8cD48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gMS4wLjk8L3A+CjxwPjxzdHJvbmc+QXV0aG9yPC9zdHJvbmc+IG1hc3RlcjMzOTU8L3A+CjxwPjxzdHJvbmc+RW1haWw8L3N0cm9uZz4gPGEgaHJlZj0ibWFpbHRvOmluZm9AbmV3c3RhcmdldGVkLmNvbSI+aW5mb0BuZXdzdGFyZ2V0ZWQuY29tPC9hPjwvcD4KPHA+PHN0cm9uZz5XZWJzaXRlPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vbmV3c3RhcmdldGVkLmNvbS9jb250YWN0LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+aHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvPC9hPjwvcD4KPHA+PHN0cm9uZz5MaWNlbnNlPC9zdHJvbmc+IE1JVDwvcD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJNQVNfQXV0aEh1Yi1hYm91dC1jb21wYXQiIGNsYXNzPSJtYXMtZG9jLXNlY3Rpb24iPgogICAgPGgzPkNvbXBhdGliaWxpdHk8L2gzPgoKPHA+PHN0cm9uZz5NaW5pbXVtIENNUyBNYWRlIFNpbXBsZTwvc3Ryb25nPiAyLjIuMTA8L3A+CjxwPjxzdHJvbmc+TWluaW11bSBQSFA8L3N0cm9uZz4gNy40LjA8L3A+Cgo8aDQ+UmVjb21tZW5kZWQgaW50ZWdyYXRpb25zPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPkNNU01TRXh0PC9zdHJvbmc+ICZndDs9IDEuMAogICAgICAgICAgKGluc3RhbGxlZCkKICAgICAgPC9saT4KICA8bGk+PHN0cm9uZz5NQU1TPC9zdHJvbmc+ICZndDs9IDEuMAogICAgICAgICAgKGluc3RhbGxlZCkKICAgICAgPC9saT4KPC91bD4KPHAgY2xhc3M9ImluZm9ybWF0aW9uIj5NQU1TUmVnaXN0cmF0aW9uIGlzIGluc3RhbGxlZCBhbmQgY2FuIGludGVyb3BlcmF0ZSB3aXRoIEF1dGhIdWIgZW1haWwtbGluayBwb2xpY2llcy48L3A+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItYWJvdXQtc3VtbWFyeSIgY2xhc3M9Im1hcy1kb2Mtc2VjdGlvbiI+CiAgICA8aDM+U3VtbWFyeTwvaDM+Cgo8cD5DZW50cmFsaXplZCBpZGVudGl0eSBhbmQgYWNjZXNzIG1hbmFnZW1lbnQ6IE9BdXRoMiwgT0lEQywgU0FNTCwgV2ViQXV0aG4sIENNU01TIGFkbWluIFNTTywgYW5kIE1BTVMgaW50ZWdyYXRpb24uPC9wPgoKPGg0PktleSBmZWF0dXJlczwvaDQ+Cjx1bD4KICA8bGk+T0F1dGgyIGFuZCBPcGVuSUQgQ29ubmVjdCBpZGVudGl0eSBwcm92aWRlcnM8L2xpPgogIDxsaT5TQU1MIDIuMCBzZXJ2aWNlIHByb3ZpZGVyPC9saT4KICA8bGk+V2ViQXV0aG4gcGFzc2tleXM8L2xpPgogIDxsaT5NQU1TIGZyb250ZW5kIFNTTyBhbmQgQ01TTVMgYWRtaW4gU1NPPC9saT4KICA8bGk+QXVkaXQgbG9nLCBzZXNzaW9ucywgYW5kIE9BdXRoIGNsaWVudCByZWdpc3RyeTwvbGk+CjwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iTUFTX0F1dGhIdWItYWJvdXQtY2hhbmdlbG9nIiBjbGFzcz0ibWFzLWRvYy1zZWN0aW9uIj4KICAgIDxoMz5DaGFuZ2UgbG9nPC9oMz4KCiAgPGRpdiBjbGFzcz0ibWFzX2FoX2NoYW5nZWxvZyI+IyBNQVNfQXV0aEh1YiBjaGFuZ2Vsb2c8YnIgLz4KPGJyIC8+CiMjIDEuMC45IC0gMjEvMDcvMjAyNjxiciAvPgo8YnIgLz4KIyMjIEZpeGVkPGJyIC8+CjxiciAvPgotICoqQ01TTVMgYWRtaW4gU1NPOioqIE9BdXRoIHN0YXJ0L2NhbGxiYWNrIGFuZCB0aGUgQ01TIGxvZ2luIGJyaWRnZSBleGlzdGVkIGluIDEuMC44LCBidXQgdGhlIGFkbWluIGxvZ2luIHBhZ2UgbmV2ZXIgaW52b2tlZCBgb2F1dGhfc3RhcnRgIHdpdGggYHJldHVybl90eXBlPWFkbWluYC4gQXV0aEh1YiBub3cgcmVnaXN0ZXJzIGBDb3JlOjpMb2dpbkF0dGVtcHRlZGAgYW5kIGluamVjdHMgcHJvdmlkZXIgYnV0dG9ucyB1bmRlciB0aGUgcGFzc3dvcmQgZm9ybSAob3B0aW9uYWwgYXV0by1yZWRpcmVjdCB0byB0aGUgSWRQKS48YnIgLz4KLSAqKkluc3RhbGwgc2NoZW1hIEFVVE9fSU5DUkVNRU5UOioqIFByb3ZpZGVyIGFuZCByZWxhdGVkIGBpZGAgY29sdW1ucyBub3cgdXNlIGBJIEtFWSBBVVRPIE5PVE5VTExgLiBVcGdyYWRlIGZyb20gMS4wLjggYWx0ZXJzIGV4aXN0aW5nIHRhYmxlcyBzbyBpbnNlcnRzIHdvcmsgd2l0aG91dCBhIG1hbnVhbCBgQVVUT19JTkNSRU1FTlRgIGZpeC48YnIgLz4KLSAqKkZyb250ZW5kIHBhcmFtczoqKiBSZW1vdmVkIHRoZSBlbXB0eSBgSW5pdGlhbGl6ZUZyb250ZW5kKClgIGBTZXRQYXJhbWV0ZXJUeXBlYCBsb29wLiBBY3Rpb25zIGFscmVhZHkgY2FzdCBhbmQgYWxsb3dsaXN0IE9BdXRoIHBhcmFtczsgTW9kdWxlQ2hlY2tlciByZWplY3RzIGxlZ2FjeSBgU2V0UGFyYW1ldGVyVHlwZWAgLyBgUmVzdHJpY3RVbmtub3duUGFyYW1zYC48YnIgLz4KLSAqKm1hbXNfYWx0X2xvZ2luLnRwbDoqKiBDb3JyZWN0ZWQgaW52YWxpZCBgJmx0Oy9tb3Rpb24mZ3Q7YCBjbG9zaW5nIHRhZyB0byBgJmx0Oy9kaXYmZ3Q7YC48YnIgLz4KPGJyIC8+CiMjIyBDaGFuZ2VkPGJyIC8+CjxiciAvPgotIFNldHRpbmdzOiBBZG1pbiBTU08gcHJlc2VudGF0aW9uIChidXR0b25zIHZzIGF1dG8tcmVkaXJlY3QpIGFuZCBvcHRpb25hbCBkZWZhdWx0IHByb3ZpZGVyLjxiciAvPgotIElkZW50aXR5IHByb3ZpZGVycyB0YWIgc2hvd3MgT0F1dGggY2FsbGJhY2sgVVJMIGFuZCBBZG1pbiBTU08gc3RhcnQgVVJMIHBlciBwcm92aWRlci48YnIgLz4KLSBIZWxwIC8gdHJvdWJsZXNob290aW5nIGRvY3VtZW50cyBhZG1pbiBsb2dpbiBTU08gYnV0dG9ucyBvbiBgL2FkbWluL2xvZ2luLnBocGAuPGJyIC8+CjxiciAvPgojIyAxLjAuOCAtIDAxLzA3LzIwMjY8YnIgLz4KPGJyIC8+Ci0gRG9uYXRpb25zIHRhYjogRG9uYXRlIGJ1dHRvbiBub3cgbGlua3MgdG8gUGF5UGFsLk1lIChLaW1CUykuPGJyIC8+Ci0gKipGb3JnZSAjMTI4Mzg6KiogUmVtb3ZlZCBoYXJkIGBHZXREZXBlbmRlbmNpZXMoKWAgb24gQ01TTVNFeHQgYW5kIE1BTVMgc28gY29weS1mb2xkZXIgdGVzdCBpbnN0YWxscyB3b3JrIHdpdGhvdXQgdGhlIE1vZHVsZSBNYW5hZ2VyIG1pc3NpbmctZGVwZW5kZW5jaWVzIHNjcmVlbi4gQ01TTVNFeHQgYW5kIE1BTVMgcmVtYWluIHJlY29tbWVuZGVkIGZvciBNQU1TIFNTTzsgQ29tcGF0aWJpbGl0eSB0YWIgc2hvd3MgaW5zdGFsbGVkL21pc3Npbmcgc3RhdHVzLiBNQU1TIGV2ZW50IGhhbmRsZXJzIHJlZ2lzdGVyIG9uIGluc3RhbGwgb25seSB3aGVuIHRob3NlIG1vZHVsZXMgYXJlIHByZXNlbnQuPGJyIC8+Ci0gKipPQXV0aCBjbGllbnRzOioqIFJlZGlyZWN0IFVSSXMgdGV4dGFyZWEgbm8gbG9uZ2VyIHVzZXMgNjAgcm93cyB3aGVuIGVtcHR5ICh3YXMgfjk3MHB4IHRhbGwpOyBub3cgNSByb3dzIHdpdGggc2Vuc2libGUgd2lkdGguPGJyIC8+Ci0gKipBdWRpdCBsb2c6KiogRml4ZWQgZW1wdHkgQXVkaXQgbG9nIHRhYiAoYGF1ZGl0LnRwbGAgZXhwZWN0ZWQgYCYjMDM2O3Jvd3NgIGJ1dCBQSFAgYXNzaWduZWQgYG1hc19hdXRoaHViX3Jvd3NgKS4gQWRtaW4gc2F2ZXMgKHNldHRpbmdzLCBwcm92aWRlcnMsIE9BdXRoIGNsaWVudHMsIE1BTVMgcG9saWN5LCBzZXNzaW9uL3Rva2VuIHJldm9rZSkgbm93IHdyaXRlIGF1ZGl0IGV2ZW50cy48YnIgLz4KLSAqKkF1ZGl0IGxvZyBVSToqKiBQYWdpbmF0aW9uICgyNSBwZXIgcGFnZSksIGdvLXRvLXBhZ2UsIHBlci1yb3cgZGVsZXRlLCBzZWxlY3QtYWxsIG9uIHBhZ2Ugd2l0aCBidWxrIGRlbGV0ZSwgYW5kIGNsZWFyLWFsbCB3aXRoIGNoZWNrYm94IHBsdXMgY29uZmlybWF0aW9uIGRpYWxvZy48YnIgLz4KLSAqKkF1ZGl0IGxvZyBVc2VyIGNvbHVtbjoqKiBTaG93cyBDTVMgb3IgTUFNUyB1c2VybmFtZSAod2l0aCBzb3VyY2UgdGFnKSBpbnN0ZWFkIG9mIG51bWVyaWMgSUQgb25seS48YnIgLz4KLSAqKkF1ZGl0IGxvZyBjbGVhci1hbGw6KiogQ29uZmlybWF0aW9uIGNoZWNrYm94IG5vdyBlbmFibGVzIHRoZSBDbGVhciBhbGwgbG9ncyBidXR0b24gaW4gT25lRWxldmVuL2pRdWVyeSBVSSAoZGVsZWdhdGVkIGNoYW5nZSBoYW5kbGVyLCBmcmVzaCBidXR0b24gbG9va3VwLCBwcm9wZXIgYGJ1dHRvbigmIzM5O2Rpc2FibGVkJiMzOTspYCBzeW5jKS48YnIgLz4KPGJyIC8+CiMjIDEuMC43IC0gMzAvMDYvMjAyNjxiciAvPgo8YnIgLz4KIyMjIEZpeGVkPGJyIC8+CjxiciAvPgotICoqTW9kdWxlIE1hbmFnZXIgQWJvdXQsIENoYW5nZSBsb2cgdGFiOioqIGBhYm91dF9jaGFuZ2Vsb2dfdGFiLnRwbGAgbm93IHVzZXMgYG1hc19jaGFuZ2Vsb2dfaHRtbGAgKHdhcyBgbWFzX2FoX2NoYW5nZWxvZ19odG1sYCwgc28gdGhlIHRhYiBhbHdheXMgc2hvd2VkIHRoZSBmYWxsYmFjayBtZXNzYWdlKS48YnIgLz4KLSAqKkNoYW5nZWxvZyBzb3VyY2U6KiogYEdldENoYW5nZUxvZygpYCBhbmQgYnVuZGxlZCBgTWFzX01vZHVsZV9Eb2NzOjpjaGFuZ2Vsb2dIdG1sKClgIHJlYWQgYHRvLWRvL0NIQU5HRUxPRy5tZGAgd2hlbiByb290IGBDSEFOR0VMT0cubWRgIGlzIGFic2VudC48YnIgLz4KLSAqKkhlbHAvQWJvdXQgdGFiIHZhcmlhYmxlczoqKiBFeHRyYSBTbWFydHkgYXNzaWducyAoY2hhbmdlbG9nLCBNQU1TUmVnaXN0cmF0aW9uIGZsYWcpIGFyZSBwYXNzZWQgdG8gbmVzdGVkIHRhYiBpbmNsdWRlcy48YnIgLz4KLSAqKkFib3V0IGVtYWlsIGRpc3BsYXk6KiogbWFpbHRvIGxpbmtzIG5vIGxvbmdlciB1c2UgYGVzY2FwZTomIzM5O3VybCYjMzk7YCAod2hpY2ggc2hvd2VkIGBAYCBhcyBgJTQwYCBpbiB0aGUgYWRtaW4gVUkpLjxiciAvPgo8YnIgLz4KIyMgMS4wLjYgLSAzMC8wNi8yMDI2PGJyIC8+CjxiciAvPgojIyMgRml4ZWQ8YnIgLz4KPGJyIC8+Ci0gKipGb3JnZSBpbnN0YWxsIGZhdGFsICgjMTI4MzcpOioqIEJ1bmRsZWQgTUFTIGFkbWluIFVJIHVuZGVyIGBsaWIvbWFzX2NvbW1vbi9gIHdpdGggYGxpYi9tYXNfY29tbW9uX2xvYWRlci5waHBgLiBGcmVzaCBpbnN0YWxscyBubyBsb25nZXIgcmVxdWlyZSBhIHNpYmxpbmcgYG1vZHVsZXMvTUFTX0NvbW1vbi9gIGZvbGRlci48YnIgLz4KLSAqKlBIUCA4LjQgaW5zdGFsbCBub2lzZToqKiBSZW1vdmVkIGVhZ2VyIGB2ZW5kb3IvYXV0b2xvYWQucGhwYCBmcm9tIGBtYXNfYWhfbG9hZGVyLnBocGA7IENvbXBvc2VyIGxpYnJhcmllcyBsb2FkIG9ubHkgd2hlbiBTQU1MLCBXZWJBdXRobiwgb3IgSldUIGNvZGUgcGF0aHMgcnVuLjxiciAvPgotICoqQWRtaW4gbGFuZ3VhZ2Ugc3RyaW5nczoqKiBgbGFuZy9lbl9VUy5waHBgIG5vdyBsb2FkcyBzaGFyZWQgTUFTIGRvY3MvYWRtaW4gZGVmYXVsdHMgdmlhIHRoZSBidW5kbGVkIGxvYWRlci48YnIgLz4KPGJyIC8+CiMjIyBDaGFuZ2VkPGJyIC8+CjxiciAvPgotIEhlbHAvQWJvdXQgZmFsbGJhY2sgdGFiIHRlbXBsYXRlcyBzaGlwIGFzIGB0ZW1wbGF0ZXMvbWFzX2NvbW1vbl8qLnRwbGAgaW5zaWRlIE1BU19BdXRoSHViIGZvciBzaXRlcyB3aXRob3V0IE1BU19Db21tb24gcmVnaXN0ZXJlZCBhcyBhIG1vZHVsZS48YnIgLz4KLSBSRUFETUUgYW5kIEZvcmdlIGByZWFkbWUubWRgIGNsYXJpZnkgQ01TTVNFeHQvTUFNUyBkZXBlbmRlbmNpZXMgYW5kIGJ1bmRsZWQgYWRtaW4gVUkuPGJyIC8+CjxiciAvPgojIyAxLjAuNSAtIDE5LzA1LzIwMjY8YnIgLz4KPGJyIC8+CiMjIyBDaGFuZ2VkPGJyIC8+CjxiciAvPgotICoqSGVscCBhbmQgQWJvdXQ6KiogVGFiYmVkIGRvY3VtZW50YXRpb24gbWF0Y2hpbmcgTG9nV2F0Y2ggc3R5bGUgKGB0ZW1wbGF0ZXMvaGVscC50cGxgLCBgdGVtcGxhdGVzL2Fib3V0LnRwbGAsIGFuZCBwZXItdGFiIGluY2x1ZGVzKS4gYEdldEhlbHAoKWAgYW5kIGBHZXRBYm91dCgpYCByZW5kZXIgU21hcnR5IHRlbXBsYXRlcyBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxhbmcgc3RyaW5nLjxiciAvPgotICoqQWRtaW4gYnJhbmRpbmc6KiogUmVmcmVzaGVkIGBpbWFnZXMvYmFubmVyLnBuZ2AgKDYwMHgxMjApLCBgaW1hZ2VzL2ljb24tMTkyLnBuZ2AsIGBpbWFnZXMvaWNvbi01MTIucG5nYCwgYW5kIGBpbWFnZXMvaWNvbi5naWZgICgzMngzMikgd2l0aCBpbmRpZ28gaWRlbnRpdHkgc3R5bGluZyBhbmQgYSBzaGllbGQva2V5IG1vdGlmLiBSZWdlbmVyYXRlIHZpYSBgVGVzdC9nZW5lcmF0ZV9icmFuZF9hc3NldHMucHlgLjxiciAvPgotICoqQ0ROIGNhY2hlOioqIE1vZHVsZSBpbWFnZSBVUkxzIG5vdyBhcHBlbmQgYD92PWZpbGVtdGltZWAgdmlhIGBNYXNfQWRtaW5fVWk6OnZlcnNpb25lZEFzc2V0VXJsKClgIGFuZCBPbmVFbGV2ZW4gYWRtaW4gdGhlbWUgbW9kdWxlIGhlYWRlciBpY29uLCBzbyBDbG91ZGZsYXJlIG5vIGxvbmdlciBzZXJ2ZXMgc3RhbGUgRGlzcXVzIGNvcGllcyBjYWNoZWQgdW5kZXIgYC9tb2R1bGVzL01BU19BdXRoSHViL2ltYWdlcy9gLiBIYXJkLXJlZnJlc2ggYWRtaW4gb25jZSBhZnRlciB1cGdyYWRlIGlmIG5lZWRlZC48YnIgLz4KPGJyIC8+CiMjIyBGaXhlZDxiciAvPgo8YnIgLz4KLSBgd2ViYXV0aG5fbG9naW4udHBsYDogaW52YWxpZCBjbG9zaW5nIHRhZyBjb3JyZWN0ZWQgdG8gYSBwcm9wZXIgYGRpdmAgZW5kIHRhZy48YnIgLz4KPGJyIC8+CiMjIDEuMC40IC0gMTkvMDUvMjAyNjxiciAvPgo8YnIgLz4KIyMjIEZpeGVkPGJyIC8+CjxiciAvPgotIENvcnJlY3QgYENyZWF0ZUxpbmsoKWAgLyBgbW9kdWxlQWN0aW9uVXJsKClgIGFyZ3VtZW50IG9yZGVyIChmaXhlcyBtb2Rmb3JtIGZvcmVhY2ggd2FybmluZ3MsIE9JREMgZGlzY292ZXJ5IHNob3dpbmcgJnF1b3Q7QXJyYXkmcXVvdDssIGFuZCBicm9rZW4gZnJvbnRlbmQgYWN0aW9uIFVSTHMpLjxiciAvPgotIEFkbWluIGV4cG9ydCBhbmQgcmV2b2tlIGxpbmtzIGJ1aWx0IGluIFBIUCBpbnN0ZWFkIG9mIGluY29ycmVjdCBTbWFydHkgYENyZWF0ZUxpbmtgIGNhbGxzLjxiciAvPgotIERvbmF0aW9ucyB0YWI6IGFkZGVkIGBkb25hdGlvbnN0ZXh0YCBhbmQgYHNwb25zb3JzYCBsYW5ndWFnZSBzdHJpbmdzLjxiciAvPgo8YnIgLz4KIyMjIENoYW5nZWQ8YnIgLz4KPGJyIC8+Ci0gUmVwbGFjZWQgRGlzcXVzLWNvcGllZCBgaW1hZ2VzL2Jhbm5lci5wbmdgIGFuZCBgaW1hZ2VzL2ljb24uZ2lmYCB3aXRoIE1BUyBBdXRoSHViIGJyYW5kaW5nIChibHVlIGlkZW50aXR5IHRoZW1lKS48YnIgLz4KPGJyIC8+CiMjIDEuMC4zIC0gMTkvMDUvMjAyNjxiciAvPgo8YnIgLz4KIyMjIEZpeGVkPGJyIC8+CjxiciAvPgotIEFkbWluIGRlZmF1bHRhZG1pbjogYENyZWF0ZUZvcm1TdGFydCgpYCBhcmd1bWVudCBvcmRlciAoYCYjMDM2O3BhcmFtc2Agd2FzIHBhc3NlZCBhcyBgJiMwMzY7ZXh0cmFgLCBjYXVzaW5nIG1vZGZvcm0gd2FybmluZ3MpLjxiciAvPgotIGBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoKWAgdHJlYXRzIGBHZXREZWZhdWx0Q29udGVudCgpYCBhcyBwYWdlIElEIChpbnQpLCBub3QgYSBjb250ZW50IG9iamVjdCAoZmF0YWwgb24gT0F1dGggY2xpZW50cyB0YWIpLjxiciAvPgotIFNldCBgJiMwMzY7YWN0aW9uaWQgPSAmIzAzNjtpZGAgZm9yIGluY2x1ZGVkIGFkbWluIHRhYiBzY3JpcHRzOyBPQXV0aCBjbGllbnRzIGZvcm0gdXNlcyBDTVNNUyBmb3JtIGhlbHBlcnMuPGJyIC8+CjxiciAvPgojIyAxLjAuMiAtIDE5LzA1LzIwMjY8YnIgLz4KPGJyIC8+CiMjIyBGaXhlZDxiciAvPgo8YnIgLz4KLSBgRG9FdmVudCgpYCBzaWduYXR1cmUgdXNlcyBgJmFtcDsmIzAzNjtwYXJhbXNgIHRvIG1hdGNoIGBDTVNNb2R1bGU6OkRvRXZlbnQoKWAgKE1vZHVsZSBNYW5hZ2VyIGZhdGFsIGVycm9yKS48YnIgLz4KLSBJbnN0YWxsIHNjaGVtYSB1c2VzIGBpZCBJIEtFWSBOT1ROVUxMYCAoQ01TTVMgQURPREIgY29udmVudGlvbikuPGJyIC8+Ci0gTUFNUyBjb25zdW1lciBjbGFzcyBsb2FkcyBvbmx5IGZyb20gYEdldE1BTVNBdXRoQ29uc3VtZXIoKWAgc28gbW9kdWxlIGxpc3QgZG9lcyBub3QgcmVxdWlyZSBNQU1TIGludGVyZmFjZSBhdCBib290c3RyYXAuPGJyIC8+CjxiciAvPgojIyAxLjAuMSAtIDE5LzA1LzIwMjY8YnIgLz4KPGJyIC8+CiMjIyBGaXhlZDxiciAvPgo8YnIgLz4KLSBSZW5hbWVkIHB1YmxpYyBzdGF0aWMgYGF1ZGl0KClgIHRvIGBsb2dBdWRpdCgpYCBzbyB0aGUgbW9kdWxlIGNsYXNzIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggZmluYWwgYENNU01vZHVsZTo6YXVkaXQoKWAgKGZhdGFsIGVycm9yIGluIE1vZHVsZSBNYW5hZ2VyKS48YnIgLz4KPGJyIC8+CiMjIDEuMC4wIC0gMTkvMDUvMjAyNjxiciAvPgo8YnIgLz4KIyMjIEFkZGVkPGJyIC8+CjxiciAvPgotIE1BU19BdXRoSHViIENNU01TIG1vZHVsZTogT0F1dGgyL09JREMgY2xpZW50LCBPQXV0aDIvT0lEQyBhdXRob3JpemF0aW9uIHNlcnZlciwgU0FNTCAyLjAgU1AsIFdlYkF1dGhuIHBhc3NrZXlzLjxiciAvPgotIENNU01TIGFkbWluIFNTTyBhbmQgTUFNUyBgR2V0TUFNU0F1dGhDb25zdW1lcigpYCBpbnRlZ3JhdGlvbiB3aXRob3V0IG1vZGlmeWluZyB0aGlyZC1wYXJ0eSBNQU1TIG1vZHVsZXMuPGJyIC8+Ci0gSHlicmlkIHNlY3JldHMgdmlhIHNpdGUgYGNvbmZpZy5waHBgIGBtYXNfYXV0aGh1YmAgYmxvY2sgYW5kIGVuY3J5cHRlZCBtb2R1bGUgcHJlZmVyZW5jZXMuPGJyIC8+Ci0gQXVkaXQgbG9nLCBzZXNzaW9uIGFuZCB0b2tlbiBtYW5hZ2VtZW50LCB1c2VyIGlkZW50aXR5IGxpbmtzIChDTVMgKyBNQU1TKS48YnIgLz4KLSBNQU1TUmVnaXN0cmF0aW9uIGhvb2sgbGlzdGVuZXJzIChiZWZvcmVOZXdVc2VyLCBvbk5ld1VzZXIsIG9uVXNlclJlZ2lzdGVyZWQpIGZyb20gQXV0aEh1YiBvbmx5LjxiciAvPgo8YnIgLz4KIyMjIE9wZXJhdG9yIG5vdGVzPGJyIC8+CjxiciAvPgotIFNldCBNQU1TIFByZWZlcmVuY2VzLCBBdXRoZW50aWNhdGlvbiBNb2R1bGUsIHRvIGBNQVNfQXV0aEh1YmAgZm9yIGFsdCBsb2dpbiBvbiBNQU1TIGZvcm1zLjxiciAvPgotIEFkZCBgbWFzX2F1dGhodWJgIGVuY3J5cHRpb24gYW5kIHByb3ZpZGVyIHNlY3JldHMgdG8gYGNvbmZpZy5waHBgIGJlZm9yZSBwcm9kdWN0aW9uIHVzZS48YnIgLz4KLSBSdW4gYGNvbXBvc2VyIGluc3RhbGxgIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGZvciBTQU1MIGFuZCBKV1QgbGlicmFyaWVzLjxiciAvPgo8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgdmFyIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWRvYy10YWJzLWFib3V0Jyk7CiAgaWYgKCFyb290IHx8ICFyb290LnBhcmVudE5vZGUpIHsgcmV0dXJuOyB9CiAgdmFyIGNvbnRhaW5lciA9IHJvb3QucGFyZW50Tm9kZTsKICB2YXIgdGFicyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWRvYy10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1kb2Mtc2VjdGlvbicpOwogIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0YWIpIHsKICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiJyk7CiAgICAgIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICBzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7CiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7CiAgICAgIGlmIChwYW5lbCkgeyBwYW5lbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsgfQogICAgfSk7CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0Pgo=]]></about>
	<description><![CDATA[Centralized identity and access management: OAuth2, OIDC, SAML, WebAuthn, CMSMS admin SSO, and MAMS integration.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.distignore</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KiovLmh0YWNjZXNzCi5odGFjY2Vzcwp2ZW5kb3IvCg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_settings_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CiRzZWN0aW9uID0gaXNzZXQoJHBhcmFtc1snYWRtaW5zZWN0aW9uJ10pID8gKHN0cmluZykgJHBhcmFtc1snYWRtaW5zZWN0aW9uJ10gOiAnZXh0ZW5zaW9ucyc7CiRhbGxvd2VkID0gYXJyYXkoJ2V4dGVuc2lvbnMnLCAnY29udGVudCcsICdzaXRlYWRtaW4nLCAndXNlcnNncm91cHMnLCAnbGF5b3V0JywgJ2Vjb21tZXJjZScpOwppZiAoIWluX2FycmF5KCRzZWN0aW9uLCAkYWxsb3dlZCwgdHJ1ZSkpIHsKICAgICRzZWN0aW9uID0gJ2V4dGVuc2lvbnMnOwp9CiR0aGlzLT5TZXRQcmVmZXJlbmNlKE1BU19BdXRoSHViOjpQUkVGX0FETUlOX1NFQ1RJT04sICRzZWN0aW9uKTsKaWYgKCFlbXB0eSgkcGFyYW1zWydzaG93ZG9uYXRpb25zdGFiJ10pKSB7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZWRvbmF0aW9uc3RhYicsICcnKTsKfSBlbHNlIHsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWRlZG9uYXRpb25zdGFiJywgJHRoaXMtPkdldFZlcnNpb24oKSk7Cn0KJGFkbWluVWlkID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfdXNlcmlkJykgPyAoaW50KSBnZXRfdXNlcmlkKGZhbHNlKSA6IDA7Ck1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4uYWRtaW5fc2V0dGluZ3Nfc2F2ZWQnLCAnaW5mbycsIGFycmF5KAogICAgJ2FkbWluc2VjdGlvbicgPT4gJHNlY3Rpb24sCiAgICAnc2hvd19kb25hdGlvbnNfdGFiJyA9PiAhZW1wdHkoJHBhcmFtc1snc2hvd2RvbmF0aW9uc3RhYiddKSA/IDEgOiAwLAopLCAkYWRtaW5VaWQsIDApOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZldGFiJyA9PiAnYWRtaW5zZXR0aW5ncycsICdtc2cnID0+ICdwcmVmc3VwZGF0ZWQnKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9hY3Rpb24ubWFtc19sb2dpbi5waHAnOwo=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19jb21tb25fbG9hZGVyLnBocCc7Cm1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUljb25HaWYoJHRoaXMpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUJhbm5lcigkdGhpcyk7Ck1hc19BZG1pbl9VaTo6ZW5zdXJlRm9yZ2VBc3NldHMoJHRoaXMpOwpNYXNfQWRtaW5fVWk6OmFzc2lnbkJyYW5kaW5nKCR0aGlzLCBjbXNtcygpLT5HZXRTbWFydHkoKSk7Ck1hc19BZG1pbl9VaTo6ZWNob1NldHRpbmdzQmFubmVyKCR0aGlzKTsKJGFjdGlvbmlkID0gJGlkOwppZiAoaXNzZXQoJHBhcmFtc1snaGlkZWRvbmF0aW9uc3N1Ym1pdCddKSkgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInLCAkdGhpcy0+R2V0VmVyc2lvbigpKTsKfQppZiAoIWVtcHR5KCRwYXJhbXNbJ21zZyddKSkgewogICAgJG1zZ0tleSA9IGlzc2V0KCRwYXJhbXNbJ21zZyddKSA/IChzdHJpbmcpICRwYXJhbXNbJ21zZyddIDogJyc7IGlmICgkbXNnS2V5ICE9PSAnJykgeyBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygkbXNnS2V5KSk7IH0KfQokYWN0aXZldGFiID0gaXNzZXQoJHBhcmFtc1snYWN0aXZldGFiJ10pID8gKHN0cmluZykgJHBhcmFtc1snYWN0aXZldGFiJ10gOiAnc2V0dGluZ3MnOwplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5ncycsICR0aGlzLT5MYW5nKCdzZXR0aW5ncycpLCAkYWN0aXZldGFiID09PSAnc2V0dGluZ3MnKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwcm92aWRlcnMnLCAkdGhpcy0+TGFuZygndGFiX3Byb3ZpZGVycycpLCAkYWN0aXZldGFiID09PSAncHJvdmlkZXJzJyk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWFtcycsICR0aGlzLT5MYW5nKCd0YWJfbWFtcycpLCAkYWN0aXZldGFiID09PSAnbWFtcycpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ29hdXRoX2NsaWVudHMnLCAkdGhpcy0+TGFuZygndGFiX29hdXRoX2NsaWVudHMnKSwgJGFjdGl2ZXRhYiA9PT0gJ29hdXRoX2NsaWVudHMnKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXNzaW9ucycsICR0aGlzLT5MYW5nKCd0YWJfc2Vzc2lvbnMnKSwgJGFjdGl2ZXRhYiA9PT0gJ3Nlc3Npb25zJyk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignYXVkaXQnLCAkdGhpcy0+TGFuZygndGFiX2F1ZGl0JyksICRhY3RpdmV0YWIgPT09ICdhdWRpdCcpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2FkbWluc2V0dGluZ3MnLCAkdGhpcy0+TGFuZygndGFiX2FkbWluc2V0dGluZ3MnKSwgJGFjdGl2ZXRhYiA9PT0gJ2FkbWluc2V0dGluZ3MnKTsKaWYgKCR0aGlzLT5TaG93RG9uYXRpb25zVGFiKCkpIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZG9uYXRpb25zJywgJHRoaXMtPkxhbmcoJ2RvbmF0aW9uc3RhYicpLCAkYWN0aXZldGFiID09PSAnZG9uYXRpb25zJyk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NldHRpbmdzJyk7CmluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLnNldHRpbmdzLnBocCc7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwplY2hvICR0aGlzLT5TdGFydFRhYigncHJvdmlkZXJzJyk7CmluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLnByb3ZpZGVycy5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ21hbXMnKTsKaW5jbHVkZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvZnVuY3Rpb24ubWFtc19wb2xpY3kucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdvYXV0aF9jbGllbnRzJyk7CmluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLm9hdXRoX2NsaWVudHMucGhwJzsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXNzaW9ucycpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5zZXNzaW9ucy5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2F1ZGl0Jyk7CmluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLmF1ZGl0LnBocCc7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwplY2hvICR0aGlzLT5TdGFydFRhYignYWRtaW5zZXR0aW5ncycpOwppbmNsdWRlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5hZG1pbl9zZXR0aW5ncy5waHAnOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKaWYgKCR0aGlzLT5TaG93RG9uYXRpb25zVGFiKCkpIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkb25hdGlvbnMnKTsKICAgIGluY2x1ZGUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Z1bmN0aW9uLmRvbmF0aW9ucy5waHAnOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.mams_login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokcHJvdmlkZXJzID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpsaXN0UHJvdmlkZXJzKCR0aGlzLCB0cnVlKTsKJGxpbmtzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHByb3ZpZGVycyBhcyAkcCkgewogICAgJGxpbmtzW10gPSBhcnJheSgKICAgICAgICAnbmFtZScgPT4gJHBbJ25hbWUnXSwKICAgICAgICAndXJsJyA9PiBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJHRoaXMsICdvYXV0aF9zdGFydCcsIGFycmF5KAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IChpbnQpICRwWydpZCddLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+ICdtYW1zJywKICAgICAgICApKSwKICAgICk7Cn0KJHNtYXJ0eSA9IGNtc191dGlsczo6Z2V0X3NtYXJ0eSgpOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfcHJvdmlkZXJzJywgJGxpbmtzKTsKJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfd2ViYXV0aG5fdXJsJywgTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLCAnd2ViYXV0aG4nLCBhcnJheSgnbW9kZScgPT4gJ2xvZ2luJywgJ3JldHVybl90eXBlJyA9PiAnbWFtcycpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnbWFtc19hbHRfbG9naW4udHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.oauth_authorize.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokY2xpZW50SWQgPSBpc3NldCgkcGFyYW1zWydjbGllbnRfaWQnXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydjbGllbnRfaWQnXSA6IChzdHJpbmcpIChmaWx0ZXJfaW5wdXQoSU5QVVRfR0VULCAnY2xpZW50X2lkJywgRklMVEVSX1VOU0FGRV9SQVcpID86ICcnKTsKJHJlZGlyZWN0VXJpID0gaXNzZXQoJHBhcmFtc1sncmVkaXJlY3RfdXJpJ10pID8gKHN0cmluZykgJHBhcmFtc1sncmVkaXJlY3RfdXJpJ10gOiAoc3RyaW5nKSAoZmlsdGVyX2lucHV0KElOUFVUX0dFVCwgJ3JlZGlyZWN0X3VyaScsIEZJTFRFUl9VTlNBRkVfUkFXKSA/OiAnJyk7CiRzY29wZSA9IGlzc2V0KCRwYXJhbXNbJ3Njb3BlJ10pID8gKHN0cmluZykgJHBhcmFtc1snc2NvcGUnXSA6IChzdHJpbmcpIChmaWx0ZXJfaW5wdXQoSU5QVVRfR0VULCAnc2NvcGUnLCBGSUxURVJfVU5TQUZFX1JBVykgPzogJ29wZW5pZCcpOwokc3RhdGUgPSBpc3NldCgkcGFyYW1zWydzdGF0ZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3N0YXRlJ10gOiAoc3RyaW5nKSAoZmlsdGVyX2lucHV0KElOUFVUX0dFVCwgJ3N0YXRlJywgRklMVEVSX1VOU0FGRV9SQVcpID86ICcnKTsKJGNsaWVudCA9IE1hc19BaF9PYXV0aFNlcnZlcjo6Z2V0Q2xpZW50KCR0aGlzLCAkY2xpZW50SWQpOwppZiAoISRjbGllbnQpIHsKICAgIGhlYWRlcignSFRUUC8xLjEgNDAwIEJhZCBSZXF1ZXN0Jyk7CiAgICBlY2hvICdpbnZhbGlkX2NsaWVudCc7CiAgICBleGl0Owp9CiR1aWQgPSBpc3NldCgkX1NFU1NJT05bJ2Ntc191c2VyaWQnXSkgPyAoaW50KSAkX1NFU1NJT05bJ2Ntc191c2VyaWQnXSA6IDA7CmlmICgkdWlkIDwgMSkgewogICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgcmVkaXJlY3QoJGNvbmZpZ1snYWRtaW5fdXJsJ10gLiAnL2xvZ2luLnBocCcpOwp9CiRjb2RlID0gTWFzX0FoX09hdXRoU2VydmVyOjpjcmVhdGVBdXRoQ29kZSgkdGhpcywgYXJyYXkoCiAgICAnY2xpZW50X2lkJyA9PiAkY2xpZW50SWQsCiAgICAndXNlcl9pZCcgPT4gJHVpZCwKICAgICdzY29wZXMnID0+ICRzY29wZSwKICAgICdyZWRpcmVjdF91cmknID0+ICRyZWRpcmVjdFVyaSwKKSk7CiRzZXAgPSBzdHJwb3MoJHJlZGlyZWN0VXJpLCAnPycpID09PSBmYWxzZSA/ICc/JyA6ICcmJzsKcmVkaXJlY3QoJHJlZGlyZWN0VXJpIC4gJHNlcCAuIGh0dHBfYnVpbGRfcXVlcnkoYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnc3RhdGUnID0+ICRzdGF0ZSkpKTsK]]></data>
	</file>
	<file>
	  <filename>/action.oauth_callback.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokcHJvdmlkZXJJZCA9IChpbnQpICgkcGFyYW1zWydwcm92aWRlcl9pZCddID8/IDApOwokcHJvdmlkZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldFByb3ZpZGVyKCR0aGlzLCAkcHJvdmlkZXJJZCk7CmlmICghJHByb3ZpZGVyKSB7CiAgICAkX19tY19vdXQgPSAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7IGVjaG8gJF9fbWNfb3V0OwogICAgcmV0dXJuOwp9CiRkcml2ZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldCgoc3RyaW5nKSAkcHJvdmlkZXJbJ2RyaXZlciddKTsKaWYgKCEkZHJpdmVyKSB7CiAgICAkX19tY19vdXQgPSAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7IGVjaG8gJF9fbWNfb3V0OwogICAgcmV0dXJuOwp9CiRvaWRjID0gKChzdHJpbmcpICRwcm92aWRlclsnZHJpdmVyJ10gPT09ICdvaWRjJyk7CiRyZXN1bHQgPSBNYXNfQWhfUm91dGVyOjpoYW5kbGVPQXV0aENhbGxiYWNrKCR0aGlzLCAkcHJvdmlkZXIsICRwYXJhbXMsIGFycmF5KCksICRvaWRjKTsKaWYgKCFlbXB0eSgkcmVzdWx0WydyZWRpcmVjdF9hZG1pbiddKSkgewogICAgTWFzX0FoX0Ntc0xvZ2luQnJpZGdlOjpyZWRpcmVjdEFmdGVyTG9naW4oKTsKICAgIHJldHVybjsKfQppZiAoIWVtcHR5KCRyZXN1bHRbJ3N1Y2Nlc3MnXSkgJiYgKCRyZXN1bHRbJ3R5cGUnXSA/PyAnJykgPT09ICdtYW1zJykgewogICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgJHVybCA9IGlzc2V0KCRwYXJhbXNbJ3JlZGlyZWN0J10pID8gKHN0cmluZykgJHBhcmFtc1sncmVkaXJlY3QnXSA6ICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICByZWRpcmVjdCgkdXJsKTsKICAgIHJldHVybjsKfQokX19tY19vdXQgPSAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7IGVjaG8gJF9fbWNfb3V0Owo=]]></data>
	</file>
	<file>
	  <filename>/action.oauth_start.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokcHJvdmlkZXJJZCA9IChpbnQpICgkcGFyYW1zWydwcm92aWRlcl9pZCddID8/IDApOwokcmV0dXJuVHlwZSA9IGlzc2V0KCRwYXJhbXNbJ3JldHVybl90eXBlJ10pID8gKHN0cmluZykgJHBhcmFtc1sncmV0dXJuX3R5cGUnXSA6ICdtYW1zJzsKJHJlc3VsdCA9IE1hc19BaF9Sb3V0ZXI6OnN0YXJ0T0F1dGgoJHRoaXMsICRwcm92aWRlcklkLCAkcmV0dXJuVHlwZSk7CmlmICghZW1wdHkoJHJlc3VsdFsncmVkaXJlY3QnXSkpIHsKICAgIHJlZGlyZWN0KCRyZXN1bHRbJ3JlZGlyZWN0J10sIHRydWUpOwp9CiRfX21jX291dCA9ICc8cD4nIC4gY21zX2h0bWxlbnRpdGllcygkdGhpcy0+TGFuZygnZXJyb3JfZ2VuZXJpYycpKSAuICc8L3A+JzsgZWNobyAkX19tY19vdXQ7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.oauth_token.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwppZiAoIU1hc19BaF9Qb2xpY3k6OnJhdGVMaW1pdEFsbG93KCR0aGlzLCAnb2F1dGhfdG9rZW5fJyAuIGNtc191dGlsczo6Z2V0X3JlYWxfaXAoKSkpIHsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MjkpOwogICAgZWNobyBqc29uX2VuY29kZShhcnJheSgnZXJyb3InID0+ICdyYXRlX2xpbWl0ZWQnKSwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQokaW5wdXQgPSAkX1BPU1Q7CmlmIChlbXB0eSgkaW5wdXQpKSB7CiAgICAkcmF3ID0gZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0Jyk7CiAgICBwYXJzZV9zdHIoJHJhdywgJGlucHV0KTsKfQokZ3JhbnQgPSBpc3NldCgkaW5wdXRbJ2dyYW50X3R5cGUnXSkgPyAoc3RyaW5nKSAkaW5wdXRbJ2dyYW50X3R5cGUnXSA6ICcnOwokY2xpZW50SWQgPSBpc3NldCgkaW5wdXRbJ2NsaWVudF9pZCddKSA/IChzdHJpbmcpICRpbnB1dFsnY2xpZW50X2lkJ10gOiAnJzsKJGNsaWVudCA9IE1hc19BaF9PYXV0aFNlcnZlcjo6Z2V0Q2xpZW50KCR0aGlzLCAkY2xpZW50SWQpOwppZiAoISRjbGllbnQgfHwgIU1hc19BaF9PYXV0aFNlcnZlcjo6dmVyaWZ5Q2xpZW50U2VjcmV0KCRjbGllbnQsIChzdHJpbmcpICgkaW5wdXRbJ2NsaWVudF9zZWNyZXQnXSA/PyAnJykpKSB7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNDAxKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoJ2Vycm9yJyA9PiAnaW52YWxpZF9jbGllbnQnKSwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgZXhpdDsKfQppZiAoJGdyYW50ID09PSAnYXV0aG9yaXphdGlvbl9jb2RlJykgewogICAgJHRva2VucyA9IE1hc19BaF9PYXV0aFNlcnZlcjo6ZXhjaGFuZ2VDb2RlKAogICAgICAgICR0aGlzLAogICAgICAgIChzdHJpbmcpICgkaW5wdXRbJ2NvZGUnXSA/PyAnJyksCiAgICAgICAgJGNsaWVudElkLAogICAgICAgIChzdHJpbmcpICgkaW5wdXRbJ3JlZGlyZWN0X3VyaSddID8/ICcnKQogICAgKTsKICAgIGlmICghJHRva2VucykgewogICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDApOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoJ2Vycm9yJyA9PiAnaW52YWxpZF9ncmFudCcpLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIGVjaG8ganNvbl9lbmNvZGUoJHRva2VucywgSlNPTl9QUkVUVFlfUFJJTlQgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICBleGl0Owp9Cmh0dHBfcmVzcG9uc2VfY29kZSg0MDApOwplY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ3Vuc3VwcG9ydGVkX2dyYW50X3R5cGUnKSwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.oidc_discovery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwokZG9jID0gTWFzX0FoX09pZGNEaXNjb3Zlcnk6OmRvY3VtZW50KCR0aGlzKTsKZWNobyBqc29uX2VuY29kZSgkZG9jLCBKU09OX1BSRVRUWV9QUklOVCB8IEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsK]]></data>
	</file>
	<file>
	  <filename>/action.saml_acs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokcHJvdmlkZXJJZCA9IChpbnQpICgkcGFyYW1zWydwcm92aWRlcl9pZCddID8/IDApOwppZiAoJHByb3ZpZGVySWQgPCAxICYmIHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSAmJiBpc3NldCgkX1NFU1NJT05bJ21hc19haF9zYW1sX3Byb3ZpZGVyJ10pKSB7CiAgICAkcHJvdmlkZXJJZCA9IChpbnQpICRfU0VTU0lPTlsnbWFzX2FoX3NhbWxfcHJvdmlkZXInXTsKfQokcHJvdmlkZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldFByb3ZpZGVyKCR0aGlzLCAkcHJvdmlkZXJJZCk7CmlmICghJHByb3ZpZGVyKSB7CiAgICAkX19tY19vdXQgPSAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7IGVjaG8gJF9fbWNfb3V0OwogICAgcmV0dXJuOwp9CiRyZXN1bHQgPSBNYXNfQWhfUm91dGVyOjpoYW5kbGVTYW1sQWNzKCR0aGlzLCAkcHJvdmlkZXIsICRfUE9TVCwgYXJyYXkoKSk7CmlmICghZW1wdHkoJHJlc3VsdFsncmVkaXJlY3RfYWRtaW4nXSkpIHsKICAgIE1hc19BaF9DbXNMb2dpbkJyaWRnZTo6cmVkaXJlY3RBZnRlckxvZ2luKCk7CiAgICByZXR1cm47Cn0KaWYgKCFlbXB0eSgkcmVzdWx0WydzdWNjZXNzJ10pKSB7CiAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgICByZWRpcmVjdCgkY29uZmlnWydyb290X3VybCddKTsKICAgIHJldHVybjsKfQokX19tY19vdXQgPSAnPHA+JyAuIGNtc19odG1sZW50aXRpZXMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dlbmVyaWMnKSkgLiAnPC9wPic7IGVjaG8gJF9fbWNfb3V0Owo=]]></data>
	</file>
	<file>
	  <filename>/action.saml_metadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwokcHJvdmlkZXJJZCA9IChpbnQpICgkcGFyYW1zWydwcm92aWRlcl9pZCddID8/IDApOwokcHJvdmlkZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldFByb3ZpZGVyKCR0aGlzLCAkcHJvdmlkZXJJZCk7CmlmICghJHByb3ZpZGVyKSB7CiAgICBoZWFkZXIoJ0hUVFAvMS4xIDQwNCBOb3QgRm91bmQnKTsKICAgIGV4aXQ7Cn0KJGF1dG9sb2FkID0gZGlybmFtZShfX0ZJTEVfXykgLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnOwppZiAoIWlzX3JlYWRhYmxlKCRhdXRvbG9hZCkpIHsKICAgIGhlYWRlcignSFRUUC8xLjEgNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUnKTsKICAgIGVjaG8gJ1NBTUwgbGlicmFyeSBub3QgaW5zdGFsbGVkLiBSdW4gY29tcG9zZXIgaW5zdGFsbCBpbiBtb2R1bGVzL01BU19BdXRoSHViLic7CiAgICBleGl0Owp9CnJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiRwa2V5ID0gaXNzZXQoJHByb3ZpZGVyWydwcm92aWRlcl9rZXknXSkgPyAkcHJvdmlkZXJbJ3Byb3ZpZGVyX2tleSddIDogKCdwcm92aWRlcl8nIC4gJHByb3ZpZGVyWydpZCddKTsKJHNldHRpbmdzID0gTWFzX0FoX1JvdXRlcjo6YnVpbGRTYW1sU2V0dGluZ3MoJHRoaXMsICRwcm92aWRlciwgJGNmZywgJHBrZXkpOwp0cnkgewogICAgJG1ldGEgPSBuZXcgT25lTG9naW5cU2FtbDJcU2V0dGluZ3MoJHNldHRpbmdzLCB0cnVlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD11dGYtOCcpOwogICAgZWNobyAkbWV0YS0+Z2V0U1BNZXRhZGF0YSgpOwp9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgIGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOwogICAgZWNobyAnTWV0YWRhdGEgZXJyb3IuJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/action.save_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX2FkbWluX3NzbycsICFlbXB0eSgkcGFyYW1zWydlbmFibGVfYWRtaW5fc3NvJ10pID8gJzEnIDogJzAnKTsKJG1vZGUgPSBpc3NldCgkcGFyYW1zWydhZG1pbl9zc29fbW9kZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ2FkbWluX3Nzb19tb2RlJ10gOiAnYnV0dG9ucyc7CmlmICghaW5fYXJyYXkoJG1vZGUsIGFycmF5KCdidXR0b25zJywgJ3JlZGlyZWN0JyksIHRydWUpKSB7CiAgICAkbW9kZSA9ICdidXR0b25zJzsKfQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2FkbWluX3Nzb19tb2RlJywgJG1vZGUpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyJywgbWF4KDAsIChpbnQpICgkcGFyYW1zWydhZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlciddID8/IDApKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZV9tYW1zX3NzbyddKSA/ICcxJyA6ICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYXV0b19saW5rX2VtYWlsJywgIWVtcHR5KCRwYXJhbXNbJ2F1dG9fbGlua19lbWFpbCddKSA/ICcxJyA6ICcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfc2Vzc2lvbl90dGwnLCBtYXgoMzAwLCAoaW50KSAoJHBhcmFtc1snc2Vzc2lvbl90dGwnXSA/PyAzNjAwKSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JhdGVfcGVyX2hvdXInLCBtYXgoMSwgKGludCkgKCRwYXJhbXNbJ3JhdGVfcGVyX2hvdXInXSA/PyA2MCkpKTsKJGFkbWluVWlkID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfdXNlcmlkJykgPyAoaW50KSBnZXRfdXNlcmlkKGZhbHNlKSA6IDA7Ck1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4uc2V0dGluZ3Nfc2F2ZWQnLCAnaW5mbycsIGFycmF5KAogICAgJ2VuYWJsZV9hZG1pbl9zc28nID0+ICFlbXB0eSgkcGFyYW1zWydlbmFibGVfYWRtaW5fc3NvJ10pID8gMSA6IDAsCiAgICAnYWRtaW5fc3NvX21vZGUnID0+ICRtb2RlLAogICAgJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyJyA9PiBtYXgoMCwgKGludCkgKCRwYXJhbXNbJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyJ10gPz8gMCkpLAogICAgJ2VuYWJsZV9tYW1zX3NzbycgPT4gIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZV9tYW1zX3NzbyddKSA/IDEgOiAwLAogICAgJ2F1dG9fbGlua19lbWFpbCcgPT4gIWVtcHR5KCRwYXJhbXNbJ2F1dG9fbGlua19lbWFpbCddKSA/IDEgOiAwLAogICAgJ3Nlc3Npb25fdHRsJyA9PiBtYXgoMzAwLCAoaW50KSAoJHBhcmFtc1snc2Vzc2lvbl90dGwnXSA/PyAzNjAwKSksCiAgICAncmF0ZV9wZXJfaG91cicgPT4gbWF4KDEsIChpbnQpICgkcGFyYW1zWydyYXRlX3Blcl9ob3VyJ10gPz8gNjApKSwKKSwgJGFkbWluVWlkLCAwKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ3NldHRpbmdzJywgJ21zZycgPT4gJ3ByZWZzdXBkYXRlZCcpKTsK]]></data>
	</file>
	<file>
	  <filename>/action.webauthn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID8/ICcnKSA9PT0gJ1BPU1QnICYmIHN0cnBvcygkX1NFUlZFUlsnQ09OVEVOVF9UWVBFJ10gPz8gJycsICdhcHBsaWNhdGlvbi9qc29uJykgIT09IGZhbHNlKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgJHJlc3VsdCA9IE1hc19BaF9XZWJhdXRobjo6aGFuZGxlUmVxdWVzdCgkdGhpcywgJHBhcmFtcyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXN1bHQsIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgcmV0dXJuOwp9CiRyZXR1cm5UeXBlID0gaXNzZXQoJHBhcmFtc1sncmV0dXJuX3R5cGUnXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydyZXR1cm5fdHlwZSddIDogJ21hbXMnOwokc21hcnR5ID0gY21zX3V0aWxzOjpnZXRfc21hcnR5KCk7CiRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwokc21hcnR5LT5hc3NpZ24oJ21hc19haF9yZXR1cm5fdHlwZScsICRyZXR1cm5UeXBlKTsKJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfd2ViYXV0aG5fcG9zdCcsIE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkdGhpcywgJ3dlYmF1dGhuJywgYXJyYXkoJ21vZGUnID0+ICdsb2dpbicsICdyZXR1cm5fdHlwZScgPT4gJHJldHVyblR5cGUpKSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnd2ViYXV0aG5fbG9naW4udHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/assets/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/assets/banner-772x250.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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AAAA2GhADAEAAAAAsNGAGAIAAAAAYKMBMQQAAAAAwEYDYggAAAAAgI0GxBAAAAAAABsNiCEAAAAAADYaEEMAAAAAAGw0IIYAAAAAANhoQAwBAAAAALDRgBgCAAAAAGCjATEEAAAAAMBGA2IIAAAAAICNBsQQAAAAAAAbDYghAAAAAAA2GhBDAAAAAABsNCCGAAAAAADYaEAMAQAAAACw0YAYAgAAAABgowExBAAAAADARgNiCAAAAACAjQbEEAAAAAAAGw2IIQAAAAAANhoQQwAAAAAAbDQghgAAAAAA2GhADAEAAAAAsNGAGAIAAAAAYKMBMQQAAAAAwEYDYggAAAAAgI0GxBAAAAAAABsNiCEAAAAAADYaEEMAAAAAAGw0IIYAAAAAANhoQAwBAAAAALDRgBgCAAAAAGCjATEEAAAAAMBGA2IIAAAAAICNBsQQAAAAAAAbDYghAAAAAAA2GhBDAAAAAABsNCCGAAAAAADYaEAMAQAAAACw0YAYAgAAAABgowExBAAAAADARgNiCAAAAACAjQbEEAAAAAAAGw2IIQAAAAAANhoQQwAAAAAAbDQghgAAAAAA2GhADAEAAAAAsNGAGAIAAAAAYKMBMQQAAAAAwEYDYggAAAAAgI0GxBAAAAAAABsNiCEAAAAAADYaEEMAAAAAAGw0IIYAAAAAANhoQAwBAAAAALDRgBgCAAAAAGCjATEEAAAAAMBGA2IIAAAAAICNBsQQAAAAAAAbDYghAAAAAAA2GhBDAAAAAABsNCCGAAAAAADYaEAMAQAAAACw0YAYAgAAAABgo/n/A2uNufAPJu1KAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/assets/banner-1544x500.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAABggAAAH0CAIAAABn/zFJAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAA4ADQAmyytT7gAAAAHdElNRQfqBxUBMhq/PC7FAACAAElEQVR42uz9SXsbybYuaNqyzhs0JNVF7HvuU1nDO6nMJ3NQv7T+Vo4ra5qZ5+yIkNih8c6aVQNzdzgIkAQlSqKE793aDDaAN+YNYAvLltH/+3/7/4iTseDxKwlKX1nw+P3TT959TQ8knvyGdr8Z/vyC7TpYtBD88uVMlyYmz017vVsaTR73+Dpedat4slWprdJv+nb7Xm119NGT3/DkOae1ymts1WlLS99OtqpvNzpxA7/pbH96q95mW03Pdp6c7Sedbj9iq753W73C2X7Shr/FtvrJZ/ujD+fd19/13v4tR3BvQ4a24umF+vve27/lbGcevxKluxwx8/j9T9mqX+CdDI+vobw7x162gb/svf1btmrXbi86sL/Fvf2lbXX4evr4YZus8Le7t3/DVqV3a4fv2Ybf8Pibt3+/+qFnO3qp6KW+0ladtrT07VvrpbJ84dMAAAAAAAAAAOA3gcAQAAAAAAAAAMCZQmAIAAAAAAAAAOBMITAEAAAAAAAAAHCmEBgCAAAAAAAAADhTCAwBAAAAAAAAAJwpBIYAAAAAAAAAAM4UAkMAAAAAAAAAAGcKgSEAAAAAAAAAgDOFwBAAAAAAAAAAwJlCYAgAAAAAAAAA4EwhMAQAAAAAAAAAcKYQGAIAAAAAAAAAOFMIDAEAAAAAAAAAnCkEhgAAAAAAAAAAzhQCQwAAAAAAAAAAZwqBIQAAAAAAAACAM4XAEAAAAAAAAADAmUJgCAAAAAAAAADgTCEwBAAAAAAAAABwphAYAgAAAAAAAAA4UwgMAQAAAAAAAACcKQSGAAAAAAAAAADOFAJDAAAAAAAAAABnCoEhAAAAAAAAAIAzhcAQAAAAAAAAAMCZQmAIAAAAAAAAAOBMITAEAAAAAAAAAHCmEBgCAAAAAAAAADhTCAwBAAAAAAAAAJwpBIYAAAAAAAAAAM4UAkMAAAAAAAAAAGcKgSEAAAAAAAAAgDOFwBAAAAAAAAAAwJlCYAgAAAAAAAAA4EwhMAQAAAAAAAAAcKYQGAIAAAAAAAAAOFMIDAEAAAAAAAAAnCkEhgAAAAAAAAAAzhQCQwAAAAAAAAAAZwqBIQAAAAAAAACAM4XAEAAAAAAAAADAmUJgCAAAAAAAAADgTCEwBAAAAAAAAABwphAYAgAAAAAAAAA4UwgMAQAAAAAAAACcKQSGAAAAAAAAAADOFAJDAAAAAAAAAABnCoEhAAAAAAAAAIAzhcAQAAAAAAAAAMCZQmAIAAAAAAAAAOBMITAEAAAAAAAAAHCmEBgCAAAAAAAAADhTCAwBAAAAAAAAAJwpBIYAAAAAAAAAAM4UAkMAAAAAAAAAAGcKgSEAAAAAAAAAgDOFwBAAAAAAAAAAwJlCYAgAAAAAAAAA4EwhMAQAAAAAAAAAcKYQGAIAAAAAAAAAOFMIDAEAAAAAAAAAnCkEhgAAAAAAAAAAzhQCQwAAAAAAAAAAZwqBIQAAAAAAAACAM4XAEAAAAAAAAADAmUJgCAAAAAAAAADgTCEwBAAAAAAAAABwphAYAgAAAAAAAAA4UwgMAQAAAAAAAACcKQSGAAAAAAAAAADOFAJDAAAAAAAAAABnCoEhAAAAAAAAAIAzhcAQAAAAAAAAAMCZQmAIAAAAAAAAAOBMITAEAAAAAAAAAHCmEBgCAAAAAAAAADhTCAwBAAAAAAAAAJwpBIYAAAAAAAAAAM4UAkMAAAAAAAAAAGcKgSEAAAAAAAAAgDOFwBAAAAAAAAAAwJlCYAgAAAAAAAAA4EwhMAQAAAAAAAAAcKYQGAIAAAAAAAAAOFMIDAEAAAAAAAAAnCkEhgAAAAAAAAAAzhQCQwAAAAAAAAAAZwqBIQAAAAAAAACAM4XAEAAAAAAAAADAmUJgCAAAAAAAAADgTCEwBAAAAAAAAABwphAYAgAAAAAAAAA4UwgMAQAAAAAAAACcKQSGAAAAAAAAAADOFAJDAAAAAAAAAABnCoEhAAAAAAAAAIAzhcAQAAAAAAAAAMCZQmAIAAAAAAAAAOBMITAEAAAAAAAAAHCmEBgCAAAAAAAAADhTCAwBAAAAAAAAAJwpBIYAAAAAAAAAAM4UAkMAAAAAAAAAAGcKgSEAAAAAAAAAgDOFwBAAAAAAAAAAwJlCYAgAAAAAAAAA4EwhMAQAAAAAAAAAcKYQGAIAAAAAAAAAOFMIDAEAAAAAAAAAnCkEhgAAAAAAAAAAzhQCQwAAAAAAAAAAZwqBIQAAAAAAAACAM4XAEAAA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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/curl-test.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPxA=]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/curl-test2.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPxA=]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/curl-test3.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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sM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//2Q=]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-01-settings-retry.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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sM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsM9Tl9ioAlnqcvsCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//2Q=]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-01-settings-retry2.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-01-settings.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-02-providers.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-03-mams-fresh-test.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-03-mams-test.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-03-mams.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/screenshot-test-tmp.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABwUFRkVEhwZFxkgHhwiK0cuKycnK1c+QjRHZ1tta2VbZGJygKSLcnmbe2JkjsKQm6mut7m3bonJ18ey1qS0t7D/2wBDAR4gICslK1QuLlSwdWR1sLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLD/wAARCAIIA9QDASIAAhEBAxEB/8QAGgABAQADAQEAAAAAAAAAAAAAAAMBBAUCBv/EAEQQAAIBAgMFBgQDBwMDAwQDAAABAgMRBBJRExQhkZIxQVJUY6EFIlNxYbHRIzI0QnOBwRUzcgaT8DVDYiQ2ReGCg7L/xAAZAQEBAQEBAQAAAAAAAAAAAAAAAQIDBAX/xAAkEQEBAQACAgICAwADAAAAAAAAARECEgNREyEUMSIyQSNhgf/aAAwDAQACEQMRAD8A50KVKnK9OMnL/wCTvb2PU4Rq4aULtSTc+ztsiUcblqXjTtC1nG/F8NTFPHThUTyxyaJcefaMu69V8vi63jI2XGMKmzbeVLI3/axq1pYinBKc/llwTVnf+4nik2slNJf/ACd2ydWvKsknGKS8KLJWPL5OHKfx/wAVwim045ZZG+ElFtJmyoxeeMqnzRjfL/fvPLTeVR7Mqat2WsLfNKad1lUE9Xe5m/bvwl4Tjxl/b2+NKMb/AMua397P/BicVlU0k72u7J9yX+Ga1ebp16bi1eMV/wCe5SONpqDWSab7k1bnbgOt/wAY+Xj2s5f5WbqNShL91OVnbs+9v7nuMnCM3a9lxX4GlVqurNO1kv3VoU3qd7tRcteJrrfpznm4y8v81s5cks1/lSzXatwPdOSnUztfLUi+z8UaFWvOrFRlZR0SPVCvs1lknKParOzROn01+TLyy/rG01aplcI2va2VCqk1lleUWkk76E6uMi1+zjK6XCTaVv7IhCvOMMtk12q67B1q3zePf19NiMYwi8kXx7W+LPGKjFwjOLfC0WjysXPjdRtbgrcF+P4nipXqVUlNppdyil+RZxu65+Ty+O8OvGL4d58LKkld3fD7pW/I9YaWbD5e+La/szXw9TZ1OLtGXBl5qVCq6qV4PhJDlN+nDlO3DfTcjNN27zLipdqJ0WqjzQacUu4qezxW8+H8nksypypxim4xSf4HntjbV2LPinY1qtZUFd22i7I6fizh5fH/AMkv+Ncft5xF6uMpUov93tX49rI4t3qlKMdjTnWq3zy52/VmrKTlJyfe7mbe3LXozrxxgyAacwAAZAAAABAyYMgAAAAMlAABAAADIAAAADIAQAAAyYAAAAAAAAAAAAAAAAAAAAADAAABQAAAAAAAAAAAAAMGTAAAAAAAAAAAAC1DFV8NfY1HFPtVrr3IgC294jbOttW6jVrtLsMxxmIiqaVV2pfucFwIAmLtWpYvEUHJ0qrjmd3wTTPFWrUrVHOrJyk+9ngDDV4YzEQcHGpbZrLHguCMLF14qCVRrI3KPBcG+0gBhrYq43E1o5alVyV79iVmep/EMVUg4TrNxas1lXZyNUDIbWwsdiY0diqzyWtay7Pv2kE3FpxbTXFNdxgAbFbHYmvTyVarlHSyX5GHjMQ5Sk6nGUMj+VdmhADDassXXi6TVTjSVocFwL0/iE6OEyUpSjW2jk5WVrGkBhq29V71G6jbqq07pcUeo47FRo7KNZqFrWsuz79prgYbQAAe6dapSU1TllU1llwXFCnWqUozjTlZTVpKyd0eABsx+I4uEFCNZ5Y8FdJk44qvFUkp22V8nBcCIGLqrxFWVOVNz+Wcs7VlxZ6ljK8pVJOpd1FlnwXFEADVJ1qlSEITleNNWirdh6oYqvhr7Go437V2r3IgItLFV511WlVk6i7JaGauNxFdxdWq5ZHdcErMgCLqzxVdzqSc/mqq03ZcUe18QxapbJVpZLW7Fe337TWAw1ejjcTQhkpVZRj224MEAUQMmbPRiz0ZltgGbPRiz0YF6OKdJWackuxp2aPcsWnxySb7s0rr8jVs9GLPRk6x0nl58ZkrMpOcnKTu2YM2ejFnoyuTAM2ejFnowAM2ejFnoyjAM2ejFnowjBkWejM2ejAwbFDEZVlqXtayfb/Z/gQs9GLPRks1ePK8bsbLoWanRnlfdx4cy1GeKUm6jg4RV22k/wAjRi5wd43RWGIld545vlsrK1mT+U/Tc+PlfuYvJ4ycmsyjHVWX/wCzEaVLDrPVlnn3X7P/ANkJVqjuo8Fe64cSbzSbbu2+9l+7+03jx/Ue61Z1Xol3EzNnoLPRljFtv3QGbPRiz0ZUYMiz0Ys9GABmz0Ys9GEYBmz0Ys9GAAs9GZs9GBgGbPRiz0AAWegs9CoAzZ6Cz0AwZFnoxZ6AAZs9GLPQDBkWejFnoAAs9DNnoEYBmz0FnoAMGbPQWegGAZs9BZ6AYBmz0FnoBgGbPQxZ6MABZ6Cz0AAWejFnowAFnoLPQABZ6Cz0AGDNnoLPRhWAZs9GLPQDAM2egs9GBgGbPQxZ6AALPRiz0YACz0FnoAAs9GLPQDAM2egs9GBgGbPQWegGAZs9BZ6MDAM2ejFnoBgGbPQWejAwBZ6MWegACz0Ys9GAAs9BZ6EVgGbPQWejAwDNnoxZ6MDAM2egs9GBgGbPRiz0YGAZs9GLPQDAFnoxZ6MABZ6MWejAAWejFnowMAzZ6MWegGAZs9GLPRgYBmz0FnowMAzZ6MWegGAZs9BZ6MDAFnowBrmQDDoAAAAAABkAAAAAKgZMGQAAAAAAAZAwZAAAAIAGQAAKAAAAADIAAAAIAGQAAAAAAAABkAoAAIAAAAAAAAAAAAAAAIABgqgAIAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAqqEmk7riN3nrE2sPSnWyQpxzSa7DYr4Gvh4Z5xWXhxT17jeRz7cnKnBwdnb+x5K4j/AHF9jO7TVFVJShBPsUnxZz5Wca6cZeURM24XukYD/dX3ZVZsvEhZeJHqnh61WOalRqTV7XjFsVKFaik6tKcE+zNFog82XiRiy8SKU8PUq03UioqCdnKUlFX/ALnnYzdWNOOWUp2taSfaB5svEhZeJHqFGc6ypRjebdrX7zw+DCs2XiRSFF1E2pRstbkjZwv+3L7os+6zy+przu0vFH3G7S8Ufc2AdOscu9a+7S8Uff8AQbtLxR9/0N1Yas4U5qHy1Hli79rJyTjJxfanZk6w78mtu0vFH3/QbtLxR9/0NpU5Spyml8sbJvS55L1h3rW3aXij7/oSlHLJxfanY3jTq/70/wDkzPKY3w5WvABt/D8PGtVlKpHNGmr5dWcufKcZtdePG8rkad1qZOqsTWz0qdWnTy1XbZW4xWrNLHUI0MQ4w/dauloY4eTtcrfLx5NjXAB1cgAATBsbjivL1ehjccV5er0MjTXBsbjivL1ehjccV5er0MDXBsbjivL1ehjccV5er0MCANjccV5er0MbjivL1ehga4NjccV5er0MbjivL1ehga4NjccV5er0MbjivL1ehlEAX3HFeXq9DM7jivL1ehhGuDY3HFeXq9DG44r6FToYGuDY3HFfQqdDG44r6FToYGuZL7jifoVOhjcsT9Cp0MCANjcsT9Cp0MblifoVOhga4NjcsT9Cp0MblifoVOhgQBfcsT9Cp0MblifoVOhhEAX3LE/QqdDM7lifoVOhga4NjcsT9Cp0MblifoVOlga5kvuWJ+hU6WNyxP0KnSyiAL7lifoVOljcsT9Cp0sCAL7lifoVOlmdyxP0KnSwNcyX3LE/QqdLG5Yn6FTpYRAF9yxP0KnSxuWJ+hU6WBAF9yxP0KnSzO5Yn6FTpYMa5kvuWJ+hU6WNyxP0KnSwIAvuWJ+hU6WNyxP0KnSwYgC+5Yn6FTpY3LE/QqdLBiAL7lifoVOljcsT9Cp0sCAL7lifoVOljcsT9Cp0sCAL7lifoVOljcsT9Cp0sCAL7lifoVOljcsT9Cp0sCAL7lifoVOljcsT9Cp0sCAL7lifoVOljcsT9Cp0sDXBsblifoVOljcsT9Cp0sDXBsblifoVOljcsT9Cp0sDXBsblifoVOljcsT9Cp0sDXBsblifoVOljcsT9Cp0sDXBsblifoVOljcsT9Cp0sDXBfcsT9Cp0sblifoVOlgQBfcsT9Cp0sblifoVOlgQBfcsT9Cp0sblifoVOlgQBfcsT9Cp0sblifoVOlgQBfcsT9Cp0sblifoVOlgQBfcsT9Cp0sblifoVOlga4NjcsT9Cp0sblifoVOlga4NjcsT9Cp0sblifoVOlga4NjcsT9Cp0sblifoVOlhWuDY3LE/QqdLG5Yn6FTpYGuDY3LE/QqdLG5Yn6FTpYGuDY3LE/QqdLG5Yn6FTpYG98NrwoVISqKOWy4uN2vsdD4ljqNWhkhllJpPir2v8Aj3M5UMPWUIp0al0vAzOwrfRqdDN5L9uUvKbMaWJ/3F9i9edPEUYSVRRnBWcZf4MVsJiJzTjRqNW8LJ7jifoVOlnLnJbrrwtkxAP91fdl9yxP0KnSzO44lxS2NRcfCyjqfBa9Glg5RqVKcXtG7TaT7tWePjlelVoUlSqU5NSd1Bp934M524Yn6M+l/oNwxP0Z9L/Ql+2tesHiKdGMo1nKVOXbTyJp/wB2+DNqHxOjGpmW2haUZPKl8yUbWfHsNPcMT9GfS/0Mbhifoz6X+hUb8PitGOztCSUWrxy3773XzWv/AGMQ+JUIyg5OvKUF+++DfG9nZ9n9/wCxo7hifoz6X+g3DE/Rn0v9CD3jMYq9OFOnmjCMpNxfBcZNr2Z5wv8Aty+6Mbhifoz6X+hehha8ISUqVRXd/wBx/oa4/VZ57Y2cJKUXPLKcez92sqf59pPENus2229XUU3zQ3er9Op0S/QbvV+nU6JfodNm645czG1h8dClChCUZShC+Zfje6aKL4jShTtBVG7p2l2dvHv0/A0d3q/TqdEv0G71fp1OiX6Ezi1vJuRx9KLnGLq04fKoZUrpK9+/vue38RoW4RqK81K3alaV3bj/AIOfu9X6dTol+g3er9Op0S/QZxN5emK1R1q0ptt3fC+hoVf96f8AyZ0N3q/TqdEv0Napg8TKpJqhUs23+6ycrM+l4S79tU2cDiVh6rzfuSVm9DG44n6FTpY3HE/QqdLOXLjOUyu3HleN2N6NWlHE1a0qlLLJJJqV3yOfi6+8V3NKySsvsetxxP0KnSxuOJ+hU6WY4eKcLrpz8t5TGuDY3HE/QqdLG44n6FTpZ1cWuDY3HE/QqdLAH1wMKSl2NO3DgZObqAw5JNJtJvsWpkAAAABiUlFNyaSXa2BkGDIAAAAYUk20mm12rQyAAAAAw5JSUW0m+xX7QMgwpJtpNNrg7PsMgADznjnyZlmtfLfjYD0DypxcnFSTku1X4o9AAAAAAAAAAYckmk2k32LUyAAAAAw2opttJLtbAyDxCrTq32dSM7duV3PTkk0m0m+xagZAAAHmU4xcVJ2zOy/FnoAAAAAAAAADxOrTp22lSML9mZ2G0gpNOSTja9+6/YB7AMNpJtuyQGQYjJSipRaafY0YjOMpSjF3cXZ/gB6APMZxmm4u9nZ/cD0AAAAAAHlTi5uCknJdqvxQHoHlTjJtRkm49qT7D0ABOFalUk4wqQk12pSTKAAeJVYQnGDfzS7Elc9gAAAAAAAAAAAAJyrUoSyzqQjJ9zkkwKAHiNWnOTjCpCUl2pO9gPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5abpUaihJpqtad5vhG/t9z3DPOpRg6zcJOdsk2+Flwv3nRBrsz1cyDU9znVnLtlFycmvsdMAlurJgACKEMZ/B1v+DLgDSq4mk6UFGaldpNxqZUuHe12EYVqsaFOeaUnUi6au7/Nfgzpk5UlOpGcnJ5eyPdfU1sZytGrKUHVjKrUVWCSpLM/m4e/EzWrygsRCU5KeaLir93Ds/DtOiB2OrTw6jHG4hZnmbTScnxVu2xuAEt1ZMAARQ1cTJU8RQqT4QWZOXcro2gWJZrnOeaFWpGooQnVTTbcVJJa9x4nWqSy/O6SdNOGeo1x5fMdQF7J1atBSliaznOTcWklmdlw0I1/2eNqV1/7cYt/8Xe//n4HQBNOv05kHsZ16lRSzSpxlKzs1dsQqTl8iqSy7aKWWbfBrU6YL2Tq521yxlSlKbtVlGLdRx7u99p5p1nKFLbVZxWzbTTazSv7/Y6ZKrS2n/uTgrWai1xGr1aDq1HToqVTLF0rqUqjjeX3tx+xmo6uWtJ1ZqcMlsr4Xdr8DowjGEFCKtGKskei9k6udVnUpOtCE5OKlC7lJ3Sfbx7jMXOToxdW8JVGk4Tb4W7L950ATsvVzE1J0HVnK0ak4ZnJrW3E6YBLdWTAAEUJYn+Fq/8AB/kVAHPVa+EjkrQlUWXIqfB30fE83jJ4apVqSvnkptyayvT8DpA12Y6ubCpVlVd6ijNSlmi5u9uP8tvcQlOEaT2006lFtyk7pPhxOkB2Xq50KsnGnllK+1s3nclLh3PQzQqSlOjapOVR32sW+zhp3cToAadXMpTnGGHm6s71IzzOTbXBdtjYwM80ZpycnGycs7lF/b9DbAt0nHAAGWgAAaOLlClWdRThtMtnTmr5l+H4k8U3Pb5nJRjs3a74ceJ0galxm8dc2rUntnGFVRSUdk5VGr+3zGzjG3TjSik5VHa17cO1myBpjmuc6VOdGX7NRqJtxd8sHozCfGpsqksrrQWZS4tW1OmB2Tq53zwzSVWo8ldQScm+Dt269og51K0ISqTSc6idpNdnYdEDsvVr4Kcp4WDk23xV332ZsAEqz6AARQ51STo4ytiEm8jipJd6a/Wx0QWXEs1zKdOdPeGm9pHJOVn2vtaNzDNzhKq22pybin3LuKVae1g4OUop9uU9RSjFRSskrJFt1JMc/D05zo0p2jGNPM00/mfbyMOU4YfDNzllmrzlKo1xtw49x0gOx1c2MZ7WnJzc6ipSaak7PirHiNSo8PUkqvFUrySqNtS17OH2OqB2Tq5+Ic6dSMNo4wcLqUqjjeX3/wAHipKqo15urPPTUGssmleyvwOmB2OrSz3xNRVKkozTWzhmsmrad5GlUqSg3t4xlkee822nra3A6YGr1a2CnnpS7XaVr53JP7N9xsgEqyYAAihoyqKnj6l6tOCcY/vrt7ezibwLLiWa1sVGs8PVSakn2RjGztfj36E51qLw8t1cc8Y/yx4xV+JugaWObUqNQq7CtOVO0fmzN2lfuf2FXPT3lxq1P2Ti43k++1/udIF7M9XOrueavJVZxcJwUbS4K9u4VZ1KTqwjOThGcbuUnwTXHj3HRA7L1c+nnnUoxlVbhJztkqN8OHC/C42kslWSqT3lZrU7vgu7h9joAadWngpSlKTVSM4WXBTc2n/dexuAEt1ZMAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA46PkOOj5FLrUXWpRPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+Q46PkUutRdagT46PkOOj5FLrUXWoE+Oj5Djo+RS61F1qBPjo+QKXWoAqACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqKbk0ku1s8wqQqK9OcZLsvF3A9AAAAAAPM6kKavUnGC1k7HpNSSaaafFNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI+I5sVjNjD/24Nv72v+htfC620waTfGn8r/waODp4uvOpiKE4Qcm03Lnoe8BnwuOqYeo1ea7uy/ad+U/j19PNx5fy7e3Qw2Mp4qM5QUkoduZEJfFKUsNUqQjNNfKrpdrTt3mp8PxNPDKvTq3Um+CSvd6Hr4Ym8Hi0u3L/AIZLwk2tTyW5P9+zDY11cJXpVXOVRxlK77LWMYDHUcLhctTM5Obdor8EMDWpr4fXot/tGpNK3dY9YOKfwjEOyvx/JGrJ9/THG259+1viNWFf4aqlN3i5Irg8RQjhKUZVqaairpyRof8A4T/+w28L8Pw1TC05zpXlKKbeZ/qZsk45fbUvK8pZ6Q+FVFShiqkrtRSbt/c34YynPCyxCUskb3TXE5mAi5YbGxiuOXguZihiqUfhlSg29o72Vi8uO2pw5dZP/VviOIhicBCpBSS2luP2ZWl8Tw9OnSpvM2opNpcFwNKf/o9P+qymJxVCp8Pp0aa/aK3C3YXrP1/2ne7u/wCO0mpJNO6fFMEsJCVPC0oy/eUVcqcL+3pl2aAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQhCnHLCMYrRKx5dKnKam6cHNdkmlc9gaY8bGm559nDP4squZhSp077OEYX7cqsegNTE1QoptqlTu+15VxMxpU4wcI04qD7YpcGewXTI8bGlkybKGTty5VY9RioxUYpJLsSMgi48wpU6d9nCML9uVWuY2FG8nsofN2/KuJ7BdTInsKOTJsoZU75cqsZVCkpKSpQzLseVXR7A2mQABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPa+nU5Da+nU5FypsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5Da+nU5DKbFAT2vp1OQ2vp1OQymxQE9r6dTkNr6dTkMpsUBPa+nU5AZTYoACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/fcV5mt/3GN9xXma3/cZAHsyMr77ivM1v+4zO+4rzNbrZrmRkF99xXma3WxvuK8zW62QBcgvvuK8zW62N9xXma3WyAGQX33FeZrdbG+YrzNbrZAyMgtvmK8zW62N8xXma3WyIGQX3zFeZrdbG+YrzNbrZAFyC++YrzNbrY3zFeZrdbIAZBffMV5mt1sb5ivM1utkAMgvvmK8zW62N8xXma3WyIGQW3zFeZrdbM75ivM1utkAMgvvmK8zW62N8xXma3WyALkF98xPma3WxvmJ8zW62RAyC2+YnzNbrY3zE+YrdbIgZBbfMT5it1sb5ifMVutkQMgvvmJ8xW62N8xPmK3WyALkF98xPmK3WxvmJ8xW62QMjILb5ifMVutjfMT5it1siBkFt8xPmK3WxvmJ8xW62RAyC2+YnzFXrZnfMT5ir1sgC5Bfe8T5ir1sb3ifMVetkQMgtveJ8xV62N7xPmKvWyIGQW3vE+Yq9bG94nzFXrZEDrBbe8T5ir1szveJ8xV62QBesF97xPmKvWxveJ8xV62QMjrPQtveJ8xV62N7xPmKvWyIHWehbe8T5ir1sb3ifMVetkQOs9C294nzFXrY3vE+Yq9bIgvWehfe8T5ir1sb3ifMVetkQOs9C294nzFXrY3vE+Yq9bIgdZ6Ft7xPmKvWzq/CMbUrylRqvM0syk+04h0vgf8ZP+m/zRz8vGdL9Ed0AHgaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfEAA9rIZMGQAAAAAoGTBkAAAAAAAAoAADIAAAAAACjIAAAAAAAAAKBkwZAAAAACgAAMgAAAAAAKAAAGTBkAAAAAKAAAyAAAAAHS+B/wAZP+m/zRzTpfA/4yf9N/mjHl/pR3QAfOaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcj4XhKFP4eq2Jp05Z3e84p2XYjT+OYSNCvCpSgowmrWirJNHV+I4OriMLChh3CEU1fM2uC7EefiGGnX+F5alnWpxUrrva7f8AJ1nL71Hz+GwlfFOSoQz5e3il+Z5VCo6+wy/tM2XLddp1v+nf38R9o/5NWCb+PP8Arv8AM69rtghPAYmnWhSnTtOf7qzLidnFfDlL4bGFHD09vaN7JJ37+JrfH5yhiKEoScZKLs07NG3jqtSHwaFSM5Rnlh8ydn3d5i23KNL4Th6uG+KbOtHLLZt2un+R5+J4WvifidVUabnZRu+xdhj4NUnV+JZqk5TlkavJ3ZT4pja9L4ioUqjhGNnZd7/HUv33HMr4erh55K0HCX4nap4ei/gbqOjTz7JvNlV7/cf9QxW70pW4qdvY2cHOEPg8J1I5oRptyVr3ROXK3jKOBgIxnjqMZRUouSumrpm98do0qMqGypwhdSvlilfsNnDY74fUxFOFLC5Zt2jLZxVmS/6i/ew/2l/gu284ObLA4mOH3iVO1KyebMuxmMPg6+KUnQp5lHt4pfmdrEf/AG8v6cPzRP8A6eX7Ku//AJIve9bRq/BIuPxFxlwai0z18SwtfE/EquxpudkrvsXYPhX/AKvV/wD5fmevi+Mr0sdkpVJQjFJ2i7Xf46j77/XocytQq4eeStBwl+JM+h+LpVfhcKs0lNZWv79p88b4cu00ZABtAAAAAUZAAAAAAAAABQMmDIAAAAAUAABkAAAAAABQAAAyYMgAAAABQAAGQAAAAA6XwP8AjJ/03+aOadL4H/GT/pv80Y8v9KO6AD5zQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5bGfEq1fEynRq1adPhlipNfkbHw74vsITjinVq3d4u+Z+7OSD19ZmI38Hj44LF1J04OVGfDK+DS7jZl8TwkcVGvRw0lNv55vtt32V7XOOZF4Sjf+K46njalOVKM0opp5kjZpfFcPPBRw+LozkklH5e+3Z3o44HSZg6OHxmFw3xF1qVOpGjlso9rvzIY/EwxWNdaCkou3CXbwNUFnGbo6nxT4lRxtGEKUaicZX+ZLT7nuHxSjH4XuzjUz5HG9la/M5BknSZgrhKsaGKp1ZJuMZXdu02/iuOpY10nSjNZL3zJd9jng11m6OthfitKOD3bFUpTilb5e9HvCfF8Nh1OCoShTv8AKo8X+LbbOMDPxyjdwWMp4fHzrzUnGV+CXHibVX4lg6+Jc6+GlOKtkfevwavxOQC3hLdHQ+JfEnjFGnCLhSi78e1s54BqSSZEZABQAAAAFGQAAAAAAAAAUDJgyAAAAAFAAAZAAAAAAAUAAAMmDr/CMFRr0nWqxcnGVlFvh3Mzy5TjNo0MNhK2KlalBtd8nwS/udB/A5bJZaydTvTXD/ztNnE/FKGHhkoWnJKyUf3V/wCfgc6HxXExr7SUlKPfC1lY5b5OX3PpWpWoVMPUyVYOMu2xM+jo4rC/EaeznFZvBPt7O73OR8Tw1PC4lQpXyyjms3e3Fm+Hk29eU+0aYAOoyAAAAAHS+B/xk/6b/NHNOl8D/jJ/03+aMeX+lHdAB85oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8XOjUp/7lOcP+UWhCjVqK8Kc5Jd8YtnRipUaWN3hOMJ3yRl3vuaR4xMZ16GGeGTlCMLNR/ll33PXqOe1Z2fBmYQnUdoRlJ6JXPc6NWMNpNfK5NXv2s2MBNqNaDoSqwmkpZXxRbUasqc4SyyhKMn3NWYlSqQmoShKMn2Ra4nUhhqVPGxqZ5bOlT2klPi46IVLYlYbEKcZzhUUZuKevDtROyuY6VRVFB05qb7I2d+Q2VRZr05/J+98r4fc61XE0o4qTl/EQlkhw7nbj/biJRcq3xGMU23FWS+w7DjHqEJVHlhFyeiVz3u1a026co5Fmlm4WX9z3gamyxlKXdms/wC/A1qI5J5M+WWS9s1uFxKEoNKcXFtX4qx2HSipvAXVpRc/75rr2PEtlXxGKlbNUhaMFlUuC7bJ9pnsrmUqU6zkqcbuKzPj3Hg62HVPfKmzpuF6DzRkkuP2vwPEMNGqsMqkIwqNtzSVvlWqL2HOnTnTtnhKN+y6tc8nVxU44zC1ZRnGcqUsysnwi/uj1PDw3nESVKGy2LcOCte3ah29jlqlUcoLI05/u3VrmJwlTm4TVpRdmjpzlOccDJRTh8uaSguDuu/uMYhRqRxzlCN6cllaXHt1HYcwHWp06brYSm6VNxqUry+VXfA5s6M4wVRx+RtpO5qXUTBvYKi3SVRuLjns47NSf92+xFXSp0njrU4vJlcbq9rk7DmHuVKcKcKko2hO+V37bHS2NJ1IS2cM8sPmjG3By+xHGprA4XNFRl810lbvHYaapzlBzjCTiu1pcENnPJnySyeK3A38FVVLATlJXg6lpL8GuJ7qTjV+H1KdDjCEoxj+P48x2ujm7OeTPklk8VuA2c9nnySyeK3A6/7P+B2kbbPLazvm7b9liUJxpYClTr8ITcoy/DiO6ua6c4xUpQkovsbXBmZUasI5pU5xjq4tI6NettMNQnTimlWtCP4LsPOJhCpQq1nCpQqXV4yfCX2E5I50YuTSim2+5I9SpVINKdOUW+xNWuWwM5QrScabqXi04p8bfgbMoRoVsPUoxm5O72M3xRq8so0J0qlNJzpyinqrGXRqKGd05qOuV2N+dOhDZVpKpSTqLNTn3/ie4KcfiNStUf7Bp3k38rXcidhygHa7t2A2AAKAAAyAAAAAAAoAAAd/4F/Bz/qP8kcA7XwOvTVOVBu1RyzJPvVl+hy80/gRyYQlOcYRV5SdkvxOpivhEKOFlUpznKcFd3tZrvNXG4KpgqqlFt02/kmu1P8AU6uNqyn8HdS9pThFu342uTnzu8bxv1Vcr4V/6jS/v+TK/HP4yH9NfmzawGDpwq0qsczcVfN2XujR+LV6eIxd6TzRjHLfubu+wx4/LPLz7cf8WzGiAD1MsgAAAAB0vgf8ZP8Apv8ANHNOl8D/AIyf9N/mjHl/pR3QAfOaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfEAA9rL3KpOUIQlK8YfurQ8mDIAAAAAUe41JxpyhGVoytmWtjyYMgAAAAAAAFAAAZPUqk5QjBv5Ydi0PIAAAAACjIAAAAAAAAAKBkwZAAAAACgAAMgAAAAAAKAAAGYtxalFtNcU13GDIHewONp4+k8PiUnUa4p9k1r9z0sFiJTdCrWzYSKVlZXaXYvY+fTcZKUW01xTXcdKp8YqzwqppZar4SmtPw/H/AM+3n5eOy/xVX4rjsv8A9LQaUErTcf8A/JyADtw4zjMiAANjIAAAAAdL4H/GT/pv80c06XwP+Mn/AE3+aMeX+lHdAB85oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8QAD2shkwZAAAAACgZMGQAAAAAAACgAAMgAAAAAAKMgAAAAAAAAAoGTBkAAAAAKAAAyAAAAAAAoAAAZMGQAAAAAoAADIAAAAAdL4H/GT/pv80c06XwP+Mn/AE3+aMeX+lHdAB85oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8QD7DcsL5aj/wBtDcsL5aj/ANtHf5Z6THx5k+v3LC+Wo/8AbQ3LC+Wo9CHyz0Y+QB9fuWF8tR6ENywvlqPQi/LPRj5AH2G5YXy1HoQ3LC+Wo9CHzT0Y+PMn1+5YXy1HoQ3PC+Wo9CHzT0Y+QB9fueF8tR6ENzwvlqPQh809GPkAfX7nhfLUehDc8L5aj0IfNPRj5AH1+54Xy1HoQ3PC+Wo9CHzT0Y+QB9fueF8tR6ENzwvlqPQh809GPkQfXbnhfLUehDc8L5aj0IvzT0Y+RB9dueF8tR6ENzwvlqPQh809GPkQfXbnhfLUehDc8L5aj0IfNPRj5IH1u54by1HoQ3PDeWo9CHzT0Y+SB9bueG8tR6ENzw3l6PQh889GPkgfW7nhvL0ehDc8N5ej0IfPPRj5IH1u54by9HoQ3PDeXo9CHzz0Y+SMn1m54by9HoQ3PDeXo9CL889GPkwfWbnhvL0ehDc8N5ej0IfPPRj5MH1m54by9HoQ3PDeXo9CHzz0Y+TB9ZueG8vS6ENzw3l6XQh889GPlAfV7phvL0uhDdMN5el0IfPPRj5QH1e6Yby9LoQ3TDeXpdCH5E9GPlAfV7phvL0uhDdMN5el0IfkT0Y+UB9XumG8vS6EN0w3l6XQi/kT0Y+UMn1W6Yby9LoQ3TDeXpdCH5E9GPlQfVbphvL0uhDdMN5el0IfkT0Y+VB9VumG8vS6EN0w3l6XQh+RPRj5UH1W6Yby9LoQ3TDeXpdCH5E9GPlgfU7phvL0uhDdMN5el0IfkT0Y+WB9TumG8vS6EN0w3l6XQh+RPRj5Y6vwOlLbVKtvkUct/wAbr9DqbphvL0uhFYxUUlFJJdiRnn5+3HJDGQAeZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHFYmGFpbSopNXt8pYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHXr1MR8Kc6ss0lWteyXcbm2xNDG0adWrGpCr3KNspT/AEyju275qmTNmvdXvyPVLAUqVZVc1SckrRzyvlX4AbE5qEoJp/M7JkZVZydGcJWhKVmmuL7fYrVpqrTcJNpPvXag6UWoLsUGmkgPFVzlVVOE3D5XK6Sf27TGd1MLCq6kqfy5nlS0/FMzPDqTvtKkZceKavZ9x62EcrgnJR4cL9lu4DNBTVGO1k5TtxbPYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABo/6rR8FTkv1H+rUfBU5L9Tjg9fxcXg+fm6/+rUfBU5L9R/q1HwVOS/U44HxcV+fm7H+rUPBU5L9R/q1DwVOS/U45gfFxPn5uz/q1DwVOS/Uf6vQ8FTkv1OMB8XE+fm7P+r0PBU5L9TH+r0PBU5L9TjAfFxPn5uz/AKvQ8FTkv1H+r0PBU5L9TjGB8XE+fm7X+sUPBU5L9TYw+NpYlPJdNdqZ86bvwv8AiJ/8P8oxy8fGTY3w83K8pK7W1joxtY6MiDzvWttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjM545bkDP8r+6ArtY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MznjluQM/yv7oCu1joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC8akZGNrH8SUe3+zMAW2sdGNrHRkQBbax0Y2sdGRAFtrHRjax0ZEAW2sdGNrHRkQBbax0Zl1IpJ6kDL7I/YCu1joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALbWOjG1joyIAttY6MbWOjIgC21joxtY6MiALqpFpvQxtY6MkuyX2MAW2sdGNrHRkQBbax0Y2sdGRAFtrHRjax0ZEAW2sdGNrHRkQBbax0ZmNSMnbiQMx/eX3A2AAAAAAAAAAAAAAAAAAAAAAAAAAB8vnje2Zadp7UZypTqRjeEHZu67TpU8QqdOnklTg3XeZJp2i2/YxOtehi6dOtTj8zyXa4p9tvc9V5308U8XH20NjJzyQcKjUM8nCSaS+5LNGyd1Z9nE7CxMVipKNamouirNtWzfcnCtGVB4qclKpRzU1Jdkm7WaE530fFxv6rluSXa0jGaNk8ys/xN34Zxxc72/wBqXb90bUa0VXwu2q0p1Y5s84tWS7kW87LmM8fHLN1x3OKteS4/iZzLjxXDtOlSxEqlOs4VqVPEOVlKdksunYe5VMPXrV6LnFUp5ZN3snJPjzHe+l+Pj7cyMVKnOptKaUf5c3zP+xmjSlWhVnBxy00m+Pb/AOWOhLEUq1Ou6slkdaNot9sVbuK1qsZU8SqlelOnJJQjBq9u9Ge/L018fH24uaLTeZcPxGaNr5lzOxXrU3TtCVKVG8ckc6TjxXYrf5MPFOXxGWWdF04x+WUpJWva9nZ8S976S+PjP9ck3Phf8RP/AIf5RPHuLxUnGrtVZfNw/wAFPhf8RP8A4f5ReV3hrPCZ5JHVIzxMIYiNGSlmkrp9xY08VQnUrzlGMrxpKUHbvTvY8j3qvEwWJWHtLPr3dlxvNPedhxza9xCFKptqFaVOd5Z5TtF8NESVHFbNVskW1U2jik8+lgN3eYbzu7UlO3b3dlzzvdPbTpPMnBNt24cCNalUdetWhTk5RdOcOD+bhxRiFGcKsZSpSqZqLc1btbbbX3A2KOJVaSSpVYpq6co2T+xc0sKqka7jCFaFDL+7WXY/wGLpN4hSq0alajk+VQu7PvvYDdBza9Ce0q5qFWVRtOlUi3aK+56r4adSeJlKnOUlCDi0nxdle2oHQBz3RdKVZqElGeHvJu7vI84enLPSnSoVE1TedybtPhwsB0XwVzxGqpxpypxlOM3ZSS4L7mjh8PJ1srw8oU502mnFxV/7tmcNRlGOF/YVISjV+duL5gbtGrGtByimkm1xPM66p/v06kfnycV2vX7GjGhNZUqFWNXa3VR3SUblZ0an7T9nL+KUv3e7jx+wg2pVowU3UjKCjLLeS7fsVOdWw0p0sT+xk5Ktmikndr8NRXp5HCNGLgsRBQcX2xt38gOiZ/lf3R4jFQiorgkrI9/yv7oDBrVMZCEpRUKk8n7zhG6j9zZXaacHVwk60dhOopycoyirp310AtUxNOFBVruUHa2XtZ7pzVWnGceySujRjh8RBYelGMbwvNuaeW+nAbGvHCSpOlJypVVJZU+K/DUDfnONODnJ2iuLZ420XWjTSd5Rzp91jUnRnX3tuhNOUYygmrPghHDKpOnF0Kkaexas01812B0DxVqKlSlUkm1FXdiWFjU3OMXeNTK0s3Cz7jVhRaw1aO7VVXcHmk03md12aijfhUzyayTSsmm1wd9D2c+dCs1iNnCSbhC3C1+HGx52EtzxCp06qvltB02u/tXFgdGUlCLlJ2SV2YjJTipRd01dM0pYS1TEU40pOE6WZXvxl9yE6H7Kllw1ZyjGzhKDyt97vfgB1jP8r+6PKvZXVnoev5X90Bg11i4uo4xp1ZJSyuaj8qf3NhdqNHLNYpOhRr0nKf7RSX7NrvYG8DnUKFRYqLqwqqopu81BtSWl729icKEstaOwr2lH/cyNTfHS9mB05ycMvySkpO14q9vuejnUaU8lD9g4KNa74Ps1d72PKoVFNXo1ViNpfa/y2+4HTBzauGlbEVFSntI1rwsn2X7bHtUpR+Iuao1GnJ3nOLWX7O9mBvg0sfSlUlFLDuosjtJRbs9O1HiOGlVnSVWnNrYWfauN2B0O0nRqxrwzxTSvbiaMaVRxw22oVakFFpxjdNSv36cLGzgKbjhlCrBq7d1IC1OpGom4O6Ts/uK1VUaUqkk2o9tjnxw040a0IUKikp8e35oaLUy6M3QxKo0KlOm4xy05J3vdX4AdFO6TMnOdCtssRHZydZtPMk/mjov0PO7y3aooU6qTnF5HTcbatcWB0wc6phnB4mnGnWVNuLjki5X17+Js4JSjh0pUtlxfy8f8gbMe3+zMGY9v9mYAliK8MPDPNNpu1l2nuMlOClHsaujWxFOtVxUFTjHLCLd6ieVt/b8COzrRw1OMqU5SoVeKUeLWq1A6JGVdKdSKpzlKmk2oq976GpUpVpxryVGolKqpOFuLieZUJunitnh6sIuMMkZJtgdBVIuo6d/nSu1buMOrFV1Rs8zjmv3WNfYKHxLPsZZZRupJOyfeeq9KrPFXpppug1GXde/ZcDaBz8NRkqtPZUalFqLVRzulJ24e5GEMlTDqVGpCrtPnlL+YDrGX2R+xgy+yP2AwQjiacsRKir5o9/cy0m4xlJRcmleyV7nNhQxNOFKs4Rlllmkop5+PbcDoVqqo0pVJJtR7bHpO6TObiKFRvE3w9WdRu8JxvbLdcz1Xw0pyxUtnPMowcLJ8X+GoHQk2otqLlZXsu1mIyzRUrNXV7PtRp7vKFSuoU52nQv3u8v1PKwrqTpqdOeXdrdjXzaAdAGrRjN/Dss41FLI1aK+Zf2NWFCrus4woSilON+DUprv4X/IDo1KkaUc03ZXsNpHabNXc8ubKl3HPlhXLCSy0qjyzTUHBppd9ldlHh4rFU5xw1TJKnwsm8svxA3YSzwUsso37pKzR6OfSwznukatKeXLJS4NW4954jRqbHDqtQqzpRclKCTv+AHTByY09phHaFWdqzaUVmT4djs/c6OGTWHgpQyO37ugFl2S+xgyuyX2MAa9XFKnVlT2VWbirvJG6SK0qsK1NTg7xZrznUoY6pUVCrNOMbOEbrsIvDVI0KbnSlODm5VKcO3j2dgHRBzthUdGKVOoqe3TjF3vGP+BKhKlGvTWHlOltFZWb4arirgb1SpGlHNN2V7Gcz2jg4SVlfM1wZzXhZvCTjKhO8Kt4xs75e+yuVnRqSlV2FOcL0YqF1bTh97Ab4OdTov8Aa7HD1aUHRalGafzS/BCGHlTlSlGnVWai1NxTbvb8/wAAOiZj+8vuaPw+nKnnToyguFpSTi5f2uzej+8vuBsAAAAAAAAAAAAAAAAAAAAAAAAAAD5gFNhW+lPpZjYVvpT6We/Y+XlTKVMRVqwjCc7xh2K1hsK30p9LGwrfSqdLJ9LlYpVZ0ZOVN2bVm7dxMpsK30qnSxu9b6VTpY2GVMFN3rfSqdLG71vo1OljYZUgU3et9Gp0sbvW+jU6WNhlTMFd3rfRqdLMbvW+jU6WNi5Uzd+F/wARP/g/zRrbvX+jU6Wbnw2jVhXm505xWTtcWu9GednWt+OXtHSBnK9HyGWXhfI8b3sAzll4XyGWXhfIDAM5ZeF8hll4XyAwDOWXhfIZZeF8gMAzll4XyGWXhfIDy0pRcZK6krNGIxUIqMVZJWSPeWXhfIZZeF8gMAzll4XyGWXhfIDAM5ZeF8hll4XyAwT2NNVnVUEqj7WVyy8L5DLLwvkBgz/K/uhll4XyM5ZZXwfboB5BnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYM/yv7oZZeF8jOWWV8H26AeQZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QCPb/ZmD1GMr9j7H3GMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGF2kaeFoUp56dJRlrdv8y+WXhfIZZeF8gMGX2R+wyy8L5GXGVlwfZoB5BnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGAZyy8L5DLLwvkBgnVoUq6SqwUrdnFr8iuWXhfIZZeF8gPEIRpxUYRUYruR6M5ZeF8hll4XyALsl9jB6UZWfB9mhjLLwvkBgGcsvC+Qyy8L5AYBnLLwvkMsvC+QGAZyy8L5DLLwvkBgGcsvC+Qyy8L5AYMx/eX3GWXhfIzGMsy4Pt0AuAAAAAAAAAAAAAAAAAAAAAAAAAAIWl4XyFpeF8i4LqZELS8L5C0vC+RcDTIhaXhfIWl4XyLgaZELS8L5C0vC+RcDTIhaXhfIWl4XyLgaZELS8L5C0vC+RcDTIh83hfIzefh9iwJpiWafh9hnn4fYqAqWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9hnqeH2KgCWep4fYZ6nh9ioAlnqeH2Gep4fYqAJZ6nh9gVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==]]></data>
	</file>
	<file>
	  <filename>/assets/forge-screenshots/test-mini.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPxA=]]></data>
	</file>
	<file>
	  <filename>/assets/icon-128x128.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/assets/icon-256x256.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAA2ADEAkXWD2iwAAAAHdElNRQfqBxUBMhq/PC7FAAA9PklEQVR42u19d5wlRbX/OVXVffOknc2zOecAuLCAKJh9yDOL/NBnFhEEATFgfpiQDAKCGZHw4D3eU0QFBAlLZmFz3pnd2Z3NE+7MDV1V5/dHdfftmV1gmb076db3o+zMnb7d1VX1rTr1rXNO4TELfgxAAAgAwX8BAIOPEAkIARGDqxD8L/i/EAASAiIEl/r/BL/7VwWfESEiIhABYnAD/2kEhIgAiEDmp0ipCBD9f5AAEMG/fbcCAwIS+ZdA8BwC/wW6lcovQlCmbgUOHh28fvC3yJ/CUpm7B8+M/MlcjwjBE8C/FLD0+ghB8UwVmVtS+JaltghuGv4BgwroVirTIsFzIkUGBMAeLRFWEURev9Q6QRVBcHXQ6EHjgN8xCML3615g0zr+7ZBK74Ol7mMqhfxSh1XUs8CmeKUKK70+RvokAEQu9NusW4HNJQSIyMDCooJhCWBR0bAEsKhoWAJYVDQsASwqGpYAFhUNSwCLioYlgEVFwxLAoqJhCWBR0bAEsKhoWAJYVDQsASwqGpYAFhUNSwCLioYlgEVFwxLAoqJhCWBR0bAEsKhoWAJYVDQsASwqGpYAFhUNSwCLioYlgEVFwxLAoqJhCWBR0bAEsKhoWAJYVDQsASwqGpYAFhUNSwCLioYlgEVFwxLAoqJhCWBR0bAE6A+YQ3rI/IhE0P0sKIu+g+jvAlQKMDjgy/R7xhARlSIE4JwBgNbmOsuCPoUlwFFGcF4cEQAQMmQcgbBQUEpROu0gQDYrOWexGANErXySIHb7usVRgiXAUUR4oiIBMIaco9KU65IAOGFi2nH458+ZhQC/vGmt5+nGrVkAjMc5F0wr0JowmDcsBY4eLAGOFoj8HwRHxrBY1B3tqrrWPX7pyHTa/fRnZzSMT5v+vWTpyO1Nnb+5bV02K19Zvr/tQDGZEq7LtQatCLqdvGpRZlgClA0I3awXROQcAbCQV/mcnDm7ds68uvETMh8/expjSCE/AABg4uT0D358rNZ0xx82bWvKrlrZunZNWzzOE3EOgEr5F5O/brYoGywBygMCCI72RkRgDJWiXE6RhvecPmHChMyCRfULF9cTkdYgpWYsPAYcAIAIlNKIeNYnpiDi8hf3vfzy/qat2b/+eTtjzHUZ50xrQwMkImsblQuWAL2E3wkDWYchAwZAQARaU6Gg6+vjn/jUzJra2DHHDq8bFiciKTUAcI4ADICwe/flnAGQUgRACxbVLVw8bP++wgknjmw9ULz9txv37S0Kx5xmD8wc4a7N4qJ0nLtFL2AJ0EsgAhEhMs4QAJQiUmQM9+OWjPzYx6cnk2LWnFpE1Jo8T3OGQrDA8jETBnTbEQACAM4REbUiqXVNrfu2d4whotlza3Jd8q47trzw3D7GsFDUjIEQDAG0tr3/iGAJ0BsYTZMxBIBCQQHBiJEJxvGjZ04/fumoVNoZPjxBRFoTEXGOjsOIKOj9CNCjyyKUFs1ERMjA4cxMGog4a3Y1Ik6YmO7MyqeX7bnnT1s1wZ49BQRwXWY4ZkwvizcKS4DDBgICmE7MOROC5fNSCD5zVm0m437h3LljG9KJhIjFeNhxzW5X2PVfu4diZDc4/IqZNLQGIj2sPlY/PD5qTOKd7xm7o7nr1ps3ZNu9LVuySlIszpXUSgEAoSXCG4ElwOGCiBBRCIYI+bzOZmV1tfuRM6d/8tOzOUch0IzEZi0bWjuH0/UPhrk+pAFjgMi0Jq3JcVgsxqurnZ9ddYxW9Pvfbr73rsa21qLrsnhcaAKtqORbYfF6sAR4Vfh7t4gIiAhCMK2hq0tKTy9ZOnrcuMzCxcPf/d6JZrAnMgwBxthhDvmvi/Dr5oZGXDKWFfjOFPC5L04bPz718vID27d1Pfv0PiEwnuCcMS39FQYBAdlJ4VVhCdANGPR7AF9yQQDGUSmdzcpEwjnz/80YNizx5reOnTChSmtSikJB8/CtnTdcqp4TAho+EKFS9PZ3jX7ne8Y0NXY+/tju/fsK99+3vSsrYzEuHPT9iyK7cpYJPWAJAAAlMYYA/AHfdBoiTZDLezNm1p119sxUyllywuhYjBthhzFgjPnf7K218wbK2J0G5hNE0Fp7HjWMS571iUmFglq0uK6zU975x8aN6zvcGDffMut1Ioiswy0ALAF8BN2CM0YESpHWlEg4WtN73zf5bW+fUFXtTplaAwBKkefpUNgJvtl3EkzULvK3IBhy7outjmAnnTICAKZNr+ro8B55aNeDf9nJGOZyijHknDGGWgdU7+9aHwioSAJEGt8M3ZwjY0x5Op9XQvDhIxKxGP/8OQumTqutrYtXVbnRbSzOy2blHwkOXiEYTppyTpqSQsTJU9If/Mi4TRuzv/7l5mJB791T9KR2HHQcpjVoBRB1NKpITlQiAXzXfCJEEByRYT6vigVv+PDktIb0uPFVXzx3YSIpqjIxxlFrX9MUggW6Tj93/YNep5tpxDlDBKWISKfTIlPljB2XXHxMbS6nbr158/ZtuR3NuX17irEYi8U5UWQrrSJDESqAAN29ZowRzBCEw7XWnZ2e0jBv/vD6YYmT3tzwgQ9Pl1L727GalNIs2MENt7EGTM/v/pbhugWIyFdOiUgpQoTqGreqmr7x7VlCsPvva172xN79+7yVK9q4wGRSMMak9N8vfLsB+ZblRwUQIHSiDCQdxpjn6c62QiIp3nP6lHTa/eCHp0+ZWmuEdsaOiqbZN8DAoIlMCN2UU63p9H8fc8YHxm7elL3/vubOrHr0kT3ZrEwkhOOg0kA6lMIqQjIamgSIxB8SIgT/YwzRK+pczps2Y9h7T59SXR1793snx+IitHN8UQfQuPoMoq5/UA0crJz6VWLcUSdOSl14yYxCQS1YVNPeLv/2wK6NG7LxBHcchgRE5noY8qLR0CSAP4CxcAgHrQmACh6dfsbUpSc2DB+ZnL9ghBkaPU8Z1waz12vUlWAIHNxNH9pFUeWUMTL7yp6nhWD/dsZoRFywsGbvnsLTy/b/9c8trsPMPghDYIh6SMchDAUCmDVcoImY+ENgjClNRU9xhvG4iMedL3xp0YSJ1eMnVNXVJYjI8zRiT1Vn8A75r4GIXQTha4aqkXHAnjMvg1i1YFH1e04fta0x95tbt+bzupAnrYgL5AJI+9tqYSTC0PBCHQoECIZtQGRCIAAWi8rzdHVNrD4TnzK15ovnLo4nnLFj0yasRHoaGQRCfjg6HuykOdRgmBB1O4XAAduoRtU1Tm2dO2du1YJF1fm8+vUtjVs2dXZkVUeHEgJdlxEAKTC+RqGdOajrbLASIHSdDD2TOfd9dbSmKVPr0mnntHdMOuPfZwBQpioGAMbQZwyFMwhUnaNYdd3cTsEwwVeNgipqGJcAgG98dwYCPPB/LY8+sq+zU27e1MUYSySYYEwqotAHezBXIB6z4McRGoevgsFHiARkvAOotGtCgWpsgqKQzDLTv9T/J/g9cMryPyMyW/ih5WLu648nQVhhEGAYKVU45SJgGFHLOWOceUXV1eklU+6xx41OJJz/+MyC2XOGK6WNeRPxHsOoNdzflT+AEK0W44ANvhcqKkWc47o1HX/8fXMup15+sa2rSyeT3OymKeXTgIIaxUjnCW6PQWMjlf6Mpe4DiEBISMGdoHTdQd3J/Mn/RtBLI30SACIX+g5ddJDASwSIOJgIAICB5wEgQ84ZIBTyKtclJ0+tXXriuPrhybPOnhePi4i/jGlI7NHG/d3funW7gVaesEhBFLL5BBAxn1f/deeOfXu9Z59u3bK5K5HgsRgHIKUwcKSKvs4gIMCgMYGizsmMgSbI56WU+p3vmjp33ogpU2tPOHGcH3LuacYP4aE5kHpat64/cGiAgV0fFsnIwRCE7bsOO+uTDYj43NMHtmzuWrOq85F/7BWCCQcZR9Im0+NgCk8bwAQIyewr2X7sH2PoeSqRdL58/pLRY9Kz5wwfOSpt1Ew/Ewln4fQxcPpWiOgoG9pmA2vPwR80zTZCaeQUnBGQUkREx76p5rjja/fsLpz6jvqWnYXf/Wp7Pq8dB0mbrTeT6XEQBCIMYAIEWrxJnakUSaVdhzkOaxhX9dVLTjju+AYE0ho8TzGGjsMDF8kBKmhGzDLT9TXzA+o1AiLDgeZoFHWvAF9hBi4QAZUi7elh9e7Jp8QAaPKU5C+ua9y9u+AVoVjURlwGANXD327gYYCtAaIrXUQThFUsKKX08BHpWIwfv3TcWWfPdxw+ZmxGKa0UOYJhtzxTA1HNPGiJacJosKO9CACZKtcYb2bROQDXKsFb+P9G30VKI8Fhy86C5+n/uqvl+WfaCgW9b6/kHF0XkaGSELR69I0GxBpgYBHAVDHnyDmXUudyHmds5uzh8bj4+NkLjj+hgTFMJJxB0V0gMnb63UWTlIQMhGBbt3bkc/J3v1oPAJ/8zIxEgk+YmJFSkwaT/ydK6YH3ZodQjUxz5HNKa3j+ubZ772wpFGj9uk6lIRHnQqBWoLstDyqeAGEVkMkDi8Q5R4aFvMx1yREjUwsXja6pTXzxS8eNGJkO3NRIa+o+lAy4/tEj7SEiKqW1Bs7R2DxPL9t1zc9X7GjuNO9BBGPGpi+4eO6SE0YAkNEWGUPOgQhDCg3IN4WweCbczNDANNae3cXf3tbc1ipXrcju2V1MJEU8bkL7/c5XqQQwkhr5BQDfQQUBIJdThYI87k1jZ88ZOXVa3Qc+NMesw0q5AHFAj/rRrm/mOJPWkzFkDFtaup5dtmv//uIdf9iQzyk3xs1fBWfFgo4n+JlnT62riy05YfjIUUnjmgr+Tm03Jgy8twZTtkBz8z8MfBDxz/fv2bypa8ParuUvdcRiLB7n4C8Pug1/Yb8e6gQgXy0Ow1WVomJRM4SPnDm/oaH62DeNnT6jPuwBPaLOB2on6GYShKQ1PeDJx3e+snxf49aORx7eITiLxXnQb/xqNa9TyGup6K1vGz1hYmb+groTTx7p9ydT3YOE/KVCEqhgQ40x3LSha/lLHTubC/fft9fkdzF6EQAQmS39oJ8NVQIQIiIhYwhIWpseIKUeN67ms184rqoqtuiYMZlMjIiU1IjIfQ9NABgcDa+1H4xCBMiwWFC/vnXNju2dq1ft37KpI5F0EklOBEr5i0JTMwho/FA5Z4CYz6tcTk2anJk1u6ahIfUfn50WizGtARHMf6O+zQO1NsINBEQkpYAIOAdEzGbVipc7OtrVH3/X0ry9IDiasZCZHQhCfy906G2EUeBCqDwFhKmUozW85dTJH/zwvGTKmT69HgCU0r5zssMjHpoQ5Cnp7+bt8UaHkjUZQym19PSePfnrr3nlqSdavKKOx3jdsLjW4Hk6nPyibmTm1aQkAIjFWCLB9+zOb9/WHHP5ls3Zcy+YNbw+Lhw/Ni00qwaabBqWJHA7xUh4mh9cmkywE06sAYCp05JdOfXn/9n71ONtiJjrUn4uPdanDnZ9OAMAEgEXbMyYKq3hs58/buGi0elMrLo6Hjrlcs56zPIDzef2kFJgKGu2txfzOfn8c7v/+Pv10qNt2zpiMSE4k1JrDQCILLL0D0Swku0bDHgAyBga5aRQ0A3jUo7Dzjx78jHHDosnRFXVq+hgptUGWHWFe8lhdSllQvMAETvaZTarVr7SecfvdjEGu1o8pft0BuhTAihFmarYHXefmcnEEgnHeKqZoNVB4anWQ9Y0Q5rZ9Nm8sS2fl/fctfGpJ1uAoKPDY8xPvgAU7k0EDUElMaAbASIyiFn1MkTG0PNIa8hkBCCesHTEBz8yIZ7gk6eYnRBwBPbYCRmQldeDBmDMRWMXKUX5vM52qC99en22U3E+FE0g8I1WqMrEU2lXKV2WNJp9UexDy5rEObou15oe++f26656effunJFrGMNYzNj6ZujwLYHDebOIuutPE1qBSTyay2vS9MhDOx/6x84RI+PnXTDrpDePcF00EQ5R2XRgDiM9wtNCu8ichpZK8X7ZMO4HVwgddPQB5wNzELrLmmb6DjOeY/P27LNP79qzp+uOP6zXilyXK6WNpWd+8D1ce2fFRaJxjRqGiIwjADoc9+7J/+A7L5951qT64bHjltSPGZvUmqRHgMR5MK8MyMDOHmH7ZvI3L6jpCO/dG/QDAZiv/Q/cId8gLF4YVWxCKBHxkYe2rV65b9Omtn89usNxWDzGGUeTkaqbm6e5Ua/fL5yzSxHuiAjG+wAIfvurjdKjk04ZOXlKetbs6recNsofTzQAUiibEg1Ep7TohGBKx/qjjP3pDDcAWwW6b+toTVr7LmucY2end9vNK3a1dK1cub+psSORENXVrr/bRaVNzLJP5L4tjKUJxeihiYTAJDy7bO+jj+waPz758D92jRwV/9TnpqRSwoyp4fpqADqEg18giGrcfY8B7A3a5zhIrCATXO95Skq9c0fnNT9/6blndymlYzFRVxfXWnuehtL+TR9bsGRkUzfG4gl+4EDxkYdaOMfNm7LnXThj1Oi4ECwMezebieE27YDjQf/BEgDgoK4vpSYCx2GtB/L5vHrqyR13/2md5+nm7Z3xuGBcSEmepyDYt4R+Gr9MP1bKKGmYTnOt4bln9n3j4uWOwz700XHHLx0ei7OaGjdMgYFHLYf7IEXlEiCqaUJJ1lSMMdNRtm/ruPaqF5e/uEcTdXV6nLF4nJt8iaHzQj8nRQjDEAGJwPM0IsbjbNfOvNZ0y40bb71p0/yFtV/6yrSGhqTZOtBaG5+8bmnWI/phpaESCfAasqbj8FxOvvzS7s5O71e/XLlh/YFk0lGa3BiHwLOt28DZ7/2mtFD2X00p5AIFYqGgGcd/Pbp7R3Puk5+ZlEqJ+Qtq4glOfmIYI5sCGB5V6pRQWQQ4hMMW+CdUOw42NrY/+/SOXS1dd/1xXdFTrsuTSWEkFK0oGCgH3OZ05O1KwewIgAyBIJnk27Z1ffebK10XP/TR8SNGxo99U934CUmtSSkIUkH6m1MVaBpVCgF6uOz6wrMmABCC/fUvm9et3b9h3YFlTzY7rojHRUKIMOcH+F58gTQ/ULtHt2wMhEDBlgvDRIIT0R1/aPQ8WnLCsKnT0jNmZN7+7lFGug3PXIqsECqFBUOfAAfLmuEenBDM89TNv1h+1x1r2loLsZiorokFBy0GXsrUX0vcMsDXZDVIrREhHufJJC5/8cCzT++vqXaamro+8emJRikyAWtKl2TTCpkMhjIBeobtKTLpcotFpRRt2dz6y18s7+ySa9bsU5JqauPS0xFvzaHQ8hQ4dZmXMXqR47BkkhXy+s7bt730QmsyJT71uYkTJ6U4R9dlQcxdt+iWoVEbh8TQJECPrm8kS8dh+/bmCgX56CNN//1f6z2pm7d3IGOxGBcCCwXFhki3f1WYCUETFQqacwSAFa+0AWBTY5cQ7H3vH33yKfWxGK8b5nqeBiDjgzS0ZdMhRYAerjuBrGlOt8Ytm1uv/vmzq1bu1Yq6uiTnLJFwAM0ZQRQ6LwzBRj4IQWwNmejEPbsLSsFvbmv8/a+bZs2u+vKFUyZMTBIRaZCHlE2HEBOGEgFKzaOkJtJcMMfh2Wzx5Zd2dXQUb71ledPW9kTcUVoH3pra2Dul3BQVAvIdiM0q35x0L4ukOT3z9P6Wr+U/+ZkJ6YyYN78qlRZmZxAROGfh2ZRDpqqGAgGCgy38X5XSyJAztnHD/heea9m+vf3uO9doDa7LEglf1vRTupZuMYSa9HAQ3cTDkrcpESQSvKUlf/l31yLDD3x4zJix8YWLayZPTQWngvs1brIaDIGpYAgQoGT2+EkWBLv/vnUbNx5YvXrv88/udF2eSAgTtejLmmHKvsGr75QVhga+YyYAMownEADvvXtHsaAXHVszY1Zm8pTke983yngfcY5Dpu6GAAEwOA0MOMd8Xt547XP33rO2o73oxnlNTVz7TvwQyeBtcQiEVUMapCZEiMV4IsFXr+pY/lJ7JsObGnOf+uz4WJwFYz8NgYlzEBMgzBctpXYcvm7t3muverZYUGtW70XEmtqY57usQQ9Vcwg021FCaBR1l00xkeTFgr73nh0rX+mIueyL502cPjMtJTnOIMsFfTAGMQHCWdic5tDZ6b30QgsRxROOVlQoqEDOD7JK9HdxBx1M5ZGGYkEjouC4ZnWWIXR1KijlBxjcGNQE8GGGH8dhqYyrPB1Eb4Uzuu37vUH3rC3+SB+PM0egcPolfPeoYCgQwEBrUNIE2vtSxVBpo4GCMC50aIz9BuzIbzFA4KcdsTjKGGJ1PHQIYGHRC1gCWFQ0LAEsKhqWABYVDUsAi4qGJYBFRcMSwKKiYQlgUdGwBLCoaFgCWFQ0LAH6CHjQL9EzefDgi4aYy8FAxdBxhhvoCEPQ6HUuwwg9LI42LAGOIkqHZAS9nzFknEUnACzNAebkLNBh6sXgu5YMRw+WAOVHcDQiQNDBmZ9yCKXS+bx30PmoEH7iulw4DACIUGv/mDDwD9QZuFkZBy8sAcqM8GBQRBYO5MWiZgyLRWoYlzrz7KmuwzWZg379jm9OfPE8/ac/bNre3OW6TGtwBDNnzYfnzhPZ2aDMsAQoJygInkL/eFNl+voHPzLlLaeOzWa94SPiM2fVHpxoLfxkztzaPXvy6bTz6CM77//vRobM88gctxpmf7EcKCMsAcoJM/ab8+LzeTl6TOq8C+Y3NKRHjkpkqlwTVWgSMgPAoZbDNH1mzfSZhIhTplb92xnjm7d13njtmp07c/G40NoEZFnhrpywBCgbzLmkQnBNlM+rJcePuuCSBRMmZExOQdPvEYlzZiJse8wA5oxhrU1Kc0qlxZRMZuq0qklTMtdeueq5p/c5LhOCSTkU0lENHNjhpGwgIsfhnqcR8GNnTfvRFcdPmJCRUpujGoVg5kz5MIUpRQBBlhfOGecmmSkoRVLq8RNSl//0mI98fBIiFD1tspn397sOHdgZoCwgAOa6LJv1Ro1Off6cOe/5t4lSail1j3PpXjudIAXkMP8VghGRkuQ47MsXzJoyLXPbzetbdubTaceT2gb9lwWWAL2Hr0sSIaIQ2NFRfNOSkeeeP3/m7LpiUQnBIkmVD8ts8Q8QD25uaMAF05q8on73exsmTc7cdP2655/Zm8wILSPLYsuE3sKaQL1EqEsyhpxjoaA+dtb0H/z4hJmz67yichwWHk/du9M2zBEVAP6qWjjoeXrmrOrvX77wIx+fWCyUspYPsTwlfQw7A/QSRvDhnGtNrssvvGTRu947gXPmedpxebkOlYgeb+04zPN0dbXzpfNnTpmWufn69bmc4pyZNYZF72BngN7Dd9pBGDY8vvjYEWYFHC5Sy3bOUnAfIjIccBy2aPGwYfUxZnwtbO8/AlgC9BJExDkrFtWkyVU/+tnS+uEJKc25G8HpemWFOcaDiNwYl1LXD4/98CcLJ0xKF4tacKsL9R6WAL0DAgAylFJns14m48ZivPS3ozQkR24bi/F0xunslFJa++eIYAnQG5iFqVdUI0clT3vbOM779LgUs5HGOXvLaaNGjop7nmYM7RzQO1gC9BJCsHxezZxZd85581NpR2voAxqYLQXGUWtIpfgXvjR9+oyqQl4JYduxl7AV13sgYqGo8nnZL74JiJjPq2JRI6Id/XsNS4AjAZmzE/vFCkcEwa1b0JHCEmAQww78Rw5LgEEMO/ofOSwBeg8EJA1K6n5RYIhAKiI/uMBOBr2EJUAvgQiaKB7n8YTol30oIorHeSzOh8aB1f0FS4BeQkqKxfiWLe333LUhn5OM+SfzHVUymL6uNTEG+by67+7GrVuyboyrUpSZxRuDJUBvgAhKadfljVvb7/zj+lxemX7ZN083TMvn1F1/2rqtsdN1rT9c72EJcCQgzll1tcsQlOrTMVgpQsTqGpdx2/GPCJYAvQSisYLY1q0dl3192a6WnBCsWFTR+K8ywtwTEYtFLQTbvSv33W8tb9qajcWYdQc6ElgC9AbG39n0SK+oNm1s27D+AAFxjlLq0Hu5fI/z/atNjCUAbFjfvmVTtljUphgAaHWg3sESoDcIUl+hlJoxVJJ++J3nbv/dOjM8e54OrzlSFpjASEQA8DxtJpk//n7zf35/hWcerbR5kN0U6B1sRFgvYYZ5RNCaJGjG2I3XvrJxfesXvjRvzNhUsagchwXmUC/jwsKBn4ikR47Ldu7o+uUv1v/9wR2JpCAC0hQUw3b/XmLoEICon7aDEEkTAaXTzoMPNG7Z3HHu+fOWnDBKSs0YhJHBvb03ak1ak+OyZ5btuen6tevXdWQyjqc0aDBucH3c94eYqTV0TCBEP9tmvzxcE3meTmfcjRvavvOtZ/74+3XGWO/15kAo+QMA53jHHzZ//9vLN23sSKdF0dOk+80RgrMhNd8MnRlAKfI8zTkLO1tfjo7mQV5RJRI83yVvvnHlpo3t5104v7Y2ppQp1RvYrzUXmy8eOFC48Zo1D/19JyLGE9zzIv7PffKG0Ydwjp6nlfI/HwIYOjOA6/Lq6lg+L81U4Kct6cMCmFhgz9NOjBPRy8v3FgsKoPc5S8wXiwX9ysv7icCNMenpPh5+KUj5yBgig3xeZaoc1ynltR7sGMQEMBn3TUJCpfScucOvvfGdxxw7OpeT4KdVg35pKK1Ia0inHV6OXSrOMZVytCatDJP6dOQ1SYe4QADI5/TCxdU/uWrWjNlppUj4+S8Gt0U0iAkApexRxDkDgKnT6n5+7ds/euZsAPD6L42m6RBSlufhRKAUwdGLtX+1t/Cz0wEXWMhrpegDHx59+U9nTZ6SAgDOEYDKlfmlHzF01gCIIKV2XX7RpSdMnT7slhtf2L2nK512PU9R9NChwdZg/dXDTKUxhkrRjFmZ//fJhpPePEwpUpIYP/LbDxT0wwxAwSReruE5lFlMOs5iUZ3x/uk/vfK0xceM6ugoCoczjkQU2LN9/8aDG1pTPM5cl+XzCggYLx0CUpb7h92gX8Iq+s0EMttD5XKaiabRdBzmFdW8BSN+8vNTP/Kx2V2dHhAIwfzebzlweDDdWylKJPgzyw7cefv2eJwTkC6r11+Y3xegfybnPiWAMSsDbYSMRl4OhwEAw4FgKnBc5nmqtjZ+4cVv+sZlS+NxXigoE71us8keJsI+WSzqmhqncWvuyp9uzOc0Y74v6hG2mkl/bfY6zJ28Yj8s2fqUAIyzfM778jn3P/Vko5HGy+s6hqWpAByHK0Wc4wc+NPPKa942fXpdPi8ZQ7NRMNiXbn0J0sAY7NlTWPlKh1SRAftI7klk1tBKERFwjs890/6NizYV8pr1rVHSd08LjkWBtWv3fP2SB+++8xWlNOfoeSpSKWWAyUpLREIw46+2YNHIa258+7vfO0VKrbRRh4JS9dn7D14YJZRjMmnEtiNF2NCe588n99+35/Lvbt20Ied3kj58ub4jQDDmUjwuvKL6yeWP/uTyx/bu7TJJlUtLgrKujE3yfil1bW38ez88+YvnLk7ERS4nXZeFq2KLw4FRY4+wcUKzBwCkJMdh+/d511+1/fort3tFisX83tiXjdLnawAwx8VRKuncd8/Kiy94YPmLO1yXK6WVKrMnfVQdMubWJz417wc/fvPUabUdHUUu0OZUO3wgwhHu60XNHiXBcdjKV7Lf++aWP9+/N5HkYHZO+nxI6lMC+K+HoDV4UmeqYiteabnkor/ee89KxzFVUH4OQJDKXAhWLKilJzb89KpTTz9jGgIIgSVnekuFQwIBgrNwOjtlryWgMGu8lAQAwsE/37/3+5dtWb2qM5PhUhpFpB/er69nAICQB1QsqmTSaW/L/+zH//rRDx/tzBYj0SRlM4dCDiCi47Jcl9fQkHnnuyd3dUmtSQjm+wxZDnRH2FjCwVxOTZ+ZPveCSYkk15r4G9kIC4M5AUhKLQR2daprrmi64eptHe0ykWDFool76J/6709XCETwPGUOBv2vu1decN5f1q3b6zhMKSqvORS9VTwuPE/NmjPs299bmkg4+ZwUAhmzHOiOiEjAOSLDceMSx72plvPSBs7hbISFMT1KkVIkBNu0oeuySzf9+X/2cG6WZ/0c0NyfBDBVqZQmgmTSeXn5zgvO/fODf1nPmZkrg6RnZeOAf6qFEKyqyn3f+6dddf1ps+bU53PSGLhmiwCgsmkQ6P/GESge5x3t8uRThp37lUmFvGIMgxCfw+394Fu2wDk+8o/9l31t46oV2USSE5FS5pjN/nzdfnWGQ9/hRGuSUicSYv/+3Pe+88i11yzr7CwKwYLT1cuTbcoED4Zbj1LqOXPrr77u1NPfN1UpkopK8uiQ3inD1/4T+vuViOA42NWpMlViztxM3TCXCxZU4+tvpETVHiFYV6f65S+ar/jR1gMHvHicSam19pcW/avE9bMzHAYcIALP05xzRPjtr1/cuGHfhRedOGVqnbGRokeOHuHjDAcYQ+M8l6lyL/ve0inTan9z24r2tkIy6RSLGvrPBe3oIUrpsKP3vAb8Ja8JaM5m1aTJyS+eN+n4pXVeUQsHD8f4MUd9+8GcChyHbd2cu+n6bc8ua0+lGZG/Dg6bvn/R/96gkYpApTQyrMrEnnqiqamx7cKLlr71tMlSatLEBYssp47wiSV5VCnteerMs2ZNnVpzw7UvrV61N5NxA1GivxunLAhmM0Tk3NiBSATdgiqDHxgiF6gkdGYlAJ78lvpzzp80tiHh+5bj6wf4R41+IhAOPv7YgVtu2Na8vZDOCClLLTgQej8MBAJAZLhFBNJULMpU2t3V0vHtbz581if2fvJTixIJx/OU2dktSxBGqDJxzhijYlEdt2T0T6+quvmG5Q/8eXMy4TBhBirCwbxXhoH+yDiShnxeBcfRY8xl/iyAAOS/o5TU1aVGj0qc8enx6bR4y2n1NbWu52khkEpevIdGMPADEUpPC8FyeXX7b3bec+duz9OpFPeKGrDUcgOh98MAIUAJZIJcwCsqITgR3XbL8+vW7r3k0pPGNlR5RcWFbw71OtdICLMSMCOW63LP0yNHpi791pJpM2pvvekVc961MiPWoOWAqSUusFgk12Gf/cLUcRNSAPTYw3v+9tddsRjT2lQ6MIb5vFp6Uv17Tx+VqRILFtUgglKkNUVPPn71B/kXaE1KacdhO3cUbri6cdmTrfE4FwJNKDMCEkA/pLJ4dQwwAhgE6hBjmEy6jz/auH1b+1cvXrr0pPFKaSmJc2acSMu1JDBnUJt4mrPOnj1lSs1VVzzf1NgRjwutwSzXTMEGTsu9Ru2ZcZ2IGGeMYT6nxo9PnffV6cctqQMARJw3v+Y97xvDWWlMN0ZLw/hEfX2MiJQiAOIcD2fKDSQKNJFrjsOefbr1puu2NW7NJZNcKRjI9uSAJABAuIoi0smU09TY+s1LH/qPTy/6+NnzHYdLWTKHyrQkAOM8Z/So45eOueaGU6/5+QuPP9YsHCYcpqT2gy8HdjL+UvGIhMO0hkJBnfTm4V++YProMQkpjc8VpTNi4eKa6LsE4pjvnxt2/cNY8pa+KASTnr77jp1/un1HrouSSW7iQk0ND8xq42NGvQ0AgpGt27KopHeFplskyBwjvyCgMV3MpcE/odgQXoWBCRqKaeFzS+sALK2MkQi0JsfhUtKyp7Y1NbXNmTuiuiYeLuzKxIGS8xwAKEVV1e5bTh1HBGtW7S8WVCwulNKm5OGSPfJt///mI7O/U1sbf9d7xpt4dnPbN1TO4BwA7OqSf/trc+uBouOwYCjFoO4wEHPCZaXvq+w6rFjQjss+dtbEr1w0o7raUYo4w8CGBKWACMz8prX/80Fn/uFh9n4iEILtbilce1Xjffe0AKHjmEUUBko/diswRhs9qL+wnwW/hdf07E7Rb4S9tJuyFV7Y85roJI6IA3YGACNWmPqQUjPGEgnnwQc2Nm5p+8pFx8+dOyKeEIyVMzwv5IDZmmAMv3jugukza2+87uXtTR3ptON55ZGhjlZ9BRlLhcM6s7JhfOqL50475dQRRnSP2DOAiOJQLR8uig5zl9fcUGso5PWa1dmbb2jcsK4rnRZKkZRRtWfg5u4d0FkhMCLhGeOkpia+bu3eq69YFibhMVeW3YHUbD4Ui+rU08ZfcfWbTzhxTLbD49zE0/RnDOshELotEBj/gs6sPH5p/Y+uWHDKqSOKRWV8wiHosoEpdwgEiR7ewC6v5xnlh35xXeOG9V1V1UJKiq6aBupw4WNAEwB6KKRExaKMx0V7e+H3v1ne1Vl0XV4sKijJmmV5Yrfw4mJRTZ5c/f3LT/jEp2ZLTweqCJT8JvodQVSpMfql1Gd9YtK3fzBv0uS0V9SOwxjrOa7jq+N1nxZ9d8/Trsu6utSdt+/Idsh4nHlF6lYzA6SKXh0D2QTqDl8aIs7wwP7cr259cc3qvRdfeuKEidXR3eIjl0ehu/Oc63IpdTrtnnPegukza6+76qU9e3LJpGMkwjf0rN4R9LW+E7gtmDE+16Xqh8fOvWDGW08bCQRSasdl5aqT6CsEcic5DtvWlLv+6q3PPd3muCxyUNpAH/hDDPQZoITAwDXWeSrlLntq+4XnP/ivRxsdhxsVIlgLljmWQAgGQFrT29854arrT1m0eERnp0TEaB7SQxa4x/iHh43wBvB6YyiRESuhq1MuWFT7s2sWn/b2UVoTBWFA8AYX36/9LFMiJYkIHIc99fj+b12y9rmnW5NJHvR+Y/WX5YF9gYGrAkVn7NKfSpGTEIuJAwdyjz/WKCXNmzfCDNWMHZa/ymEiDC9mjAGAkjR8RPLkU8bmuuTaNftNVkatCKMaBwBjKCXV1sTe9o5xqZRjFipaA2nSh/c/0kBEUhJj2NHh/f3B5tZWz6i0GFYNAQA4DjNS4/veP+6Sb8wePSZpKiFwbi1b6rZuzm0O8zx9x++bb7qhqfWATCRKcicEs03YXUrdyapAZQCG4gN4njKd/pZfvLBh3b7zv7qkoaHK8xTnyFg5B7+oOiSlzmTcS75+zPSZtbfevHLfnnwi6SipKVL7ZrkiXJZMOYxhLMZ7VwzGCRETSWH2YqPqJBExZEJgrksNq49/+gtTTz+jwegEodpTNrWKgErObeQ4bEdz/pYbtj7+2H7X5a5rpAjEfstNf0QYbATwQYbXZrRLJp2H/rFly5bWS76+9E1LxkqpifyM5OVVSMH3nyNP6TPeP2XylOqrr3hp1cr9qZQgDSoYnrUGxjDb4T35+M6qaldJzTkSvUYx8ODfEFBrzTlrb/OyWckYBuGISETMqD2dcvacmvMvmjV3Xo3nacZQlM9l0K/oiHMbEAiHvfh863VXbdm6uSuVEkpBd7mz/C19tIHHLPhxZIu/NIMEHyESEAZzbjB7UWSKIgAkM0f5l/r/BL/7VwWf+TOzX2NY2rsH8IcafxDtaQL5NUzBySgl/37mOCyfV8mk89nPL/rQR2eZmcGsDcwdytI23c4sktpx+N49uZtvXPHA/211Y5wxDNchQciBifXrPi93r+eD5uVu15hp3I/fJzC+NEIwTeQV6d3/NvZz50yrr48bf7WozF+Ol4VwB0t6mgssFvX997X84dfbczkdizPplcweCG2fsHV6dCe/sZEw7FtY6j6ACISEFFhRULruoO5k/uR/o2TeRCfhyIW+CUQHVbXvKDWY1gChqRcaiuT3DKNISEVPPr5t547snLkjqqpjxaIy9kBpK/LIEOzC+hsF0tPJlHPCiaNr6+IrXt6Xy8lYTGgd7vyj6zLH4cJhTvg/UfpZRP7rvMo1jsO4MKqrv8xwXFYsqGRKnPPlGZ/67NRUSph3j5SxLL2/VGOeR47L9uwu3nD1lrvv2IEIQqD0KDTYw44RNOpgWgMMcgKET0Y0C8RYTKxeufelF1smTappGFdlYspYkG2sXE4T5mfO/VXpvPn1c+YOW7vmQMuOLtfloRRokv4Fy1/jdEDad0Ag0j1/OPgarYG07yNLZMweNXVa1be+O//Ut402bmpRtae8E50J5HVd9srytp/85/pnn25NpoRxo8Cw6SwB+p0AAMHMa8JYE07LzuyTT2yPx/jc+SMAUCkquzpkpgJDLSlpbEN66Ymj9u7Nb9+WNXH9GNREt3c8VMP3+KTHNWFluTEOBKe8ddQ3vjN/6vQq6WmzEjAO22VXe5QCxoBzvP/enddcuXlHcz6ZLEW0RPYWLAEGAgHCJiHSimIxkct5y55qbmnpnL9gRCrlKkngH51ULg6U1CHGQEqqqnJPeevY9rbi88/tSaUc422GiP6yhhDClwYE3yrtXkWRawhCzRcQ0Y3xjnbvQx+dcPHX52aqHCnJJLPwX6c8nb+002ISxrS1ejdcvflPt2/3iuTGuPQIAJlv9HfvT4OWAINnI+x1gf4WDPrZVlAIdv996y++8OE1q/cKh5lYDTwKCRgRUQg0p2TPnT9s1OhkNusF5wT7Fd/teQc9/BClMStLAkQUDnZm5ajRiTnzaoRgxWJpyVvGgT84mY9IgxBs3dqOb31tzV/+d5cQjHOUnjZzWr+HsZcXQ2UGCMYYYwthcMBoLC6amzsee7Rp2LDElKm15lT3SIrXMvQfLPnPoefpadNrFi0avmlT27amzlicAyJpCga/yAwQsY7CAQ0i1xjycMY4x65OOW9+7be+N/+4JcO9onJcXrbS91B7pDYpkh762+6f/nD99qZcPMm1Jq0DdYZeZUAdtDPA0CJAUBQK5DStwY3xQl49+khTZ6c3e3Z9MuUcHXUIAMCkchkxMnniyaO7uuSaVfsR0ezgAkRe+vUIYHwJhGCkSUr9vvdPuPgb88aNTxvtNTiQsiy9v1QD0iPHYW1t3m9ubbztpq1SkuNyI+wGWidGO7clwIAkQPdXR0StiHPmOOz551o2rNs/bXrdiJEpE6IaHqxdjs7k38HIo4mkOGHpqPrhiRWv7O/qlPE41xqIjMmJVHqDQxDA9DTHZYW8qso4535l9ic+PTWRECazmt9lo23dW0Q926Qk12UbN2R//pMND/11dzzJEVAFXh4RBwxLgEFCgFK50Y94SiTE1i1tTz+1o7YuPmPmMKWINGGZ1KGD5FEAgNlz6uYvHLZhfVvz9s5YTICxNwLzJtKfgoUyIAEwjpyzzqycOavmsu8tfPNbRpPuKXeWpfeH+9YmJPrhv+/++Y/Xr1+XTaWF8hNXleyxoN4tAQYbAYJAQVRKJxKira3w1BPN2ay3aPFIc4oMQNnUIQzWiWZukZJGj0mdcNKottbi+nVtxlVB6+ANKLAogu0808s1gefpd7674euXzZ80uco7CnJnVO3hAr0i3Xbz1l/dsqWjQyaSXBb9dwkC8iIrE0uAQUeA0iCGoBQ4DteaXnpx1/p1B+bMq6+tjZsUTmHKyyPsYL7NEMijSlI645x48uiqjLtyxf58XrouL+3skv+exj3EcVihqJIp8flzZn7hnJnpjKPKLXeGaduUIuPp3bw9/7P/XPvgA7s4RyFQesCMzU/RVrIEGLQEMF/w+0+wYew4fMvm1icfbx4zNj1xUjUAKGXUofL4DkWkIaY1IcC8hcNmzqpZt7Z1966863IIfFFMV/MjWnJq0pSqb1y24B3vaiAAE2keqZUjwsFqD2O47Ml9l39v7ZrVHfE4Nx4lfvVHLDRLgKFAAP8D39jwwwna2gr/fKSJC5wxoy4WF56nGGflUofCr/u7xZ4eNz6z9MRRu1pymza2m+Bdo9UKwYigUNCnvHX0t7+/ePrMas9ToU//kZcEImnbAFBK7Tgsl1P3/Gn7tVdu7OiQ8ThXKkziH9pZlgDh14YAAcJb+kezotnsZAyefKJ5R3N25uy6mpq4V1TGaaJHJ+4dzKuYnsc4SklVVc7Jp4x2Xb5qxYFiUbuuYByLnnZd/h+fmf7lC+ZUVxuzxz+xAMph9EecWMHzyHXZjubc9VdtvOfOba7LTPiOeVDg4NC9dSwBhg4BIs0cbJZhPCFWr9730gu7Ro9JT5xUbVKClst/7iB1iBBx8bHDJ0/JrF7Vun9fQUka25D62jcXnP7+CeayqNlz5Cvegz3bnnlq3xU/WvvCcwdM/hKzyeUvSLDUuSwBhigBoFszE4BSlEw6u3d1Pfl4MyIuXDwCCJUup/9cT3NI0qTJVW9aMnztmtYRIxI//PGx8xYM8zwdTbtSRrUHAIw7IOf4p9ubbrhmw+5dhWRKeEVthoIgJWupvSqHAIM8IKaUuBYj72CWvOTXGwV+ZUE7l0rlFwFNdK8Rv9/+zonnXbh42LBEuFIsr8sN+vE05DisZWcXAIwanYxGtJT3WaFn2/59hZuu3/jwP3YjA0dw49sTrSKI1EypdYIqgogOhT3iSwZzQMwgDYksMxDB87TgjDF68IEtmze1XXTpsQsWmpxqVMb0CqE6ZFymR45KAPjRPGUMZQxLK6VGACHYipdbr71y/Yb1WXMWr+dphpEjoSoYFWkCRUvlzwCAiGbDNRbju3d1PfbP7em0O216rRBMltV/LmIO+Xk8y6j2QJDGHxHNrCIV/OV/m6/40ZpdO/OxBNdBruawJaJVVKq9aOsMaRPIEiBS4CDTpTku4LF/bu9oL86eMyyVdowuWUaFNLB2gJXczI6093fzbJPkOKy11bv1po2//uVmABQOUzKQecJN6IongDWBAgR2ojk/jzFMppy771y3aWPrl7+yaO78+u7558p2UlMZNp8B4FA521atbLv5hg0vvWDUHgj8Ogdr+oajBDsDYPiwqEJKRKQhkRCNjR3LntqZzriz5wwz6RDLqw6VV+3Rys/Z9pf/bb7yJ2u2bMoGJ3MFgmygdVoTCKwJFG1d3ywOFdJAPYzHRWenfPqpnQcOFBYdMzIW40G8b1mTTx0BQmXJ+Evn8+oX163/3a+35HIqnhD+2USlRuveOhVPAGsCvRYQ0fOUEByI7rlz/aaNbRd97ZjJU6ql1IhUXs2+F+h+JCMJwbZsyl575doXXzgQc5kQzPT+/q7FAY0hFBN8FGC2JZTUAJCI8xef3/XV8x575B9NxgqSQfcqV4TxGytbsHwwij5j+M+HWy658MUXX9gfj3MCUFKHqqvFq8GaQN1NoG4FBgQMEq4Y/zmezXqPPdIsFc2aXRdPCJMPue/NodBzjQi4YF1d6vbfbr7hmg25nHRjXCkw+4gUsQCi9WxNoLCvWRPo9WHmgeAse4YIt92ycuOG1k9/bs6UqTWMIWPUlxyInk2kNW1Y3/7bX2361z93p1KCCKXXIx+jxWvBmkCHCzPiKKW1ppqa2D8ebLrnzg2Ow6SnTVgZ9IktFD5CK5Kedhx2711ND/+9pabGVdo49IPt/IcPS4DDRulcSigUVE1tbPXKfffdszEW54hGZYejbXNHkvRrQIzF+f/c27RmdVtNjVsoKBgYqtTggjWBegNj+jc2dlxz5fKNG9q+dP78dNqRUnMGWFbnuSh8y0eT0iQEy2a9W25c/8D/NZuEDgP5MOqBDEuA3sAoj7EYJ4L/vnfj5k1tX/3aoukzaqXUSOWXR7sn6Sch2Ib17df8fM2Klw/EYsyNcSP49HetDEpYE6g3MIOxOXg9nhCvLN978Vee+PuDTWZn1yurPBr0fl/uBMR/PLjjaxc+v+LlA34gry939nelDE5YGfS1ZNBQzcPwfoGiR5F81K7Lcjn5r0ebC3k1a05dIiHMeS1HLg1FT+ZyHNaZlb+5dcPNN67LF7Trcq00RRLoRuvKbzErg1oZ9Cgh6Hb+aXacM2T4u9+s2bih7dyvzJ8ytdrzNOdhtpU3bA4d7Ny2eWPHL65f+9QTe1IpQUCqtOzut63oIQBLgN7Dd45GBAKlCQkyGfepJ1qamrJfOm/eqW9rkFJTsCR4Q1NByeiXmgAch/3z4Z0337Bue1NnJuN6nibfoXkwncg7MGFNoN6YQNE/hXcnBKUonhDtbcWnnthZKOj5C+vNoXqhOfS6M0GYuAr8VEUoJf32tg233Liuvc1LJLjn6ZLxEsnV3K1U1gSyJlB/ABHB87QJd/zdr9ZuWN96wcULxo5NR82h17BYDjZ7djR3Xnvl6mVP7HZc7jihcxvaFW+5YAlQVhBgkHctnuBP/GvntqbOCy6af/zSUUqRlPo1jjEN1R4lNSA6Dnt62e7rr1rdtLUzkeQmogXR2jxlhjWBjswEit49iJgMnOcwFuMH9hcef2wnZzhzdq2JtDykOhTGp4fnsN91x5Zrrlx1YF8hHjmHnQhKb959fu9RKmsCWROof4Cls+zJpGGTnr7xuhXr1rWec97c0aOTPdSh4Fsls6dlZ9dNN6x96O87YjHmuszzCCDibGetn7LCEqD8iCikICVxhsmk8/e/bmvamj3/onmLjxludtCiySBMRIvjsBdf2Hv91avWrmlLpx2lSEqzzrVa59GC3Qk+KgiMIUAErUFKlck4Gze0XXbps/fcuclcI/1gRZSeNl37njs3X3bp8xs3tGcyjpSkNZl53Nr9Rw92Bjhq6G6WF4s6FuNdXfK6q1esW9t2znmzhw2LGx9S4bB9+/I3X7/6b39t5pzFYrxYjAbyRq1WizLDEqCPYFymuUAu+AP/17h1a/sFX50/d34dAKx8Zf+1V61cteJAMuloIl/tsd2+T2AJ0EcwRrxShFqn0s7aVa2XXvTMt767CAEu//7y1tZiKi2kp4kAGfhnWVgGHH1YAvQdfLcJgmJRx+K8ra3w7W8+jwCFvIrHhVf0DyQ1kqgVe/oGlgB9B/TnAT/5nOMwr6gRwHGYlCZXsx33+xqWAH2KYCMPAEBrYAwRIDiQlMCqPX0OK4P2B/yT+MyP1uDpT1gCWFQ0LAEsKhqWABYVDUsAi4qGJYBFRcMSwKKiYQlgUdGwBLCoaFgCWFQ0LAEsKhqWABYVDUsAi4qGJYBFRcMSwKKiYQlgUdGwBLCoaFgCWFQ0LAEsKhqWABYVDUsAi4qGJYBFRcMSwKKiYQlgUdGwBLCoaFgCWFQ0LAEsKhqWABYVDUsAi4qGJYBFRcMSwKKiYQlgUdGwBLCoaFgCWFQ0LAEsKhr/Hzt1EiOR4//hAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/assets/icon.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgPGltYWdlIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSUFBQUFDQUNBSUFBQUJNWFBhY0FBQUFJR05JVWswQUFIb21BQUNBaEFBQStnQUFBSURvQUFCMU1BQUE2bUFBQURxWUFBQVhjSnk2VVR3QUFBQUdZa3RIUkFBMkFERUFrWFdEMml3QUFBQUhkRWxOUlFmcUJnZ1JIVFljelgvSkFBQVpva2xFUVZSNDJ1MWRlWGdjeGJHdjZwNlpuWlYyVndlMmJFdVdmR0NETVFhZkVOc1luOEljSVYrK0x5OTVYMTVlWGtnQ1BCTmpydkJNQ0NROElNSCtBaDlIZ0VBNEFya2d3QU5DdUl6dit6YkdOcjVQMmRabDNWcHBWM3RNZDcwL2VtYTFQaVJMcTJOWG9QcjBXV1B0ekhSMy9icXJxcXVyYW5IODZBVUFDSUFFZ0lCQWlBaUFTT29DRU1uNU15RWlFZ0NTdW5RdUFJZ1FFUkh0QzNVUHFrZWRlNXlua0Fqc3B3bnN0Nm9MUUNTdzM2UXVuSHZVVTRDSWdFRGd2RSsxNVBSUXZWVjlTdXB2emMycGw4ZWFVeTlIZFpzeldBVDd3aGtzVU53OTZMelR2dGw1U3QxenpzRUNndjB3QURoTUEvdVh6U3NHdlpSVTZnVWd5ZFFMUUpLcEY0QWtVeThBU2FaZUFKSk12UUFrbVhvQlNETDFBcEJrNmdVZ3lkUUxRSktwRjRBa1V5OEFTYVplQUpKTXZRQWttWG95QUVTQWdBQUVsT3l1SkU0OUVBQkVBQUFFenUzT3h5N1UzM3NXOVJnQUVHM2VNZ1RHVUFqeSt5T1dSWllsL2Y2SUVNUTV4dTdwUVRCb3llNUFXMGtkVEVvSlRVMUNDTXJwNTU0eEsrK0dHd3NBWU5ISEp6L2ZXbDFSR2VLY3VVM09HQkpCVHhGTHFRdUFtc1NJeUJnQ1FpUXNJMkdSbG02TUhkZG4rc3k4cVROeUIrU21FUkVBVEp6Y3I2dzB1R1pWK2FxVlpmdjMxRGY0b3k0WDExMGNFVWttZXhqbkhXYUtIc29EQUNCanpMSW9IQktNNDhCODc1U3B1WVd6ODBkY2txWHJqSWlJZ0VpQnBINHdHcFVIOXRVdlgxcTZmbTFGOGNrbUlqQk5ybWxNU2tqWlEva1VBZ0FBZ1FBUUdVTkV0Q3dLTlluTWJIUDgrSnhac3d1dW5OZ3ZNOU9scHJ5VU50TmpwTUJnekY0MDlYV1JMWnVyVml3cjM3RzlwcTQyYXBxYXBqRmJMcW5CUTZvQWtCb2l5R0VsNDR5SW1rSkNSS2xQWC9ma0tibHo1bDUrNGJBTXhYY2hTUEdkMmFhRHZWTEFCdHhHUWtyeVplaUZzd2RjYzIzdTBTTU5yLzd4OE00ZHRkVlZFVTFqYnBNakF5a3hkWlIwTWdGQTUxL0dFQUVqRVJrT1dTNjNkdGxsRjh5WVZUQnR4c0Q4QWk4UlNVbEV4Qmc2Zkk4eHZ2bEZ5dndob3RqS2tCSVFhY2hRejRJbnhoYWZES3haVmJGNlJjV0IvUTNoc0hDNXVHNXdUSTN0UXpKRkVDSWlReUVvSEJJQW1KZm5uWFJWM2pYWERicDAxQVdtcVNrcEQ5QXNhckRORTlkK0V1S1ZCSVpDWXQrZSt1VkxUMjNlV0ZOYTBnU0FicE56alJFQkVTb2N2eFlpeURac0NNSmhFWW1JakV6emlxa0RabDg3ZU5KVmVabFpMa1NVa29TUU1WM2NMdGJIMzY4V0JEaHl5VERZMlBIWlk4WmwxZFZGTjIrc1hyNms0c3NkOVg1L1ZEZTR5ekdadWw4MmRlTUtjTlJyTkNyRElhSHJmTmp3N0drekNtWVdEaHArVVZhemRnVkFwdVlYdFovejV5SUNaZlhFRENmT2xETEdJNGNhVjYrc1hMZW0rc2poZ0dXUjZlSzZ6Z2pVTnVJcllRV0JlZ01pUXlZRmhjSkNFdVRrcEUrY2xIZnQ5VVBIak8yWGxxNDdyQ2ZHbXBuZEdZdy9Dd2hxbHZsU05wdE13YUMxYTRkLytaS0tiVnRxS3l1aWpLSEx6VFdHUkRZU1BWZ0VNWVlFR0FtTFNEanE4Yml1dURKMzF1d2hWMC9MNzljdlhVM0ptS2h4dU44K3ppdWV0dkVaWjlnQVFJcjdTalM1M1h6aTVPeHZUTXFxckFodldGdXphbVgxM3QwTmZyL2xjbkhEVUZhVGVyNUxXTlRKSzBDOUNnQTVRMGtRREVRWlo0TUdaMDZkTnVpYWE0ZU9ITmxYUlFPVEJBSTE1ZEUyenRzNVBDSnl4SlF0cjlyN0NvV0V1blkyRnFndzNiK3ZjZFh5cW8zcmFrOGVEd2tKYWVtY01lWnNxbE5hQk5sa1dkUVVqS1o3akduVGh4VE9IbnJseER5Zkw3YUhvbzVvVjRpVEpOTFJtYkV0V0FkZmVNWnVycUhCK254ci9lcmwxZXZYMVRZRnBkdk50WGlUS1NVQXNPYzdJREprU0JKQ0lVc0k2dHZYTStHSzNHOTllOFNVcVFWcWVHcjZ4QVhESnpMbFk5ZUs5WXhoTkNJQlFEZVlsQlFQUXdJTnhDK0llUE1YRVRkdHFGMzhhZFdPN2Y3cVNvdHI2SEp4enBCQUlkR2F6ZDBkT2tESjduQlloQ01pUFUwZlBhYi9OZGNPbXo1elNHNnVWeG1VYWcrRm5UUkRWWXVNRVNLdVcxUDIzanZIQU9EZi9uM29sS245bFJTU1VnbWw5cWtIaDkyMmtrQ01YMlEwY1hMV055WmxscGRGMXErcFhiV2k1dUQrWURBZ1hDYlhEVVJ3TkVTaTFPNFZFSU9PY1NhRmJHcXlFRmxCUWViVjB3WVh6aDQyZWt4L2RUd1NZMzNDZkljNFFhOEd5Wmp5ODRRM2JUaTFZbm5wcGcybm1wb0VBcnJkMnNUSi9XWVU1azZjbEpPUmFhajc0ODNaaEZ1UGc4R2Vha0xRbmk4YlY2K3MzYnlodnVSa2hBaE1OOWM0U3RsdElzajJYRUl3YUdWbG1tUEg1MTEzL2NXVEpoZGtaYnM3UzhxZmMvQkUxTmdZL2R1ZkR5NWRkTEtzTkVnQTdqUmQrVENraEthZ1FJWURjdE5tWHpmd1AyKzYwT1BSblBYWElmVUF6ckpUUFlyWEVIVjEwVzJiRzFZdXE5MjFzN0doVHJqVE9ESWtoOTFkQ0lCaWl1bldmL1RqOGJNS2h3MGFuTWs1VXg0YkFPaWdMUitUR3pIZUlXSW9aTzM1c21iNXN1S042OHBMUzRLYXhsd3VEb2hTS3FHTjl0WWFNUnlXMHFMY3ZQU0pWK1hNTEJ3d2NsU21hWEo3UVRnb0p0b3hPRnRESUtJUVZId3l2SFpWM2J0dlZZWkNwTXp1cmdZQUxVdG1aYWU5LytGLytYeW1FUEowdmllNGhZcEpHeUt3MVFaaUtHVHQzVjN6MnF0N1A5OWFFWTJTeTZYcE9rZWJCV2NtNlNsVEFBR2pVUXFIcGE2ejhWZjArZkhOdzBaZW11R0tnOEd4SUJPV1N4QnZ2QUlBNTlqWUlIN3lnMzMxOVVMVFdIc0JTRkFKeDZhOG1uMEpqd2RPa3phMi9tU01uVGp1WDc3azVPcFZKUWYzMTBsSnBsc3pUWlFTaUloYWNOZzRuQ0ZOUThQUWlXRGIxdW9kMjJ1R1g1Ung5YlNjbWRmMHp5OUlqd0djZ0paV0ZLZXJpVEY3TlFpUnVGODFRUURzVlI5bnE3V2Y3MkE3WEJ5MXdSZ0tJWThkOWE5WlZmemVPNGRMU2hvTlF6Tk5UUjNkS05lUS9XVEx6YWtQRlphbXlSSGd3TDc2WFR2ci92bGU4WGUrbTMvMXRKeUN3ZW1jbjZZZUVuTTZPUThRQUhDZStDNjVJMlpvUjZjOEVVZ3BHVVBPbVdYSjQwWCt2N3kyWjhXeWs0RkExRFMxakV3WDJWTmVDUTBBYkhPVEJJUUFrZ0RSWlhMVGpYVzFrUmVlTy9TM1B4ZE5tNW56dzV1R0RNeDNheG9qSWlHVVd5TG0rdTV1ZDJpM3VxUFAxckdNc1pycXBuVnJTNVl2UGI3amk4cGdvK1V5TmEvWGtCS0VSWTdSMWRGR3BRVE8wZXZWcEtEUFBpbGJzN0p5OUppczZiTnlKazNwazUxdEVCRkpnSTVwNllTcE93QTRYWEVSZ05LeFVGWFp0SEZEeVZ0djd0Kzd1MXJYbU12VTNHa2FFUWhKemRLdE0xcEhCRktDanFIYnpZV2dqUnVxMTY2dXV1UlMzL2UrbjMvbHhPd0wraGpnaUhMR1ltdTBPNERvV2dDYytVdXhhMlhlYlArOC9LTVBEbTNkWEY1UzBtaTRlRWFHb1h5L0pCMXRUZ2xMdUZaNlkvK0RpRzQzd3pROGRpVHcyTVA3QnVTNngxK1pkY09OL1VlUHpiUWRKODNkN29RbDJEcDFMUUNPaWxaYkdHeHFpbTdmVnI1c2FkSEs1Y2RycTBOcDZZYlhhNUJ6MnQ3Rkk3VkpNWlVBU0lKaE1KZUpOVFdSZjcxZnRuWlY5ZFRwZmFiUDdEdG1YSWJwNXRSc2huZHRmN3A2QmRnVHlyTGtPLy9ZKytHL0RoWWRxNDlFWkZxYWtabGxDZ0ZTZHNDQTdVakgxTFNRUUVTY1kwYUdGb25Jano4b1gveHB4YURCYWRkL3EvOTN2anVBYTRuYmVHMm5MZ1JBR2QyTVlWbHB3NzEzTFQxMHNBWUFUYmZtY21ra1FWaFNIVk4yWFFmYTFFa0FCQkNDR0tMSHF4RkIwYkhnQzg4ZVc3S284ckhmamVpZmE1SWtnaTZjSk4yaGhLT1dMQzcybTZhR2lKSkFrblBHUjZrVFJJdGtHd2pvTWprQmxCYUhMTXMySHJxMGs5MFJIWTBJaHNHbHREZlBLUkdPMHpJcHExUTN1a2t5ZGxONGV2eHhTa3FUMDgxdTYyK1B5US80cWxJdkFFbW1IZ3lBNDVmc1Nma3daMU5xUkVlM2grejlFUU5ubjJUNzFwMlBrOTIvZGxLUEFVQnRwNUdwS0JnSWgwVFVJblcrUWdDNnhnMlRxeU1RbVl3UXo0U3B4d0FBQUp4ak1HZ2hnTXVsWFhKcFZuNkIxN0lrQW1vYU8za2ljUGh3UXlna0VDQXRUZTlncEVKM1VzOEFRRW1iaG9ib21MRjlicmh4OE5oeGZTN29hL3A4UnN4NzNPQ1BWRldGZDJ5dlh2Uko4YzR2YWowZVhSM2pwRDcxQUFCVVVtb2tJbjc0bzR0dW0zZVpPbWNIQUNuc25iU1U1UEhxSHE4K1pLajMraHZ6WC9yRC9yZmZMRElNcnVsTWlsUVhSNmtMQU5veGh4Z09DYS9QZVBCL3gxNTN3NkQ0MUlHNFlDK0F1Q1NBdSs2OWRNVEl6R2VlMk52WWFMbGNQTVZWUXVxYW9lcklMQklSUTRiNlhueDF4blUzREJKQ0lnTG5MT2FrakJFQUlJTEsxUlpDWG50OTN2TXZUeHc4eEJPSlNEdHRPRlVwVlFGQTIxMXNHSHplM2FNdkhKWmhXVklkNWxCY0tIYno3ZGdjTk1ZWVdwYThjSmgzN3AwakRJTkpKMDhtTlNsVkFRQ1Y5eXN1R1prOWJrSmZLU2tXZWRDS2t5ejJpWXA3R0RzK2U4VElEQ3ZhQzBBQ1JJQUlVWXUrK2EzQkttRVAycCtJWVpyOCttL21SYU5TUlpHbkpxVXFBQTRsRVBORUhYdThteW5WQWREMWR2Y1FUM3M4aGFVUEFLUTRBSXhCY1hFanhLV2R0dVVwUjE0QkFKUVVOOFhIQzZjZ3BTb0FDRktTcnJOUFBpcXFxUWtwVXpLV0ZOWUtPVUcrd0JqVzFvUVhmVnlpNnlobENoMStua0dwQ2dBQkFHZ2FxNnhvZXVjZmg4QUpCMjRkZzFpU2pMcmwzYmVQVjFhR05DMVZ4d2dBM2JnVFRpeDZGelFOMy96ckFTbnAxdHRHNmZwNXdyQVZQSXhoTkNwZmVmSGcyLzhvVWdHZ1FHMlBLazIwdTRsU2Q4d09PN2VyM2ZISDRIeUREN3oyOHQ1NzcxeGJXaEp3Y2dqb1hLMlFncWUwTkRqL3JxMnZ2M0pJWlFOUXUrSWFFSUJzSjBmMzdKODdBa0JiTzZocmpJakNZWXR6cFBiRW9zU2krSDBaeHZwMTVmUHZXZC9ZR0QyblFvNXRGQUtOMGZ0L3ZtM0QrZ3BmaGdIbkNXVS8xNUNJRURFY2trU2dhZDJ4REJJRW9HMEdDYXBRL2R3ODd4TlBGZWJsK3hvYUlwckduR0RSTnJjRklBU2xwV21CeG1nMGVoNVBmelFxQTQxV1dwcW1kZ0QyQ21neklhS1FWRERJL2NqQ2kvdm5tazY1ai9NZzBaSENOd2tDWUFmc3ErWmJHS0pLQm1JTVNkS0VLM05mZWYzRzZiTUcrLzFoaUNYVnRLZEZLWW54OCsrRkVaRnh4K3hwUDF1a3BLeHMvZUhIUm95YmtPbGtHN2JZYVBQQU94QzlsU0FBeWkwTVRsNVJDMkxabHN1QUtJVHMwOWY5NURPRjgrNmNFSTJJU0ZSd3pqcTB4MjN0dHNURHZ6akhxb3JJNGs4cnBMVFRtRnJRTnhBcjd3SUFRa0RDcFc0U0FJQTBqZm5yUTcrNmYzRnBpWjl6ZGtadWREdzU4NGM0VjBuK2RNdWNzVTgvVzlpblQxcWdNY0lZcHBxamdBaVF3ZXFWVlkyTm9xV1pIeXREcFBJK3lzdkNDeDg5M3VBWGlTVXF0UnNBVmZwTzA5amF0VVUzMy9UdStuWEhGUWF0R09reDYxQmxnVjExZGY0cnIxLy9qY2w1a1lqUXVESTdrc3YyTTNyYm1zRVcyMm9vN20vWlZILzMzRU5iTnZnMVRSVXZhSGR6N1Y4QkNud2lyOGRWV1JtNDYvYVBYbjFwcStxM09xdHFHUU1BKzN4UkRzajFQUGZpTlpPdXlxdXBDZWthUTdzT2RKSkpIUUZaRmhVTWRydmQ3R3dwWm5QZnFSMzQ5eitYUFRqL2FIVlZOTjNEcFRMRDJ0OW93bVlvQ2lGMW5Xc2FlK2FwOWZQdldWUmRGZVNjS2NVQWNFNXhaTHQwMUlyaG5QM3lWNU1LWncrdXIxTnF1ZnZDTWVPVC9URHVsNlpoTkVKZXIzYkxiWU4wblVrSlNvakdEMGNJWWh4cnFxTVBQM0RrNVJkS05BMTFuUW5SL3AxZWh3R3czVFVBa0pGaExsMXk1S2MzL2ZQemJTVnRGRWVjTTVLVTB5L3RpYWRuekwxalhDUWlvbEhKZVRlcGhKaHdaeHdZUjhhUU15Q0NCcitsNlhqYnZDSERML0k0RmJ4c0V5TmU3T3pjN3I5NzdvSFZLMnU5WGcwY015Umg2dEJPV0kzRHNxVFg2eW9wcnI5OXprZHYvRzJuT3JPVjV4RkhoTFovRFc2OWJmU1R6OHpJdnNBZENFVHRYUUowb1N1QU13aUZCQkZJUWY3NnFOOGY5ZnVqRFEyV2FmSXAweTU0L0psUk4zNjd2eEFVeXo2UGNWK2RPYi83ZHZsOTl4d3NLd2w3UEdxcjBWSFIyVkZmRURuUzMrWFNpT2gzQzlidTJWM3hpMTllblpGcHFrbDBUdTlOVEMwVGdSQnl5dFNCTDcyV3NlRFJUUnZYbDNtOUxzREVyYnBXT29vTUVkSHZ0eVpON2pQM3p1RzF0ZEcxcXlxNWhsYVUrdlIxemJ3bUo3L0FEWGIxdXVaT0t1NHpodjU2NjdtbmppLyt0TXFkcGhrdUZLSnowbVk2elJtbnhJN1hhM3o4NFlIREIyc2VlbVQ2cU12N0NVdHlqYldNQVlDamxnY085RDc5M015WFh0ajU5Ny9zMDNXdTYweDBVa2lQMmd4empsYVVMQ0YvOU5NaHQvejNVTVBGaWVqS2lka1E1NjZJMVJzaEo3ZE5sZVBnSFBmdGFYeGk0ZEhEQjVvOFhrMUtjR1JzSi9Td2M1MXhKQVQ1Zks0alIycm0zUHpSK3JVbnVNYXNhRnZWc3FheE8rOFp0K0R4S1I2UEhneGE1M1hGVUJ5MWZCTUFnS1poTUdpbGU3UkhGbHcyOTQ3aG1tNVgyQktDaENBcDdYK2JuWGR4MHBWejNMeXg5dWZ6OWhZZGJmTDR1QkNkbkd2U3lkNVFSTEFzTXQxNkpDSWVYN2oraSsxbGFyUnQyeVdBRUxKdzlxQS8vcW53OHRGOTZ1c2pLZzdsTkg1S0FBQXA3ZnB1OFQ5cVV5cGpOU1djeUhYRzBGOGZ2ZXp5ek9kZm5qQ3pzTDlLaVZXWjRvdzEvNkJUWVJPY0lxTlNncWF4WFR2OHp6NVpGSW1TYVRKaGRYNkFSU2NEb0ZhbHNLUmg4TklTLysxelBuM3J6ZDJ4R2xyblVjdE92WTRoUXpPZWZYSEc5Mzl3Y1NBUWxaSjRjOWt0NEJvQ0tKYmhXVDhBQUJwbnFvb05FQ2luVUNCZ2ZlOC9CajM5L1BqQlF6eXFNa1FzZ3Vnc2FqWjRnSUJ6ZlArZHN2bDM3U3NyRFJ1ZEp4TFBvSzQ1a0VHUWtneVhKaVV0L08yNjNWOVczbmYvWkYrR1N3aXBUbWpQMWdxeC95cHhaSnJhZlE5TUdEbnFncWNlL3lJWWlLWjVkQ0hJc3VqWUViL1haOFNpUXNHZTZMYURsVE5zYUlnS1N5SWk1eGhzRXA1MGJmNERvMjY0TVUrdFF0c2ZmcTcwNjFpWGxOQnY4RnZQUG5YMHMwOHEzVzdOY0RGNzluU0JkZGFGbFhQdDZ0d01HeG9pbDF6Uzk2RkhwNDY4dEsvQ29KV1NTWEYxNG9oenRuOWY3WUpIdHU3ZFcrUHhHRVJPVGFibXpCam53cEVnUVBic2Jtd1VJMGRsL1BKWGwxMDBJaU51NHArM1VlQWM5KzlyZVB5eHc0ZjJCenhlWFVxN3VrRVhWYzdsdWYxbnhVYWl5bEFxQUdLcEtOajhaeWNLRSt4TCs4S2V3UmduUnNHcDlnc2d3ZTNXSzA0RmxpdzZtcDN0dnVUU3ZrN3h0ZFlzVlBVMktTa25KNjN3MnZ6YW12Q2hnM1YyMlU2bEFPd0t6MkFYbVZCSk1yWlp4U3lMcnY5bTNpTUx4dWJtcGJXUis4b0U0aHcvK2JEOE53OGRyRHdWOFhnMElRRFBHRzRjTCtKWkZQYzVvc01pT0oxRmNEcUwxRVhYQXFCK1NRbUd3WVZGeTVjZHE2NEtqYjlpZ012Rm5TQm5iRVVjTWNha0pNUGcwMmNPUEhLNGZ0ZU82dlIwdmJrZ3RmTitkSmlCRERuSDJwcEk0Ylc1RHo4MlZ0ZVpNa0RqKzNjNjYyTUdLSENPVFVIeCt5ZVAvT25sRThqUU1KVFFSK2p4QUtnOElnbkltTXVsYmQ5ZS92bTI4c3RINTF6UUo4MngvTTYvV1FPQVNaUDdCNFBXemgzVm5ESE9tU1JvSGdZZ0VYRE9wS0NtSnZIZDd3KzU5NzVSbXE3VWRWdkZ6ckVqZ1lkK3VXLzFpaXFQVndNQWtvNTQ2ZkVBeEM0SlZLM0prdUxHcFl1TCt2ZFBIMzVSZGx2RWtkTGJ1czZtVE0zdFB5QjkyK2FLWUZDNFRPNEUreUFTYWhvMk5RblRyYzEvNFBLZjNESThqdnZRQ3ZkalltZlprb3FISDl4WGNpTGs4V3BTT0YveEV6ZjhuZytBODVTVTVITHhjRmdzWFZ3VUNGampKL1RUZFZzY25TNSt6bFFKQUNBbGpiZ2s2NHFKL2ZidXJpMHBDWnFtcHI3TWtISFcwQkM5YUVUbWdzY25YRFdsbi9OVk0rY0dOVlk5U2szOFNFUys5UHpSUC96K2lKVGdjbkhid2ZCVkJVRHBWalZ5WGVkYk5wZDl1YXR5ek5pY3pDd3pkZ0I3VHBWd21scnVselpyOXNEYW12RHVYVFc2d1JFdzBHamQrTzJDUnhlT0h6Z3d2WFdWRzRjbGNJN0ZKNE1QUDdCMzhhZW4wdE0xeGxES3N6ajhGUU1BWXBxUUVBRGRicjNvbUgvRjhoUDVCYjRoUXpQalhURnRVTXQ1V2RtdXpac3FBZkNlK1pmLzdJNlJ4dmxWYm5QY0hPZTRiblhscisvZmMvUnd3T3ZUVlExWWJQNCtyYTg2QU9vektjbmwwZ0tCNk5MUGlxU2dzZVA3TWFZY3Y2MkpJL1g5TTFMQ3FNdXlMN280WTlZMWVkZmRrQzhFQWJhb1MrTEZEbU1nSmIzMnlyR25IejhZQ1V2VHpZV0E1czUrclFCQUFBbWdhVXpUMk1iMXBmdjMxNDRkMTgvbmM1MWZIREZFQkNJb0dPVEpML0E0QlJqYkpIWXFUb1YrOCtzOS8zcS8xSjNHT1dkU0FxSzkvVXdLQU1rTVhGVTdlMVZuM1pkaHJGdFRQT2ZtcFpzM2xiVityQlluampCbVJKM3gwZGxpUjNGLzYrYnFlWE0rWDcrdXl1dlRWRlpsRjNoMzJrZkpYQUhndkJWVVFYQlRxNjhQTDFsMFhOUFo2REU1aUVwaXRHaWhPaGZubHZnUWY0Yk9BQURlK0d2UjQ3L2RHMmkwM0dtYTJtUmhzNmZnYXltQ1lnQW8zYWZjdjRpNGJrMXAwYkdHY2VOejBqMTZLOGRxOGEyMnlIMUpqR050VFdUQm83dmZldU9FYVhLdU1TbGp5RGYzN3Vzb2dzN2lwbjBtNWZVWnl4WWZ2KzJXRlR1L3FGUTVwOUNlbWx2azNDd3N5Ump1MmxFN2I4Nlc1VXZLZmZZWk9tRFM1VTRjcFJBQVNpVVFnTERJNnpPS2p0VS84dERtOHJLQXByRlk1RUdiTW1RQUFFQks0aG83VmQ3MDI0ZS9MRG9XOFBwMElhaTVqWlNoRkFLZ21SQXNTNmFuNjZmS0EzTnZYYmwxODZuelJyc29PbDNsc20xYnF1NjRiVXZGcWFiMGRFMlZRRXhCU2trQUFCQkJDTkkwVmxZV3VPZU9OWC8veTM1MWlDaEZpeGpFaDYweEJtLzg5ZWovM0wydHZLeEowNWdRS1JCMzF3S2xLQUJnZncwQUdBYm5ESjk1Y3NlRHY5aFVWeGRoSE04T3Zvc0xXNU9NWTExZDVOZjNmL0hzVTNzWlE4TlFoMW5KSGs3TGxLb0FPQkZIdGxyMkdrcytPL0d6bTFmdDJsbXR4RkhjVjU2Y2RvTDI1YzZhMjIvZHRHeHhxZGVyUStxcDNMTXBkUUdJa2NxUThmcU00OGNiN3Z6Wm12ZmVPYUtDM1dNYlpzZTl3OTc3djZLN2I5OTg0bmlqeDZjTFNXb1pwWEtwRkVpUmpWaDhxNmU5Q1pyL0lDWHBCcGNTVnE4b0xTOExqcitpcjJscUtrcUhjMnhzdEo1WXVPdjFWdzlwR3ROMUxrVmNMODhZVXR6TGUvY0I3U0JIQTRQSG8zLzRRZEc4T2VzTzdLL2pIRG5IQS92cjdwaXo0Y01QVG5nOHVwSmFLUzUyNGlsMUsyYWRRYkZzVXlISjU5TVBIcWliZSt2YUJ4NGFCd0FMSDkwUkRBcWZZK2tqZG4zSjdjNmpIZ05BUEZrV3VkMWFKQ0llZm5DYmtpMXVON2VzcEh3VFFVZXBCd0xneE15cUtCVWxXVHNyVnJuN3FjZm9nRE1JNHpJajdJekdaSGNwTWVxcEFBQUFJSUx0M2VtUmMxOVJUd2JnSzBHOUFDU1plZ0ZJTXZVQ2tHVHFCU0RKMUF0QWtxa1hnQ1JUTHdCSnBsNEFra3k5QUNTWmVnRklNdlVDa0dUcUJTREoxQXRBa3FrWGdDVFQvd05DbkFSNTcreFVUUUFBQUFCSlJVNUVya0pnZ2c9PSIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiLz4KPC9zdmc+Cg==]]></data>
	</file>
	<file>
	  <filename>/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibWFzdGVyMzM5NS9tYXMtYXV0aGh1YiIsCiAgICAiZGVzY3JpcHRpb24iOiAiTUFTIEF1dGhIdWIgaWRlbnRpdHkgbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuNCIsCiAgICAgICAgImxlYWd1ZS9vYXV0aDItY2xpZW50IjogIl4yLjciLAogICAgICAgICJmaXJlYmFzZS9waHAtand0IjogIl41LjZ8XjYuNCIsCiAgICAgICAgIm9uZWxvZ2luL3BocC1zYW1sIjogIl40LjIiLAogICAgICAgICJ3ZWItYXV0aC93ZWJhdXRobi1saWIiOiAiXjMuMyIsCiAgICAgICAgIndlYi1hdXRoL2Nvc2UtbGliIjogIl4zLjMiCiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUsCiAgICAgICAgImF1ZGl0IjogewogICAgICAgICAgICAiYmxvY2staW5zZWN1cmUiOiBmYWxzZQogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/composer.lock</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNpbnN0YWxsaW5nLWRlcGVuZGVuY2llcyIsCiAgICAgICAgIlRoaXMgZmlsZSBpcyBAZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkiCiAgICBdLAogICAgImNvbnRlbnQtaGFzaCI6ICJmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYyIsCiAgICAicGFja2FnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJiZWJlcmxlaS9hc3NlcnQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4zLjQiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2JlYmVybGVpL2Fzc2VydC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmMTkzZjQ2MTNjN2Q3ZmJjZWUyYzA1ZTRkYWZmNDA2MWQ0OWMwNDBlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYmViZXJsZWkvYXNzZXJ0L3ppcGJhbGwvZjE5M2Y0NjEzYzdkN2ZiY2VlMmMwNWU0ZGFmZjQwNjFkNDljMDQwZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImYxOTNmNDYxM2M3ZDdmYmNlZTJjMDVlNGRhZmY0MDYxZDQ5YzA0MGUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LXNpbXBsZXhtbCI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiZnJpZW5kc29mcGhwL3BocC1jcy1maXhlciI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIj49Ni4wLjAiLAogICAgICAgICAgICAgICAgInlvYXN0L3BocHVuaXQtcG9seWZpbGxzIjogIl4wLjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGFsbG93IEFzc2VydGlvbjo6Y291bnQoKSwgQXNzZXJ0aW9uOjppc0NvdW50YWJsZSgpLCBBc3NlcnRpb246Om1pbkNvdW50KCksIGFuZCBBc3NlcnRpb246Om1heENvdW50KCkgdG8gb3BlcmF0ZSBvbiBSZXNvdXJjZUJ1bmRsZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImxpYi9Bc3NlcnQvZnVuY3Rpb25zLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkFzc2VydFxcIjogImxpYi9Bc3NlcnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTItQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZW5qYW1pbiBFYmVybGVpIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiTGVhZCBEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJpY2hhcmQgUXVhZGxpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJDb2xsYWJvcmF0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGluIGFzc2VydGlvbiBsaWJyYXJ5IGZvciBpbnB1dCB2YWxpZGF0aW9uIGluIGJ1c2luZXNzIG1vZGVscy4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYXNzZXJ0IiwKICAgICAgICAgICAgICAgICJhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgInZhbGlkYXRpb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vYmViZXJsZWkvYXNzZXJ0L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQvdHJlZS92My4zLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDYtMTBUMTk6NDc6MDUrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImJyaWNrL21hdGgiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIwLjkuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYnJpY2svbWF0aC96aXBiYWxsL2NhNTdkMThmMDI4Zjg0Zjc3N2IyMTY4Y2QxOTExYjBkZWUyMzQzYWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy41LjE1IHx8IF44LjUgfHwgXjkuMCIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiNC45LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJBcmJpdHJhcnktcHJlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJCaWdJbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgICAgICAgICAiYXJpdGhtZXRpYyIsCiAgICAgICAgICAgICAgICAiYmlnZGVjaW1hbCIsCiAgICAgICAgICAgICAgICAiYmlnbnVtIiwKICAgICAgICAgICAgICAgICJicmljayIsCiAgICAgICAgICAgICAgICAibWF0aCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3RyZWUvMC45LjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0Jlbk1vcmVsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2JyaWNrL21hdGgiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA4LTE1VDIwOjUwOjE4KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJmZ3Jvc3NlL3BocGFzbjEiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi41LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0MjA2MGVkNDUzNDQ3ODlmYjlmMjFmOWYxODY0ZmM0N2I5ZTM1MDdiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZmdyb3NzZS9QSFBBU04xL3ppcGJhbGwvNDIwNjBlZDQ1MzQ0Nzg5ZmI5ZjIxZjlmMTg2NGZjNDdiOWUzNTA3YiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQyMDYwZWQ0NTM0NDc4OWZiOWYyMWY5ZjE4NjRmYzQ3YjllMzUwN2IiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAifjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAgfHwgXjguMCB8fCBeOS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkJDbWF0aCBpcyB0aGUgZmFsbGJhY2sgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIkZvciBsb2FkaW5nIE9JRCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3ZWIgaWYgdGhleSBoYXZlIG5vdCBiZWUgZGVmaW5lZCBzdGF0aWNhbGx5IiwKICAgICAgICAgICAgICAgICJleHQtZ21wIjogIkdNUCBpcyB0aGUgcHJlZmVycmVkIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAgICAgICAgICJwaHBzZWNsaWIvYmNtYXRoX2NvbXBhdCI6ICJCQ21hdGggcG9seWZpbGwgZm9yIHNlcnZlcnMgd2hlcmUgbmVpdGhlciBHTVAgbm9yIEJDbWF0aCBpcyBhdmFpbGFibGUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJGR1xcIjogImxpYi8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGcmllZHJpY2ggR3Jvw59lIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZnJpZWRyaWNoLmdyb3NzZUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vRkdyb3NzZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiQXV0aG9yIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBBU04uMSBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlcy4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJERVIiLAogICAgICAgICAgICAgICAgImFzbi4xIiwKICAgICAgICAgICAgICAgICJhc24xIiwKICAgICAgICAgICAgICAgICJiZXIiLAogICAgICAgICAgICAgICAgImJpbmFyeSIsCiAgICAgICAgICAgICAgICAiZGVjb2RpbmciLAogICAgICAgICAgICAgICAgImVuY29kaW5nIiwKICAgICAgICAgICAgICAgICJ4LjUwOSIsCiAgICAgICAgICAgICAgICAieC42OTAiLAogICAgICAgICAgICAgICAgIng1MDkiLAogICAgICAgICAgICAgICAgIng2OTAiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvdHJlZS92Mi41LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhYmFuZG9uZWQiOiB0cnVlLAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTEyLTE5VDExOjA4OjI2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJmaXJlYmFzZS9waHAtand0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjYuMTAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE0OWRiNmYwYTUwMzNhZWY1MTQzMjk1MzQyZjFjOTU1MjFiMDc1ZmYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9nb29nbGVhcGlzL3BocC1qd3QvemlwYmFsbC9hNDlkYjZmMGE1MDMzYWVmNTE0MzI5NTM0MmYxYzk1NTIxYjA3NWZmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTQ5ZGI2ZjBhNTAzM2FlZjUxNDMyOTUzNDJmMWM5NTUyMWIwNzVmZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjR8fF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtc29kaXVtIjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMiLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMgd2hlbiBsaWJzb2RpdW0gaXMgbm90IHByZXNlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkZpcmViYXNlXFxKV1RcXCI6ICJzcmMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOZXVtYW4gVm9uZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm5ldW1hbitwZWFyQHR3aWxpby5jb20iLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQW5hbnQgTmFyYXlhbmFuIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiYW5hbnRAcGhwLm5ldCIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBzaW1wbGUgbGlicmFyeSB0byBlbmNvZGUgYW5kIGRlY29kZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaW4gUEhQLiBTaG91bGQgY29uZm9ybSB0byB0aGUgY3VycmVudCBzcGVjLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInBocCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL3BocC1qd3QvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvcGhwLWp3dC90cmVlL3Y2LjEwLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMTItMDFUMTY6MjY6MzkrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNy4xMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVhYTgxNTk4MDMxY2Y1N2E5ZTM2MjU4Yzg1NDZkZWZmZmM5OTRjYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlL3ppcGJhbGwvZWFhODE1OTgwMzFjZjU3YTllMzYyNThjODU0NmRlZmZmYzk5NGNiYSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVhYTgxNTk4MDMxY2Y1N2E5ZTM2MjU4Yzg1NDZkZWZmZmM5OTRjYmEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjIuNSIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4yLjEyIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cyI6ICJeMi41IHx8IF4zLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudC1pbXBsZW1lbnRhdGlvbiI6ICIxLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAgICAgICAgICJleHQtY3VybCI6ICIqIiwKICAgICAgICAgICAgICAgICJndXp6bGUvY2xpZW50LWludGVncmF0aW9uLXRlc3RzIjogIjMuMC4yIiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL3Rlc3Qtc2VydmVyIjogIl4wLjUiLAogICAgICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS41MiB8fCBeOS42LjM0IiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjEgfHwgXjIuMCB8fCBeMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtY3VybCI6ICJSZXF1aXJlZCBmb3IgQ1VSTCBoYW5kbGVyIHN1cHBvcnQiLAogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIlJlcXVpcmVkIGZvciBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSAoSUROKSBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiR3JhaGFtIENhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkplcmVteSBMaW5kYmxvbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImplcmVtZWFtaWFAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2plcmVtZWFtaWEiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlb3JnZSBNcG9ub3MiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJnbXBvbm9zQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nbXBvbm9zIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNw6FyayBTw6FnaS1LYXrDoXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2FnaWthemFybWFyayIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY2xpZW50IiwKICAgICAgICAgICAgICAgICJjdXJsIiwKICAgICAgICAgICAgICAgICJmcmFtZXdvcmsiLAogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAgY2xpZW50IiwKICAgICAgICAgICAgICAgICJwc3ItMTgiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXN0IiwKICAgICAgICAgICAgICAgICJ3ZWIgc2VydmljZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNy4xMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA2LTE2VDIyOjExOjQ4KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi41LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0MzYwZTk4MmY4N2Y1ZjI1OGJmODcyZDA5NDY0Nzc5MWRiMmY0YzhlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3Byb21pc2VzL3ppcGJhbGwvNDM2MGU5ODJmODdmNWYyNThiZjg3MmQwOTQ2NDc3OTFkYjJmNGM4ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQzNjBlOTgyZjg3ZjVmMjU4YmY4NzJkMDk0NjQ3NzkxZGIyZjRjOGUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiOiAiXjIuNSB8fCBeMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS9jb21wb3Nlci1iaW4tcGx1Z2luIjogIl4xLjguMiIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuNTIgfHwgXjkuNi4zNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJiYW1hcm5pLWJpbiI6IHsKICAgICAgICAgICAgICAgICAgICAiYmluLWxpbmtzIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAiZm9yd2FyZC1jb21tYW5kIjogZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQcm9taXNlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ3ZWJtYXN0ZXJAdHViby13b3JsZC5kZSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgcHJvbWlzZXMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJwcm9taXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Byb21pc2VzL3RyZWUvMi41LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9ndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNi0wMlQxMjoyMzo0MyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4xMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5YjM4MDEyZTdiNTRmNTk0NzA3ZTZkYjUyYzY4NGRjMGE3NGIzYTQzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3BzcjcvemlwYmFsbC85YjM4MDEyZTdiNTRmNTk0NzA3ZTZkYjUyYzY4NGRjMGE3NGIzYTQzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiOWIzODAxMmU3YjU0ZjU5NDcwN2U2ZGI1MmM2ODRkYzBhNzRiM2E0MyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMSB8fCBeMi4wIiwKICAgICAgICAgICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMy4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cyI6ICJeMi41IHx8IF4zLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnktaW1wbGVtZW50YXRpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgImh0dHAtaW50ZXJvcC9odHRwLWZhY3RvcnktdGVzdHMiOiAiMS4xLjAiLAogICAgICAgICAgICAgICAgImpzaHR0cC9taW1lLWRiIjogIjEuNTQuMC4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS41MiB8fCBeOS42LjM0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJsYW1pbmFzL2xhbWluYXMtaHR0cGhhbmRsZXJydW5uZXIiOiAiRW1pdCBQU1ItNyByZXNwb25zZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiR2VvcmdlIE1wb25vcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImdtcG9ub3NAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dtcG9ub3MiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBOeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ0b2JpYXMubnlob2xtQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm1hcmsuc2FnaWthemFyQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zYWdpa2F6YXJtYXJrIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ3ZWJtYXN0ZXJAdHViby13b3JsZC5kZSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm1hcmsuc2FnaWthemFyQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc2FnaWthemFybWFyay5odSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBTUi03IG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gdGhhdCBhbHNvIHByb3ZpZGVzIGNvbW1vbiB1dGlsaXR5IG1ldGhvZHMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAicHNyLTciLAogICAgICAgICAgICAgICAgInJlcXVlc3QiLAogICAgICAgICAgICAgICAgInJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICJzdHJlYW0iLAogICAgICAgICAgICAgICAgInVyaSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy90cmVlLzIuMTIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2d1enpsZWh0dHAvcHNyNyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDYtMTZUMjE6NTA6MTErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImxlYWd1ZS9vYXV0aDItY2xpZW50IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi45LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC96aXBiYWxsLzI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmU4YzVkYTRmM2Q3OGNlZGU3MDIxZTA5YjEzMzBhMGZjMDkzZDVlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41LjggfHwgXjcuNC41IiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCA+PTguMC4wIDw4LjYuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zLjUiLAogICAgICAgICAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1wYXJhbGxlbC1saW50IjogIl4xLjQiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjExIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJMZWFndWVcXE9BdXRoMlxcQ2xpZW50XFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsZXggQmlsYmllIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AYWxleGJpbGJpZS5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LmFsZXhiaWxiaWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIldvb2R5IEdpbGsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2hhZG93aGFuZCIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiQ29udHJpYnV0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPQXV0aCAyLjAgQ2xpZW50IExpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRpb24iLAogICAgICAgICAgICAgICAgIlNTTyIsCiAgICAgICAgICAgICAgICAiYXV0aG9yaXphdGlvbiIsCiAgICAgICAgICAgICAgICAiaWRlbnRpdHkiLAogICAgICAgICAgICAgICAgImlkcCIsCiAgICAgICAgICAgICAgICAib2F1dGgiLAogICAgICAgICAgICAgICAgIm9hdXRoMiIsCiAgICAgICAgICAgICAgICAic2luZ2xlIHNpZ24gb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L3RyZWUvMi45LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjUtMTEtMjVUMjI6MTc6MTcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImxlYWd1ZS91cmkiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI2LjcuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkM2I1MDgxMmRkNTFmM2ZiZjE3NjM0NGNjMjk4MWRiMDNkMTBmZTA2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlcGhwbGVhZ3VlL3VyaS96aXBiYWxsL2QzYjUwODEyZGQ1MWYzZmJmMTc2MzQ0Y2MyOTgxZGIwM2QxMGZlMDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkM2I1MDgxMmRkNTFmM2ZiZjE3NjM0NGNjMjk4MWRiMDNkMTBmZTA2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpLWludGVyZmFjZXMiOiAiXjIuMyIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiY29uZmxpY3QiOiB7CiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaS1zY2hlbWVzIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl52My4zLjIiLAogICAgICAgICAgICAgICAgIm55aG9sbS9wc3I3IjogIl4xLjUiLAogICAgICAgICAgICAgICAgInBocC1odHRwL3BzcjctaW50ZWdyYXRpb24tdGVzdHMiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4xLjIuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLWRlcHJlY2F0aW9uLXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjAuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXN0cmljdC1ydWxlcyI6ICJeMS4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41LjEwIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1maWxlaW5mbyI6ICJOZWVkZWQgdG8gY3JlYXRlIERhdGEgVVJJIGZyb20gYSBmaWxlcGF0aCIsCiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGltcHJvdmUgaG9zdCB2YWxpZGF0aW9uIiwKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpLWNvbXBvbmVudHMiOiAiTmVlZGVkIHRvIGVhc2lseSBtYW5pcHVsYXRlIFVSSSBvYmplY3RzIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIk5lZWRlZCB0byB1c2UgdGhlIFVSSSBmYWN0b3J5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJueWFtc3Byb2RAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9ueWFtc3Byb2QuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVVJJIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vdXJpLnRoZXBocGxlYWd1ZS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZGF0YS11cmkiLAogICAgICAgICAgICAgICAgImZpbGUtdXJpIiwKICAgICAgICAgICAgICAgICJmdHAiLAogICAgICAgICAgICAgICAgImhvc3RuYW1lIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwcyIsCiAgICAgICAgICAgICAgICAibWlkZGxld2FyZSIsCiAgICAgICAgICAgICAgICAicGFyc2Vfc3RyIiwKICAgICAgICAgICAgICAgICJwYXJzZV91cmwiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJxdWVyeS1zdHJpbmciLAogICAgICAgICAgICAgICAgInF1ZXJ5c3RyaW5nIiwKICAgICAgICAgICAgICAgICJyZmMzOTg2IiwKICAgICAgICAgICAgICAgICJyZmMzOTg3IiwKICAgICAgICAgICAgICAgICJyZmM2NTcwIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVyaS10ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidXJsIiwKICAgICAgICAgICAgICAgICJ3cyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiZG9jcyI6ICJodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tIiwKICAgICAgICAgICAgICAgICJmb3J1bSI6ICJodHRwczovL3RoZXBocGxlYWd1ZS5zbGFjay5jb20iLAogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS90cmVlLzYuNy4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0wOS0xM1QxOTo1MDo0MiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMGU3ZTI5NDNmNzZkOGNiNTBjN2RmZGMyZjZkZWUzNTZlMTVlMzgzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3ppcGJhbGwvMDBlN2UyOTQzZjc2ZDhjYjUwYzdkZmRjMmY2ZGVlMzU2ZTE1ZTM4MyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAwZTdlMjk0M2Y3NmQ4Y2I1MGM3ZGZkYzJmNmRlZTM1NmUxNWUzODMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIuOTAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyLjkiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjE1IHx8IF45LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogInRvIHVzZSB0aGUgSUROQSBmZWF0dXJlIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2ludGwiOiAidG8gdXNlIHRoZSBJRE5BIGZlYXR1cmUgdmlhIFN5bWZvbnkgUG9seWZpbGwiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiTGVhZ3VlXFxVcmlcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJueWFtc3Byb2RAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9ueWFtc3Byb2QuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgVVJJIHJlcHJlc2VudGF0aW9uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJyZmMzOTg2IiwKICAgICAgICAgICAgICAgICJyZmMzOTg3IiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy90cmVlLzIuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0wNi0yOFQwNDoyNzoyMSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAib25lbG9naW4vcGhwLXNhbWwiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI0LjMuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU0FNTC1Ub29sa2l0cy9waHAtc2FtbC96aXBiYWxsLzI2YjNhNDczNDk0MTVlNWI3YWEzMDBiYTRhYjdmYzMxNmM2NWYxOWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjMiLAogICAgICAgICAgICAgICAgInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiOiAiXjMuMS41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGRlcGVuZC9wZGVwZW5kIjogIl4yLjguMCIsCiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInBocGxvYy9waHBsb2MiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgfHwgXjcuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9waHBjcGQiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUuOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiSW5zdGFsbCBjdXJsIGxpYiB0byBiZSBhYmxlIHRvIHVzZSB0aGUgSWRQTWV0YWRhdGFQYXJzZXIgZm9yIHBhcnNpbmcgcmVtb3RlIFhNTHMiLAogICAgICAgICAgICAgICAgImV4dC1kb20iOiAiSW5zdGFsbCB4bWwgbGliIiwKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICJJbnN0YWxsIG9wZW5zc2wgbGliIGluIG9yZGVyIHRvIGhhbmRsZSB3aXRoIHg1MDkgY2VydHMgKHJlcXVpcmUgdG8gc3VwcG9ydCBzaWduIGFuZCBlbmNyeXB0aW9uKSIsCiAgICAgICAgICAgICAgICAiZXh0LXpsaWIiOiAiSW5zdGFsbCB6bGliIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJPbmVMb2dpblxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUEhQIFNBTUwgVG9vbGtpdCIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGZWRlcmF0aW9uIiwKICAgICAgICAgICAgICAgICJTQU1MMiIsCiAgICAgICAgICAgICAgICAiU1NPIiwKICAgICAgICAgICAgICAgICJpZGVudGl0eSIsCiAgICAgICAgICAgICAgICAic2FtbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiZW1haWwiOiAic2l4dG8ubWFydGluLmdhcmNpYUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNS0wN1QyMjozODowNCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtY2xpZW50IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1jbGllbnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmI1OTA2ZWRjMWMzMjRjOWEwNWFhMDg3M2Q0MDExNzk0MWU1ZmE5MCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvaHR0cC1jbGllbnQvemlwYmFsbC9iYjU5MDZlZGMxYzMyNGM5YTA1YWEwODczZDQwMTE3OTQxZTVmYTkwIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmI1OTA2ZWRjMWMzMjRjOWEwNWFhMDg3M2Q0MDExNzk0MWU1ZmE5MCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjAgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIHx8IF4yLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXEh0dHBcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBjbGllbnRzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtY2xpZW50IiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0xOCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtY2xpZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIzLTA5LTIzVDE0OjE3OjUwKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwc3IvaHR0cC1mYWN0b3J5IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1mYWN0b3J5LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjJiNDc2NWZkZGZlM2I1MDhhYzYyZjgyOWU4NTJiMTUwMWQzZjZlOGEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtZmFjdG9yeS96aXBiYWxsLzJiNDc2NWZkZGZlM2I1MDhhYzYyZjgyOWU4NTJiMTUwMWQzZjZlOGEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItMTc6IENvbW1vbiBpbnRlcmZhY2VzIGZvciBQU1ItNyBIVFRQIG1lc3NhZ2UgZmFjdG9yaWVzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImZhY3RvcnkiLAogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTE3IiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWZhY3RvcnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjQtMDQtMTVUMTI6MDY6MTQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtbWVzc2FnZS96aXBiYWxsL2NiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYjZjZTQ4NDVjZTM0YThhZDllNjgxMTdjMTBlZTkwYTI5OTE5ZWJhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgbWVzc2FnZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICAgICAicHNyIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UvdHJlZS8xLjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMDQtMDRUMDk6NTA6NTIrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9sb2ciLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2cuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvbG9nL3ppcGJhbGwvZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQ0OTY5NWI5MDljM2I3NjI4YjYyODlkYjU0NzlhMWMyMDQ2MDFmMTEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxMb2dcXCI6ICJQc3IvTG9nLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBsb2dnaW5nIGxpYnJhcmllcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2ciLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAibG9nIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0zIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nL3RyZWUvMS4xLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMDUtMDNUMTE6MjA6MjcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbG91cGhpZS9nZXRhbGxoZWFkZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjEyMGI2MDVkZmViOTk2ODA4YzMxYjY0NzcyOTBhNzE0ZDM1NmU4MjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy96aXBiYWxsLzEyMGI2MDVkZmViOTk2ODA4YzMxYjY0NzcyOTBhNzE0ZDM1NmU4MjIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAiXjIuMSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl41IHx8IF42LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9nZXRhbGxoZWFkZXJzLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJyYWxwaC5raGF0dGFyQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvdHJlZS9kZXZlbG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAzLTA4VDA4OjU1OjM3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJyYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcmFtc2V5L2NvbGxlY3Rpb24vemlwYmFsbC9hZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYWQ3NDc1ZDFjOWU3MGIxOTBlY2ZmYzU4ZjJkOTg5NDE2YWYzMzliNCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSI6ICJeMS4yMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMjguMyIsCiAgICAgICAgICAgICAgICAiZmFrZXJwaHAvZmFrZXIiOiAiXjEuMjEiLAogICAgICAgICAgICAgICAgImhhbWNyZXN0L2hhbWNyZXN0LXBocCI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJqYW5ncmVnb3IvcGhwc3Rhbi1wcm9waGVjeSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuNSIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLWNvbnNvbGUtaGlnaGxpZ2h0ZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwY3NzdGFuZGFyZHMvcGhwY3N1dGlscyI6ICJeMS4wLjAtcmMxIiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS45IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tbW9ja2VyeSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicHNhbG0vcGx1Z2luLXBocHVuaXQiOiAiXjAuMTguNCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvZGluZy1zdGFuZGFyZCI6ICJeMi4wLjMiLAogICAgICAgICAgICAgICAgInJhbXNleS9jb252ZW50aW9uYWwtY29tbWl0cyI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rIjogewogICAgICAgICAgICAgICAgICAgICJmb3JjZS1pbnN0YWxsIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJyYW1zZXkvY29udmVudGlvbmFsLWNvbW1pdHMiOiB7CiAgICAgICAgICAgICAgICAgICAgImNvbmZpZ0ZpbGUiOiAiY29udmVudGlvbmFsLWNvbW1pdHMuanNvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSYW1zZXlcXENvbGxlY3Rpb25cXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmVuIFJhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJlbkBiZW5yYW1zZXkuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9iZW5yYW1zZXkuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29sbGVjdGlvbnMuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJjb2xsZWN0aW9uIiwKICAgICAgICAgICAgICAgICJoYXNoIiwKICAgICAgICAgICAgICAgICJtYXAiLAogICAgICAgICAgICAgICAgInF1ZXVlIiwKICAgICAgICAgICAgICAgICJzZXQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL3RyZWUvMS4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9yYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjItMTItMjdUMTk6MTI6MjQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbXNleS91dWlkIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYW1zZXkvdXVpZC96aXBiYWxsL2ZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmYzliYjdmYjUzODg2OTFmZDczNzNjZDQ0ZGNiNGQ2M2JiY2YyNGRmIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJicmljay9tYXRoIjogIl4wLjggfHwgXjAuOSIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvbGxlY3Rpb24iOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSI6ICJeMS44IiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLXBocDgwIjogIl4xLjE0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVwbGFjZSI6IHsKICAgICAgICAgICAgICAgICJyaHVtc2FhL3V1aWQiOiAic2VsZi52ZXJzaW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2svY2FwdGFpbmhvb2siOiAiXjUuMTAiLAogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogIl4wLjcuMCIsCiAgICAgICAgICAgICAgICAiZG9jdHJpbmUvYW5ub3RhdGlvbnMiOiAiXjEuOCIsCiAgICAgICAgICAgICAgICAiZXJnZWJuaXMvY29tcG9zZXItbm9ybWFsaXplIjogIl4yLjE1IiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAibW9vbnRvYXN0L21hdGgiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbS1saWIiOiAiXjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrIjogIl4yLjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrLW1vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwYmVuY2gvcGhwYmVuY2giOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNSB8fCBeOSIsCiAgICAgICAgICAgICAgICAic2xldm9tYXQvY29kaW5nLXN0YW5kYXJkIjogIl43LjAiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuNSIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiXjQuOSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWJjbWF0aCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBCQ01hdGguIiwKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiRW5hYmxlcyBmYXN0ZXIgcHJvY2Vzc2luZyBvZiBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdXNpbmcgY3R5cGUgZnVuY3Rpb25zLiIsCiAgICAgICAgICAgICAgICAiZXh0LWdtcCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBHTVAuIiwKICAgICAgICAgICAgICAgICJleHQtdXVpZCI6ICJFbmFibGVzIHRoZSB1c2Ugb2YgUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGFuZCBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvci4iLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9yYW5kb20tbGliIjogIlByb3ZpZGVzIFJhbmRvbUxpYiBmb3IgdXNlIHdpdGggdGhlIFJhbmRvbUxpYkFkYXB0ZXIiLAogICAgICAgICAgICAgICAgInJhbXNleS91dWlkLWRvY3RyaW5lIjogIkFsbG93cyB0aGUgdXNlIG9mIFJhbXNleVxcVXVpZFxcVXVpZCBhcyBEb2N0cmluZSBmaWVsZCB0eXBlLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgICAgICAgICAiZm9yY2UtaW5zdGFsbCI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICI0LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnMucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUmFtc2V5XFxVdWlkXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBnZW5lcmF0aW5nIGFuZCB3b3JraW5nIHdpdGggdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXJzIChVVUlEcykuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImd1aWQiLAogICAgICAgICAgICAgICAgImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgInV1aWQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL3RyZWUvNC4yLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9yYW1zZXkvdXVpZCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMDktMjVUMjM6MTA6MzgrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuNSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMzA2MmJlNzgxNzhjYmI1ZThmNjA1Y2QyNTVkYzMyYTE0OTgxZjkyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvcm9icmljaGFyZHMveG1sc2VjbGlicy96aXBiYWxsLzAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMzA2MmJlNzgxNzhjYmI1ZThmNjA1Y2QyNTVkYzMyYTE0OTgxZjkyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj0gNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSb2JSaWNoYXJkc1xcWE1MU2VjTGlic1xcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBYTUwgU2VjdXJpdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAic2VjdXJpdHkiLAogICAgICAgICAgICAgICAgInNpZ25hdHVyZSIsCiAgICAgICAgICAgICAgICAieG1sIiwKICAgICAgICAgICAgICAgICJ4bWxkc2lnIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvdHJlZS8zLjEuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wMy0xM1QxMDozMTo1NiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMC40IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNzc1MmNlOTMxZWMyODVkYTRlZDFmNGM1YWEyN2U0NWUwOTdiZTYxZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL1Nwb21reS1MYWJzL2Jhc2U2NHVybC96aXBiYWxsLzc3NTJjZTkzMWVjMjg1ZGE0ZWQxZjRjNWFhMjdlNDVlMDk3YmU2MWQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjExfF4wLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJCYXNlNjRVcmxcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQmFzZSA2NCBVUkwgU2FmZSBFbmNvZGluZy9EZWNvZGluZyBQSFAgTGlicmFyeSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImJhc2U2NCIsCiAgICAgICAgICAgICAgICAicmZjNDY0OCIsCiAgICAgICAgICAgICAgICAic2FmZSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL3RyZWUvdjIuMC40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjAtMTEtMDNUMDk6MTA6MjUrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNwb21reS1sYWJzL2Nib3ItcGhwIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU3BvbWt5LUxhYnMvY2Jvci1waHAvemlwYmFsbC8yOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjhlMjcxMmNmYzBiNDhmYWU2NjFhNDhmZmM2ODk2ZDdhYmU4MzY4NCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiYnJpY2svbWF0aCI6ICJeMC44LjE1fF4wLjkuMCIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImVraW5vL3BocHN0YW4tYmFubmVkLWNvZGUiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiaW5mZWN0aW9uL2luZmVjdGlvbiI6ICJeMC4xOHxeMC4yNSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAgICAgICAgICJyZWN0b3IvcmVjdG9yIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJyb2F2ZS9zZWN1cml0eS1hZHZpc29yaWVzIjogImRldi1sYXRlc3QiLAogICAgICAgICAgICAgICAgInN5bXBsaWZ5L2Vhc3ktY29kaW5nLXN0YW5kYXJkIjogIl4xMC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkdNUCBvciBCQ01hdGggZXh0ZW5zaW9ucyB3aWxsIGRyYXN0aWNhbGx5IGltcHJvdmUgdGhlIGxpYnJhcnkgcGVyZm9ybWFuY2UuIEJDTWF0aCBleHRlbnNpb24gbmVlZGVkIHRvIGhhbmRsZSB0aGUgQmlnIEZsb2F0IGFuZCBEZWNpbWFsIEZyYWN0aW9uIFRhZ3MiLAogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiQ0JPUlxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDQk9SIEVuY29kZXIvRGVjb2RlciBmb3IgUEhQIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkNvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiIsCiAgICAgICAgICAgICAgICAiUkZDNzA0OSIsCiAgICAgICAgICAgICAgICAiY2JvciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvdHJlZS92Mi4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0xMi0xM1QxMjo0NjoyNiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi41LjQiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjYwNTM4OWYyYTdlNTYyNWYyNzNiNTM5NjBkYzQ2YWVhZjljNjI5MTgiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cy96aXBiYWxsLzYwNTM4OWYyYTdlNTYyNWYyNzNiNTM5NjBkYzQ2YWVhZjljNjI5MTgiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvY29udHJhY3RzIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L2NvbnRyYWN0cyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICIyLjUtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgY29udmVudGlvbiB0byB0cmlnZ2VyIGRlcHJlY2F0aW9uIG5vdGljZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvdHJlZS92Mi41LjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDI0LTA5LTI1VDE0OjExOjEzKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsLWN0eXBlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMzcuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNDEwNDZhOGY5NDc3OTQ4ZmYyODRmYTY1YmUyMDk1YmFhZmI5NGYyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS96aXBiYWxsLzE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNDEwNDZhOGY5NDc3OTQ4ZmYyODRmYTY1YmUyMDk1YmFhZmI5NGYyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICIqIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiRm9yIGJlc3QgcGVyZm9ybWFuY2UiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxDdHlwZVxcIjogIiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlcnQgZGUgUGFndGVyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiQmFja0VuZFRlYUBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciBjdHlwZSBmdW5jdGlvbnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXRpYmlsaXR5IiwKICAgICAgICAgICAgICAgICJjdHlwZSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM3LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvemlwYmFsbC9kZmI1NTcyNmMzYTc2ZWEzYjY0NTlmY2ZkYTFlYzJkODBhNjgyNDExIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvc3R1YnMiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJJb24gQmF6YW4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJpb24uYmF6YW5AZ21haWwuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMCsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIiwKICAgICAgICAgICAgICAgICJzaGltIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM4LjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODEuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNmJmYjljNzY2Y2FjZmZiYzhlMTE4Y2I4NzIxN2QwOGVkODRlNWNkNyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvemlwYmFsbC82YmZiOWM3NjZjYWNmZmJjOGUxMThjYjg3MjE3ZDA4ZWQ4NGU1Y2Q3IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNmJmYjljNzY2Y2FjZmZiYzhlMTE4Y2I4NzIxN2QwOGVkODRlNWNkNyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvc3R1YnMiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMSsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIiwKICAgICAgICAgICAgICAgICJzaGltIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvdHJlZS92MS4zOC4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNS0yNlQxMjo0NTo1OCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wcm9jZXNzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjUuNC41MSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wcm9jZXNzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQ2N2JmYzU2ZjE4ZjVlZjZkNWNjYjA5MzI0ZDdlOTg4YzFjMGE5OGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3Byb2Nlc3MvemlwYmFsbC80NjdiZmM1NmYxOGY1ZWY2ZDVjY2IwOTMyNGQ3ZTk4OGMxYzBhOThmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yLjUiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMTYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICIvVGVzdHMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmFiaWVuIFBvdGVuY2llciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZhYmllbkBzeW1mb255LmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkV4ZWN1dGVzIGNvbW1hbmRzIGluIHN1Yi1wcm9jZXNzZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wcm9jZXNzL3RyZWUvdjUuNC41MSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3N5bWZvbnkuY29tL3Nwb25zb3IiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImN1c3RvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFicG90IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXMtZ3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3N5bWZvbnkvc3ltZm9ueSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDEtMjZUMTU6NTM6MzcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInRoZWNvZGluZ21hY2hpbmUvc2FmZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE4YWIwODc2MzA1YTRjZGFlZjMxYjIzNTBmY2I5ODExYjU2MDhkYmMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvemlwYmFsbC9hOGFiMDg3NjMwNWE0Y2RhZWYzMWIyMzUwZmNiOTgxMWI1NjA4ZGJjIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjIiLAogICAgICAgICAgICAgICAgInRoZWNvZGluZ21hY2hpbmUvcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjAuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9hcGMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9saWJldmVudC5waHAiLAogICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkL21zc3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvc3RhdHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAibGliL3NwZWNpYWxfY2FzZXMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2FwYWNoZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXBjdS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvYXJyYXkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2J6aXAyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jYWxlbmRhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY2xhc3NvYmoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2NvbS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY3VicmlkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jdXJsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9kYXRldGltZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZGlyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9laW8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Vycm9yZnVuYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZXhlYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsZWluZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbGVzeXN0ZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbHRlci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZnBtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9mdHAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Z1bmNoYW5kLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9nbXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2dudXBnLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9oYXNoLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pYmFzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaWJtRGIyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pY29udi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW1hZ2UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ltYXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2luZ3Jlcy1paS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaW5vdGlmeS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvanNvbi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGRhcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbGlieG1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9semYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21haWxwYXJzZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbWJzdHJpbmcucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21pc2MucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21zcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbGkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRNcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbXlzcWxuZFFjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9uZXR3b3JrLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vY2k4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGNhY2hlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vcGVuc3NsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9vdXRjb250cm9sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wYXNzd29yZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGNudGwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BjcmUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BkZi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGdzcWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Bvc2l4LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcHNwZWxsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9yZWFkbGluZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnBtaW5mby5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcnJkLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zZW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Nlc3Npb24ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NobW9wLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zaW1wbGV4bWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvY2tldHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvZGl1bS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc29sci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3BsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zcWxzcnYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NzZGVlcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3NoMi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3RyZWFtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJpbmdzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zd29vbGUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3VvZGJjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91b3B6LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91cmwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Zhci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveGRpZmYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3htbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveG1scnBjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YW1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC95YXoucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3ppcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvemxpYi5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTYWZlXFwiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICJsaWIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvIiwKICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC8iCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBIUCBjb3JlIGZ1bmN0aW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgRkFMU0Ugb24gZXJyb3IiLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlL3RyZWUvdjEuMy4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIwLTEwLTI4VDE3OjUxOjM0KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItYXV0aC9jb3NlLWxpYiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UtbGliLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItYXV0aC9jb3NlLWxpYi96aXBiYWxsL2VmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZmE2ZWMyYmE0ZTg0MGJjMTMxNmE0OTM5NzNjOTkxNjAyOGFmZWViIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkNvc2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvY29zZS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDQk9SIE9iamVjdCBTaWduaW5nIGFuZCBFbmNyeXB0aW9uIChDT1NFKSBGb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJDT1NFIiwKICAgICAgICAgICAgICAgICJSRkM4MTUyIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UtbGliL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTEyLTA0VDEyOjEzOjM1KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjMuMy4xMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS96aXBiYWxsL2VmNDBkMmI3YjY4YzQ5NjQyNDdkMTNmYWI1MmUyZmE4ZGJkNjUyNDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaSI6ICJeNi4wIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJNYW5kYXRvcnkgZm9yIGZldGNoaW5nIE1ldGFkYXRhIFN0YXRlbWVudCBmcm9tIGRpc3RhbnQgc291cmNlcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIjogIk1hbmRhdG9yeSBmb3IgZmV0Y2hpbmcgTWV0YWRhdGEgU3RhdGVtZW50IGZyb20gZGlzdGFudCBzb3VyY2VzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJXZWJhdXRoblxcTWV0YWRhdGFTZXJ2aWNlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTWV0YWRhdGEgU2VydmljZSBmb3IgRklETzIvV2ViYXV0aG4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkZJRE8yIiwKICAgICAgICAgICAgICAgICJmaWRvIiwKICAgICAgICAgICAgICAgICJ3ZWJhdXRobiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1tZXRhZGF0YS1zZXJ2aWNlL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiYWJhbmRvbmVkIjogIndlYi1hdXRoL3dlYmF1dGhuLWxpYiIsCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMTEtMjFUMTE6MTQ6MzErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi1hdXRoL3dlYmF1dGhuLWxpYiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjMuMTIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1ZWY5YjIxYzhlOWY4YTgxN2U1MjRhYzkzMjkwZDA4YTlmMDY1YjMzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLWF1dGgvd2ViYXV0aG4tbGliL3ppcGJhbGwvNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjVlZjliMjFjOGU5ZjhhODE3ZTUyNGFjOTMyOTBkMDhhOWYwNjViMzMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImJlYmVybGVpL2Fzc2VydCI6ICJeMy4yIiwKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAiZmdyb3NzZS9waHBhc24xIjogIl4yLjEiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInJhbXNleS91dWlkIjogIl4zLjh8XjQuMCIsCiAgICAgICAgICAgICAgICAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInNwb21reS1sYWJzL2Nib3ItcGhwIjogIl4xLjB8XjIuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIl4zLjB8XjQuMHxeNS4wIiwKICAgICAgICAgICAgICAgICJ0aGVjb2RpbmdtYWNoaW5lL3NhZmUiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAid2ViLWF1dGgvY29zZS1saWIiOiAic2VsZi52ZXJzaW9uIiwKICAgICAgICAgICAgICAgICJ3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlIjogInNlbGYudmVyc2lvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAicHNyL2xvZy1pbXBsZW1lbnRhdGlvbiI6ICJSZWNvbW1lbmRlZCB0byByZWNlaXZlIGxvZ3MgZnJvbSB0aGUgbGlicmFyeSIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJNYW5kYXRvcnkgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIldlYmF1dGhuXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYnJhcnkvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRklETzIvV2ViYXV0aG4gU3VwcG9ydCBGb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGSURPMiIsCiAgICAgICAgICAgICAgICAiZmlkbyIsCiAgICAgICAgICAgICAgICAid2ViYXV0aG4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbGliL3RyZWUvdjMuMy4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDIyLTAyLTE4VDA3OjEzOjQ0KzAwOjAwIgogICAgICAgIH0KICAgIF0sCiAgICAicGFja2FnZXMtZGV2IjogW10sCiAgICAiYWxpYXNlcyI6IFtdLAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogInN0YWJsZSIsCiAgICAic3RhYmlsaXR5LWZsYWdzIjoge30sCiAgICAicHJlZmVyLXN0YWJsZSI6IGZhbHNlLAogICAgInByZWZlci1sb3dlc3QiOiBmYWxzZSwKICAgICJwbGF0Zm9ybSI6IHsKICAgICAgICAicGhwIjogIj49Ny40IgogICAgfSwKICAgICJwbGF0Zm9ybS1kZXYiOiB7fSwKICAgICJwbHVnaW4tYXBpLXZlcnNpb24iOiAiMi45LjAiCn0K]]></data>
	</file>
	<file>
	  <filename>/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKVmVyc2lvbiAyLCBKdW5lIDE5OTEKClNlZSBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbGljZW5zZSB0ZXJtcy4K]]></data>
	</file>
	<file>
	  <filename>/function.admin_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfY29tbW9uX2xvYWRlci5waHAnOwptYXNfcmVxdWlyZV9tYXNfYWRtaW5fdWkoKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7Ck1hc19BZG1pbl9VaTo6YXNzaWduQnJhbmRpbmcoJHRoaXMsICRzbWFydHkpOwokZG9uYXRpb25zSGlkZGVuID0gKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdoaWRlZG9uYXRpb25zdGFiJykgPT0gJHRoaXMtPkdldFZlcnNpb24oKSk7CiRhZG1pbnNlY3Rpb25zID0gYXJyYXkoCiAgICAkdGhpcy0+TGFuZygnZXh0ZW5zaW9ucycpID0+ICdleHRlbnNpb25zJywKICAgICdjb250ZW50JyA9PiAnY29udGVudCcsCiAgICAnc2l0ZWFkbWluJyA9PiAnc2l0ZWFkbWluJywKICAgICd1c2Vyc2dyb3VwcycgPT4gJ3VzZXJzZ3JvdXBzJywKICAgICdsYXlvdXQnID0+ICdsYXlvdXQnLAogICAgJ2Vjb21tZXJjZScgPT4gJ2Vjb21tZXJjZScsCik7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZG1pbl9zZXR0aW5nc19zYXZlJywgJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ2FkbWluc2VjdGlvbl9kcm9wZG93bicsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2FkbWluc2VjdGlvbicsICRhZG1pbnNlY3Rpb25zLCAtMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoTUFTX0F1dGhIdWI6OlBSRUZfQURNSU5fU0VDVElPTiwgJ2V4dGVuc2lvbnMnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Nob3dkb25hdGlvbnN0YWJfY2hlY2tib3gnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzaG93ZG9uYXRpb25zdGFiJywgJzEnLCAhJGRvbmF0aW9uc0hpZGRlbikpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9zZXR0aW5ncy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.audit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CmlmIChjbGFzc19leGlzdHMoJ2NnZV91dGlscycpICYmICFlbXB0eSgkX1BPU1QpICYmICFjZ2VfdXRpbHM6OnZhbGlkX2Zvcm1fY3NyZigpKSB7CiAgICByZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KJGRiID0gJHRoaXMtPkdldERiKCk7CiR0YWJsZSA9IE1hc19BaF9UYWJsZXM6OmF1ZGl0TG9nKCk7CiRhZG1pblVpZCA9IGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3VzZXJpZCcpID8gKGludCkgZ2V0X3VzZXJpZChmYWxzZSkgOiAwOwokcGVyUGFnZSA9IDI1OwokcGFnZSA9IG1heCgxLCAoaW50KSAoJHBhcmFtc1snYXVkaXRfcGFnZSddID8/IDEpKTsKCmlmIChpc3NldCgkcGFyYW1zWydleHBvcnRfYXVkaXQnXSkpIHsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2NzdjsgY2hhcnNldD11dGYtOCcpOwogICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1tYXNfYXV0aGh1Yl9hdWRpdC5jc3YnKTsKICAgICRvdXQgPSBmb3BlbigncGhwOi8vb3V0cHV0JywgJ3cnKTsKICAgIGZwdXRjc3YoJG91dCwgYXJyYXkoJ2lkJywgJ2NyZWF0ZWQnLCAnZXZlbnQnLCAnc2V2ZXJpdHknLCAndXNlcl9pZCcsICdwcm92aWRlcl9pZCcpKTsKICAgICRleHBvcnRSb3dzID0gJGRiLT5HZXRBcnJheSgnU0VMRUNUIGlkLCBjcmVhdGVkLCBldmVudCwgc2V2ZXJpdHksIHVzZXJfaWQsIHByb3ZpZGVyX2lkIEZST00gJyAuICR0YWJsZSAuICcgT1JERVIgQlkgaWQgREVTQyBMSU1JVCA1MDAwJyk7CiAgICBpZiAoaXNfYXJyYXkoJGV4cG9ydFJvd3MpKSB7CiAgICAgICAgZm9yZWFjaCAoJGV4cG9ydFJvd3MgYXMgJHIpIHsKICAgICAgICAgICAgZnB1dGNzdigkb3V0LCAkcik7CiAgICAgICAgfQogICAgfQogICAgZmNsb3NlKCRvdXQpOwogICAgZXhpdDsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2F1ZGl0X2dvdG9fc3VibWl0J10pKSB7CiAgICAkZ290byA9IG1heCgxLCAoaW50KSAoJHBhcmFtc1snYXVkaXRfZ290b19wYWdlJ10gPz8gMSkpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ2F1ZGl0JywgJ2F1ZGl0X3BhZ2UnID0+ICRnb3RvKSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjbGVhcl9hdWRpdF9sb2cnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ2F1ZGl0X2NsZWFyX2NvbmZpcm0nXSkpIHsKICAgICRkYi0+RXhlY3V0ZSgnREVMRVRFIEZST00gJyAuICR0YWJsZSk7CiAgICBNYXNfQWhfQXVkaXQ6OmxvZygkdGhpcywgJ2FkbWluLmF1ZGl0X2NsZWFyZWQnLCAnd2FybmluZycsIGFycmF5KCksICRhZG1pblVpZCwgMCk7CiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZldGFiJyA9PiAnYXVkaXQnLCAnYXVkaXRfcGFnZScgPT4gMSwgJ21zZycgPT4gJ2F1ZGl0X21zZ19jbGVhcmVkJykpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snZGVsZXRlX2F1ZGl0X3NlbGVjdGVkJ10pKSB7CiAgICAkcmF3SWRzID0gaXNzZXQoJHBhcmFtc1snYXVkaXRfaWRzJ10pID8gJHBhcmFtc1snYXVkaXRfaWRzJ10gOiBhcnJheSgpOwogICAgaWYgKCFpc19hcnJheSgkcmF3SWRzKSkgewogICAgICAgICRyYXdJZHMgPSBhcnJheSgkcmF3SWRzKTsKICAgIH0KICAgICRpZHMgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJHJhd0lkcyBhcyAkcmF3SWQpIHsKICAgICAgICAkaW50SWQgPSAoaW50KSAkcmF3SWQ7CiAgICAgICAgaWYgKCRpbnRJZCA+IDApIHsKICAgICAgICAgICAgJGlkc1skaW50SWRdID0gJGludElkOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkaWRzICE9PSBhcnJheSgpKSB7CiAgICAgICAgJHBsYWNlaG9sZGVycyA9IGltcGxvZGUoJywnLCBhcnJheV9maWxsKDAsIGNvdW50KCRpZHMpLCAnPycpKTsKICAgICAgICAkZGItPkV4ZWN1dGUoJ0RFTEVURSBGUk9NICcgLiAkdGFibGUgLiAnIFdIRVJFIGlkIElOICgnIC4gJHBsYWNlaG9sZGVycyAuICcpJywgYXJyYXlfdmFsdWVzKCRpZHMpKTsKICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkdGhpcywgJ2FkbWluLmF1ZGl0X2J1bGtfZGVsZXRlZCcsICdpbmZvJywgYXJyYXkoJ2NvdW50JyA9PiBjb3VudCgkaWRzKSwgJ2lkcycgPT4gYXJyYXlfdmFsdWVzKCRpZHMpKSwgJGFkbWluVWlkLCAwKTsKICAgIH0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmV0YWInID0+ICdhdWRpdCcsICdhdWRpdF9wYWdlJyA9PiAkcGFnZSwgJ21zZycgPT4gJ2F1ZGl0X21zZ19idWxrX2RlbGV0ZWQnKSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydkZWxldGVfYXVkaXRfaWQnXSkpIHsKICAgICRkZWxldGVJZCA9IChpbnQpICRwYXJhbXNbJ2RlbGV0ZV9hdWRpdF9pZCddOwogICAgaWYgKCRkZWxldGVJZCA+IDApIHsKICAgICAgICAkZGItPkV4ZWN1dGUoJ0RFTEVURSBGUk9NICcgLiAkdGFibGUgLiAnIFdIRVJFIGlkID0gPycsIGFycmF5KCRkZWxldGVJZCkpOwogICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4uYXVkaXRfZGVsZXRlZCcsICdpbmZvJywgYXJyYXkoJ2lkJyA9PiAkZGVsZXRlSWQpLCAkYWRtaW5VaWQsIDApOwogICAgfQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ2F1ZGl0JywgJ2F1ZGl0X3BhZ2UnID0+ICRwYWdlLCAnbXNnJyA9PiAnYXVkaXRfbXNnX2RlbGV0ZWQnKSk7Cn0KCiR0b3RhbCA9IChpbnQpICRkYi0+R2V0T25lKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSAnIC4gJHRhYmxlKTsKJHRvdGFsUGFnZXMgPSBtYXgoMSwgKGludCkgY2VpbCgkdG90YWwgLyAkcGVyUGFnZSkpOwppZiAoJHBhZ2UgPiAkdG90YWxQYWdlcykgewogICAgJHBhZ2UgPSAkdG90YWxQYWdlczsKfQokb2Zmc2V0ID0gKCRwYWdlIC0gMSkgKiAkcGVyUGFnZTsKJHJvd3MgPSAkZGItPkdldEFycmF5KCdTRUxFQ1QgKiBGUk9NICcgLiAkdGFibGUgLiAnIE9SREVSIEJZIGlkIERFU0MgTElNSVQgJyAuIChpbnQpICRwZXJQYWdlIC4gJyBPRkZTRVQgJyAuIChpbnQpICRvZmZzZXQpOwppZiAoIWlzX2FycmF5KCRyb3dzKSkgewogICAgJHJvd3MgPSBhcnJheSgpOwp9CiRyb3dzID0gTWFzX0FoX0F1ZGl0OjplbnJpY2hSb3dzV2l0aFVzZXJuYW1lcygkdGhpcywgJHJvd3MpOwpmb3JlYWNoICgkcm93cyBhcyAkaWR4ID0+ICRyb3cpIHsKICAgICRjcmVhdGVkID0gaXNzZXQoJHJvd1snY3JlYXRlZCddKSA/IChpbnQpICRyb3dbJ2NyZWF0ZWQnXSA6IDA7CiAgICAkcm93c1skaWR4XVsnY3JlYXRlZF9kaXNwbGF5J10gPSAkY3JlYXRlZCA+IDAgPyBkYXRlKCdkL20vWSBIOmknLCAkY3JlYXRlZCkgOiAnJzsKICAgICRyb3dzWyRpZHhdWydkZWxldGVfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAkaWQsCiAgICAgICAgJ2RlZmF1bHRhZG1pbicsCiAgICAgICAgJHJldHVybmlkLAogICAgICAgICcnLAogICAgICAgIGFycmF5KCdhY3RpdmV0YWInID0+ICdhdWRpdCcsICdhdWRpdF9wYWdlJyA9PiAkcGFnZSwgJ2RlbGV0ZV9hdWRpdF9pZCcgPT4gKGludCkgJHJvd1snaWQnXSksCiAgICAgICAgJycsCiAgICAgICAgdHJ1ZQogICAgKTsKICAgICRyb3dzWyRpZHhdWydyb3dfY2hlY2tib3gnXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2F1ZGl0X2lkc1tdJywgKHN0cmluZykgJHJvd1snaWQnXSwgMCk7Cn0KCiRhdWRpdFRhYlBhcmFtcyA9IGFycmF5KCdhY3RpdmV0YWInID0+ICdhdWRpdCcpOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbignYWN0aW9uaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdtYXNfYXV0aGh1Yl9yb3dzJywgJHJvd3MpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X3BhZ2UnLCAkcGFnZSk7CiRzbWFydHktPmFzc2lnbignYXVkaXRfdG90YWxfcGFnZXMnLCAkdG90YWxQYWdlcyk7CiRzbWFydHktPmFzc2lnbignYXVkaXRfdG90YWwnLCAkdG90YWwpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X3Blcl9wYWdlJywgJHBlclBhZ2UpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X3BhZ2VfZmlyc3RfdXJsJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAnJywgYXJyYXlfbWVyZ2UoJGF1ZGl0VGFiUGFyYW1zLCBhcnJheSgnYXVkaXRfcGFnZScgPT4gMSkpLCAnJywgdHJ1ZSkpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X3BhZ2VfcHJldl91cmwnLCAkcGFnZSA+IDEgPyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICcnLCBhcnJheV9tZXJnZSgkYXVkaXRUYWJQYXJhbXMsIGFycmF5KCdhdWRpdF9wYWdlJyA9PiAkcGFnZSAtIDEpKSwgJycsIHRydWUpIDogJycpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X3BhZ2VfbmV4dF91cmwnLCAkcGFnZSA8ICR0b3RhbFBhZ2VzID8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAnJywgYXJyYXlfbWVyZ2UoJGF1ZGl0VGFiUGFyYW1zLCBhcnJheSgnYXVkaXRfcGFnZScgPT4gJHBhZ2UgKyAxKSksICcnLCB0cnVlKSA6ICcnKTsKJHNtYXJ0eS0+YXNzaWduKCdhdWRpdF9wYWdlX2xhc3RfdXJsJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAnJywgYXJyYXlfbWVyZ2UoJGF1ZGl0VGFiUGFyYW1zLCBhcnJheSgnYXVkaXRfcGFnZScgPT4gJHRvdGFsUGFnZXMpKSwgJycsIHRydWUpKTsKJHNtYXJ0eS0+YXNzaWduKCdleHBvcnRfdXJsJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAnJywgYXJyYXlfbWVyZ2UoJGF1ZGl0VGFiUGFyYW1zLCBhcnJheSgnZXhwb3J0X2F1ZGl0JyA9PiAxKSksICcnLCB0cnVlKSk7CiRzbWFydHktPmFzc2lnbignbGlzdF9mb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnJywgZmFsc2UsICcnLCBhcnJheV9tZXJnZSgkYXVkaXRUYWJQYXJhbXMsIGFycmF5KCdhdWRpdF9wYWdlJyA9PiAkcGFnZSkpKSk7CiRzbWFydHktPmFzc2lnbignbGlzdF9mb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignZ290b19mb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnJywgZmFsc2UsICcnLCBhcnJheV9tZXJnZSgkYXVkaXRUYWJQYXJhbXMsIGFycmF5KCdhdWRpdF9nb3RvX3N1Ym1pdCcgPT4gMSkpKSk7CiRzbWFydHktPmFzc2lnbignZ290b19mb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignZ290b19wYWdlX2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdhdWRpdF9nb3RvX3BhZ2UnLCAoc3RyaW5nKSAkcGFnZSwgNCwgNikpOwokc21hcnR5LT5hc3NpZ24oJ2dvdG9fc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2F1ZGl0X2dvdG9fc3VibWl0JywgJHRoaXMtPkxhbmcoJ2F1ZGl0X2dvdG8nKSkpOwokc21hcnR5LT5hc3NpZ24oJ2RlbGV0ZV9zZWxlY3RlZF9zdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnZGVsZXRlX2F1ZGl0X3NlbGVjdGVkJywgJHRoaXMtPkxhbmcoJ2F1ZGl0X2RlbGV0ZV9zZWxlY3RlZCcpKSk7CiRzbWFydHktPmFzc2lnbignY2xlYXJfZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICdwb3N0JywgJycsIGZhbHNlLCAnJywgJGF1ZGl0VGFiUGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbignY2xlYXJfZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ2NsZWFyX2NvbmZpcm1fY2hlY2tib3gnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdhdWRpdF9jbGVhcl9jb25maXJtJywgJzEnLCAwKSk7CiRzbWFydHktPmFzc2lnbignY2xlYXJfc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NsZWFyX2F1ZGl0X2xvZycsICR0aGlzLT5MYW5nKCdhdWRpdF9jbGVhcl9hbGwnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X2pzX2NvbmZpcm1fY2xlYXInLCBqc29uX2VuY29kZSgkdGhpcy0+TGFuZygnYXVkaXRfY29uZmlybV9jbGVhcicpLCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfQU1QIHwgSlNPTl9IRVhfUVVPVCkpOwokc21hcnR5LT5hc3NpZ24oJ2F1ZGl0X2pzX2NvbmZpcm1fYnVsaycsIGpzb25fZW5jb2RlKCR0aGlzLT5MYW5nKCdhdWRpdF9jb25maXJtX2J1bGsnKSwgSlNPTl9IRVhfVEFHIHwgSlNPTl9IRVhfQVBPUyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX1FVT1QpKTsKJHNtYXJ0eS0+YXNzaWduKCdhdWRpdF9qc19ub25lX3NlbGVjdGVkJywganNvbl9lbmNvZGUoJHRoaXMtPkxhbmcoJ2F1ZGl0X25vbmVfc2VsZWN0ZWQnKSwgSlNPTl9IRVhfVEFHIHwgSlNPTl9IRVhfQVBPUyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX1FVT1QpKTsKJHNtYXJ0eS0+YXNzaWduKCdhdWRpdF9qc19jbGVhcl9jb25maXJtX3JlcXVpcmVkJywganNvbl9lbmNvZGUoJHRoaXMtPkxhbmcoJ2F1ZGl0X2NsZWFyX2NvbmZpcm1fcmVxdWlyZWQnKSwgSlNPTl9IRVhfVEFHIHwgSlNPTl9IRVhfQVBPUyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX1FVT1QpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhdWRpdC50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.donations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfY29tbW9uX2xvYWRlci5waHAnOwptYXNfcmVxdWlyZV9tYXNfYWRtaW5fdWkoKTsKTWFzX0FkbWluX1VpOjpyZW5kZXJEb25hdGlvbnNUYWIoJHRoaXMsICRpZCwgJHJldHVybmlkLCAnZGVmYXVsdGFkbWluJywgJ2FkbWluX3NldHRpbmdzX3NhdmUnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.mams_policy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoY2xhc3NfZXhpc3RzKCdjZ2VfdXRpbHMnKSAmJiAhZW1wdHkoJF9QT1NUKSAmJiAhY2dlX3V0aWxzOjp2YWxpZF9mb3JtX2NzcmYoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CiRtYW1zID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TJyk7CiRhdXRoTW9kID0gJyc7CiRtYW1zT2sgPSAkbWFtcyA/ICd5ZXMnIDogJ25vJzsKJHJlZ09rID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TUmVnaXN0cmF0aW9uJykgPyAneWVzJyA6ICdubyc7CmlmICgkbWFtcykgewogICAgJGF1dGhNb2QgPSAoc3RyaW5nKSAkbWFtcy0+R2V0UHJlZmVyZW5jZSgnYXV0aF9tb2R1bGUnLCAnJyk7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9tYW1zX3BvbGljeSddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfbWFtc19qaXRfY3JlYXRlJywgIWVtcHR5KCRwYXJhbXNbJ21hbXNfaml0X2NyZWF0ZSddKSA/ICcxJyA6ICcwJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnLCAhZW1wdHkoJHBhcmFtc1snYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCddKSA/ICcxJyA6ICcwJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfZGVmYXVsdF9ncm91cHMnLCB0cmltKChzdHJpbmcpICgkcGFyYW1zWydtYW1zX2RlZmF1bHRfZ3JvdXBzJ10gPz8gJycpKSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2RlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eScsIHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ2RlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eSddID8/ICdhdXRoaHViX3N1YicpKSk7CiAgICAkYWRtaW5VaWQgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF91c2VyaWQnKSA/IChpbnQpIGdldF91c2VyaWQoZmFsc2UpIDogMDsKICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4ubWFtc19wb2xpY3lfc2F2ZWQnLCAnaW5mbycsIGFycmF5KAogICAgICAgICdtYW1zX2ppdF9jcmVhdGUnID0+ICFlbXB0eSgkcGFyYW1zWydtYW1zX2ppdF9jcmVhdGUnXSkgPyAxIDogMCwKICAgICAgICAnYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCcgPT4gIWVtcHR5KCRwYXJhbXNbJ2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnXSkgPyAxIDogMCwKICAgICAgICAnZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JyA9PiB0cmltKChzdHJpbmcpICgkcGFyYW1zWydkZWZhdWx0X2Nvbm5lY3RpbmdfcHJvcGVydHknXSA/PyAnYXV0aGh1Yl9zdWInKSksCiAgICApLCAkYWRtaW5VaWQsIDApOwogICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ3ByZWZzdXBkYXRlZCcpKTsKfQokc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiRzbWFydHktPmFzc2lnbigncmV0dXJuaWQnLCAkcmV0dXJuaWQpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywgJGFjdGlvbmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdtYW1zX29rJywgJG1hbXNPayk7CiRzbWFydHktPmFzc2lnbignbWFtc19hdXRoX21vZHVsZScsICRhdXRoTW9kICE9PSAnJyA/ICRhdXRoTW9kIDogJyhidWlsdC1pbiknKTsKJHNtYXJ0eS0+YXNzaWduKCdtYW1zX3JlZ2lzdHJhdGlvbicsICRyZWdPayk7CiRzbWFydHktPmFzc2lnbignYXV0aGh1Yl9hY3RpdmUnLCAoJGF1dGhNb2QgPT09ICdNQVNfQXV0aEh1YicpID8gJ3llcycgOiAnbm8nKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnJywgZmFsc2UsICcnLCBhcnJheSgnYWN0aXZldGFiJyA9PiAnbWFtcycpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ21hbXNfaml0X2NyZWF0ZScsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ21hbXNfaml0X2NyZWF0ZScsICcxJywgKGludCkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9tYW1zX2ppdF9jcmVhdGUnLCAnMScpKSk7CiRzbWFydHktPmFzc2lnbignYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2Jsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXAnLCAnMScsIChpbnQpICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfYmxvY2tfZHVwbGljYXRlX2VtYWlsX3NpZ251cCcsICcwJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdtYW1zX2RlZmF1bHRfZ3JvdXBzJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdtYW1zX2RlZmF1bHRfZ3JvdXBzJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9tYW1zX2RlZmF1bHRfZ3JvdXBzJywgJycpLCA0MCwgODApKTsKJHNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0X2Nvbm5lY3RpbmdfcHJvcGVydHknLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2RlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgJ2F1dGhodWJfc3ViJyksIDMwLCA2NCkpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfbWFtc19wb2xpY3knLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdtYW1zX3BvbGljeS50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.oauth_clients.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoY2xhc3NfZXhpc3RzKCdjZ2VfdXRpbHMnKSAmJiAhZW1wdHkoJF9QT1NUKSAmJiAhY2dlX3V0aWxzOjp2YWxpZF9mb3JtX2NzcmYoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CiRkYiA9ICR0aGlzLT5HZXREYigpOwppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X29hdXRoX2NsaWVudCddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgICRjbGllbnRJZCA9IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ29hdXRoX2NsaWVudF9pZCddID8/ICcnKSk7CiAgICBpZiAoJGNsaWVudElkID09PSAnJykgewogICAgICAgICRjbGllbnRJZCA9ICdhaF8nIC4gYmluMmhleChyYW5kb21fYnl0ZXMoOCkpOwogICAgfQogICAgJHNlY3JldCA9IChzdHJpbmcpICgkcGFyYW1zWydvYXV0aF9jbGllbnRfc2VjcmV0J10gPz8gJycpOwogICAgJGhhc2ggPSAkc2VjcmV0ICE9PSAnJyA/IHBhc3N3b3JkX2hhc2goJHNlY3JldCwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJzsKICAgICR1cmlzID0gYXJyYXlfZmlsdGVyKGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoIlxuIiwgKHN0cmluZykgKCRwYXJhbXNbJ3JlZGlyZWN0X3VyaXMnXSA/PyAnJykpKSk7CiAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgJ0lOU0VSVCBJTlRPICcgLiBNYXNfQWhfVGFibGVzOjpvYXV0aENsaWVudHMoKSAuICcgKGNsaWVudF9pZCwgc2VjcmV0X2hhc2gsIG5hbWUsIHJlZGlyZWN0X3VyaXMsIGdyYW50cywgc2NvcGVzLCBlbmFibGVkLCBjcmVhdGVkKSBWQUxVRVMgKD8sPyw/LD8sPyw/LDEsPyknLAogICAgICAgIGFycmF5KAogICAgICAgICAgICAkY2xpZW50SWQsCiAgICAgICAgICAgICRoYXNoLAogICAgICAgICAgICB0cmltKChzdHJpbmcpICgkcGFyYW1zWydvYXV0aF9jbGllbnRfbmFtZSddID8/ICdDbGllbnQnKSksCiAgICAgICAgICAgIGpzb25fZW5jb2RlKCR1cmlzLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSksCiAgICAgICAgICAgICdhdXRob3JpemF0aW9uX2NvZGUgcmVmcmVzaF90b2tlbicsCiAgICAgICAgICAgIHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ29hdXRoX3Njb3BlcyddID8/ICdvcGVuaWQgcHJvZmlsZSBlbWFpbCcpKSwKICAgICAgICAgICAgdGltZSgpLAogICAgICAgICkKICAgICk7CiAgICAkYWRtaW5VaWQgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF91c2VyaWQnKSA/IChpbnQpIGdldF91c2VyaWQoZmFsc2UpIDogMDsKICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4ub2F1dGhfY2xpZW50X2NyZWF0ZWQnLCAnaW5mbycsIGFycmF5KAogICAgICAgICdjbGllbnRfaWQnID0+ICRjbGllbnRJZCwKICAgICAgICAnbmFtZScgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snb2F1dGhfY2xpZW50X25hbWUnXSA/PyAnQ2xpZW50JykpLAogICAgICAgICdyZWRpcmVjdF91cmlfY291bnQnID0+IGNvdW50KCR1cmlzKSwKICAgICksICRhZG1pblVpZCwgMCk7CiAgICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygncHJlZnN1cGRhdGVkJykpOwp9CiRjbGllbnRzID0gJGRiLT5HZXRBcnJheSgnU0VMRUNUIGlkLCBjbGllbnRfaWQsIG5hbWUsIGVuYWJsZWQsIGNyZWF0ZWQgRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6b2F1dGhDbGllbnRzKCkgLiAnIE9SREVSIEJZIGlkIERFU0MnKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25pZCcsICRhY3Rpb25pZCk7CiRzbWFydHktPmFzc2lnbignY2xpZW50cycsIGlzX2FycmF5KCRjbGllbnRzKSA/ICRjbGllbnRzIDogYXJyYXkoKSk7CiRzbWFydHktPmFzc2lnbignZGlzY292ZXJ5X3VybCcsIE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkdGhpcywgJ29pZGNfZGlzY292ZXJ5JywgYXJyYXkoKSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAncG9zdCcsICcnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmV0YWInID0+ICdvYXV0aF9jbGllbnRzJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignb2F1dGhfY2xpZW50X25hbWUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ29hdXRoX2NsaWVudF9uYW1lJywgJycsIDQwLCAxMjApKTsKJHNtYXJ0eS0+YXNzaWduKCdvYXV0aF9jbGllbnRfaWQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ29hdXRoX2NsaWVudF9pZCcsICcnLCA0MCwgMTIwKSk7CiRzbWFydHktPmFzc2lnbignb2F1dGhfY2xpZW50X3NlY3JldCcsICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ29hdXRoX2NsaWVudF9zZWNyZXQnLCAnJywgNDAsIDEyMCkpOwokc21hcnR5LT5hc3NpZ24oJ3JlZGlyZWN0X3VyaXMnLCAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJycsICdyZWRpcmVjdF91cmlzJywgJycsICcnLCAnJywgJycsIDYwLCA1KSk7CiRzbWFydHktPmFzc2lnbignb2F1dGhfc2NvcGVzJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdvYXV0aF9zY29wZXMnLCAnb3BlbmlkIHByb2ZpbGUgZW1haWwnLCA0MCwgMTIwKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X2NsaWVudCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfb2F1dGhfY2xpZW50JywgJHRoaXMtPkxhbmcoJ29hdXRoX2NsaWVudF9hZGQnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ29hdXRoX2NsaWVudHMudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/function.providers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoY2xhc3NfZXhpc3RzKCdjZ2VfdXRpbHMnKSAmJiAhZW1wdHkoJF9QT1NUKSAmJiAhY2dlX3V0aWxzOjp2YWxpZF9mb3JtX2NzcmYoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CiRkcml2ZXJzID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpsaXN0S2V5cygpOwokcm93cyA9IE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6bGlzdFByb3ZpZGVycygkdGhpcywgZmFsc2UpOwppZiAoaXNzZXQoJHBhcmFtc1snZGVsZXRlX3Byb3ZpZGVyJ10pICYmICR0aGlzLT5DaGVja1Blcm1pc3Npb24oTUFTX0F1dGhIdWI6OlBFUk1fTUFOQUdFKSkgewogICAgJHBpZCA9IChpbnQpICRwYXJhbXNbJ2RlbGV0ZV9wcm92aWRlciddOwogICAgJHRoaXMtPkdldERiKCktPkV4ZWN1dGUoJ0RFTEVURSBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgV0hFUkUgaWQgPSA/JywgYXJyYXkoJHBpZCkpOwogICAgJGFkbWluVWlkID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfdXNlcmlkJykgPyAoaW50KSBnZXRfdXNlcmlkKGZhbHNlKSA6IDA7CiAgICBNYXNfQWhfQXVkaXQ6OmxvZygkdGhpcywgJ2FkbWluLnByb3ZpZGVyX2RlbGV0ZWQnLCAnd2FybmluZycsIGFycmF5KCdwcm92aWRlcl9pZCcgPT4gJHBpZCksICRhZG1pblVpZCwgJHBpZCk7CiAgICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgnUHJvdmlkZXIgZGVsZXRlZC4nKTsKICAgICRyb3dzID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpsaXN0UHJvdmlkZXJzKCR0aGlzLCBmYWxzZSk7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdF9wcm92aWRlciddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgICRjZmcgPSBhcnJheSgKICAgICAgICAncHJvdmlkZXJfa2V5JyA9PiBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9cLV0vaScsICcnLCAoc3RyaW5nKSAoJHBhcmFtc1sncHJvdmlkZXJfa2V5J10gPz8gJ3AnIC4gdGltZSgpKSksCiAgICAgICAgJ2NsaWVudF9pZCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snY2xpZW50X2lkJ10gPz8gJycpKSwKICAgICAgICAnYXV0aG9yaXplX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snYXV0aG9yaXplX3VybCddID8/ICcnKSksCiAgICAgICAgJ3Rva2VuX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1sndG9rZW5fdXJsJ10gPz8gJycpKSwKICAgICAgICAndXNlcmluZm9fdXJsJyA9PiB0cmltKChzdHJpbmcpICgkcGFyYW1zWyd1c2VyaW5mb191cmwnXSA/PyAnJykpLAogICAgICAgICdzY29wZScgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snc2NvcGUnXSA/PyAnb3BlbmlkIHByb2ZpbGUgZW1haWwnKSksCiAgICAgICAgJ2lkcF9lbnRpdHlfaWQnID0+IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ2lkcF9lbnRpdHlfaWQnXSA/PyAnJykpLAogICAgICAgICdpZHBfc3NvX3VybCcgPT4gdHJpbSgoc3RyaW5nKSAoJHBhcmFtc1snaWRwX3Nzb191cmwnXSA/PyAnJykpLAogICAgICAgICdtYW1zX2Nvbm5lY3RpbmdfcHJvcGVydHknID0+IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ21hbXNfY29ubmVjdGluZ19wcm9wZXJ0eSddID8/ICcnKSksCiAgICApOwogICAgJHNlY3JldCA9IHRyaW0oKHN0cmluZykgKCRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSA/PyAnJykpOwogICAgaWYgKCRzZWNyZXQgIT09ICcnKSB7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9zZWNyZXRfJyAuICRjZmdbJ3Byb3ZpZGVyX2tleSddIC4gJ19jbGllbnRfc2VjcmV0JywgTWFzX0FoX0NyeXB0bzo6ZW5jcnlwdFByZWYoJHRoaXMsICRzZWNyZXQpKTsKICAgIH0KICAgICRub3cgPSB0aW1lKCk7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRlZGl0SWQgPSAoaW50KSAoJHBhcmFtc1sncHJvdmlkZXJfaWQnXSA/PyAwKTsKICAgIGlmICgkZWRpdElkID4gMCkgewogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ1VQREFURSAnIC4gTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCkgLiAnIFNFVCBkcml2ZXI9PywgbmFtZT0/LCBlbmFibGVkPT8sIGNvbmZpZ19qc29uPT8sIHNvcnRfb3JkZXI9PywgdXBkYXRlZD0/IFdIRVJFIGlkPT8nLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChzdHJpbmcpICgkcGFyYW1zWydkcml2ZXInXSA/PyAnb2F1dGgyJyksCiAgICAgICAgICAgICAgICB0cmltKChzdHJpbmcpICgkcGFyYW1zWyduYW1lJ10gPz8gJ1Byb3ZpZGVyJykpLAogICAgICAgICAgICAgICAgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZWQnXSkgPyAxIDogMCwKICAgICAgICAgICAgICAgIGpzb25fZW5jb2RlKCRjZmcsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcGFyYW1zWydzb3J0X29yZGVyJ10gPz8gMCksCiAgICAgICAgICAgICAgICAkbm93LAogICAgICAgICAgICAgICAgJGVkaXRJZCwKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ0lOU0VSVCBJTlRPICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgKGRyaXZlcixuYW1lLGVuYWJsZWQsY29uZmlnX2pzb24sc29ydF9vcmRlcixjcmVhdGVkLHVwZGF0ZWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyknLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChzdHJpbmcpICgkcGFyYW1zWydkcml2ZXInXSA/PyAnb2F1dGgyJyksCiAgICAgICAgICAgICAgICB0cmltKChzdHJpbmcpICgkcGFyYW1zWyduYW1lJ10gPz8gJ1Byb3ZpZGVyJykpLAogICAgICAgICAgICAgICAgIWVtcHR5KCRwYXJhbXNbJ2VuYWJsZWQnXSkgPyAxIDogMCwKICAgICAgICAgICAgICAgIGpzb25fZW5jb2RlKCRjZmcsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcGFyYW1zWydzb3J0X29yZGVyJ10gPz8gMCksCiAgICAgICAgICAgICAgICAkbm93LAogICAgICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CiAgICAkYWRtaW5VaWQgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF91c2VyaWQnKSA/IChpbnQpIGdldF91c2VyaWQoZmFsc2UpIDogMDsKICAgICRhdWRpdFByb3ZpZGVySWQgPSAkZWRpdElkID4gMCA/ICRlZGl0SWQgOiAoaW50KSAkZGItPkluc2VydF9JRCgpOwogICAgTWFzX0FoX0F1ZGl0Ojpsb2coJHRoaXMsICRlZGl0SWQgPiAwID8gJ2FkbWluLnByb3ZpZGVyX3VwZGF0ZWQnIDogJ2FkbWluLnByb3ZpZGVyX2NyZWF0ZWQnLCAnaW5mbycsIGFycmF5KAogICAgICAgICdwcm92aWRlcl9pZCcgPT4gJGF1ZGl0UHJvdmlkZXJJZCwKICAgICAgICAnZHJpdmVyJyA9PiAoc3RyaW5nKSAoJHBhcmFtc1snZHJpdmVyJ10gPz8gJ29hdXRoMicpLAogICAgICAgICduYW1lJyA9PiB0cmltKChzdHJpbmcpICgkcGFyYW1zWyduYW1lJ10gPz8gJ1Byb3ZpZGVyJykpLAogICAgICAgICdlbmFibGVkJyA9PiAhZW1wdHkoJHBhcmFtc1snZW5hYmxlZCddKSA/IDEgOiAwLAogICAgKSwgJGFkbWluVWlkLCAkYXVkaXRQcm92aWRlcklkKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdwcmVmc3VwZGF0ZWQnKSk7CiAgICAkcm93cyA9IE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6bGlzdFByb3ZpZGVycygkdGhpcywgZmFsc2UpOwp9CiRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwokc21hcnR5LT5hc3NpZ24oJ2lkJywgJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXR1cm5pZCcsICRyZXR1cm5pZCk7CiRzbWFydHktPmFzc2lnbignYWN0aW9uaWQnLCAkYWN0aW9uaWQpOwokc21hcnR5LT5hc3NpZ24oJ2RyaXZlcnMnLCAkZHJpdmVycyk7CmZvcmVhY2ggKCRyb3dzIGFzICRpZHggPT4gJHJvdykgewogICAgJHBpZCA9IChpbnQpICRyb3dbJ2lkJ107CiAgICAkcm93c1skaWR4XVsnZGVsZXRlX3VybCddID0gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICAgJGlkLAogICAgICAgICdkZWZhdWx0YWRtaW4nLAogICAgICAgICRyZXR1cm5pZCwKICAgICAgICAnJywKICAgICAgICBhcnJheSgnYWN0aXZldGFiJyA9PiAncHJvdmlkZXJzJywgJ2RlbGV0ZV9wcm92aWRlcicgPT4gJHBpZCksCiAgICAgICAgJycsCiAgICAgICAgdHJ1ZQogICAgKTsKICAgICRyb3dzWyRpZHhdWydvYXV0aF9jYWxsYmFja191cmwnXSA9IE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkdGhpcywgJ29hdXRoX2NhbGxiYWNrJywgYXJyYXkoCiAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAkcGlkLAogICAgKSk7CiAgICAkcm93c1skaWR4XVsnYWRtaW5fc3NvX3N0YXJ0X3VybCddID0gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLCAnb2F1dGhfc3RhcnQnLCBhcnJheSgKICAgICAgICAncHJvdmlkZXJfaWQnID0+ICRwaWQsCiAgICAgICAgJ3JldHVybl90eXBlJyA9PiAnYWRtaW4nLAogICAgKSk7CiAgICAkcm93c1skaWR4XVsnbWFtc19zc29fc3RhcnRfdXJsJ10gPSBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJHRoaXMsICdvYXV0aF9zdGFydCcsIGFycmF5KAogICAgICAgICdwcm92aWRlcl9pZCcgPT4gJHBpZCwKICAgICAgICAncmV0dXJuX3R5cGUnID0+ICdtYW1zJywKICAgICkpOwp9CiRzbWFydHktPmFzc2lnbigncHJvdmlkZXJzJywgJHJvd3MpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAncG9zdCcsICcnLCBmYWxzZSwgJycsIGFycmF5KCdhY3RpdmV0YWInID0+ICdwcm92aWRlcnMnLCAnc3VibWl0X3Byb3ZpZGVyJyA9PiAnMScpKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3Byb3ZpZGVycy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/function.sessions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoaXNzZXQoJHBhcmFtc1sncmV2b2tlX3NpZCddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgIE1hc19BaF9TZXNzaW9uOjpyZXZva2UoJHRoaXMsIChzdHJpbmcpICRwYXJhbXNbJ3Jldm9rZV9zaWQnXSk7CiAgICAkYWRtaW5VaWQgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF91c2VyaWQnKSA/IChpbnQpIGdldF91c2VyaWQoZmFsc2UpIDogMDsKICAgIE1hc19BaF9BdWRpdDo6bG9nKCR0aGlzLCAnYWRtaW4uc2Vzc2lvbl9yZXZva2VkJywgJ2luZm8nLCBhcnJheSgnc2Vzc2lvbl9pZCcgPT4gKHN0cmluZykgJHBhcmFtc1sncmV2b2tlX3NpZCddKSwgJGFkbWluVWlkLCAwKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCdTZXNzaW9uIHJldm9rZWQuJyk7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3Jldm9rZV90b2tlbiddKSAmJiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE1BU19BdXRoSHViOjpQRVJNX01BTkFHRSkpIHsKICAgIE1hc19BaF9Ub2tlblN0b3JlOjpyZXZva2UoJHRoaXMsIChpbnQpICRwYXJhbXNbJ3Jldm9rZV90b2tlbiddKTsKICAgICRhZG1pblVpZCA9IGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3VzZXJpZCcpID8gKGludCkgZ2V0X3VzZXJpZChmYWxzZSkgOiAwOwogICAgTWFzX0FoX0F1ZGl0Ojpsb2coJHRoaXMsICdhZG1pbi50b2tlbl9yZXZva2VkJywgJ2luZm8nLCBhcnJheSgndG9rZW5faWQnID0+IChpbnQpICRwYXJhbXNbJ3Jldm9rZV90b2tlbiddKSwgJGFkbWluVWlkLCAwKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCdUb2tlbiByZXZva2VkLicpOwp9CiRzZXNzaW9ucyA9IE1hc19BaF9TZXNzaW9uOjpsaXN0QWN0aXZlKCR0aGlzLCAxMDApOwokdG9rZW5zID0gTWFzX0FoX1Rva2VuU3RvcmU6Omxpc3RGb3JVc2VyKCR0aGlzLCAwLCAwLCA1MCk7CmlmIChpc19hcnJheSgkc2Vzc2lvbnMpKSB7CiAgICBmb3JlYWNoICgkc2Vzc2lvbnMgYXMgJGlkeCA9PiAkcm93KSB7CiAgICAgICAgJHNlc3Npb25zWyRpZHhdWydyZXZva2VfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAgICAgJGlkLAogICAgICAgICAgICAnZGVmYXVsdGFkbWluJywKICAgICAgICAgICAgJHJldHVybmlkLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgYXJyYXkoJ2FjdGl2ZXRhYicgPT4gJ3Nlc3Npb25zJywgJ3Jldm9rZV9zaWQnID0+IChzdHJpbmcpICRyb3dbJ3Nlc3Npb25faWQnXSksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICB0cnVlCiAgICAgICAgKTsKICAgIH0KfQppZiAoaXNfYXJyYXkoJHRva2VucykpIHsKICAgIGZvcmVhY2ggKCR0b2tlbnMgYXMgJGlkeCA9PiAkcm93KSB7CiAgICAgICAgJHRva2Vuc1skaWR4XVsncmV2b2tlX3VybCddID0gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICAgICAgICRpZCwKICAgICAgICAgICAgJ2RlZmF1bHRhZG1pbicsCiAgICAgICAgICAgICRyZXR1cm5pZCwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIGFycmF5KCdhY3RpdmV0YWInID0+ICdzZXNzaW9ucycsICdyZXZva2VfdG9rZW4nID0+IChpbnQpICRyb3dbJ2lkJ10pLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgdHJ1ZQogICAgICAgICk7CiAgICB9Cn0KJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKJHNtYXJ0eS0+YXNzaWduKCdzZXNzaW9ucycsICRzZXNzaW9ucyk7CiRzbWFydHktPmFzc2lnbigndG9rZW5zJywgJHRva2Vucyk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc2Vzc2lvbnMudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/function.settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfY29tbW9uX2xvYWRlci5waHAnOwptYXNfcmVxdWlyZV9tYXNfYWRtaW5fdWkoKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiRzbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsKTWFzX0FkbWluX1VpOjphc3NpZ25CcmFuZGluZygkdGhpcywgJHNtYXJ0eSk7CiRzbWFydHktPmFzc2lnbignc3RhcnRfZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc2F2ZV9zZXR0aW5ncycsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2VuYWJsZV9hZG1pbl9zc28nLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdlbmFibGVfYWRtaW5fc3NvJywgJzEnLCAoaW50KSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9hZG1pbl9zc28nLCAnMScpKSk7CiRtb2RlID0gKHN0cmluZykgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zc29fbW9kZScsICdidXR0b25zJyk7CiRzbWFydHktPmFzc2lnbignYWRtaW5fc3NvX21vZGUnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigKICAgICRpZCwKICAgICdhZG1pbl9zc29fbW9kZScsCiAgICBhcnJheSgKICAgICAgICAkdGhpcy0+TGFuZygnYWRtaW5fc3NvX21vZGVfYnV0dG9ucycpID0+ICdidXR0b25zJywKICAgICAgICAkdGhpcy0+TGFuZygnYWRtaW5fc3NvX21vZGVfcmVkaXJlY3QnKSA9PiAncmVkaXJlY3QnLAogICAgKSwKICAgIC0xLAogICAgJG1vZGUKKSk7CiRwcm92aWRlck9wdHMgPSBhcnJheSgkdGhpcy0+TGFuZygnYWRtaW5fc3NvX2RlZmF1bHRfcHJvdmlkZXJfbm9uZScpID0+ICcwJyk7CmZvcmVhY2ggKE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6bGlzdFByb3ZpZGVycygkdGhpcywgZmFsc2UpIGFzICRyb3cpIHsKICAgICRkcml2ZXIgPSBzdHJ0b2xvd2VyKChzdHJpbmcpICgkcm93Wydkcml2ZXInXSA/PyAnJykpOwogICAgaWYgKCRkcml2ZXIgPT09ICd3ZWJhdXRobicpIHsKICAgICAgICBjb250aW51ZTsKICAgIH0KICAgICRsYWJlbCA9IChzdHJpbmcpICgkcm93WyduYW1lJ10gPz8gKCcjJyAuICRyb3dbJ2lkJ10pKTsKICAgIGlmICghKGludCkgKCRyb3dbJ2VuYWJsZWQnXSA/PyAwKSkgewogICAgICAgICRsYWJlbCAuPSAnICgnIC4gJHRoaXMtPkxhbmcoJ3Byb3ZpZGVyX2Rpc2FibGVkX3N1ZmZpeCcpIC4gJyknOwogICAgfQogICAgJHByb3ZpZGVyT3B0c1skbGFiZWxdID0gKHN0cmluZykgKGludCkgJHJvd1snaWQnXTsKfQokc21hcnR5LT5hc3NpZ24oJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oCiAgICAkaWQsCiAgICAnYWRtaW5fc3NvX2RlZmF1bHRfcHJvdmlkZXInLAogICAgJHByb3ZpZGVyT3B0cywKICAgIC0xLAogICAgKHN0cmluZykgKGludCkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlcicsICcwJykKKSk7CiRzbWFydHktPmFzc2lnbignZW5hYmxlX21hbXNfc3NvJywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnZW5hYmxlX21hbXNfc3NvJywgJzEnLCAoaW50KSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9tYW1zX3NzbycsICcxJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdhdXRvX2xpbmtfZW1haWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdhdXRvX2xpbmtfZW1haWwnLCAnMScsIChpbnQpICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfYXV0b19saW5rX2VtYWlsJywgJzEnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Nlc3Npb25fdHRsJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdzZXNzaW9uX3R0bCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfc2Vzc2lvbl90dGwnLCAnMzYwMCcpLCAxMCwgMTApKTsKJHNtYXJ0eS0+YXNzaWduKCdyYXRlX3Blcl9ob3VyJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdyYXRlX3Blcl9ob3VyJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21hc19haF9yYXRlX3Blcl9ob3VyJywgJzYwJyksIDYsIDYpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignZW5kX2Zvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdzZXR0aW5ncy50cGwnKTsK]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/banner.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icon-192.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icon-512.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPcAACQeliIbnysmii4qjTMviTUxjiokky0olSwmmS4omzEskzEsnjYxkjk0ljcymDk0mz04nyYeryslpCkiqjIrpDMsqzcxozs1oz45pjYwqzw2qj44rTQttTQsvTcwtDs1sz85sjw1vD84ukM9p0E7rUE7tEM8vEpGoEZAr1NPo1NOrUhCtkZAuElCvVROulpVul1Yu2JeqmFcuWpmrmVgtW9qvXh0vDgvwjoywToxyEU9w0Y+y0A30kM60UdAwkpCxUhAzlxWwVtVykpC1UxD21pT02BawmJb1WJb2GdhyWpjz3FswXRvzX97yGxm0HFq23dx3Xhy3YB8yIJ+0YB72I+Mx4SAypCNyZSRzZmWzIeC0pmW1J+c1paS35mW2p6a2aGd26Si062r1qSh2aik366r3JuX4J6a4aGd466q5rCt4r275LOw6cTD5sPB5MjG5MXD6cXC7MbE6svJ79DP59bV7dva79fW8dPR89jW89zb89rZ8uDf8ePi8eXk9+Pj9Ovq9+vq9u7t9u/u++7t+vb1+/b2+/b2/Pj4/Pj4/fr6/Pr6/fv7/fr6/vv6/vv7/vz7/vz8/fz8/v39/v7+/v7+///+//////7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAgACAAAAj/AAkQKMCAgQMHDx5cWKhBwwYQJUqYmKij4o4dQIZoJEJEIEGDCBUydAhRIkWLGDUO4eix4EGECy803BDRpImKOi5m3NhxoMuDImWSIKHhg02cOlWy9AkS5gUMGihUcOGCg4eTOVPybAnyAYQLFhJcWLLGkKE1TER0wOHjR9KtTBs8cIAAgQosdi7p3avHixAcODDuXNnzowIDD2y4QbS38V5Gcaj8yLFDaeGCKbL0eaw30JYtgfQy2usHzRHLHgXE4Ky3jpUSFSqw0HKH9aUnPTh2LFBAwIxLo4G7qWGBAs0SIDiIYBIn+OgoPHQP7P179BsVCyhoIHHcZIgQQubs/4UufaBv4JeuABgBdXtRmz86dEFPniXv86OzIMAgU0MGqh6IMJEPOKBBX3RLUYeefvxpgMIajDCyRgsD3nDGgeUpmN9+GFBQRmNpcGACgRc+h+BuGl6CBYcUjNEYGSL60IEZ6EFx4nTnMRYGABi014ZecAh4Ew5pYGhfAQOkIMheYSxgAQkSbKGXFxxQqAMOeehFCBI9EDYdAwOcQAd6a2BgQQVc6AVGgDcpQcgleBTRpZe8MdCAAgqIgR4fMgTg4iVjRJDEHn8ccgkbF6EWlwMHVPGYFDBwwYURUzjXBWWDJehSQgbQ8Ad6W0wwwRfo+eHEDT8AkellXUGwwAg/jnTWBhzoyfEDDm5p5SVTQClUnJSOfRGCDj9ktSpXvS6EgQRNGHrJIVOIiJSuCRL0UlAkUPBCH30EIeJNKB3LK1AxbVfBCitchdVbu350bbnbgQDRROAaq6i75I7UHb3TiouvU/09FBG/4d77E8AzlUSwvTwFBAA7]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9saWIvbWFzX2NvbW1vbl9sb2FkZXIucGhwJzsKbWFzX3JlcXVpcmVfbWFzX2xhbmdfZGVmYXVsdHMoKTsKCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdNQVMgQXV0aEh1Yic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NlbnRyYWxpemVkIGlkZW50aXR5IGFuZCBhY2Nlc3MgbWFuYWdlbWVudDogT0F1dGgyLCBPSURDLCBTQU1MLCBXZWJBdXRobiwgQ01TTVMgYWRtaW4gU1NPLCBhbmQgTUFNUyBpbnRlZ3JhdGlvbi4nOwokbGFuZ1snaGVscCddID0gJ09wZW4gdGhlIEhlbHAgdGFiIGluIHRoZSBtb2R1bGUgbWFuYWdlciBmb3IgZnVsbCBkb2N1bWVudGF0aW9uIChHZW5lcmFsLCBDb25maWd1cmF0aW9uLCBQcm90b2NvbHMsIFNlY3VyaXR5LCBUcm91Ymxlc2hvb3RpbmcpLic7CiRsYW5nWydoZWxwX2dlbmVyYWwnXSA9ICdHZW5lcmFsJzsKJGxhbmdbJ2hlbHBfY29uZmlndXJhdGlvbiddID0gJ0NvbmZpZ3VyYXRpb24nOwokbGFuZ1snaGVscF9wcm90b2NvbHMnXSA9ICdQcm90b2NvbHMnOwokbGFuZ1snaGVscF9zZWN1cml0eSddID0gJ1NlY3VyaXR5JzsKJGxhbmdbJ2hlbHBfdHJvdWJsZXNob290aW5nJ10gPSAnVHJvdWJsZXNob290aW5nJzsKJGxhbmdbJ2hlbHBfb3ZlcnZpZXdfaGVhZGluZyddID0gJ092ZXJ2aWV3JzsKJGxhbmdbJ2hlbHBfb3ZlcnZpZXdfYm9keSddID0gJ01BUyBBdXRoSHViIGNlbnRyYWxpemVzIHNpZ24taW4gZm9yIENNUyBNYWRlIFNpbXBsZSBhZG1pbiBhbmQgTUFNUyBmcm9udGVuZCB1c2Vycy4gSXQgc3VwcG9ydHMgT0F1dGgyLCBPcGVuSUQgQ29ubmVjdCwgU0FNTCBzZXJ2aWNlIHByb3ZpZGVyIGZsb3dzLCBXZWJBdXRobiBwYXNza2V5cywgYW5kIG9wdGlvbmFsIE9BdXRoIGF1dGhvcml6YXRpb24gc2VydmVyIGVuZHBvaW50cyBmb3IgeW91ciBvd24gY2xpZW50cy4nOwokbGFuZ1snaGVscF9xdWlja3N0YXJ0X2hlYWRpbmcnXSA9ICdRdWljayBzdGFydCc7CiRsYW5nWydoZWxwX3F1aWNrc3RhcnRfMSddID0gJ0FkZCBzZWNyZXRzIHRvIHNpdGUgY29uZmlnLnBocCB1bmRlciB0aGUgbWFzX2F1dGhodWIgYXJyYXkgKHNlZSBDb25maWd1cmF0aW9uIHRhYikuJzsKJGxhbmdbJ2hlbHBfcXVpY2tzdGFydF8yJ10gPSAnT3BlbiBFeHRlbnNpb25zLCB0aGVuIE1BUyBBdXRoSHViLCBhbmQgZ3JhbnQgTWFuYWdlIC8gVXNlIHBlcm1pc3Npb25zIHRvIHRoZSByaWdodCBhZG1pbiBncm91cHMuJzsKJGxhbmdbJ2hlbHBfcXVpY2tzdGFydF8zJ10gPSAnT24gdGhlIElkZW50aXR5IHByb3ZpZGVycyB0YWIsIGFkZCBhbmQgZW5hYmxlIGF0IGxlYXN0IG9uZSBwcm92aWRlciAoQXp1cmUgQUQsIEdvb2dsZSwgU0FNTCBJZFAsIGFuZCBzbyBvbikuJzsKJGxhbmdbJ2hlbHBfcXVpY2tzdGFydF80J10gPSAnSW4gTUFNUyBtb2R1bGUgcHJlZmVyZW5jZXMsIHNldCBBdXRoZW50aWNhdGlvbiBtb2R1bGUgdG8gTUFTX0F1dGhIdWIgd2hlbiB1c2luZyBmcm9udGVuZCBTU08uJzsKJGxhbmdbJ2hlbHBfcXVpY2tzdGFydF81J10gPSAnRW5hYmxlIENNU01TIGFkbWluIFNTTyBhbmQvb3IgTUFNUyBmcm9udGVuZCBTU08gb24gdGhlIFNldHRpbmdzIHRhYiwgdGhlbiB0ZXN0IHNpZ24taW4gYW5kIHJldmlldyB0aGUgQXVkaXQgbG9nLic7CiRsYW5nWydoZWxwX3JlcXVpcmVtZW50c19oZWFkaW5nJ10gPSAnU3lzdGVtIHJlcXVpcmVtZW50cyc7CiRsYW5nWydoZWxwX3JlcXVpcmVtZW50c19jbXMnXSA9ICdDTVMgTWFkZSBTaW1wbGUnOwokbGFuZ1snaGVscF9yZXF1aXJlbWVudHNfcGhwJ10gPSAnUEhQJzsKJGxhbmdbJ2hlbHBfcmVxdWlyZW1lbnRzX21hbXMnXSA9ICdNQU1TIDEuMCsgYW5kIENNU01TRXh0IDEuMCsgcmVjb21tZW5kZWQgZm9yIE1BTVMgZnJvbnRlbmQgU1NPIChub3QgcmVxdWlyZWQgdG8gaW5zdGFsbCBBdXRoSHViKSc7CiRsYW5nWydhYm91dF9kZXBlbmRlbmNpZXNfcmVjb21tZW5kZWQnXSA9ICdSZWNvbW1lbmRlZCBpbnRlZ3JhdGlvbnMnOwokbGFuZ1snYWJvdXRfZGVwX2luc3RhbGxlZCddID0gJ2luc3RhbGxlZCc7CiRsYW5nWydhYm91dF9kZXBfbWlzc2luZyddID0gJ25vdCBpbnN0YWxsZWQnOwokbGFuZ1snaGVscF9yZXF1aXJlbWVudHNfaHR0cHMnXSA9ICdIVFRQUyBvbiB0aGUgcHVibGljIHNpdGUgZm9yIE9BdXRoLCBTQU1MLCBhbmQgV2ViQXV0aG4gY2FsbGJhY2tzJzsKJGxhbmdbJ2hlbHBfY3JlZGl0c19oZWFkaW5nJ10gPSAnQ3JlZGl0cyc7CiRsYW5nWydoZWxwX2NyZWRpdHNfYm9keSddID0gJ0RldmVsb3BlZCBieSc7CiRsYW5nWydoZWxwX2NvbmZpZ19zZWNyZXRzX2hlYWRpbmcnXSA9ICdTZWNyZXRzIGluIGNvbmZpZy5waHAnOwokbGFuZ1snaGVscF9jb25maWdfc2VjcmV0c19ib2R5J10gPSAnTmV2ZXIgc3RvcmUgY2xpZW50IHNlY3JldHMgb3Igc2lnbmluZyBrZXlzIGluIHRoZSBkYXRhYmFzZS4gVXNlIHRoZSBzaXRlIHJvb3QgY29uZmlnLnBocCBhcnJheSBtYXNfYXV0aGh1Yi4gU2VlIHRvLWRvL2NvbmZpZy5tYXNfYXV0aGh1Yi5leGFtcGxlLnBocCBpbiB0aGUgbW9kdWxlIGZvbGRlciBmb3IgYSBzYW1wbGUgc2hhcGUuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX2VuY3J5cHRpb25fa2V5J10gPSAnMzItYnl0ZSByYW5kb20gdmFsdWUgZm9yIGVuY3J5cHRpbmcgc3RvcmVkIHRva2Vucyc7CiRsYW5nWydoZWxwX2NvbmZpZ19zaWduaW5nX2tleSddID0gJ1NlY3JldCBmb3IgSldUIC8gaHViIHNlc3Npb24gc2lnbmluZyc7CiRsYW5nWydoZWxwX2NvbmZpZ19wcm92aWRlcnMnXSA9ICdQZXItcHJvdmlkZXIgb3ZlcnJpZGVzIChmb3IgZXhhbXBsZSBjbGllbnRfc2VjcmV0IGZvciBBenVyZSBBRCknOwokbGFuZ1snaGVscF9jb25maWdfc2V0dGluZ3NfaGVhZGluZyddID0gJ1NldHRpbmdzIHRhYic7CiRsYW5nWydoZWxwX2NvbmZpZ19hZG1pbl9zc28nXSA9ICdBbGxvd3MgZXh0ZXJuYWwgaWRlbnRpdHkgcHJvdmlkZXJzIHRvIHNpZ24gdXNlcnMgaW50byB0aGUgQ01TTVMgYWRtaW4gd2hlbiBsaW5rZWQgYWNjb3VudHMgZXhpc3QuIFdoZW4gZW5hYmxlZCwgcHJvdmlkZXIgYnV0dG9ucyBhcHBlYXIgb24gL2FkbWluL2xvZ2luLnBocCAobm8gdGhlbWUgZWRpdCByZXF1aXJlZCkuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX2FkbWluX3Nzb19tb2RlJ10gPSAnQnV0dG9ucyBrZWVwcyB1c2VybmFtZS9wYXNzd29yZCBwbHVzIFNTTyBsaW5rcy4gQXV0by1yZWRpcmVjdCBzZW5kcyB0aGUgYnJvd3NlciBzdHJhaWdodCB0byB0aGUgSWRQIHdoZW4gYSBkZWZhdWx0IChvciBzaW5nbGUpIHByb3ZpZGVyIGlzIHNldC4nOwokbGFuZ1snaGVscF9jb25maWdfbWFtc19zc28nXSA9ICdFbmFibGVzIE1BTVMgZnJvbnRlbmQgbG9naW4gdmlhIGNvbmZpZ3VyZWQgcHJvdmlkZXJzLic7CiRsYW5nWydoZWxwX2NvbmZpZ19hdXRvX2xpbmsnXSA9ICdMaW5rcyBuZXcgbG9naW5zIHRvIGV4aXN0aW5nIENNUyBvciBNQU1TIHVzZXJzIHdoZW4gZW1haWwgaXMgdmVyaWZpZWQgYnkgdGhlIElkUC4nOwokbGFuZ1snaGVscF9jb25maWdfc2Vzc2lvbl90dGwnXSA9ICdMaWZldGltZSBvZiBodWIgc2Vzc2lvbiByZWNvcmRzIGJlZm9yZSByZS1hdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4nOwokbGFuZ1snaGVscF9jb25maWdfcmF0ZSddID0gJ0Jhc2ljIHBlci1JUCB0aHJvdHRsaW5nIG9uIHNlbnNpdGl2ZSBmcm9udGVuZCBhY3Rpb25zLic7CiRsYW5nWydoZWxwX2NvbmZpZ190YWJzX2hlYWRpbmcnXSA9ICdPdGhlciBhZG1pbiB0YWJzJzsKJGxhbmdbJ2hlbHBfY29uZmlnX3RhYl9wcm92aWRlcnMnXSA9ICdBZGQgT0F1dGgvT0lEQy9TQU1ML1dlYkF1dGhuIGRyaXZlcnMsIGNsaWVudCBJRHMsIHJlZGlyZWN0IFVSSXMsIGFuZCBtZXRhZGF0YS4nOwokbGFuZ1snaGVscF9jb25maWdfdGFiX21hbXMnXSA9ICdKSVQgdXNlciBjcmVhdGlvbiwgZHVwbGljYXRlLWVtYWlsIHBvbGljeSwgYW5kIE1BTVMgaW50ZWdyYXRpb24gc3RhdHVzLic7CiRsYW5nWydoZWxwX2NvbmZpZ190YWJfb2F1dGgnXSA9ICdSZWdpc3RlciBjb25maWRlbnRpYWwgY2xpZW50cyB0aGF0IG1heSB1c2UgdGhpcyBodWIgYXMgYW4gT0F1dGgyIGF1dGhvcml6YXRpb24gc2VydmVyLic7CiRsYW5nWydoZWxwX2NvbmZpZ190YWJfc2Vzc2lvbnMnXSA9ICdWaWV3IGFuZCByZXZva2UgYWN0aXZlIGh1YiBzZXNzaW9ucyBhbmQgcmVmcmVzaCB0b2tlbnMuJzsKJGxhbmdbJ2hlbHBfY29uZmlnX3RhYl9hdWRpdCddID0gJ1NlY3VyaXR5IGFuZCBzaWduLWluIGV2ZW50cyB3aXRoIENTViBleHBvcnQuJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX29hdXRoX2JvZHknXSA9ICdTdGFuZGFyZCBhdXRob3JpemF0aW9uLWNvZGUgZmxvdyBmb3Igc29jaWFsIGFuZCBlbnRlcnByaXNlIElkUHMuJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX29hdXRoX3NlcnZlciddID0gJ3doZW4gZW5hYmxlZCBmb3IgcmVnaXN0ZXJlZCBjbGllbnRzJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX29pZGNfZGlzY292ZXJ5J10gPSAnd2VsbC1rbm93biBPcGVuSUQgY29uZmlndXJhdGlvbiBmb3IgcmVseWluZyBwYXJ0aWVzJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX3NhbWxfYm9keSddID0gJ1NlcnZpY2UtcHJvdmlkZXIgZW5kcG9pbnRzIGZvciBTQU1MIDIuMCBJZFBzLic7CiRsYW5nWydoZWxwX3Byb3RvY29sc19zYW1sX2FjcyddID0gJ0Fzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlIChQT1NUIGJpbmRpbmcpJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX3NhbWxfbWV0YWRhdGEnXSA9ICdTUCBtZXRhZGF0YSBYTUwgZm9yIElkUCBjb25maWd1cmF0aW9uJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX3dlYmF1dGhuX2JvZHknXSA9ICdQYXNzd29yZGxlc3MgcGFzc2tleXMgZm9yIGxpbmtlZCB1c2VycyAocmVxdWlyZXMgSFRUUFMgYW5kIGNvbXBhdGlibGUgYnJvd3NlcnMpLic7CiRsYW5nWydoZWxwX3Byb3RvY29sc193ZWJhdXRobl9hY3Rpb24nXSA9ICdyZWdpc3RyYXRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGNlcmVtb25pZXMnOwokbGFuZ1snaGVscF9wcm90b2NvbHNfbWFtc19ib2R5J10gPSAnTUFNUyBjYWxscyB0aGlzIG1vZHVsZSB3aGVuIGF1dGhfbW9kdWxlIGlzIHNldCB0byBNQVNfQXV0aEh1Yi4nOwokbGFuZ1snaGVscF9wcm90b2NvbHNfbWFtc19sb2dpbiddID0gJ2Zyb250ZW5kIFNTTyBlbnRyeSBmcm9tIE1BTVMgdGVtcGxhdGVzJzsKJGxhbmdbJ2hlbHBfcHJvdG9jb2xzX21hbXNfcmVnJ10gPSAnTUFNU1JlZ2lzdHJhdGlvbiBpcyBpbnN0YWxsZWQ6IGR1cGxpY2F0ZS1lbWFpbCBhbmQgSklUIHBvbGljaWVzIG9uIHRoZSBNQU1TIHRhYiBhcHBseS4nOwokbGFuZ1snaGVscF9zZWN1cml0eV9zZWNyZXRzX2hlYWRpbmcnXSA9ICdQcm90ZWN0IHNlY3JldHMnOwokbGFuZ1snaGVscF9zZWN1cml0eV9zZWNyZXRzX2JvZHknXSA9ICdEZW55IEhUVFAgYWNjZXNzIHRvIGNvbmZpZy5waHAgdmlhIHNlcnZlciBydWxlcy4gUm90YXRlIGVuY3J5cHRpb25fa2V5IGFuZCBzaWduaW5nX2tleSBpZiBjb21wcm9taXNlIGlzIHN1c3BlY3RlZCAodXNlcnMgbXVzdCBzaWduIGluIGFnYWluKS4nOwokbGFuZ1snaGVscF9zZWN1cml0eV9hdWRpdF9oZWFkaW5nJ10gPSAnQXVkaXQgbG9nJzsKJGxhbmdbJ2hlbHBfc2VjdXJpdHlfYXVkaXRfYm9keSddID0gJ1JldmlldyBmYWlsZWQgbG9naW5zLCBwcm92aWRlciBlcnJvcnMsIGFuZCBhY2NvdW50IGxpbmtpbmcgZXZlbnRzIHJlZ3VsYXJseS4gRXhwb3J0IENTViBmb3IgbG9uZy10ZXJtIHJldGVudGlvbi4nOwokbGFuZ1snaGVscF9zZWN1cml0eV9zZXNzaW9uc19oZWFkaW5nJ10gPSAnU2Vzc2lvbnMnOwokbGFuZ1snaGVscF9zZWN1cml0eV9zZXNzaW9uc19ib2R5J10gPSAnUmV2b2tlIHNlc3Npb25zIHdoZW4gc3RhZmYgbGVhdmUgb3IgZGV2aWNlcyBhcmUgbG9zdC4gU2hvcnRlciBUVEwgcmVkdWNlcyBleHBvc3VyZS4nOwokbGFuZ1snaGVscF9zZWN1cml0eV9wZXJtaXNzaW9uc19oZWFkaW5nJ10gPSAnUGVybWlzc2lvbnMnOwokbGFuZ1snaGVscF9zZWN1cml0eV9wZXJtX21hbmFnZSddID0gJ01hbmFnZSBNQVNfQXV0aEh1YjogZnVsbCBhZG1pbiB0YWJzLCBwcm92aWRlcnMsIGNsaWVudHMsIGF1ZGl0IGV4cG9ydC4nOwokbGFuZ1snaGVscF9zZWN1cml0eV9wZXJtX3VzZSddID0gJ1VzZSBNQVNfQXV0aEh1YjogcmVxdWlyZWQgZm9yIHNvbWUgYXV0b21hdGVkIG9wZXJhdGlvbnMgYW5kIEFQSS1zdHlsZSB1c2UuJzsKJGxhbmdbJ2hlbHBfdHNfc3NvX2hlYWRpbmcnXSA9ICdTU08gZG9lcyBub3Qgd29yayc7CiRsYW5nWydoZWxwX3RzX3Nzb18xJ10gPSAnQ29uZmlybSB0aGUgcHJvdmlkZXIgaXMgZW5hYmxlZCBhbmQgcmVkaXJlY3QgVVJJcyBtYXRjaCBleGFjdGx5IChzY2hlbWUsIGhvc3QsIHBhdGgpLic7CiRsYW5nWydoZWxwX3RzX3Nzb18yJ10gPSAnQ2hlY2sgdGhhdCB0aGUgQ01TIG9yIE1BTVMgdXNlciBpcyBsaW5rZWQgKG9yIGF1dG8tbGluayBieSBlbWFpbCBpcyBlbmFibGVkIGFuZCBlbWFpbCBpcyB2ZXJpZmllZCkuJzsKJGxhbmdbJ2hlbHBfdHNfc3NvXzMnXSA9ICdJbnNwZWN0IHRoZSBBdWRpdCBsb2cgYW5kIFBIUCBlcnJvciBsb2cgZm9yIHByb3ZpZGVyLXNwZWNpZmljIGVycm9ycy4nOwokbGFuZ1snaGVscF90c19zc29fNCddID0gJ0ZvciBDTVMgYWRtaW4gU1NPLCBlbmFibGUgaXQgb24gU2V0dGluZ3MsIHRoZW4gb3BlbiAvYWRtaW4vbG9naW4ucGhwOiBwcm92aWRlciBidXR0b25zIHNob3VsZCBhcHBlYXIgdW5kZXIgdGhlIHBhc3N3b3JkIGZvcm0gKG9yIGF1dG8tcmVkaXJlY3QgaWYgdGhhdCBtb2RlIGlzIHNlbGVjdGVkKS4gVXNlIHRoZSBBZG1pbiBTU08gc3RhcnQgVVJMIG9uIHRoZSBJZGVudGl0eSBwcm92aWRlcnMgdGFiIHRvIHRlc3QuJzsKJGxhbmdbJ2hlbHBfdHNfb2F1dGhfaGVhZGluZyddID0gJ09BdXRoIC8gT0lEQyBlcnJvcnMnOwokbGFuZ1snaGVscF90c19vYXV0aF8xJ10gPSAnVmVyaWZ5IGNsaWVudF9pZCBhbmQgY2xpZW50X3NlY3JldCBpbiBjb25maWcucGhwIG1hdGNoIHRoZSBJZFAgcG9ydGFsLic7CiRsYW5nWydoZWxwX3RzX29hdXRoXzInXSA9ICdFbnN1cmUgc2VydmVyIHRpbWUgaXMgY29ycmVjdCAoc2tldyBicmVha3MgdG9rZW4gdmFsaWRhdGlvbikuJzsKJGxhbmdbJ2hlbHBfdHNfb2F1dGhfMyddID0gJ0ZvciBhdXRob3JpemF0aW9uLXNlcnZlciBtb2RlLCBjb25maXJtIHRoZSBPQXV0aCBjbGllbnQgcmVkaXJlY3QgVVJJcyBhcmUgcmVnaXN0ZXJlZCBpbiBBdXRoSHViLic7CiRsYW5nWydoZWxwX3RzX21hbXNfaGVhZGluZyddID0gJ01BTVMgaW50ZWdyYXRpb24nOwokbGFuZ1snaGVscF90c19tYW1zXzEnXSA9ICdNQU1TIHByZWZlcmVuY2VzIG11c3QgbGlzdCBNQVNfQXV0aEh1YiBhcyB0aGUgYXV0aGVudGljYXRpb24gbW9kdWxlLic7CiRsYW5nWydoZWxwX3RzX21hbXNfMiddID0gJ0NsZWFyIE1BTVMgYW5kIENNUyBjYWNoZXMgYWZ0ZXIgY2hhbmdpbmcgcHJvdmlkZXJzIG9yIGh1YiBzZXR0aW5ncy4nOwokbGFuZ1snaGVscF90c19zdXBwb3J0X2hlYWRpbmcnXSA9ICdTdXBwb3J0JzsKJGxhbmdbJ2hlbHBfdHNfc3VwcG9ydF9ib2R5J10gPSAnRm9yIHNpdGUtc3BlY2lmaWMgaXNzdWVzIGNvbnRhY3QnOwokbGFuZ1snYWJvdXRfdGFiX21vZHVsZSddID0gJ01vZHVsZSc7CiRsYW5nWydhYm91dF90YWJfY29tcGF0J10gPSAnQ29tcGF0aWJpbGl0eSc7CiRsYW5nWydhYm91dF90YWJfc3VtbWFyeSddID0gJ1N1bW1hcnknOwokbGFuZ1snYWJvdXRfdGFiX2NoYW5nZWxvZyddID0gJ0NoYW5nZSBsb2cnOwokbGFuZ1snYWJvdXRfbGFiZWxfbmFtZSddID0gJ05hbWUnOwokbGFuZ1snYWJvdXRfbGFiZWxfdmVyc2lvbiddID0gJ1ZlcnNpb24nOwokbGFuZ1snYWJvdXRfbGFiZWxfYXV0aG9yJ10gPSAnQXV0aG9yJzsKJGxhbmdbJ2Fib3V0X2xhYmVsX2VtYWlsJ10gPSAnRW1haWwnOwokbGFuZ1snYWJvdXRfbGFiZWxfdXJsJ10gPSAnV2Vic2l0ZSc7CiRsYW5nWydhYm91dF9sYWJlbF9saWNlbnNlJ10gPSAnTGljZW5zZSc7CiRsYW5nWydhYm91dF9saWNlbnNlX3ZhbHVlJ10gPSAnTUlUJzsKJGxhbmdbJ2Fib3V0X21pbl9jbXMnXSA9ICdNaW5pbXVtIENNUyBNYWRlIFNpbXBsZSc7CiRsYW5nWydhYm91dF9taW5fcGhwJ10gPSAnTWluaW11bSBQSFAnOwokbGFuZ1snYWJvdXRfZGVwZW5kZW5jaWVzX2hlYWRpbmcnXSA9ICdNb2R1bGUgZGVwZW5kZW5jaWVzJzsKJGxhbmdbJ2Fib3V0X21hbXNfcmVnaXN0cmF0aW9uX25vdGUnXSA9ICdNQU1TUmVnaXN0cmF0aW9uIGlzIGluc3RhbGxlZCBhbmQgY2FuIGludGVyb3BlcmF0ZSB3aXRoIEF1dGhIdWIgZW1haWwtbGluayBwb2xpY2llcy4nOwokbGFuZ1snYWJvdXRfZmVhdHVyZXNfaGVhZGluZyddID0gJ0tleSBmZWF0dXJlcyc7CiRsYW5nWydhYm91dF9mZWF0dXJlX29hdXRoJ10gPSAnT0F1dGgyIGFuZCBPcGVuSUQgQ29ubmVjdCBpZGVudGl0eSBwcm92aWRlcnMnOwokbGFuZ1snYWJvdXRfZmVhdHVyZV9zYW1sJ10gPSAnU0FNTCAyLjAgc2VydmljZSBwcm92aWRlcic7CiRsYW5nWydhYm91dF9mZWF0dXJlX3dlYmF1dGhuJ10gPSAnV2ViQXV0aG4gcGFzc2tleXMnOwokbGFuZ1snYWJvdXRfZmVhdHVyZV9tYW1zJ10gPSAnTUFNUyBmcm9udGVuZCBTU08gYW5kIENNU01TIGFkbWluIFNTTyc7CiRsYW5nWydhYm91dF9mZWF0dXJlX2F1ZGl0J10gPSAnQXVkaXQgbG9nLCBzZXNzaW9ucywgYW5kIE9BdXRoIGNsaWVudCByZWdpc3RyeSc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICdTZWUgQ0hBTkdFTE9HLm1kIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5Lic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ01BUyBBdXRoSHViIGluc3RhbGxlZC4gR3JhbnQgcGVybWlzc2lvbnMgYW5kIGFkZCBzZWNyZXRzIHRvIGNvbmZpZy5waHAuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNQVMgQXV0aEh1YiByZW1vdmVkLic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnVW5pbnN0YWxsIE1BUyBBdXRoSHViPyBBbGwgcHJvdmlkZXIgbGlua3MsIHNlc3Npb25zLCBhbmQgYXVkaXQgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01BUyBBdXRoSHViIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01BUyBBdXRoSHViIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTUFTIEF1dGhIdWIgdW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBkZW5pZWQuJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1NhdmUnOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ3NldHRpbmdzJ10gPSAnU2V0dGluZ3MnOwokbGFuZ1sndGFiX3Byb3ZpZGVycyddID0gJ0lkZW50aXR5IHByb3ZpZGVycyc7CiRsYW5nWyd0YWJfbWFtcyddID0gJ01BTVMgY29tcGF0aWJpbGl0eSc7CiRsYW5nWyd0YWJfb2F1dGhfY2xpZW50cyddID0gJ09BdXRoIGNsaWVudHMnOwokbGFuZ1sndGFiX3Nlc3Npb25zJ10gPSAnU2Vzc2lvbnMgYW5kIHRva2Vucyc7CiRsYW5nWyd0YWJfYXVkaXQnXSA9ICdBdWRpdCBsb2cnOwokbGFuZ1sndGFiX2FkbWluc2V0dGluZ3MnXSA9ICdBZG1pbiBzZXR0aW5ncyc7CiRsYW5nWydkb25hdGlvbnN0YWInXSA9ICdEb25hdGlvbnMnOwokbGFuZ1snZG9uYXRpb25zX3RhYiddID0gJ0RvbmF0aW9ucyc7CiRsYW5nWyd0YWJfZG9uYXRpb25zJ10gPSAnRG9uYXRpb25zJzsKJGxhbmdbJ2RvbmF0ZV9idG4nXSA9ICdEb25hdGUnOwokbGFuZ1snZG9uYXRpb25zdGV4dCddID0gJ0EgbG90IG9mIHRpbWUgYW5kIGVmZm9ydCBoYXMgYmVlbiBwdXQgaW50byBNQVMgQXV0aEh1Yi4gSWYgaXQgaGVscHMgeW91ciBzaXRlLCBjb25zaWRlciBhIHNtYWxsIGRvbmF0aW9uIHRvIHN1cHBvcnQgY29udGludWVkIGRldmVsb3BtZW50Lic7CiRsYW5nWydzcG9uc29ycyddID0gJ0N1cnJlbnQgc3BvbnNvcnMsIHRoYW5rIHlvdSBmb3IgeW91ciBzdXBwb3J0ISc7CiRsYW5nWydzaG93X2RvbmF0aW9uc190YWJfZW5hYmxlJ10gPSAnU2hvdyBEb25hdGlvbnMgdGFiJzsKJGxhbmdbJ2RvbmF0aW9uc19zcG9uc29yX2xvZ29fYWx0J10gPSAnTmV3cyBUYXJnZXRlZCBsb2dvJzsKJGxhbmdbJ2RvbmF0aW9uc19zcG9uc29yX2xpbmsnXSA9ICdWaXNpdCBOZXdzVGFyZ2V0ZWQnOwokbGFuZ1snc2hvd19kb25hdGlvbnNfdGFiJ10gPSAnU2hvdyBEb25hdGlvbnMgdGFiJzsKJGxhbmdbJ3Nob3dfZG9uYXRpb25zX3RhYl9oZWxwJ10gPSAnV2hlbiBvZmYsIHRoZSBEb25hdGlvbnMgdGFiIHN0YXlzIGhpZGRlbiB1bnRpbCBlbmFibGVkIGhlcmUuJzsKJGxhbmdbJ2RvbmF0aW9uc190YWJfaGlkZGVuJ10gPSAnRG9uYXRpb25zIHRhYiBoaWRkZW4uIEVuYWJsZSBpdCBpbiBBZG1pbiBzZXR0aW5ncy4nOwokbGFuZ1snYWRtaW5zZWN0aW9uJ10gPSAnQWRtaW4gbWVudSBzZWN0aW9uJzsKJGxhbmdbJ2FkbWluc2VjdGlvbmhlbHAnXSA9ICdXaGVyZSBNQVMgQXV0aEh1YiBhcHBlYXJzIGluIHRoZSBDTVNNUyBhZG1pbiBtZW51Lic7CiRsYW5nWydzaG93ZG9uYXRpb25zdGFiJ10gPSAnU2hvdyBkb25hdGlvbnMgdGFiJzsKJGxhbmdbJ2hpZGVkb25hdGlvbnNzdWJtaXQnXSA9ICdIaWRlIGRvbmF0aW9ucyB0YWInOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW5jZXMgc2F2ZWQuJzsKJGxhbmdbJ2VuYWJsZV9hZG1pbl9zc28nXSA9ICdFbmFibGUgQ01TTVMgYWRtaW4gU1NPJzsKJGxhbmdbJ2FkbWluX3Nzb19tb2RlJ10gPSAnQWRtaW4gU1NPIHByZXNlbnRhdGlvbic7CiRsYW5nWydhZG1pbl9zc29fbW9kZV9idXR0b25zJ10gPSAnQnV0dG9ucyBvbiBhZG1pbiBsb2dpbiBwYWdlJzsKJGxhbmdbJ2FkbWluX3Nzb19tb2RlX3JlZGlyZWN0J10gPSAnQXV0by1yZWRpcmVjdCB0byBJZFAnOwokbGFuZ1snYWRtaW5fc3NvX21vZGVfaGVscCddID0gJ0J1dHRvbnMga2VlcHMgbG9jYWwgcGFzc3dvcmQgbG9naW4gYXZhaWxhYmxlLiBBdXRvLXJlZGlyZWN0IHVzZXMgdGhlIGRlZmF1bHQgcHJvdmlkZXIgYmVsb3csIG9yIHRoZSBvbmx5IGVuYWJsZWQgZmVkZXJhdGVkIHByb3ZpZGVyLic7CiRsYW5nWydhZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlciddID0gJ0RlZmF1bHQgYWRtaW4gU1NPIHByb3ZpZGVyJzsKJGxhbmdbJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyX25vbmUnXSA9ICcobm9uZSAvIGZpcnN0IHNvbGUgcHJvdmlkZXIpJzsKJGxhbmdbJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyX2hlbHAnXSA9ICdVc2VkIGZvciBhdXRvLXJlZGlyZWN0LiBMZWF2ZSBub25lIGlmIHlvdSBoYXZlIGV4YWN0bHkgb25lIGVuYWJsZWQgT0F1dGgvT0lEQy9TQU1MIHByb3ZpZGVyLic7CiRsYW5nWydwcm92aWRlcl9kaXNhYmxlZF9zdWZmaXgnXSA9ICdkaXNhYmxlZCc7CiRsYW5nWydwcm92aWRlcl91cmxzX2hlbHAnXSA9ICdSZWdpc3RlciB0aGUgT0F1dGggY2FsbGJhY2sgVVJMIGF0IHlvdXIgSWRQLiBVc2UgdGhlIEFkbWluIFNTTyBzdGFydCBVUkwgdG8gYmVnaW4gQ01TIGFkbWluIGxvZ2luIGZvciB0aGF0IHByb3ZpZGVyLic7CiRsYW5nWydwcm92aWRlcl9jYWxsYmFja191cmwnXSA9ICdPQXV0aCBjYWxsYmFjayBVUkwnOwokbGFuZ1sncHJvdmlkZXJfYWRtaW5fc3NvX3VybCddID0gJ0FkbWluIFNTTyBzdGFydCBVUkwnOwokbGFuZ1snZW5hYmxlX21hbXNfc3NvJ10gPSAnRW5hYmxlIE1BTVMgZnJvbnRlbmQgU1NPJzsKJGxhbmdbJ2F1dG9fbGlua19lbWFpbCddID0gJ0F1dG8tbGluayBhY2NvdW50cyBieSB2ZXJpZmllZCBlbWFpbCc7CiRsYW5nWydzZXNzaW9uX3R0bCddID0gJ0h1YiBzZXNzaW9uIFRUTCAoc2Vjb25kcyknOwokbGFuZ1sncmF0ZV9wZXJfaG91ciddID0gJ1JhdGUgbGltaXQgKHJlcXVlc3RzIHBlciBob3VyIHBlciBJUCknOwokbGFuZ1snbWFtc19qaXRfY3JlYXRlJ10gPSAnSklULWNyZWF0ZSBNQU1TIHVzZXJzIG9uIGZpcnN0IFNTTyc7CiRsYW5nWydibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJ10gPSAnQmxvY2sgTUFNU1JlZ2lzdHJhdGlvbiB3aGVuIGVtYWlsIGlzIFNTTy1saW5rZWQnOwokbGFuZ1sncHJvdmlkZXJfbmFtZSddID0gJ05hbWUnOwokbGFuZ1sncHJvdmlkZXJfZHJpdmVyJ10gPSAnRHJpdmVyJzsKJGxhbmdbJ3Byb3ZpZGVyX2VuYWJsZWQnXSA9ICdFbmFibGVkJzsKJGxhbmdbJ3Byb3ZpZGVyX2FkZCddID0gJ0FkZCBwcm92aWRlcic7CiRsYW5nWydwcm92aWRlcl9lZGl0J10gPSAnRWRpdCBwcm92aWRlcic7CiRsYW5nWydwcm92aWRlcl9kZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snb2F1dGhfY2xpZW50X2FkZCddID0gJ0FkZCBPQXV0aCBjbGllbnQnOwokbGFuZ1snY2xpZW50X2lkJ10gPSAnQ2xpZW50IElEJzsKJGxhbmdbJ2NsaWVudF9zZWNyZXQnXSA9ICdDbGllbnQgc2VjcmV0IChzdG9yZWQgaGFzaGVkKSc7CiRsYW5nWydyZWRpcmVjdF91cmlzJ10gPSAnUmVkaXJlY3QgVVJJcyAob25lIHBlciBsaW5lKSc7CiRsYW5nWydyZXZva2Vfc2Vzc2lvbiddID0gJ1Jldm9rZSc7CiRsYW5nWydhdWRpdF9leHBvcnQnXSA9ICdFeHBvcnQgQ1NWJzsKJGxhbmdbJ2F1ZGl0X2VudHJpZXMnXSA9ICdlbnRyaWVzJzsKJGxhbmdbJ2F1ZGl0X2VtcHR5J10gPSAnTm8gYXVkaXQgbG9nIGVudHJpZXMgeWV0Lic7CiRsYW5nWydhdWRpdF9wYWdlJ10gPSAnUGFnZSc7CiRsYW5nWydhdWRpdF9vZiddID0gJ29mJzsKJGxhbmdbJ2F1ZGl0X2ZpcnN0J10gPSAnRmlyc3QnOwokbGFuZ1snYXVkaXRfcHJldiddID0gJ1ByZXYnOwokbGFuZ1snYXVkaXRfbmV4dCddID0gJ05leHQnOwokbGFuZ1snYXVkaXRfbGFzdCddID0gJ0xhc3QnOwokbGFuZ1snYXVkaXRfZ290byddID0gJ0dvIHRvIHBhZ2UnOwokbGFuZ1snYXVkaXRfY29sX3RpbWUnXSA9ICdUaW1lJzsKJGxhbmdbJ2F1ZGl0X2NvbF9ldmVudCddID0gJ0V2ZW50JzsKJGxhbmdbJ2F1ZGl0X2NvbF9zZXZlcml0eSddID0gJ1NldmVyaXR5JzsKJGxhbmdbJ2F1ZGl0X2NvbF91c2VyJ10gPSAnVXNlcic7CiRsYW5nWydhdWRpdF91c2VyX25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ2F1ZGl0X3VzZXJfY21zJ10gPSAnQ01TIGFkbWluJzsKJGxhbmdbJ2F1ZGl0X3VzZXJfbWFtcyddID0gJ01BTVMgbWVtYmVyJzsKJGxhbmdbJ2F1ZGl0X2RlbGV0ZSddID0gJ0RlbGV0ZSc7CiRsYW5nWydhdWRpdF9kZWxldGVfc2VsZWN0ZWQnXSA9ICdEZWxldGUgc2VsZWN0ZWQnOwokbGFuZ1snYXVkaXRfc2VsZWN0X2FsbCddID0gJ1NlbGVjdCBhbGwgb24gdGhpcyBwYWdlJzsKJGxhbmdbJ2F1ZGl0X2NvbmZpcm1fZGVsZXRlJ10gPSAnRGVsZXRlIHRoaXMgYXVkaXQgbG9nIGVudHJ5Pyc7CiRsYW5nWydhdWRpdF9jb25maXJtX2J1bGsnXSA9ICdEZWxldGUgdGhlIHNlbGVjdGVkIGF1ZGl0IGxvZyBlbnRyaWVzPyc7CiRsYW5nWydhdWRpdF9ub25lX3NlbGVjdGVkJ10gPSAnU2VsZWN0IGF0IGxlYXN0IG9uZSBlbnRyeSBvbiB0aGlzIHBhZ2UuJzsKJGxhbmdbJ2F1ZGl0X2NsZWFyX2hlYWRpbmcnXSA9ICdDbGVhciBhbGwgbG9ncyc7CiRsYW5nWydhdWRpdF9jbGVhcl9oZWxwJ10gPSAnUGVybWFuZW50bHkgcmVtb3ZlcyBldmVyeSBhdWRpdCBsb2cgZW50cnkuIEV4cG9ydCBDU1YgZmlyc3QgaWYgeW91IG5lZWQgYSBiYWNrdXAuJzsKJGxhbmdbJ2F1ZGl0X2NsZWFyX2FsbCddID0gJ0NsZWFyIGFsbCBsb2dzJzsKJGxhbmdbJ2F1ZGl0X2NsZWFyX2NvbmZpcm0nXSA9ICdJIHVuZGVyc3RhbmQgdGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGV2ZXJ5IGF1ZGl0IGxvZyBlbnRyeSc7CiRsYW5nWydhdWRpdF9jb25maXJtX2NsZWFyJ10gPSAnQ2xlYXIgdGhlIGVudGlyZSBhdWRpdCBsb2c/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nOwokbGFuZ1snYXVkaXRfY2xlYXJfY29uZmlybV9yZXF1aXJlZCddID0gJ1RpY2sgdGhlIGNvbmZpcm1hdGlvbiBjaGVja2JveCBiZWZvcmUgY2xlYXJpbmcgYWxsIGxvZ3MuJzsKJGxhbmdbJ2F1ZGl0X21zZ19kZWxldGVkJ10gPSAnQXVkaXQgZW50cnkgZGVsZXRlZC4nOwokbGFuZ1snYXVkaXRfbXNnX2J1bGtfZGVsZXRlZCddID0gJ1NlbGVjdGVkIGF1ZGl0IGVudHJpZXMgZGVsZXRlZC4nOwokbGFuZ1snYXVkaXRfbXNnX2NsZWFyZWQnXSA9ICdBdWRpdCBsb2cgY2xlYXJlZC4nOwokbGFuZ1snbWFtc19zdGF0dXMnXSA9ICdNQU1TIHN0YXR1cyc7CiRsYW5nWydtYW1zX2F1dGhfbW9kdWxlJ10gPSAnTUFNUyBhdXRoX21vZHVsZSBwcmVmZXJlbmNlJzsKJGxhbmdbJ21hbXNfcmVnaXN0cmF0aW9uX2luc3RhbGxlZCddID0gJ01BTVNSZWdpc3RyYXRpb24gaW5zdGFsbGVkJzsKJGxhbmdbJ2Vycm9yX2VtYWlsX3Nzb19saW5rZWQnXSA9ICdUaGlzIGVtYWlsIGlzIGFscmVhZHkgbGlua2VkIHRvIFNTTyBzaWduLWluLiBVc2UgU1NPIG9yIGNvbnRhY3QgYW4gYWRtaW5pc3RyYXRvci4nOwokbGFuZ1snZXJyb3JfZ2VuZXJpYyddID0gJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nOwokbGFuZ1snc3NvX2xvZ2luX3dpdGgnXSA9ICdTaWduIGluIHdpdGgnOwokbGFuZ1snaGVscF9hY3Rpb24nXSA9ICdBY3Rpb246IG9hdXRoX3N0YXJ0LCBvYXV0aF9jYWxsYmFjaywgbWFtc19sb2dpbiwgd2ViYXV0aG4sIHNhbWxfYWNzLCBvYXV0aF9hdXRob3JpemUsIG9hdXRoX3Rva2VuLCBvaWRjX2Rpc2NvdmVyeSc7CiRsYW5nWydleHRlbnNpb25zJ10gPSAnRXh0ZW5zaW9ucyc7Ci8vIEZvcmdlIHNjcmVlbnNob3QgY2FwdGlvbnMKJGxhbmdbJ3NjcmVlbnNob3RfMSddID0gJ1NldHRpbmdzIHRhYiB3aXRoIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIG9wdGlvbnMnOwokbGFuZ1snc2NyZWVuc2hvdF8yJ10gPSAnQ29ubmVjdGVkIGFjY291bnRzIGFuZCBsb2dpbiBtZXRob2Qgb3ZlcnZpZXcnOwokbGFuZ1snc2NyZWVuc2hvdF8zJ10gPSAnT0F1dGggYW5kIFNTTyBjb25maWd1cmF0aW9uIHNjcmVlbic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PElmTW9kdWxlIG1vZF9hdXRoel9jb3JlLmM+CiAgICBSZXF1aXJlIGFsbCBkZW5pZWQKPC9JZk1vZHVsZT4KPElmTW9kdWxlICFtb2RfYXV0aHpfY29yZS5jPgogICAgT3JkZXIgZGVueSxhbGxvdwogICAgRGVueSBmcm9tIGFsbAo8L0lmTW9kdWxlPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.mas_ah_mams_consumer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvLi4vTUFNUy9saWIvaW50ZXJmYWNlLm1hbXNfYXV0aF9jb25zdW1lci5waHAnOwoKZmluYWwgY2xhc3MgTWFzX0FoX01hbXNDb25zdW1lciBpbXBsZW1lbnRzIG1hbXNfYXV0aF9jb25zdW1lcgp7CiAgICAvKiogQHZhciBDTVNNb2R1bGUgKi8KICAgIHByaXZhdGUgJG1vZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZCA9ICRtb2Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzX2F1dGhlbnRpY2F0ZWQoKQogICAgewogICAgICAgICRtYW1zID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TJyk7CiAgICAgICAgaWYgKCEkbWFtcykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaW50KSAkbWFtcy0+TG9nZ2VkSW5JZCgpID4gMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhcGFiaWxpdGllcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBtYW1zX2F1dGhfY29uc3VtZXI6OkNBUEFCSUxJVFlfQUxUTE9HSU4sCiAgICAgICAgICAgIG1hbXNfYXV0aF9jb25zdW1lcjo6Q0FQQUJJTElUWV9MT0dPVVQsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzX2NhcGFiaWxpdHkoJGZsYWcpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZmxhZykpIHsKICAgICAgICAgICAgJGZsYWcgPSBhcnJheSgkZmxhZyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRmbGFnIGFzICRvbmUpIHsKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRvbmUsICR0aGlzLT5nZXRfY2FwYWJpbGl0aWVzKCksIHRydWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sb2dpbl9kaXNwbGF5KCRpZCwgJHJldHVybmlkLCAkcGFyYW1zKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6YWxsb3dNYW1zU3NvKCR0aGlzLT5tb2QpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJHNtYXJ0eSA9IGNtc191dGlsczo6Z2V0X3NtYXJ0eSgpOwogICAgICAgIGlmICghJHNtYXJ0eSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRwcm92aWRlcnMgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6Omxpc3RQcm92aWRlcnMoJHRoaXMtPm1vZCwgdHJ1ZSk7CiAgICAgICAgJGxpbmtzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkcHJvdmlkZXJzIGFzICRwKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoKHN0cmluZykgJHBbJ2RyaXZlciddLCBhcnJheSgnb2F1dGgyJywgJ29pZGMnLCAnc2FtbCcsICd3ZWJhdXRobicpLCB0cnVlKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxpbmtzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkcFsnbmFtZSddLAogICAgICAgICAgICAgICAgJ3VybCcgPT4gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCR0aGlzLT5tb2QsICdvYXV0aF9zdGFydCcsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdwcm92aWRlcl9pZCcgPT4gKGludCkgJHBbJ2lkJ10sCiAgICAgICAgICAgICAgICAgICAgJ3JldHVybl90eXBlJyA9PiAnbWFtcycsCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgICAgICdkcml2ZXInID0+ICRwWydkcml2ZXInXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtYXNfYWhfcHJvdmlkZXJzJywgJGxpbmtzKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21hc19haF93ZWJhdXRobl91cmwnLCBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJHRoaXMtPm1vZCwgJ3dlYmF1dGhuJywgYXJyYXkoCiAgICAgICAgICAgICdtb2RlJyA9PiAnbG9naW4nLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+ICdtYW1zJywKICAgICAgICApKSk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2QtPlByb2Nlc3NUZW1wbGF0ZSgnbWFtc19hbHRfbG9naW4udHBsJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sb2dvdXRfZGlzcGxheSgkaWQsICRyZXR1cm5pZCwgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jaGFuZ2VzZXR0aW5nc19kaXNwbGF5KCRpZCwgJHJldHVybmlkLCAkcGFyYW1zKQogICAgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3VzZXJfaW5mbygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb25uZWN0aW5nX3Byb3BlcnR5X25hbWUoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgJ2F1dGhodWJfc3ViJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF91bmlxdWVfaWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBfbGlzdCgkd2l0aF9jb3VudCA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBfbWVtYmVyc2hpcCgkdXNlcmlkKQogICAgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVmYXVsdF9ncm91cHMoKQogICAgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdXNlcm5hbWVfcHJvbXB0KCkKICAgIHsKICAgICAgICAkbWFtcyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUFNUycpOwogICAgICAgIHJldHVybiAkbWFtcyA/ICRtYW1zLT5MYW5nKCdwcm9tcHRfdXNlcm5hbWUnKSA6ICdVc2VybmFtZSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlX3VzZXJuYW1lKCR1c2VybmFtZSwgJGNoZWNrX2VtYWlsX2FkZHIgPSBmYWxzZSwgJHVpZCA9IC0xKQogICAgewogICAgICAgICRtYW1zID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TJyk7CiAgICAgICAgaWYgKCRtYW1zICYmIG1ldGhvZF9leGlzdHMoJG1hbXMsICdJc1ZhbGlkVXNlcm5hbWUnKSkgewogICAgICAgICAgICByZXR1cm4gKGJvb2wpICRtYW1zLT5Jc1ZhbGlkVXNlcm5hbWUoJHVzZXJuYW1lLCAkY2hlY2tfZW1haWxfYWRkciwgJHVpZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_DriverInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgppbnRlcmZhY2UgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCk7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLG1peGVkPiAkcHJvdmlkZXIgUm93IGZyb20gcHJvdmlkZXJzIHRhYmxlICsgbWVyZ2VkIGNvbmZpZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkY29udGV4dCk7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD58bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_DriverRegistry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfRHJpdmVyUmVnaXN0cnkKewogICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nLE1hc19BaF9Ecml2ZXJJbnRlcmZhY2U+ICovCiAgICBwcml2YXRlIHN0YXRpYyAkZHJpdmVycyA9IGFycmF5KCk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlcihNYXNfQWhfRHJpdmVySW50ZXJmYWNlICRkcml2ZXIpCiAgICB7CiAgICAgICAgc2VsZjo6JGRyaXZlcnNbJGRyaXZlci0+Z2V0RHJpdmVyS2V5KCldID0gJGRyaXZlcjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJvb3QoKQogICAgewogICAgICAgIGlmIChjb3VudChzZWxmOjokZHJpdmVycykgPiAwKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2VsZjo6cmVnaXN0ZXIobmV3IE1hc19BaF9PQXV0aDJDbGllbnREcml2ZXIoKSk7CiAgICAgICAgc2VsZjo6cmVnaXN0ZXIobmV3IE1hc19BaF9PaWRjRHJpdmVyKCkpOwogICAgICAgIHNlbGY6OnJlZ2lzdGVyKG5ldyBNYXNfQWhfU2FtbFNwRHJpdmVyKCkpOwogICAgICAgIHNlbGY6OnJlZ2lzdGVyKG5ldyBNYXNfQWhfV2ViQXV0aG5Ecml2ZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIE1hc19BaF9Ecml2ZXJJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgka2V5KQogICAgewogICAgICAgIHNlbGY6OmJvb3QoKTsKICAgICAgICAka2V5ID0gc3RydG9sb3dlcigoc3RyaW5nKSAka2V5KTsKICAgICAgICByZXR1cm4gaXNzZXQoc2VsZjo6JGRyaXZlcnNbJGtleV0pID8gc2VsZjo6JGRyaXZlcnNbJGtleV0gOiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGlzdEtleXMoKQogICAgewogICAgICAgIHNlbGY6OmJvb3QoKTsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5cyhzZWxmOjokZHJpdmVycyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm92aWRlcihDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQpCiAgICB7CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coCiAgICAgICAgICAgICdTRUxFQ1QgKiBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgV0hFUkUgaWQgPSA/IExJTUlUIDEnLAogICAgICAgICAgICBhcnJheSgoaW50KSAkcHJvdmlkZXJJZCkKICAgICAgICApOwogICAgICAgIGlmICghaXNfYXJyYXkoJHJvdykpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRjZmcgPSBqc29uX2RlY29kZSgoc3RyaW5nKSAoJHJvd1snY29uZmlnX2pzb24nXSA/PyAne30nKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkY2ZnKSkgewogICAgICAgICAgICAkY2ZnID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgJHJvd1snY29uZmlnJ10gPSAkY2ZnOwogICAgICAgICRyb3dbJ3Byb3ZpZGVyX2tleSddID0gaXNzZXQoJGNmZ1sncHJvdmlkZXJfa2V5J10pID8gKHN0cmluZykgJGNmZ1sncHJvdmlkZXJfa2V5J10gOiAncHJvdmlkZXJfJyAuICRyb3dbJ2lkJ107CiAgICAgICAgcmV0dXJuICRyb3c7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaXN0UHJvdmlkZXJzKENNU01vZHVsZSAkbW9kLCAkZW5hYmxlZE9ubHkgPSBmYWxzZSkKICAgIHsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnByb3ZpZGVycygpIC4gJyBPUkRFUiBCWSBzb3J0X29yZGVyIEFTQywgbmFtZSBBU0MnOwogICAgICAgIGlmICgkZW5hYmxlZE9ubHkpIHsKICAgICAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcgLiBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSAuICcgV0hFUkUgZW5hYmxlZCA9IDEgT1JERVIgQlkgc29ydF9vcmRlciBBU0MsIG5hbWUgQVNDJzsKICAgICAgICB9CiAgICAgICAgJHJvd3MgPSAkbW9kLT5HZXREYigpLT5HZXRBcnJheSgkc3FsKTsKICAgICAgICByZXR1cm4gaXNfYXJyYXkoJHJvd3MpID8gJHJvd3MgOiBhcnJheSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_OAuth2ClientDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT0F1dGgyQ2xpZW50RHJpdmVyIGltcGxlbWVudHMgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJ29hdXRoMic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25VcmwoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19BaF9Sb3V0ZXI6OmJ1aWxkT0F1dGhBdXRob3JpemVVcmwoJG1vZCwgJHByb3ZpZGVyLCAkY29udGV4dCwgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6aGFuZGxlT0F1dGhDYWxsYmFjaygkbW9kLCAkcHJvdmlkZXIsICRwYXJhbXMsICRjb250ZXh0LCBmYWxzZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_OidcDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2lkY0RyaXZlciBpbXBsZW1lbnRzIE1hc19BaF9Ecml2ZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGdldERyaXZlcktleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdvaWRjJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6YnVpbGRPQXV0aEF1dGhvcml6ZVVybCgkbW9kLCAkcHJvdmlkZXIsICRjb250ZXh0LCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19BaF9Sb3V0ZXI6OmhhbmRsZU9BdXRoQ2FsbGJhY2soJG1vZCwgJHByb3ZpZGVyLCAkcGFyYW1zLCAkY29udGV4dCwgdHJ1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_SamlSpDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfU2FtbFNwRHJpdmVyIGltcGxlbWVudHMgTWFzX0FoX0RyaXZlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RHJpdmVyS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJ3NhbWwnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJGlkcFNzbyA9IGlzc2V0KCRjZmdbJ2lkcF9zc29fdXJsJ10pID8gKHN0cmluZykgJGNmZ1snaWRwX3Nzb191cmwnXSA6ICcnOwogICAgICAgIGlmICgkaWRwU3NvID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgIGlmIChzZXNzaW9uX3N0YXR1cygpICE9PSBQSFBfU0VTU0lPTl9BQ1RJVkUpIHsKICAgICAgICAgICAgQHNlc3Npb25fc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfc2FtbF9wcm92aWRlciddID0gKGludCkgJHByb3ZpZGVyWydpZCddOwogICAgICAgICRfU0VTU0lPTlsnbWFzX2FoX3JldHVybl90eXBlJ10gPSBpc3NldCgkY29udGV4dFsncmV0dXJuX3R5cGUnXSkgPyAoc3RyaW5nKSAkY29udGV4dFsncmV0dXJuX3R5cGUnXSA6ICdtYW1zJzsKICAgICAgICAkcmVsYXkgPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygxNikpOwogICAgICAgICRfU0VTU0lPTlsnbWFzX2FoX3NhbWxfcmVsYXknXSA9ICRyZWxheTsKICAgICAgICAkYWNzID0gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCRtb2QsICdzYW1sX2FjcycsIGFycmF5KCdwcm92aWRlcl9pZCcgPT4gKGludCkgJHByb3ZpZGVyWydpZCddKSk7CiAgICAgICAgJHFzID0gaHR0cF9idWlsZF9xdWVyeShhcnJheSgKICAgICAgICAgICAgJ1NBTUxSZXF1ZXN0JyA9PiAnJywgLy8gU1AtaW5pdGlhdGVkIHZpYSByZWRpcmVjdCB0byBJZFAgbG9naW4gVVJMIHdoZW4gdXNpbmcgc2ltcGxlIHJlZGlyZWN0IG1vZGUKICAgICAgICAgICAgJ1JlbGF5U3RhdGUnID0+ICRyZWxheSwKICAgICAgICApKTsKICAgICAgICByZXR1cm4gJGlkcFNzbyAuIChzdHJwb3MoJGlkcFNzbywgJz8nKSA9PT0gZmFsc2UgPyAnPycgOiAnJicpIC4gJHFzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gTWFzX0FoX1JvdXRlcjo6aGFuZGxlU2FtbEFjcygkbW9kLCAkcHJvdmlkZXIsICRwYXJhbXMsICRjb250ZXh0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/drivers/Mas_Ah_WebAuthnDriver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfV2ViQXV0aG5Ecml2ZXIgaW1wbGVtZW50cyBNYXNfQWhfRHJpdmVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREcml2ZXJLZXkoKQogICAgewogICAgICAgIHJldHVybiAnd2ViYXV0aG4nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uVXJsKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgIHJldHVybiBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJG1vZCwgJ3dlYmF1dGhuJywgYXJyYXkoCiAgICAgICAgICAgICdtb2RlJyA9PiAnbG9naW4nLAogICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+IGlzc2V0KCRjb250ZXh0WydyZXR1cm5fdHlwZSddKSA/ICRjb250ZXh0WydyZXR1cm5fdHlwZSddIDogJ21hbXMnLAogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcGFyYW1zLCBhcnJheSAkY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_admin_login_ui.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEluamVjdCBDTVNNUyBhZG1pbiBsb2dpbiBTU08gYnV0dG9ucyAvIG9wdGlvbmFsIGF1dG8tcmVkaXJlY3QgdmlhIEhvb2tNYW5hZ2VyLgogKi8KaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQWRtaW5Mb2dpblVpCnsKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZWdpc3RlcmVkID0gZmFsc2U7CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGZpbHRlclJlZ2lzdGVyZWQgPSBmYWxzZTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbmplY3RIdG1sID0gJyc7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3Rlckhvb2tzKCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JHJlZ2lzdGVyZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzZWxmOjokcmVnaXN0ZXJlZCA9IHRydWU7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ1xcQ01TTVNcXEhvb2tNYW5hZ2VyJywgZmFsc2UpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjphZGRfaG9vaygKICAgICAgICAgICAgJ0NvcmU6OkxvZ2luQXR0ZW1wdGVkJywKICAgICAgICAgICAgYXJyYXkoX19DTEFTU19fLCAnb25Mb2dpbkF0dGVtcHRlZCcpLAogICAgICAgICAgICBcQ01TTVNcSG9va01hbmFnZXI6OlBSSU9SSVRZX05PUk1BTAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBheWxvYWQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvbkxvZ2luQXR0ZW1wdGVkKCRwYXlsb2FkID0gbnVsbCkKICAgIHsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQVNfQXV0aEh1YicpOwogICAgICAgIGlmICghKCRtb2QgaW5zdGFuY2VvZiBDTVNNb2R1bGUpIHx8ICFNYXNfQWhfUG9saWN5OjphbGxvd0FkbWluU3NvKCRtb2QpKSB7CiAgICAgICAgICAgIHJldHVybiAkcGF5bG9hZDsKICAgICAgICB9CiAgICAgICAgJHByb3ZpZGVycyA9IHNlbGY6OmVuYWJsZWRGZWRlcmF0ZWRQcm92aWRlcnMoJG1vZCk7CiAgICAgICAgaWYgKGNvdW50KCRwcm92aWRlcnMpIDwgMSkgewogICAgICAgICAgICByZXR1cm4gJHBheWxvYWQ7CiAgICAgICAgfQogICAgICAgICRtb2RlID0gKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2FkbWluX3Nzb19tb2RlJywgJ2J1dHRvbnMnKTsKICAgICAgICBpZiAoJG1vZGUgPT09ICdyZWRpcmVjdCcgJiYgIXNlbGY6OmlzUGFzc3dvcmRSZWNvdmVyeVJlcXVlc3QoKSkgewogICAgICAgICAgICAkcHJvdmlkZXJJZCA9IHNlbGY6OnJlc29sdmVSZWRpcmVjdFByb3ZpZGVySWQoJG1vZCwgJHByb3ZpZGVycyk7CiAgICAgICAgICAgIGlmICgkcHJvdmlkZXJJZCA+IDApIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBNYXNfQWhfUm91dGVyOjpzdGFydE9BdXRoKCRtb2QsICRwcm92aWRlcklkLCAnYWRtaW4nKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdFsncmVkaXJlY3QnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZWRpcmVjdCgkcmVzdWx0WydyZWRpcmVjdCddLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxmOjokaW5qZWN0SHRtbCA9IHNlbGY6OnJlbmRlckJ1dHRvbnNIdG1sKCRtb2QsICRwcm92aWRlcnMpOwogICAgICAgIGlmIChzZWxmOjokaW5qZWN0SHRtbCAhPT0gJycpIHsKICAgICAgICAgICAgc2VsZjo6cmVnaXN0ZXJTbWFydHlGaWx0ZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRwYXlsb2FkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxpbnQsYXJyYXk8c3RyaW5nLG1peGVkPj4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5hYmxlZEZlZGVyYXRlZFByb3ZpZGVycyhDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICAkcm93cyA9IE1hc19BaF9Ecml2ZXJSZWdpc3RyeTo6bGlzdFByb3ZpZGVycygkbW9kLCB0cnVlKTsKICAgICAgICBmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CiAgICAgICAgICAgICRkcml2ZXIgPSBzdHJ0b2xvd2VyKChzdHJpbmcpICgkcm93Wydkcml2ZXInXSA/PyAnJykpOwogICAgICAgICAgICBpZiAoJGRyaXZlciA9PT0gJ3dlYmF1dGhuJykgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG91dFtdID0gJHJvdzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LGFycmF5PHN0cmluZyxtaXhlZD4+ICRwcm92aWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZVJlZGlyZWN0UHJvdmlkZXJJZChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVycykKICAgIHsKICAgICAgICAkcHJlZiA9IChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlcicsICcwJyk7CiAgICAgICAgaWYgKCRwcmVmID4gMCkgewogICAgICAgICAgICBmb3JlYWNoICgkcHJvdmlkZXJzIGFzICRyb3cpIHsKICAgICAgICAgICAgICAgIGlmICgoaW50KSAkcm93WydpZCddID09PSAkcHJlZikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkcHJlZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY291bnQoJHByb3ZpZGVycykgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpICRwcm92aWRlcnNbMF1bJ2lkJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGlzUGFzc3dvcmRSZWNvdmVyeVJlcXVlc3QoKQogICAgewogICAgICAgICRmb3Jnb3RHZXQgPSBmaWx0ZXJfaW5wdXQoSU5QVVRfR0VULCAnZm9yZ290cHcnLCBGSUxURVJfVU5TQUZFX1JBVyk7CiAgICAgICAgJGZvcmdvdFJlcSA9IGZpbHRlcl9pbnB1dChJTlBVVF9QT1NULCAnZm9yZ290cHcnLCBGSUxURVJfVU5TQUZFX1JBVyk7CiAgICAgICAgaWYgKCgkZm9yZ290R2V0ICE9PSBudWxsICYmICRmb3Jnb3RHZXQgIT09IGZhbHNlICYmICRmb3Jnb3RHZXQgIT09ICcnKQogICAgICAgICAgICB8fCAoJGZvcmdvdFJlcSAhPT0gbnVsbCAmJiAkZm9yZ290UmVxICE9PSBmYWxzZSAmJiAkZm9yZ290UmVxICE9PSAnJykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKGFycmF5KCdmb3Jnb3Rwd2Zvcm0nLCAnZm9yZ290cHdjaGFuZ2Vmb3JtJywgJ3JlY292ZXJtZScsICdjaGFuZ2Vwd2hhc2gnLCAnZm9yY2Vwd2NoYW5nZWZvcm0nKSBhcyAka2V5KSB7CiAgICAgICAgICAgICRnID0gZmlsdGVyX2lucHV0KElOUFVUX0dFVCwgJGtleSwgRklMVEVSX1VOU0FGRV9SQVcpOwogICAgICAgICAgICAkcCA9IGZpbHRlcl9pbnB1dChJTlBVVF9QT1NULCAka2V5LCBGSUxURVJfVU5TQUZFX1JBVyk7CiAgICAgICAgICAgIGlmICgoJGcgIT09IG51bGwgJiYgJGcgIT09IGZhbHNlICYmICRnICE9PSAnJykKICAgICAgICAgICAgICAgIHx8ICgkcCAhPT0gbnVsbCAmJiAkcCAhPT0gZmFsc2UgJiYgJHAgIT09ICcnKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5PGludCxhcnJheTxzdHJpbmcsbWl4ZWQ+PiAkcHJvdmlkZXJzCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlbmRlckJ1dHRvbnNIdG1sKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXJzKQogICAgewogICAgICAgICRpdGVtcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHByb3ZpZGVycyBhcyAkcm93KSB7CiAgICAgICAgICAgICRwaWQgPSAoaW50KSAkcm93WydpZCddOwogICAgICAgICAgICAkaXRlbXNbXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2lkJyA9PiAkcGlkLAogICAgICAgICAgICAgICAgJ25hbWUnID0+IChzdHJpbmcpICgkcm93WyduYW1lJ10gPz8gKCdQcm92aWRlciAnIC4gJHBpZCkpLAogICAgICAgICAgICAgICAgJ3VybCcgPT4gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCRtb2QsICdvYXV0aF9zdGFydCcsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdwcm92aWRlcl9pZCcgPT4gJHBpZCwKICAgICAgICAgICAgICAgICAgICAncmV0dXJuX3R5cGUnID0+ICdhZG1pbicsCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvdW50KCRpdGVtcykgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAgICAgJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKAogICAgICAgICAgICAgICAgJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnYWRtaW5fc3NvX2J1dHRvbnMudHBsJyksCiAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICRzbWFydHkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtb2QnLCAkbW9kKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfYWhfcHJvdmlkZXJzJywgJGl0ZW1zKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfYWhfc3NvX2hlYWRpbmcnLCAkbW9kLT5MYW5nKCdzc29fbG9naW5fd2l0aCcpKTsKICAgICAgICAgICAgJGh0bWwgPSAoc3RyaW5nKSAkdHBsLT5mZXRjaCgpOwogICAgICAgICAgICBpZiAoJGh0bWwgIT09ICcnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGh0bWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZhbGxiYWNrQnV0dG9uc0h0bWwoJG1vZCwgJGl0ZW1zKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIGF1ZGl0KDAsICdNQVNfQXV0aEh1YicsICdhZG1pbiBTU08gdGVtcGxhdGUgZmFpbGVkOiAnIC4gJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpmYWxsYmFja0J1dHRvbnNIdG1sKCRtb2QsICRpdGVtcyk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICBhdWRpdCgwLCAnTUFTX0F1dGhIdWInLCAnYWRtaW4gU1NPIHRlbXBsYXRlIGZhaWxlZDogJyAuICRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6ZmFsbGJhY2tCdXR0b25zSHRtbCgkbW9kLCAkaXRlbXMpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxpbnQsYXJyYXk8c3RyaW5nLHN0cmluZz4+ICRpdGVtcwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmYWxsYmFja0J1dHRvbnNIdG1sKENNU01vZHVsZSAkbW9kLCBhcnJheSAkaXRlbXMpCiAgICB7CiAgICAgICAgJGh0bWwgPSAnPGRpdiBjbGFzcz0ibWFzLWF1dGhodWItYWRtaW4tc3NvIiBzdHlsZT0ibWFyZ2luOjFlbSAwO3BhZGRpbmc6MWVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjZweDsiPic7CiAgICAgICAgJGh0bWwgLj0gJzxwPjxzdHJvbmc+JyAuIGNtc19odG1sZW50aXRpZXMoJG1vZC0+TGFuZygnc3NvX2xvZ2luX3dpdGgnKSkgLiAnPC9zdHJvbmc+PC9wPic7CiAgICAgICAgJGh0bWwgLj0gJzx1bCBzdHlsZT0ibGlzdC1zdHlsZTpub25lO3BhZGRpbmc6MDttYXJnaW46MDsiPic7CiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRwcikgewogICAgICAgICAgICAkaHRtbCAuPSAnPGxpIHN0eWxlPSJtYXJnaW46MC41ZW0gMDsiPjxhIGNsYXNzPSJtYXMtYXV0aGh1Yi1zc28tYnRuIiBocmVmPSInCiAgICAgICAgICAgICAgICAuIGNtc19odG1sZW50aXRpZXMoJHByWyd1cmwnXSkgLiAnIj4nCiAgICAgICAgICAgICAgICAuIGNtc19odG1sZW50aXRpZXMoJHByWyduYW1lJ10pIC4gJzwvYT48L2xpPic7CiAgICAgICAgfQogICAgICAgICRodG1sIC49ICc8L3VsPjwvZGl2Pic7CiAgICAgICAgcmV0dXJuICRodG1sOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyU21hcnR5RmlsdGVyKCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JGZpbHRlclJlZ2lzdGVyZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzZWxmOjokZmlsdGVyUmVnaXN0ZXJlZCA9IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHNtYXJ0eSwgJ3JlZ2lzdGVyRmlsdGVyJykpIHsKICAgICAgICAgICAgICAgICRzbWFydHktPnJlZ2lzdGVyRmlsdGVyKCdvdXRwdXQnLCBhcnJheShfX0NMQVNTX18sICdzbWFydHlPdXRwdXRGaWx0ZXInKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChtZXRob2RfZXhpc3RzKCRzbWFydHksICdyZWdpc3Rlcl9vdXRwdXRmaWx0ZXInKSkgewogICAgICAgICAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJfb3V0cHV0ZmlsdGVyKGFycmF5KF9fQ0xBU1NfXywgJ3NtYXJ0eU91dHB1dEZpbHRlcicpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgYXVkaXQoMCwgJ01BU19BdXRoSHViJywgJ2FkbWluIFNTTyBTbWFydHkgZmlsdGVyIHJlZ2lzdGVyIGZhaWxlZDogJyAuICRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgYXVkaXQoMCwgJ01BU19BdXRoSHViJywgJ2FkbWluIFNTTyBTbWFydHkgZmlsdGVyIHJlZ2lzdGVyIGZhaWxlZDogJyAuICRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbF9vdXRwdXQKICAgICAqIEBwYXJhbSBtaXhlZCAkc21hcnR5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNtYXJ0eU91dHB1dEZpbHRlcigkdHBsX291dHB1dCwgJHNtYXJ0eSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRpbmplY3RIdG1sID09PSAnJyB8fCAhaXNfc3RyaW5nKCR0cGxfb3V0cHV0KSB8fCAkdHBsX291dHB1dCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICR0cGxfb3V0cHV0OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyaXBvcygkdHBsX291dHB1dCwgJ21hcy1hdXRoaHViLWFkbWluLXNzbycpICE9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJHRwbF9vdXRwdXQ7CiAgICAgICAgfQogICAgICAgICRwb3MgPSBzdHJpcG9zKCR0cGxfb3V0cHV0LCAnPC9mb3JtPicpOwogICAgICAgIGlmICgkcG9zID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJHRwbF9vdXRwdXQ7CiAgICAgICAgfQogICAgICAgICRpbnNlcnRBdCA9ICRwb3MgKyBzdHJsZW4oJzwvZm9ybT4nKTsKICAgICAgICByZXR1cm4gc3Vic3RyKCR0cGxfb3V0cHV0LCAwLCAkaW5zZXJ0QXQpIC4gIlxuIiAuIHNlbGY6OiRpbmplY3RIdG1sIC4gc3Vic3RyKCR0cGxfb3V0cHV0LCAkaW5zZXJ0QXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_audit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQXVkaXQKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2coQ01TTW9kdWxlICRtb2QsICRldmVudCwgJHNldmVyaXR5LCBhcnJheSAkY29udGV4dCA9IGFycmF5KCksICR1c2VySWQgPSAwLCAkcHJvdmlkZXJJZCA9IDApCiAgICB7CiAgICAgICAgJHNldmVyaXR5ID0gaW5fYXJyYXkoJHNldmVyaXR5LCBhcnJheSgnaW5mbycsICd3YXJuaW5nJywgJ2Vycm9yJyksIHRydWUpID8gJHNldmVyaXR5IDogJ2luZm8nOwogICAgICAgICRldmVudCA9IHN1YnN0cihwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9cLlw6XS9pJywgJycsIChzdHJpbmcpICRldmVudCksIDAsIDEyOCk7CiAgICAgICAgJGpzb24gPSBqc29uX2VuY29kZSgkY29udGV4dCwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgICAgIGlmICgkanNvbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJGpzb24gPSAne30nOwogICAgICAgIH0KICAgICAgICAkaXAgPSAnJzsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjbXNfdXRpbHM6OmdldF9yZWFsX2lwJykpIHsKICAgICAgICAgICAgJGlwID0gKHN0cmluZykgY21zX3V0aWxzOjpnZXRfcmVhbF9pcCgpOwogICAgICAgIH0KICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OmF1ZGl0TG9nKCkKICAgICAgICAgICAgLiAnIChjcmVhdGVkLCBldmVudCwgc2V2ZXJpdHksIHVzZXJfaWQsIHByb3ZpZGVyX2lkLCBpcF9oYXNoLCBjb250ZXh0X2pzb24pJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSc7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRzcWwsIGFycmF5KAogICAgICAgICAgICB0aW1lKCksCiAgICAgICAgICAgICRldmVudCwKICAgICAgICAgICAgJHNldmVyaXR5LAogICAgICAgICAgICAoaW50KSAkdXNlcklkLAogICAgICAgICAgICAoaW50KSAkcHJvdmlkZXJJZCwKICAgICAgICAgICAgTWFzX0FoX0NyeXB0bzo6aGFzaElwKCRpcCksCiAgICAgICAgICAgICRqc29uLAogICAgICAgICkpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIHVzZXJfZGlzcGxheSAoYW5kIHVzZXJfc291cmNlKSB0byBhdWRpdCByb3dzIGZvciBhZG1pbiBVSS4KICAgICAqCiAgICAgKiBAcGFyYW0gQ01TTW9kdWxlICRtb2QKICAgICAqIEBwYXJhbSBhcnJheSAkcm93cwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVucmljaFJvd3NXaXRoVXNlcm5hbWVzKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcm93cykKICAgIHsKICAgICAgICBpZiAoJHJvd3MgPT09IGFycmF5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICRyb3dzOwogICAgICAgIH0KICAgICAgICAkdXNlcklkcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgewogICAgICAgICAgICAkdWlkID0gaXNzZXQoJHJvd1sndXNlcl9pZCddKSA/IChpbnQpICRyb3dbJ3VzZXJfaWQnXSA6IDA7CiAgICAgICAgICAgIGlmICgkdWlkID4gMCkgewogICAgICAgICAgICAgICAgJHVzZXJJZHNbJHVpZF0gPSAkdWlkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRjbXNOYW1lcyA9IHNlbGY6OmxvYWRDbXNVc2VybmFtZXMoJHVzZXJJZHMpOwogICAgICAgICRtYW1zTmFtZXMgPSBzZWxmOjpsb2FkTWFtc1VzZXJuYW1lcygkdXNlcklkcyk7CiAgICAgICAgZm9yZWFjaCAoJHJvd3MgYXMgJGlkeCA9PiAkcm93KSB7CiAgICAgICAgICAgICR1aWQgPSBpc3NldCgkcm93Wyd1c2VyX2lkJ10pID8gKGludCkgJHJvd1sndXNlcl9pZCddIDogMDsKICAgICAgICAgICAgJGV2ZW50ID0gaXNzZXQoJHJvd1snZXZlbnQnXSkgPyAoc3RyaW5nKSAkcm93WydldmVudCddIDogJyc7CiAgICAgICAgICAgICRsYWJlbCA9IHNlbGY6OnJlc29sdmVVc2VyTGFiZWwoJHVpZCwgJGV2ZW50LCAkY21zTmFtZXMsICRtYW1zTmFtZXMpOwogICAgICAgICAgICAkcm93c1skaWR4XVsndXNlcl9kaXNwbGF5J10gPSAkbGFiZWxbJ2Rpc3BsYXknXTsKICAgICAgICAgICAgJHJvd3NbJGlkeF1bJ3VzZXJfc291cmNlJ10gPSAkbGFiZWxbJ3NvdXJjZSddOwogICAgICAgICAgICAkcm93c1skaWR4XVsndXNlcl9zb3VyY2VfbGFiZWwnXSA9IHNlbGY6OnVzZXJTb3VyY2VMYWJlbCgkbW9kLCAkbGFiZWxbJ3NvdXJjZSddKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyb3dzOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHVzZXJTb3VyY2VMYWJlbChDTVNNb2R1bGUgJG1vZCwgJHNvdXJjZSkKICAgIHsKICAgICAgICBpZiAoJHNvdXJjZSA9PT0gJ2NtcycpIHsKICAgICAgICAgICAgcmV0dXJuICRtb2QtPkxhbmcoJ2F1ZGl0X3VzZXJfY21zJyk7CiAgICAgICAgfQogICAgICAgIGlmICgkc291cmNlID09PSAnbWFtcycpIHsKICAgICAgICAgICAgcmV0dXJuICRtb2QtPkxhbmcoJ2F1ZGl0X3VzZXJfbWFtcycpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbG9hZENtc1VzZXJuYW1lcyhhcnJheSAkdXNlcklkcykKICAgIHsKICAgICAgICAkbWFwID0gYXJyYXkoKTsKICAgICAgICBpZiAoJHVzZXJJZHMgPT09IGFycmF5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICRtYXA7CiAgICAgICAgfQogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgJHBsYWNlaG9sZGVycyA9IGltcGxvZGUoJywnLCBhcnJheV9maWxsKDAsIGNvdW50KCR1c2VySWRzKSwgJz8nKSk7CiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgdXNlcl9pZCwgdXNlcm5hbWUgRlJPTSAnIC4gQ01TX0RCX1BSRUZJWCAuICd1c2VycyBXSEVSRSB1c2VyX2lkIElOICgnIC4gJHBsYWNlaG9sZGVycyAuICcpJzsKICAgICAgICAkcmVzdWx0ID0gJGRiLT5HZXRBcnJheSgkc3FsLCBhcnJheV92YWx1ZXMoJHVzZXJJZHMpKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJHJlc3VsdCkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkcm93KSB7CiAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSAoJHJvd1sndXNlcl9pZCddID8/IDApOwogICAgICAgICAgICAgICAgaWYgKCRpZCA+IDAgJiYgaXNzZXQoJHJvd1sndXNlcm5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkbWFwWyRpZF0gPSAoc3RyaW5nKSAkcm93Wyd1c2VybmFtZSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWFwOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGxvYWRNYW1zVXNlcm5hbWVzKGFycmF5ICR1c2VySWRzKQogICAgewogICAgICAgICRtYXAgPSBhcnJheSgpOwogICAgICAgIGlmICgkdXNlcklkcyA9PT0gYXJyYXkoKSB8fCAhY21zX3V0aWxzOjptb2R1bGVfYXZhaWxhYmxlKCdNQU1TJykpIHsKICAgICAgICAgICAgcmV0dXJuICRtYXA7CiAgICAgICAgfQogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgJHBsYWNlaG9sZGVycyA9IGltcGxvZGUoJywnLCBhcnJheV9maWxsKDAsIGNvdW50KCR1c2VySWRzKSwgJz8nKSk7CiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgaWQsIHVzZXJuYW1lIEZST00gJyAuIENNU19EQl9QUkVGSVggLiAnbW9kdWxlX21hbXNfdXNlcnMgV0hFUkUgaWQgSU4gKCcgLiAkcGxhY2Vob2xkZXJzIC4gJyknOwogICAgICAgICRyZXN1bHQgPSAkZGItPkdldEFycmF5KCRzcWwsIGFycmF5X3ZhbHVlcygkdXNlcklkcykpOwogICAgICAgIGlmIChpc19hcnJheSgkcmVzdWx0KSkgewogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0IGFzICRyb3cpIHsKICAgICAgICAgICAgICAgICRpZCA9IChpbnQpICgkcm93WydpZCddID8/IDApOwogICAgICAgICAgICAgICAgaWYgKCRpZCA+IDAgJiYgaXNzZXQoJHJvd1sndXNlcm5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkbWFwWyRpZF0gPSAoc3RyaW5nKSAkcm93Wyd1c2VybmFtZSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWFwOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmVVc2VyTGFiZWwoJHVzZXJJZCwgJGV2ZW50LCBhcnJheSAkY21zTmFtZXMsIGFycmF5ICRtYW1zTmFtZXMpCiAgICB7CiAgICAgICAgaWYgKCR1c2VySWQgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZGlzcGxheScgPT4gJycsICdzb3VyY2UnID0+ICcnKTsKICAgICAgICB9CiAgICAgICAgJHByZWZlck1hbXMgPSAoc3RycG9zKCRldmVudCwgJ21hbXMuJykgPT09IDAgfHwgc3RycG9zKCRldmVudCwgJ21hbXNyZWcuJykgPT09IDApOwogICAgICAgIGlmICgkcHJlZmVyTWFtcykgewogICAgICAgICAgICBpZiAoaXNzZXQoJG1hbXNOYW1lc1skdXNlcklkXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnZGlzcGxheScgPT4gJG1hbXNOYW1lc1skdXNlcklkXSwgJ3NvdXJjZScgPT4gJ21hbXMnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJGNtc05hbWVzWyR1c2VySWRdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdkaXNwbGF5JyA9PiAkY21zTmFtZXNbJHVzZXJJZF0sICdzb3VyY2UnID0+ICdjbXMnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkY21zTmFtZXNbJHVzZXJJZF0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Rpc3BsYXknID0+ICRjbXNOYW1lc1skdXNlcklkXSwgJ3NvdXJjZScgPT4gJ2NtcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkbWFtc05hbWVzWyR1c2VySWRdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdkaXNwbGF5JyA9PiAkbWFtc05hbWVzWyR1c2VySWRdLCAnc291cmNlJyA9PiAnbWFtcycpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnZGlzcGxheScgPT4gJyMnIC4gJHVzZXJJZCwgJ3NvdXJjZScgPT4gJ3Vua25vd24nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_cms_login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQ21zTG9naW5CcmlkZ2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2dpbkNtc1VzZXIoJHVzZXIpCiAgICB7CiAgICAgICAgaWYgKCEkdXNlciB8fCBlbXB0eSgkdXNlci0+aWQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgQ01TIHVzZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCR1c2VyLT5hY3RpdmUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVc2VyIGFjY291bnQgaXMgbm90IGFjdGl2ZScpOwogICAgICAgIH0KICAgICAgICAkbG9naW5PcHMgPSBcQ01TTVNcTG9naW5PcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkbG9naW5PcHMtPmluaXRpYWxpemVfYXV0aGVudGljYXRpb24oJHVzZXIpOwogICAgICAgICRrZXkgPSAkbG9naW5PcHMtPmZpbmFsaXplX2F1dGhlbnRpY2F0aW9uKCR1c2VyKTsKICAgICAgICBhdWRpdCgkdXNlci0+aWQsICdBZG1pbiBVc2VybmFtZTogJyAuICR1c2VyLT51c2VybmFtZSwgJ0xvZ2dlZCBJbiB2aWEgTUFTX0F1dGhIdWInKTsKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZGlyZWN0QWZ0ZXJMb2dpbigpCiAgICB7CiAgICAgICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ2xvZ2luX3JlZGlyZWN0X3RvJ10pKSB7CiAgICAgICAgICAgICR1cmxfb2IgPSBuZXcgXGNtc191cmwoJF9TRVNTSU9OWydsb2dpbl9yZWRpcmVjdF90byddKTsKICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydsb2dpbl9yZWRpcmVjdF90byddKTsKICAgICAgICAgICAgJHVybF9vYi0+ZXJhc2VfcXVlcnl2YXIoJ19zXycpOwogICAgICAgICAgICAkdXJsX29iLT5lcmFzZV9xdWVyeXZhcignc3BfJyk7CiAgICAgICAgICAgICR1cmxfb2ItPnNldF9xdWVyeXZhcihDTVNfU0VDVVJFX1BBUkFNX05BTUUsICRfU0VTU0lPTltDTVNfVVNFUl9LRVldKTsKICAgICAgICAgICAgcmVkaXJlY3QoKHN0cmluZykgJHVybF9vYik7CiAgICAgICAgfQogICAgICAgICRob21lcGFnZSA9IFxjbXNfdXNlcnByZWZzOjpnZXRfZm9yX3VzZXIoJF9TRVNTSU9OWydjbXNfdXNlcmlkJ10sICdob21lcGFnZScpOwogICAgICAgIGlmICghJGhvbWVwYWdlKSB7CiAgICAgICAgICAgICRob21lcGFnZSA9ICRjb25maWdbJ2FkbWluX3VybCddOwogICAgICAgIH0KICAgICAgICAkaG9tZXBhZ2UgPSBcQ21zQWRtaW5VdGlsczo6Z2V0X3Nlc3Npb25fdXJsKCRob21lcGFnZSk7CiAgICAgICAgcmVkaXJlY3QoaHRtbF9lbnRpdHlfZGVjb2RlKCRob21lcGFnZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEh5YnJpZCBjb25maWc6IHNpdGUgY29uZmlnLnBocCBtYXNfYXV0aGh1YiBibG9jayArIG1vZHVsZSBwcmVmZXJlbmNlcy4KICovCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSkgewogICAgZXhpdDsKfQoKZmluYWwgY2xhc3MgTWFzX0FoX0NvbmZpZwp7CiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLG1peGVkPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpdGVCbG9jaygpCiAgICB7CiAgICAgICAgc3RhdGljICRibG9jayA9IG51bGw7CiAgICAgICAgaWYgKCRibG9jayAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJGJsb2NrOwogICAgICAgIH0KICAgICAgICAkYmxvY2sgPSBhcnJheSgpOwogICAgICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snbWFzX2F1dGhodWInXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1snbWFzX2F1dGhodWInXSkpIHsKICAgICAgICAgICAgJGJsb2NrID0gJGNvbmZpZ1snbWFzX2F1dGhodWInXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRibG9jazsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY3J5cHRpb25LZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJGJsb2NrID0gc2VsZjo6c2l0ZUJsb2NrKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J10pICYmIGlzX3N0cmluZygkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J10pKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkYmxvY2tbJ2VuY3J5cHRpb25fa2V5J107CiAgICAgICAgfQogICAgICAgICRwcmVmID0gKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuY3J5cHRpb25fa2V5X2hpbnQnLCAnJyk7CiAgICAgICAgaWYgKCRwcmVmICE9PSAnJykgewogICAgICAgICAgICByZXR1cm4gJHByZWY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25pbmdLZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJGJsb2NrID0gc2VsZjo6c2l0ZUJsb2NrKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkYmxvY2tbJ3NpZ25pbmdfa2V5J10pKSB7CiAgICAgICAgICAgIHJldHVybiBpc19zdHJpbmcoJGJsb2NrWydzaWduaW5nX2tleSddKSA/ICRibG9ja1snc2lnbmluZ19rZXknXSA6ICcnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3NpZ25pbmdfa2V5X3BhdGgnLCAnJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvdmlkZXJTZWNyZXQoQ01TTW9kdWxlICRtb2QsICRwcm92aWRlcktleSwgJHNlY3JldE5hbWUpCiAgICB7CiAgICAgICAgJHByb3ZpZGVyS2V5ID0gcHJlZ19yZXBsYWNlKCcvW15hLXowLTlfXC1dL2knLCAnJywgKHN0cmluZykgJHByb3ZpZGVyS2V5KTsKICAgICAgICAkc2VjcmV0TmFtZSA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05X1wtXS9pJywgJycsIChzdHJpbmcpICRzZWNyZXROYW1lKTsKICAgICAgICAkYmxvY2sgPSBzZWxmOjpzaXRlQmxvY2soKTsKICAgICAgICBpZiAoaXNzZXQoJGJsb2NrWydwcm92aWRlcnMnXVskcHJvdmlkZXJLZXldWyRzZWNyZXROYW1lXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRibG9ja1sncHJvdmlkZXJzJ11bJHByb3ZpZGVyS2V5XVskc2VjcmV0TmFtZV07CiAgICAgICAgfQogICAgICAgICRwcmVmS2V5ID0gJ21hc19haF9zZWNyZXRfJyAuICRwcm92aWRlcktleSAuICdfJyAuICRzZWNyZXROYW1lOwogICAgICAgICRlbmMgPSAoc3RyaW5nKSAkbW9kLT5HZXRQcmVmZXJlbmNlKCRwcmVmS2V5LCAnJyk7CiAgICAgICAgaWYgKCRlbmMgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE1hc19BaF9DcnlwdG86OmRlY3J5cHRQcmVmKCRtb2QsICRlbmMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsbGJhY2tCYXNlVXJsKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRjdXN0b20gPSB0cmltKChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9jYWxsYmFja19iYXNlJywgJycpKTsKICAgICAgICBpZiAoJGN1c3RvbSAhPT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIHJ0cmltKCRjdXN0b20sICcvJyk7CiAgICAgICAgfQogICAgICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgICAgICByZXR1cm4gcnRyaW0oKHN0cmluZykgJGNvbmZpZ1sncm9vdF91cmwnXSwgJy8nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1vZHVsZUFjdGlvblVybChDTVNNb2R1bGUgJG1vZCwgJGFjdGlvbiwgYXJyYXkgJGV4dHJhID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkcmV0dXJuaWQgPSAoaW50KSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZnJvbnRlbmRfcmV0dXJuaWQnLCAnMCcpOwogICAgICAgIGlmICgkcmV0dXJuaWQgPCAxKSB7CiAgICAgICAgICAgICRyZXR1cm5pZCA9IChpbnQpIGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRDb250ZW50KCk7CiAgICAgICAgfQogICAgICAgICRsaW5rSWQgPSAnY250bnQwMSc7CiAgICAgICAgaWYgKCRyZXR1cm5pZCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuICRtb2QtPkNyZWF0ZUxpbmsoJGxpbmtJZCwgJGFjdGlvbiwgJHJldHVybmlkLCAnJywgJGV4dHJhLCAnJywgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbW9kLT5DcmVhdGVMaW5rKCRsaW5rSWQsICRhY3Rpb24sICcnLCAnJywgJGV4dHJhLCAnJywgdHJ1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_crypto.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEFFUy0yNTYtR0NNIGVuY3J5cHRpb24gZm9yIHRva2VucyBhbmQgZW5jcnlwdGVkIHByZWZlcmVuY2VzLgogKi8KaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfQ3J5cHRvCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jcnlwdChDTVNNb2R1bGUgJG1vZCwgJHBsYWludGV4dCkKICAgIHsKICAgICAgICAkcGxhaW50ZXh0ID0gKHN0cmluZykgJHBsYWludGV4dDsKICAgICAgICBpZiAoJHBsYWludGV4dCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gc2VsZjo6ZGVyaXZlS2V5KCRtb2QpOwogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRpdiA9IHJhbmRvbV9ieXRlcygxMik7CiAgICAgICAgJHRhZyA9ICcnOwogICAgICAgICRjaXBoZXIgPSBvcGVuc3NsX2VuY3J5cHQoJHBsYWludGV4dCwgJ2Flcy0yNTYtZ2NtJywgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2LCAkdGFnKTsKICAgICAgICBpZiAoJGNpcGhlciA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkaXYgLiAkdGFnIC4gJGNpcGhlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNyeXB0KENNU01vZHVsZSAkbW9kLCAkcGF5bG9hZCkKICAgIHsKICAgICAgICAkcGF5bG9hZCA9IChzdHJpbmcpICRwYXlsb2FkOwogICAgICAgIGlmICgkcGF5bG9hZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gc2VsZjo6ZGVyaXZlS2V5KCRtb2QpOwogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRyYXcgPSBiYXNlNjRfZGVjb2RlKCRwYXlsb2FkLCB0cnVlKTsKICAgICAgICBpZiAoJHJhdyA9PT0gZmFsc2UgfHwgc3RybGVuKCRyYXcpIDwgMjgpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAkaXYgPSBzdWJzdHIoJHJhdywgMCwgMTIpOwogICAgICAgICR0YWcgPSBzdWJzdHIoJHJhdywgMTIsIDE2KTsKICAgICAgICAkY2lwaGVyID0gc3Vic3RyKCRyYXcsIDI4KTsKICAgICAgICAkcGxhaW4gPSBvcGVuc3NsX2RlY3J5cHQoJGNpcGhlciwgJ2Flcy0yNTYtZ2NtJywgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2LCAkdGFnKTsKICAgICAgICByZXR1cm4gJHBsYWluID09PSBmYWxzZSA/ICcnIDogJHBsYWluOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jcnlwdFByZWYoQ01TTW9kdWxlICRtb2QsICRwbGFpbnRleHQpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY3J5cHQoJG1vZCwgJHBsYWludGV4dCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNyeXB0UHJlZihDTVNNb2R1bGUgJG1vZCwgJHBheWxvYWQpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmRlY3J5cHQoJG1vZCwgJHBheWxvYWQpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaElwKCRpcCkKICAgIHsKICAgICAgICByZXR1cm4gaGFzaCgnc2hhMjU2JywgKHN0cmluZykgJGlwIC4gJ3xtYXNfYWgnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkZXJpdmVLZXkoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJG1hdGVyaWFsID0gTWFzX0FoX0NvbmZpZzo6ZW5jcnlwdGlvbktleSgkbW9kKTsKICAgICAgICBpZiAoJG1hdGVyaWFsID09PSAnJykgewogICAgICAgICAgICAkbWF0ZXJpYWwgPSAoc3RyaW5nKSBjbXNfc2l0ZXByZWZzOjpnZXQoJ01BU19BdXRoSHViX2ZhbGxiYWNrX2tleScpOwogICAgICAgICAgICBpZiAoJG1hdGVyaWFsID09PSAnJykgewogICAgICAgICAgICAgICAgJG1hdGVyaWFsID0gYmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKICAgICAgICAgICAgICAgIGNtc19zaXRlcHJlZnM6OnNldCgnTUFTX0F1dGhIdWJfZmFsbGJhY2tfa2V5JywgJG1hdGVyaWFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzaCgnc2hhMjU2JywgJG1hdGVyaWFsLCB0cnVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEF1dG9sb2FkIEF1dGhIdWIgbGlicmFyeSBjbGFzc2VzIChubyBDb21wb3NlciByZXF1aXJlZCBmb3IgY29yZSkuCiAqLwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCmlmIChkZWZpbmVkKCdNQVNfQUhfTE9BREVSX0RPTkUnKSkgewogICAgcmV0dXJuOwp9CmRlZmluZSgnTUFTX0FIX0xPQURFUl9ET05FJywgdHJ1ZSk7CgokYmFzZSA9IGRpcm5hbWUoX19GSUxFX18pOwokZmlsZXMgPSBhcnJheSgKICAgICdtYXNfYWhfdGFibGVzLnBocCcsCiAgICAnbWFzX2FoX2NvbmZpZy5waHAnLAogICAgJ21hc19haF9jcnlwdG8ucGhwJywKICAgICdtYXNfYWhfYXVkaXQucGhwJywKICAgICdtYXNfYWhfdXNlcl9saW5rLnBocCcsCiAgICAnbWFzX2FoX3Nlc3Npb24ucGhwJywKICAgICdtYXNfYWhfdG9rZW5fc3RvcmUucGhwJywKICAgICdtYXNfYWhfcG9saWN5LnBocCcsCiAgICAnbWFzX2FoX2Ntc19sb2dpbi5waHAnLAogICAgJ21hc19haF9hZG1pbl9sb2dpbl91aS5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX0RyaXZlckludGVyZmFjZS5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX0RyaXZlclJlZ2lzdHJ5LnBocCcsCiAgICAnZHJpdmVycy9NYXNfQWhfT0F1dGgyQ2xpZW50RHJpdmVyLnBocCcsCiAgICAnZHJpdmVycy9NYXNfQWhfT2lkY0RyaXZlci5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX1NhbWxTcERyaXZlci5waHAnLAogICAgJ2RyaXZlcnMvTWFzX0FoX1dlYkF1dGhuRHJpdmVyLnBocCcsCiAgICAnc2VydmVyL21hc19haF9qd3QucGhwJywKICAgICdzZXJ2ZXIvbWFzX2FoX29hdXRoX3NlcnZlci5waHAnLAogICAgJ3NlcnZlci9tYXNfYWhfb2lkY19kaXNjb3ZlcnkucGhwJywKICAgICdtYXNfYWhfd2ViYXV0aG4ucGhwJywKICAgICdtYXNfYWhfcm91dGVyLnBocCcsCiAgICAnbWFzX2FoX21hbXNfcHJvdmlzaW9uZXIucGhwJywKICAgICdtYXNfYWhfbWFtc19ldmVudHMucGhwJywKICAgICdtYXNfYWhfbWFtc19yZWdpc3RyYXRpb24ucGhwJywKKTsKCmZvcmVhY2ggKCRmaWxlcyBhcyAkZikgewogICAgJHBhdGggPSAkYmFzZSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZjsKICAgIGlmIChpc19yZWFkYWJsZSgkcGF0aCkpIHsKICAgICAgICByZXF1aXJlX29uY2UgJHBhdGg7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_events.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc0V2ZW50cwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ2luRmFpbGVkJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ2luJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNUycsICdPbkxvZ291dCcsIGZhbHNlKTsKICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVMnLCAnT25DcmVhdGVVc2VyJywgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlKENNU01vZHVsZSAkbW9kLCAkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJG9yaWdpbmF0b3IgIT09ICdNQU1TJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoJGV2ZW50bmFtZSkgewogICAgICAgICAgICBjYXNlICdPbkxvZ2luRmFpbGVkJzoKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmxvZ2luX2ZhaWxlZCcsICd3YXJuaW5nJywgJHBhcmFtcywgMCwgMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnT25Mb2dpbic6CiAgICAgICAgICAgICAgICAkdWlkID0gaXNzZXQoJHBhcmFtc1snaWQnXSkgPyAoaW50KSAkcGFyYW1zWydpZCddIDogMDsKICAgICAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmxvZ2luJywgJ2luZm8nLCAkcGFyYW1zLCAkdWlkLCAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdPbkxvZ291dCc6CiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0dXMoKSA9PT0gUEhQX1NFU1NJT05fQUNUSVZFICYmIGlzc2V0KCRfU0VTU0lPTlsnbWFzX2FoX3NpZCddKSkgewogICAgICAgICAgICAgICAgICAgIE1hc19BaF9TZXNzaW9uOjpyZXZva2UoJG1vZCwgKHN0cmluZykgJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zTG9nb3V0JywgJHBhcmFtcyk7CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy5sb2dvdXQnLCAnaW5mbycsICRwYXJhbXMsIDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ09uQ3JlYXRlVXNlcic6CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy51c2VyX2NyZWF0ZWQnLCAnaW5mbycsICRwYXJhbXMsIGlzc2V0KCRwYXJhbXNbJ2lkJ10pID8gKGludCkgJHBhcmFtc1snaWQnXSA6IDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_provisioner.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFtc01vZHVsZSgpCiAgICB7CiAgICAgICAgJG0gPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01BTVMnKTsKICAgICAgICByZXR1cm4gJG0gPyAkbSA6IG51bGw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm92aXNpb25PckxpbmsoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRzdWIsICRlbWFpbCkKICAgIHsKICAgICAgICAkbWFtcyA9IHNlbGY6Om1hbXNNb2R1bGUoKTsKICAgICAgICBpZiAoISRtYW1zKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkcHJvcE5hbWUgPSBzZWxmOjpjb25uZWN0aW5nUHJvcGVydHkoJHByb3ZpZGVyKTsKICAgICAgICAkZXhpc3RpbmcgPSBzZWxmOjpmaW5kTWFtc1VzZXJCeVByb3BlcnR5KCRtYW1zLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIGlmICgkZXhpc3RpbmcgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhpc3Rpbmc7CiAgICAgICAgfQogICAgICAgIGlmICgkZW1haWwgIT09ICcnKSB7CiAgICAgICAgICAgICRieUVtYWlsID0gc2VsZjo6ZmluZE1hbXNVc2VyQnlFbWFpbCgkbWFtcywgJGVtYWlsKTsKICAgICAgICAgICAgaWYgKCRieUVtYWlsID4gMCkgewogICAgICAgICAgICAgICAgc2VsZjo6c2V0Q29ubmVjdGluZ1Byb3BlcnR5KCRtYW1zLCAkYnlFbWFpbCwgJHByb3BOYW1lLCAkc3ViKTsKICAgICAgICAgICAgICAgIHJldHVybiAkYnlFbWFpbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkaml0ID0gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfaml0X2NyZWF0ZScsICcxJyk7CiAgICAgICAgaWYgKCRqaXQgIT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpqaXRDcmVhdGUoJG1vZCwgJG1hbXMsICRwcm92aWRlciwgJHByb2ZpbGUsICRzdWIsICRlbWFpbCwgJHByb3BOYW1lKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbmFsaXplTWFtc0xvZ2luKENNU01vZHVsZSAkbW9kLCAkbWFtc1VpZCwgYXJyYXkgJHByb3ZpZGVyLCAkc3ViKQogICAgewogICAgICAgICRtYW1zID0gc2VsZjo6bWFtc01vZHVsZSgpOwogICAgICAgIGlmICghJG1hbXMpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkcHJvcE5hbWUgPSBzZWxmOjpjb25uZWN0aW5nUHJvcGVydHkoJHByb3ZpZGVyKTsKICAgICAgICBzZWxmOjpzZXRDb25uZWN0aW5nUHJvcGVydHkoJG1hbXMsICRtYW1zVWlkLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0U2Vzc2lvblVzZXInKSkgewogICAgICAgICAgICAkbWFtcy0+U2V0U2Vzc2lvblVzZXIoJG1hbXNVaWQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb25uZWN0aW5nUHJvcGVydHkoYXJyYXkgJHByb3ZpZGVyKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgaWYgKCFlbXB0eSgkY2ZnWydtYW1zX2Nvbm5lY3RpbmdfcHJvcGVydHknXSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRjZmdbJ21hbXNfY29ubmVjdGluZ19wcm9wZXJ0eSddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2F1dGhodWJfJyAuIHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vaScsICdfJywgKHN0cmluZykgKCRwcm92aWRlclsnbmFtZSddID8/ICdwcm92aWRlcicpKSAuICdfc3ViJzsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5kTWFtc1VzZXJCeVByb3BlcnR5KCRtYW1zLCAkcHJvcE5hbWUsICRzdWIpCiAgICB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklERnJvbVByb3BlcnR5JykpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgICR1aWQgPSAkbWFtcy0+R2V0VXNlcklERnJvbVByb3BlcnR5KCRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgcmV0dXJuICR1aWQgPyAoaW50KSAkdWlkIDogMDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5kTWFtc1VzZXJCeUVtYWlsKCRtYW1zLCAkZW1haWwpCiAgICB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklERnJvbVByb3BlcnR5JykpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgICR1aWQgPSAkbWFtcy0+R2V0VXNlcklERnJvbVByb3BlcnR5KCdlbWFpbCcsICRlbWFpbCk7CiAgICAgICAgaWYgKCR1aWQpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpICR1aWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHNldENvbm5lY3RpbmdQcm9wZXJ0eSgkbWFtcywgJHVpZCwgJHByb3BOYW1lLCAkc3ViKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0VXNlclByb3BlcnR5RnVsbCcpKSB7CiAgICAgICAgICAgICRtYW1zLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR1aWQsICRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgfQogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnU2V0VXNlclByb3BlcnR5JykpIHsKICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eSgkdWlkLCAkcHJvcE5hbWUsICRzdWIpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBqaXRDcmVhdGUoQ01TTW9kdWxlICRtb2QsICRtYW1zLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRwcm9maWxlLCAkc3ViLCAkZW1haWwsICRwcm9wTmFtZSkKICAgIHsKICAgICAgICAkdXNlcm5hbWUgPSBzZWxmOjp1bmlxdWVVc2VybmFtZSgkbWFtcywgJGVtYWlsLCAkc3ViKTsKICAgICAgICAkcGFzc3dvcmQgPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygxNikpOwogICAgICAgICR1aWQgPSAwOwogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnQWRkVXNlcicpKSB7CiAgICAgICAgICAgICR1aWQgPSAoaW50KSAkbWFtcy0+QWRkVXNlcigkdXNlcm5hbWUsICRwYXNzd29yZCwgJGVtYWlsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCR1aWQgPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkZ3JvdXBzID0gc2VsZjo6ZGVmYXVsdEdyb3VwcygkbW9kLCAkcHJvdmlkZXIpOwogICAgICAgIGZvcmVhY2ggKCRncm91cHMgYXMgJGdpZCkgewogICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkbWFtcywgJ0Fzc2lnblVzZXJUb0dyb3VwJykpIHsKICAgICAgICAgICAgICAgICRtYW1zLT5Bc3NpZ25Vc2VyVG9Hcm91cCgkdWlkLCAkZ2lkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxmOjpzZXRDb25uZWN0aW5nUHJvcGVydHkoJG1hbXMsICR1aWQsICRwcm9wTmFtZSwgJHN1Yik7CiAgICAgICAgJG5hbWUgPSBpc3NldCgkcHJvZmlsZVsnbmFtZSddKSA/IChzdHJpbmcpICRwcm9maWxlWyduYW1lJ10gOiAkdXNlcm5hbWU7CiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJG1hbXMsICdTZXRVc2VyUHJvcGVydHlGdWxsJykpIHsKICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoJHVpZCwgJ2Rpc3BsYXlfbmFtZScsICRuYW1lKTsKICAgICAgICAgICAgaWYgKCRlbWFpbCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRtYW1zLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR1aWQsICdlbWFpbCcsICRlbWFpbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1hbXMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoJHVpZCwgJ2F1dGhodWJfcHJvdmlkZXInLCAoc3RyaW5nKSAoJHByb3ZpZGVyWyduYW1lJ10gPz8gJycpKTsKICAgICAgICB9CiAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zVXNlclByb3Zpc2lvbmVkJywgYXJyYXkoCiAgICAgICAgICAgICdtYW1zX3VpZCcgPT4gJHVpZCwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdjcmVhdGVkJyA9PiB0cnVlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdtYW1zLmppdF9jcmVhdGVkJywgJ2luZm8nLCBhcnJheSgndXNlcm5hbWUnID0+ICR1c2VybmFtZSksICR1aWQsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgcmV0dXJuICR1aWQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdW5pcXVlVXNlcm5hbWUoJG1hbXMsICRlbWFpbCwgJHN1YikKICAgIHsKICAgICAgICAkYmFzZSA9ICd1c2VyJzsKICAgICAgICBpZiAoJGVtYWlsICE9PSAnJyAmJiBzdHJwb3MoJGVtYWlsLCAnQCcpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkYmFzZSA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vaScsICdfJywgc3Ryc3RyKCRlbWFpbCwgJ0AnLCB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIGlmICgkYmFzZSA9PT0gJycpIHsKICAgICAgICAgICAgJGJhc2UgPSAnYXV0aGh1Yic7CiAgICAgICAgfQogICAgICAgICRjYW5kaWRhdGUgPSBzdWJzdHIoJGJhc2UsIDAsIDQwKTsKICAgICAgICAkbiA9IDA7CiAgICAgICAgd2hpbGUgKCRuIDwgMTAwKSB7CiAgICAgICAgICAgICR0cnkgPSAkY2FuZGlkYXRlIC4gKCRuID4gMCA/IChzdHJpbmcpICRuIDogJycpOwogICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkbWFtcywgJ0lzVmFsaWRVc2VybmFtZScpICYmICRtYW1zLT5Jc1ZhbGlkVXNlcm5hbWUoJHRyeSkpIHsKICAgICAgICAgICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtYW1zLCAnR2V0VXNlcklEJykgJiYgISRtYW1zLT5HZXRVc2VySUQoJHRyeSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRyeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbisrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2F1dGhodWJfJyAuIHN1YnN0cigkc3ViLCAwLCAxMik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVmYXVsdEdyb3VwcyhDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgaWYgKCFlbXB0eSgkY2ZnWydtYW1zX2RlZmF1bHRfZ3JvdXBzJ10pICYmIGlzX2FycmF5KCRjZmdbJ21hbXNfZGVmYXVsdF9ncm91cHMnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5X21hcCgnaW50dmFsJywgJGNmZ1snbWFtc19kZWZhdWx0X2dyb3VwcyddKTsKICAgICAgICB9CiAgICAgICAgJHJhdyA9IHRyaW0oKHN0cmluZykgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfZGVmYXVsdF9ncm91cHMnLCAnJykpOwogICAgICAgIGlmICgkcmF3ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ2ludHZhbCcsIGV4cGxvZGUoJywnLCAkcmF3KSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_mams_registration.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfTWFtc1JlZ2lzdHJhdGlvbgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgIGlmICghY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQU1TUmVnaXN0cmF0aW9uJykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVNSZWdpc3RyYXRpb24nLCAnYmVmb3JlTmV3VXNlcicsIGZhbHNlKTsKICAgICAgICAkbW9kLT5BZGRFdmVudEhhbmRsZXIoJ01BTVNSZWdpc3RyYXRpb24nLCAnb25OZXdVc2VyJywgZmFsc2UpOwogICAgICAgICRtb2QtPkFkZEV2ZW50SGFuZGxlcignTUFNU1JlZ2lzdHJhdGlvbicsICdvblVzZXJSZWdpc3RlcmVkJywgZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlKENNU01vZHVsZSAkbW9kLCAkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKCRvcmlnaW5hdG9yICE9PSAnTUFNU1JlZ2lzdHJhdGlvbicpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKCRldmVudG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnYmVmb3JlTmV3VXNlcic6CiAgICAgICAgICAgICAgICBzZWxmOjpiZWZvcmVOZXdVc2VyKCRtb2QsICRwYXJhbXMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29uTmV3VXNlcic6CiAgICAgICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtc3JlZy50ZW1wX3VzZXInLCAnaW5mbycsICRwYXJhbXMsIDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29uVXNlclJlZ2lzdGVyZWQnOgogICAgICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ21hbXNyZWcucmVnaXN0ZXJlZCcsICdpbmZvJywgJHBhcmFtcywgaXNzZXQoJHBhcmFtc1snaWQnXSkgPyAoaW50KSAkcGFyYW1zWydpZCddIDogMCwgMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gYmVmb3JlTmV3VXNlcihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9ibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJywgJzAnKSAhPT0gMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRlbWFpbCA9IGlzc2V0KCRwYXJhbXNbJ2VtYWlsJ10pID8gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICRwYXJhbXNbJ2VtYWlsJ10pKSA6ICcnOwogICAgICAgIGlmICgkZW1haWwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJGxpbmsgPSBNYXNfQWhfVXNlckxpbms6OmZpbmRCeUVtYWlsKCRtb2QsICRlbWFpbCwgMCk7CiAgICAgICAgaWYgKCRsaW5rICYmICgoaW50KSAoJGxpbmtbJ21hbXNfdXNlcl9pZCddID8/IDApID4gMCkpIHsKICAgICAgICAgICAgJG1zZyA9ICRtb2QtPkxhbmcoJ2Vycm9yX2VtYWlsX3Nzb19saW5rZWQnKTsKICAgICAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTUFNU1JFR1ZhbGlkYXRpb25FcnJvcicpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTUFNU1JFR1ZhbGlkYXRpb25FcnJvcigkbXNnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkbXNnOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_policy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfUG9saWN5CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxsb3dBZG1pblNzbyhDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9hZG1pbl9zc28nLCAnMScpID09PSAxOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxsb3dNYW1zU3NvKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgIHJldHVybiAoaW50KSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfZW5hYmxlX21hbXNfc3NvJywgJzEnKSA9PT0gMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF1dG9MaW5rQnlFbWFpbChDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2F1dG9fbGlua19lbWFpbCcsICcxJykgPT09IDE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYXRlTGltaXRBbGxvdyhDTVNNb2R1bGUgJG1vZCwgJGJ1Y2tldCkKICAgIHsKICAgICAgICAkbWF4ID0gKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JhdGVfcGVyX2hvdXInLCAnNjAnKTsKICAgICAgICBpZiAoJG1heCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRrZXkgPSAnbWFzX2FoX3JsXycgLiBtZDUoKHN0cmluZykgJGJ1Y2tldCk7CiAgICAgICAgJHJhdyA9IChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJGtleSwgJycpOwogICAgICAgICRub3cgPSB0aW1lKCk7CiAgICAgICAgJHdpbmRvdyA9IDM2MDA7CiAgICAgICAgJGRhdGEgPSBhcnJheSgndCcgPT4gJG5vdywgJ2MnID0+IDApOwogICAgICAgIGlmICgkcmF3ICE9PSAnJykgewogICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRyYXcsIHRydWUpOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGRlY29kZWQpKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRkZWNvZGVkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3QnXSkgfHwgKCRub3cgLSAoaW50KSAkZGF0YVsndCddKSA+ICR3aW5kb3cpIHsKICAgICAgICAgICAgJGRhdGEgPSBhcnJheSgndCcgPT4gJG5vdywgJ2MnID0+IDApOwogICAgICAgIH0KICAgICAgICAkZGF0YVsnYyddID0gKGludCkgKCRkYXRhWydjJ10gPz8gMCkgKyAxOwogICAgICAgICRtb2QtPlNldFByZWZlcmVuY2UoJGtleSwganNvbl9lbmNvZGUoJGRhdGEpKTsKICAgICAgICByZXR1cm4gJGRhdGFbJ2MnXSA8PSAkbWF4OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY21zVXNlckFsbG93ZWQoQ01TTW9kdWxlICRtb2QsICR1c2VyKQogICAgewogICAgICAgIGlmICghJHVzZXIgfHwgZW1wdHkoJHVzZXItPmlkKSB8fCBlbXB0eSgkdXNlci0+YWN0aXZlKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgICRhbGxvd2VkID0gdHJpbSgoc3RyaW5nKSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fYWxsb3dlZF9ncm91cHMnLCAnJykpOwogICAgICAgIGlmICgkYWxsb3dlZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRpZHMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCBleHBsb2RlKCcsJywgJGFsbG93ZWQpKSk7CiAgICAgICAgaWYgKGNvdW50KCRpZHMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAkZ3JvdXBzID0gJHVzZXItPmdyb3VwcyA/PyBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRpZHMgYXMgJGdpZCkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGdpZCwgJGdyb3VwcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_router.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfUm91dGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhcnRPQXV0aChDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQsICRyZXR1cm5UeXBlID0gJ21hbXMnKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6cmF0ZUxpbWl0QWxsb3coJG1vZCwgJ29hdXRoX3N0YXJ0XycgLiBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdyYXRlX2xpbWl0ZWQnKTsKICAgICAgICB9CiAgICAgICAgJHByb3ZpZGVyID0gTWFzX0FoX0RyaXZlclJlZ2lzdHJ5OjpnZXRQcm92aWRlcigkbW9kLCAkcHJvdmlkZXJJZCk7CiAgICAgICAgaWYgKCEkcHJvdmlkZXIgfHwgIShpbnQpICRwcm92aWRlclsnZW5hYmxlZCddKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdpbnZhbGlkX3Byb3ZpZGVyJyk7CiAgICAgICAgfQogICAgICAgICRkcml2ZXIgPSBNYXNfQWhfRHJpdmVyUmVnaXN0cnk6OmdldCgoc3RyaW5nKSAkcHJvdmlkZXJbJ2RyaXZlciddKTsKICAgICAgICBpZiAoISRkcml2ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfZHJpdmVyJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZXNzaW9uX3N0YXR1cygpICE9PSBQSFBfU0VTU0lPTl9BQ1RJVkUpIHsKICAgICAgICAgICAgQHNlc3Npb25fc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgJHJldHVyblR5cGUgPSBpbl9hcnJheSgkcmV0dXJuVHlwZSwgYXJyYXkoJ2FkbWluJywgJ21hbXMnKSwgdHJ1ZSkgPyAkcmV0dXJuVHlwZSA6ICdtYW1zJzsKICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdhZG1pbicgJiYgIU1hc19BaF9Qb2xpY3k6OmFsbG93QWRtaW5Tc28oJG1vZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2FkbWluX3Nzb19kaXNhYmxlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdtYW1zJyAmJiAhTWFzX0FoX1BvbGljeTo6YWxsb3dNYW1zU3NvKCRtb2QpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdtYW1zX3Nzb19kaXNhYmxlZCcpOwogICAgICAgIH0KICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID0gJHJldHVyblR5cGU7CiAgICAgICAgJHVybCA9ICRkcml2ZXItPmdldEF1dGhvcml6YXRpb25VcmwoJG1vZCwgJHByb3ZpZGVyLCBhcnJheSgncmV0dXJuX3R5cGUnID0+ICRyZXR1cm5UeXBlKSk7CiAgICAgICAgaWYgKCR1cmwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdhdXRob3JpemVfdXJsX2ZhaWxlZCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ3JlZGlyZWN0JyA9PiAkdXJsKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkT0F1dGhBdXRob3JpemVVcmwoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJGNvbnRleHQsICRvaWRjKQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJGF1dGhVcmwgPSBpc3NldCgkY2ZnWydhdXRob3JpemVfdXJsJ10pID8gKHN0cmluZykgJGNmZ1snYXV0aG9yaXplX3VybCddIDogJyc7CiAgICAgICAgJGNsaWVudElkID0gaXNzZXQoJGNmZ1snY2xpZW50X2lkJ10pID8gKHN0cmluZykgJGNmZ1snY2xpZW50X2lkJ10gOiAnJzsKICAgICAgICBpZiAoJGF1dGhVcmwgPT09ICcnIHx8ICRjbGllbnRJZCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0dXMoKSAhPT0gUEhQX1NFU1NJT05fQUNUSVZFKSB7CiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDE2KSk7CiAgICAgICAgJHZlcmlmaWVyID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTsKICAgICAgICAkY2hhbGxlbmdlID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShoYXNoKCdzaGEyNTYnLCAkdmVyaWZpZXIsIHRydWUpKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSA9ICRzdGF0ZTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9wa2NlJ10gPSAkdmVyaWZpZXI7CiAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcHJvdmlkZXInXSA9IChpbnQpICRwcm92aWRlclsnaWQnXTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID0gaXNzZXQoJGNvbnRleHRbJ3JldHVybl90eXBlJ10pID8gKHN0cmluZykgJGNvbnRleHRbJ3JldHVybl90eXBlJ10gOiAnbWFtcyc7CiAgICAgICAgJHJlZGlyZWN0VXJpID0gTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKCRtb2QsICdvYXV0aF9jYWxsYmFjaycsIGFycmF5KAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSwKICAgICAgICApKTsKICAgICAgICAkc2NvcGUgPSBpc3NldCgkY2ZnWydzY29wZSddKSA/IChzdHJpbmcpICRjZmdbJ3Njb3BlJ10gOiAoJG9pZGMgPyAnb3BlbmlkIHByb2ZpbGUgZW1haWwnIDogJ3Byb2ZpbGUgZW1haWwnKTsKICAgICAgICAkcGFyYW1zID0gYXJyYXkoCiAgICAgICAgICAgICdjbGllbnRfaWQnID0+ICRjbGllbnRJZCwKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGUnID0+ICdjb2RlJywKICAgICAgICAgICAgJ3JlZGlyZWN0X3VyaScgPT4gJHJlZGlyZWN0VXJpLAogICAgICAgICAgICAnc2NvcGUnID0+ICRzY29wZSwKICAgICAgICAgICAgJ3N0YXRlJyA9PiAkc3RhdGUsCiAgICAgICAgICAgICdjb2RlX2NoYWxsZW5nZScgPT4gJGNoYWxsZW5nZSwKICAgICAgICAgICAgJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCcgPT4gJ1MyNTYnLAogICAgICAgICk7CiAgICAgICAgaWYgKCRvaWRjICYmICFlbXB0eSgkY2ZnWydub25jZSddKSkgewogICAgICAgICAgICAkcGFyYW1zWydub25jZSddID0gYmluMmhleChyYW5kb21fYnl0ZXMoOCkpOwogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9ub25jZSddID0gJHBhcmFtc1snbm9uY2UnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRhdXRoVXJsIC4gKHN0cnBvcygkYXV0aFVybCwgJz8nKSA9PT0gZmFsc2UgPyAnPycgOiAnJicpIC4gaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZU9BdXRoQ2FsbGJhY2soQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJGNvbnRleHQsICRvaWRjKQogICAgewogICAgICAgIGlmICghTWFzX0FoX1BvbGljeTo6cmF0ZUxpbWl0QWxsb3coJG1vZCwgJ29hdXRoX2NiXycgLiBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdyYXRlX2xpbWl0ZWQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICAkc3RhdGUgPSBpc3NldCgkcGFyYW1zWydzdGF0ZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3N0YXRlJ10gOiAnJzsKICAgICAgICBpZiAoJHN0YXRlID09PSAnJyB8fCAhaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSkgfHwgIWhhc2hfZXF1YWxzKCRfU0VTU0lPTlsnbWFzX2FoX29hdXRoX3N0YXRlJ10sICRzdGF0ZSkpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ29hdXRoLnN0YXRlX21pc21hdGNoJywgJ2Vycm9yJywgYXJyYXkoKSwgMCwgKGludCkgJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ2ludmFsaWRfc3RhdGUnKTsKICAgICAgICB9CiAgICAgICAgJGNvZGUgPSBpc3NldCgkcGFyYW1zWydjb2RlJ10pID8gKHN0cmluZykgJHBhcmFtc1snY29kZSddIDogJyc7CiAgICAgICAgaWYgKCRjb2RlID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbWlzc2luZ19jb2RlJyk7CiAgICAgICAgfQogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJHRva2VuVXJsID0gaXNzZXQoJGNmZ1sndG9rZW5fdXJsJ10pID8gKHN0cmluZykgJGNmZ1sndG9rZW5fdXJsJ10gOiAnJzsKICAgICAgICAkY2xpZW50SWQgPSBpc3NldCgkY2ZnWydjbGllbnRfaWQnXSkgPyAoc3RyaW5nKSAkY2ZnWydjbGllbnRfaWQnXSA6ICcnOwogICAgICAgICRwa2V5ID0gaXNzZXQoJHByb3ZpZGVyWydwcm92aWRlcl9rZXknXSkgPyAkcHJvdmlkZXJbJ3Byb3ZpZGVyX2tleSddIDogKCdwcm92aWRlcl8nIC4gJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAkY2xpZW50U2VjcmV0ID0gKHN0cmluZykgTWFzX0FoX0NvbmZpZzo6Z2V0UHJvdmlkZXJTZWNyZXQoJG1vZCwgJHBrZXksICdjbGllbnRfc2VjcmV0Jyk7CiAgICAgICAgJHZlcmlmaWVyID0gaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcGtjZSddKSA/IChzdHJpbmcpICRfU0VTU0lPTlsnbWFzX2FoX29hdXRoX3BrY2UnXSA6ICcnOwogICAgICAgICRyZWRpcmVjdFVyaSA9IE1hc19BaF9Db25maWc6Om1vZHVsZUFjdGlvblVybCgkbW9kLCAnb2F1dGhfY2FsbGJhY2snLCBhcnJheSgncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSkpOwogICAgICAgICR0b2tlbkJvZHkgPSBzZWxmOjpodHRwUG9zdEZvcm0oJHRva2VuVXJsLCBhcnJheSgKICAgICAgICAgICAgJ2dyYW50X3R5cGUnID0+ICdhdXRob3JpemF0aW9uX2NvZGUnLAogICAgICAgICAgICAnY29kZScgPT4gJGNvZGUsCiAgICAgICAgICAgICdyZWRpcmVjdF91cmknID0+ICRyZWRpcmVjdFVyaSwKICAgICAgICAgICAgJ2NsaWVudF9pZCcgPT4gJGNsaWVudElkLAogICAgICAgICAgICAnY2xpZW50X3NlY3JldCcgPT4gJGNsaWVudFNlY3JldCwKICAgICAgICAgICAgJ2NvZGVfdmVyaWZpZXInID0+ICR2ZXJpZmllciwKICAgICAgICApKTsKICAgICAgICBpZiAoIWlzX2FycmF5KCR0b2tlbkJvZHkpIHx8IGVtcHR5KCR0b2tlbkJvZHlbJ2FjY2Vzc190b2tlbiddKSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnb2F1dGgudG9rZW5fZmFpbGVkJywgJ2Vycm9yJywgYXJyYXkoJ2h0dHAnID0+IGlzX2FycmF5KCR0b2tlbkJvZHkpID8gJ2VtcHR5JyA6ICdmYWlsJyksIDAsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgICAgIE1hc19BaF9TZXNzaW9uOjpjbGVhck9BdXRoU3RhdGUoKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ3Rva2VuX2V4Y2hhbmdlX2ZhaWxlZCcpOwogICAgICAgIH0KICAgICAgICAkcHJvZmlsZSA9IHNlbGY6OmZldGNoVXNlclByb2ZpbGUoJGNmZywgJHRva2VuQm9keSwgJG9pZGMpOwogICAgICAgIE1hc19BaF9TZXNzaW9uOjpjbGVhck9BdXRoU3RhdGUoKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmluYWxpemVGZWRlcmF0ZWRMb2dpbigkbW9kLCAkcHJvdmlkZXIsICRwcm9maWxlLCAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddID8/ICdtYW1zJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hVc2VyUHJvZmlsZShhcnJheSAkY2ZnLCBhcnJheSAkdG9rZW5Cb2R5LCAkb2lkYykKICAgIHsKICAgICAgICAkc3ViID0gJyc7CiAgICAgICAgJGVtYWlsID0gJyc7CiAgICAgICAgJG5hbWUgPSAnJzsKICAgICAgICBpZiAoJG9pZGMgJiYgIWVtcHR5KCR0b2tlbkJvZHlbJ2lkX3Rva2VuJ10pKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy4nLCAoc3RyaW5nKSAkdG9rZW5Cb2R5WydpZF90b2tlbiddKTsKICAgICAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPj0gMikgewogICAgICAgICAgICAgICAgJHBheWxvYWQgPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKHN0cnRyKCRwYXJ0c1sxXSwgJy1fJywgJysvJykpLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkcGF5bG9hZCkpIHsKICAgICAgICAgICAgICAgICAgICAkc3ViID0gaXNzZXQoJHBheWxvYWRbJ3N1YiddKSA/IChzdHJpbmcpICRwYXlsb2FkWydzdWInXSA6ICcnOwogICAgICAgICAgICAgICAgICAgICRlbWFpbCA9IGlzc2V0KCRwYXlsb2FkWydlbWFpbCddKSA/IChzdHJpbmcpICRwYXlsb2FkWydlbWFpbCddIDogJyc7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSBpc3NldCgkcGF5bG9hZFsnbmFtZSddKSA/IChzdHJpbmcpICRwYXlsb2FkWyduYW1lJ10gOiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHN1YiA9PT0gJycgJiYgIWVtcHR5KCRjZmdbJ3VzZXJpbmZvX3VybCddKSkgewogICAgICAgICAgICAkaW5mbyA9IHNlbGY6Omh0dHBHZXRKc29uKChzdHJpbmcpICRjZmdbJ3VzZXJpbmZvX3VybCddLCAoc3RyaW5nKSAkdG9rZW5Cb2R5WydhY2Nlc3NfdG9rZW4nXSk7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkaW5mbykpIHsKICAgICAgICAgICAgICAgICRzdWIgPSBpc3NldCgkaW5mb1snc3ViJ10pID8gKHN0cmluZykgJGluZm9bJ3N1YiddIDogKGlzc2V0KCRpbmZvWydpZCddKSA/IChzdHJpbmcpICRpbmZvWydpZCddIDogJycpOwogICAgICAgICAgICAgICAgaWYgKCRlbWFpbCA9PT0gJycgJiYgaXNzZXQoJGluZm9bJ2VtYWlsJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGVtYWlsID0gKHN0cmluZykgJGluZm9bJ2VtYWlsJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJG5hbWUgPT09ICcnICYmIGlzc2V0KCRpbmZvWyduYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSAoc3RyaW5nKSAkaW5mb1snbmFtZSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkc3ViID09PSAnJykgewogICAgICAgICAgICAkc3ViID0gaGFzaCgnc2hhMjU2JywgKHN0cmluZykgJHRva2VuQm9keVsnYWNjZXNzX3Rva2VuJ10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ3N1YicgPT4gJHN1YiwgJ2VtYWlsJyA9PiAkZW1haWwsICduYW1lJyA9PiAkbmFtZSwgJ3Rva2VuJyA9PiAkdG9rZW5Cb2R5KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbmFsaXplRmVkZXJhdGVkTG9naW4oQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRyZXR1cm5UeXBlKQogICAgewogICAgICAgICRyZXR1cm5UeXBlID0gaW5fYXJyYXkoJHJldHVyblR5cGUsIGFycmF5KCdhZG1pbicsICdtYW1zJyksIHRydWUpID8gJHJldHVyblR5cGUgOiAnbWFtcyc7CiAgICAgICAgJHN1YiA9IChzdHJpbmcpICgkcHJvZmlsZVsnc3ViJ10gPz8gJycpOwogICAgICAgICRlbWFpbCA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAoJHByb2ZpbGVbJ2VtYWlsJ10gPz8gJycpKSk7CiAgICAgICAgJGxpbmsgPSBNYXNfQWhfVXNlckxpbms6OmZpbmRCeUV4dGVybmFsKCRtb2QsIChpbnQpICRwcm92aWRlclsnaWQnXSwgJHN1Yik7CiAgICAgICAgaWYgKCEkbGluayAmJiAkZW1haWwgIT09ICcnICYmIE1hc19BaF9Qb2xpY3k6OmF1dG9MaW5rQnlFbWFpbCgkbW9kKSkgewogICAgICAgICAgICAkbGluayA9IE1hc19BaF9Vc2VyTGluazo6ZmluZEJ5RW1haWwoJG1vZCwgJGVtYWlsLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoJHJldHVyblR5cGUgPT09ICdhZG1pbicpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbmFsaXplQWRtaW4oJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpmaW5hbGl6ZU1hbXMoJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmluYWxpemVBZG1pbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHByb3ZpZGVyLCBhcnJheSAkcHJvZmlsZSwgJGxpbmssICRzdWIsICRlbWFpbCkKICAgIHsKICAgICAgICAkY21zVXNlcklkID0gJGxpbmsgPyAoaW50KSAoJGxpbmtbJ2Ntc191c2VyX2lkJ10gPz8gMCkgOiAwOwogICAgICAgIGlmICgkY21zVXNlcklkIDwgMSAmJiAkZW1haWwgIT09ICcnKSB7CiAgICAgICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkdSA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5VXNlcm5hbWUoJGVtYWlsKTsKICAgICAgICAgICAgaWYgKCR1ICYmICR1LT5pZCkgewogICAgICAgICAgICAgICAgJGNtc1VzZXJJZCA9IChpbnQpICR1LT5pZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGNtc1VzZXJJZCA8IDEpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ2FkbWluLmxvZ2luX25vX2xpbmsnLCAnd2FybmluZycsIGFycmF5KCdzdWInID0+ICRzdWIpLCAwLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbm9fYWRtaW5fYWNjb3VudCcpOwogICAgICAgIH0KICAgICAgICAkdXNlcm9wcyA9IFVzZXJPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkdXNlciA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5SUQoJGNtc1VzZXJJZCk7CiAgICAgICAgaWYgKCEkdXNlciB8fCAhTWFzX0FoX1BvbGljeTo6Y21zVXNlckFsbG93ZWQoJG1vZCwgJHVzZXIpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdhY2Nlc3NfZGVuaWVkJyk7CiAgICAgICAgfQogICAgICAgIE1hc19BaF9Vc2VyTGluazo6dXBzZXJ0KCRtb2QsIGFycmF5KAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IChpbnQpICRwcm92aWRlclsnaWQnXSwKICAgICAgICAgICAgJ2V4dGVybmFsX3N1YicgPT4gJHN1YiwKICAgICAgICAgICAgJ2Ntc191c2VyX2lkJyA9PiAkY21zVXNlcklkLAogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwKICAgICAgICAgICAgJ2F0dHJzX2pzb24nID0+ICRwcm9maWxlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9DbXNMb2dpbkJyaWRnZTo6bG9naW5DbXNVc2VyKCR1c2VyKTsKICAgICAgICBNYXNfQWhfU2Vzc2lvbjo6c3RhcnRIdWJTZXNzaW9uKCRtb2QsIGFycmF5KCdjbXNfdXNlcl9pZCcgPT4gJGNtc1VzZXJJZCwgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pKTsKICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnYWRtaW4uc3NvX3N1Y2Nlc3MnLCAnaW5mbycsIGFycmF5KCksICRjbXNVc2VySWQsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgcmV0dXJuIGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlLCAndHlwZScgPT4gJ2FkbWluJywgJ3JlZGlyZWN0X2FkbWluJyA9PiB0cnVlKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5hbGl6ZU1hbXMoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRwcm92aWRlciwgYXJyYXkgJHByb2ZpbGUsICRsaW5rLCAkc3ViLCAkZW1haWwpCiAgICB7CiAgICAgICAgJG1hbXNVaWQgPSAkbGluayA/IChpbnQpICgkbGlua1snbWFtc191c2VyX2lkJ10gPz8gMCkgOiAwOwogICAgICAgIGlmICgkbWFtc1VpZCA8IDEpIHsKICAgICAgICAgICAgJG1hbXNVaWQgPSBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyOjpwcm92aXNpb25PckxpbmsoJG1vZCwgJHByb3ZpZGVyLCAkcHJvZmlsZSwgJHN1YiwgJGVtYWlsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtYW1zVWlkIDwgMSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnbWFtcy5sb2dpbl9ub191c2VyJywgJ3dhcm5pbmcnLCBhcnJheSgnc3ViJyA9PiAkc3ViKSwgMCwgKGludCkgJHByb3ZpZGVyWydpZCddKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ25vX21hbXNfYWNjb3VudCcpOwogICAgICAgIH0KICAgICAgICBNYXNfQWhfVXNlckxpbms6OnVwc2VydCgkbW9kLCBhcnJheSgKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdleHRlcm5hbF9zdWInID0+ICRzdWIsCiAgICAgICAgICAgICdtYW1zX3VzZXJfaWQnID0+ICRtYW1zVWlkLAogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwKICAgICAgICAgICAgJ2F0dHJzX2pzb24nID0+ICRwcm9maWxlLAogICAgICAgICkpOwogICAgICAgIE1hc19BaF9NYW1zUHJvdmlzaW9uZXI6OmZpbmFsaXplTWFtc0xvZ2luKCRtb2QsICRtYW1zVWlkLCAkcHJvdmlkZXIsICRzdWIpOwogICAgICAgIE1hc19BaF9TZXNzaW9uOjpzdGFydEh1YlNlc3Npb24oJG1vZCwgYXJyYXkoJ21hbXNfdXNlcl9pZCcgPT4gJG1hbXNVaWQsICdwcm92aWRlcl9pZCcgPT4gKGludCkgJHByb3ZpZGVyWydpZCddKSk7CiAgICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdNQVNfQXV0aEh1Yjo6T25NYW1zTG9naW4nLCBhcnJheSgKICAgICAgICAgICAgJ21hbXNfdWlkJyA9PiAkbWFtc1VpZCwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10sCiAgICAgICAgICAgICdzdWInID0+ICRzdWIsCiAgICAgICAgKSk7CiAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ21hbXMuc3NvX3N1Y2Nlc3MnLCAnaW5mbycsIGFycmF5KCksICRtYW1zVWlkLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgIHJldHVybiBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSwgJ3R5cGUnID0+ICdtYW1zJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYW5kbGVTYW1sQWNzKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRwYXJhbXMsIGFycmF5ICRjb250ZXh0KQogICAgewogICAgICAgICRjZmcgPSAkcHJvdmlkZXJbJ2NvbmZpZyddID8/IGFycmF5KCk7CiAgICAgICAgJHBrZXkgPSBpc3NldCgkcHJvdmlkZXJbJ3Byb3ZpZGVyX2tleSddKSA/ICRwcm92aWRlclsncHJvdmlkZXJfa2V5J10gOiAoJ3Byb3ZpZGVyXycgLiAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICRhdXRvbG9hZCA9IGRpcm5hbWUoX19ESVJfXykgLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnOwogICAgICAgIGlmICghaXNfcmVhZGFibGUoJGF1dG9sb2FkKSkgewogICAgICAgICAgICBNYXNfQWhfQXVkaXQ6OmxvZygkbW9kLCAnc2FtbC52ZW5kb3JfbWlzc2luZycsICdlcnJvcicsIGFycmF5KCksIDAsIChpbnQpICRwcm92aWRlclsnaWQnXSk7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX25vdF9jb25maWd1cmVkJyk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ09uZUxvZ2luXFxTYW1sMlxcQXV0aCcpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX25vdF9jb25maWd1cmVkJyk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRzZXR0aW5ncyA9IHNlbGY6OmJ1aWxkU2FtbFNldHRpbmdzKCRtb2QsICRwcm92aWRlciwgJGNmZywgJHBrZXkpOwogICAgICAgICAgICAkYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5ncyk7CiAgICAgICAgICAgICRhdXRoLT5wcm9jZXNzUmVzcG9uc2UoKTsKICAgICAgICAgICAgaWYgKCEkYXV0aC0+aXNBdXRoZW50aWNhdGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdzYW1sX2F1dGhfZmFpbGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dHJzID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgJGVtYWlsID0gJyc7CiAgICAgICAgICAgIGlmIChpc3NldCgkYXR0cnNbJ2VtYWlsJ11bMF0pKSB7CiAgICAgICAgICAgICAgICAkZW1haWwgPSAoc3RyaW5nKSAkYXR0cnNbJ2VtYWlsJ11bMF07CiAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkYXR0cnNbJ2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyddWzBdKSkgewogICAgICAgICAgICAgICAgJGVtYWlsID0gKHN0cmluZykgJGF0dHJzWydodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MnXVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ViID0gKHN0cmluZykgJGF1dGgtPmdldE5hbWVJZCgpOwogICAgICAgICAgICAkcHJvZmlsZSA9IGFycmF5KCdzdWInID0+ICRzdWIsICdlbWFpbCcgPT4gJGVtYWlsLCAnbmFtZScgPT4gJHN1YiwgJ3NhbWwnID0+ICRhdHRycyk7CiAgICAgICAgICAgICRyZXR1cm5UeXBlID0gaXNzZXQoJF9TRVNTSU9OWydtYXNfYWhfcmV0dXJuX3R5cGUnXSkgPyAoc3RyaW5nKSAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddIDogJ21hbXMnOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6ZmluYWxpemVGZWRlcmF0ZWRMb2dpbigkbW9kLCAkcHJvdmlkZXIsICRwcm9maWxlLCAkcmV0dXJuVHlwZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtb2QsICdzYW1sLmV4Y2VwdGlvbicsICdlcnJvcicsIGFycmF5KCdtc2cnID0+ICRlLT5nZXRNZXNzYWdlKCkpLCAwLCAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnc2FtbF9lcnJvcicpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkU2FtbFNldHRpbmdzKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcHJvdmlkZXIsIGFycmF5ICRjZmcsICRwa2V5KQogICAgewogICAgICAgICRiYXNlID0gTWFzX0FoX0NvbmZpZzo6Y2FsbGJhY2tCYXNlVXJsKCRtb2QpOwogICAgICAgICRzcEVudGl0eUlkID0gaXNzZXQoJGNmZ1snc3BfZW50aXR5X2lkJ10pID8gKHN0cmluZykgJGNmZ1snc3BfZW50aXR5X2lkJ10gOiAkYmFzZSAuICcvbWFzLWF1dGhodWItc3AnOwogICAgICAgICRhY3MgPSBNYXNfQWhfQ29uZmlnOjptb2R1bGVBY3Rpb25VcmwoJG1vZCwgJ3NhbWxfYWNzJywgYXJyYXkoJ3Byb3ZpZGVyX2lkJyA9PiAoaW50KSAkcHJvdmlkZXJbJ2lkJ10pKTsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdkZWJ1ZycgPT4gZmFsc2UsCiAgICAgICAgICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnZW50aXR5SWQnID0+ICRzcEVudGl0eUlkLAogICAgICAgICAgICAgICAgJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJGFjcywKICAgICAgICAgICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2lkcCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnZW50aXR5SWQnID0+IGlzc2V0KCRjZmdbJ2lkcF9lbnRpdHlfaWQnXSkgPyAoc3RyaW5nKSAkY2ZnWydpZHBfZW50aXR5X2lkJ10gOiAnJywKICAgICAgICAgICAgICAgICdzaW5nbGVTaWduT25TZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAndXJsJyA9PiBpc3NldCgkY2ZnWydpZHBfc3NvX3VybCddKSA/IChzdHJpbmcpICRjZmdbJ2lkcF9zc29fdXJsJ10gOiAnJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAneDUwOWNlcnQnID0+IGlzc2V0KCRjZmdbJ2lkcF9jZXJ0J10pID8gKHN0cmluZykgJGNmZ1snaWRwX2NlcnQnXSA6ICcnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnc2VjdXJpdHknID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ3dhbnRBc3NlcnRpb25zU2lnbmVkJyA9PiB0cnVlLAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaHR0cFBvc3RGb3JtKCR1cmwsIGFycmF5ICRmaWVsZHMpCiAgICB7CiAgICAgICAgaWYgKCR1cmwgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybCk7CiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBhcnJheSgKICAgICAgICAgICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyA9PiBodHRwX2J1aWxkX3F1ZXJ5KCRmaWVsZHMpLAogICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAzMCwKICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IGFycmF5KCdBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nKSwKICAgICAgICApKTsKICAgICAgICAkYm9keSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGlmICgkYm9keSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRkZWNvZGVkID0ganNvbl9kZWNvZGUoJGJvZHksIHRydWUpOwogICAgICAgIHJldHVybiBpc19hcnJheSgkZGVjb2RlZCkgPyAkZGVjb2RlZCA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaHR0cEdldEpzb24oJHVybCwgJGFjY2Vzc1Rva2VuKQogICAgewogICAgICAgIGlmICgkdXJsID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgYXJyYXkoCiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+IDMwLAogICAgICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbjogQmVhcmVyICcgLiAkYWNjZXNzVG9rZW4sCiAgICAgICAgICAgICAgICAnQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgKSwKICAgICAgICApKTsKICAgICAgICAkYm9keSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGlmICgkYm9keSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRkZWNvZGVkID0ganNvbl9kZWNvZGUoJGJvZHksIHRydWUpOwogICAgICAgIHJldHVybiBpc19hcnJheSgkZGVjb2RlZCkgPyAkZGVjb2RlZCA6IG51bGw7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfU2Vzc2lvbgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0YXJ0SHViU2Vzc2lvbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICAkc2lkID0gYmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICAgICAkZXhwaXJlcyA9IHRpbWUoKSArIChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9zZXNzaW9uX3R0bCcsICczNjAwJyk7CiAgICAgICAgJGlwID0gZnVuY3Rpb25fZXhpc3RzKCdjbXNfdXRpbHM6OmdldF9yZWFsX2lwJykgPyBjbXNfdXRpbHM6OmdldF9yZWFsX2lwKCkgOiAnJzsKICAgICAgICAkdWEgPSBpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pID8gKHN0cmluZykgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddIDogJyc7CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICdJTlNFUlQgSU5UTyAnIC4gTWFzX0FoX1RhYmxlczo6c2Vzc2lvbnMoKQogICAgICAgICAgICAuICcgKHNlc3Npb25faWQsIGNtc191c2VyX2lkLCBtYW1zX3VzZXJfaWQsIHByb3ZpZGVyX2lkLCBpcF9oYXNoLCB1YV9oYXNoLCBleHBpcmVzX2F0LCByZXZva2VkLCBjcmVhdGVkKScKICAgICAgICAgICAgLiAnIFZBTFVFUyAoPyw/LD8sPyw/LD8sPywwLD8pJywKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAkc2lkLAogICAgICAgICAgICAgICAgKGludCkgKCRkYXRhWydjbXNfdXNlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKGludCkgKCRkYXRhWydtYW1zX3VzZXJfaWQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIChpbnQpICgkZGF0YVsncHJvdmlkZXJfaWQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIE1hc19BaF9DcnlwdG86Omhhc2hJcCgkaXApLAogICAgICAgICAgICAgICAgaGFzaCgnc2hhMjU2JywgJHVhKSwKICAgICAgICAgICAgICAgICRleHBpcmVzLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAkX1NFU1NJT05bJ21hc19haF9zaWQnXSA9ICRzaWQ7CiAgICAgICAgcmV0dXJuICRzaWQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXZva2UoQ01TTW9kdWxlICRtb2QsICRzZXNzaW9uSWQpCiAgICB7CiAgICAgICAgJG1vZC0+R2V0RGIoKS0+RXhlY3V0ZSgKICAgICAgICAgICAgJ1VQREFURSAnIC4gTWFzX0FoX1RhYmxlczo6c2Vzc2lvbnMoKSAuICcgU0VUIHJldm9rZWQgPSAxIFdIRVJFIHNlc3Npb25faWQgPSA/JywKICAgICAgICAgICAgYXJyYXkoKHN0cmluZykgJHNlc3Npb25JZCkKICAgICAgICApOwogICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ21hc19haF9zaWQnXSkgJiYgJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10gPT09ICRzZXNzaW9uSWQpIHsKICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydtYXNfYWhfc2lkJ10pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldm9rZUFsbEZvclVzZXIoQ01TTW9kdWxlICRtb2QsICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDApCiAgICB7CiAgICAgICAgaWYgKCRjbXNVc2VySWQgPiAwKSB7CiAgICAgICAgICAgICRtb2QtPkdldERiKCktPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAnVVBEQVRFICcgLiBNYXNfQWhfVGFibGVzOjpzZXNzaW9ucygpIC4gJyBTRVQgcmV2b2tlZCA9IDEgV0hFUkUgY21zX3VzZXJfaWQgPSA/JywKICAgICAgICAgICAgICAgIGFycmF5KChpbnQpICRjbXNVc2VySWQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmICgkbWFtc1VzZXJJZCA+IDApIHsKICAgICAgICAgICAgJG1vZC0+R2V0RGIoKS0+RXhlY3V0ZSgKICAgICAgICAgICAgICAgICdVUERBVEUgJyAuIE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCkgLiAnIFNFVCByZXZva2VkID0gMSBXSEVSRSBtYW1zX3VzZXJfaWQgPSA/JywKICAgICAgICAgICAgICAgIGFycmF5KChpbnQpICRtYW1zVXNlcklkKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpc3RBY3RpdmUoQ01TTW9kdWxlICRtb2QsICRsaW1pdCA9IDEwMCkKICAgIHsKICAgICAgICAkbGltaXQgPSBtYXgoMSwgbWluKDUwMCwgKGludCkgJGxpbWl0KSk7CiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCkKICAgICAgICAgICAgLiAnIFdIRVJFIHJldm9rZWQgPSAwIEFORCBleHBpcmVzX2F0ID4gJyAuIChpbnQpICRub3cKICAgICAgICAgICAgLiAnIE9SREVSIEJZIGNyZWF0ZWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgIHJldHVybiAkbW9kLT5HZXREYigpLT5HZXRBcnJheSgkc3FsKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyT0F1dGhTdGF0ZSgpCiAgICB7CiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgIT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOwogICAgICAgIH0KICAgICAgICB1bnNldCgKICAgICAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfc3RhdGUnXSwKICAgICAgICAgICAgJF9TRVNTSU9OWydtYXNfYWhfb2F1dGhfcGtjZSddLAogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9vYXV0aF9wcm92aWRlciddLAogICAgICAgICAgICAkX1NFU1NJT05bJ21hc19haF9yZXR1cm5fdHlwZSddCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_tables.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRhYmxlIG5hbWUgaGVscGVycyBmb3IgTUFTX0F1dGhIdWIuCiAqLwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCmZpbmFsIGNsYXNzIE1hc19BaF9UYWJsZXMKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVmaXgoKQogICAgewogICAgICAgIHJldHVybiBDTVNfREJfUFJFRklYIC4gJ21vZF9tYXNfYWhfJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByb3ZpZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ3Byb3ZpZGVycyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1c2VyTGlua3MoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICd1c2VyX2xpbmtzJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlc3Npb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6cHJlZml4KCkgLiAnc2Vzc2lvbnMnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9rZW5zKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6cHJlZml4KCkgLiAndG9rZW5zJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9hdXRoQ2xpZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ29hdXRoX2NsaWVudHMnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2F1dGhBdXRoQ29kZXMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICdvYXV0aF9hdXRoX2NvZGVzJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdlYmF1dGhuQ3JlZGVudGlhbHMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwcmVmaXgoKSAuICd3ZWJhdXRobl9jcmVkZW50aWFscyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdWRpdExvZygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnByZWZpeCgpIC4gJ2F1ZGl0X2xvZyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_token_store.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfVG9rZW5TdG9yZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0b3JlKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcm93KQogICAgewogICAgICAgICRlbmMgPSBNYXNfQWhfQ3J5cHRvOjplbmNyeXB0KCRtb2QsIChzdHJpbmcpICgkcm93Wyd0b2tlbiddID8/ICcnKSk7CiAgICAgICAgaWYgKCRlbmMgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRkYi0+RXhlY3V0ZSgKICAgICAgICAgICAgJ0lOU0VSVCBJTlRPICcgLiBNYXNfQWhfVGFibGVzOjp0b2tlbnMoKQogICAgICAgICAgICAuICcgKHRva2VuX3R5cGUsIHRva2VuX2VuYywgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgY3JlYXRlZCknCiAgICAgICAgICAgIC4gJyBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyknLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHN1YnN0cigoc3RyaW5nKSAoJHJvd1sndG9rZW5fdHlwZSddID8/ICdhY2Nlc3MnKSwgMCwgMTYpLAogICAgICAgICAgICAgICAgJGVuYywKICAgICAgICAgICAgICAgIHN1YnN0cigoc3RyaW5nKSAoJHJvd1snc2NvcGVzJ10gPz8gJycpLCAwLCAyNTUpLAogICAgICAgICAgICAgICAgKGludCkgKCRyb3dbJ2V4cGlyZXNfYXQnXSA/PyAwKSwKICAgICAgICAgICAgICAgIChpbnQpICgkcm93Wydwcm92aWRlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKGludCkgKCRyb3dbJ2Ntc191c2VyX2lkJ10gPz8gMCksCiAgICAgICAgICAgICAgICAoaW50KSAoJHJvd1snbWFtc191c2VyX2lkJ10gPz8gMCksCiAgICAgICAgICAgICAgICB0aW1lKCksCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgIHJldHVybiAoaW50KSAkZGItPkluc2VydF9JRCgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV2b2tlKENNU01vZHVsZSAkbW9kLCAkdG9rZW5JZCkKICAgIHsKICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnREVMRVRFIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnRva2VucygpIC4gJyBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBhcnJheSgoaW50KSAkdG9rZW5JZCkKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGlzdEZvclVzZXIoQ01TTW9kdWxlICRtb2QsICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDAsICRsaW1pdCA9IDUwKQogICAgewogICAgICAgICRsaW1pdCA9IG1heCgxLCBtaW4oMjAwLCAoaW50KSAkbGltaXQpKTsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgIGlmICgkY21zVXNlcklkID4gMCkgewogICAgICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgICAgIC4gTWFzX0FoX1RhYmxlczo6dG9rZW5zKCkgLiAnIFdIRVJFIGNtc191c2VyX2lkID0gPyBPUkRFUiBCWSBpZCBERVNDIExJTUlUICcgLiAkbGltaXQ7CiAgICAgICAgICAgIHJldHVybiAkZGItPkdldEFycmF5KCRzcWwsIGFycmF5KChpbnQpICRjbXNVc2VySWQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtYW1zVXNlcklkID4gMCkgewogICAgICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgICAgIC4gTWFzX0FoX1RhYmxlczo6dG9rZW5zKCkgLiAnIFdIRVJFIG1hbXNfdXNlcl9pZCA9ID8gT1JERVIgQlkgaWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgICAgICByZXR1cm4gJGRiLT5HZXRBcnJheSgkc3FsLCBhcnJheSgoaW50KSAkbWFtc1VzZXJJZCkpOwogICAgICAgIH0KICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCwgdG9rZW5fdHlwZSwgc2NvcGVzLCBleHBpcmVzX2F0LCBwcm92aWRlcl9pZCwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgY3JlYXRlZCBGUk9NICcKICAgICAgICAgICAgLiBNYXNfQWhfVGFibGVzOjp0b2tlbnMoKSAuICcgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAnIC4gJGxpbWl0OwogICAgICAgIHJldHVybiAkZGItPkdldEFycmF5KCRzcWwpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_user_link.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfVXNlckxpbmsKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaW5kQnlFeHRlcm5hbChDTVNNb2R1bGUgJG1vZCwgJHByb3ZpZGVySWQsICRleHRlcm5hbFN1YikKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkKICAgICAgICAgICAgLiAnIFdIRVJFIHByb3ZpZGVyX2lkID0gPyBBTkQgZXh0ZXJuYWxfc3ViID0gPyBMSU1JVCAxJzsKICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coJHNxbCwgYXJyYXkoKGludCkgJHByb3ZpZGVySWQsIChzdHJpbmcpICRleHRlcm5hbFN1YikpOwogICAgICAgIHJldHVybiBpc19hcnJheSgkcm93KSA/ICRyb3cgOiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluZEJ5RW1haWwoQ01TTW9kdWxlICRtb2QsICRlbWFpbCwgJHByb3ZpZGVySWQgPSAwKQogICAgewogICAgICAgICRlbWFpbCA9IHN0cnRvbG93ZXIodHJpbSgoc3RyaW5nKSAkZW1haWwpKTsKICAgICAgICBpZiAoJGVtYWlsID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGRiID0gJG1vZC0+R2V0RGIoKTsKICAgICAgICBpZiAoJHByb3ZpZGVySWQgPiAwKSB7CiAgICAgICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkgLiAnIFdIRVJFIGVtYWlsID0gPyBBTkQgcHJvdmlkZXJfaWQgPSA/IExJTUlUIDEnOwogICAgICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coJHNxbCwgYXJyYXkoJGVtYWlsLCAoaW50KSAkcHJvdmlkZXJJZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCkgLiAnIFdIRVJFIGVtYWlsID0gPyBMSU1JVCAxJzsKICAgICAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRzcWwsIGFycmF5KCRlbWFpbCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaXNfYXJyYXkoJHJvdykgPyAkcm93IDogbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwc2VydChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgJHByb3ZpZGVySWQgPSAoaW50KSAoJGRhdGFbJ3Byb3ZpZGVyX2lkJ10gPz8gMCk7CiAgICAgICAgJGV4dGVybmFsU3ViID0gKHN0cmluZykgKCRkYXRhWydleHRlcm5hbF9zdWInXSA/PyAnJyk7CiAgICAgICAgJGNtc1VzZXJJZCA9IGlzc2V0KCRkYXRhWydjbXNfdXNlcl9pZCddKSA/IChpbnQpICRkYXRhWydjbXNfdXNlcl9pZCddIDogbnVsbDsKICAgICAgICAkbWFtc1VzZXJJZCA9IGlzc2V0KCRkYXRhWydtYW1zX3VzZXJfaWQnXSkgPyAoaW50KSAkZGF0YVsnbWFtc191c2VyX2lkJ10gOiBudWxsOwogICAgICAgIGlmICgkY21zVXNlcklkID09PSBudWxsICYmICRtYW1zVXNlcklkID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGVtYWlsID0gc3RydG9sb3dlcih0cmltKChzdHJpbmcpICgkZGF0YVsnZW1haWwnXSA/PyAnJykpKTsKICAgICAgICAkYXR0cnMgPSBpc3NldCgkZGF0YVsnYXR0cnNfanNvbiddKSA/ICRkYXRhWydhdHRyc19qc29uJ10gOiBhcnJheSgpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRhdHRycykpIHsKICAgICAgICAgICAgJGF0dHJzID0ganNvbl9lbmNvZGUoJGF0dHJzLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICAgICAgfQogICAgICAgICRleGlzdGluZyA9IHNlbGY6OmZpbmRCeUV4dGVybmFsKCRtb2QsICRwcm92aWRlcklkLCAkZXh0ZXJuYWxTdWIpOwogICAgICAgICRkYiA9ICRtb2QtPkdldERiKCk7CiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICBpZiAoJGV4aXN0aW5nKSB7CiAgICAgICAgICAgICRzcWwgPSAnVVBEQVRFICcgLiBNYXNfQWhfVGFibGVzOjp1c2VyTGlua3MoKQogICAgICAgICAgICAgICAgLiAnIFNFVCBjbXNfdXNlcl9pZCA9IENPQUxFU0NFKD8sIGNtc191c2VyX2lkKSwgbWFtc191c2VyX2lkID0gQ09BTEVTQ0UoPywgbWFtc191c2VyX2lkKSwnCiAgICAgICAgICAgICAgICAuICcgZW1haWwgPSA/LCBhdHRyc19qc29uID0gPywgdXBkYXRlZCA9ID8gV0hFUkUgaWQgPSA/JzsKICAgICAgICAgICAgJGRiLT5FeGVjdXRlKCRzcWwsIGFycmF5KAogICAgICAgICAgICAgICAgJGNtc1VzZXJJZCwKICAgICAgICAgICAgICAgICRtYW1zVXNlcklkLAogICAgICAgICAgICAgICAgJGVtYWlsLAogICAgICAgICAgICAgICAgJGF0dHJzLAogICAgICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgICAgIChpbnQpICRleGlzdGluZ1snaWQnXSwKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAkZXhpc3RpbmdbJ2lkJ107CiAgICAgICAgfQogICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpCiAgICAgICAgICAgIC4gJyAocHJvdmlkZXJfaWQsIGV4dGVybmFsX3N1YiwgY21zX3VzZXJfaWQsIG1hbXNfdXNlcl9pZCwgZW1haWwsIGF0dHJzX2pzb24sIGNyZWF0ZWQsIHVwZGF0ZWQpJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8pJzsKICAgICAgICAkZGItPkV4ZWN1dGUoJHNxbCwgYXJyYXkoCiAgICAgICAgICAgICRwcm92aWRlcklkLAogICAgICAgICAgICAkZXh0ZXJuYWxTdWIsCiAgICAgICAgICAgICRjbXNVc2VySWQsCiAgICAgICAgICAgICRtYW1zVXNlcklkLAogICAgICAgICAgICAkZW1haWwsCiAgICAgICAgICAgICRhdHRycywKICAgICAgICAgICAgJG5vdywKICAgICAgICAgICAgJG5vdywKICAgICAgICApKTsKICAgICAgICByZXR1cm4gKGludCkgJGRiLT5JbnNlcnRfSUQoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpc3RSZWNlbnQoQ01TTW9kdWxlICRtb2QsICRsaW1pdCA9IDUwKQogICAgewogICAgICAgICRsaW1pdCA9IG1heCgxLCBtaW4oNTAwLCAoaW50KSAkbGltaXQpKTsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRzcWwgPSAnU0VMRUNUIHVsLiosIHAubmFtZSBBUyBwcm92aWRlcl9uYW1lIEZST00gJyAuIE1hc19BaF9UYWJsZXM6OnVzZXJMaW5rcygpIC4gJyB1bCcKICAgICAgICAgICAgLiAnIExFRlQgSk9JTiAnIC4gTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCkgLiAnIHAgT04gcC5pZCA9IHVsLnByb3ZpZGVyX2lkJwogICAgICAgICAgICAuICcgT1JERVIgQlkgdWwudXBkYXRlZCBERVNDIExJTUlUICcgLiAkbGltaXQ7CiAgICAgICAgcmV0dXJuICRkYi0+R2V0QXJyYXkoJHNxbCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_ah_webauthn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfV2ViYXV0aG4KewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBycElkKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRjdXN0b20gPSB0cmltKChzdHJpbmcpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF93ZWJhdXRobl9ycF9pZCcsICcnKSk7CiAgICAgICAgaWYgKCRjdXN0b20gIT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkY3VzdG9tOwogICAgICAgIH0KICAgICAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgICAgICAgJGhvc3QgPSBwYXJzZV91cmwoKHN0cmluZykgJGNvbmZpZ1sncm9vdF91cmwnXSwgUEhQX1VSTF9IT1NUKTsKICAgICAgICByZXR1cm4gJGhvc3QgPyAoc3RyaW5nKSAkaG9zdCA6ICdsb2NhbGhvc3QnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdChDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICAkYXV0b2xvYWQgPSBkaXJuYW1lKF9fRElSX18pIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKICAgICAgICBpZiAoIWlzX3JlYWRhYmxlKCRhdXRvbG9hZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ3dlYmF1dGhuX3ZlbmRvcl9taXNzaW5nJyk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ1dlYmF1dGhuXFxQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHknKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnd2ViYXV0aG5fbm90X2F2YWlsYWJsZScpOwogICAgICAgIH0KICAgICAgICAkbW9kZSA9IGlzc2V0KCRwYXJhbXNbJ21vZGUnXSkgPyAoc3RyaW5nKSAkcGFyYW1zWydtb2RlJ10gOiAnbG9naW4nOwogICAgICAgICRqc29uSW4gPSBmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKTsKICAgICAgICAkYm9keSA9ICRqc29uSW4gPyBqc29uX2RlY29kZSgkanNvbkluLCB0cnVlKSA6IGFycmF5KCk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkYm9keSkpIHsKICAgICAgICAgICAgJGJvZHkgPSBhcnJheSgpOwogICAgICAgIH0KICAgICAgICBpZiAoJG1vZGUgPT09ICdsb2dpbicgJiYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID8/ICcnKSA9PT0gJ1BPU1QnICYmICFlbXB0eSgkYm9keVsnYWN0aW9uJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjphc3NlcnRMb2dpbigkbW9kLCAkYm9keSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdpbnZhbGlkX21vZGUnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhc3NlcnRMb2dpbihDTVNNb2R1bGUgJG1vZCwgYXJyYXkgJGJvZHksIGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgJGNyZWRJZCA9IGlzc2V0KCRib2R5WydjcmVkZW50aWFsX2lkJ10pID8gKHN0cmluZykgJGJvZHlbJ2NyZWRlbnRpYWxfaWQnXSA6ICcnOwogICAgICAgIGlmICgkY3JlZElkID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnbWlzc2luZ19jcmVkZW50aWFsJyk7CiAgICAgICAgfQogICAgICAgICRkYiA9ICRtb2QtPkdldERiKCk7CiAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KAogICAgICAgICAgICAnU0VMRUNUICogRlJPTSAnIC4gTWFzX0FoX1RhYmxlczo6d2ViYXV0aG5DcmVkZW50aWFscygpIC4gJyBXSEVSRSBjcmVkZW50aWFsX2lkID0gPyBMSU1JVCAxJywKICAgICAgICAgICAgYXJyYXkoJGNyZWRJZCkKICAgICAgICApOwogICAgICAgIGlmICghaXNfYXJyYXkoJHJvdykpIHsKICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJG1vZCwgJ3dlYmF1dGhuLnVua25vd25fY3JlZGVudGlhbCcsICd3YXJuaW5nJywgYXJyYXkoKSwgMCwgMCk7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICd1bmtub3duX2NyZWRlbnRpYWwnKTsKICAgICAgICB9CiAgICAgICAgJHJldHVyblR5cGUgPSBpc3NldCgkcGFyYW1zWydyZXR1cm5fdHlwZSddKSA/IChzdHJpbmcpICRwYXJhbXNbJ3JldHVybl90eXBlJ10gOiAnbWFtcyc7CiAgICAgICAgaWYgKCRyZXR1cm5UeXBlID09PSAnYWRtaW4nICYmIChpbnQpICRyb3dbJ2Ntc191c2VyX2lkJ10gPiAwKSB7CiAgICAgICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkdXNlciA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5SUQoKGludCkgJHJvd1snY21zX3VzZXJfaWQnXSk7CiAgICAgICAgICAgIGlmICgkdXNlciAmJiBNYXNfQWhfUG9saWN5OjpjbXNVc2VyQWxsb3dlZCgkbW9kLCAkdXNlcikpIHsKICAgICAgICAgICAgICAgIE1hc19BaF9DbXNMb2dpbkJyaWRnZTo6bG9naW5DbXNVc2VyKCR1c2VyKTsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnb2snID0+IHRydWUsICdyZWRpcmVjdCcgPT4gJ2FkbWluJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKChpbnQpICRyb3dbJ21hbXNfdXNlcl9pZCddID4gMCkgewogICAgICAgICAgICBNYXNfQWhfTWFtc1Byb3Zpc2lvbmVyOjpmaW5hbGl6ZU1hbXNMb2dpbigkbW9kLCAoaW50KSAkcm93WydtYW1zX3VzZXJfaWQnXSwgYXJyYXkoJ2lkJyA9PiAwLCAnbmFtZScgPT4gJ3dlYmF1dGhuJywgJ2NvbmZpZycgPT4gYXJyYXkoKSksICRjcmVkSWQpOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ29rJyA9PiB0cnVlLCAncmVkaXJlY3QnID0+ICdtYW1zJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnZXJyb3InID0+ICdub191c2VyJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlckNyZWRlbnRpYWwoQ01TTW9kdWxlICRtb2QsICRjcmVkZW50aWFsSWQsICRwdWJsaWNLZXksICRjbXNVc2VySWQgPSAwLCAkbWFtc1VzZXJJZCA9IDAsICRsYWJlbCA9ICcnKQogICAgewogICAgICAgIGlmICgkY21zVXNlcklkIDwgMSAmJiAkbWFtc1VzZXJJZCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6OndlYmF1dGhuQ3JlZGVudGlhbHMoKQogICAgICAgICAgICAuICcgKGNyZWRlbnRpYWxfaWQsIHB1YmxpY19rZXksIHNpZ25fY291bnQsIGFhZ3VpZCwgbGFiZWwsIGNtc191c2VyX2lkLCBtYW1zX3VzZXJfaWQsIGNyZWF0ZWQpIFZBTFVFUyAoPyw/LDAsXCdcJyw/LD8sPyw/KScsCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgKHN0cmluZykgJGNyZWRlbnRpYWxJZCwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwdWJsaWNLZXksCiAgICAgICAgICAgICAgICBzdWJzdHIoKHN0cmluZykgJGxhYmVsLCAwLCAxMjgpLAogICAgICAgICAgICAgICAgKGludCkgJGNtc1VzZXJJZCwKICAgICAgICAgICAgICAgIChpbnQpICRtYW1zVXNlcklkLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/mas_common/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/mas_common/lang/mas_admin_defaults_en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNoYXJlZCBBZG1pbiBTZXR0aW5ncyBhbmQgRG9uYXRpb25zIGxhbmcga2V5cyBmb3IgTUFTXyogbW9kdWxlcy4KICogTG9hZGVkIGF1dG9tYXRpY2FsbHkgdmlhIG1hc19kb2NzX2RlZmF1bHRzX2VuX1VTLnBocC4KICovCmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYXNfY29tbW9uX21lcmdlX2FkbWluX2xhbmcnKSkgewogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLHN0cmluZz4gJGxhbmcKICAgICAqLwogICAgZnVuY3Rpb24gbWFzX2NvbW1vbl9tZXJnZV9hZG1pbl9sYW5nKGFycmF5ICYkbGFuZykKICAgIHsKICAgICAgICAkbWFzQWRtaW5EZWZhdWx0cyA9IGFycmF5KAogICAgICAgICAgICAnYWRtaW5zZXR0aW5ncycgPT4gJ0FkbWluIFNldHRpbmdzJywKICAgICAgICAgICAgJ2RvbmF0aW9uc3RhYicgPT4gJ0RvbmF0aW9ucycsCiAgICAgICAgICAgICdkb25hdGlvbnNfdGFiJyA9PiAnRG9uYXRpb25zJywKICAgICAgICAgICAgJ3RhYl9kb25hdGlvbnMnID0+ICdEb25hdGlvbnMnLAogICAgICAgICAgICAnZG9uYXRlX2J0bicgPT4gJ0RvbmF0ZScsCiAgICAgICAgICAgICdkb25hdGlvbnN0ZXh0JyA9PiAnQSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGhhcyBiZWVuIHB1dCBpbnRvIGNyZWF0aW5nIHRoaXMgbW9kdWxlLiBJZiBpdCBoZWxwcyB5b3VyIHNpdGUsIHBsZWFzZSBjb25zaWRlciBzdXBwb3J0aW5nIGNvbnRpbnVlZCBkZXZlbG9wbWVudC4nLAogICAgICAgICAgICAnc3BvbnNvcnMnID0+ICdDdXJyZW50IHNwb25zb3JzLCB0aGFuayB5b3UgZm9yIHlvdXIgc3VwcG9ydCEnLAogICAgICAgICAgICAnZG9uYXRpb25zX3Nwb25zb3JfbG9nb19hbHQnID0+ICdOZXdzIFRhcmdldGVkIGxvZ28nLAogICAgICAgICAgICAnZG9uYXRpb25zX3Nwb25zb3JfbGluaycgPT4gJ1Zpc2l0IE5ld3NUYXJnZXRlZCcsCiAgICAgICAgICAgICdoaWRlZG9uYXRpb25zc3VibWl0JyA9PiAnSGlkZSBkb25hdGlvbnMgdGFiJywKICAgICAgICAgICAgJ2RvbmF0aW9uc190YWJfaGlkZGVuJyA9PiAnRG9uYXRpb25zIHRhYiBoYXMgYmVlbiBoaWRkZW4uIFlvdSBjYW4gc2hvdyBpdCBhZ2FpbiBpbiBBZG1pbiBTZXR0aW5ncy4nLAogICAgICAgICAgICAnc2hvd19kb25hdGlvbnNfdGFiJyA9PiAnU2hvdyBEb25hdGlvbnMgdGFiJywKICAgICAgICAgICAgJ3Nob3dfZG9uYXRpb25zX3RhYl9oZWxwJyA9PiAnV2hlbiB0dXJuZWQgb2ZmLCB0aGUgRG9uYXRpb25zIHRhYiBpcyBoaWRkZW4gdW50aWwgeW91IGVuYWJsZSBpdCBhZ2FpbiBpbiBBZG1pbiBTZXR0aW5ncy4nLAogICAgICAgICAgICAnc2hvd2RvbmF0aW9uc3RhYicgPT4gJ1Nob3cgZG9uYXRpb25zIHRhYicsCiAgICAgICAgICAgICdhZG1pbnNlY3Rpb24nID0+ICdBZG1pbiBtZW51IHNlY3Rpb24nLAogICAgICAgICAgICAnYWRtaW5zZWN0aW9uaGVscCcgPT4gJ1NlbGVjdCB3aGljaCBhZG1pbiBtZW51IHNlY3Rpb24gdGhpcyBtb2R1bGUgYXBwZWFycyB1bmRlci4nLAogICAgICAgICAgICAnbWFpbicgPT4gJ0NNUycsCiAgICAgICAgICAgICdmaWxlcycgPT4gJ0ZpbGVzJywKICAgICAgICAgICAgJ215cHJlZnMnID0+ICdNeSBQcmVmZXJlbmNlcycsCiAgICAgICAgICAgICdleHRlbnNpb25zJyA9PiAnRXh0ZW5zaW9ucycsCiAgICAgICAgICAgICdjb250ZW50JyA9PiAnQ29udGVudCcsCiAgICAgICAgICAgICdzaXRlYWRtaW4nID0+ICdTaXRlIGFkbWluJywKICAgICAgICAgICAgJ3VzZXJzZ3JvdXBzJyA9PiAnVXNlciBNYW5hZ2VtZW50JywKICAgICAgICAgICAgJ2xheW91dCcgPT4gJ0xheW91dCcsCiAgICAgICAgICAgICdlY29tbWVyY2UnID0+ICdFLUNvbW1lcmNlJywKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRtYXNBZG1pbkRlZmF1bHRzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJGxhbmdbJGtdKSB8fCAkbGFuZ1ska10gPT09ICcnIHx8ICRsYW5nWyRrXSA9PT0gJGspIHsKICAgICAgICAgICAgICAgICRsYW5nWyRrXSA9ICR2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppZiAoaXNzZXQoJGxhbmcpICYmIGlzX2FycmF5KCRsYW5nKSkgewogICAgbWFzX2NvbW1vbl9tZXJnZV9hZG1pbl9sYW5nKCRsYW5nKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lang/mas_docs_defaults_en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIERlZmF1bHQgSGVscCAvIEFib3V0IGxhbmcga2V5cyBmb3IgTUFTXyogbW9kdWxlcy4KICoKICogSW4gbGFuZy9lbl9VUy5waHA6CiAqICAgcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9saWIvbWFzX2NvbW1vbl9sb2FkZXIucGhwJzsKICogICBtYXNfcmVxdWlyZV9tYXNfbGFuZ19kZWZhdWx0cygpOwogKgogKiBUaGUgZXhwbGljaXQgbWVyZ2UgY2FsbCBpcyByZXF1aXJlZCBiZWNhdXNlIHJlcXVpcmVfb25jZSBza2lwcyByZS1ydW5uaW5nIHRoaXMgZmlsZQogKiB3aGVuIGFub3RoZXIgTUFTIG1vZHVsZSBsb2FkZWQgSGVscC9BYm91dCBzdHJpbmdzIGZpcnN0IGluIHRoZSBzYW1lIHJlcXVlc3QuCiAqLwppZiAoIWlzc2V0KCRsYW5nKSkgewogICAgJGxhbmcgPSBhcnJheSgpOwp9CgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX2FkbWluX2RlZmF1bHRzX2VuX1VTLnBocCc7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX2NvbW1vbl9tZXJnZV9kb2NzX2xhbmcnKSkgewogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLHN0cmluZz4gJGxhbmcKICAgICAqLwogICAgZnVuY3Rpb24gbWFzX2NvbW1vbl9tZXJnZV9kb2NzX2xhbmcoYXJyYXkgJiRsYW5nKQogICAgewogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ21hc19jb21tb25fbWVyZ2VfYWRtaW5fbGFuZycpKSB7CiAgICAgICAgICAgIG1hc19jb21tb25fbWVyZ2VfYWRtaW5fbGFuZygkbGFuZyk7CiAgICAgICAgfQoKICAgICAgICAkbWFzRG9jc0RlZmF1bHRzID0gYXJyYXkoCiAgICAgICAgICAgICdoZWxwJyA9PiAnT3BlbiBIZWxwIGluIHRoZSBNb2R1bGUgTWFuYWdlciBmb3IgdGFiYmVkIGRvY3VtZW50YXRpb24uJywKICAgICAgICAgICAgJ2hlbHBfZ2VuZXJhbCcgPT4gJ0dlbmVyYWwnLAogICAgICAgICAgICAnaGVscF9jb25maWd1cmF0aW9uJyA9PiAnQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgICdoZWxwX3Ryb3VibGVzaG9vdGluZycgPT4gJ1Ryb3VibGVzaG9vdGluZycsCiAgICAgICAgICAgICdoZWxwX292ZXJ2aWV3X2hlYWRpbmcnID0+ICdPdmVydmlldycsCiAgICAgICAgICAgICdoZWxwX3F1aWNrc3RhcnRfaGVhZGluZycgPT4gJ1F1aWNrIHN0YXJ0JywKICAgICAgICAgICAgJ2hlbHBfcXVpY2tzdGFydF8xJyA9PiAnSW5zdGFsbCBvciB1cGdyYWRlIHRoZSBtb2R1bGUgZnJvbSBFeHRlbnNpb25zLCB0aGVuIG9wZW4gaXRzIGFkbWluIHNjcmVlbi4nLAogICAgICAgICAgICAnaGVscF9xdWlja3N0YXJ0XzInID0+ICdDb25maWd1cmUgb3B0aW9ucyBvbiB0aGUgU2V0dGluZ3MgdGFiIGFuZCBzYXZlLicsCiAgICAgICAgICAgICdoZWxwX3F1aWNrc3RhcnRfMycgPT4gJ1VzZSB0aGUgbW9kdWxlIHRhZ3Mgb3IgYWN0aW9ucyBvbiB5b3VyIHNpdGUgYXMgZGVzY3JpYmVkIGluIHRoZSBzdW1tYXJ5IGJlbG93LicsCiAgICAgICAgICAgICdoZWxwX3JlcXVpcmVtZW50c19oZWFkaW5nJyA9PiAnU3lzdGVtIHJlcXVpcmVtZW50cycsCiAgICAgICAgICAgICdoZWxwX3JlcXVpcmVtZW50c19jbXMnID0+ICdDTVMgTWFkZSBTaW1wbGUnLAogICAgICAgICAgICAnaGVscF9yZXF1aXJlbWVudHNfcGhwJyA9PiAnUEhQJywKICAgICAgICAgICAgJ2hlbHBfY29uZmlndXJhdGlvbl9ib2R5JyA9PiAnVXNlIHRoZSBTZXR0aW5ncyBhbmQgQWRtaW4gc2V0dGluZ3MgdGFicyBpbiB0aGUgbW9kdWxlIGFkbWluLiBQcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIHRoZSBDTVNNUyBtb2R1bGUgcHJlZmVyZW5jZSBzdG9yZSB1bmxlc3MgZG9jdW1lbnRlZCBvdGhlcndpc2UuJywKICAgICAgICAgICAgJ2hlbHBfY29uZmlnX2FkbWluX2hlYWRpbmcnID0+ICdBZG1pbicsCiAgICAgICAgICAgICdoZWxwX2NvbmZpZ19hZG1pbl8xJyA9PiAnQ2hvb3NlIHRoZSBhZG1pbiBtZW51IHNlY3Rpb24gdW5kZXIgQWRtaW4gc2V0dGluZ3MgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBpdC4nLAogICAgICAgICAgICAnaGVscF9jb25maWdfYWRtaW5fMicgPT4gJ0dyYW50IG1vZHVsZSBwZXJtaXNzaW9ucyB0byB0aGUgY29ycmVjdCBhZG1pbiBncm91cHMgdW5kZXIgVXNlcnMgYW5kIEdyb3Vwcy4nLAogICAgICAgICAgICAnaGVscF90c18xJyA9PiAnQ2xlYXIgQ01TTVMgdGVtcGxhdGUgYW5kIGNhY2hlIGFmdGVyIGNoYW5naW5nIG1vZHVsZSBzZXR0aW5ncy4nLAogICAgICAgICAgICAnaGVscF90c18yJyA9PiAnQ2hlY2sgdGhlIGFkbWluIGF1ZGl0IGxvZyBhbmQgUEhQIGVycm9yIGxvZyBmb3IgZmFpbHVyZXMuJywKICAgICAgICAgICAgJ2hlbHBfdHNfMycgPT4gJ0NvbmZpcm0gZmlsZSBwZXJtaXNzaW9ucyBhbmQgb3duZXJzaGlwIG1hdGNoIHlvdXIgaG9zdCByZXF1aXJlbWVudHMuJywKICAgICAgICAgICAgJ2hlbHBfdHNfc3VwcG9ydF9ib2R5JyA9PiAnRm9yIHNpdGUtc3BlY2lmaWMgc3VwcG9ydCBjb250YWN0JywKICAgICAgICAgICAgJ2hlbHBfY3JlZGl0c19oZWFkaW5nJyA9PiAnQ3JlZGl0cycsCiAgICAgICAgICAgICdoZWxwX2NyZWRpdHNfYm9keScgPT4gJ0RldmVsb3BlZCBieScsCiAgICAgICAgICAgICdhYm91dF90YWJfbW9kdWxlJyA9PiAnTW9kdWxlJywKICAgICAgICAgICAgJ2Fib3V0X3RhYl9jb21wYXQnID0+ICdDb21wYXRpYmlsaXR5JywKICAgICAgICAgICAgJ2Fib3V0X3RhYl9zdW1tYXJ5JyA9PiAnU3VtbWFyeScsCiAgICAgICAgICAgICdhYm91dF90YWJfY2hhbmdlbG9nJyA9PiAnQ2hhbmdlIGxvZycsCiAgICAgICAgICAgICdhYm91dF9sYWJlbF9uYW1lJyA9PiAnTmFtZScsCiAgICAgICAgICAgICdhYm91dF9sYWJlbF92ZXJzaW9uJyA9PiAnVmVyc2lvbicsCiAgICAgICAgICAgICdhYm91dF9sYWJlbF9hdXRob3InID0+ICdBdXRob3InLAogICAgICAgICAgICAnYWJvdXRfbGFiZWxfZW1haWwnID0+ICdFbWFpbCcsCiAgICAgICAgICAgICdhYm91dF9sYWJlbF91cmwnID0+ICdXZWJzaXRlJywKICAgICAgICAgICAgJ2Fib3V0X2xhYmVsX2xpY2Vuc2UnID0+ICdMaWNlbnNlJywKICAgICAgICAgICAgJ2Fib3V0X2xpY2Vuc2VfdmFsdWUnID0+ICdNSVQnLAogICAgICAgICAgICAnYWJvdXRfbWluX2NtcycgPT4gJ01pbmltdW0gQ01TIE1hZGUgU2ltcGxlJywKICAgICAgICAgICAgJ2Fib3V0X21pbl9waHAnID0+ICdNaW5pbXVtIFBIUCcsCiAgICAgICAgICAgICdhYm91dF9kZXBlbmRlbmNpZXNfaGVhZGluZycgPT4gJ01vZHVsZSBkZXBlbmRlbmNpZXMnLAogICAgICAgICAgICAnYWJvdXRfZGVwZW5kZW5jaWVzX25vbmUnID0+ICdObyBtb2R1bGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkLicsCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkbWFzRG9jc0RlZmF1bHRzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJGxhbmdbJGtdKSB8fCAkbGFuZ1ska10gPT09ICcnIHx8ICRsYW5nWyRrXSA9PT0gJGspIHsKICAgICAgICAgICAgICAgICRsYW5nWyRrXSA9ICR2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppZiAoaXNzZXQoJGxhbmcpICYmIGlzX2FycmF5KCRsYW5nKSkgewogICAgbWFzX2NvbW1vbl9tZXJnZV9kb2NzX2xhbmcoJGxhbmcpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_admin_branding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIE1vZHVsZSBpY29uL2Jhbm5lciBnZW5lcmF0aW9uIGZvciBNQVMgYWRtaW4gVUkuCiAqCiAqIEBwYWNrYWdlIE1BU19Db21tb24KICovCmlmICghZGVmaW5lZCgnTUFTX0FETUlOX0JSQU5ESU5HX0xPQURFRCcpKSB7CiAgICBkZWZpbmUoJ01BU19BRE1JTl9CUkFORElOR19MT0FERUQnLCB0cnVlKTsKfQoKZmluYWwgY2xhc3MgTWFzX0FkbWluX0JyYW5kaW5nCnsKICAgIC8qKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBtb2R1bGVQYXRoKCRtb2QpCiAgICB7CiAgICAgICAgcmV0dXJuIGNtc19qb2luX3BhdGgoJG1vZC0+R2V0TW9kdWxlUGF0aCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBpbWFnZXMvaWNvbi5naWYgZnJvbSBpY29uLnBuZyB3aGVuIG1pc3NpbmcgKHJlcXVpcmVzIEltYWdlTWFnaWNrIGNvbnZlcnQpLgogICAgICoKICAgICAqIEBwYXJhbSBDTVNNb2R1bGUgJG1vZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5zdXJlSWNvbkdpZigkbW9kKQogICAgewogICAgICAgICRpbWFnZXNEaXIgPSBjbXNfam9pbl9wYXRoKHNlbGY6Om1vZHVsZVBhdGgoJG1vZCksICdpbWFnZXMnKTsKICAgICAgICAkZ2lmID0gJGltYWdlc0RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnaWNvbi5naWYnOwogICAgICAgIGlmICghaXNfZGlyKCRpbWFnZXNEaXIpKSB7CiAgICAgICAgICAgIG1rZGlyKCRpbWFnZXNEaXIsIDA3NTUsIHRydWUpOwogICAgICAgIH0KICAgICAgICAkc291cmNlcyA9IGFycmF5KAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdpY29uLTUxMi5wbmcnKSwKICAgICAgICAgICAgY21zX2pvaW5fcGF0aCgkaW1hZ2VzRGlyLCAnaWNvbi0xOTIucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGltYWdlc0RpciwgJ0ljb24ucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGltYWdlc0RpciwgJ2ljb24ucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoc2VsZjo6bW9kdWxlUGF0aCgkbW9kKSwgJ2ljb24ucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoc2VsZjo6bW9kdWxlUGF0aCgkbW9kKSwgJ2ljb25zJywgJ2ljb24ucG5nJyksCiAgICAgICAgKTsKICAgICAgICAkc3JjID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHNvdXJjZXMgYXMgJGMpIHsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJGMpKSB7CiAgICAgICAgICAgICAgICAkc3JjID0gJGM7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHNyYyA9PT0gJycgJiYgaXNfZmlsZSgkZ2lmKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRzcmMgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX2ZpbGUoJGdpZikpIHsKICAgICAgICAgICAgJHNpemUgPSBAZ2V0aW1hZ2VzaXplKCRnaWYpOwogICAgICAgICAgICAkdmFsaWRTaXplID0gaXNfYXJyYXkoJHNpemUpICYmICRzaXplWzBdID49IDE2ICYmICRzaXplWzBdIDw9IDQ4ICYmICRzaXplWzFdID49IDE2ICYmICRzaXplWzFdIDw9IDQ4CiAgICAgICAgICAgICAgICAmJiBhYnMoJHNpemVbMF0gLSAkc2l6ZVsxXSkgPD0gNDsKICAgICAgICAgICAgJHNyY010aW1lID0gKGludCkgQGZpbGVtdGltZSgkc3JjKTsKICAgICAgICAgICAgJGdpZk10aW1lID0gKGludCkgQGZpbGVtdGltZSgkZ2lmKTsKICAgICAgICAgICAgaWYgKCR2YWxpZFNpemUgJiYgJGdpZk10aW1lID49ICRzcmNNdGltZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5saW5rKCRnaWYpOwogICAgICAgIH0KICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX2ZvcmdlX2Fzc2V0cy5waHAnOwogICAgICAgICRiZyA9IE1hc19Gb3JnZV9Bc3NldHM6OmRldGVjdEltYWdlQmFja2dyb3VuZENvbG9yKCRzcmMpOwogICAgICAgICRjbWQgPSAnY29udmVydCAnIC4gZXNjYXBlc2hlbGxhcmcoJHNyYykKICAgICAgICAgICAgLiAnIC1iYWNrZ3JvdW5kICcgLiBlc2NhcGVzaGVsbGFyZygkYmcpCiAgICAgICAgICAgIC4gJyAtcmVzaXplIDMyeDMyXiAtZ3Jhdml0eSBjZW50ZXIgLWV4dGVudCAzMngzMicKICAgICAgICAgICAgLiAnIC1hbHBoYSBvZmYgJwogICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCRnaWYpIC4gJyAyPi9kZXYvbnVsbCc7CiAgICAgICAgQGV4ZWMoJGNtZCwgJG91dCwgJGNvZGUpOwogICAgICAgIGlmICgkY29kZSAhPT0gMCB8fCAhaXNfZmlsZSgkZ2lmKSkgewogICAgICAgICAgICBjb3B5KCRzcmMsICRnaWYpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNfZmlsZSgkZ2lmKSkgewogICAgICAgICAgICBjaG1vZCgkZ2lmLCAwNjQ0KTsKICAgICAgICAgICAgQGNob3duKCRnaWYsICduZXdzdDM5MjInKTsKICAgICAgICAgICAgQGNoZ3JwKCRnaWYsICduZXdzdDM5MjInKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2l6ZSBpbWFnZXMvYmFubmVyLnBuZyB0byA2MDB4MTIwIHdoZW4gZmlsZSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVCYW5uZXIoJG1vZCkKICAgIHsKICAgICAgICAkaW1hZ2VzRGlyID0gY21zX2pvaW5fcGF0aChzZWxmOjptb2R1bGVQYXRoKCRtb2QpLCAnaW1hZ2VzJyk7CiAgICAgICAgaWYgKCFpc19kaXIoJGltYWdlc0RpcikpIHsKICAgICAgICAgICAgbWtkaXIoJGltYWdlc0RpciwgMDc1NSwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgICRiYW5uZXIgPSAkaW1hZ2VzRGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdiYW5uZXIucG5nJzsKICAgICAgICAkc291cmNlcyA9IGFycmF5KAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdCYW5uZXIucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGltYWdlc0RpciwgJ2Jhbm5lcjEucG5nJyksCiAgICAgICAgICAgICRiYW5uZXIsCiAgICAgICAgKTsKICAgICAgICAkc3JjID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHNvdXJjZXMgYXMgJGMpIHsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJGMpKSB7CiAgICAgICAgICAgICAgICAkc3JjID0gJGM7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHNyYyA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkdG1wID0gJGJhbm5lciAuICcudG1wLnBuZyc7CiAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL21hc19mb3JnZV9hc3NldHMucGhwJzsKICAgICAgICAkYmcgPSBNYXNfRm9yZ2VfQXNzZXRzOjpkZXRlY3RJbWFnZUJhY2tncm91bmRDb2xvcigkc3JjKTsKICAgICAgICAkY21kID0gJ2NvbnZlcnQgJyAuIGVzY2FwZXNoZWxsYXJnKCRzcmMpCiAgICAgICAgICAgIC4gJyAtYmFja2dyb3VuZCAnIC4gZXNjYXBlc2hlbGxhcmcoJGJnKQogICAgICAgICAgICAuICcgLXJlc2l6ZSA2MDB4MTIwXiAtZ3Jhdml0eSBjZW50ZXIgLWV4dGVudCA2MDB4MTIwICcKICAgICAgICAgICAgLiAnIC1hbHBoYSBvZmYgJwogICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCR0bXApIC4gJyAyPi9kZXYvbnVsbCc7CiAgICAgICAgQGV4ZWMoJGNtZCwgJG91dCwgJGNvZGUpOwogICAgICAgIGlmICgkY29kZSA9PT0gMCAmJiBpc19maWxlKCR0bXApKSB7CiAgICAgICAgICAgIEByZW5hbWUoJHRtcCwgJGJhbm5lcik7CiAgICAgICAgfSBlbHNlaWYgKCFpc19maWxlKCRiYW5uZXIpICYmICRzcmMgIT09ICRiYW5uZXIpIHsKICAgICAgICAgICAgY29weSgkc3JjLCAkYmFubmVyKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX2ZpbGUoJGJhbm5lcikpIHsKICAgICAgICAgICAgY2htb2QoJGJhbm5lciwgMDY0NCk7CiAgICAgICAgICAgIEBjaG93bigkYmFubmVyLCAnbmV3c3QzOTIyJyk7CiAgICAgICAgICAgIEBjaGdycCgkYmFubmVyLCAnbmV3c3QzOTIyJyk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_admin_ui.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNoYXJlZCBDTVNNUyBhZG1pbiBVSSBoZWxwZXJzIGZvciBNQVNfKiBtb2R1bGVzIChpY29uLCBiYW5uZXIsIGRvbmF0aW9ucyB0YWIpLgogKgogKiBAcGFja2FnZSBNQVNfQ29tbW9uCiAqLwoKaWYgKCFkZWZpbmVkKCdNQVNfQ09NTU9OX1ZFUlNJT04nKSkgewogICAgZGVmaW5lKCdNQVNfQ09NTU9OX1ZFUlNJT04nLCAnMS4wLjAnKTsKfQoKaWYgKCFkZWZpbmVkKCdNQVNfQURNSU5fVUlfTE9BREVEJykpIHsKICAgIGRlZmluZSgnTUFTX0FETUlOX1VJX0xPQURFRCcsIHRydWUpOwp9CgpmaW5hbCBjbGFzcyBNYXNfQWRtaW5fVWkKewogICAgcHVibGljIGNvbnN0IFNQT05TT1JfSFJFRiA9ICdodHRwczovL25ld3N0YXJnZXRlZC5jb20nOwogICAgcHVibGljIGNvbnN0IFNQT05TT1JfTE9HTyA9ICdodHRwczovL25ld3N0YXJnZXRlZC5jb20vaG90bGluay1vay9sb2dvLnBuZyc7CiAgICBwdWJsaWMgY29uc3QgRE9OQVRFX0hSRUYgPSAnaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tLyc7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBYnNvbHV0ZSBwYXRoIHRvIGJ1bmRsZWQgbWFzX2NvbW1vbiByb290IChsaWIvbWFzX2NvbW1vbi8pLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbW1vblBhdGgoKQogICAgewogICAgICAgIHJldHVybiBkaXJuYW1lKF9fRElSX18pOwogICAgfQoKICAgIC8qKgogICAgICogQWxsb3cgU21hcnR5IHRvIGxvYWQgdGVtcGxhdGVzIGZyb20gbGliL21hc19jb21tb24vdGVtcGxhdGVzLy4KICAgICAqCiAgICAgKiBAcGFyYW0gU21hcnR5X0NNU3xudWxsICRzbWFydHkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlclNtYXJ0eVNlY3VyZURpcnMoJHNtYXJ0eSA9IG51bGwpCiAgICB7CiAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL21hc19zbWFydHlfc2VjdXJlLnBocCc7CiAgICAgICAgbWFzX2NvbW1vbl9yZWdpc3Rlcl9zbWFydHlfc2VjdXJlX2RpcnMoJHNtYXJ0eSwgc2VsZjo6Y29tbW9uUGF0aCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENNU01TIGFkbWluIG1lbnUgc2VjdGlvbiBrZXlzIChzZWUgQ21zQWRtaW5UaGVtZUJhc2U6OiRfdmFsaWRfc2VjdGlvbnMpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRWYWxpZEFkbWluU2VjdGlvbnMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgJ21haW4nLAogICAgICAgICAgICAnY29udGVudCcsCiAgICAgICAgICAgICdsYXlvdXQnLAogICAgICAgICAgICAnZmlsZXMnLAogICAgICAgICAgICAndXNlcnNncm91cHMnLAogICAgICAgICAgICAnZXh0ZW5zaW9ucycsCiAgICAgICAgICAgICdzaXRlYWRtaW4nLAogICAgICAgICAgICAnbXlwcmVmcycsCiAgICAgICAgICAgICdlY29tbWVyY2UnLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhbml0aXplQWRtaW5TZWN0aW9uKCRzZWN0aW9uLCAkZGVmYXVsdCA9ICdleHRlbnNpb25zJykKICAgIHsKICAgICAgICAkc2VjdGlvbiA9IHRyaW0oKHN0cmluZykgJHNlY3Rpb24pOwogICAgICAgIGlmIChpbl9hcnJheSgkc2VjdGlvbiwgc2VsZjo6Z2V0VmFsaWRBZG1pblNlY3Rpb25zKCksIHRydWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkc2VjdGlvbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgfQoKICAgIC8qKgogICAgICogSHVtYW4gbGFiZWwgZm9yIGFuIGFkbWluIHNlY3Rpb24ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWN0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFkbWluU2VjdGlvbkxhYmVsKCRtb2QsICRzZWN0aW9uKQogICAgewogICAgICAgIGlmICgkc2VjdGlvbiA9PT0gJ21haW4nKSB7CiAgICAgICAgICAgIHJldHVybiAnQ01TJzsKICAgICAgICB9CgogICAgICAgICRsYWJlbCA9ICRtb2QtPkxhbmcoJHNlY3Rpb24pOwogICAgICAgIGlmICgkbGFiZWwgIT09ICcnICYmICRsYWJlbCAhPT0gJHNlY3Rpb24pIHsKICAgICAgICAgICAgcmV0dXJuICRsYWJlbDsKICAgICAgICB9CgogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2xhbmcnKSkgewogICAgICAgICAgICAkY29yZSA9IGxhbmcoJHNlY3Rpb24pOwogICAgICAgICAgICBpZiAoJGNvcmUgIT09ICcnICYmICRjb3JlICE9PSAkc2VjdGlvbikgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb3JlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdWNmaXJzdCgkc2VjdGlvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcHRpb25zIGZvciBDcmVhdGVJbnB1dERyb3Bkb3duIChsYWJlbCA9PiB2YWx1ZSksIGluIENNU01TIG1lbnUgb3JkZXIuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLHN0cmluZz4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBZG1pblNlY3Rpb25PcHRpb25zKCRtb2QpCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldFZhbGlkQWRtaW5TZWN0aW9ucygpIGFzICRzZWN0aW9uKSB7CiAgICAgICAgICAgICRvcHRpb25zW3NlbGY6OmdldEFkbWluU2VjdGlvbkxhYmVsKCRtb2QsICRzZWN0aW9uKV0gPSAkc2VjdGlvbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogUmVidWlsZCBDTVNNUyBhZG1pbiBtZW51IGFmdGVyIGFkbWluc2VjdGlvbiBwcmVmZXJlbmNlIGNoYW5nZXMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xlYXJBZG1pbk1lbnVDYWNoZSgpCiAgICB7CiAgICAgICAgJHVpZCA9IGdldF91c2VyaWQoZmFsc2UpOwogICAgICAgIGlmICgkdWlkKSB7CiAgICAgICAgICAgIGNtc19jYWNoZV9oYW5kbGVyOjpnZXRfaW5zdGFuY2UoKS0+ZXJhc2UoJ3RoZW1laW5mbycgLiAoaW50KSAkdWlkKTsKICAgICAgICB9CgogICAgICAgICRnQ21zID0gY21zbXMoKTsKICAgICAgICBpZiAoJGdDbXMgJiYgbWV0aG9kX2V4aXN0cygkZ0NtcywgJ0NsZWFyQWRtaW5NZW51Q2FjaGUnKSkgewogICAgICAgICAgICAkZ0Ntcy0+Q2xlYXJBZG1pbk1lbnVDYWNoZSgpOwogICAgICAgIH0KICAgICAgICBpZiAoJGdDbXMgJiYgbWV0aG9kX2V4aXN0cygkZ0NtcywgJ0NsZWFyQ2FjaGUnKSkgewogICAgICAgICAgICAkZ0Ntcy0+Q2xlYXJDYWNoZSgpOwogICAgICAgIH0KICAgICAgICBpZiAoJGdDbXMpIHsKICAgICAgICAgICAgJG1vZG9wcyA9ICRnQ21zLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7CiAgICAgICAgICAgIGlmICgkbW9kb3BzICYmIG1ldGhvZF9leGlzdHMoJG1vZG9wcywgJ0NsZWFyQ2FjaGUnKSkgewogICAgICAgICAgICAgICAgJG1vZG9wcy0+Q2xlYXJDYWNoZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZyBQdWJsaWMgVVJMIGJhc2UgZm9yIG1vZHVsZSBhc3NldHMgKG5vIHRyYWlsaW5nIHNsYXNoKS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2R1bGVBc3NldHNCYXNlKCRtb2QpCiAgICB7CiAgICAgICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAgICRyb290ID0gcnRyaW0oKHN0cmluZykgJGNvbmZpZ1sncm9vdF91cmwnXSwgJy8nKTsKICAgICAgICByZXR1cm4gJHJvb3QgLiAnL21vZHVsZXMvJyAuICRtb2QtPkdldE5hbWUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZyBGaWxlc3lzdGVtIHBhdGggdG8gbW9kdWxlIGRpcmVjdG9yeS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2R1bGVQYXRoKCRtb2QpCiAgICB7CiAgICAgICAgcmV0dXJuIGNtc19qb2luX3BhdGgoJG1vZC0+R2V0TW9kdWxlUGF0aCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaG93RG9uYXRpb25zVGFiKCRtb2QpCiAgICB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCRtb2QsICdTaG93RG9uYXRpb25zVGFiJykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoYm9vbCkgJG1vZC0+U2hvd0RvbmF0aW9uc1RhYigpOwogICAgfQoKICAgIC8qKgogICAgICogUHVibGljIG1vZHVsZSBhc3NldCBVUkwgd2l0aCA/dj1maWxlbXRpbWUgc28gQ0ROIGNhY2hlcyByZWZyZXNoIGFmdGVyIGltYWdlIHVwZGF0ZXMuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlUGF0aCBQYXRoIHVuZGVyIG1vZHVsZSByb290LCBlLmcuIGltYWdlcy9iYW5uZXIucG5nCiAgICAgKiBAcmV0dXJuIHN0cmluZyBVUkwgb3IgZW1wdHkgaWYgZmlsZSBtaXNzaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyc2lvbmVkQXNzZXRVcmwoJG1vZCwgJHJlbGF0aXZlUGF0aCkKICAgIHsKICAgICAgICAkcmVsYXRpdmVQYXRoID0gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAoc3RyaW5nKSAkcmVsYXRpdmVQYXRoKSwgJy8nKTsKICAgICAgICAkcGF0aCA9IGNtc19qb2luX3BhdGgoc2VsZjo6bW9kdWxlUGF0aCgkbW9kKSwgJHJlbGF0aXZlUGF0aCk7CiAgICAgICAgaWYgKCFpc19maWxlKCRwYXRoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICR1cmwgPSBzZWxmOjptb2R1bGVBc3NldHNCYXNlKCRtb2QpIC4gJy8nIC4gJHJlbGF0aXZlUGF0aDsKICAgICAgICAkbXRpbWUgPSBAZmlsZW10aW1lKCRwYXRoKTsKICAgICAgICBpZiAoJG10aW1lKSB7CiAgICAgICAgICAgICR1cmwgLj0gJz92PScgLiAoaW50KSAkbXRpbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdXJsOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEByZXR1cm4gc3RyaW5nIFVSTCBvciBlbXB0eSBpZiBiYW5uZXIgZmlsZSBtaXNzaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJhbm5lclVybCgkbW9kKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjp2ZXJzaW9uZWRBc3NldFVybCgkbW9kLCAnaW1hZ2VzL2Jhbm5lci5wbmcnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcGFyYW0gU21hcnR5X0ludGVybmFsX1RlbXBsYXRlfFNtYXJ0eSAkc21hcnR5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXNzaWduQnJhbmRpbmcoJG1vZCwgJHNtYXJ0eSkKICAgIHsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21hc19iYW5uZXJfdXJsJywgc2VsZjo6YmFubmVyVXJsKCRtb2QpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21hc19tb2R1bGVfdmVyc2lvbicsICRtb2QtPkdldFZlcnNpb24oKSk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtYXNfbW9kdWxlX2ljb25fdXJsJywgc2VsZjo6dmVyc2lvbmVkQXNzZXRVcmwoJG1vZCwgJ2ltYWdlcy9pY29uLmdpZicpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcGFyYW0gU21hcnR5X0ludGVybmFsX1RlbXBsYXRlfFNtYXJ0eSAkc21hcnR5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHJldHVybmlkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb3JtQWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXR0aW5nc0Zvcm1BY3Rpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhc3NpZ25Eb25hdGlvbnMoJG1vZCwgJHNtYXJ0eSwgJGlkLCAkcmV0dXJuaWQsICRmb3JtQWN0aW9uID0gJ2RlZmF1bHRhZG1pbicsICRzZXR0aW5nc0Zvcm1BY3Rpb24gPSAnc2F2ZV9zZXR0aW5ncycpCiAgICB7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkbW9kKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2RvbmF0aW9uc3RleHQnLCBzZWxmOjpsYW5nKCRtb2QsICdkb25hdGlvbnN0ZXh0JywgJ0lmIHRoaXMgbW9kdWxlIGhlbHBzIHlvdXIgcHJvamVjdCwgeW91IGNhbiBzdXBwb3J0IGNvbnRpbnVlZCBkZXZlbG9wbWVudC4nKSk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdzcG9uc29yc3RleHQnLCBzZWxmOjpsYW5nKCRtb2QsICdzcG9uc29ycycsICdTcG9uc29yJykpOwogICAgICAgICRzbWFydHktPmFzc2lnbignZG9uYXRpb25zX3Nwb25zb3JfaHJlZicsIHNlbGY6OlNQT05TT1JfSFJFRik7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdkb25hdGlvbnNfc3BvbnNvcl9sb2dvX3VybCcsIHNlbGY6OlNQT05TT1JfTE9HTyk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdkb25hdGlvbnNfc3BvbnNvcl9sb2dvX2FsdCcsIHNlbGY6OmxhbmcoJG1vZCwgJ2RvbmF0aW9uc19zcG9uc29yX2xvZ29fYWx0JywgJ05ld3MgVGFyZ2V0ZWQgbG9nbycpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2RvbmF0aW9uc19zcG9uc29yX2xpbmsnLCBzZWxmOjpsYW5nKCRtb2QsICdkb25hdGlvbnNfc3BvbnNvcl9saW5rJywgJ1Zpc2l0IE5ld3NUYXJnZXRlZCcpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2RvbmF0ZV9idG4nLCBzZWxmOjpsYW5nKCRtb2QsICdkb25hdGVfYnRuJywgJ0RvbmF0ZScpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2hpZGVkb25hdGlvbnNzdWJtaXQnLCAkbW9kLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdoaWRlZG9uYXRpb25zc3VibWl0Jywgc2VsZjo6bGFuZygkbW9kLCAnaGlkZWRvbmF0aW9uc3N1Ym1pdCcsICdIaWRlIERvbmF0aW9ucyB0YWInKSkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignc2V0dGluZ3NfZm9ybV9zdGFydCcsICRtb2QtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICRzZXR0aW5nc0Zvcm1BY3Rpb24sICRyZXR1cm5pZCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignc2V0dGluZ3NfZm9ybV9lbmQnLCAkbW9kLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignZm9ybV9zdGFydCcsICRtb2QtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICRmb3JtQWN0aW9uLCAkcmV0dXJuaWQpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2Zvcm1fZW5kJywgJG1vZC0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywgJGlkKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbmRlciBkb25hdGlvbnMgdGFiIHVzaW5nIHNoYXJlZCB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRyZXR1cm5pZAogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybUFjdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkc2V0dGluZ3NGb3JtQWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVuZGVyRG9uYXRpb25zVGFiKCRtb2QsICRpZCwgJHJldHVybmlkLCAkZm9ybUFjdGlvbiA9ICdkZWZhdWx0YWRtaW4nLCAkc2V0dGluZ3NGb3JtQWN0aW9uID0gJ3NhdmVfc2V0dGluZ3MnKQogICAgewogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICBzZWxmOjpyZWdpc3RlclNtYXJ0eVNlY3VyZURpcnMoJHNtYXJ0eSk7CiAgICAgICAgc2VsZjo6YXNzaWduRG9uYXRpb25zKCRtb2QsICRzbWFydHksICRpZCwgJHJldHVybmlkLCAkZm9ybUFjdGlvbiwgJHNldHRpbmdzRm9ybUFjdGlvbik7CiAgICAgICAgJHRwbFBhdGggPSBzZWxmOjpjb21tb25QYXRoKCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3RlbXBsYXRlcycgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2RvbmF0aW9ucy50cGwnOwogICAgICAgICR0cGwgPSAkc21hcnR5LT5jcmVhdGVUZW1wbGF0ZSgkdHBsUGF0aCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtb2QnLCAkbW9kKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2RvbmF0aW9uc3RleHQnLCAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ2RvbmF0aW9uc3RleHQnKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdzcG9uc29yc3RleHQnLCAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ3Nwb25zb3JzdGV4dCcpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2RvbmF0aW9uc19zcG9uc29yX2hyZWYnLCBzZWxmOjpTUE9OU09SX0hSRUYpOwogICAgICAgICR0cGwtPmFzc2lnbignZG9uYXRpb25zX3Nwb25zb3JfbG9nb191cmwnLCBzZWxmOjpTUE9OU09SX0xPR08pOwogICAgICAgICR0cGwtPmFzc2lnbignZG9uYXRpb25zX3Nwb25zb3JfbG9nb19hbHQnLCAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ2RvbmF0aW9uc19zcG9uc29yX2xvZ29fYWx0JykpOwogICAgICAgICR0cGwtPmFzc2lnbignZG9uYXRpb25zX3Nwb25zb3JfbGluaycsICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnZG9uYXRpb25zX3Nwb25zb3JfbGluaycpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2RvbmF0ZV9idG4nLCAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ2RvbmF0ZV9idG4nKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdoaWRlZG9uYXRpb25zc3VibWl0JywgJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdoaWRlZG9uYXRpb25zc3VibWl0JykpOwogICAgICAgICR0cGwtPmFzc2lnbignc2V0dGluZ3NfZm9ybV9zdGFydCcsICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnc2V0dGluZ3NfZm9ybV9zdGFydCcpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3NldHRpbmdzX2Zvcm1fZW5kJywgJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdzZXR0aW5nc19mb3JtX2VuZCcpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2FjdGlvbmlkJywgJGlkKTsKICAgICAgICBlY2hvICR0cGwtPmZldGNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFY2hvIHNldHRpbmdzIGJhbm5lciBibG9jayAoZm9yIG5vbi1TbWFydHkgYWRtaW4gdGFicykuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2NyaXB0aW9uSHRtbCBPcHRpb25hbCBleHRyYSBIVE1MIGJlbG93IHRpdGxlIChhbHJlYWR5IGVzY2FwZWQpLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVjaG9TZXR0aW5nc0Jhbm5lcigkbW9kLCAkZGVzY3JpcHRpb25IdG1sID0gJycpCiAgICB7CiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgICAgIHNlbGY6OnJlZ2lzdGVyU21hcnR5U2VjdXJlRGlycygkc21hcnR5KTsKICAgICAgICAkdHBsRmlsZSA9IHNlbGY6OmNvbW1vblBhdGgoKSAuICcvdGVtcGxhdGVzL3NldHRpbmdzX2Jhbm5lcl9lY2hvLnRwbCc7CiAgICAgICAgaWYgKCFpc19maWxlKCR0cGxGaWxlKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSgkdHBsRmlsZSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfYmFubmVyX3VybCcsIHNlbGY6OmJhbm5lclVybCgkbW9kKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfbW9kdWxlX25hbWUnLCAkbW9kLT5HZXRGcmllbmRseU5hbWUoKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfbW9kdWxlX3ZlcnNpb24nLCAkbW9kLT5HZXRWZXJzaW9uKCkpOwogICAgICAgICR0cGwtPmFzc2lnbignbWFzX2Rlc2NyaXB0aW9uX2h0bWwnLCAkZGVzY3JpcHRpb25IdG1sKTsKICAgICAgICBlY2hvICR0cGwtPmZldGNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTbWFydHkgYmFubmVyIHNuaXBwZXQgZm9yIHNldHRpbmdzIHRlbXBsYXRlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldHRpbmdzQmFubmVyU21hcnR5U25pcHBldCgpCiAgICB7CiAgICAgICAgJHBhdGggPSBzZWxmOjpjb21tb25QYXRoKCkgLiAnL3RlbXBsYXRlcy9zZXR0aW5nc19iYW5uZXJfc25pcHBldC50cGwnOwogICAgICAgIGlmICghaXNfZmlsZSgkcGF0aCkgfHwgIWlzX3JlYWRhYmxlKCRwYXRoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHBhdGgpOwogICAgICAgIHJldHVybiAoJGNvbnRlbnQgIT09IGZhbHNlKSA/IChzdHJpbmcpICRjb250ZW50IDogJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmYWxsYmFjawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbGFuZygkbW9kLCAka2V5LCAkZmFsbGJhY2spCiAgICB7CiAgICAgICAgJHYgPSAkbW9kLT5MYW5nKCRrZXkpOwogICAgICAgIGlmICgkdiA9PT0gJycgfHwgJHYgPT09ICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICRmYWxsYmFjazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGltYWdlcy9pY29uLmdpZiBmcm9tIGljb24ucG5nIHdoZW4gbWlzc2luZyAocmVxdWlyZXMgSW1hZ2VNYWdpY2sgY29udmVydCkuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZUljb25HaWYoJG1vZCkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX2FkbWluX2JyYW5kaW5nLnBocCc7CiAgICAgICAgcmV0dXJuIE1hc19BZG1pbl9CcmFuZGluZzo6ZW5zdXJlSWNvbkdpZigkbW9kKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2l6ZSBpbWFnZXMvYmFubmVyLnBuZyB0byA2MDB4MTIwIHdoZW4gZmlsZSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZUJhbm5lcigkbW9kKQogICAgewogICAgICAgIHJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9tYXNfYWRtaW5fYnJhbmRpbmcucGhwJzsKICAgICAgICByZXR1cm4gTWFzX0FkbWluX0JyYW5kaW5nOjplbnN1cmVCYW5uZXIoJG1vZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBDTVNNUyBGb3JnZSBsaXN0aW5nIGFzc2V0cyB1bmRlciBhc3NldHMvIChpY29ucywgYmFubmVycykuCiAgICAgKiBBbHNvIHJlZnJlc2hlcyBydW50aW1lIGltYWdlcy9pY29uLmdpZiBhbmQgaW1hZ2VzL2Jhbm5lci5wbmcuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsbWl4ZWQ+ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVGb3JnZUFzc2V0cygkbW9kLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL21hc19mb3JnZV9hc3NldHMucGhwJzsKICAgICAgICBpZiAoJG1vZC0+R2V0TmFtZSgpID09PSAnTUFTX0FjY2Vzc2liaWxpdHknKSB7CiAgICAgICAgICAgIE1hc19Gb3JnZV9Bc3NldHM6OmVuc3VyZUFjY2Vzc2liaWxpdHlNYXN0ZXJzKCRtb2QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gTWFzX0ZvcmdlX0Fzc2V0czo6ZW5zdXJlRm9yZ2VBc3NldHMoJG1vZCwgJG9wdGlvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgRm9yZ2UgYXNzZXQgZmlsZXMgZm9yIHBhY2thZ2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIGJvb2wgJHJlcXVpcmVTY3JlZW5zaG90cwogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVGb3JnZUFzc2V0cygkbW9kLCAkcmVxdWlyZVNjcmVlbnNob3RzID0gdHJ1ZSkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX2ZvcmdlX2Fzc2V0cy5waHAnOwogICAgICAgIHJldHVybiBNYXNfRm9yZ2VfQXNzZXRzOjp2YWxpZGF0ZUZvcmdlQXNzZXRzKCRtb2QsICRyZXF1aXJlU2NyZWVuc2hvdHMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHB1Ymxpc2hhYmxlTWFzTW9kdWxlcygpCiAgICB7CiAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL21hc19mb3JnZV9hc3NldHMucGhwJzsKICAgICAgICByZXR1cm4gTWFzX0ZvcmdlX0Fzc2V0czo6cHVibGlzaGFibGVNb2R1bGVzKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUYWJiZWQgSGVscCAoTW9kdWxlIE1hbmFnZXIpLiBTZWUgTWFzX01vZHVsZV9Eb2NzLgogICAgICoKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LGFycmF5PHN0cmluZyxzdHJpbmc+PnxudWxsICR0YWJzCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLG1peGVkPiAkZXh0cmFBc3NpZ24KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hUYWJiZWRIZWxwKCRtb2QsICR0YWJzID0gbnVsbCwgYXJyYXkgJGV4dHJhQXNzaWduID0gYXJyYXkoKSkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX21vZHVsZV9kb2NzLnBocCc7CiAgICAgICAgcmV0dXJuIE1hc19Nb2R1bGVfRG9jczo6ZmV0Y2hUYWJiZWRIZWxwKCRtb2QsICR0YWJzLCAkZXh0cmFBc3NpZ24pOwogICAgfQoKICAgIC8qKgogICAgICogVGFiYmVkIEFib3V0IChNb2R1bGUgTWFuYWdlcikuIFNlZSBNYXNfTW9kdWxlX0RvY3MuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEBwYXJhbSBhcnJheTxpbnQsYXJyYXk8c3RyaW5nLHN0cmluZz4+fG51bGwgJHRhYnMKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsbWl4ZWQ+ICRleHRyYUFzc2lnbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZXRjaFRhYmJlZEFib3V0KCRtb2QsICR0YWJzID0gbnVsbCwgYXJyYXkgJGV4dHJhQXNzaWduID0gYXJyYXkoKSkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbWFzX21vZHVsZV9kb2NzLnBocCc7CiAgICAgICAgcmV0dXJuIE1hc19Nb2R1bGVfRG9jczo6ZmV0Y2hUYWJiZWRBYm91dCgkbW9kLCAkdGFicywgJGV4dHJhQXNzaWduKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_forge_assets.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENNU01TIEZvcmdlIGxpc3RpbmcgYXNzZXRzIChhc3NldHMvaWNvbi0qLnBuZywgYmFubmVyLSoucG5nLCBzY3JlZW5zaG90LSoucG5nKS4KICogTm90IGxvYWRlZCBhdCBydW50aW1lOyBwYWNrYWdlZCBmb3IgRm9yZ2UgcHJvamVjdCBwYWdlcyBvbmx5LgogKgogKiBAcGFja2FnZSBNQVNfQ29tbW9uCiAqLwoKaWYgKCFkZWZpbmVkKCdNQVNfRk9SR0VfQVNTRVRTX0xPQURFRCcpKSB7CiAgICBkZWZpbmUoJ01BU19GT1JHRV9BU1NFVFNfTE9BREVEJywgdHJ1ZSk7Cn0KCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9tYXNfZm9yZ2VfYXNzZXRfaW1hZ2VzLnBocCc7CgpmaW5hbCBjbGFzcyBNYXNfRm9yZ2VfQXNzZXRzCnsKICAgIC8qKiBAdmFyIHN0cmluZ1tdICovCiAgICBwdWJsaWMgc3RhdGljICRwdWJsaXNoYWJsZU1vZHVsZXMgPSBhcnJheSgKICAgICAgICAnTUFTX0FjY2Vzc2liaWxpdHknLAogICAgICAgICdNQVNfQUlBc3Npc3RhbnQnLAogICAgICAgICdNQVNfQXV0aEh1YicsCiAgICAgICAgJ01BU19CdWxsZXRpbicsCiAgICAgICAgJ01BU19DYXJ0JywKICAgICAgICAnTUFTX0NHQmxvZ1RvTElTRScsCiAgICAgICAgJ01BU19DU1InLAogICAgICAgICdNQVNfRGlzcXVzJywKICAgICAgICAnTUFTX011bHRpRGFzaCcsCiAgICAgICAgJ01BU19Ob3RpZmljYXRpb25DZW50ZXInLAogICAgICAgICdNQVNfT3BlblN0cmVldE1hcCcsCiAgICAgICAgJ01BU19QYXltZW50JywKICAgICAgICAnTUFTX1BheXBhbCcsCiAgICAgICAgJ01BU19SZWZlcnJhbFN5c3RlbScsCiAgICAgICAgJ01BU19TZWN1cml0eScsCiAgICAgICAgJ01BU19TaG9wJywKICAgICAgICAnTUFTX1NvY2lhbHMnLAogICAgKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdWJsaXNoYWJsZU1vZHVsZXMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjokcHVibGlzaGFibGVNb2R1bGVzOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgcnVudGltZSArIEZvcmdlIGFzc2V0cyBmb3IgYSBtb2R1bGUuCiAgICAgKgogICAgICogQHBhcmFtICRtb2QKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsbWl4ZWQ+ICRvcHRpb25zIHNraXBfcnVudGltZSwgc2tpcF9mb3JnZSwgc2tpcF9zY3JlZW5zaG90cwogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5zdXJlRm9yZ2VBc3NldHMoJG1vZCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgICRyZXN1bHQgPSBhcnJheSgKICAgICAgICAgICAgJ21vZHVsZScgPT4gJG1vZC0+R2V0TmFtZSgpLAogICAgICAgICAgICAncnVudGltZV9pY29uJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3J1bnRpbWVfYmFubmVyJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2ZvcmdlX2ljb25zJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2ZvcmdlX2Jhbm5lcnMnID0+IGZhbHNlLAogICAgICAgICAgICAnZXJyb3JzJyA9PiBhcnJheSgpLAogICAgICAgICk7CgogICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snc2tpcF9ydW50aW1lJ10pKSB7CiAgICAgICAgICAgICRyZXN1bHRbJ3J1bnRpbWVfaWNvbiddID0gTWFzX0FkbWluX1VpOjplbnN1cmVJY29uR2lmKCRtb2QpOwogICAgICAgICAgICAkcmVzdWx0WydydW50aW1lX2Jhbm5lciddID0gTWFzX0FkbWluX1VpOjplbnN1cmVCYW5uZXIoJG1vZCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydza2lwX2ZvcmdlJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJG1vZHVsZVBhdGggPSBNYXNfQWRtaW5fVWk6Om1vZHVsZVBhdGgoJG1vZCk7CiAgICAgICAgJGFzc2V0c0RpciA9IGNtc19qb2luX3BhdGgoJG1vZHVsZVBhdGgsICdhc3NldHMnKTsKICAgICAgICBpZiAoIWlzX2RpcigkYXNzZXRzRGlyKSkgewogICAgICAgICAgICBta2RpcigkYXNzZXRzRGlyLCAwNzU1LCB0cnVlKTsKICAgICAgICB9CgogICAgICAgICRpY29uU3JjID0gc2VsZjo6cmVzb2x2ZUljb25Tb3VyY2UoJG1vZHVsZVBhdGgpOwogICAgICAgIGlmICgkaWNvblNyYyAhPT0gJycpIHsKICAgICAgICAgICAgJHJlc3VsdFsnZm9yZ2VfaWNvbnMnXSA9IE1hc19Gb3JnZV9Bc3NldEltYWdlczo6Z2VuZXJhdGVGb3JnZUljb25zKCRhc3NldHNEaXIsICRpY29uU3JjLCAkcmVzdWx0WydlcnJvcnMnXSk7CiAgICAgICAgICAgIE1hc19Gb3JnZV9Bc3NldEltYWdlczo6Y29weVN2Z0lmUHJlc2VudCgkbW9kdWxlUGF0aCwgJGFzc2V0c0Rpcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdFsnZXJyb3JzJ11bXSA9ICdObyBpY29uIHNvdXJjZSBQTkcgZm91bmQnOwogICAgICAgIH0KCiAgICAgICAgJGJhbm5lclNyYyA9IHNlbGY6OnJlc29sdmVCYW5uZXJTb3VyY2UoJG1vZHVsZVBhdGgpOwogICAgICAgIGlmICgkYmFubmVyU3JjICE9PSAnJykgewogICAgICAgICAgICAkcmVzdWx0Wydmb3JnZV9iYW5uZXJzJ10gPSBNYXNfRm9yZ2VfQXNzZXRJbWFnZXM6OmdlbmVyYXRlRm9yZ2VCYW5uZXJzKCRhc3NldHNEaXIsICRiYW5uZXJTcmMsICRyZXN1bHRbJ2Vycm9ycyddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0WydlcnJvcnMnXVtdID0gJ05vIGJhbm5lciBzb3VyY2UgZm91bmQnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIGJvb2wgJHJlcXVpcmVTY3JlZW5zaG90cwogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVGb3JnZUFzc2V0cygkbW9kLCAkcmVxdWlyZVNjcmVlbnNob3RzID0gdHJ1ZSkKICAgIHsKICAgICAgICAkbW9kdWxlUGF0aCA9IE1hc19BZG1pbl9VaTo6bW9kdWxlUGF0aCgkbW9kKTsKICAgICAgICAkYXNzZXRzRGlyID0gY21zX2pvaW5fcGF0aCgkbW9kdWxlUGF0aCwgJ2Fzc2V0cycpOwogICAgICAgICRyZXBvcnQgPSBhcnJheSgKICAgICAgICAgICAgJ21vZHVsZScgPT4gJG1vZC0+R2V0TmFtZSgpLAogICAgICAgICAgICAnb2snID0+IHRydWUsCiAgICAgICAgICAgICdpc3N1ZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdmaWxlcycgPT4gYXJyYXkoKSwKICAgICAgICApOwoKICAgICAgICAkc3BlY3MgPSBhcnJheSgKICAgICAgICAgICAgJ2ljb24tMTI4eDEyOC5wbmcnID0+IGFycmF5KCd3JyA9PiAxMjgsICdoJyA9PiAxMjgsICdtYXgnID0+IDEwNDg1NzYsICdyZXF1aXJlZCcgPT4gdHJ1ZSksCiAgICAgICAgICAgICdpY29uLTI1NngyNTYucG5nJyA9PiBhcnJheSgndycgPT4gMjU2LCAnaCcgPT4gMjU2LCAnbWF4JyA9PiAxMDQ4NTc2LCAncmVxdWlyZWQnID0+IHRydWUpLAogICAgICAgICAgICAnYmFubmVyLTc3MngyNTAucG5nJyA9PiBhcnJheSgndycgPT4gNzcyLCAnaCcgPT4gMjUwLCAnbWF4JyA9PiA0MTk0MzA0LCAncmVxdWlyZWQnID0+IHRydWUpLAogICAgICAgICAgICAnYmFubmVyLTE1NDR4NTAwLnBuZycgPT4gYXJyYXkoJ3cnID0+IDE1NDQsICdoJyA9PiA1MDAsICdtYXgnID0+IDQxOTQzMDQsICdyZXF1aXJlZCcgPT4gdHJ1ZSksCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRyZXF1aXJlU2NyZWVuc2hvdHMpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpIDw9IDM7ICRpKyspIHsKICAgICAgICAgICAgICAgICRzcGVjc1snc2NyZWVuc2hvdC0nIC4gJGkgLiAnLnBuZyddID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ21pbl93JyA9PiA4MDAsCiAgICAgICAgICAgICAgICAgICAgJ21heF93JyA9PiAxOTIwLAogICAgICAgICAgICAgICAgICAgICdtYXgnID0+IDIwOTcxNTIsCiAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHNwZWNzIGFzICRuYW1lID0+ICRzcGVjKSB7CiAgICAgICAgICAgICRwYXRoID0gY21zX2pvaW5fcGF0aCgkYXNzZXRzRGlyLCAkbmFtZSk7CiAgICAgICAgICAgIGlmICghaXNfZmlsZSgkcGF0aCkpIHsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNwZWNbJ3JlcXVpcmVkJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcG9ydFsnb2snXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICRyZXBvcnRbJ2lzc3VlcyddW10gPSAnTWlzc2luZyAnIC4gJG5hbWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2l6ZSA9IEBmaWxlc2l6ZSgkcGF0aCk7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gZmFsc2UgJiYgJHNpemUgPiAoaW50KSAkc3BlY1snbWF4J10pIHsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ29rJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ2lzc3VlcyddW10gPSAkbmFtZSAuICcgZXhjZWVkcyBtYXggc2l6ZSAoJyAuICRzaXplIC4gJyBieXRlcyknOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkaW1zID0gQGdldGltYWdlc2l6ZSgkcGF0aCk7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGRpbXMpKSB7CiAgICAgICAgICAgICAgICAkcmVwb3J0WydvayddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkcmVwb3J0Wydpc3N1ZXMnXVtdID0gJG5hbWUgLiAnIGlzIG5vdCBhIHJlYWRhYmxlIGltYWdlJzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkc3BlY1sndyddKSAmJiAoJGRpbXNbMF0gIT09IChpbnQpICRzcGVjWyd3J10gfHwgJGRpbXNbMV0gIT09IChpbnQpICRzcGVjWydoJ10pKSB7CiAgICAgICAgICAgICAgICAkcmVwb3J0WydvayddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkcmVwb3J0Wydpc3N1ZXMnXVtdID0gJG5hbWUgLiAnIGV4cGVjdGVkICcgLiAkc3BlY1sndyddIC4gJ3gnIC4gJHNwZWNbJ2gnXSAuICcsIGdvdCAnIC4gJGRpbXNbMF0gLiAneCcgLiAkZGltc1sxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJHNwZWNbJ21pbl93J10pICYmICRkaW1zWzBdIDwgKGludCkgJHNwZWNbJ21pbl93J10pIHsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ29rJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ2lzc3VlcyddW10gPSAkbmFtZSAuICcgd2lkdGggJyAuICRkaW1zWzBdIC4gJyBiZWxvdyBtaW5pbXVtICcgLiAkc3BlY1snbWluX3cnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJHNwZWNbJ21heF93J10pICYmICRkaW1zWzBdID4gKGludCkgJHNwZWNbJ21heF93J10pIHsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ29rJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ2lzc3VlcyddW10gPSAkbmFtZSAuICcgd2lkdGggJyAuICRkaW1zWzBdIC4gJyBhYm92ZSBtYXhpbXVtICcgLiAkc3BlY1snbWF4X3cnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVwb3J0WydmaWxlcyddWyRuYW1lXSA9ICRkaW1zWzBdIC4gJ3gnIC4gJGRpbXNbMV07CiAgICAgICAgfQoKICAgICAgICAkc3ZnID0gY21zX2pvaW5fcGF0aCgkYXNzZXRzRGlyLCAnaWNvbi5zdmcnKTsKICAgICAgICBpZiAoaXNfZmlsZSgkc3ZnKSAmJiAhaXNfZmlsZShjbXNfam9pbl9wYXRoKCRhc3NldHNEaXIsICdpY29uLTEyOHgxMjgucG5nJykpKSB7CiAgICAgICAgICAgICRyZXBvcnRbJ29rJ10gPSBmYWxzZTsKICAgICAgICAgICAgJHJlcG9ydFsnaXNzdWVzJ11bXSA9ICdpY29uLnN2ZyBwcmVzZW50IGJ1dCBpY29uLTEyOHgxMjgucG5nIG1pc3NpbmcgKEZvcmdlIHJlcXVpcmVzIFBORyBmYWxsYmFjayknOwogICAgICAgIH0KCiAgICAgICAgJGdpZiA9IGNtc19qb2luX3BhdGgoJG1vZHVsZVBhdGgsICdpbWFnZXMnLCAnaWNvbi5naWYnKTsKICAgICAgICBpZiAoaXNfZmlsZSgkZ2lmKSkgewogICAgICAgICAgICAkZyA9IEBnZXRpbWFnZXNpemUoJGdpZik7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGcpIHx8ICRnWzBdIDwgMTYgfHwgJGdbMF0gPiA0OCB8fCAkZ1sxXSA8IDE2IHx8ICRnWzFdID4gNDgpIHsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ29rJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXBvcnRbJ2lzc3VlcyddW10gPSAnUnVudGltZSBpY29uLmdpZiBpbnZhbGlkIHNpemU6ICcgLiAoaXNfYXJyYXkoJGcpID8gJGdbMF0gLiAneCcgLiAkZ1sxXSA6ICd1bnJlYWRhYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVwb3J0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlUGF0aAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlSWNvblNvdXJjZSgkbW9kdWxlUGF0aCkKICAgIHsKICAgICAgICAkaW1hZ2VzRGlyID0gY21zX2pvaW5fcGF0aCgkbW9kdWxlUGF0aCwgJ2ltYWdlcycpOwogICAgICAgICRhc3NldHNEaXIgPSBjbXNfam9pbl9wYXRoKCRtb2R1bGVQYXRoLCAnYXNzZXRzJyk7CiAgICAgICAgJGNhbmRpZGF0ZXMgPSBhcnJheSgKICAgICAgICAgICAgY21zX2pvaW5fcGF0aCgkaW1hZ2VzRGlyLCAnaWNvbi01MTIucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGltYWdlc0RpciwgJ2ljb24tMTkyLnBuZycpLAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdJY29uLnBuZycpLAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdpY29uLnBuZycpLAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRtb2R1bGVQYXRoLCAnaWNvbi5wbmcnKSwKICAgICAgICAgICAgY21zX2pvaW5fcGF0aCgkbW9kdWxlUGF0aCwgJ2ljb25zJywgJ2ljb24ucG5nJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGltYWdlc0RpciwgJ2ljb24uZ2lmJyksCiAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJGFzc2V0c0RpciwgJ2ljb24tMjU2eDI1Ni5wbmcnKSwKICAgICAgICAgICAgY21zX2pvaW5fcGF0aCgkYXNzZXRzRGlyLCAnaWNvbi0xMjh4MTI4LnBuZycpLAogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJGNhbmRpZGF0ZXMgYXMgJHBhdGgpIHsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJHBhdGgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlUGF0aAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlQmFubmVyU291cmNlKCRtb2R1bGVQYXRoKQogICAgewogICAgICAgICRpbWFnZXNEaXIgPSBjbXNfam9pbl9wYXRoKCRtb2R1bGVQYXRoLCAnaW1hZ2VzJyk7CiAgICAgICAgJGNhbmRpZGF0ZXMgPSBhcnJheSgKICAgICAgICAgICAgY21zX2pvaW5fcGF0aCgkaW1hZ2VzRGlyLCAnQmFubmVyLnBuZycpLAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdiYW5uZXIxLnBuZycpLAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdiYW5uZXIucG5nJyksCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkY2FuZGlkYXRlcyBhcyAkcGF0aCkgewogICAgICAgICAgICBpZiAoaXNfZmlsZSgkcGF0aCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcGF0aDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZXRlY3RJbWFnZUJhY2tncm91bmRDb2xvcigkaW1hZ2VTcmMpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19Gb3JnZV9Bc3NldEltYWdlczo6ZGV0ZWN0SW1hZ2VCYWNrZ3JvdW5kQ29sb3IoJGltYWdlU3JjKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZVBsYWNlaG9sZGVyU2NyZWVuc2hvdHMoJG1vZCwgYXJyYXkgJGxhYmVscyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19Gb3JnZV9Bc3NldEltYWdlczo6ZW5zdXJlUGxhY2Vob2xkZXJTY3JlZW5zaG90cygkbW9kLCAkbGFiZWxzKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZUFjY2Vzc2liaWxpdHlNYXN0ZXJzKCRtb2QpCiAgICB7CiAgICAgICAgcmV0dXJuIE1hc19Gb3JnZV9Bc3NldEltYWdlczo6ZW5zdXJlQWNjZXNzaWJpbGl0eU1hc3RlcnMoJG1vZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_forge_asset_images.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEltYWdlIGdlbmVyYXRpb24gaGVscGVycyBmb3IgTWFzX0ZvcmdlX0Fzc2V0cyAoRm9yZ2UgaWNvbnMsIGJhbm5lcnMsIHNjcmVlbnNob3RzKS4KICoKICogQHBhY2thZ2UgTUFTX0NvbW1vbgogKi8KCmlmICghZGVmaW5lZCgnTUFTX0ZPUkdFX0FTU0VUX0lNQUdFU19MT0FERUQnKSkgewogICAgZGVmaW5lKCdNQVNfRk9SR0VfQVNTRVRfSU1BR0VTX0xPQURFRCcsIHRydWUpOwp9CgpmaW5hbCBjbGFzcyBNYXNfRm9yZ2VfQXNzZXRJbWFnZXMKewogICAgLyoqCiAgICAgKiBEZXRlY3QgYSBzb2xpZCBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gb3BhcXVlIHBpeGVscyAocm91bmRlZCBpY29ucyBvbiB0cmFuc3BhcmVuY3kpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlU3JjCiAgICAgKiBAcmV0dXJuIHN0cmluZyBDU1MgaGV4IGNvbG9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGV0ZWN0SW1hZ2VCYWNrZ3JvdW5kQ29sb3IoJGltYWdlU3JjKQogICAgewogICAgICAgICRzaXplID0gQGdldGltYWdlc2l6ZSgkaW1hZ2VTcmMpOwogICAgICAgIGlmICghaXNfYXJyYXkoJHNpemUpIHx8IGVtcHR5KCRzaXplWzBdKSB8fCBlbXB0eSgkc2l6ZVsxXSkpIHsKICAgICAgICAgICAgcmV0dXJuICcjZmZmZmZmJzsKICAgICAgICB9CiAgICAgICAgJHcgPSAoaW50KSAkc2l6ZVswXTsKICAgICAgICAkaCA9IChpbnQpICRzaXplWzFdOwogICAgICAgICRwb2ludHMgPSBhcnJheSgKICAgICAgICAgICAgYXJyYXkoKGludCkgcm91bmQoJHcgKiAwLjEyKSwgKGludCkgcm91bmQoJGggKiAwLjUwKSksCiAgICAgICAgICAgIGFycmF5KChpbnQpIHJvdW5kKCR3ICogMC41MCksIChpbnQpIHJvdW5kKCRoICogMC4xMikpLAogICAgICAgICAgICBhcnJheSgoaW50KSByb3VuZCgkdyAqIDAuODgpLCAoaW50KSByb3VuZCgkaCAqIDAuNTApKSwKICAgICAgICAgICAgYXJyYXkoKGludCkgcm91bmQoJHcgKiAwLjUwKSwgKGludCkgcm91bmQoJGggKiAwLjg4KSksCiAgICAgICAgICAgIGFycmF5KChpbnQpIHJvdW5kKCR3ICogMC4xOCksIChpbnQpIHJvdW5kKCRoICogMC4xOCkpLAogICAgICAgICAgICBhcnJheSgoaW50KSByb3VuZCgkdyAqIDAuODIpLCAoaW50KSByb3VuZCgkaCAqIDAuMTgpKSwKICAgICAgICAgICAgYXJyYXkoKGludCkgcm91bmQoJHcgKiAwLjE4KSwgKGludCkgcm91bmQoJGggKiAwLjgyKSksCiAgICAgICAgICAgIGFycmF5KChpbnQpIHJvdW5kKCR3ICogMC44MiksIChpbnQpIHJvdW5kKCRoICogMC44MikpLAogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJHBvaW50cyBhcyAkcHQpIHsKICAgICAgICAgICAgJHggPSAoaW50KSAkcHRbMF07CiAgICAgICAgICAgICR5ID0gKGludCkgJHB0WzFdOwogICAgICAgICAgICBpZiAoJHggPCAwIHx8ICR5IDwgMCB8fCAkeCA+PSAkdyB8fCAkeSA+PSAkaCkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFscGhhQ21kID0gJ2NvbnZlcnQgJyAuIGVzY2FwZXNoZWxsYXJnKCRpbWFnZVNyYykKICAgICAgICAgICAgICAgIC4gJyAtZm9ybWF0ICIlW2Z4OnUucHsnIC4gJHggLiAnLCcgLiAkeSAuICd9LmFdIiBpbmZvOiAyPi9kZXYvbnVsbCc7CiAgICAgICAgICAgICRhbHBoYU91dCA9IGFycmF5KCk7CiAgICAgICAgICAgIEBleGVjKCRhbHBoYUNtZCwgJGFscGhhT3V0LCAkYWxwaGFDb2RlKTsKICAgICAgICAgICAgJGFscGhhID0gKCRhbHBoYUNvZGUgPT09IDAgJiYgaXNzZXQoJGFscGhhT3V0WzBdKSkgPyAoZmxvYXQpICRhbHBoYU91dFswXSA6IDAuMDsKICAgICAgICAgICAgaWYgKCRhbHBoYSA8IDAuNSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbG9yQ21kID0gJ2NvbnZlcnQgJyAuIGVzY2FwZXNoZWxsYXJnKCRpbWFnZVNyYykKICAgICAgICAgICAgICAgIC4gJyAtZm9ybWF0ICIlW2hleDp1LnB7JyAuICR4IC4gJywnIC4gJHkgLiAnfV0iIGluZm86IDI+L2Rldi9udWxsJzsKICAgICAgICAgICAgJGNvbG9yT3V0ID0gYXJyYXkoKTsKICAgICAgICAgICAgQGV4ZWMoJGNvbG9yQ21kLCAkY29sb3JPdXQsICRjb2xvckNvZGUpOwogICAgICAgICAgICBpZiAoJGNvbG9yQ29kZSAhPT0gMCB8fCBlbXB0eSgkY29sb3JPdXRbMF0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaGV4ID0gc3RydG9sb3dlcihsdHJpbSgoc3RyaW5nKSAkY29sb3JPdXRbMF0sICcjJykpOwogICAgICAgICAgICBpZiAoc3RybGVuKCRoZXgpID09PSA4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyMnIC4gc3Vic3RyKCRoZXgsIDAsIDYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJsZW4oJGhleCkgPT09IDYpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnIycgLiAkaGV4OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAnI2ZmZmZmZic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NldHNEaXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TcmMKICAgICAqIEBwYXJhbSBhcnJheTxpbnQsc3RyaW5nPiAkZXJyb3JzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZUZvcmdlSWNvbnMoJGFzc2V0c0RpciwgJGljb25TcmMsIGFycmF5ICYkZXJyb3JzKQogICAgewogICAgICAgICRvayA9IHRydWU7CiAgICAgICAgJHRhcmdldHMgPSBhcnJheSgKICAgICAgICAgICAgJ2ljb24tMTI4eDEyOC5wbmcnID0+ICcxMjh4MTI4JywKICAgICAgICAgICAgJ2ljb24tMjU2eDI1Ni5wbmcnID0+ICcyNTZ4MjU2JywKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCR0YXJnZXRzIGFzICRmaWxlID0+ICRkaW0pIHsKICAgICAgICAgICAgJGRlc3QgPSBjbXNfam9pbl9wYXRoKCRhc3NldHNEaXIsICRmaWxlKTsKICAgICAgICAgICAgaWYgKCFzZWxmOjpmbGF0dGVuUmVzaXplVG9HZW9tZXRyeSgkaWNvblNyYywgJGRpbSwgJGRlc3QpKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAnRmFpbGVkIHRvIGdlbmVyYXRlICcgLiAkZmlsZTsKICAgICAgICAgICAgICAgICRvayA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb2s7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NldHNEaXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJhbm5lclNyYwogICAgICogQHBhcmFtIGFycmF5PGludCxzdHJpbmc+ICRlcnJvcnMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlRm9yZ2VCYW5uZXJzKCRhc3NldHNEaXIsICRiYW5uZXJTcmMsIGFycmF5ICYkZXJyb3JzKQogICAgewogICAgICAgICRvayA9IHRydWU7CiAgICAgICAgJHN0YW5kYXJkID0gY21zX2pvaW5fcGF0aCgkYXNzZXRzRGlyLCAnYmFubmVyLTc3MngyNTAucG5nJyk7CiAgICAgICAgaWYgKCFzZWxmOjpmbGF0dGVuUmVzaXplVG9HZW9tZXRyeSgkYmFubmVyU3JjLCAnNzcyeDI1MCcsICRzdGFuZGFyZCkpIHsKICAgICAgICAgICAgJGVycm9yc1tdID0gJ0ZhaWxlZCB0byBnZW5lcmF0ZSBiYW5uZXItNzcyeDI1MC5wbmcnOwogICAgICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRyZXRpbmEgPSBjbXNfam9pbl9wYXRoKCRhc3NldHNEaXIsICdiYW5uZXItMTU0NHg1MDAucG5nJyk7CiAgICAgICAgJHNyY0ZvclJldGluYSA9IGlzX2ZpbGUoJHN0YW5kYXJkKSA/ICRzdGFuZGFyZCA6ICRiYW5uZXJTcmM7CiAgICAgICAgaWYgKCFzZWxmOjpmbGF0dGVuUmVzaXplVG9HZW9tZXRyeSgkc3JjRm9yUmV0aW5hLCAnMTU0NHg1MDAnLCAkcmV0aW5hKSkgewogICAgICAgICAgICAkZXJyb3JzW10gPSAnRmFpbGVkIHRvIGdlbmVyYXRlIGJhbm5lci0xNTQ0eDUwMC5wbmcnOwogICAgICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb2s7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2R1bGVQYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NldHNEaXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3B5U3ZnSWZQcmVzZW50KCRtb2R1bGVQYXRoLCAkYXNzZXRzRGlyKQogICAgewogICAgICAgICRkZXN0ID0gY21zX2pvaW5fcGF0aCgkYXNzZXRzRGlyLCAnaWNvbi5zdmcnKTsKICAgICAgICBpZiAoaXNfZmlsZSgkZGVzdCkpIHsKICAgICAgICAgICAgc2VsZjo6ZmluYWxpemVGaWxlKCRkZXN0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkY2FuZGlkYXRlcyA9IGFycmF5KAogICAgICAgICAgICBjbXNfam9pbl9wYXRoKCRtb2R1bGVQYXRoLCAnaW1hZ2VzJywgJ2ljb24uc3ZnJyksCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkY2FuZGlkYXRlcyBhcyAkcGF0aCkgewogICAgICAgICAgICBpZiAoaXNfZmlsZSgkcGF0aCkpIHsKICAgICAgICAgICAgICAgIGNvcHkoJHBhdGgsICRkZXN0KTsKICAgICAgICAgICAgICAgIHNlbGY6OmZpbmFsaXplRmlsZSgkZGVzdCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBGb3JnZSBzY3JlZW5zaG90cyBmcm9tIGJhbm5lciArIG1vZHVsZSBsYWJlbCB3aGVuIGxpdmUgY2FwdHVyZSBpcyB1bmF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIGFycmF5PGludCxzdHJpbmc+ICRsYWJlbHMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZVBsYWNlaG9sZGVyU2NyZWVuc2hvdHMoJG1vZCwgYXJyYXkgJGxhYmVscyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJG1vZHVsZVBhdGggPSBNYXNfQWRtaW5fVWk6Om1vZHVsZVBhdGgoJG1vZCk7CiAgICAgICAgJGFzc2V0c0RpciA9IGNtc19qb2luX3BhdGgoJG1vZHVsZVBhdGgsICdhc3NldHMnKTsKICAgICAgICBpZiAoIWlzX2RpcigkYXNzZXRzRGlyKSkgewogICAgICAgICAgICBta2RpcigkYXNzZXRzRGlyLCAwNzU1LCB0cnVlKTsKICAgICAgICB9CgogICAgICAgICRiYW5uZXJTcmMgPSBNYXNfRm9yZ2VfQXNzZXRzOjpyZXNvbHZlQmFubmVyU291cmNlKCRtb2R1bGVQYXRoKTsKICAgICAgICBpZiAoJGJhbm5lclNyYyA9PT0gJycgJiYgaXNfZmlsZShjbXNfam9pbl9wYXRoKCRhc3NldHNEaXIsICdiYW5uZXItNzcyeDI1MC5wbmcnKSkpIHsKICAgICAgICAgICAgJGJhbm5lclNyYyA9IGNtc19qb2luX3BhdGgoJGFzc2V0c0RpciwgJ2Jhbm5lci03NzJ4MjUwLnBuZycpOwogICAgICAgIH0KICAgICAgICBpZiAoJGJhbm5lclNyYyA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvdW50KCRsYWJlbHMpIDwgMykgewogICAgICAgICAgICAkbGFiZWxzID0gYXJyYXkoCiAgICAgICAgICAgICAgICBzZWxmOjpkZWZhdWx0U2NyZWVuc2hvdExhYmVsKCRtb2QsIDEpLAogICAgICAgICAgICAgICAgc2VsZjo6ZGVmYXVsdFNjcmVlbnNob3RMYWJlbCgkbW9kLCAyKSwKICAgICAgICAgICAgICAgIHNlbGY6OmRlZmF1bHRTY3JlZW5zaG90TGFiZWwoJG1vZCwgMyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkbmFtZSA9ICRtb2QtPkdldEZyaWVuZGx5TmFtZSgpOwogICAgICAgIGlmICgkbmFtZSA9PT0gJycpIHsKICAgICAgICAgICAgJG5hbWUgPSAkbW9kLT5HZXROYW1lKCk7CiAgICAgICAgfQogICAgICAgICRvayA9IHRydWU7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDw9IDM7ICRpKyspIHsKICAgICAgICAgICAgJGRlc3QgPSBjbXNfam9pbl9wYXRoKCRhc3NldHNEaXIsICdzY3JlZW5zaG90LScgLiAkaSAuICcucG5nJyk7CiAgICAgICAgICAgIGlmIChpc19maWxlKCRkZXN0KSkgewogICAgICAgICAgICAgICAgJGRpbXMgPSBAZ2V0aW1hZ2VzaXplKCRkZXN0KTsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkZGltcykgJiYgJGRpbXNbMF0gPj0gODAwICYmICRkaW1zWzBdIDw9IDE5MjApIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFiZWwgPSBpc3NldCgkbGFiZWxzWyRpIC0gMV0pID8gKHN0cmluZykgJGxhYmVsc1skaSAtIDFdIDogKCdTY3JlZW5zaG90ICcgLiAkaSk7CiAgICAgICAgICAgICR0bXAgPSAkZGVzdCAuICcudG1wLnBuZyc7CiAgICAgICAgICAgICRjbWQgPSAnY29udmVydCAtc2l6ZSAxMjAweDY3NSBjYW52YXM6I2Y0ZjZmOCAnCiAgICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCRiYW5uZXJTcmMpIC4gJyAtZ3Jhdml0eSBub3J0aCAtZ2VvbWV0cnkgKzArNDAgLWNvbXBvc2l0ZSAnCiAgICAgICAgICAgICAgICAuICctZ3Jhdml0eSBjZW50ZXIgLXBvaW50c2l6ZSAyOCAtZmlsbCAiIzIyMjIyMiIgLWFubm90YXRlICswKzEyMCAnCiAgICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCRuYW1lKQogICAgICAgICAgICAgICAgLiAnIC1ncmF2aXR5IHNvdXRoIC1wb2ludHNpemUgMjIgLWZpbGwgIiM1NTU1NTUiIC1hbm5vdGF0ZSArMCs4MCAnCiAgICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCRsYWJlbCkKICAgICAgICAgICAgICAgIC4gJyAnIC4gZXNjYXBlc2hlbGxhcmcoJHRtcCkgLiAnIDI+L2Rldi9udWxsJzsKICAgICAgICAgICAgQGV4ZWMoJGNtZCwgJG91dCwgJGNvZGUpOwogICAgICAgICAgICBpZiAoJGNvZGUgIT09IDAgfHwgIWlzX2ZpbGUoJHRtcCkpIHsKICAgICAgICAgICAgICAgICRjbWQyID0gJ2NvbnZlcnQgJyAuIGVzY2FwZXNoZWxsYXJnKCRiYW5uZXJTcmMpCiAgICAgICAgICAgICAgICAgICAgLiAnIC1yZXNpemUgMTIwMHggLWJhY2tncm91bmQgIiNmNGY2ZjgiIC1ncmF2aXR5IGNlbnRlciAtZXh0ZW50IDEyMDB4Njc1ICcKICAgICAgICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCR0bXApIC4gJyAyPi9kZXYvbnVsbCc7CiAgICAgICAgICAgICAgICBAZXhlYygkY21kMiwgJG91dDIsICRjb2RlMik7CiAgICAgICAgICAgICAgICBpZiAoJGNvZGUyICE9PSAwIHx8ICFpc19maWxlKCR0bXApKSB7CiAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQHJlbmFtZSgkdG1wLCAkZGVzdCk7CiAgICAgICAgICAgIHNlbGY6OmZpbmFsaXplRmlsZSgkZGVzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb2s7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBkZWZhdWx0IGFjY2Vzc2liaWxpdHkgbW9kdWxlIG1hc3RlcnMgKGljb24gKyBiYW5uZXIpLgogICAgICoKICAgICAqIEBwYXJhbSAkbW9kCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVBY2Nlc3NpYmlsaXR5TWFzdGVycygkbW9kKQogICAgewogICAgICAgIGlmICgkbW9kLT5HZXROYW1lKCkgIT09ICdNQVNfQWNjZXNzaWJpbGl0eScpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkaW1hZ2VzRGlyID0gY21zX2pvaW5fcGF0aChNYXNfQWRtaW5fVWk6Om1vZHVsZVBhdGgoJG1vZCksICdpbWFnZXMnKTsKICAgICAgICBpZiAoIWlzX2RpcigkaW1hZ2VzRGlyKSkgewogICAgICAgICAgICBta2RpcigkaW1hZ2VzRGlyLCAwNzU1LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgJGljb241MTIgPSBjbXNfam9pbl9wYXRoKCRpbWFnZXNEaXIsICdpY29uLTUxMi5wbmcnKTsKICAgICAgICAkYmFubmVyID0gY21zX2pvaW5fcGF0aCgkaW1hZ2VzRGlyLCAnQmFubmVyLnBuZycpOwoKICAgICAgICBpZiAoIWlzX2ZpbGUoJGljb241MTIpKSB7CiAgICAgICAgICAgICR0bXAgPSAkaWNvbjUxMiAuICcudG1wLnBuZyc7CiAgICAgICAgICAgICRjbWQgPSAnY29udmVydCAtc2l6ZSA1MTJ4NTEyIHhjOiIjMjU2M2ViIiAnCiAgICAgICAgICAgICAgICAuICctZmlsbCB3aGl0ZSAtcG9pbnRzaXplIDIyMCAtZ3Jhdml0eSBjZW50ZXIgLWFubm90YXRlICswLTMwICJBMTF5IiAnCiAgICAgICAgICAgICAgICAuICctZmlsbCB3aGl0ZSAtcG9pbnRzaXplIDcyIC1ncmF2aXR5IGNlbnRlciAtYW5ub3RhdGUgKzArMTIwICJNQVMiICcKICAgICAgICAgICAgICAgIC4gZXNjYXBlc2hlbGxhcmcoJHRtcCkgLiAnIDI+L2Rldi9udWxsJzsKICAgICAgICAgICAgQGV4ZWMoJGNtZCwgJG91dCwgJGNvZGUpOwogICAgICAgICAgICBpZiAoJGNvZGUgIT09IDAgfHwgIWlzX2ZpbGUoJHRtcCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBAcmVuYW1lKCR0bXAsICRpY29uNTEyKTsKICAgICAgICAgICAgc2VsZjo6ZmluYWxpemVGaWxlKCRpY29uNTEyKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfZmlsZSgkYmFubmVyKSkgewogICAgICAgICAgICAkdG1wID0gJGJhbm5lciAuICcudG1wLnBuZyc7CiAgICAgICAgICAgICRjbWQgPSAnY29udmVydCAtc2l6ZSAxNTM2eDM4NCBncmFkaWVudDojMWQ0ZWQ4LSMzYjgyZjYgJwogICAgICAgICAgICAgICAgLiAnLWZpbGwgd2hpdGUgLXBvaW50c2l6ZSA3MiAtZ3Jhdml0eSB3ZXN0IC1hbm5vdGF0ZSArODArMCAiTUFTIEFjY2Vzc2liaWxpdHkiICcKICAgICAgICAgICAgICAgIC4gJy1maWxsICIjZGJlYWZlIiAtcG9pbnRzaXplIDM2IC1ncmF2aXR5IHdlc3QgLWFubm90YXRlICs4MCs5MCAiV2lkZ2V0LCBhdWRpdHMsIGFuZCBmcm9udGVuZCBhY2Nlc3NpYmlsaXR5IHRvb2xzIiAnCiAgICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCR0bXApIC4gJyAyPi9kZXYvbnVsbCc7CiAgICAgICAgICAgIEBleGVjKCRjbWQsICRvdXQsICRjb2RlKTsKICAgICAgICAgICAgaWYgKCRjb2RlICE9PSAwIHx8ICFpc19maWxlKCR0bXApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQHJlbmFtZSgkdG1wLCAkYmFubmVyKTsKICAgICAgICAgICAgc2VsZjo6ZmluYWxpemVGaWxlKCRiYW5uZXIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlzX2ZpbGUoJGljb241MTIpICYmIGlzX2ZpbGUoJGJhbm5lcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZVNyYwogICAgICogQHBhcmFtIHN0cmluZyAkZ2VvbWV0cnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3QKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmbGF0dGVuUmVzaXplVG9HZW9tZXRyeSgkaW1hZ2VTcmMsICRnZW9tZXRyeSwgJGRlc3QpCiAgICB7CiAgICAgICAgJGJnID0gc2VsZjo6ZGV0ZWN0SW1hZ2VCYWNrZ3JvdW5kQ29sb3IoJGltYWdlU3JjKTsKICAgICAgICAkdG1wID0gJGRlc3QgLiAnLnRtcC5wbmcnOwogICAgICAgICRjbWQgPSAnY29udmVydCAnIC4gZXNjYXBlc2hlbGxhcmcoJGltYWdlU3JjKQogICAgICAgICAgICAuICcgLWJhY2tncm91bmQgJyAuIGVzY2FwZXNoZWxsYXJnKCRiZykKICAgICAgICAgICAgLiAnIC1yZXNpemUgJyAuICRnZW9tZXRyeSAuICdeIC1ncmF2aXR5IGNlbnRlciAtZXh0ZW50ICcgLiAkZ2VvbWV0cnkKICAgICAgICAgICAgLiAnIC1hbHBoYSBvZmYgJwogICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCR0bXApIC4gJyAyPi9kZXYvbnVsbCc7CiAgICAgICAgQGV4ZWMoJGNtZCwgJG91dCwgJGNvZGUpOwogICAgICAgIGlmICgkY29kZSAhPT0gMCB8fCAhaXNfZmlsZSgkdG1wKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIEByZW5hbWUoJHRtcCwgJGRlc3QpOwogICAgICAgIHNlbGY6OmZpbmFsaXplRmlsZSgkZGVzdCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG1vZAogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRTY3JlZW5zaG90TGFiZWwoJG1vZCwgJGluZGV4KQogICAgewogICAgICAgICRrZXlzID0gYXJyYXkoCiAgICAgICAgICAgIDEgPT4gJ1NldHRpbmdzIHRhYiB3aXRoIG1vZHVsZSBiYW5uZXIgYW5kIG9wdGlvbnMnLAogICAgICAgICAgICAyID0+ICdQcmltYXJ5IGFkbWluIHZpZXcnLAogICAgICAgICAgICAzID0+ICdFZGl0IGZvcm0gb3IgZnJvbnRlbmQgb3V0cHV0JywKICAgICAgICApOwogICAgICAgICRrZXkgPSAnc2NyZWVuc2hvdF8nIC4gKGludCkgJGluZGV4OwogICAgICAgICR2ID0gJG1vZC0+TGFuZygka2V5KTsKICAgICAgICBpZiAoJHYgIT09ICcnICYmICR2ICE9PSAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAkdjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlzc2V0KCRrZXlzWyRpbmRleF0pID8gJGtleXNbJGluZGV4XSA6ICgnU2NyZWVuc2hvdCAnIC4gJGluZGV4KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmluYWxpemVGaWxlKCRwYXRoKQogICAgewogICAgICAgIGlmICghaXNfZmlsZSgkcGF0aCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjaG1vZCgkcGF0aCwgMDY0NCk7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBwb3NpeF9nZXRldWlkKCkgPT09IDApIHsKICAgICAgICAgICAgQGNob3duKCRwYXRoLCAnbmV3c3QzOTIyJyk7CiAgICAgICAgICAgIEBjaGdycCgkcGF0aCwgJ25ld3N0MzkyMicpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_module_docs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRhYmJlZCBIZWxwIC8gQWJvdXQgZm9yIE1BU18qIG1vZHVsZXMgKExvZ1dhdGNoLXN0eWxlLCBzaGFyZWQgc2hlbGwpLgogKgogKiBAcGFja2FnZSBNQVNfQ29tbW9uCiAqLwppZiAoIWRlZmluZWQoJ01BU19NT0RVTEVfRE9DU19MT0FERUQnKSkgewogICAgZGVmaW5lKCdNQVNfTU9EVUxFX0RPQ1NfTE9BREVEJywgdHJ1ZSk7Cn0KCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9tYXNfYWRtaW5fdWkucGhwJzsKCmZpbmFsIGNsYXNzIE1hc19Nb2R1bGVfRG9jcwp7CiAgICAvKioKICAgICAqIEBwYXJhbSBDTVNNb2R1bGUgJG1vZAogICAgICogQHBhcmFtIGFycmF5PGludCxhcnJheTxzdHJpbmcsc3RyaW5nPj58bnVsbCAkdGFicyBFYWNoOiBpZCwgbGFuZywgb3B0aW9uYWwgaW5jbHVkZSAoU21hcnR5IGluY2x1ZGUgcGF0aCkKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsbWl4ZWQ+ICRleHRyYUFzc2lnbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZXRjaFRhYmJlZEhlbHAoQ01TTW9kdWxlICRtb2QsICR0YWJzID0gbnVsbCwgYXJyYXkgJGV4dHJhQXNzaWduID0gYXJyYXkoKSkKICAgIHsKICAgICAgICBpZiAoJHRhYnMgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRhYnMgPSBzZWxmOjpkZWZhdWx0SGVscFRhYnMoJG1vZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpmZXRjaFRhYmJlZCgkbW9kLCAnaGVscCcsICR0YWJzLCAkZXh0cmFBc3NpZ24pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LGFycmF5PHN0cmluZyxzdHJpbmc+PnxudWxsICR0YWJzCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLG1peGVkPiAkZXh0cmFBc3NpZ24KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hUYWJiZWRBYm91dChDTVNNb2R1bGUgJG1vZCwgJHRhYnMgPSBudWxsLCBhcnJheSAkZXh0cmFBc3NpZ24gPSBhcnJheSgpKQogICAgewogICAgICAgIGlmICgkdGFicyA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGFicyA9IHNlbGY6OmRlZmF1bHRBYm91dFRhYnMoJG1vZCk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJGV4dHJhQXNzaWduWydtYXNfY2hhbmdlbG9nX2h0bWwnXSkpIHsKICAgICAgICAgICAgJGV4dHJhQXNzaWduWydtYXNfY2hhbmdlbG9nX2h0bWwnXSA9IHNlbGY6OmNoYW5nZWxvZ0h0bWwoJG1vZCk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJGV4dHJhQXNzaWduWydtYXNfYWJvdXRfZGVwZW5kZW5jaWVzJ10pKSB7CiAgICAgICAgICAgICRleHRyYUFzc2lnblsnbWFzX2Fib3V0X2RlcGVuZGVuY2llcyddID0gc2VsZjo6ZGVwZW5kZW5jaWVzSHRtbCgkbW9kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OmZldGNoVGFiYmVkKCRtb2QsICdhYm91dCcsICR0YWJzLCAkZXh0cmFBc3NpZ24pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVE1MCiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVE1MIGxpc3Qgb3IgZW1wdHkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZXBlbmRlbmNpZXNIdG1sKENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRkZXBzID0gJG1vZC0+R2V0RGVwZW5kZW5jaWVzKCk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkZGVwcykgfHwgY291bnQoJGRlcHMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJG91dCA9IGFycmF5KCc8dWw+Jyk7CiAgICAgICAgZm9yZWFjaCAoJGRlcHMgYXMgJG5hbWUgPT4gJHZlcikgewogICAgICAgICAgICAkb3V0W10gPSAnPGxpPjxzdHJvbmc+JyAuIGNtc19odG1sZW50aXRpZXMoKHN0cmluZykgJG5hbWUpIC4gJzwvc3Ryb25nPiAmZ3Q7PSAnCiAgICAgICAgICAgICAgICAuIGNtc19odG1sZW50aXRpZXMoKHN0cmluZykgJHZlcikgLiAnPC9saT4nOwogICAgICAgIH0KICAgICAgICAkb3V0W10gPSAnPC91bD4nOwogICAgICAgIHJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVE1MCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hhbmdlbG9nSHRtbChDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkbW9kLCAnR2V0Q2hhbmdlTG9nJykpIHsKICAgICAgICAgICAgJGh0bWwgPSAoc3RyaW5nKSAkbW9kLT5HZXRDaGFuZ2VMb2coKTsKICAgICAgICAgICAgaWYgKCRodG1sICE9PSAnJykgewogICAgICAgICAgICAgICAgcmV0dXJuICRodG1sOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRiYXNlRGlyID0gcmVhbHBhdGgoTWFzX0FkbWluX1VpOjptb2R1bGVQYXRoKCRtb2QpKTsKICAgICAgICBpZiAoISRiYXNlRGlyKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJGZpbGUgPSByZWFscGF0aChNYXNfQWRtaW5fVWk6Om1vZHVsZVBhdGgoJG1vZCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ0NIQU5HRUxPRy5tZCcpOwogICAgICAgIGlmICghJGZpbGUgfHwgIWlzX2ZpbGUoJGZpbGUpIHx8ICFpc19yZWFkYWJsZSgkZmlsZSkgfHwgc3RycG9zKCRmaWxlLCAkYmFzZURpcikgIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAkbWFya2Rvd24gPSAoKGlzX3JlYWRhYmxlKCRmaWxlKSkgPyBmaWxlX2dldF9jb250ZW50cygkZmlsZSkgOiBmYWxzZSk7CiAgICAgICAgaWYgKCRtYXJrZG93biA9PT0gZmFsc2UgfHwgJG1hcmtkb3duID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWFzLWRvYy1jaGFuZ2Vsb2ciPicgLiBubDJicihjbXNfaHRtbGVudGl0aWVzKChzdHJpbmcpICRtYXJrZG93bikpIC4gJzwvZGl2Pic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ01TTW9kdWxlICRtb2QKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LGFycmF5PHN0cmluZyxzdHJpbmc+PgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRIZWxwVGFicyhDTVNNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICAkbmFtZSA9ICRtb2QtPkdldE5hbWUoKTsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KCdpZCcgPT4gJ2dlbmVyYWwnLCAnbGFuZycgPT4gJ2hlbHBfZ2VuZXJhbCcpLAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICdjb25maWd1cmF0aW9uJywgJ2xhbmcnID0+ICdoZWxwX2NvbmZpZ3VyYXRpb24nKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAndHJvdWJsZXNob290aW5nJywgJ2xhbmcnID0+ICdoZWxwX3Ryb3VibGVzaG9vdGluZycpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ01TTW9kdWxlICRtb2QKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LGFycmF5PHN0cmluZyxzdHJpbmc+PgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRBYm91dFRhYnMoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICdtb2R1bGUnLCAnbGFuZycgPT4gJ2Fib3V0X3RhYl9tb2R1bGUnKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAnY29tcGF0JywgJ2xhbmcnID0+ICdhYm91dF90YWJfY29tcGF0JyksCiAgICAgICAgICAgIGFycmF5KCdpZCcgPT4gJ3N1bW1hcnknLCAnbGFuZycgPT4gJ2Fib3V0X3RhYl9zdW1tYXJ5JyksCiAgICAgICAgICAgIGFycmF5KCdpZCcgPT4gJ2NoYW5nZWxvZycsICdsYW5nJyA9PiAnYWJvdXRfdGFiX2NoYW5nZWxvZycpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ01TTW9kdWxlICRtb2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtpbmQgaGVscHxhYm91dAogICAgICogQHBhcmFtIGFycmF5PGludCxhcnJheTxzdHJpbmcsc3RyaW5nPj4gJHRhYnMKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsbWl4ZWQ+ICRleHRyYUFzc2lnbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hUYWJiZWQoQ01TTW9kdWxlICRtb2QsICRraW5kLCBhcnJheSAkdGFicywgYXJyYXkgJGV4dHJhQXNzaWduKQogICAgewogICAgICAgICRzbWFydHkgPSBjbXNfdXRpbHM6OmdldF9zbWFydHkoKTsKICAgICAgICBpZiAoISRzbWFydHkpIHsKICAgICAgICAgICAgcmV0dXJuICRraW5kID09PSAnaGVscCcgPyAoc3RyaW5nKSAkbW9kLT5MYW5nKCdoZWxwJykgOiAnJzsKICAgICAgICB9CiAgICAgICAgTWFzX0FkbWluX1VpOjpyZWdpc3RlclNtYXJ0eVNlY3VyZURpcnMoJHNtYXJ0eSk7CiAgICAgICAgJG1vZE5hbWUgPSAkbW9kLT5HZXROYW1lKCk7CiAgICAgICAgJHByZWZpeCA9IHByZWdfcmVwbGFjZSgnL1teYS16QS1aMC05Xy1dLycsICcnLCAkbW9kTmFtZSkgLiAnLScgLiAka2luZDsKICAgICAgICAkdGFiUm93cyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHRhYnMgYXMgJHRhYikgewogICAgICAgICAgICAkaWQgPSBpc3NldCgkdGFiWydpZCddKSA/IChzdHJpbmcpICR0YWJbJ2lkJ10gOiAndGFiJzsKICAgICAgICAgICAgJGxhbmdLZXkgPSBpc3NldCgkdGFiWydsYW5nJ10pID8gKHN0cmluZykgJHRhYlsnbGFuZyddIDogJGlkOwogICAgICAgICAgICAkaW5jbHVkZSA9IGlzc2V0KCR0YWJbJ2luY2x1ZGUnXSkgPyAoc3RyaW5nKSAkdGFiWydpbmNsdWRlJ10gOiAnJzsKICAgICAgICAgICAgaWYgKCRpbmNsdWRlID09PSAnJykgewogICAgICAgICAgICAgICAgJGluY2x1ZGUgPSBzZWxmOjpyZXNvbHZlVGFiSW5jbHVkZSgkbW9kLCAka2luZCwgJGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFiZWwgPSAkbW9kLT5MYW5nKCRsYW5nS2V5KTsKICAgICAgICAgICAgaWYgKCRsYWJlbCA9PT0gJycgfHwgJGxhYmVsID09PSAkbGFuZ0tleSkgewogICAgICAgICAgICAgICAgJGxhYmVsID0gdWNmaXJzdChzdHJfcmVwbGFjZSgnXycsICcgJywgJGxhbmdLZXkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGFiUm93c1tdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnaWQnID0+ICRwcmVmaXggLiAnLScgLiAkaWQsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICRsYWJlbCwKICAgICAgICAgICAgICAgICdpbmNsdWRlJyA9PiAkaW5jbHVkZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHRwbFBhdGggPSBNYXNfQWRtaW5fVWk6OmNvbW1vblBhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbWFzX3RhYmJlZF9kb2NzLnRwbCc7CiAgICAgICAgaWYgKCFpc19maWxlKCR0cGxQYXRoKSkgewogICAgICAgICAgICByZXR1cm4gJGtpbmQgPT09ICdoZWxwJyA/IChzdHJpbmcpICRtb2QtPkxhbmcoJ2hlbHAnKSA6ICcnOwogICAgICAgIH0KICAgICAgICAkdHBsID0gJHNtYXJ0eS0+Y3JlYXRlVGVtcGxhdGUoJHRwbFBhdGgpOwogICAgICAgICR0cGwtPmFzc2lnbignbW9kJywgJG1vZCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfZG9jX2tpbmQnLCAka2luZCk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtYXNfZG9jX3RhYnMnLCAkdGFiUm93cyk7CiAgICAgICAgZm9yZWFjaCAoJGV4dHJhQXNzaWduIGFzICRrZXkgPT4gJHZhbCkgewogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJGtleSwgJHZhbCk7CiAgICAgICAgfQogICAgICAgICRzbWFydHktPmFzc2lnbignbW9kJywgJG1vZCk7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0cGwtPmZldGNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcmVmZXIgbW9kdWxlIHRhYiB0cGwsIHRoZW4gTUFTX0NvbW1vbiBkZWZhdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBDTVNNb2R1bGUgJG1vZAogICAgICogQHBhcmFtIHN0cmluZyAka2luZCBoZWxwfGFib3V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBUYWIgaWQKICAgICAqIEByZXR1cm4gc3RyaW5nIFNtYXJ0eSBpbmNsdWRlIHBhdGgKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZVRhYkluY2x1ZGUoQ01TTW9kdWxlICRtb2QsICRraW5kLCAkaWQpCiAgICB7CiAgICAgICAgJG1vZE5hbWUgPSAkbW9kLT5HZXROYW1lKCk7CiAgICAgICAgJG1vZHVsZVRwbCA9ICdoZWxwXycgLiAkaWQgLiAnX3RhYi50cGwnOwogICAgICAgIGlmICgka2luZCA9PT0gJ2Fib3V0JykgewogICAgICAgICAgICAkbW9kdWxlVHBsID0gJ2Fib3V0XycgLiAkaWQgLiAnX3RhYi50cGwnOwogICAgICAgIH0KICAgICAgICAkbW9kdWxlUGF0aCA9IGNtc19qb2luX3BhdGgoTWFzX0FkbWluX1VpOjptb2R1bGVQYXRoKCRtb2QpLCAndGVtcGxhdGVzJywgJG1vZHVsZVRwbCk7CiAgICAgICAgaWYgKGlzX2ZpbGUoJG1vZHVsZVBhdGgpKSB7CiAgICAgICAgICAgIHJldHVybiAnbW9kdWxlX2ZpbGVfdHBsOicgLiAkbW9kTmFtZSAuICc7JyAuICRtb2R1bGVUcGw7CiAgICAgICAgfQogICAgICAgICRjb21tb25UcGwgPSAoJGtpbmQgPT09ICdhYm91dCcgPyAnYWJvdXRfJyA6ICdoZWxwXycpIC4gJGlkIC4gJ190YWIudHBsJzsKICAgICAgICAkY29tbW9uUGF0aCA9IGNtc19qb2luX3BhdGgoTWFzX0FkbWluX1VpOjpjb21tb25QYXRoKCksICd0ZW1wbGF0ZXMnLCAkY29tbW9uVHBsKTsKICAgICAgICBpZiAoaXNfZmlsZSgkY29tbW9uUGF0aCkpIHsKICAgICAgICAgICAgcmV0dXJuICRjb21tb25QYXRoOwogICAgICAgIH0KICAgICAgICAkZmFsbGJhY2tQYXRoID0gY21zX2pvaW5fcGF0aChNYXNfQWRtaW5fVWk6OmNvbW1vblBhdGgoKSwgJ3RlbXBsYXRlcycsICdoZWxwX2ZhbGxiYWNrX3RhYi50cGwnKTsKICAgICAgICBpZiAoaXNfZmlsZSgkZmFsbGJhY2tQYXRoKSkgewogICAgICAgICAgICByZXR1cm4gJGZhbGxiYWNrUGF0aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICdtb2R1bGVfZmlsZV90cGw6JyAuICRtb2ROYW1lIC4gJztoZWxwX2dlbmVyYWxfdGFiLnRwbCc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/lib/mas_smarty_secure.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFJlZ2lzdGVyIGJ1bmRsZWQgbWFzX2NvbW1vbiB0ZW1wbGF0ZSBkaXJlY3Rvcnkgd2l0aCBTbWFydHkgc2VjdXJpdHkgcG9saWN5LgogKgogKiBAcGFja2FnZSBNQVNfQ29tbW9uCiAqLwppZiAoIWRlZmluZWQoJ01BU19TTUFSVFlfU0VDVVJFX0xPQURFRCcpKSB7CiAgICBkZWZpbmUoJ01BU19TTUFSVFlfU0VDVVJFX0xPQURFRCcsIHRydWUpOwp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX2NvbW1vbl9yZWdpc3Rlcl9zbWFydHlfc2VjdXJlX2RpcnMnKSkgewogICAgLyoqCiAgICAgKiBAcGFyYW0gU21hcnR5X0NNU3xudWxsICRzbWFydHkKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY29tbW9uUGF0aCBCdW5kbGVkIG1hc19jb21tb24gcm9vdDsgZGVmYXVsdHMgdmlhIE1hc19BZG1pbl9VaSB3aGVuIGxvYWRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gbWFzX2NvbW1vbl9yZWdpc3Rlcl9zbWFydHlfc2VjdXJlX2RpcnMoJHNtYXJ0eSA9IG51bGwsICRjb21tb25QYXRoID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHNtYXJ0eSA9PT0gbnVsbCkgewogICAgICAgICAgICAkc21hcnR5ID0gY21zX3V0aWxzOjpnZXRfc21hcnR5KCk7CiAgICAgICAgfQogICAgICAgIGlmICghJHNtYXJ0eSB8fCAhaXNzZXQoJHNtYXJ0eS0+c2VjdXJpdHlfcG9saWN5KSB8fCAhaXNfb2JqZWN0KCRzbWFydHktPnNlY3VyaXR5X3BvbGljeSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoJGNvbW1vblBhdGggPT09IG51bGwgJiYgY2xhc3NfZXhpc3RzKCdNYXNfQWRtaW5fVWknLCBmYWxzZSkpIHsKICAgICAgICAgICAgJGNvbW1vblBhdGggPSBNYXNfQWRtaW5fVWk6OmNvbW1vblBhdGgoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjb21tb25QYXRoID09PSBudWxsIHx8ICRjb21tb25QYXRoID09PSAnJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICR0cGxEaXIgPSByZWFscGF0aCgkY29tbW9uUGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJyk7CiAgICAgICAgaWYgKCEkdHBsRGlyIHx8ICFpc19kaXIoJHRwbERpcikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkdHBsRGlyID0gcnRyaW0oJHRwbERpciwgRElSRUNUT1JZX1NFUEFSQVRPUikgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgICAgICRwb2xpY3kgPSAkc21hcnR5LT5zZWN1cml0eV9wb2xpY3k7CiAgICAgICAgJHNlY3VyZSA9ICRwb2xpY3ktPnNlY3VyZV9kaXI7CiAgICAgICAgaWYgKCRzZWN1cmUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHNlY3VyZSA9IGFycmF5KCk7CiAgICAgICAgfSBlbHNlaWYgKCFpc19hcnJheSgkc2VjdXJlKSkgewogICAgICAgICAgICAkc2VjdXJlID0gKGFycmF5KSAkc2VjdXJlOwogICAgICAgIH0KICAgICAgICBpZiAoIWluX2FycmF5KCR0cGxEaXIsICRzZWN1cmUsIHRydWUpKSB7CiAgICAgICAgICAgICRzZWN1cmVbXSA9ICR0cGxEaXI7CiAgICAgICAgICAgICRwb2xpY3ktPnNlY3VyZV9kaXIgPSAkc2VjdXJlOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/mas_common_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEJ1bmRsZWQgTUFTX0NvbW1vbiBsb2FkZXIgKGlkZW50aWNhbCBjb3B5IGluIGV2ZXJ5IE1BU18qIG1vZHVsZSBsaWIvbWFzX2NvbW1vbl9sb2FkZXIucGhwKS4KICovCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSAmJiAhZnVuY3Rpb25fZXhpc3RzKCdjbXNtcycpKSB7CiAgICBleGl0Owp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX21hc19jb21tb25fcm9vdCcpKSB7CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1hc19tYXNfY29tbW9uX3Jvb3QoKQogICAgewogICAgICAgIHN0YXRpYyAkcm9vdCA9IG51bGw7CiAgICAgICAgaWYgKCRyb290ID09PSBudWxsKSB7CiAgICAgICAgICAgICRyb290ID0gZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ21hc19jb21tb24nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJvb3Q7CiAgICB9Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYXNfbWFzX2NvbW1vbl9wYXRoJykpIHsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgUGF0aCByZWxhdGl2ZSB0byBtYXNfY29tbW9uIHJvb3QgKGUuZy4gbGliL21hc19hZG1pbl91aS5waHApCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1hc19tYXNfY29tbW9uX3BhdGgoJHJlbGF0aXZlKQogICAgewogICAgICAgICRyZWxhdGl2ZSA9IGx0cmltKHN0cl9yZXBsYWNlKGFycmF5KCcvJywgJ1xcJyksIERJUkVDVE9SWV9TRVBBUkFUT1IsIChzdHJpbmcpICRyZWxhdGl2ZSksIERJUkVDVE9SWV9TRVBBUkFUT1IpOwogICAgICAgICRwYXRoID0gbWFzX21hc19jb21tb25fcm9vdCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRyZWxhdGl2ZTsKICAgICAgICByZXR1cm4gaXNfcmVhZGFibGUoJHBhdGgpID8gJHBhdGggOiBudWxsOwogICAgfQp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX3JlcXVpcmVfbWFzX2FkbWluX3VpJykpIHsKICAgIGZ1bmN0aW9uIG1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpCiAgICB7CiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTWFzX0FkbWluX1VpJywgZmFsc2UpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHBhdGggPSBtYXNfbWFzX2NvbW1vbl9wYXRoKCdsaWIvbWFzX2FkbWluX3VpLnBocCcpOwogICAgICAgIGlmICgkcGF0aCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNQVMgbW9kdWxlOiBzaGFyZWQgYWRtaW4gVUkgbm90IGZvdW5kLiBSZS11cGxvYWQgdGhlIG1vZHVsZSBvciByZXN0b3JlIGxpYi9tYXNfY29tbW9uLy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgIH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19yZXF1aXJlX21hc19sYW5nX2RlZmF1bHRzJykpIHsKICAgIGZ1bmN0aW9uIG1hc19yZXF1aXJlX21hc19sYW5nX2RlZmF1bHRzKCkKICAgIHsKICAgICAgICBzdGF0aWMgJGxvYWRlZCA9IGZhbHNlOwogICAgICAgIGlmICgkbG9hZGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHBhdGggPSBtYXNfbWFzX2NvbW1vbl9wYXRoKCdsYW5nL21hc19kb2NzX2RlZmF1bHRzX2VuX1VTLnBocCcpOwogICAgICAgIGlmICgkcGF0aCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgICAgICAkbG9hZGVkID0gdHJ1ZTsKICAgIH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19yZXF1aXJlX21hc19mb3JnZV9hc3NldHMnKSkgewogICAgZnVuY3Rpb24gbWFzX3JlcXVpcmVfbWFzX2ZvcmdlX2Fzc2V0cygpCiAgICB7CiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTWFzX0ZvcmdlX0Fzc2V0cycsIGZhbHNlKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRwYXRoID0gbWFzX21hc19jb21tb25fcGF0aCgnbGliL21hc19mb3JnZV9hc3NldHMucGhwJyk7CiAgICAgICAgaWYgKCRwYXRoID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ01BUyBtb2R1bGU6IGZvcmdlIGFzc2V0IGhlbHBlcnMgbm90IGZvdW5kLiBSZS11cGxvYWQgdGhlIG1vZHVsZSBvciByZXN0b3JlIGxpYi9tYXNfY29tbW9uLy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/about_changelog_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY2hhbmdlbG9nJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKe2lmICRtYXNfY2hhbmdlbG9nX2h0bWx8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19jaGFuZ2Vsb2dfaHRtbCBub2ZpbHRlcn0Ke2Vsc2V9CiAgPHA+eyRtb2QtPkxhbmcoJ2NoYW5nZWxvZycpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/about_compat_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY29tcGF0Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbWluX2NtcycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9taW5fcGhwJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2Fib3V0X2RlcGVuZGVuY2llc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgp7aWYgJG1hc19hYm91dF9kZXBlbmRlbmNpZXN8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19hYm91dF9kZXBlbmRlbmNpZXMgbm9maWx0ZXJ9CntlbHNlfQogIDxwPnskbW9kLT5MYW5nKCdhYm91dF9kZXBlbmRlbmNpZXNfbm9uZScpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/about_module_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfbW9kdWxlJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbmFtZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdmVyc2lvbicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+CjxwPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2Fib3V0X2xhYmVsX2F1dGhvcicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRBdXRob3IoKXxlc2NhcGU6J2h0bWwnfTwvcD4Ke2lmICRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZGVmYXVsdDonJyAhPSAnJ30KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfZW1haWwnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPiA8YSBocmVmPSJtYWlsdG86eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOid1cmwnfSI+eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOidodG1sJ308L2E+PC9wPgp7L2lmfQp7aWYgJG1vZC0+R2V0QXV0aG9yVXJsKCl8ZGVmYXVsdDonJyAhPSAnJ30KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdXJsJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4gPGEgaHJlZj0ieyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTonaHRtbCd9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JG1vZC0+R2V0QXV0aG9yVXJsKCl8ZXNjYXBlOidodG1sJ308L2E+PC9wPgp7L2lmfQo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9sYWJlbF9saWNlbnNlJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkxhbmcoJ2Fib3V0X2xpY2Vuc2VfdmFsdWUnKXxlc2NhcGU6J2h0bWwnfTwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/about_summary_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfc3VtbWFyeScpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+eyRtb2QtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyl8ZXNjYXBlOidodG1sJ308L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/donations.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8aDI+eyRtb2QtPkxhbmcoJ2RvbmF0aW9uc190YWInKXxkZWZhdWx0OidEb25hdGlvbnMnfGVzY2FwZTonaHRtbCd9PC9oMj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjY2ZkN2RmO3BhZGRpbmc6MTJweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiNmZmY7bWF4LXdpZHRoOjg1MHB4OyI+CiAgICA8aDMgY2xhc3M9InBhZ2V0ZXh0Ij57JHNwb25zb3JzdGV4dHxlc2NhcGU6J2h0bWwnfTwvaDM+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O21hcmdpbi10b3A6MTBweDtmbGV4LXdyYXA6d3JhcDsiPgogICAgICA8aW1nCiAgICAgICAgc3JjPSJ7JGRvbmF0aW9uc19zcG9uc29yX2xvZ29fdXJsfGVzY2FwZTonaHRtbCd9IgogICAgICAgIGFsdD0ieyRkb25hdGlvbnNfc3BvbnNvcl9sb2dvX2FsdHxlc2NhcGU6J2h0bWwnfSIKICAgICAgICB3aWR0aD0iNDgiCiAgICAgICAgaGVpZ2h0PSI0OCIKICAgICAgICBzdHlsZT0ibWF4LXdpZHRoOjQ4cHg7bWF4LWhlaWdodDo0OHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87b2JqZWN0LWZpdDpjb250YWluO2ZsZXgtc2hyaW5rOjA7IgogICAgICAgIGxvYWRpbmc9ImxhenkiCiAgICAgICAgZGVjb2Rpbmc9ImFzeW5jIgogICAgICA+CiAgICAgIDxhIGhyZWY9InskZG9uYXRpb25zX3Nwb25zb3JfaHJlZnxlc2NhcGU6J2h0bWwnfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+eyRkb25hdGlvbnNfc3BvbnNvcl9saW5rfGVzY2FwZX08L2E+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4OyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskZG9uYXRpb25zdGV4dH08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij48YSBjbGFzcz0icGFnZWJ1dHRvbiIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2ZmYzQzOTtjb2xvcjojMDAwO3BhZGRpbmc6OHB4IDE0cHg7Ym9yZGVyLXJhZGl1czo0cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IiBocmVmPSJodHRwczovL25ld3N0YXJnZXRlZC5jb20vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JGRvbmF0ZV9idG58ZXNjYXBlfTwvYT48L3A+CiAgPC9kaXY+CgogIHskc2V0dGluZ3NfZm9ybV9zdGFydH0KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfWFjdGl2ZV90YWIiIHZhbHVlPSJkb25hdGlvbnMiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9c2hvd19kb25hdGlvbnNfdGFiIiB2YWx1ZT0iMCI+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0ibWFyZ2luLXRvcDoxNnB4OyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGVkb25hdGlvbnNzdWJtaXR9PC9wPgogIDwvZGl2PgogIHskc2V0dGluZ3NfZm9ybV9lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/help_configuration_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ3VyYXRpb24nKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8cD57JG1vZC0+TGFuZygnaGVscF9jb25maWd1cmF0aW9uX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jb25maWdfYWRtaW5faGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9jb25maWdfYWRtaW5fMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX2FkbWluXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/help_fallback_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxwPnskbW9kLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpfGVzY2FwZTonaHRtbCd9PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2dlbmVyYWwnKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF9oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8b2w+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF8yJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+Cjwvb2w+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+Cjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2NtcycpfGVzY2FwZTonaHRtbCd9IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX3BocCcpfGVzY2FwZTonaHRtbCd9IHskbW9kLT5HZXRNaW5pbXVtUEhQVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jcmVkaXRzX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CjxwPnskbW9kLT5MYW5nKCdoZWxwX2NyZWRpdHNfYm9keScpfGVzY2FwZTonaHRtbCd9CntpZiAkbW9kLT5HZXRBdXRob3IoKXxkZWZhdWx0OicnICE9ICcnfQogPHN0cm9uZz57JG1vZC0+R2V0QXV0aG9yKCl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4Key9pZn0Ke2lmICRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZGVmYXVsdDonJyAhPSAnJ30KIHwgPGEgaHJlZj0ibWFpbHRvOnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTondXJsJ30iPnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTonaHRtbCd9PC9hPgp7L2lmfQo8L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/help_troubleshooting_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMycpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxwPnskbW9kLT5MYW5nKCdoZWxwX3RzX3N1cHBvcnRfYm9keScpfGVzY2FwZTonaHRtbCd9IDxhIGhyZWY9Imh0dHBzOi8vbmV3c3RhcmdldGVkLmNvbS9jb250YWN0LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+bmV3c3RhcmdldGVkLmNvbS9jb250YWN0PC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/mas_tabbed_docs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoubWFzLWRvYy10YWJzIHsgbWFyZ2luOiAyMHB4IDAgMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH0KLm1hcy1kb2MtdGFicyBhIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAxMHB4IDIwcHg7IG1hcmdpbi1yaWdodDogNXB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMzMzOyB9Ci5tYXMtZG9jLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1kb2MtdGFicyBhOmhvdmVyIHsgYmFja2dyb3VuZDogI2U5ZTllOTsgfQoubWFzLWRvYy1jb250ZW50IHsgcGFkZGluZzogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZDogI2ZmZjsgfQoubWFzLWRvYy1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWRvYy1zZWN0aW9uLmFjdGl2ZSB7IGRpc3BsYXk6IGJsb2NrOyB9Cjwvc3R5bGU+Cgo8ZGl2IGNsYXNzPSJtYXMtZG9jLXRhYnMgbWFzLWRvYy10YWJzLXskbWFzX2RvY19raW5kfGVzY2FwZTonaHRtbCd9Ij4Ke2ZvcmVhY2ggZnJvbT0kbWFzX2RvY190YWJzIGl0ZW09dGFifQogIDxhIGhyZWY9IiN7JHRhYi5pZHxlc2NhcGU6J2h0bWwnfSIgY2xhc3M9Im1hcy1kb2MtdGFie2lmICR0YWJAZmlyc3R9IGFjdGl2ZXsvaWZ9IiBkYXRhLXRhYj0ieyR0YWIuaWR8ZXNjYXBlOidodG1sJ30iPnskdGFiLmxhYmVsfGVzY2FwZTonaHRtbCd9PC9hPgp7L2ZvcmVhY2h9CjwvZGl2PgoKPGRpdiBjbGFzcz0ibWFzLWRvYy1jb250ZW50IG1hcy1kb2MtY29udGVudC17JG1hc19kb2Nfa2luZHxlc2NhcGU6J2h0bWwnfSI+Cntmb3JlYWNoIGZyb209JG1hc19kb2NfdGFicyBpdGVtPXRhYn0KICA8ZGl2IGlkPSJ7JHRhYi5pZHxlc2NhcGU6J2h0bWwnfSIgY2xhc3M9Im1hcy1kb2Mtc2VjdGlvbntpZiAkdGFiQGZpcnN0fSBhY3RpdmV7L2lmfSI+CiAgICB7aW5jbHVkZSBmaWxlPSR0YWIuaW5jbHVkZX0KICA8L2Rpdj4Key9mb3JlYWNofQo8L2Rpdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICB2YXIgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXMtZG9jLXRhYnMteyRtYXNfZG9jX2tpbmR8ZXNjYXBlOidqYXZhc2NyaXB0J30nKTsKICBpZiAoIXJvb3QgfHwgIXJvb3QucGFyZW50Tm9kZSkgeyByZXR1cm47IH0KICB2YXIgY29udGFpbmVyID0gcm9vdC5wYXJlbnROb2RlOwogIHZhciB0YWJzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtZG9jLXRhYicpOwogIHZhciBzZWN0aW9ucyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWRvYy1zZWN0aW9uJyk7CiAgdGFicy5mb3JFYWNoKGZ1bmN0aW9uKHRhYikgewogICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS10YWInKTsKICAgICAgdGFicy5mb3JFYWNoKGZ1bmN0aW9uKHQpIHsgdC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7CiAgICAgIHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24ocykgeyBzLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgdmFyIHBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTsKICAgICAgaWYgKHBhbmVsKSB7IHBhbmVsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOyB9CiAgICB9KTsKICB9KTsKfSkoKTsKPC9zY3JpcHQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/settings_banner_echo.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICB7aWYgJG1hc19iYW5uZXJfdXJsfGRlZmF1bHQ6JycgIT0gJyd9CiAgPGltZyBzcmM9InskbWFzX2Jhbm5lcl91cmx8ZXNjYXBlOidodG1sJ30iIGFsdD0iIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjEyMCIgc3R5bGU9Im1heC13aWR0aDoxMDAlO2hlaWdodDphdXRvO2JvcmRlci1yYWRpdXM6NnB4O21hcmdpbi1ib3R0b206MTJweDsiPgogIHsvaWZ9CiAgPGgyPnskbWFzX21vZHVsZV9uYW1lfGVzY2FwZTonaHRtbCd9IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7Ij52eyRtYXNfbW9kdWxlX3ZlcnNpb258ZXNjYXBlOidodG1sJ308L3NwYW4+PC9oMj4KICB7aWYgJG1hc19kZXNjcmlwdGlvbl9odG1sfGRlZmF1bHQ6JycgIT0gJyd9CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1hc19kZXNjcmlwdGlvbl9odG1sIG5vZmlsdGVyfTwvcD4KICB7L2lmfQo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common/templates/settings_banner_snippet.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICB7aWYgJG1hc19iYW5uZXJfdXJsfGRlZmF1bHQ6JycgIT0gJyd9CiAgPGltZyBzcmM9InskbWFzX2Jhbm5lcl91cmx8ZXNjYXBlOidodG1sJ30iIGFsdD0iIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjEyMCIgc3R5bGU9Im1heC13aWR0aDoxMDAlO2hlaWdodDphdXRvO2JvcmRlci1yYWRpdXM6NnB4O21hcmdpbi1ib3R0b206MTJweDsiPgogIHsvaWZ9CiAgPGgyPnskbW9kLT5MYW5nKCdmcmllbmRseW5hbWUnKXxlc2NhcGU6J2h0bWwnfSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMnB4OyI+dnskbWFzX21vZHVsZV92ZXJzaW9ufGVzY2FwZX08L3NwYW4+PC9oMj4K]]></data>
	</file>
	<file>
	  <filename>/lib/mas_common_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEJ1bmRsZWQgTUFTX0NvbW1vbiBsb2FkZXIgKGlkZW50aWNhbCBjb3B5IGluIGV2ZXJ5IE1BU18qIG1vZHVsZSBsaWIvbWFzX2NvbW1vbl9sb2FkZXIucGhwKS4KICovCmlmICghZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSAmJiAhZnVuY3Rpb25fZXhpc3RzKCdjbXNtcycpKSB7CiAgICBleGl0Owp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX21hc19jb21tb25fcm9vdCcpKSB7CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1hc19tYXNfY29tbW9uX3Jvb3QoKQogICAgewogICAgICAgIHN0YXRpYyAkcm9vdCA9IG51bGw7CiAgICAgICAgaWYgKCRyb290ID09PSBudWxsKSB7CiAgICAgICAgICAgICRyb290ID0gZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ21hc19jb21tb24nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJvb3Q7CiAgICB9Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYXNfbWFzX2NvbW1vbl9wYXRoJykpIHsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgUGF0aCByZWxhdGl2ZSB0byBtYXNfY29tbW9uIHJvb3QgKGUuZy4gbGliL21hc19hZG1pbl91aS5waHApCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1hc19tYXNfY29tbW9uX3BhdGgoJHJlbGF0aXZlKQogICAgewogICAgICAgICRyZWxhdGl2ZSA9IGx0cmltKHN0cl9yZXBsYWNlKGFycmF5KCcvJywgJ1xcJyksIERJUkVDVE9SWV9TRVBBUkFUT1IsIChzdHJpbmcpICRyZWxhdGl2ZSksIERJUkVDVE9SWV9TRVBBUkFUT1IpOwogICAgICAgICRwYXRoID0gbWFzX21hc19jb21tb25fcm9vdCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRyZWxhdGl2ZTsKICAgICAgICByZXR1cm4gaXNfcmVhZGFibGUoJHBhdGgpID8gJHBhdGggOiBudWxsOwogICAgfQp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWFzX3JlcXVpcmVfbWFzX2FkbWluX3VpJykpIHsKICAgIGZ1bmN0aW9uIG1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpCiAgICB7CiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTWFzX0FkbWluX1VpJywgZmFsc2UpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHBhdGggPSBtYXNfbWFzX2NvbW1vbl9wYXRoKCdsaWIvbWFzX2FkbWluX3VpLnBocCcpOwogICAgICAgIGlmICgkcGF0aCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNQVMgbW9kdWxlOiBzaGFyZWQgYWRtaW4gVUkgbm90IGZvdW5kLiBSZS11cGxvYWQgdGhlIG1vZHVsZSBvciByZXN0b3JlIGxpYi9tYXNfY29tbW9uLy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgIH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19yZXF1aXJlX21hc19sYW5nX2RlZmF1bHRzJykpIHsKICAgIGZ1bmN0aW9uIG1hc19yZXF1aXJlX21hc19sYW5nX2RlZmF1bHRzKCkKICAgIHsKICAgICAgICBzdGF0aWMgJGxvYWRlZCA9IGZhbHNlOwogICAgICAgIGlmICgkbG9hZGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHBhdGggPSBtYXNfbWFzX2NvbW1vbl9wYXRoKCdsYW5nL21hc19kb2NzX2RlZmF1bHRzX2VuX1VTLnBocCcpOwogICAgICAgIGlmICgkcGF0aCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgICAgICAkbG9hZGVkID0gdHJ1ZTsKICAgIH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21hc19yZXF1aXJlX21hc19mb3JnZV9hc3NldHMnKSkgewogICAgZnVuY3Rpb24gbWFzX3JlcXVpcmVfbWFzX2ZvcmdlX2Fzc2V0cygpCiAgICB7CiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnTWFzX0ZvcmdlX0Fzc2V0cycsIGZhbHNlKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRwYXRoID0gbWFzX21hc19jb21tb25fcGF0aCgnbGliL21hc19mb3JnZV9hc3NldHMucGhwJyk7CiAgICAgICAgaWYgKCRwYXRoID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ01BUyBtb2R1bGU6IGZvcmdlIGFzc2V0IGhlbHBlcnMgbm90IGZvdW5kLiBSZS11cGxvYWQgdGhlIG1vZHVsZSBvciByZXN0b3JlIGxpYi9tYXNfY29tbW9uLy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkcGF0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_jwt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfSnd0CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlKENNU01vZHVsZSAkbW9kLCBhcnJheSAkcGF5bG9hZCwgJHR0bCA9IDM2MDApCiAgICB7CiAgICAgICAgJGF1dG9sb2FkID0gZGlybmFtZShfX0RJUl9fLCAyKSAuICcvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiAgICAgICAgaWYgKCFpc19yZWFkYWJsZSgkYXV0b2xvYWQpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgcmVxdWlyZV9vbmNlICRhdXRvbG9hZDsKICAgICAgICBpZiAoIWNsYXNzX2V4aXN0cygnRmlyZWJhc2VcXEpXVFxcSldUJykpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAka2V5ID0gTWFzX0FoX0NvbmZpZzo6c2lnbmluZ0tleSgkbW9kKTsKICAgICAgICBpZiAoJGtleSA9PT0gJycpIHsKICAgICAgICAgICAgJGtleSA9IE1hc19BaF9Db25maWc6OmVuY3J5cHRpb25LZXkoJG1vZCk7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRwYXlsb2FkWydpYXQnXSA9IHRpbWUoKTsKICAgICAgICAkcGF5bG9hZFsnZXhwJ10gPSB0aW1lKCkgKyAoaW50KSAkdHRsOwogICAgICAgICRwYXlsb2FkWydpc3MnXSA9IE1hc19BaF9Db25maWc6OmNhbGxiYWNrQmFzZVVybCgkbW9kKTsKICAgICAgICByZXR1cm4gRmlyZWJhc2VcSldUXEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAka2V5LCAnSFMyNTYnKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZShDTVNNb2R1bGUgJG1vZCwgJGp3dCkKICAgIHsKICAgICAgICAkYXV0b2xvYWQgPSBkaXJuYW1lKF9fRElSX18sIDIpIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKICAgICAgICBpZiAoIWlzX3JlYWRhYmxlKCRhdXRvbG9hZCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlcXVpcmVfb25jZSAkYXV0b2xvYWQ7CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoJ0ZpcmViYXNlXFxKV1RcXEpXVCcpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAka2V5ID0gTWFzX0FoX0NvbmZpZzo6c2lnbmluZ0tleSgkbW9kKTsKICAgICAgICBpZiAoJGtleSA9PT0gJycpIHsKICAgICAgICAgICAgJGtleSA9IE1hc19BaF9Db25maWc6OmVuY3J5cHRpb25LZXkoJG1vZCk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ0ZpcmViYXNlXFxKV1RcXEtleScpKSB7CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IEZpcmViYXNlXEpXVFxKV1Q6OmRlY29kZSgkand0LCBuZXcgRmlyZWJhc2VcSldUXEtleSgka2V5LCAnSFMyNTYnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IEZpcmViYXNlXEpXVFxKV1Q6OmRlY29kZSgkand0LCAka2V5LCBhcnJheSgnSFMyNTYnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKCRkZWNvZGVkKSwgdHJ1ZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_oauth_server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2F1dGhTZXJ2ZXIKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDbGllbnQoQ01TTW9kdWxlICRtb2QsICRjbGllbnRJZCkKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgIHJldHVybiAkZGItPkdldFJvdygKICAgICAgICAgICAgJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQ2xpZW50cygpIC4gJyBXSEVSRSBjbGllbnRfaWQgPSA/IEFORCBlbmFibGVkID0gMSBMSU1JVCAxJywKICAgICAgICAgICAgYXJyYXkoKHN0cmluZykgJGNsaWVudElkKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJpZnlDbGllbnRTZWNyZXQoYXJyYXkgJGNsaWVudCwgJHNlY3JldCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJGNsaWVudFsnc2VjcmV0X2hhc2gnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFzc3dvcmRfdmVyaWZ5KChzdHJpbmcpICRzZWNyZXQsIChzdHJpbmcpICRjbGllbnRbJ3NlY3JldF9oYXNoJ10pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQXV0aENvZGUoQ01TTW9kdWxlICRtb2QsIGFycmF5ICRkYXRhKQogICAgewogICAgICAgICRjb2RlID0gYmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICAgICAkZXhwaXJlcyA9IHRpbWUoKSArIDMwMDsKICAgICAgICAkbW9kLT5HZXREYigpLT5FeGVjdXRlKAogICAgICAgICAgICAnSU5TRVJUIElOVE8gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkKICAgICAgICAgICAgLiAnIChjb2RlLCBjbGllbnRfaWQsIHVzZXJfaWQsIHNjb3BlcywgcmVkaXJlY3RfdXJpLCBleHBpcmVzX2F0LCB1c2VkLCBjcmVhdGVkKScKICAgICAgICAgICAgLiAnIFZBTFVFUyAoPyw/LD8sPyw/LD8sMCw/KScsCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJGNvZGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAoJGRhdGFbJ2NsaWVudF9pZCddID8/ICcnKSwKICAgICAgICAgICAgICAgIChpbnQpICgkZGF0YVsndXNlcl9pZCddID8/IDApLAogICAgICAgICAgICAgICAgKHN0cmluZykgKCRkYXRhWydzY29wZXMnXSA/PyAnb3BlbmlkJyksCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAoJGRhdGFbJ3JlZGlyZWN0X3VyaSddID8/ICcnKSwKICAgICAgICAgICAgICAgICRleHBpcmVzLAogICAgICAgICAgICAgICAgdGltZSgpLAogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJGNvZGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleGNoYW5nZUNvZGUoQ01TTW9kdWxlICRtb2QsICRjb2RlLCAkY2xpZW50SWQsICRyZWRpcmVjdFVyaSkKICAgIHsKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRyb3cgPSAkZGItPkdldFJvdygKICAgICAgICAgICAgJ1NFTEVDVCAqIEZST00gJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkKICAgICAgICAgICAgLiAnIFdIRVJFIGNvZGUgPSA/IEFORCBjbGllbnRfaWQgPSA/IExJTUlUIDEnLAogICAgICAgICAgICBhcnJheSgoc3RyaW5nKSAkY29kZSwgKHN0cmluZykgJGNsaWVudElkKQogICAgICAgICk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkcm93KSB8fCAoaW50KSAkcm93Wyd1c2VkJ10gPT09IDEgfHwgKGludCkgJHJvd1snZXhwaXJlc19hdCddIDwgdGltZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJHJlZGlyZWN0VXJpICE9PSAnJyAmJiAoc3RyaW5nKSAkcm93WydyZWRpcmVjdF91cmknXSAhPT0gJHJlZGlyZWN0VXJpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICdVUERBVEUgJyAuIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCkgLiAnIFNFVCB1c2VkID0gMSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBhcnJheSgoaW50KSAkcm93WydpZCddKQogICAgICAgICk7CiAgICAgICAgJGFjY2VzcyA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDMyKSk7CiAgICAgICAgJHJlZnJlc2ggPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygzMikpOwogICAgICAgICR1aWQgPSAoaW50KSAkcm93Wyd1c2VyX2lkJ107CiAgICAgICAgTWFzX0FoX1Rva2VuU3RvcmU6OnN0b3JlKCRtb2QsIGFycmF5KAogICAgICAgICAgICAndG9rZW5fdHlwZScgPT4gJ2FjY2VzcycsCiAgICAgICAgICAgICd0b2tlbicgPT4gJGFjY2VzcywKICAgICAgICAgICAgJ3Njb3BlcycgPT4gKHN0cmluZykgJHJvd1snc2NvcGVzJ10sCiAgICAgICAgICAgICdleHBpcmVzX2F0JyA9PiB0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAncHJvdmlkZXJfaWQnID0+IDAsCiAgICAgICAgICAgICdjbXNfdXNlcl9pZCcgPT4gJHVpZCwKICAgICAgICAgICAgJ21hbXNfdXNlcl9pZCcgPT4gMCwKICAgICAgICApKTsKICAgICAgICBNYXNfQWhfVG9rZW5TdG9yZTo6c3RvcmUoJG1vZCwgYXJyYXkoCiAgICAgICAgICAgICd0b2tlbl90eXBlJyA9PiAncmVmcmVzaCcsCiAgICAgICAgICAgICd0b2tlbicgPT4gJHJlZnJlc2gsCiAgICAgICAgICAgICdzY29wZXMnID0+IChzdHJpbmcpICRyb3dbJ3Njb3BlcyddLAogICAgICAgICAgICAnZXhwaXJlc19hdCcgPT4gdGltZSgpICsgKGludCkgJG1vZC0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX3JlZnJlc2hfdHRsJywgJzI1OTIwMDAnKSwKICAgICAgICAgICAgJ3Byb3ZpZGVyX2lkJyA9PiAwLAogICAgICAgICAgICAnY21zX3VzZXJfaWQnID0+ICR1aWQsCiAgICAgICAgICAgICdtYW1zX3VzZXJfaWQnID0+IDAsCiAgICAgICAgKSk7CiAgICAgICAgJGlkVG9rZW4gPSBNYXNfQWhfSnd0OjplbmNvZGUoJG1vZCwgYXJyYXkoCiAgICAgICAgICAgICdzdWInID0+IChzdHJpbmcpICR1aWQsCiAgICAgICAgICAgICdzY29wZScgPT4gKHN0cmluZykgJHJvd1snc2NvcGVzJ10sCiAgICAgICAgKSk7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAnYWNjZXNzX3Rva2VuJyA9PiAkYWNjZXNzLAogICAgICAgICAgICAndG9rZW5fdHlwZScgPT4gJ0JlYXJlcicsCiAgICAgICAgICAgICdleHBpcmVzX2luJyA9PiAzNjAwLAogICAgICAgICAgICAncmVmcmVzaF90b2tlbicgPT4gJHJlZnJlc2gsCiAgICAgICAgICAgICdpZF90b2tlbicgPT4gJGlkVG9rZW4sCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/server/mas_ah_oidc_discovery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpmaW5hbCBjbGFzcyBNYXNfQWhfT2lkY0Rpc2NvdmVyeQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvY3VtZW50KENNU01vZHVsZSAkbW9kKQogICAgewogICAgICAgICRiYXNlID0gTWFzX0FoX0NvbmZpZzo6Y2FsbGJhY2tCYXNlVXJsKCRtb2QpOwogICAgICAgICRyZXR1cm5pZCA9IChpbnQpICRtb2QtPkdldFByZWZlcmVuY2UoJ21hc19haF9mcm9udGVuZF9yZXR1cm5pZCcsICcwJyk7CiAgICAgICAgaWYgKCRyZXR1cm5pZCA8IDEpIHsKICAgICAgICAgICAgJHJldHVybmlkID0gKGludCkgY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgICAgICB9CiAgICAgICAgJGxpbmtJZCA9ICdjbnRudDAxJzsKICAgICAgICAkYXV0aG9yaXplID0gJG1vZC0+Q3JlYXRlTGluaygkbGlua0lkLCAnb2F1dGhfYXV0aG9yaXplJywgJHJldHVybmlkLCAnJywgYXJyYXkoKSwgJycsIHRydWUpOwogICAgICAgICR0b2tlbiA9ICRtb2QtPkNyZWF0ZUxpbmsoJGxpbmtJZCwgJ29hdXRoX3Rva2VuJywgJHJldHVybmlkLCAnJywgYXJyYXkoKSwgJycsIHRydWUpOwogICAgICAgICRqd2tzID0gJGJhc2UgLiAnL21vZHVsZXMvTUFTX0F1dGhIdWIvb2lkYy9qd2tzLmpzb24nOwogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgJ2lzc3VlcicgPT4gJGJhc2UsCiAgICAgICAgICAgICdhdXRob3JpemF0aW9uX2VuZHBvaW50JyA9PiAkYXV0aG9yaXplLAogICAgICAgICAgICAndG9rZW5fZW5kcG9pbnQnID0+ICR0b2tlbiwKICAgICAgICAgICAgJ2p3a3NfdXJpJyA9PiAkandrcywKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZCcgPT4gYXJyYXkoJ2NvZGUnKSwKICAgICAgICAgICAgJ3N1YmplY3RfdHlwZXNfc3VwcG9ydGVkJyA9PiBhcnJheSgncHVibGljJyksCiAgICAgICAgICAgICdpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkJyA9PiBhcnJheSgnSFMyNTYnKSwKICAgICAgICAgICAgJ3Njb3Blc19zdXBwb3J0ZWQnID0+IGFycmF5KCdvcGVuaWQnLCAncHJvZmlsZScsICdlbWFpbCcsICdjbXNtcy5hZG1pbicpLAogICAgICAgICAgICAndG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCcgPT4gYXJyYXkoJ2NsaWVudF9zZWNyZXRfcG9zdCcpLAogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNiBNYXN0ZXIzMzk1CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/MAS_AuthHub.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgU2VlIExJQ0VOU0UgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8qKgogKiBNQVNfQXV0aEh1YjogY2VudHJhbGl6ZWQgaWRlbnRpdHkgYW5kIGFjY2VzcyBtYW5hZ2VtZW50IGZvciBDTVMgTWFkZSBTaW1wbGUuCiAqCiAqIEBhdXRob3IgbWFzdGVyMzM5NQogKi8KaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSB7CiAgICBleGl0Owp9CgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvbGliL21hc19jb21tb25fbG9hZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9saWIvbWFzX2FoX2xvYWRlci5waHAnOwoKZmluYWwgY2xhc3MgTUFTX0F1dGhIdWIgZXh0ZW5kcyBDTVNNb2R1bGUKewogICAgcHVibGljIGNvbnN0IFBFUk1fTUFOQUdFID0gJ01hbmFnZSBNQVNfQXV0aEh1Yic7CiAgICBwdWJsaWMgY29uc3QgUEVSTV9VU0UgPSAnVXNlIE1BU19BdXRoSHViJzsKICAgIHB1YmxpYyBjb25zdCBQUkVGX0FETUlOX1NFQ1RJT04gPSAnbWFzX2FoX2FkbWluX3NlY3Rpb24nOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogICAgICAgIE1hc19BaF9BZG1pbkxvZ2luVWk6OnJlZ2lzdGVySG9va3MoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2dyYW1tYXRpYyBhdWRpdCBBUEkgKGRvIG5vdCBuYW1lICJhdWRpdCI6IENNU01vZHVsZTo6YXVkaXQoKSBpcyBmaW5hbCkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9nQXVkaXQoJGV2ZW50LCBhcnJheSAkY29udGV4dCA9IGFycmF5KCksICRzZXZlcml0eSA9ICdpbmZvJywgJHVzZXJJZCA9IDAsICRwcm92aWRlcklkID0gMCkKICAgIHsKICAgICAgICAkbSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUFTX0F1dGhIdWInKTsKICAgICAgICBpZiAoJG0gaW5zdGFuY2VvZiBzZWxmKSB7CiAgICAgICAgICAgIE1hc19BaF9BdWRpdDo6bG9nKCRtLCAkZXZlbnQsICRzZXZlcml0eSwgJGNvbnRleHQsICR1c2VySWQsICRwcm92aWRlcklkKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaW5rVXNlcigkcHJvdmlkZXJJZCwgJGV4dGVybmFsU3ViLCAkY21zVXNlcklkID0gbnVsbCwgJG1hbXNVc2VySWQgPSBudWxsLCAkZW1haWwgPSAnJykKICAgIHsKICAgICAgICAkbSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUFTX0F1dGhIdWInKTsKICAgICAgICBpZiAoISRtIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBNYXNfQWhfVXNlckxpbms6OnVwc2VydCgkbSwgYXJyYXkoCiAgICAgICAgICAgICdwcm92aWRlcl9pZCcgPT4gKGludCkgJHByb3ZpZGVySWQsCiAgICAgICAgICAgICdleHRlcm5hbF9zdWInID0+IChzdHJpbmcpICRleHRlcm5hbFN1YiwKICAgICAgICAgICAgJ2Ntc191c2VyX2lkJyA9PiAkY21zVXNlcklkLAogICAgICAgICAgICAnbWFtc191c2VyX2lkJyA9PiAkbWFtc1VzZXJJZCwKICAgICAgICAgICAgJ2VtYWlsJyA9PiAkZW1haWwsCiAgICAgICAgKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAnTUFTX0F1dGhIdWInOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogICAgewogICAgICAgIHJldHVybiAnMS4wLjknOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3IoKQogICAgewogICAgICAgIHJldHVybiAnbWFzdGVyMzM5NSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICAgIHsKICAgICAgICByZXR1cm4gJ2luZm9AbmV3c3RhcmdldGVkLmNvbSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvclVybCgpCiAgICB7CiAgICAgICAgcmV0dXJuICdodHRwczovL25ld3N0YXJnZXRlZC5jb20vY29udGFjdC8nOwogICAgfQoKICAgIC8qKgogICAgICogU21hcnR5IGFzc2lnbnMgZm9yIEhlbHAvQWJvdXQgaW50ZWdyYXRpb24gc3RhdHVzIChzb2Z0IGRlcGVuZGVuY2llcykuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsc3RyaW5nPgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1hc0FoRG9jc0V4dHJhQXNzaWduKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdtYXNfYWhfaGF2ZV9tYW1zJyA9PiBjbXNfdXRpbHM6Om1vZHVsZV9hdmFpbGFibGUoJ01BTVMnKSA/ICcxJyA6ICcwJywKICAgICAgICAgICAgJ21hc19haF9oYXZlX2Ntc21zX2V4dCcgPT4gY21zX3V0aWxzOjptb2R1bGVfYXZhaWxhYmxlKCdDTVNNU0V4dCcpID8gJzEnIDogJzAnLAogICAgICAgICAgICAnbWFzX2FoX2hhdmVfbWFtc19yZWdpc3RyYXRpb24nID0+IGNtc191dGlsczo6bW9kdWxlX2F2YWlsYWJsZSgnTUFNU1JlZ2lzdHJhdGlvbicpID8gJzEnIDogJzAnLAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKQogICAgewogICAgICAgIG1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpOwogICAgICAgICRleHRyYSA9ICR0aGlzLT5tYXNBaERvY3NFeHRyYUFzc2lnbigpOwogICAgICAgIHJldHVybiBNYXNfQWRtaW5fVWk6OmZldGNoVGFiYmVkSGVscCgkdGhpcywgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KCdpZCcgPT4gJ2dlbmVyYWwnLCAnbGFuZycgPT4gJ2hlbHBfZ2VuZXJhbCcpLAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICdjb25maWd1cmF0aW9uJywgJ2xhbmcnID0+ICdoZWxwX2NvbmZpZ3VyYXRpb24nKSwKICAgICAgICAgICAgYXJyYXkoJ2lkJyA9PiAncHJvdG9jb2xzJywgJ2xhbmcnID0+ICdoZWxwX3Byb3RvY29scycpLAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICdzZWN1cml0eScsICdsYW5nJyA9PiAnaGVscF9zZWN1cml0eScpLAogICAgICAgICAgICBhcnJheSgnaWQnID0+ICd0cm91Ymxlc2hvb3RpbmcnLCAnbGFuZycgPT4gJ2hlbHBfdHJvdWJsZXNob290aW5nJyksCiAgICAgICAgKSwgJGV4dHJhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWJvdXQoKQogICAgewogICAgICAgIG1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpOwogICAgICAgIHJldHVybiBNYXNfQWRtaW5fVWk6OmZldGNoVGFiYmVkQWJvdXQoJHRoaXMsIG51bGwsICR0aGlzLT5tYXNBaERvY3NFeHRyYUFzc2lnbigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICAgIHsKICAgICAgICAkYmFzZURpciA9IHJlYWxwYXRoKCR0aGlzLT5HZXRNb2R1bGVQYXRoKCkpOwogICAgICAgIGlmICghJGJhc2VEaXIpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgICAgICAkY2FuZGlkYXRlcyA9IGFycmF5KAogICAgICAgICAgICAnQ0hBTkdFTE9HLm1kJywKICAgICAgICAgICAgJ3RvLWRvJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnQ0hBTkdFTE9HLm1kJywKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRjYW5kaWRhdGVzIGFzICRyZWwpIHsKICAgICAgICAgICAgJGZpbGUgPSByZWFscGF0aCgkYmFzZURpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcmVsKTsKICAgICAgICAgICAgaWYgKCEkZmlsZSB8fCAhaXNfZmlsZSgkZmlsZSkgfHwgIWlzX3JlYWRhYmxlKCRmaWxlKSB8fCBzdHJwb3MoJGZpbGUsICRiYXNlRGlyKSAhPT0gMCkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1hcmtkb3duID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICAgICAgICAgICBpZiAoJG1hcmtkb3duID09PSBmYWxzZSB8fCB0cmltKCRtYXJrZG93bikgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1hc19haF9jaGFuZ2Vsb2ciPicgLiBubDJicihjbXNfaHRtbGVudGl0aWVzKCRtYXJrZG93bikpIC4gJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkdldFByZWZlcmVuY2Uoc2VsZjo6UFJFRl9BRE1JTl9TRUNUSU9OLCAnZXh0ZW5zaW9ucycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKHNlbGY6OlBFUk1fTUFOQUdFKSB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKHNlbGY6OlBFUk1fVVNFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogICAgewogICAgICAgIHJldHVybiAnMi4yLjEwJzsKICAgIH0KCiAgICAvKioKICAgICAqIE5vIGhhcmQgbW9kdWxlIGRlcGVuZGVuY2llcyAoRm9yZ2UgIzEyODM4KS4gQ01TTVNFeHQgYW5kIE1BTVMgYXJlIG9wdGlvbmFsOyBzZWUgQWJvdXQgQ29tcGF0aWJpbGl0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldE1pbmltdW1QSFBWZXJzaW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJzcuNC4wJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TUFNU0F1dGhDb25zdW1lcigpCiAgICB7CiAgICAgICAgJGlmYWNlID0gZGlybmFtZShfX0RJUl9fKSAuICcvTUFNUy9saWIvaW50ZXJmYWNlLm1hbXNfYXV0aF9jb25zdW1lci5waHAnOwogICAgICAgIGlmICghaXNfcmVhZGFibGUoJGlmYWNlKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvY2xhc3MubWFzX2FoX21hbXNfY29uc3VtZXIucGhwJzsKICAgICAgICByZXR1cm4gbmV3IE1hc19BaF9NYW1zQ29uc3VtZXIoJHRoaXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBTaG93RG9uYXRpb25zVGFiKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInKSAhPSAkdGhpcy0+R2V0VmVyc2lvbigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4odHJ1ZSwgZmFsc2UpOwogICAgICAgIC8vIFBhcmFtIGNsZWFuaW5nIGlzIGRvbmUgaW4gZWFjaCBhY3Rpb24gKGNhc3QvYWxsb3dsaXN0KS4gTW9kdWxlQ2hlY2tlciBDTVNNU19DTVNfMDMyCiAgICAgICAgLy8gcmVqZWN0cyBTZXRQYXJhbWV0ZXJUeXBlL1Jlc3RyaWN0VW5rbm93blBhcmFtczsgb2F1dGhfc3RhcnQvY2FsbGJhY2sgYWxyZWFkeSB2YWxpZGF0ZS4KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkKICAgIHsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gUmVnaXN0ZXJFdmVudHMoKQogICAgewogICAgICAgICR0aGlzLT5DcmVhdGVFdmVudCgnT25Qcm92aWRlckxpbmtlZCcpOwogICAgICAgICR0aGlzLT5DcmVhdGVFdmVudCgnT25NYW1zTG9naW4nKTsKICAgICAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ09uTWFtc0xvZ291dCcpOwogICAgICAgICR0aGlzLT5DcmVhdGVFdmVudCgnT25NYW1zVXNlclByb3Zpc2lvbmVkJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERvRXZlbnQoJG9yaWdpbmF0b3IsICRldmVudG5hbWUsICYkcGFyYW1zKQogICAgewogICAgICAgIGlmICgkb3JpZ2luYXRvciA9PT0gJ0NvcmUnKSB7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVDb3JlRXZlbnQoJGV2ZW50bmFtZSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGlmICgkb3JpZ2luYXRvciA9PT0gJ01BTVMnKSB7CiAgICAgICAgICAgIE1hc19BaF9NYW1zRXZlbnRzOjpoYW5kbGUoJHRoaXMsICRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAkcGFyYW1zKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRvcmlnaW5hdG9yID09PSAnTUFNU1JlZ2lzdHJhdGlvbicpIHsKICAgICAgICAgICAgTWFzX0FoX01hbXNSZWdpc3RyYXRpb246OmhhbmRsZSgkdGhpcywgJG9yaWdpbmF0b3IsICRldmVudG5hbWUsICRwYXJhbXMpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUNvcmVFdmVudCgkZXZlbnRuYW1lLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBzd2l0Y2ggKCRldmVudG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnTG9naW5GYWlsZWQnOgogICAgICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJHRoaXMsICdjb3JlLmxvZ2luX2ZhaWxlZCcsICd3YXJuaW5nJywgJHBhcmFtcywgMCwgMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnTG9naW5Qb3N0JzoKICAgICAgICAgICAgICAgICR1aWQgPSBpc3NldCgkcGFyYW1zWyd1c2VyJ10tPmlkKSA/IChpbnQpICRwYXJhbXNbJ3VzZXInXS0+aWQgOiAwOwogICAgICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJHRoaXMsICdjb3JlLmxvZ2luX3Bvc3QnLCAnaW5mbycsIGFycmF5KCksICR1aWQsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ0xvZ291dFBvc3QnOgogICAgICAgICAgICAgICAgTWFzX0FoX0F1ZGl0Ojpsb2coJHRoaXMsICdjb3JlLmxvZ291dF9wb3N0JywgJ2luZm8nLCAkcGFyYW1zLCBpc3NldCgkcGFyYW1zWyd1aWQnXSkgPyAoaW50KSAkcGFyYW1zWyd1aWQnXSA6IDAsIDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19haF90YWJsZXMucGhwJzsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvbWFzX2FoX21hbXNfZXZlbnRzLnBocCc7CnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19haF9tYW1zX3JlZ2lzdHJhdGlvbi5waHAnOwoKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHRhYm9wdCA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9SW5ub0RCJyk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICBkcml2ZXIgQygzMikgTk9UTlVMTCwKICAgIG5hbWUgQygxMjgpIE5PVE5VTEwsCiAgICBlbmFibGVkIEkxIE5PVE5VTEwgREVGQVVMVCAxLAogICAgY29uZmlnX2pzb24gWDIsCiAgICBzb3J0X29yZGVyIEkgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBjcmVhdGVkIEkgTk9UTlVMTCwKICAgIHVwZGF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6cHJvdmlkZXJzKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIHByb3ZpZGVyX2lkIEkgTk9UTlVMTCwKICAgIGV4dGVybmFsX3N1YiBDKDI1NSkgTk9UTlVMTCwKICAgIGNtc191c2VyX2lkIEksCiAgICBtYW1zX3VzZXJfaWQgSSwKICAgIGVtYWlsIEMoMjU1KSwKICAgIGF0dHJzX2pzb24gWDIsCiAgICBjcmVhdGVkIEkgTk9UTlVMTCwKICAgIHVwZGF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6dXNlckxpbmtzKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKJGRiLT5FeGVjdXRlKCdDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9tYXNfYWhfdWxfcHJvdmlkZXJfc3ViIE9OICcgLiBNYXNfQWhfVGFibGVzOjp1c2VyTGlua3MoKSAuICcgKHByb3ZpZGVyX2lkLCBleHRlcm5hbF9zdWIpJyk7CgokZmxkcyA9ICcKICAgIGlkIEkgS0VZIE5PVE5VTEwsCiAgICBzZXNzaW9uX2lkIEMoNjQpIE5PVE5VTEwsCiAgICBjbXNfdXNlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgbWFtc191c2VyX2lkIEkgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBwcm92aWRlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgaXBfaGFzaCBDKDY0KSwKICAgIHVhX2hhc2ggQyg2NCksCiAgICBleHBpcmVzX2F0IEkgTk9UTlVMTCwKICAgIHJldm9rZWQgSTEgTk9UTlVMTCBERUZBVUxUIDAsCiAgICBjcmVhdGVkIEkgTk9UTlVMTAonOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIHRva2VuX3R5cGUgQygxNikgTk9UTlVMTCwKICAgIHRva2VuX2VuYyBYIE5PVE5VTEwsCiAgICBzY29wZXMgQygyNTUpLAogICAgZXhwaXJlc19hdCBJIE5PVE5VTEwsCiAgICBwcm92aWRlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgY21zX3VzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIG1hbXNfdXNlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgY3JlYXRlZCBJIE5PVE5VTEwKJzsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChNYXNfQWhfVGFibGVzOjp0b2tlbnMoKSwgJGZsZHMsICR0YWJvcHQpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwoKJGZsZHMgPSAnCiAgICBpZCBJIEtFWSBOT1ROVUxMLAogICAgY2xpZW50X2lkIEMoNjQpIE5PVE5VTEwsCiAgICBzZWNyZXRfaGFzaCBDKDI1NSksCiAgICBuYW1lIEMoMTI4KSBOT1ROVUxMLAogICAgcmVkaXJlY3RfdXJpcyBYMiwKICAgIGdyYW50cyBDKDI1NSksCiAgICBzY29wZXMgQygyNTUpLAogICAgZW5hYmxlZCBJMSBOT1ROVUxMIERFRkFVTFQgMSwKICAgIGNyZWF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6b2F1dGhDbGllbnRzKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIGNvZGUgQyg2NCkgTk9UTlVMTCwKICAgIGNsaWVudF9pZCBDKDY0KSBOT1ROVUxMLAogICAgdXNlcl9pZCBJIE5PVE5VTEwsCiAgICBzY29wZXMgQygyNTUpLAogICAgcmVkaXJlY3RfdXJpIEMoNTEyKSwKICAgIGV4cGlyZXNfYXQgSSBOT1ROVUxMLAogICAgdXNlZCBJMSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGNyZWF0ZWQgSSBOT1ROVUxMCic7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoTWFzX0FoX1RhYmxlczo6b2F1dGhBdXRoQ29kZXMoKSwgJGZsZHMsICR0YWJvcHQpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwoKJGZsZHMgPSAnCiAgICBpZCBJIEtFWSBOT1ROVUxMLAogICAgY3JlZGVudGlhbF9pZCBDKDI1NSkgTk9UTlVMTCwKICAgIHB1YmxpY19rZXkgWCBOT1ROVUxMLAogICAgc2lnbl9jb3VudCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgYWFndWlkIEMoNjQpLAogICAgbGFiZWwgQygxMjgpLAogICAgY21zX3VzZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIG1hbXNfdXNlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgY3JlYXRlZCBJIE5PVE5VTEwKJzsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChNYXNfQWhfVGFibGVzOjp3ZWJhdXRobkNyZWRlbnRpYWxzKCksICRmbGRzLCAkdGFib3B0KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKCiRmbGRzID0gJwogICAgaWQgSSBLRVkgTk9UTlVMTCwKICAgIGNyZWF0ZWQgSSBOT1ROVUxMLAogICAgZXZlbnQgQygxMjgpIE5PVE5VTEwsCiAgICBzZXZlcml0eSBDKDE2KSBOT1ROVUxMLAogICAgdXNlcl9pZCBJIE5PVE5VTEwgREVGQVVMVCAwLAogICAgcHJvdmlkZXJfaWQgSSBOT1ROVUxMIERFRkFVTFQgMCwKICAgIGlwX2hhc2ggQyg2NCksCiAgICBjb250ZXh0X2pzb24gWDIKJzsKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChNYXNfQWhfVGFibGVzOjphdWRpdExvZygpLCAkZmxkcywgJHRhYm9wdCk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIE1BU19BdXRoSHViJywgJ0NvbmZpZ3VyZSBNQVMgQXV0aEh1YiBpZGVudGl0eSBwcm92aWRlcnMsIE9BdXRoIHNlcnZlciwgYW5kIHBvbGljaWVzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdVc2UgTUFTX0F1dGhIdWInLCAnVXNlIE1BUyBBdXRoSHViIFNTTyBsb2dpbicpOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zZWN0aW9uJywgJ2V4dGVuc2lvbnMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9lbmFibGVfYWRtaW5fc3NvJywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zc29fbW9kZScsICdidXR0b25zJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fc3NvX2RlZmF1bHRfcHJvdmlkZXInLCAnMCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX2VuYWJsZV9tYW1zX3NzbycsICcxJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYXV0b19saW5rX2VtYWlsJywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9zZXNzaW9uX3R0bCcsICczNjAwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfcmF0ZV9wZXJfaG91cicsICc2MCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWFzX2FoX21hbXNfaml0X2NyZWF0ZScsICcxJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWxsb3dfbG9jYWxfc2lnbnVwX3doZW5fc3NvJywgJzEnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9ibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJywgJzAnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGVkb25hdGlvbnN0YWInLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfZGVmYXVsdF9jb25uZWN0aW5nX3Byb3BlcnR5JywgJ2F1dGhodWJfc3ViJyk7CgokdGhpcy0+UmVnaXN0ZXJFdmVudHMoKTsKaWYgKGNtc191dGlsczo6bW9kdWxlX2F2YWlsYWJsZSgnTUFNUycpKSB7CiAgICBNYXNfQWhfTWFtc0V2ZW50czo6cmVnaXN0ZXIoJHRoaXMpOwp9CmlmIChjbXNfdXRpbHM6Om1vZHVsZV9hdmFpbGFibGUoJ01BTVNSZWdpc3RyYXRpb24nKSkgewogICAgTWFzX0FoX01hbXNSZWdpc3RyYXRpb246OnJlZ2lzdGVyKCR0aGlzKTsKfQoKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdMb2dpbkZhaWxlZCcsIGZhbHNlKTsKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdMb2dpblBvc3QnLCBmYWxzZSk7CiR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCAnTG9nb3V0UG9zdCcsIGZhbHNlKTsKCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19jb21tb25fbG9hZGVyLnBocCc7Cm1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUljb25HaWYoJHRoaXMpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUJhbm5lcigkdGhpcyk7Ck1hc19BZG1pbl9VaTo6ZW5zdXJlRm9yZ2VBc3NldHMoJHRoaXMpOwoKJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvbWFzX2FoX3RhYmxlcy5waHAnOwoKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiR0YWJsZXMgPSBhcnJheSgKICAgIE1hc19BaF9UYWJsZXM6OmF1ZGl0TG9nKCksCiAgICBNYXNfQWhfVGFibGVzOjp3ZWJhdXRobkNyZWRlbnRpYWxzKCksCiAgICBNYXNfQWhfVGFibGVzOjpvYXV0aEF1dGhDb2RlcygpLAogICAgTWFzX0FoX1RhYmxlczo6b2F1dGhDbGllbnRzKCksCiAgICBNYXNfQWhfVGFibGVzOjp0b2tlbnMoKSwKICAgIE1hc19BaF9UYWJsZXM6OnNlc3Npb25zKCksCiAgICBNYXNfQWhfVGFibGVzOjp1c2VyTGlua3MoKSwKICAgIE1hc19BaF9UYWJsZXM6OnByb3ZpZGVycygpLAopOwpmb3JlYWNoICgkdGFibGVzIGFzICR0YWJsZSkgewogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkdGFibGUpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwp9CgokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIE1BU19BdXRoSHViJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgTUFTX0F1dGhIdWInKTsKCiRwcmVmcyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlTmFtZXMoKTsKaWYgKGlzX2FycmF5KCRwcmVmcykpIHsKICAgIGZvcmVhY2ggKCRwcmVmcyBhcyAkcHJlZikgewogICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCRwcmVmKTsKICAgIH0KfQoKJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0OwppZiAoIWRlZmluZWQoJ0NNU19WRVJTSU9OJykpIHsKICAgIGV4aXQ7Cn0KCiRvbGQgPSBpc3NldCgkb2xkdmVyc2lvbikgPyAkb2xkdmVyc2lvbiA6ICcwJzsKaWYgKHZlcnNpb25fY29tcGFyZSgkb2xkLCAnMS4wLjAnLCAnPCcpKSB7CiAgICBpZiAoY21zX3V0aWxzOjptb2R1bGVfYXZhaWxhYmxlKCdNQU1TJykpIHsKICAgICAgICBNYXNfQWhfTWFtc0V2ZW50czo6cmVnaXN0ZXIoJHRoaXMpOwogICAgfQogICAgaWYgKGNtc191dGlsczo6bW9kdWxlX2F2YWlsYWJsZSgnTUFNU1JlZ2lzdHJhdGlvbicpKSB7CiAgICAgICAgTWFzX0FoX01hbXNSZWdpc3RyYXRpb246OnJlZ2lzdGVyKCR0aGlzKTsKICAgIH0KfQoKaWYgKHZlcnNpb25fY29tcGFyZSgkb2xkLCAnMS4wLjknLCAnPCcpKSB7CiAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9tYXNfYWhfdGFibGVzLnBocCc7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICR0YWJsZXMgPSBhcnJheSgKICAgICAgICBNYXNfQWhfVGFibGVzOjpwcm92aWRlcnMoKSwKICAgICAgICBNYXNfQWhfVGFibGVzOjp1c2VyTGlua3MoKSwKICAgICAgICBNYXNfQWhfVGFibGVzOjpzZXNzaW9ucygpLAogICAgICAgIE1hc19BaF9UYWJsZXM6OnRva2VucygpLAogICAgICAgIE1hc19BaF9UYWJsZXM6Om9hdXRoQ2xpZW50cygpLAogICAgICAgIE1hc19BaF9UYWJsZXM6Om9hdXRoQXV0aENvZGVzKCksCiAgICAgICAgTWFzX0FoX1RhYmxlczo6d2ViYXV0aG5DcmVkZW50aWFscygpLAogICAgICAgIE1hc19BaF9UYWJsZXM6OmF1ZGl0TG9nKCksCiAgICApOwogICAgZm9yZWFjaCAoJHRhYmxlcyBhcyAkdGFibGUpIHsKICAgICAgICAkc3FsID0gJ0FMVEVSIFRBQkxFICcgLiAkdGFibGUgLiAnIE1PRElGWSBpZCBJTlQgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQnOwogICAgICAgICRvayA9ICRkYi0+RXhlY3V0ZSgkc3FsKTsKICAgICAgICBpZiAoJG9rID09PSBmYWxzZSkgewogICAgICAgICAgICBhdWRpdCgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAkdGhpcy0+R2V0TmFtZSgpLAogICAgICAgICAgICAgICAgJ1VwZ3JhZGUgMS4wLjkgQVVUT19JTkNSRU1FTlQgZmFpbGVkIGZvciAnIC4gJHRhYmxlIC4gJzogJyAuIChzdHJpbmcpICRkYi0+RXJyb3JNc2coKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWFzX2FoX2FkbWluX3Nzb19tb2RlJywgJycpID09PSAnJykgewogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fc3NvX21vZGUnLCAnYnV0dG9ucycpOwogICAgfQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXNfYWhfYWRtaW5fc3NvX2RlZmF1bHRfcHJvdmlkZXInLCAnJykgPT09ICcnKSB7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21hc19haF9hZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlcicsICcwJyk7CiAgICB9Cn0KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL21hc19jb21tb25fbG9hZGVyLnBocCc7Cm1hc19yZXF1aXJlX21hc19hZG1pbl91aSgpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUljb25HaWYoJHRoaXMpOwpNYXNfQWRtaW5fVWk6OmVuc3VyZUJhbm5lcigkdGhpcyk7Ck1hc19BZG1pbl9VaTo6ZW5zdXJlRm9yZ2VBc3NldHMoJHRoaXMpOwokdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJNQVNfQXV0aEh1YiIKdmVyc2lvbiA9ICIxLjAuOSIKYXV0aG9yID0gIm1hc3RlcjMzOTUiCmF1dGhvcmVtYWlsID0gImluZm9AbmV3c3RhcmdldGVkLmNvbSIKbWluY21zdmVyc2lvbiA9ICIyLjIuMTAiCmxhenlsb2FkYWRtaW4gPSAwCmxhenlsb2FkZnJvbnRlbmQgPSAwCg==]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBNQVNfQXV0aEh1YgoKQ2VudHJhbGl6ZWQgaWRlbnRpdHkgYW5kIGFjY2VzcyBtYW5hZ2VtZW50IGZvciBbQ01TIE1hZGUgU2ltcGxlXShodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLmNvbSk6IE9BdXRoMiwgT0lEQywgU0FNTCwgV2ViQXV0aG4sIENNU01TIGFkbWluIFNTTywgYW5kIE1BTVMgaW50ZWdyYXRpb24uCgojIyBSZXF1aXJlbWVudHMKCi0gQ01TIE1hZGUgU2ltcGxlIDIuMi4xMCsKLSBQSFAgNy40KyAodGVzdGVkIG9uIFBIUCA4LjQpCi0gKipDTVNNU0V4dCAxLjArKiogYW5kICoqTUFNUyAxLjArKiogcmVjb21tZW5kZWQgZm9yIE1BTVMgZnJvbnRlbmQgU1NPIChpbnN0YWxsIHNlcGFyYXRlbHkgd2hlbiBuZWVkZWQ7IEF1dGhIdWIgaW5zdGFsbHMgd2l0aG91dCB0aGVtKQotIE1BUyBhZG1pbiBVSSAoSGVscCwgQWJvdXQsIERvbmF0aW9ucyB0YWJzKSBpcyAqKmJ1aWx0IGludG8gdGhpcyBtb2R1bGUqKiB1bmRlciBgbGliL21hc19jb21tb24vYDsgbm8gc2VwYXJhdGUgTUFTX0NvbW1vbiBpbnN0YWxsIGlzIHJlcXVpcmVkCgojIyBPcHRpb25hbCBDb21wb3NlciBsaWJyYXJpZXMKClNBTUwsIFdlYkF1dGhuLCBhbmQgSldUIGZlYXR1cmVzIG5lZWQgQ29tcG9zZXIgcGFja2FnZXMuIFRoZXkgYXJlICoqbm90KiogbG9hZGVkIGR1cmluZyBpbnN0YWxsIHVubGVzcyB5b3UgdXNlIHRob3NlIGZlYXR1cmVzLgoKYGBgYmFzaApjZCBtb2R1bGVzL01BU19BdXRoSHViCmNvbXBvc2VyIGluc3RhbGwgLS1uby1kZXYKYGBgCgpCYXNpYyBpbnN0YWxsIGFuZCBhZG1pbiBVSSB3b3JrIHdpdGhvdXQgYHZlbmRvci9gLgoKIyMgQ29uZmlndXJhdGlvbgoKU3RvcmUgc2VjcmV0cyBpbiB0aGUgc2l0ZSByb290IGBjb25maWcucGhwYCB1bmRlciB0aGUgYG1hc19hdXRoaHViYCBhcnJheS4gU2VlIGB0by1kby9jb25maWcubWFzX2F1dGhodWIuZXhhbXBsZS5waHBgIGZvciBzaGFwZSAoZG8gbm90IGNvbW1pdCByZWFsIHNlY3JldHMpLgoKIyMgSW5zdGFsbAoKMS4gQ29weSB0aGUgbW9kdWxlIGZvbGRlciBvciBpbnN0YWxsIHZpYSAqKkV4dGVuc2lvbnMg4oaSIE1vZHVsZSBNYW5hZ2VyKiouIEluc3RhbGwgQ01TTVNFeHQgYW5kIE1BTVMgd2hlbiB5b3UgbmVlZCBNQU1TIFNTTy4KMi4gT3B0aW9uYWxseSBydW4gYGNvbXBvc2VyIGluc3RhbGxgIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGZvciBTQU1ML1dlYkF1dGhuL0pXVC4KMy4gR3JhbnQgKipNYW5hZ2UgTUFTX0F1dGhIdWIqKiBhbmQgKipVc2UgTUFTX0F1dGhIdWIqKiBwZXJtaXNzaW9ucyB0byB0aGUgYXBwcm9wcmlhdGUgYWRtaW4gZ3JvdXBzLgoKIyMgQXV0aG9yCgptYXN0ZXIzMzk1IHwgaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvCg==]]></data>
	</file>
	<file>
	  <filename>/readme.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBNQVNfQXV0aEh1YgoKRm9yZ2UgbGlzdGluZyBtZXRhZGF0YSBmb3IgTUFTX0F1dGhIdWIuCgojIyBSZXF1aXJlbWVudHMgKE1vZHVsZSBNYW5hZ2VyKQoKLSBDTVMgTWFkZSBTaW1wbGUgMi4yLjEwKwotIFBIUCA3LjQrCi0gQ01TTVNFeHQgMS4wKyBhbmQgTUFNUyAxLjArIHJlY29tbWVuZGVkIGZvciBNQU1TIGZyb250ZW5kIFNTTyAobm90IGhhcmQgbW9kdWxlIGRlcGVuZGVuY2llcykKLSBTaGFyZWQgTUFTIGFkbWluIFVJIGlzIGJ1bmRsZWQgaW5zaWRlIE1BU19BdXRoSHViIChgbGliL21hc19jb21tb24vYCkKCiMjIFRoaXJkLVBhcnR5IFNlcnZpY2VzCgotIGRpc2NvcmQuY29tCi0gZ29vZ2xlLmNvbQotIGdpdGh1Yi5jb20KClNlZSBSRUFETUUubWQgZm9yIGluc3RhbGwgYW5kIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/about.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoubWFzLWFoLWFib3V0LXRhYnMgeyBtYXJnaW46IDIwcHggMCAwOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RkZDsgfQoubWFzLWFoLWFib3V0LXRhYnMgYSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMTBweCAyMHB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgYmFja2dyb3VuZDogI2Y1ZjVmNTsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLWJvdHRvbTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogIzMzMzsgfQoubWFzLWFoLWFib3V0LXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1haC1hYm91dC10YWJzIGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZTllOWU5OyB9Ci5tYXMtYWgtYWJvdXQtY29udGVudCB7IHBhZGRpbmc6IDIwcHg7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci10b3A6IG5vbmU7IGJhY2tncm91bmQ6ICNmZmY7IH0KLm1hcy1haC1hYm91dC1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWFoLWFib3V0LXNlY3Rpb24uYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0KPC9zdHlsZT4KCjxkaXYgY2xhc3M9Im1hcy1haC1hYm91dC10YWJzIj4KICA8YSBocmVmPSIjbWFzLWFoLWFib3V0LW1vZHVsZSIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIgYWN0aXZlIiBkYXRhLXRhYj0ibWFzLWFoLWFib3V0LW1vZHVsZSI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9tb2R1bGUnKXxlc2NhcGU6J2h0bWwnfTwvYT4KICA8YSBocmVmPSIjbWFzLWFoLWFib3V0LWNvbXBhdCIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtYWJvdXQtY29tcGF0Ij57JG1vZC0+TGFuZygnYWJvdXRfdGFiX2NvbXBhdCcpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtYWJvdXQtc3VtbWFyeSIgY2xhc3M9Im1hcy1haC1hYm91dC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtYWJvdXQtc3VtbWFyeSI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9zdW1tYXJ5Jyl8ZXNjYXBlOidodG1sJ308L2E+CiAgPGEgaHJlZj0iI21hcy1haC1hYm91dC1jaGFuZ2Vsb2ciIGNsYXNzPSJtYXMtYWgtYWJvdXQtdGFiIiBkYXRhLXRhYj0ibWFzLWFoLWFib3V0LWNoYW5nZWxvZyI+eyRtb2QtPkxhbmcoJ2Fib3V0X3RhYl9jaGFuZ2Vsb2cnKXxlc2NhcGU6J2h0bWwnfTwvYT4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJtYXMtYWgtYWJvdXQtY29udGVudCI+CiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LW1vZHVsZSIgY2xhc3M9Im1hcy1haC1hYm91dC1zZWN0aW9uIGFjdGl2ZSI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7YWJvdXRfbW9kdWxlX3RhYi50cGwnfQogIDwvbW90aW9uPgoKICA8bW90aW9uIGlkPSJtYXMtYWgtYWJvdXQtY29tcGF0IiBjbGFzcz0ibWFzLWFoLWFib3V0LXNlY3Rpb24iPgogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOk1BU19BdXRoSHViO2Fib3V0X2NvbXBhdF90YWIudHBsJ30KICA8L21vdGlvbj4KCiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LXN1bW1hcnkiIGNsYXNzPSJtYXMtYWgtYWJvdXQtc2VjdGlvbiI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7YWJvdXRfc3VtbWFyeV90YWIudHBsJ30KICA8L21vdGlvbj4KCiAgPG1vdGlvbiBpZD0ibWFzLWFoLWFib3V0LWNoYW5nZWxvZyIgY2xhc3M9Im1hcy1haC1hYm91dC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjthYm91dF9jaGFuZ2Vsb2dfdGFiLnRwbCd9CiAgPC9tb3Rpb24+CjwvbW90aW9uPgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogIHZhciB3cmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hcy1haC1hYm91dC10YWJzJyk7CiAgaWYgKCF3cmFwKSB7IHJldHVybjsgfQogIHZhciB0YWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hcy1haC1hYm91dC10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWFoLWFib3V0LXNlY3Rpb24nKTsKICB0YWJzLmZvckVhY2goZnVuY3Rpb24odGFiKSB7CiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpOwogICAgICB0YWJzLmZvckVhY2goZnVuY3Rpb24odCkgeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KTsKICAgICAgc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzKSB7IHMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICB2YXIgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpOwogICAgICBpZiAocGFuZWwpIHsgcGFuZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7IH0KICAgIH0pOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/about_changelog_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY2hhbmdlbG9nJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKe2lmICRtYXNfY2hhbmdlbG9nX2h0bWx8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19jaGFuZ2Vsb2dfaHRtbCBub2ZpbHRlcn0Ke2Vsc2V9CiAgPHA+eyRtb2QtPkxhbmcoJ2NoYW5nZWxvZycpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/about_compat_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY29tcGF0Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbWluX2NtcycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9taW5fcGhwJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2Fib3V0X2RlcGVuZGVuY2llc19yZWNvbW1lbmRlZCcpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT48c3Ryb25nPkNNU01TRXh0PC9zdHJvbmc+ICZndDs9IDEuMAogICAge2lmICRtYXNfYWhfaGF2ZV9jbXNtc19leHR8ZGVmYXVsdDonMCcgPT0gJzEnfQogICAgICAoeyRtb2QtPkxhbmcoJ2Fib3V0X2RlcF9pbnN0YWxsZWQnKXxlc2NhcGU6J2h0bWwnfSkKICAgIHtlbHNlfQogICAgICAoeyRtb2QtPkxhbmcoJ2Fib3V0X2RlcF9taXNzaW5nJyl8ZXNjYXBlOidodG1sJ30pCiAgICB7L2lmfQogIDwvbGk+CiAgPGxpPjxzdHJvbmc+TUFNUzwvc3Ryb25nPiAmZ3Q7PSAxLjAKICAgIHtpZiAkbWFzX2FoX2hhdmVfbWFtc3xkZWZhdWx0OicwJyA9PSAnMSd9CiAgICAgICh7JG1vZC0+TGFuZygnYWJvdXRfZGVwX2luc3RhbGxlZCcpfGVzY2FwZTonaHRtbCd9KQogICAge2Vsc2V9CiAgICAgICh7JG1vZC0+TGFuZygnYWJvdXRfZGVwX21pc3NpbmcnKXxlc2NhcGU6J2h0bWwnfSkKICAgIHsvaWZ9CiAgPC9saT4KPC91bD4Ke2lmICRtYXNfYWhfaGF2ZV9tYW1zX3JlZ2lzdHJhdGlvbnxkZWZhdWx0OicwJyA9PSAnMSd9CjxwIGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRtb2QtPkxhbmcoJ2Fib3V0X21hbXNfcmVnaXN0cmF0aW9uX25vdGUnKXxlc2NhcGU6J2h0bWwnfTwvcD4Key9pZn0K]]></data>
	</file>
	<file>
	  <filename>/templates/about_module_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfbW9kdWxlJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbmFtZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdmVyc2lvbicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+CjxwPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2Fib3V0X2xhYmVsX2F1dGhvcicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRBdXRob3IoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfZW1haWwnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPiA8YSBocmVmPSJtYWlsdG86eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOidodG1sJ30iPnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTonaHRtbCd9PC9hPjwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdXJsJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4gPGEgaHJlZj0ieyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTonaHRtbCd9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JG1vZC0+R2V0QXV0aG9yVXJsKCl8ZXNjYXBlOidodG1sJ308L2E+PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9sYWJlbF9saWNlbnNlJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkxhbmcoJ2Fib3V0X2xpY2Vuc2VfdmFsdWUnKXxlc2NhcGU6J2h0bWwnfTwvcD4K]]></data>
	</file>
	<file>
	  <filename>/templates/about_summary_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfc3VtbWFyeScpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxwPnskbW9kLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdhYm91dF9mZWF0dXJlc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPnskbW9kLT5MYW5nKCdhYm91dF9mZWF0dXJlX29hdXRoJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnYWJvdXRfZmVhdHVyZV9zYW1sJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnYWJvdXRfZmVhdHVyZV93ZWJhdXRobicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2Fib3V0X2ZlYXR1cmVfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2Fib3V0X2ZlYXR1cmVfYXVkaXQnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfYWRtaW5zZXR0aW5ncycpfGVzY2FwZTonaHRtbCd9PC9oMz4KeyRmb3Jtc3RhcnR9CjxwPnskbW9kLT5MYW5nKCdhZG1pbnNlY3Rpb24nKXxlc2NhcGU6J2h0bWwnfTogeyRhZG1pbnNlY3Rpb25fZHJvcGRvd259PC9wPgo8cD57JHNob3dkb25hdGlvbnN0YWJfY2hlY2tib3h9IHskbW9kLT5MYW5nKCdzaG93ZG9uYXRpb25zdGFiJyl8ZXNjYXBlOidodG1sJ308L3A+CjxwPnskc3VibWl0fTwvcD4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_sso_buttons.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWFzLWF1dGhodWItYWRtaW4tc3NvIiBzdHlsZT0ibWFyZ2luOjFlbSAwO3BhZGRpbmc6MWVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjZweDsiPgo8cD48c3Ryb25nPnskbWFzX2FoX3Nzb19oZWFkaW5nfGRlZmF1bHQ6JG1vZC0+TGFuZygnc3NvX2xvZ2luX3dpdGgnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjwvcD4KPHVsIHN0eWxlPSJsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowO21hcmdpbjowOyI+Cntmb3JlYWNoIGZyb209JG1hc19haF9wcm92aWRlcnMgaXRlbT1wcn0KPGxpIHN0eWxlPSJtYXJnaW46MC41ZW0gMDsiPjxhIGNsYXNzPSJtYXMtYXV0aGh1Yi1zc28tYnRuIiBocmVmPSJ7JHByLnVybHxlc2NhcGU6J2h0bWwnfSI+eyRwci5uYW1lfGVzY2FwZTonaHRtbCd9PC9hPjwvbGk+CnsvZm9yZWFjaH0KPC91bD4KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/audit.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfYXVkaXQnKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxwPgogIDxhIGhyZWY9InskZXhwb3J0X3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ2F1ZGl0X2V4cG9ydCcpfGVzY2FwZTonaHRtbCd9PC9hPgogIHtpZiAkYXVkaXRfdG90YWwgPiAwfQogIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDoxMnB4OyI+eyRhdWRpdF90b3RhbHxlc2NhcGU6J2h0bWwnfSB7JG1vZC0+TGFuZygnYXVkaXRfZW50cmllcycpfGVzY2FwZTonaHRtbCd9PC9zcGFuPgogIHsvaWZ9CjwvcD4Ke2lmICRhdWRpdF90b3RhbF9wYWdlcyA+IDF9CjxwIGNsYXNzPSJtYXMtYWgtYXVkaXQtcGFnZXIiPgogIHtpZiAkYXVkaXRfcGFnZSA+IDF9CiAgPGEgaHJlZj0ieyRhdWRpdF9wYWdlX2ZpcnN0X3VybHxlc2NhcGU6J2h0bWwnfSI+JmxhcXVvOyB7JG1vZC0+TGFuZygnYXVkaXRfZmlyc3QnKXxlc2NhcGU6J2h0bWwnfTwvYT4KICA8YSBocmVmPSJ7JGF1ZGl0X3BhZ2VfcHJldl91cmx8ZXNjYXBlOidodG1sJ30iPiZsc2FxdW87IHskbW9kLT5MYW5nKCdhdWRpdF9wcmV2Jyl8ZXNjYXBlOidodG1sJ308L2E+CiAgey9pZn0KICB7JG1vZC0+TGFuZygnYXVkaXRfcGFnZScpfGVzY2FwZTonaHRtbCd9IHskYXVkaXRfcGFnZXxlc2NhcGU6J2h0bWwnfSB7JG1vZC0+TGFuZygnYXVkaXRfb2YnKXxlc2NhcGU6J2h0bWwnfSB7JGF1ZGl0X3RvdGFsX3BhZ2VzfGVzY2FwZTonaHRtbCd9CiAge2lmICRhdWRpdF9wYWdlIDwgJGF1ZGl0X3RvdGFsX3BhZ2VzfQogIDxhIGhyZWY9InskYXVkaXRfcGFnZV9uZXh0X3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ2F1ZGl0X25leHQnKXxlc2NhcGU6J2h0bWwnfSAmcnNhcXVvOzwvYT4KICA8YSBocmVmPSJ7JGF1ZGl0X3BhZ2VfbGFzdF91cmx8ZXNjYXBlOidodG1sJ30iPnskbW9kLT5MYW5nKCdhdWRpdF9sYXN0Jyl8ZXNjYXBlOidodG1sJ30gJnJhcXVvOzwvYT4KICB7L2lmfQogIHskZ290b19mb3Jtc3RhcnR9CiAgeyRtb2QtPkxhbmcoJ2F1ZGl0X2dvdG8nKXxlc2NhcGU6J2h0bWwnfSB7JGdvdG9fcGFnZV9pbnB1dH0geyRnb3RvX3N1Ym1pdH0KICB7JGdvdG9fZm9ybWVuZH0KPC9wPgp7L2lmfQp7aWYgJG1hc19hdXRoaHViX3Jvd3N8QGNvdW50ID4gMH0KeyRsaXN0X2Zvcm1zdGFydH0KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUgbWFzLWFoLWF1ZGl0LXRhYmxlIiBzdHlsZT0id2lkdGg6MTAwJTsiPgo8dGhlYWQ+Cjx0cj4KPHRoIHN0eWxlPSJ3aWR0aDoyOHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ibWFzX2FoX2F1ZGl0X3NlbGVjdF9hbGwiIGFyaWEtbGFiZWw9InskbW9kLT5MYW5nKCdhdWRpdF9zZWxlY3RfYWxsJyl8ZXNjYXBlOidodG1sJ30iPjwvdGg+Cjx0aD5JRDwvdGg+PHRoPnskbW9kLT5MYW5nKCdhdWRpdF9jb2xfdGltZScpfGVzY2FwZTonaHRtbCd9PC90aD48dGg+eyRtb2QtPkxhbmcoJ2F1ZGl0X2NvbF9ldmVudCcpfGVzY2FwZTonaHRtbCd9PC90aD48dGg+eyRtb2QtPkxhbmcoJ2F1ZGl0X2NvbF9zZXZlcml0eScpfGVzY2FwZTonaHRtbCd9PC90aD48dGg+eyRtb2QtPkxhbmcoJ2F1ZGl0X2NvbF91c2VyJyl8ZXNjYXBlOidodG1sJ308L3RoPjx0aD48L3RoPgo8L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cntmb3JlYWNoIGZyb209JG1hc19hdXRoaHViX3Jvd3MgaXRlbT1yfQo8dHI+Cjx0ZD57JHIucm93X2NoZWNrYm94fTwvdGQ+Cjx0ZD57JHIuaWR9PC90ZD4KPHRkPnskci5jcmVhdGVkX2Rpc3BsYXl8ZXNjYXBlOidodG1sJ308L3RkPgo8dGQ+eyRyLmV2ZW50fGVzY2FwZTonaHRtbCd9PC90ZD4KPHRkPnskci5zZXZlcml0eXxlc2NhcGU6J2h0bWwnfTwvdGQ+Cjx0ZD57aWYgJHIudXNlcl9kaXNwbGF5fGRlZmF1bHQ6JycgIT0gJyd9eyRyLnVzZXJfZGlzcGxheXxlc2NhcGU6J2h0bWwnfXtpZiAkci51c2VyX3NvdXJjZV9sYWJlbHxkZWZhdWx0OicnICE9ICcnfSA8c3BhbiBjbGFzcz0ibWFzLWFoLWF1ZGl0LXVzZXItc3JjIiBzdHlsZT0iY29sb3I6IzY2Njtmb250LXNpemU6MTFweDsiPih7JHIudXNlcl9zb3VyY2VfbGFiZWx8ZXNjYXBlOidodG1sJ30pPC9zcGFuPnsvaWZ9e2Vsc2V9PGVtPnskbW9kLT5MYW5nKCdhdWRpdF91c2VyX25vbmUnKXxlc2NhcGU6J2h0bWwnfTwvZW0+ey9pZn08L3RkPgo8dGQ+PGEgaHJlZj0ieyRyLmRlbGV0ZV91cmx8ZXNjYXBlOidodG1sJ30iIGNsYXNzPSJtYXMtYWgtYXVkaXQtZGVsZXRlLW9uZSIgZGF0YS1jb25maXJtPSJ7JG1vZC0+TGFuZygnYXVkaXRfY29uZmlybV9kZWxldGUnKXxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ2F1ZGl0X2RlbGV0ZScpfGVzY2FwZTonaHRtbCd9PC9hPjwvdGQ+CjwvdHI+CnsvZm9yZWFjaH0KPC90Ym9keT4KPC90YWJsZT4KPHA+eyRkZWxldGVfc2VsZWN0ZWRfc3VibWl0fTwvcD4KeyRsaXN0X2Zvcm1lbmR9CntlbHNlfQo8cD48ZW0+eyRtb2QtPkxhbmcoJ2F1ZGl0X2VtcHR5Jyl8ZXNjYXBlOidodG1sJ308L2VtPjwvcD4Key9pZn0Ke2lmICRhdWRpdF90b3RhbF9wYWdlcyA+IDF9CjxwIGNsYXNzPSJtYXMtYWgtYXVkaXQtcGFnZXIiPgogIHtpZiAkYXVkaXRfcGFnZSA+IDF9CiAgPGEgaHJlZj0ieyRhdWRpdF9wYWdlX2ZpcnN0X3VybHxlc2NhcGU6J2h0bWwnfSI+JmxhcXVvOyB7JG1vZC0+TGFuZygnYXVkaXRfZmlyc3QnKXxlc2NhcGU6J2h0bWwnfTwvYT4KICA8YSBocmVmPSJ7JGF1ZGl0X3BhZ2VfcHJldl91cmx8ZXNjYXBlOidodG1sJ30iPiZsc2FxdW87IHskbW9kLT5MYW5nKCdhdWRpdF9wcmV2Jyl8ZXNjYXBlOidodG1sJ308L2E+CiAgey9pZn0KICB7JG1vZC0+TGFuZygnYXVkaXRfcGFnZScpfGVzY2FwZTonaHRtbCd9IHskYXVkaXRfcGFnZXxlc2NhcGU6J2h0bWwnfSB7JG1vZC0+TGFuZygnYXVkaXRfb2YnKXxlc2NhcGU6J2h0bWwnfSB7JGF1ZGl0X3RvdGFsX3BhZ2VzfGVzY2FwZTonaHRtbCd9CiAge2lmICRhdWRpdF9wYWdlIDwgJGF1ZGl0X3RvdGFsX3BhZ2VzfQogIDxhIGhyZWY9InskYXVkaXRfcGFnZV9uZXh0X3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ2F1ZGl0X25leHQnKXxlc2NhcGU6J2h0bWwnfSAmcnNhcXVvOzwvYT4KICA8YSBocmVmPSJ7JGF1ZGl0X3BhZ2VfbGFzdF91cmx8ZXNjYXBlOidodG1sJ30iPnskbW9kLT5MYW5nKCdhdWRpdF9sYXN0Jyl8ZXNjYXBlOidodG1sJ30gJnJhcXVvOzwvYT4KICB7L2lmfQo8L3A+CnsvaWZ9CjxkaXYgY2xhc3M9Im1hcy1haC1hdWRpdC1jbGVhciIgc3R5bGU9Im1hcmdpbi10b3A6MThweDtwYWRkaW5nLXRvcDoxMnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7Ij4KPGg0PnskbW9kLT5MYW5nKCdhdWRpdF9jbGVhcl9oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8cD57JG1vZC0+TGFuZygnYXVkaXRfY2xlYXJfaGVscCcpfGVzY2FwZTonaHRtbCd9PC9wPgp7JGNsZWFyX2Zvcm1zdGFydH0KPHA+PGxhYmVsPnskY2xlYXJfY29uZmlybV9jaGVja2JveH0geyRtb2QtPkxhbmcoJ2F1ZGl0X2NsZWFyX2NvbmZpcm0nKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+PC9wPgo8cD57JGNsZWFyX3N1Ym1pdH08L3A+CnskY2xlYXJfZm9ybWVuZH0KPC9kaXY+CjxzY3JpcHQ+CihmdW5jdGlvbiAoKSB7CiAgdmFyIHN5bmNDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBjbGVhckZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWFoLWF1ZGl0LWNsZWFyIGZvcm0nKTsKICAgIGlmICghY2xlYXJGb3JtKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBjbGVhckJ0biA9IGNsZWFyRm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZSQ9ImNsZWFyX2F1ZGl0X2xvZyJdJyk7CiAgICB2YXIgY2xlYXJDb25maXJtID0gY2xlYXJGb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il1bbmFtZSQ9ImF1ZGl0X2NsZWFyX2NvbmZpcm0iXScpOwogICAgaWYgKCFjbGVhckJ0bikgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgYXJtZWQgPSAhIShjbGVhckNvbmZpcm0gJiYgY2xlYXJDb25maXJtLmNoZWNrZWQpOwogICAgY2xlYXJGb3JtLmNsYXNzTGlzdC50b2dnbGUoJ21hcy1haC1hdWRpdC1jbGVhci1hcm1lZCcsIGFybWVkKTsKICAgIGlmICh3aW5kb3cualF1ZXJ5ICYmIGpRdWVyeS5mbi5idXR0b24pIHsKICAgICAgdHJ5IHsKICAgICAgICBqUXVlcnkoY2xlYXJCdG4pLmJ1dHRvbignb3B0aW9uJywgJ2Rpc2FibGVkJywgIWFybWVkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNsZWFyQnRuLmRpc2FibGVkID0gIWFybWVkOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjbGVhckJ0bi5kaXNhYmxlZCA9ICFhcm1lZDsKICAgIH0KICB9OwogIHZhciBzY2hlZHVsZUNsZWFyU3luYyA9IGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5zZXRUaW1lb3V0KHN5bmNDbGVhckJ1dHRvbiwgMCk7CiAgfTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXYpIHsKICAgIHZhciB0YXJnZXQgPSBldi50YXJnZXQ7CiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0Lm5hbWUgfHwgdGFyZ2V0Lm5hbWUuaW5kZXhPZignYXVkaXRfY2xlYXJfY29uZmlybScpID09PSAtMSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzY2hlZHVsZUNsZWFyU3luYygpOwogIH0sIHRydWUpOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2KSB7CiAgICB2YXIgdGFyZ2V0ID0gZXYudGFyZ2V0OwogICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5uYW1lIHx8IHRhcmdldC5uYW1lLmluZGV4T2YoJ2F1ZGl0X2NsZWFyX2NvbmZpcm0nKSA9PT0gLTEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2NoZWR1bGVDbGVhclN5bmMoKTsKICB9LCB0cnVlKTsKICBzeW5jQ2xlYXJCdXR0b24oKTsKICBpZiAod2luZG93LmpRdWVyeSkgewogICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgIHN5bmNDbGVhckJ1dHRvbigpOwogICAgICB3aW5kb3cuc2V0VGltZW91dChzeW5jQ2xlYXJCdXR0b24sIDUwKTsKICAgICAgd2luZG93LnNldFRpbWVvdXQoc3luY0NsZWFyQnV0dG9uLCAzMDApOwogICAgfSk7CiAgfQogIHZhciBjbGVhckZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWFoLWF1ZGl0LWNsZWFyIGZvcm0nKTsKICBpZiAoY2xlYXJGb3JtKSB7CiAgICBjbGVhckZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24gKGV2KSB7CiAgICAgIHZhciBjbGVhckNvbmZpcm0gPSBjbGVhckZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXVtuYW1lJD0iYXVkaXRfY2xlYXJfY29uZmlybSJdJyk7CiAgICAgIGlmICghY2xlYXJDb25maXJtIHx8ICFjbGVhckNvbmZpcm0uY2hlY2tlZCkgewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgd2luZG93LmFsZXJ0KHskYXVkaXRfanNfY2xlYXJfY29uZmlybV9yZXF1aXJlZH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgcHJvbXB0ID0geyRhdWRpdF9qc19jb25maXJtX2NsZWFyfTsKICAgICAgaWYgKHByb21wdCAmJiAhd2luZG93LmNvbmZpcm0ocHJvbXB0KSkgewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWFoLWF1ZGl0LXRhYmxlJyk7CiAgaWYgKCFyb290KSB7CiAgICByZXR1cm47CiAgfQogIHZhciBzZWxlY3RBbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzX2FoX2F1ZGl0X3NlbGVjdF9hbGwnKTsKICB2YXIgcm93Qm94ZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il1bbmFtZSo9ImF1ZGl0X2lkcyJdJyk7CiAgaWYgKHNlbGVjdEFsbCkgewogICAgc2VsZWN0QWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dCb3hlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHJvd0JveGVzW2ldLmNoZWNrZWQgPSBzZWxlY3RBbGwuY2hlY2tlZDsKICAgICAgfQogICAgfSk7CiAgfQogIHZhciBkZWxldGVMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EubWFzLWFoLWF1ZGl0LWRlbGV0ZS1vbmUnKTsKICBmb3IgKHZhciBqID0gMDsgaiA8IGRlbGV0ZUxpbmtzLmxlbmd0aDsgaisrKSB7CiAgICBkZWxldGVMaW5rc1tqXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldikgewogICAgICB2YXIgbXNnID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29uZmlybScpIHx8ICcnOwogICAgICBpZiAobXNnICYmICF3aW5kb3cuY29uZmlybShtc2cpKSB7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSk7CiAgfQogIHZhciBsaXN0Rm9ybSA9IHJvb3QuY2xvc2VzdCgnZm9ybScpOwogIGlmIChsaXN0Rm9ybSkgewogICAgbGlzdEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24gKGV2KSB7CiAgICAgIHZhciBzdWJtaXR0ZXIgPSBldi5zdWJtaXR0ZXI7CiAgICAgIGlmICghc3VibWl0dGVyIHx8IHN1Ym1pdHRlci5uYW1lLmluZGV4T2YoJ2RlbGV0ZV9hdWRpdF9zZWxlY3RlZCcpID09PSAtMSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgYW55ID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcm93Qm94ZXMubGVuZ3RoOyBrKyspIHsKICAgICAgICBpZiAocm93Qm94ZXNba10uY2hlY2tlZCkgewogICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWFueSkgewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgd2luZG93LmFsZXJ0KHskYXVkaXRfanNfbm9uZV9zZWxlY3RlZH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgYnVsa01zZyA9IHskYXVkaXRfanNfY29uZmlybV9idWxrfTsKICAgICAgaWYgKGJ1bGtNc2cgJiYgIXdpbmRvdy5jb25maXJtKGJ1bGtNc2cpKSB7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KSgpOwo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPgoubWFzLWFoLWhlbHAtdGFicyB7IG1hcmdpbjogMjBweCAwIDA7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkOyB9Ci5tYXMtYWgtaGVscC10YWJzIGEgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDEwcHggMjBweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IGJhY2tncm91bmQ6ICNmNWY1ZjU7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6ICMzMzM7IH0KLm1hcy1haC1oZWxwLXRhYnMgYS5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgbWFyZ2luLWJvdHRvbTogLTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLm1hcy1haC1oZWxwLXRhYnMgYTpob3ZlciB7IGJhY2tncm91bmQ6ICNlOWU5ZTk7IH0KLm1hcy1haC1oZWxwLWNvbnRlbnQgeyBwYWRkaW5nOiAyMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItdG9wOiBub25lOyBiYWNrZ3JvdW5kOiAjZmZmOyB9Ci5tYXMtYWgtaGVscC1zZWN0aW9uIHsgZGlzcGxheTogbm9uZTsgfQoubWFzLWFoLWhlbHAtc2VjdGlvbi5hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgfQo8L3N0eWxlPgoKPGRpdiBjbGFzcz0ibWFzLWFoLWhlbHAtdGFicyI+CiAgPGEgaHJlZj0iI21hcy1haC1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtYWgtaGVscC10YWIgYWN0aXZlIiBkYXRhLXRhYj0ibWFzLWFoLWhlbHAtZ2VuZXJhbCI+eyRtb2QtPkxhbmcoJ2hlbHBfZ2VuZXJhbCcpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1jb25maWd1cmF0aW9uIiBjbGFzcz0ibWFzLWFoLWhlbHAtdGFiIiBkYXRhLXRhYj0ibWFzLWFoLWhlbHAtY29uZmlndXJhdGlvbiI+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlndXJhdGlvbicpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1wcm90b2NvbHMiIGNsYXNzPSJtYXMtYWgtaGVscC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtaGVscC1wcm90b2NvbHMiPnskbW9kLT5MYW5nKCdoZWxwX3Byb3RvY29scycpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC1zZWN1cml0eSIgY2xhc3M9Im1hcy1haC1oZWxwLXRhYiIgZGF0YS10YWI9Im1hcy1haC1oZWxwLXNlY3VyaXR5Ij57JG1vZC0+TGFuZygnaGVscF9zZWN1cml0eScpfGVzY2FwZTonaHRtbCd9PC9hPgogIDxhIGhyZWY9IiNtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciIGNsYXNzPSJtYXMtYWgtaGVscC10YWIiIGRhdGEtdGFiPSJtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9hPgo8L2Rpdj4KCjxkaXYgY2xhc3M9Im1hcy1haC1oZWxwLWNvbnRlbnQiPgogIDxkaXYgaWQ9Im1hcy1haC1oZWxwLWdlbmVyYWwiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIGFjdGl2ZSI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7aGVscF9nZW5lcmFsX3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC1jb25maWd1cmF0aW9uIiBjbGFzcz0ibWFzLWFoLWhlbHAtc2VjdGlvbiI+CiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6TUFTX0F1dGhIdWI7aGVscF9jb25maWd1cmF0aW9uX3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC1wcm90b2NvbHMiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3Byb3RvY29sc190YWIudHBsJ30KICA8L2Rpdj4KCiAgPGRpdiBpZD0ibWFzLWFoLWhlbHAtc2VjdXJpdHkiIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3NlY3VyaXR5X3RhYi50cGwnfQogIDwvZGl2PgoKICA8ZGl2IGlkPSJtYXMtYWgtaGVscC10cm91Ymxlc2hvb3RpbmciIGNsYXNzPSJtYXMtYWgtaGVscC1zZWN0aW9uIj4KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpNQVNfQXV0aEh1YjtoZWxwX3Ryb3VibGVzaG9vdGluZ190YWIudHBsJ30KICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgdmFyIHdyYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFzLWFoLWhlbHAtdGFicycpOwogIGlmICghd3JhcCkgeyByZXR1cm47IH0KICB2YXIgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXMtYWgtaGVscC10YWInKTsKICB2YXIgc2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFzLWFoLWhlbHAtc2VjdGlvbicpOwogIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0YWIpIHsKICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiJyk7CiAgICAgIHRhYnMuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pOwogICAgICBzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7CiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7CiAgICAgIGlmIChwYW5lbCkgeyBwYW5lbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsgfQogICAgfSk7CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/help_configuration_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ3VyYXRpb24nKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3NlY3JldHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3NlY3JldHNfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmVuY3J5cHRpb25fa2V5PC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX2VuY3J5cHRpb25fa2V5Jyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48Y29kZT5zaWduaW5nX2tleTwvY29kZT46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19zaWduaW5nX2tleScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PGNvZGU+cHJvdmlkZXJzPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3Byb3ZpZGVycycpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jb25maWdfc2V0dGluZ3NfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT48c3Ryb25nPnskbW9kLT5MYW5nKCdlbmFibGVfYWRtaW5fc3NvJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19hZG1pbl9zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2FkbWluX3Nzb19tb2RlJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19hZG1pbl9zc29fbW9kZScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PHN0cm9uZz57JG1vZC0+TGFuZygnZW5hYmxlX21hbXNfc3NvJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19tYW1zX3NzbycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PHN0cm9uZz57JG1vZC0+TGFuZygnYXV0b19saW5rX2VtYWlsJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19hdXRvX2xpbmsnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3Nlc3Npb25fdHRsJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ19zZXNzaW9uX3R0bCcpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PHN0cm9uZz57JG1vZC0+TGFuZygncmF0ZV9wZXJfaG91cicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfcmF0ZScpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jb25maWdfdGFic19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3RhYl9wcm92aWRlcnMnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3RhYl9wcm92aWRlcnMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3RhYl9tYW1zJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ190YWJfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PHN0cm9uZz57JG1vZC0+TGFuZygndGFiX29hdXRoX2NsaWVudHMnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjogeyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX3RhYl9vYXV0aCcpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+PHN0cm9uZz57JG1vZC0+TGFuZygndGFiX3Nlc3Npb25zJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz46IHskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ190YWJfc2Vzc2lvbnMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ3RhYl9hdWRpdCcpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+OiB7JG1vZC0+TGFuZygnaGVscF9jb25maWdfdGFiX2F1ZGl0Jyl8ZXNjYXBlOidodG1sJ308L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2dlbmVyYWwnKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPG9sPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzEnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfMicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF8zJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzQnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfNScpfGVzY2FwZTonaHRtbCd9PC9saT4KPC9vbD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfY21zJyl8ZXNjYXBlOidodG1sJ30geyRtb2QtPk1pbmltdW1DTVNWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfcGhwJyl8ZXNjYXBlOidodG1sJ30geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9yZXF1aXJlbWVudHNfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2h0dHBzJyl8ZXNjYXBlOidodG1sJ308L2xpPgo8L3VsPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX2NyZWRpdHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfY3JlZGl0c19ib2R5Jyl8ZXNjYXBlOidodG1sJ30gPGEgaHJlZj0ieyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTonaHRtbCd9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj57JG1vZC0+R2V0QXV0aG9yKCl8ZXNjYXBlOidodG1sJ308L2E+IHwgPGEgaHJlZj0ibWFpbHRvOnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+R2V0QXV0aG9yRW1haWwoKXxlc2NhcGU6J2h0bWwnfTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_protocols_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Byb3RvY29scycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxoND5PQXV0aDIgLyBPSURDPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29hdXRoX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHVsPgogIDxsaT48Y29kZT5vYXV0aF9zdGFydDwvY29kZT4sIDxjb2RlPm9hdXRoX2NhbGxiYWNrPC9jb2RlPjwvbGk+CiAgPGxpPjxjb2RlPm9hdXRoX2F1dGhvcml6ZTwvY29kZT4sIDxjb2RlPm9hdXRoX3Rva2VuPC9jb2RlPiAoeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29hdXRoX3NlcnZlcicpfGVzY2FwZTonaHRtbCd9KTwvbGk+CiAgPGxpPjxjb2RlPm9pZGNfZGlzY292ZXJ5PC9jb2RlPiAoeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX29pZGNfZGlzY292ZXJ5Jyl8ZXNjYXBlOidodG1sJ30pPC9saT4KPC91bD4KCjxoND5TQU1MPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPnNhbWxfYWNzPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfYWNzJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT48Y29kZT5zYW1sX21ldGFkYXRhPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3NhbWxfbWV0YWRhdGEnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cgo8aDQ+V2ViQXV0aG48L2g0Pgo8cD57JG1vZC0+TGFuZygnaGVscF9wcm90b2NvbHNfd2ViYXV0aG5fYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPndlYmF1dGhuPC9jb2RlPjogeyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX3dlYmF1dGhuX2FjdGlvbicpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND5NQU1TPC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX21hbXNfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgo8dWw+CiAgPGxpPjxjb2RlPm1hbXNfbG9naW48L2NvZGU+OiB7JG1vZC0+TGFuZygnaGVscF9wcm90b2NvbHNfbWFtc19sb2dpbicpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4Ke2lmICRtYXNfYWhfaGF2ZV9tYW1zX3JlZ2lzdHJhdGlvbnxkZWZhdWx0OicwJyA9PSAnMSd9CjxwIGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRtb2QtPkxhbmcoJ2hlbHBfcHJvdG9jb2xzX21hbXNfcmVnJyl8ZXNjYXBlOidodG1sJ308L3A+CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_security_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3NlY3JldHNfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfc2VjcmV0c19ib2R5Jyl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfYXVkaXRfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfYXVkaXRfYm9keScpfGVzY2FwZTonaHRtbCd9PC9wPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3Nlc3Npb25zX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CjxwPnskbW9kLT5MYW5nKCdoZWxwX3NlY3VyaXR5X3Nlc3Npb25zX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9zZWN1cml0eV9wZXJtaXNzaW9uc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfcGVybV9tYW5hZ2UnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjwvbGk+CiAgPGxpPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2hlbHBfc2VjdXJpdHlfcGVybV91c2UnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPjwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_troubleshooting_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjxoND57JG1vZC0+TGFuZygnaGVscF90c19zc29faGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF90c19zc29fMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfc3NvXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX3Nzb18zJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF90c19zc29fNCcpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF90c19vYXV0aF9oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX29hdXRoXzEnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX29hdXRoXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX29hdXRoXzMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfbWFtc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8dWw+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3RzX21hbXNfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfbWFtc18yJyl8ZXNjYXBlOidodG1sJ308L2xpPgo8L3VsPgoKPGg0PnskbW9kLT5MYW5nKCdoZWxwX3RzX3N1cHBvcnRfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfc3VwcG9ydF9ib2R5Jyl8ZXNjYXBlOidodG1sJ30gPGEgaHJlZj0iaHR0cHM6Ly9uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3QvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5uZXdzdGFyZ2V0ZWQuY29tL2NvbnRhY3Q8L2E+PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/mams_alt_login.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWFzLWF1dGhodWItYWx0LWxvZ2luIiBzdHlsZT0ibWFyZ2luOjFlbSAwO3BhZGRpbmc6MWVtO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjZweDsiPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdzc29fbG9naW5fd2l0aCcpfGRlZmF1bHQ6J1NpZ24gaW4gd2l0aCd8ZXNjYXBlOidodG1sJ306PC9zdHJvbmc+PC9wPgo8dWwgc3R5bGU9Imxpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjA7Ij4Ke2ZvcmVhY2ggZnJvbT0kbWFzX2FoX3Byb3ZpZGVycyBpdGVtPXByfQo8bGkgc3R5bGU9Im1hcmdpbjowLjVlbSAwOyI+PGEgY2xhc3M9Im1hcy1hdXRoaHViLXNzby1idG4iIGhyZWY9InskcHIudXJsfGVzY2FwZTonaHRtbCd9Ij57JHByLm5hbWV8ZXNjYXBlOidodG1sJ308L2E+PC9saT4Key9mb3JlYWNofQo8L3VsPgp7aWYgJG1hc19haF93ZWJhdXRobl91cmx8ZGVmYXVsdDonJyAhPSAnJ30KPHA+PGEgaHJlZj0ieyRtYXNfYWhfd2ViYXV0aG5fdXJsfGVzY2FwZTonaHRtbCd9Ij5QYXNza2V5IGxvZ2luPC9hPjwvcD4Key9pZn0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mams_policy.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfbWFtcycpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnbWFtc19zdGF0dXMnKXxlc2NhcGU6J2h0bWwnfTo8L3N0cm9uZz4gTUFNUyBpbnN0YWxsZWQ6IHskbWFtc19va3xlc2NhcGU6J2h0bWwnfTsgTUFNU1JlZ2lzdHJhdGlvbjogeyRtYW1zX3JlZ2lzdHJhdGlvbnxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnbWFtc19hdXRoX21vZHVsZScpfGVzY2FwZTonaHRtbCd9Ojwvc3Ryb25nPiB7JG1hbXNfYXV0aF9tb2R1bGV8ZXNjYXBlOidodG1sJ30ge2lmICRhdXRoaHViX2FjdGl2ZSA9PSAneWVzJ30oQXV0aEh1YiBhY3RpdmUpe2Vsc2V9KHNldCB0byBNQVNfQXV0aEh1YiBpbiBNQU1TIGFkbWluIHByZWZlcmVuY2VzKXsvaWZ9PC9wPgo8cD5EbyBub3QgZWRpdCBNQU1TIG1vZHVsZSBmaWxlcy4gQ2hhbmdlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSBvbmx5IGluIE1BTVMgUHJlZmVyZW5jZXMuPC9wPgp7JGZvcm1zdGFydH0KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdtYW1zX2ppdF9jcmVhdGUnKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskbWFtc19qaXRfY3JlYXRlfTwvcD4KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdibG9ja19kdXBsaWNhdGVfZW1haWxfc2lnbnVwJyl8ZXNjYXBlOidodG1sJ308L2xhYmVsPiB7JGJsb2NrX2R1cGxpY2F0ZV9lbWFpbF9zaWdudXB9PC9wPgo8cD5EZWZhdWx0IE1BTVMgZ3JvdXAgSURzIChjb21tYS1zZXBhcmF0ZWQpIHskbWFtc19kZWZhdWx0X2dyb3Vwc308L3A+CjxwPkRlZmF1bHQgY29ubmVjdGluZyBwcm9wZXJ0eSB7JGRlZmF1bHRfY29ubmVjdGluZ19wcm9wZXJ0eX08L3A+CjxwPnskc3VibWl0fTwvcD4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_about_changelog_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY2hhbmdlbG9nJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKe2lmICRtYXNfY2hhbmdlbG9nX2h0bWx8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19jaGFuZ2Vsb2dfaHRtbCBub2ZpbHRlcn0Ke2Vsc2V9CiAgPHA+eyRtb2QtPkxhbmcoJ2NoYW5nZWxvZycpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_about_compat_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfY29tcGF0Jyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbWluX2NtcycpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9wPgo8cD48c3Ryb25nPnskbW9kLT5MYW5nKCdhYm91dF9taW5fcGhwJyl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4geyRtb2QtPkdldE1pbmltdW1QSFBWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2Fib3V0X2RlcGVuZGVuY2llc19oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgp7aWYgJG1hc19hYm91dF9kZXBlbmRlbmNpZXN8ZGVmYXVsdDonJyAhPSAnJ30KICB7JG1hc19hYm91dF9kZXBlbmRlbmNpZXMgbm9maWx0ZXJ9CntlbHNlfQogIDxwPnskbW9kLT5MYW5nKCdhYm91dF9kZXBlbmRlbmNpZXNfbm9uZScpfGVzY2FwZTonaHRtbCd9PC9wPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_about_module_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfbW9kdWxlJyl8ZXNjYXBlOidodG1sJ308L2gzPgoKPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbmFtZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvcD4KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfdmVyc2lvbicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRWZXJzaW9uKCl8ZXNjYXBlOidodG1sJ308L3A+CjxwPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2Fib3V0X2xhYmVsX2F1dGhvcicpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5HZXRBdXRob3IoKXxlc2NhcGU6J2h0bWwnfTwvcD4Ke2lmICRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZGVmYXVsdDonJyAhPSAnJ30KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfZW1haWwnKXxlc2NhcGU6J2h0bWwnfTwvc3Ryb25nPiA8YSBocmVmPSJtYWlsdG86eyRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZXNjYXBlOidodG1sJ30iPnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTonaHRtbCd9PC9hPjwvcD4Key9pZn0Ke2lmICRtb2QtPkdldEF1dGhvclVybCgpfGRlZmF1bHQ6JycgIT0gJyd9CjxwPjxzdHJvbmc+eyRtb2QtPkxhbmcoJ2Fib3V0X2xhYmVsX3VybCcpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IDxhIGhyZWY9InskbW9kLT5HZXRBdXRob3JVcmwoKXxlc2NhcGU6J2h0bWwnfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+eyRtb2QtPkdldEF1dGhvclVybCgpfGVzY2FwZTonaHRtbCd9PC9hPjwvcD4Key9pZn0KPHA+PHN0cm9uZz57JG1vZC0+TGFuZygnYWJvdXRfbGFiZWxfbGljZW5zZScpfGVzY2FwZTonaHRtbCd9PC9zdHJvbmc+IHskbW9kLT5MYW5nKCdhYm91dF9saWNlbnNlX3ZhbHVlJyl8ZXNjYXBlOidodG1sJ308L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_about_summary_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhYm91dF90YWJfc3VtbWFyeScpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+eyRtb2QtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyl8ZXNjYXBlOidodG1sJ308L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_help_configuration_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2NvbmZpZ3VyYXRpb24nKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8cD57JG1vZC0+TGFuZygnaGVscF9jb25maWd1cmF0aW9uX2JvZHknKXxlc2NhcGU6J2h0bWwnfTwvcD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jb25maWdfYWRtaW5faGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHVsPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9jb25maWdfYWRtaW5fMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfY29uZmlnX2FkbWluXzInKXxlc2NhcGU6J2h0bWwnfTwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_help_fallback_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5HZXRGcmllbmRseU5hbWUoKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxwPnskbW9kLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpfGVzY2FwZTonaHRtbCd9PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX2dlbmVyYWwnKXxlc2NhcGU6J2h0bWwnfTwvaDM+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfb3ZlcnZpZXdfaGVhZGluZycpfGVzY2FwZTonaHRtbCd9PC9oND4KPHA+eyRtb2QtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyl8ZXNjYXBlOidodG1sJ308L3A+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF9oZWFkaW5nJyl8ZXNjYXBlOidodG1sJ308L2g0Pgo8b2w+CiAgPGxpPnskbW9kLT5MYW5nKCdoZWxwX3F1aWNrc3RhcnRfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcXVpY2tzdGFydF8yJyl8ZXNjYXBlOidodG1sJ308L2xpPgogIDxsaT57JG1vZC0+TGFuZygnaGVscF9xdWlja3N0YXJ0XzMnKXxlc2NhcGU6J2h0bWwnfTwvbGk+Cjwvb2w+Cgo8aDQ+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+Cjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX2NtcycpfGVzY2FwZTonaHRtbCd9IHskbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfcmVxdWlyZW1lbnRzX3BocCcpfGVzY2FwZTonaHRtbCd9IHskbW9kLT5HZXRNaW5pbXVtUEhQVmVyc2lvbigpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxoND57JG1vZC0+TGFuZygnaGVscF9jcmVkaXRzX2hlYWRpbmcnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CjxwPnskbW9kLT5MYW5nKCdoZWxwX2NyZWRpdHNfYm9keScpfGVzY2FwZTonaHRtbCd9CntpZiAkbW9kLT5HZXRBdXRob3IoKXxkZWZhdWx0OicnICE9ICcnfQogPHN0cm9uZz57JG1vZC0+R2V0QXV0aG9yKCl8ZXNjYXBlOidodG1sJ308L3N0cm9uZz4Key9pZn0Ke2lmICRtb2QtPkdldEF1dGhvckVtYWlsKCl8ZGVmYXVsdDonJyAhPSAnJ30KIHwgPGEgaHJlZj0ibWFpbHRvOnskbW9kLT5HZXRBdXRob3JFbWFpbCgpfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+R2V0QXV0aG9yRW1haWwoKXxlc2NhcGU6J2h0bWwnfTwvYT4Key9pZn0KPC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/mas_common_help_troubleshooting_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdoZWxwX3Ryb3VibGVzaG9vdGluZycpfGVzY2FwZTonaHRtbCd9PC9oMz4KCjx1bD4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMScpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMicpfGVzY2FwZTonaHRtbCd9PC9saT4KICA8bGk+eyRtb2QtPkxhbmcoJ2hlbHBfdHNfMycpfGVzY2FwZTonaHRtbCd9PC9saT4KPC91bD4KCjxwPnskbW9kLT5MYW5nKCdoZWxwX3RzX3N1cHBvcnRfYm9keScpfGVzY2FwZTonaHRtbCd9IDxhIGhyZWY9Imh0dHBzOi8vbmV3c3RhcmdldGVkLmNvbS9jb250YWN0LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+bmV3c3RhcmdldGVkLmNvbS9jb250YWN0PC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/templates/oauth_clients.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfb2F1dGhfY2xpZW50cycpfGVzY2FwZTonaHRtbCd9PC9oMz4KPHA+T0lEQyBkaXNjb3Zlcnk6IDxjb2RlPnskZGlzY292ZXJ5X3VybHxlc2NhcGU6J2h0bWwnfTwvY29kZT48L3A+Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj48dGhlYWQ+PHRyPjx0aD5JRDwvdGg+PHRoPnskbW9kLT5MYW5nKCdjbGllbnRfaWQnKXxlc2NhcGU6J2h0bWwnfTwvdGg+PHRoPk5hbWU8L3RoPjwvdHI+PC90aGVhZD4KPHRib2R5Pntmb3JlYWNoIGZyb209JGNsaWVudHMgaXRlbT1jfTx0cj48dGQ+eyRjLmlkfTwvdGQ+PHRkPnskYy5jbGllbnRfaWR8ZXNjYXBlOidodG1sJ308L3RkPjx0ZD57JGMubmFtZXxlc2NhcGU6J2h0bWwnfTwvdGQ+PC90cj57L2ZvcmVhY2h9PC90Ym9keT48L3RhYmxlPgo8aDQ+eyRtb2QtPkxhbmcoJ29hdXRoX2NsaWVudF9hZGQnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CnskZm9ybXN0YXJ0fQo8cD5OYW1lIHskb2F1dGhfY2xpZW50X25hbWV9PC9wPgo8cD5DbGllbnQgSUQgeyRvYXV0aF9jbGllbnRfaWR9PC9wPgo8cD5TZWNyZXQgeyRvYXV0aF9jbGllbnRfc2VjcmV0fTwvcD4KPHA+UmVkaXJlY3QgVVJJcyB7JHJlZGlyZWN0X3VyaXN9PC9wPgo8cD5TY29wZXMgeyRvYXV0aF9zY29wZXN9PC9wPgo8cD57JHN1Ym1pdF9jbGllbnR9PC9wPgp7JGZvcm1lbmR9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/providers.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfcHJvdmlkZXJzJyl8ZXNjYXBlOidodG1sJ308L2gzPgo8cCBjbGFzcz0icGFnZWlucHV0Ij48ZW0+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX3VybHNfaGVscCcpfGVzY2FwZTonaHRtbCd9PC9lbT48L3A+Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBzdHlsZT0id2lkdGg6MTAwJTsiPgo8dGhlYWQ+PHRyPgo8dGg+SUQ8L3RoPgo8dGg+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX25hbWUnKXxlc2NhcGU6J2h0bWwnfTwvdGg+Cjx0aD57JG1vZC0+TGFuZygncHJvdmlkZXJfZHJpdmVyJyl8ZXNjYXBlOidodG1sJ308L3RoPgo8dGg+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2VuYWJsZWQnKXxlc2NhcGU6J2h0bWwnfTwvdGg+Cjx0aD57JG1vZC0+TGFuZygncHJvdmlkZXJfY2FsbGJhY2tfdXJsJyl8ZXNjYXBlOidodG1sJ308L3RoPgo8dGg+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2FkbWluX3Nzb191cmwnKXxlc2NhcGU6J2h0bWwnfTwvdGg+Cjx0aD48L3RoPgo8L3RyPjwvdGhlYWQ+Cjx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kcHJvdmlkZXJzIGl0ZW09cH0KPHRyPgo8dGQ+eyRwLmlkfGVzY2FwZX08L3RkPgo8dGQ+eyRwLm5hbWV8ZXNjYXBlOidodG1sJ308L3RkPgo8dGQ+eyRwLmRyaXZlcnxlc2NhcGU6J2h0bWwnfTwvdGQ+Cjx0ZD57aWYgJHAuZW5hYmxlZH15ZXN7ZWxzZX1ub3svaWZ9PC90ZD4KPHRkIHN0eWxlPSJ3b3JkLWJyZWFrOmJyZWFrLWFsbDtmb250LXNpemU6MTFweDsiPjxjb2RlPnskcC5vYXV0aF9jYWxsYmFja191cmx8ZXNjYXBlOidodG1sJ308L2NvZGU+PC90ZD4KPHRkIHN0eWxlPSJ3b3JkLWJyZWFrOmJyZWFrLWFsbDtmb250LXNpemU6MTFweDsiPjxjb2RlPnskcC5hZG1pbl9zc29fc3RhcnRfdXJsfGVzY2FwZTonaHRtbCd9PC9jb2RlPjwvdGQ+Cjx0ZD48YSBocmVmPSJ7JHAuZGVsZXRlX3VybHxlc2NhcGU6J2h0bWwnfSI+eyRtb2QtPkxhbmcoJ3Byb3ZpZGVyX2RlbGV0ZScpfGVzY2FwZTonaHRtbCd9PC9hPjwvdGQ+CjwvdHI+CnsvZm9yZWFjaH0KPC90Ym9keT4KPC90YWJsZT4KPGg0PnskbW9kLT5MYW5nKCdwcm92aWRlcl9hZGQnKXxlc2NhcGU6J2h0bWwnfTwvaDQ+CnskZm9ybXN0YXJ0fQo8cD5OYW1lIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW5hbWUiIHZhbHVlPSIiPjwvcD4KPHA+RHJpdmVyIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1kcml2ZXIiPntmb3JlYWNoIGZyb209JGRyaXZlcnMgaXRlbT1kfTxvcHRpb24gdmFsdWU9InskZHxlc2NhcGU6J2h0bWwnfSI+eyRkfGVzY2FwZTonaHRtbCd9PC9vcHRpb24+ey9mb3JlYWNofTwvc2VsZWN0PjwvcD4KPHA+UHJvdmlkZXIga2V5IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXByb3ZpZGVyX2tleSIgdmFsdWU9IiI+PC9wPgo8cD5DbGllbnQgSUQgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9Y2xpZW50X2lkIiB2YWx1ZT0iIiBzdHlsZT0id2lkdGg6NjAlOyI+PC9wPgo8cD5DbGllbnQgc2VjcmV0IDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ieyRhY3Rpb25pZH1jbGllbnRfc2VjcmV0IiB2YWx1ZT0iIiBhdXRvY29tcGxldGU9Im5ldy1wYXNzd29yZCI+PC9wPgo8cD5BdXRob3JpemUgVVJMIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWF1dGhvcml6ZV91cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPlRva2VuIFVSTCA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH10b2tlbl91cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPlVzZXJpbmZvIFVSTCA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH11c2VyaW5mb191cmwiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDo4MCU7Ij48L3A+CjxwPklkUCBTU08gVVJMIChTQU1MKSA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pZHBfc3NvX3VybCIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOjgwJTsiPjwvcD4KPHA+RW5hYmxlZCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlZCIgdmFsdWU9IjEiIGNoZWNrZWQ+PC9wPgo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfGVzY2FwZTonaHRtbCd9Ij48L3A+CnskZm9ybWVuZH0K]]></data>
	</file>
	<file>
	  <filename>/templates/sessions.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0YWJfc2Vzc2lvbnMnKXxlc2NhcGU6J2h0bWwnfTwvaDM+CjxoND5TZXNzaW9uczwvaDQ+Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj48dGhlYWQ+PHRyPjx0aD5TZXNzaW9uPC90aD48dGg+Q01TIHVzZXI8L3RoPjx0aD5NQU1TIHVzZXI8L3RoPjx0aD5FeHBpcmVzPC90aD48dGg+PC90aD48L3RyPjwvdGhlYWQ+Cjx0Ym9keT57Zm9yZWFjaCBmcm9tPSRzZXNzaW9ucyBpdGVtPXN9Cjx0cj4KPHRkPnskcy5zZXNzaW9uX2lkfGVzY2FwZTonaHRtbCd8dHJ1bmNhdGU6MTZ9PC90ZD4KPHRkPnskcy5jbXNfdXNlcl9pZH08L3RkPgo8dGQ+eyRzLm1hbXNfdXNlcl9pZH08L3RkPgo8dGQ+eyRzLmV4cGlyZXNfYXR9PC90ZD4KPHRkPjxhIGhyZWY9Inskcy5yZXZva2VfdXJsfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+TGFuZygncmV2b2tlX3Nlc3Npb24nKXxlc2NhcGU6J2h0bWwnfTwvYT48L3RkPgo8L3RyPgp7L2ZvcmVhY2h9PC90Ym9keT48L3RhYmxlPgo8aDQ+VG9rZW5zPC9oND4KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiPjx0aGVhZD48dHI+PHRoPklEPC90aD48dGg+VHlwZTwvdGg+PHRoPkV4cGlyZXM8L3RoPjx0aD48L3RoPjwvdHI+PC90aGVhZD4KPHRib2R5Pntmb3JlYWNoIGZyb209JHRva2VucyBpdGVtPXR9Cjx0cj48dGQ+eyR0LmlkfTwvdGQ+PHRkPnskdC50b2tlbl90eXBlfGVzY2FwZTonaHRtbCd9PC90ZD48dGQ+eyR0LmV4cGlyZXNfYXR9PC90ZD4KPHRkPjxhIGhyZWY9InskdC5yZXZva2VfdXJsfGVzY2FwZTonaHRtbCd9Ij57JG1vZC0+TGFuZygncmV2b2tlX3Nlc3Npb24nKXxlc2NhcGU6J2h0bWwnfTwvYT48L3RkPjwvdHI+CnsvZm9yZWFjaH08L3Rib2R5PjwvdGFibGU+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdzZXR0aW5ncycpfGVzY2FwZTonaHRtbCd9PC9oMz4KeyRzdGFydF9mb3JtfQo8cD48bGFiZWw+eyRtb2QtPkxhbmcoJ2VuYWJsZV9hZG1pbl9zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskZW5hYmxlX2FkbWluX3Nzb308L3A+CjxwPjxsYWJlbD57JG1vZC0+TGFuZygnYWRtaW5fc3NvX21vZGUnKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskYWRtaW5fc3NvX21vZGV9PC9wPgo8cCBjbGFzcz0icGFnZWlucHV0Ij48ZW0+eyRtb2QtPkxhbmcoJ2FkbWluX3Nzb19tb2RlX2hlbHAnKXxlc2NhcGU6J2h0bWwnfTwvZW0+PC9wPgo8cD48bGFiZWw+eyRtb2QtPkxhbmcoJ2FkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyJyl8ZXNjYXBlOidodG1sJ308L2xhYmVsPiB7JGFkbWluX3Nzb19kZWZhdWx0X3Byb3ZpZGVyfTwvcD4KPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGVtPnskbW9kLT5MYW5nKCdhZG1pbl9zc29fZGVmYXVsdF9wcm92aWRlcl9oZWxwJyl8ZXNjYXBlOidodG1sJ308L2VtPjwvcD4KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdlbmFibGVfbWFtc19zc28nKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskZW5hYmxlX21hbXNfc3NvfTwvcD4KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdhdXRvX2xpbmtfZW1haWwnKXxlc2NhcGU6J2h0bWwnfTwvbGFiZWw+IHskYXV0b19saW5rX2VtYWlsfTwvcD4KPHA+PGxhYmVsPnskbW9kLT5MYW5nKCdzZXNzaW9uX3R0bCcpfGVzY2FwZTonaHRtbCd9PC9sYWJlbD4geyRzZXNzaW9uX3R0bH08L3A+CjxwPjxsYWJlbD57JG1vZC0+TGFuZygncmF0ZV9wZXJfaG91cicpfGVzY2FwZTonaHRtbCd9PC9sYWJlbD4geyRyYXRlX3Blcl9ob3VyfTwvcD4KPHA+eyRzdWJtaXR9PC9wPgp7JGVuZF9mb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/webauthn_login.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CiAgdmFyIGNmZyA9IHdpbmRvdy5NQVNfQVVUSEhVQl9XRUJBVVRITiB8fCB7fTsKICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcy1haC13YS1sb2dpbicpOwogIHZhciBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzLWFoLXdhLXN0YXR1cycpOwogIGlmICghYnRuIHx8ICFjZmcucG9zdFVybCkgewogICAgcmV0dXJuOwogIH0KICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICBpZiAoc3RhdHVzKSB7CiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdQYXNza2V5IGxvZ2luIHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBjcmVkZW50aWFsLiBVc2UgT0F1dGggU1NPIG9yIHJlZ2lzdGVyIGEgcGFzc2tleSBmcm9tIGFkbWluLic7CiAgICB9CiAgfSk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/webauthn_login.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWFzLWF1dGhodWItd2ViYXV0aG4iPgo8cD5QYXNza2V5IGxvZ2luIChXZWJBdXRobikuIFJlZ2lzdHJhdGlvbiBpcyBhdmFpbGFibGUgZnJvbSBBdXRoSHViIGFkbWluIHdoZW4gbG9nZ2VkIGluLjwvcD4KPHAgaWQ9Im1hcy1haC13YS1zdGF0dXMiPjwvcD4KPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJtYXMtYWgtd2EtbG9naW4iPlVzZSBwYXNza2V5PC9idXR0b24+CjwvbW90aW9uPgo8c2NyaXB0IHNyYz0ieyRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKXxjYXQ6Jy90ZW1wbGF0ZXMvd2ViYXV0aG5fbG9naW4uanMnfGVzY2FwZTonaHRtbCd9Ij48L3NjcmlwdD4KPHNjcmlwdD4Kd2luZG93Lk1BU19BVVRISFVCX1dFQkFVVEhOID0gewogIHBvc3RVcmw6IHskbWFzX2FoX3dlYmF1dGhuX3Bvc3R8QGpzb25fZW5jb2RlfSwKICByZXR1cm5UeXBlOiB7JG1hc19haF9yZXR1cm5fdHlwZXxAanNvbl9lbmNvZGV9Cn07Cjwvc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/Test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/Test/build-forge-package.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEJ1aWxkIEZvcmdlIFhNTCBhbmQgWklQIGZvciBNQVNfQXV0aEh1YiAocmVzcGVjdHMgLmRpc3RpZ25vcmUsIGV4Y2x1ZGVzIHZlbmRvci8pLgogKgogKiBVc2FnZTogcGhwIFRlc3QvYnVpbGQtZm9yZ2UtcGFja2FnZS5waHAKICovCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKaWYgKHBocF9zYXBpX25hbWUoKSAhPT0gJ2NsaScpIHsKICAgIGZ3cml0ZShTVERFUlIsICJDTEkgb25seS5cbiIpOwogICAgZXhpdCgxKTsKfQoKJG1vZHVsZURpciA9IGRpcm5hbWUoX19ESVJfXyk7CiRjbXNSb290ID0gZGlybmFtZShkaXJuYW1lKCRtb2R1bGVEaXIpKTsKJG91dERpciA9IGRpcm5hbWUoJG1vZHVsZURpcik7CgpkZWZpbmUoJ0NNU19JTlNUQUxMJywgdHJ1ZSk7CnJlcXVpcmVfb25jZSAkY21zUm9vdCAuICcvbGliL2luY2x1ZGUucGhwJzsKCiRvcHMgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKJG1vZCA9ICRvcHMtPmdldF9tb2R1bGVfaW5zdGFuY2UoJ01BU19BdXRoSHViJywgJycsIHRydWUpOwppZiAoIWlzX29iamVjdCgkbW9kKSkgewogICAgZndyaXRlKFNUREVSUiwgIk1BU19BdXRoSHViIG1vZHVsZSBpbnN0YW5jZSBub3QgZm91bmQuXG4iKTsKICAgIGV4aXQoMSk7Cn0KCiR2ZXJzaW9uID0gJG1vZC0+R2V0VmVyc2lvbigpOwokbW9kdWxlTmFtZSA9ICRtb2QtPkdldE5hbWUoKTsKJHhtbE5hbWUgPSAkbW9kdWxlTmFtZSAuICctJyAuICR2ZXJzaW9uIC4gJy54bWwnOwokemlwTmFtZSA9ICRtb2R1bGVOYW1lIC4gJy0nIC4gJHZlcnNpb24gLiAnLnppcCc7CiR4bWxQYXRoID0gJG91dERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkeG1sTmFtZTsKJHppcFBhdGggPSAkb3V0RGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR6aXBOYW1lOwoKJGRpc3RpZ25vcmVQYXRoID0gJG1vZHVsZURpciAuICcvLmRpc3RpZ25vcmUnOwokZGlzdFBhdHRlcm5zID0gYXJyYXkoKTsKaWYgKGlzX2ZpbGUoJGRpc3RpZ25vcmVQYXRoKSkgewogICAgJGxpbmVzID0gZmlsZSgkZGlzdGlnbm9yZVBhdGgsIEZJTEVfSUdOT1JFX05FV19MSU5FUyB8IEZJTEVfU0tJUF9FTVBUWV9MSU5FUyk7CiAgICBpZiAoaXNfYXJyYXkoJGxpbmVzKSkgewogICAgICAgIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgewogICAgICAgICAgICAkbGluZSA9IHRyaW0oJGxpbmUpOwogICAgICAgICAgICBpZiAoJGxpbmUgPT09ICcnIHx8IHN0cnBvcygkbGluZSwgJyMnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRpc3RQYXR0ZXJuc1tdID0gJGxpbmU7CiAgICAgICAgfQogICAgfQp9CgokY21zRXhjbHVkZXMgPSBhcnJheSgnXlwuc3ZuJywgJ15DVlMkJywgJ15cIy4qXCMkJywgJ34kJywgJ1wuYmFrJCcsICdeXC5naXQnLCAnXlwudG1wJCcsICdeVGVzdCQnKTsKJGFsbEV4Y2x1ZGVzID0gYXJyYXlfbWVyZ2UoJGNtc0V4Y2x1ZGVzLCAkZGlzdFBhdHRlcm5zKTsKCiRyZWdleE1hdGNoZXMgPSBzdGF0aWMgZnVuY3Rpb24gKHN0cmluZyAkcmVnZXgsIHN0cmluZyAkc3ViamVjdCk6IGJvb2wgewogICAgaWYgKCRzdWJqZWN0ID09PSAnJykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRyZXN1bHQgPSBwcmVnX21hdGNoKCRyZWdleCwgJHN1YmplY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQgPT09IDE7Cn07Cgokc2hvdWxkRXhjbHVkZSA9IHN0YXRpYyBmdW5jdGlvbiAoc3RyaW5nICRyZWxhdGl2ZSkgdXNlICgkYWxsRXhjbHVkZXMsICRyZWdleE1hdGNoZXMpOiBib29sIHsKICAgICRyZWxhdGl2ZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHJlbGF0aXZlKTsKICAgICRyZWxhdGl2ZSA9IGx0cmltKCRyZWxhdGl2ZSwgJy8nKTsKICAgICRiYXNlID0gYmFzZW5hbWUoJHJlbGF0aXZlKTsKICAgIGZvcmVhY2ggKCRhbGxFeGNsdWRlcyBhcyAkcGF0dGVybikgewogICAgICAgICRwYXR0ZXJuID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCB0cmltKCRwYXR0ZXJuKSk7CiAgICAgICAgaWYgKCRwYXR0ZXJuID09PSAnJykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRwYXR0ZXJuWzBdID09PSAnXicpIHsKICAgICAgICAgICAgJGNtc1JlZ2V4ID0gJyMnIC4gc3RyX3JlcGxhY2UoJyMnLCAnXFwjJywgJHBhdHRlcm4pIC4gJyNpJzsKICAgICAgICAgICAgaWYgKCRyZWdleE1hdGNoZXMoJGNtc1JlZ2V4LCAkYmFzZSkgfHwgJHJlZ2V4TWF0Y2hlcygkY21zUmVnZXgsICRyZWxhdGl2ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RycG9zKCRwYXR0ZXJuLCAnKicpICE9PSBmYWxzZSB8fCBzdHJwb3MoJHBhdHRlcm4sICc/JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRxdW90ZWQgPSBwcmVnX3F1b3RlKCRwYXR0ZXJuLCAnIycpOwogICAgICAgICAgICAkcXVvdGVkID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1xcKlxcKi8nLCAnXFwqXFwqJywgJ1xcKicsICdcXD8nKSwgYXJyYXkoJyguKi8pPycsICcuKicsICdbXi9dKicsICdbXi9dJyksICRxdW90ZWQpOwogICAgICAgICAgICAkZ2xvYlJlZ2V4ID0gJyNeJyAuICRxdW90ZWQgLiAnJCNpJzsKICAgICAgICAgICAgaWYgKCRyZWdleE1hdGNoZXMoJGdsb2JSZWdleCwgJHJlbGF0aXZlKSB8fCAkcmVnZXhNYXRjaGVzKCRnbG9iUmVnZXgsICRiYXNlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICR0cmltbWVkID0gcnRyaW0oJHBhdHRlcm4sICcvJyk7CiAgICAgICAgaWYgKCR0cmltbWVkICE9PSAnJyAmJiBzdHJjYXNlY21wKCRiYXNlLCAkdHJpbW1lZCkgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICgkdHJpbW1lZCAhPT0gJycgJiYgKCRyZWxhdGl2ZSA9PT0gJHRyaW1tZWQgfHwgc3RyaXBvcygkcmVsYXRpdmUsICR0cmltbWVkIC4gJy8nKSA9PT0gMCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9OwoKJGNvbGxlY3RGaWxlcyA9IHN0YXRpYyBmdW5jdGlvbiAoc3RyaW5nICRkaXIsIHN0cmluZyAkcHJlZml4ID0gJycpIHVzZSAoJiRjb2xsZWN0RmlsZXMsICRzaG91bGRFeGNsdWRlKTogYXJyYXkgewogICAgJGl0ZW1zID0gYXJyYXkoKTsKICAgICRoYW5kbGUgPSBAb3BlbmRpcigkZGlyKTsKICAgIGlmICgkaGFuZGxlID09PSBmYWxzZSkgewogICAgICAgIHJldHVybiAkaXRlbXM7CiAgICB9CiAgICB3aGlsZSAoKCRlbnRyeSA9IHJlYWRkaXIoJGhhbmRsZSkpICE9PSBmYWxzZSkgewogICAgICAgIGlmICgkZW50cnkgPT09ICcuJyB8fCAkZW50cnkgPT09ICcuLicpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRyZWxhdGl2ZSA9ICRwcmVmaXggPT09ICcnID8gJGVudHJ5IDogJHByZWZpeCAuICcvJyAuICRlbnRyeTsKICAgICAgICBpZiAoJHNob3VsZEV4Y2x1ZGUoJHJlbGF0aXZlKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgJGZ1bGwgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlbnRyeTsKICAgICAgICBpZiAoaXNfZGlyKCRmdWxsKSkgewogICAgICAgICAgICAkaXRlbXNbXSA9IGFycmF5KCdyZWxhdGl2ZScgPT4gJy8nIC4gJHJlbGF0aXZlLCAnZnVsbCcgPT4gJGZ1bGwsICdpc2RpcicgPT4gdHJ1ZSk7CiAgICAgICAgICAgICRjaGlsZCA9ICRjb2xsZWN0RmlsZXMoJGZ1bGwsICRyZWxhdGl2ZSk7CiAgICAgICAgICAgICRpdGVtcyA9IGFycmF5X21lcmdlKCRpdGVtcywgJGNoaWxkKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRpdGVtc1tdID0gYXJyYXkoJ3JlbGF0aXZlJyA9PiAnLycgLiAkcmVsYXRpdmUsICdmdWxsJyA9PiAkZnVsbCwgJ2lzZGlyJyA9PiBmYWxzZSk7CiAgICB9CiAgICBjbG9zZWRpcigkaGFuZGxlKTsKICAgIHJldHVybiAkaXRlbXM7Cn07Cgp0cnkgewogICAgJGdlbiA9IG5ldyBSZWZsZWN0aW9uTWV0aG9kKCRvcHMsICdfZ2VuZXJhdGVfbW9kdWxlaW5mbycpOwogICAgJGdlbi0+c2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICRnZW4tPmludm9rZSgkb3BzLCAkbW9kKTsKfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICBmd3JpdGUoU1RERVJSLCAnbW9kdWxlaW5mby5pbmkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpIC4gUEhQX0VPTCk7CiAgICBleGl0KDEpOwp9CgokZmlsZXMgPSAkY29sbGVjdEZpbGVzKCRtb2R1bGVEaXIpOwp1c29ydCgkZmlsZXMsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGEsIGFycmF5ICRiKTogaW50IHsKICAgIHJldHVybiBzdHJuYXRjYXNlY21wKCRhWydyZWxhdGl2ZSddLCAkYlsncmVsYXRpdmUnXSk7Cn0pOwoKJHJvb3RFbnRyeSA9IGFycmF5KGFycmF5KCdyZWxhdGl2ZScgPT4gJy8nLCAnZnVsbCcgPT4gJG1vZHVsZURpciwgJ2lzZGlyJyA9PiB0cnVlKSk7CiRwYWNrYWdlRmlsZXMgPSBhcnJheV9tZXJnZSgkcm9vdEVudHJ5LCAkZmlsZXMpOwoKJHhtbGR0ZCA9IDw8PCdEVEQnCgo8IURPQ1RZUEUgbW9kdWxlIFsKICA8IUVMRU1FTlQgbW9kdWxlIChkdGR2ZXJzaW9uLG5hbWUsdmVyc2lvbixkZXNjcmlwdGlvbiosaGVscCosYWJvdXQqLHJlcXVpcmVzKixmaWxlKyk+CiAgPCFFTEVNRU5UIGR0ZHZlcnNpb24gKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgdmVyc2lvbiAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIG1pbmNtc3ZlcnNpb24gKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIGhlbHAgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBhYm91dCAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHJlcXVpcmVzIChyZXF1aXJlZG5hbWUscmVxdWlyZWR2ZXJzaW9uKT4KICA8IUVMRU1FTlQgcmVxdWlyZWRuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgcmVxdWlyZWR2ZXJzaW9uICgjUENEQVRBKT4KICA8IUVMRU1FTlQgZmlsZSAoZmlsZW5hbWUsaXNkaXIsZGF0YSk+CiAgPCFFTEVNRU5UIGZpbGVuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgaXNkaXIgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBkYXRhICgjUENEQVRBKT4KXT4KRFREOwoKJG9yaWdMYW5nID0gQ21zTmxzT3BlcmF0aW9uczo6Z2V0X2N1cnJlbnRfbGFuZ3VhZ2UoKTsKQ21zTmxzT3BlcmF0aW9uczo6c2V0X2xhbmd1YWdlKCdlbl9VUycpOwoKJHhtbCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+JyAuICR4bWxkdGQgLiAiXG4iOwokeG1sIC49ICI8bW9kdWxlPlxuIjsKJHhtbCAuPSAiXHQ8ZHRkdmVyc2lvbj4iIC4gTU9EVUxFX0RURF9WRVJTSU9OIC4gIjwvZHRkdmVyc2lvbj5cbiI7CiR4bWwgLj0gIlx0PG5hbWU+IiAuIGh0bWxzcGVjaWFsY2hhcnMoJG1vZHVsZU5hbWUsIEVOVF9YTUwxKSAuICI8L25hbWU+XG4iOwokeG1sIC49ICJcdDx2ZXJzaW9uPiIgLiBodG1sc3BlY2lhbGNoYXJzKCR2ZXJzaW9uLCBFTlRfWE1MMSkgLiAiPC92ZXJzaW9uPlxuIjsKJHhtbCAuPSAiXHQ8bWluY21zdmVyc2lvbj4iIC4gaHRtbHNwZWNpYWxjaGFycygkbW9kLT5NaW5pbXVtQ01TVmVyc2lvbigpLCBFTlRfWE1MMSkgLiAiPC9taW5jbXN2ZXJzaW9uPlxuIjsKJHhtbCAuPSAiXHQ8aGVscD48IVtDREFUQVsiIC4gYmFzZTY0X2VuY29kZSgkbW9kLT5HZXRIZWxwUGFnZSgpKSAuICJdXT48L2hlbHA+XG4iOwokeG1sIC49ICJcdDxhYm91dD48IVtDREFUQVsiIC4gYmFzZTY0X2VuY29kZSgkbW9kLT5HZXRBYm91dCgpKSAuICJdXT48L2Fib3V0PlxuIjsKJGRlc2MgPSAkbW9kLT5HZXRBZG1pbkRlc2NyaXB0aW9uKCk7CmlmICgkZGVzYyAhPT0gJycpIHsKICAgICR4bWwgLj0gIlx0PGRlc2NyaXB0aW9uPjwhW0NEQVRBWyIgLiAkZGVzYyAuICJdXT48L2Rlc2NyaXB0aW9uPlxuIjsKfQoKJGZpbGVDb3VudCA9IDA7CmZvcmVhY2ggKCRwYWNrYWdlRmlsZXMgYXMgJGVudHJ5KSB7CiAgICAkeG1sIC49ICJcdDxmaWxlPlxuIjsKICAgICR4bWwgLj0gIlx0ICA8ZmlsZW5hbWU+IiAuIGh0bWxzcGVjaWFsY2hhcnMoJGVudHJ5WydyZWxhdGl2ZSddLCBFTlRfWE1MMSkgLiAiPC9maWxlbmFtZT5cbiI7CiAgICBpZiAoJGVudHJ5Wydpc2RpciddKSB7CiAgICAgICAgJHhtbCAuPSAiXHQgIDxpc2Rpcj4xPC9pc2Rpcj5cbiI7CiAgICB9IGVsc2UgewogICAgICAgICR4bWwgLj0gIlx0ICA8aXNkaXI+MDwvaXNkaXI+XG4iOwogICAgICAgICRkYXRhID0gYmFzZTY0X2VuY29kZSgoc3RyaW5nKSBmaWxlX2dldF9jb250ZW50cygkZW50cnlbJ2Z1bGwnXSkpOwogICAgICAgICR4bWwgLj0gIlx0ICA8ZGF0YT48IVtDREFUQVsiIC4gJGRhdGEgLiAiXV0+PC9kYXRhPlxuIjsKICAgIH0KICAgICR4bWwgLj0gIlx0PC9maWxlPlxuIjsKICAgICRmaWxlQ291bnQrKzsKfQoKJHhtbCAuPSAiPC9tb2R1bGU+XG4iOwpDbXNObHNPcGVyYXRpb25zOjpzZXRfbGFuZ3VhZ2UoJG9yaWdMYW5nKTsKCmlmIChmaWxlX3B1dF9jb250ZW50cygkeG1sUGF0aCwgJHhtbCkgPT09IGZhbHNlKSB7CiAgICBmd3JpdGUoU1RERVJSLCAiRmFpbGVkIHRvIHdyaXRlIFhNTDogeyR4bWxQYXRofVxuIik7CiAgICBleGl0KDEpOwp9CgppZiAoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOwogICAgaWYgKCR6aXAtPm9wZW4oJHppcFBhdGgsIFppcEFyY2hpdmU6OkNSRUFURSB8IFppcEFyY2hpdmU6Ok9WRVJXUklURSkgIT09IHRydWUpIHsKICAgICAgICBmd3JpdGUoU1RERVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSBaSVA6IHskemlwUGF0aH1cbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICBmb3JlYWNoICgkcGFja2FnZUZpbGVzIGFzICRlbnRyeSkgewogICAgICAgICR6aXBQYXRoSW5zaWRlID0gJG1vZHVsZU5hbWUgLiAkZW50cnlbJ3JlbGF0aXZlJ107CiAgICAgICAgaWYgKCRlbnRyeVsnaXNkaXInXSkgewogICAgICAgICAgICAkemlwLT5hZGRFbXB0eURpcihydHJpbShzdHJfcmVwbGFjZSgnXFwnLCAnLycsICR6aXBQYXRoSW5zaWRlKSwgJy8nKSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkemlwLT5hZGRGaWxlKCRlbnRyeVsnZnVsbCddLCBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICR6aXBQYXRoSW5zaWRlKSk7CiAgICB9CiAgICAkemlwLT5jbG9zZSgpOwp9IGVsc2UgewogICAgZndyaXRlKFNUREVSUiwgIlppcEFyY2hpdmUgbm90IGF2YWlsYWJsZTsgWE1MIG9ubHkuXG4iKTsKICAgICR6aXBQYXRoID0gJyc7Cn0KCmVjaG8ganNvbl9lbmNvZGUoYXJyYXkoCiAgICAnbW9kdWxlJyA9PiAkbW9kdWxlTmFtZSwKICAgICd2ZXJzaW9uJyA9PiAkdmVyc2lvbiwKICAgICdmaWxlcycgPT4gJGZpbGVDb3VudCwKICAgICd4bWwnID0+ICR4bWxQYXRoLAogICAgJ3htbF9ieXRlcycgPT4gZmlsZXNpemUoJHhtbFBhdGgpLAogICAgJ3ppcCcgPT4gJHppcFBhdGgsCiAgICAnemlwX2J5dGVzJyA9PiAoJHppcFBhdGggIT09ICcnICYmIGlzX2ZpbGUoJHppcFBhdGgpKSA/IGZpbGVzaXplKCR6aXBQYXRoKSA6IDAsCiksIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpIC4gUEhQX0VPTDsK]]></data>
	</file>
	<file>
	  <filename>/Test/generate_brand_assets.py</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJSZWdlbmVyYXRlIE1BU19BdXRoSHViIGJhbm5lciBhbmQgaWNvbnMuIFJlcXVpcmVzIFBpbGxvdy4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCBvcwppbXBvcnQgc3lzCgpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UsIEltYWdlRHJhdywgSW1hZ2VGb250CgpBQ0NFTlQgPSAoNzksIDcwLCAyMjksIDI1NSkKQUNDRU5UX0RBUksgPSAoNDksIDQ2LCAxMjksIDI1NSkKV0hJVEUgPSAoMjU1LCAyNTUsIDI1NSwgMjU1KQpHT0xEID0gKDI1MCwgMjA0LCAyMSwgMjU1KQoKCmRlZiBsZXJwKGE6IGZsb2F0LCBiOiBmbG9hdCwgdDogZmxvYXQpIC0+IGZsb2F0OgogICAgcmV0dXJuIGEgKyAoYiAtIGEpICogdAoKCmRlZiBob3Jpem9udGFsX2dyYWRpZW50KHNpemU6IHR1cGxlW2ludCwgaW50XSwgbGVmdDogdHVwbGUsIHJpZ2h0OiB0dXBsZSkgLT4gSW1hZ2UuSW1hZ2U6CiAgICB3LCBoID0gc2l6ZQogICAgaW1nID0gSW1hZ2UubmV3KCJSR0JBIiwgc2l6ZSkKICAgIHBpeCA9IGltZy5sb2FkKCkKICAgIGZvciB4IGluIHJhbmdlKHcpOgogICAgICAgIHQgPSB4IC8gbWF4KHcgLSAxLCAxKQogICAgICAgIHIgPSBpbnQobGVycChsZWZ0WzBdLCByaWdodFswXSwgdCkpCiAgICAgICAgZyA9IGludChsZXJwKGxlZnRbMV0sIHJpZ2h0WzFdLCB0KSkKICAgICAgICBiID0gaW50KGxlcnAobGVmdFsyXSwgcmlnaHRbMl0sIHQpKQogICAgICAgIGFsID0gaW50KGxlcnAobGVmdFszXSwgcmlnaHRbM10sIHQpKQogICAgICAgIGZvciB5IGluIHJhbmdlKGgpOgogICAgICAgICAgICBwaXhbeCwgeV0gPSAociwgZywgYiwgYWwpCiAgICByZXR1cm4gaW1nCgoKZGVmIGxvYWRfZm9udChzaXplOiBpbnQpIC0+IEltYWdlRm9udC5GcmVlVHlwZUZvbnQgfCBJbWFnZUZvbnQuSW1hZ2VGb250OgogICAgZm9yIHAgaW4gKAogICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL2RlamF2dS1zYW5zLWZvbnRzL0RlamFWdVNhbnMtQm9sZC50dGYiLAogICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2RlamF2dS9EZWphVnVTYW5zLUJvbGQudHRmIiwKICAgICk6CiAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocCk6CiAgICAgICAgICAgIHJldHVybiBJbWFnZUZvbnQudHJ1ZXR5cGUocCwgc2l6ZSkKICAgIHJldHVybiBJbWFnZUZvbnQubG9hZF9kZWZhdWx0KCkKCgpkZWYgZHJhd19zaGllbGRfa2V5KGltZzogSW1hZ2UuSW1hZ2UsIGN4OiBmbG9hdCwgY3k6IGZsb2F0LCBzY2FsZTogZmxvYXQpIC0+IE5vbmU6CiAgICBkciA9IEltYWdlRHJhdy5EcmF3KGltZykKICAgIHMgPSBzY2FsZQogICAgc2hpZWxkID0gWwogICAgICAgIChjeCwgY3kgLSAxMTAgKiBzKSwKICAgICAgICAoY3ggKyA3OCAqIHMsIGN5IC0gNzAgKiBzKSwKICAgICAgICAoY3ggKyA3OCAqIHMsIGN5ICsgMTUgKiBzKSwKICAgICAgICAoY3gsIGN5ICsgOTUgKiBzKSwKICAgICAgICAoY3ggLSA3OCAqIHMsIGN5ICsgMTUgKiBzKSwKICAgICAgICAoY3ggLSA3OCAqIHMsIGN5IC0gNzAgKiBzKSwKICAgIF0KICAgIGRyLnBvbHlnb24oc2hpZWxkLCBmaWxsPVdISVRFKQogICAgaW5uZXIgPSBbCiAgICAgICAgKGN4LCBjeSAtIDc4ICogcyksCiAgICAgICAgKGN4ICsgNTIgKiBzLCBjeSAtIDQ4ICogcyksCiAgICAgICAgKGN4ICsgNTIgKiBzLCBjeSArIDggKiBzKSwKICAgICAgICAoY3gsIGN5ICsgNjIgKiBzKSwKICAgICAgICAoY3ggLSA1MiAqIHMsIGN5ICsgOCAqIHMpLAogICAgICAgIChjeCAtIDUyICogcywgY3kgLSA0OCAqIHMpLAogICAgXQogICAgZHIucG9seWdvbihpbm5lciwgZmlsbD1BQ0NFTlQpCiAgICBrciA9IDE4ICogcwogICAgZHIuZWxsaXBzZShbY3ggLSBrciwgY3kgLSA4ICogcyAtIGtyLCBjeCArIGtyLCBjeSAtIDggKiBzICsga3JdLCBmaWxsPVdISVRFKQogICAgc2xvdF93ID0gMTAgKiBzCiAgICBkci5yZWN0YW5nbGUoW2N4IC0gc2xvdF93LCBjeSArIDIgKiBzLCBjeCArIHNsb3RfdywgY3kgKyA0MiAqIHNdLCBmaWxsPVdISVRFKQogICAgZHIuZWxsaXBzZSgKICAgICAgICBbY3ggKyAzOCAqIHMgLSAxMiAqIHMsIGN5ICsgMTggKiBzIC0gMTIgKiBzLCBjeCArIDM4ICogcyArIDEyICogcywgY3kgKyAxOCAqIHMgKyAxMiAqIHNdLAogICAgICAgIGZpbGw9R09MRCwKICAgICkKCgpkZWYgbWFrZV9iYW5uZXIob3V0X3BhdGg6IHN0cikgLT4gTm9uZToKICAgIHcsIGggPSA2MDAsIDEyMAogICAgYmFzZSA9IGhvcml6b250YWxfZ3JhZGllbnQoKHcsIGgpLCBBQ0NFTlRfREFSSywgQUNDRU5UKQogICAgZHIgPSBJbWFnZURyYXcuRHJhdyhiYXNlKQogICAgZHIudGV4dCgoMjQsIDI2KSwgIk1BUyBBdXRoSHViIiwgZm9udD1sb2FkX2ZvbnQoMjgpLCBmaWxsPVdISVRFKQogICAgZHIudGV4dCgKICAgICAgICAoMjQsIDY2KSwKICAgICAgICAiT0F1dGgyLCBPSURDLCBTQU1MLCBXZWJBdXRobiwgYW5kIE1BTVMgU1NPIiwKICAgICAgICBmb250PWxvYWRfZm9udCgxMyksCiAgICAgICAgZmlsbD0oMjIwLCAyMTgsIDI1NSwgMjU1KSwKICAgICkKICAgIG92ZXJsYXkgPSBJbWFnZS5uZXcoIlJHQkEiLCAodywgaCksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShvdmVybGF5LCA1MTgsIDcyLCAwLjIwKQogICAgSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGJhc2UsIG92ZXJsYXkpLnNhdmUob3V0X3BhdGgsICJQTkciKQoKCmRlZiBtYWtlX2ljb24oc2l6ZTogaW50LCBvdXRfcGF0aDogc3RyKSAtPiBOb25lOgogICAgbWFyZ2luID0gaW50KHNpemUgKiAwLjA2KQogICAgZ3JhZCA9IGhvcml6b250YWxfZ3JhZGllbnQoKHNpemUsIHNpemUpLCBBQ0NFTlRfREFSSywgQUNDRU5UKQogICAgbWFzayA9IEltYWdlLm5ldygiTCIsIChzaXplLCBzaXplKSwgMCkKICAgIG1kciA9IEltYWdlRHJhdy5EcmF3KG1hc2spCiAgICBtZHIucm91bmRlZF9yZWN0YW5nbGUoCiAgICAgICAgW21hcmdpbiwgbWFyZ2luLCBzaXplIC0gbWFyZ2luLCBzaXplIC0gbWFyZ2luXSwKICAgICAgICByYWRpdXM9aW50KHNpemUgKiAwLjE4KSwKICAgICAgICBmaWxsPTI1NSwKICAgICkKICAgIGltZyA9IEltYWdlLm5ldygiUkdCQSIsIChzaXplLCBzaXplKSwgKDAsIDAsIDAsIDApKQogICAgaW1nLnBhc3RlKGdyYWQsICgwLCAwKSkKICAgIGltZy5wdXRhbHBoYShtYXNrKQogICAgbGF5ZXIgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShsYXllciwgc2l6ZSAvIDIsIHNpemUgLyAyLCBzaXplIC8gNTEyKQogICAgaW1nID0gSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGltZywgbGF5ZXIpCiAgICBvdXQgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIG91dC5wYXN0ZShpbWcsICgwLCAwKSkKICAgIG91dC5wdXRhbHBoYShtYXNrKQogICAgb3V0LnNhdmUob3V0X3BhdGgsICJQTkciKQoKCmRlZiBtYWtlX2ljb25fZ2lmKG91dF9wYXRoOiBzdHIsIHNpemU6IGludCA9IDMyKSAtPiBOb25lOgogICAgaW1nID0gSW1hZ2UubmV3KCJSR0JBIiwgKHNpemUsIHNpemUpLCAoMCwgMCwgMCwgMCkpCiAgICBncmFkID0gaG9yaXpvbnRhbF9ncmFkaWVudCgoc2l6ZSwgc2l6ZSksIEFDQ0VOVF9EQVJLLCBBQ0NFTlQpCiAgICBpbWcucGFzdGUoZ3JhZCwgKDAsIDApKQogICAgbGF5ZXIgPSBJbWFnZS5uZXcoIlJHQkEiLCAoc2l6ZSwgc2l6ZSksICgwLCAwLCAwLCAwKSkKICAgIGRyYXdfc2hpZWxkX2tleShsYXllciwgc2l6ZSAvIDIsIHNpemUgLyAyLCBzaXplIC8gNTEyKQogICAgaW1nID0gSW1hZ2UuYWxwaGFfY29tcG9zaXRlKGltZywgbGF5ZXIpCiAgICByZ2IgPSBJbWFnZS5uZXcoIlJHQiIsIGltZy5zaXplLCAoMjU1LCAyNTUsIDI1NSkpCiAgICByZ2IucGFzdGUoaW1nLCBtYXNrPWltZy5zcGxpdCgpWzNdKQogICAgcmdiLnNhdmUob3V0X3BhdGgsICJHSUYiKQoKCmRlZiBtYWluKCkgLT4gaW50OgogICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQogICAgaW1hZ2VzID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgIi4uIiwgImltYWdlcyIpKQogICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2VzKToKICAgICAgICBwcmludCgiTWlzc2luZyBpbWFnZXMgZGlyZWN0b3J5OiIsIGltYWdlcywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAxCiAgICBtYWtlX2Jhbm5lcihvcy5wYXRoLmpvaW4oaW1hZ2VzLCAiYmFubmVyLnBuZyIpKQogICAgbWFrZV9pY29uKDE5Miwgb3MucGF0aC5qb2luKGltYWdlcywgImljb24tMTkyLnBuZyIpKQogICAgbWFrZV9pY29uKDUxMiwgb3MucGF0aC5qb2luKGltYWdlcywgImljb24tNTEyLnBuZyIpKQogICAgbWFrZV9pY29uX2dpZihvcy5wYXRoLmpvaW4oaW1hZ2VzLCAiaWNvbi5naWYiKSwgMzIpCiAgICBwcmludCgiT0sgLT4iLCBpbWFnZXMpCiAgICByZXR1cm4gMAoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICByYWlzZSBTeXN0ZW1FeGl0KG1haW4oKSkK]]></data>
	</file>
	<file>
	  <filename>/Test/mas_common_loader_bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZGVmaW5lKCdDTVNfVkVSU0lPTicsICcyLjIuMjInKTsKJG1vZHVsZVJvb3QgPSBkaXJuYW1lKF9fRElSX18pOwpyZXF1aXJlX29uY2UgJG1vZHVsZVJvb3QgLiAnL2xpYi9tYXNfY29tbW9uX2xvYWRlci5waHAnOwokYWRtaW5VaSA9IG1hc19haF9tYXNfY29tbW9uX3BhdGgoJ2xpYi9tYXNfYWRtaW5fdWkucGhwJyk7CmlmICgkYWRtaW5VaSA9PT0gbnVsbCB8fCAhaXNfcmVhZGFibGUoJGFkbWluVWkpKSB7IGZ3cml0ZShTVERFUlIsICJGQUlMOiBtYXNfYWRtaW5fdWkucGhwIG5vdCBmb3VuZFxuIik7IGV4aXQoMSk7IH0KbWFzX3JlcXVpcmVfbWFzX2FkbWluX3VpKCk7CmlmICghY2xhc3NfZXhpc3RzKCdNYXNfQWRtaW5fVWknLCBmYWxzZSkpIHsgZndyaXRlKFNUREVSUiwgIkZBSUw6IE1hc19BZG1pbl9VaSBub3QgbG9hZGVkXG4iKTsgZXhpdCgxKTsgfQokbGFuZ1BhdGggPSBtYXNfYWhfbWFzX2NvbW1vbl9wYXRoKCdsYW5nL21hc19kb2NzX2RlZmF1bHRzX2VuX1VTLnBocCcpOwppZiAoJGxhbmdQYXRoID09PSBudWxsKSB7IGZ3cml0ZShTVERFUlIsICJGQUlMOiBsYW5nIGRlZmF1bHRzIG5vdCBmb3VuZFxuIik7IGV4aXQoMSk7IH0KcmVxdWlyZV9vbmNlICRtb2R1bGVSb290IC4gJy9saWIvbWFzX2FoX2xvYWRlci5waHAnOwppZiAoY2xhc3NfZXhpc3RzKCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGMnLCBmYWxzZSkpIHsgZndyaXRlKFNUREVSUiwgIkZBSUw6IHZlbmRvciBsb2FkZWQgZWFnZXJseVxuIik7IGV4aXQoMSk7IH0KZWNobyAiT0s6IGJ1bmRsZWQgTUFTX0NvbW1vbiBib290c3RyYXBcbiI7CmV4aXQoMCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/to-do/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/to-do/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBNQVNfQXV0aEh1YiBjaGFuZ2Vsb2cKCiMjIDEuMC45IC0gMjEvMDcvMjAyNgoKIyMjIEZpeGVkCgotICoqQ01TTVMgYWRtaW4gU1NPOioqIE9BdXRoIHN0YXJ0L2NhbGxiYWNrIGFuZCB0aGUgQ01TIGxvZ2luIGJyaWRnZSBleGlzdGVkIGluIDEuMC44LCBidXQgdGhlIGFkbWluIGxvZ2luIHBhZ2UgbmV2ZXIgaW52b2tlZCBgb2F1dGhfc3RhcnRgIHdpdGggYHJldHVybl90eXBlPWFkbWluYC4gQXV0aEh1YiBub3cgcmVnaXN0ZXJzIGBDb3JlOjpMb2dpbkF0dGVtcHRlZGAgYW5kIGluamVjdHMgcHJvdmlkZXIgYnV0dG9ucyB1bmRlciB0aGUgcGFzc3dvcmQgZm9ybSAob3B0aW9uYWwgYXV0by1yZWRpcmVjdCB0byB0aGUgSWRQKS4KLSAqKkluc3RhbGwgc2NoZW1hIEFVVE9fSU5DUkVNRU5UOioqIFByb3ZpZGVyIGFuZCByZWxhdGVkIGBpZGAgY29sdW1ucyBub3cgdXNlIGBJIEtFWSBBVVRPIE5PVE5VTExgLiBVcGdyYWRlIGZyb20gMS4wLjggYWx0ZXJzIGV4aXN0aW5nIHRhYmxlcyBzbyBpbnNlcnRzIHdvcmsgd2l0aG91dCBhIG1hbnVhbCBgQVVUT19JTkNSRU1FTlRgIGZpeC4KLSAqKkZyb250ZW5kIHBhcmFtczoqKiBSZW1vdmVkIHRoZSBlbXB0eSBgSW5pdGlhbGl6ZUZyb250ZW5kKClgIGBTZXRQYXJhbWV0ZXJUeXBlYCBsb29wLiBBY3Rpb25zIGFscmVhZHkgY2FzdCBhbmQgYWxsb3dsaXN0IE9BdXRoIHBhcmFtczsgTW9kdWxlQ2hlY2tlciByZWplY3RzIGxlZ2FjeSBgU2V0UGFyYW1ldGVyVHlwZWAgLyBgUmVzdHJpY3RVbmtub3duUGFyYW1zYC4KLSAqKm1hbXNfYWx0X2xvZ2luLnRwbDoqKiBDb3JyZWN0ZWQgaW52YWxpZCBgPC9tb3Rpb24+YCBjbG9zaW5nIHRhZyB0byBgPC9kaXY+YC4KCiMjIyBDaGFuZ2VkCgotIFNldHRpbmdzOiBBZG1pbiBTU08gcHJlc2VudGF0aW9uIChidXR0b25zIHZzIGF1dG8tcmVkaXJlY3QpIGFuZCBvcHRpb25hbCBkZWZhdWx0IHByb3ZpZGVyLgotIElkZW50aXR5IHByb3ZpZGVycyB0YWIgc2hvd3MgT0F1dGggY2FsbGJhY2sgVVJMIGFuZCBBZG1pbiBTU08gc3RhcnQgVVJMIHBlciBwcm92aWRlci4KLSBIZWxwIC8gdHJvdWJsZXNob290aW5nIGRvY3VtZW50cyBhZG1pbiBsb2dpbiBTU08gYnV0dG9ucyBvbiBgL2FkbWluL2xvZ2luLnBocGAuCgojIyAxLjAuOCAtIDAxLzA3LzIwMjYKCi0gRG9uYXRpb25zIHRhYjogRG9uYXRlIGJ1dHRvbiBub3cgbGlua3MgdG8gUGF5UGFsLk1lIChLaW1CUykuCi0gKipGb3JnZSAjMTI4Mzg6KiogUmVtb3ZlZCBoYXJkIGBHZXREZXBlbmRlbmNpZXMoKWAgb24gQ01TTVNFeHQgYW5kIE1BTVMgc28gY29weS1mb2xkZXIgdGVzdCBpbnN0YWxscyB3b3JrIHdpdGhvdXQgdGhlIE1vZHVsZSBNYW5hZ2VyIG1pc3NpbmctZGVwZW5kZW5jaWVzIHNjcmVlbi4gQ01TTVNFeHQgYW5kIE1BTVMgcmVtYWluIHJlY29tbWVuZGVkIGZvciBNQU1TIFNTTzsgQ29tcGF0aWJpbGl0eSB0YWIgc2hvd3MgaW5zdGFsbGVkL21pc3Npbmcgc3RhdHVzLiBNQU1TIGV2ZW50IGhhbmRsZXJzIHJlZ2lzdGVyIG9uIGluc3RhbGwgb25seSB3aGVuIHRob3NlIG1vZHVsZXMgYXJlIHByZXNlbnQuCi0gKipPQXV0aCBjbGllbnRzOioqIFJlZGlyZWN0IFVSSXMgdGV4dGFyZWEgbm8gbG9uZ2VyIHVzZXMgNjAgcm93cyB3aGVuIGVtcHR5ICh3YXMgfjk3MHB4IHRhbGwpOyBub3cgNSByb3dzIHdpdGggc2Vuc2libGUgd2lkdGguCi0gKipBdWRpdCBsb2c6KiogRml4ZWQgZW1wdHkgQXVkaXQgbG9nIHRhYiAoYGF1ZGl0LnRwbGAgZXhwZWN0ZWQgYCRyb3dzYCBidXQgUEhQIGFzc2lnbmVkIGBtYXNfYXV0aGh1Yl9yb3dzYCkuIEFkbWluIHNhdmVzIChzZXR0aW5ncywgcHJvdmlkZXJzLCBPQXV0aCBjbGllbnRzLCBNQU1TIHBvbGljeSwgc2Vzc2lvbi90b2tlbiByZXZva2UpIG5vdyB3cml0ZSBhdWRpdCBldmVudHMuCi0gKipBdWRpdCBsb2cgVUk6KiogUGFnaW5hdGlvbiAoMjUgcGVyIHBhZ2UpLCBnby10by1wYWdlLCBwZXItcm93IGRlbGV0ZSwgc2VsZWN0LWFsbCBvbiBwYWdlIHdpdGggYnVsayBkZWxldGUsIGFuZCBjbGVhci1hbGwgd2l0aCBjaGVja2JveCBwbHVzIGNvbmZpcm1hdGlvbiBkaWFsb2cuCi0gKipBdWRpdCBsb2cgVXNlciBjb2x1bW46KiogU2hvd3MgQ01TIG9yIE1BTVMgdXNlcm5hbWUgKHdpdGggc291cmNlIHRhZykgaW5zdGVhZCBvZiBudW1lcmljIElEIG9ubHkuCi0gKipBdWRpdCBsb2cgY2xlYXItYWxsOioqIENvbmZpcm1hdGlvbiBjaGVja2JveCBub3cgZW5hYmxlcyB0aGUgQ2xlYXIgYWxsIGxvZ3MgYnV0dG9uIGluIE9uZUVsZXZlbi9qUXVlcnkgVUkgKGRlbGVnYXRlZCBjaGFuZ2UgaGFuZGxlciwgZnJlc2ggYnV0dG9uIGxvb2t1cCwgcHJvcGVyIGBidXR0b24oJ2Rpc2FibGVkJylgIHN5bmMpLgoKIyMgMS4wLjcgLSAzMC8wNi8yMDI2CgojIyMgRml4ZWQKCi0gKipNb2R1bGUgTWFuYWdlciBBYm91dCwgQ2hhbmdlIGxvZyB0YWI6KiogYGFib3V0X2NoYW5nZWxvZ190YWIudHBsYCBub3cgdXNlcyBgbWFzX2NoYW5nZWxvZ19odG1sYCAod2FzIGBtYXNfYWhfY2hhbmdlbG9nX2h0bWxgLCBzbyB0aGUgdGFiIGFsd2F5cyBzaG93ZWQgdGhlIGZhbGxiYWNrIG1lc3NhZ2UpLgotICoqQ2hhbmdlbG9nIHNvdXJjZToqKiBgR2V0Q2hhbmdlTG9nKClgIGFuZCBidW5kbGVkIGBNYXNfTW9kdWxlX0RvY3M6OmNoYW5nZWxvZ0h0bWwoKWAgcmVhZCBgdG8tZG8vQ0hBTkdFTE9HLm1kYCB3aGVuIHJvb3QgYENIQU5HRUxPRy5tZGAgaXMgYWJzZW50LgotICoqSGVscC9BYm91dCB0YWIgdmFyaWFibGVzOioqIEV4dHJhIFNtYXJ0eSBhc3NpZ25zIChjaGFuZ2Vsb2csIE1BTVNSZWdpc3RyYXRpb24gZmxhZykgYXJlIHBhc3NlZCB0byBuZXN0ZWQgdGFiIGluY2x1ZGVzLgotICoqQWJvdXQgZW1haWwgZGlzcGxheToqKiBtYWlsdG8gbGlua3Mgbm8gbG9uZ2VyIHVzZSBgZXNjYXBlOid1cmwnYCAod2hpY2ggc2hvd2VkIGBAYCBhcyBgJTQwYCBpbiB0aGUgYWRtaW4gVUkpLgoKIyMgMS4wLjYgLSAzMC8wNi8yMDI2CgojIyMgRml4ZWQKCi0gKipGb3JnZSBpbnN0YWxsIGZhdGFsICgjMTI4MzcpOioqIEJ1bmRsZWQgTUFTIGFkbWluIFVJIHVuZGVyIGBsaWIvbWFzX2NvbW1vbi9gIHdpdGggYGxpYi9tYXNfY29tbW9uX2xvYWRlci5waHBgLiBGcmVzaCBpbnN0YWxscyBubyBsb25nZXIgcmVxdWlyZSBhIHNpYmxpbmcgYG1vZHVsZXMvTUFTX0NvbW1vbi9gIGZvbGRlci4KLSAqKlBIUCA4LjQgaW5zdGFsbCBub2lzZToqKiBSZW1vdmVkIGVhZ2VyIGB2ZW5kb3IvYXV0b2xvYWQucGhwYCBmcm9tIGBtYXNfYWhfbG9hZGVyLnBocGA7IENvbXBvc2VyIGxpYnJhcmllcyBsb2FkIG9ubHkgd2hlbiBTQU1MLCBXZWJBdXRobiwgb3IgSldUIGNvZGUgcGF0aHMgcnVuLgotICoqQWRtaW4gbGFuZ3VhZ2Ugc3RyaW5nczoqKiBgbGFuZy9lbl9VUy5waHBgIG5vdyBsb2FkcyBzaGFyZWQgTUFTIGRvY3MvYWRtaW4gZGVmYXVsdHMgdmlhIHRoZSBidW5kbGVkIGxvYWRlci4KCiMjIyBDaGFuZ2VkCgotIEhlbHAvQWJvdXQgZmFsbGJhY2sgdGFiIHRlbXBsYXRlcyBzaGlwIGFzIGB0ZW1wbGF0ZXMvbWFzX2NvbW1vbl8qLnRwbGAgaW5zaWRlIE1BU19BdXRoSHViIGZvciBzaXRlcyB3aXRob3V0IE1BU19Db21tb24gcmVnaXN0ZXJlZCBhcyBhIG1vZHVsZS4KLSBSRUFETUUgYW5kIEZvcmdlIGByZWFkbWUubWRgIGNsYXJpZnkgQ01TTVNFeHQvTUFNUyBkZXBlbmRlbmNpZXMgYW5kIGJ1bmRsZWQgYWRtaW4gVUkuCgojIyAxLjAuNSAtIDE5LzA1LzIwMjYKCiMjIyBDaGFuZ2VkCgotICoqSGVscCBhbmQgQWJvdXQ6KiogVGFiYmVkIGRvY3VtZW50YXRpb24gbWF0Y2hpbmcgTG9nV2F0Y2ggc3R5bGUgKGB0ZW1wbGF0ZXMvaGVscC50cGxgLCBgdGVtcGxhdGVzL2Fib3V0LnRwbGAsIGFuZCBwZXItdGFiIGluY2x1ZGVzKS4gYEdldEhlbHAoKWAgYW5kIGBHZXRBYm91dCgpYCByZW5kZXIgU21hcnR5IHRlbXBsYXRlcyBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxhbmcgc3RyaW5nLgotICoqQWRtaW4gYnJhbmRpbmc6KiogUmVmcmVzaGVkIGBpbWFnZXMvYmFubmVyLnBuZ2AgKDYwMHgxMjApLCBgaW1hZ2VzL2ljb24tMTkyLnBuZ2AsIGBpbWFnZXMvaWNvbi01MTIucG5nYCwgYW5kIGBpbWFnZXMvaWNvbi5naWZgICgzMngzMikgd2l0aCBpbmRpZ28gaWRlbnRpdHkgc3R5bGluZyBhbmQgYSBzaGllbGQva2V5IG1vdGlmLiBSZWdlbmVyYXRlIHZpYSBgVGVzdC9nZW5lcmF0ZV9icmFuZF9hc3NldHMucHlgLgotICoqQ0ROIGNhY2hlOioqIE1vZHVsZSBpbWFnZSBVUkxzIG5vdyBhcHBlbmQgYD92PWZpbGVtdGltZWAgdmlhIGBNYXNfQWRtaW5fVWk6OnZlcnNpb25lZEFzc2V0VXJsKClgIGFuZCBPbmVFbGV2ZW4gYWRtaW4gdGhlbWUgbW9kdWxlIGhlYWRlciBpY29uLCBzbyBDbG91ZGZsYXJlIG5vIGxvbmdlciBzZXJ2ZXMgc3RhbGUgRGlzcXVzIGNvcGllcyBjYWNoZWQgdW5kZXIgYC9tb2R1bGVzL01BU19BdXRoSHViL2ltYWdlcy9gLiBIYXJkLXJlZnJlc2ggYWRtaW4gb25jZSBhZnRlciB1cGdyYWRlIGlmIG5lZWRlZC4KCiMjIyBGaXhlZAoKLSBgd2ViYXV0aG5fbG9naW4udHBsYDogaW52YWxpZCBjbG9zaW5nIHRhZyBjb3JyZWN0ZWQgdG8gYSBwcm9wZXIgYGRpdmAgZW5kIHRhZy4KCiMjIDEuMC40IC0gMTkvMDUvMjAyNgoKIyMjIEZpeGVkCgotIENvcnJlY3QgYENyZWF0ZUxpbmsoKWAgLyBgbW9kdWxlQWN0aW9uVXJsKClgIGFyZ3VtZW50IG9yZGVyIChmaXhlcyBtb2Rmb3JtIGZvcmVhY2ggd2FybmluZ3MsIE9JREMgZGlzY292ZXJ5IHNob3dpbmcgIkFycmF5IiwgYW5kIGJyb2tlbiBmcm9udGVuZCBhY3Rpb24gVVJMcykuCi0gQWRtaW4gZXhwb3J0IGFuZCByZXZva2UgbGlua3MgYnVpbHQgaW4gUEhQIGluc3RlYWQgb2YgaW5jb3JyZWN0IFNtYXJ0eSBgQ3JlYXRlTGlua2AgY2FsbHMuCi0gRG9uYXRpb25zIHRhYjogYWRkZWQgYGRvbmF0aW9uc3RleHRgIGFuZCBgc3BvbnNvcnNgIGxhbmd1YWdlIHN0cmluZ3MuCgojIyMgQ2hhbmdlZAoKLSBSZXBsYWNlZCBEaXNxdXMtY29waWVkIGBpbWFnZXMvYmFubmVyLnBuZ2AgYW5kIGBpbWFnZXMvaWNvbi5naWZgIHdpdGggTUFTIEF1dGhIdWIgYnJhbmRpbmcgKGJsdWUgaWRlbnRpdHkgdGhlbWUpLgoKIyMgMS4wLjMgLSAxOS8wNS8yMDI2CgojIyMgRml4ZWQKCi0gQWRtaW4gZGVmYXVsdGFkbWluOiBgQ3JlYXRlRm9ybVN0YXJ0KClgIGFyZ3VtZW50IG9yZGVyIChgJHBhcmFtc2Agd2FzIHBhc3NlZCBhcyBgJGV4dHJhYCwgY2F1c2luZyBtb2Rmb3JtIHdhcm5pbmdzKS4KLSBgTWFzX0FoX0NvbmZpZzo6bW9kdWxlQWN0aW9uVXJsKClgIHRyZWF0cyBgR2V0RGVmYXVsdENvbnRlbnQoKWAgYXMgcGFnZSBJRCAoaW50KSwgbm90IGEgY29udGVudCBvYmplY3QgKGZhdGFsIG9uIE9BdXRoIGNsaWVudHMgdGFiKS4KLSBTZXQgYCRhY3Rpb25pZCA9ICRpZGAgZm9yIGluY2x1ZGVkIGFkbWluIHRhYiBzY3JpcHRzOyBPQXV0aCBjbGllbnRzIGZvcm0gdXNlcyBDTVNNUyBmb3JtIGhlbHBlcnMuCgojIyAxLjAuMiAtIDE5LzA1LzIwMjYKCiMjIyBGaXhlZAoKLSBgRG9FdmVudCgpYCBzaWduYXR1cmUgdXNlcyBgJiRwYXJhbXNgIHRvIG1hdGNoIGBDTVNNb2R1bGU6OkRvRXZlbnQoKWAgKE1vZHVsZSBNYW5hZ2VyIGZhdGFsIGVycm9yKS4KLSBJbnN0YWxsIHNjaGVtYSB1c2VzIGBpZCBJIEtFWSBOT1ROVUxMYCAoQ01TTVMgQURPREIgY29udmVudGlvbikuCi0gTUFNUyBjb25zdW1lciBjbGFzcyBsb2FkcyBvbmx5IGZyb20gYEdldE1BTVNBdXRoQ29uc3VtZXIoKWAgc28gbW9kdWxlIGxpc3QgZG9lcyBub3QgcmVxdWlyZSBNQU1TIGludGVyZmFjZSBhdCBib290c3RyYXAuCgojIyAxLjAuMSAtIDE5LzA1LzIwMjYKCiMjIyBGaXhlZAoKLSBSZW5hbWVkIHB1YmxpYyBzdGF0aWMgYGF1ZGl0KClgIHRvIGBsb2dBdWRpdCgpYCBzbyB0aGUgbW9kdWxlIGNsYXNzIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggZmluYWwgYENNU01vZHVsZTo6YXVkaXQoKWAgKGZhdGFsIGVycm9yIGluIE1vZHVsZSBNYW5hZ2VyKS4KCiMjIDEuMC4wIC0gMTkvMDUvMjAyNgoKIyMjIEFkZGVkCgotIE1BU19BdXRoSHViIENNU01TIG1vZHVsZTogT0F1dGgyL09JREMgY2xpZW50LCBPQXV0aDIvT0lEQyBhdXRob3JpemF0aW9uIHNlcnZlciwgU0FNTCAyLjAgU1AsIFdlYkF1dGhuIHBhc3NrZXlzLgotIENNU01TIGFkbWluIFNTTyBhbmQgTUFNUyBgR2V0TUFNU0F1dGhDb25zdW1lcigpYCBpbnRlZ3JhdGlvbiB3aXRob3V0IG1vZGlmeWluZyB0aGlyZC1wYXJ0eSBNQU1TIG1vZHVsZXMuCi0gSHlicmlkIHNlY3JldHMgdmlhIHNpdGUgYGNvbmZpZy5waHBgIGBtYXNfYXV0aGh1YmAgYmxvY2sgYW5kIGVuY3J5cHRlZCBtb2R1bGUgcHJlZmVyZW5jZXMuCi0gQXVkaXQgbG9nLCBzZXNzaW9uIGFuZCB0b2tlbiBtYW5hZ2VtZW50LCB1c2VyIGlkZW50aXR5IGxpbmtzIChDTVMgKyBNQU1TKS4KLSBNQU1TUmVnaXN0cmF0aW9uIGhvb2sgbGlzdGVuZXJzIChiZWZvcmVOZXdVc2VyLCBvbk5ld1VzZXIsIG9uVXNlclJlZ2lzdGVyZWQpIGZyb20gQXV0aEh1YiBvbmx5LgoKIyMjIE9wZXJhdG9yIG5vdGVzCgotIFNldCBNQU1TIFByZWZlcmVuY2VzLCBBdXRoZW50aWNhdGlvbiBNb2R1bGUsIHRvIGBNQVNfQXV0aEh1YmAgZm9yIGFsdCBsb2dpbiBvbiBNQU1TIGZvcm1zLgotIEFkZCBgbWFzX2F1dGhodWJgIGVuY3J5cHRpb24gYW5kIHByb3ZpZGVyIHNlY3JldHMgdG8gYGNvbmZpZy5waHBgIGJlZm9yZSBwcm9kdWN0aW9uIHVzZS4KLSBSdW4gYGNvbXBvc2VyIGluc3RhbGxgIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGZvciBTQU1MIGFuZCBKV1QgbGlicmFyaWVzLgo=]]></data>
	</file>
	<file>
	  <filename>/to-do/config.mas_authhub.example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEV4YW1wbGUgc25pcHBldCBmb3Igc2l0ZSBjb25maWcucGhwIChkbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkpLgogKi8KcmV0dXJuIGFycmF5KAogICAgJ21hc19hdXRoaHViJyA9PiBhcnJheSgKICAgICAgICAnZW5jcnlwdGlvbl9rZXknID0+ICdyZXBsYWNlLXdpdGgtMzItYnl0ZS1yYW5kb20tc2VjcmV0JywKICAgICAgICAnc2lnbmluZ19rZXknID0+ICdyZXBsYWNlLXdpdGgtand0LWhzMjU2LXNlY3JldCcsCiAgICAgICAgJ3Byb3ZpZGVycycgPT4gYXJyYXkoCiAgICAgICAgICAgICdhenVyZV9hZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnY2xpZW50X3NlY3JldCcgPT4gJ2Zyb20tYXp1cmUtcG9ydGFsJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgKSwKKTsK]]></data>
	</file>
	<file>
	  <filename>/to-do/MAMS-1.1.1-NOTES.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBNQU1TIDEuMS4xIChwYXRjaGVkKSBub3RlcwoKRGF0ZTogMjEvMDcvMjAyNgoKIyMgV2h5IHRoaXMgYnVpbGQKCk9mZmljaWFsICoqTUFNUyAxLjEuMCoqIGBfX2NhbGxgIGZvcndhcmRzIGluYWNjZXNzaWJsZS91bmtub3duIG1ldGhvZHMgdG8gYE1BTVNNYW5pcHVsYXRvcmAuIENNU01TRXh0IDEuNS54IGNhbGxzIHByb3RlY3RlZCBgWFRNb2R1bGU6OmdldF9hY3Rpb25fbmFtZSgpYCBmcm9tIG91dHNpZGUgdGhlIGNsYXNzLCB3aGljaCB0cmlnZ2VycyBgX19jYWxsYCBhbmQgcmFpc2VzOgoKYE1ldGhvZE5vRm91bmRFeGNlcHRpb246IG1ldGhvZCBnZXRfYWN0aW9uX25hbWUgbm90IGZvdW5kIGluIE1BTVNNYW5pcHVsYXRvciBvYmplY3RgCgpUaGlzICoqMS4xLjEqKiBidWlsZCBjaGVja3MgYG1ldGhvZF9leGlzdHMoJHRoaXMsICRuYW1lKWAgZmlyc3QgYW5kIGludm9rZXMgdGhlIG1vZHVsZS9wYXJlbnQgbWV0aG9kIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIHRoZSBtYW5pcHVsYXRvci4gSXQgYWxzbyByZWdpc3RlcnMgdGhlICoqbXkgaGlzdG9yeSBmb3JtKiogdGVtcGxhdGUgdHlwZSBvbiB1cGdyYWRlIGZyb20gMS4xLjAuCgojIyBSZWNvbW1lbmRlZCBwYWlyaW5nCgotIENNU01TRXh0ICoqMS41LngqKiAobm8gZm9yayByZXF1aXJlZCBmb3IgdGhpcyBlcnJvcikKLSBNQU1TICoqMS4xLjEqKiAodGhpcyBwYWNrYWdlKSB1bnRpbCBKbyBNb3JnIG1lcmdlcyB0aGUgYF9fY2FsbGAgZml4IHVwc3RyZWFtCgojIyBJbnN0YWxsCgoxLiBCYWNrIHVwIHRoZSBzaXRlIGFuZCBkYXRhYmFzZS4KMi4gVXBsb2FkL3JlcGxhY2UgYG1vZHVsZXMvTUFNU2Agd2l0aCB0aGlzIHBhY2thZ2UgKG9yIGluc3RhbGwgdmlhIE1vZHVsZSBNYW5hZ2VyIGlmIHlvdSB1c2UgWE1MKS4KMy4gSW4gRXh0ZW5zaW9ucywgcnVuICoqVXBncmFkZSoqIG9uIE1BTVMgKEFsbG93QXV0b1VwZ3JhZGUgaXMgZmFsc2U7IGEgbWFudWFsIHVwZ3JhZGUgaXMgcmVxdWlyZWQgd2hlbiB0aGUgZmlsZSB2ZXJzaW9uIGRpZmZlcnMgZnJvbSBgY21zX21vZHVsZXMudmVyc2lvbmApLgo0LiBDbGVhciBDTVNNUy9TbWFydHkgY2FjaGVzLgoKIyMgVXBzdHJlYW0KClByZWZlciB0aGUgb2ZmaWNpYWwgRm9yZ2UgTUFNUyByZWxlYXNlIG9uY2UgaXQgaW5jbHVkZXMgdGhlIGBfX2NhbGxgIGZpeC4gQ29udGFjdCBKbyBNb3JnIC8gQ01TTVMgRm9yZ2UgZm9yIGluY29ycG9yYXRpb24uIFRoaXMgemlwIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgcGFja2FnZSBmb3Igc2l0ZXMgdGhhdCBuZWVkIENNU01TRXh0ICsgTUFNUyB0b2dldGhlciB0b2RheS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgppZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDYwMCkgewogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOwogICAgfQogICAgJGVyciA9ICdDb21wb3NlciAyLjMuMCBkcm9wcGVkIHN1cHBvcnQgZm9yIGF1dG9sb2FkaW5nIG9uIFBIUCA8NS42IGFuZCB5b3UgYXJlIHJ1bm5pbmcgJy5QSFBfVkVSU0lPTi4nLCBwbGVhc2UgdXBncmFkZSBQSFAgb3IgdXNlIENvbXBvc2VyIDIuMiBMVFMgdmlhICJjb21wb3NlciBzZWxmLXVwZGF0ZSAtLTIuMiIuIEFib3J0aW5nLicuUEhQX0VPTDsKICAgIGlmICghaW5pX2dldCgnZGlzcGxheV9lcnJvcnMnKSkgewogICAgICAgIGlmIChQSFBfU0FQSSA9PT0gJ2NsaScgfHwgUEhQX1NBUEkgPT09ICdwaHBkYmcnKSB7CiAgICAgICAgICAgIGZ3cml0ZShTVERFUlIsICRlcnIpOwogICAgICAgIH0gZWxzZWlmICghaGVhZGVyc19zZW50KCkpIHsKICAgICAgICAgICAgZWNobyAkZXJyOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCRlcnIpOwp9CgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXIvYXV0b2xvYWRfcmVhbC5waHAnOwoKcmV0dXJuIENvbXBvc2VyQXV0b2xvYWRlckluaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6Z2V0TG9hZGVyKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogImJlYmVybGVpL2Fzc2VydCIsCiAgImRlc2NyaXB0aW9uIjogIlRoaW4gYXNzZXJ0aW9uIGxpYnJhcnkgZm9yIGlucHV0IHZhbGlkYXRpb24gaW4gYnVzaW5lc3MgbW9kZWxzLiIsCiAgImF1dGhvcnMiOiBbCiAgICB7CiAgICAgICJuYW1lIjogIkJlbmphbWluIEViZXJsZWkiLAogICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICJyb2xlIjogIkxlYWQgRGV2ZWxvcGVyIgogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiUmljaGFyZCBRdWFkbGluZyIsCiAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgInJvbGUiOiAiQ29sbGFib3JhdG9yIgogICAgfQogIF0sCiAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKICAia2V5d29yZHMiOiBbCiAgICAiYXNzZXJ0IiwKICAgICJhc3NlcnRpb24iLAogICAgInZhbGlkYXRpb24iCiAgXSwKICAiY29uZmlnIjogewogICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgfSwKICAicmVxdWlyZSI6IHsKICAgICJwaHAiOiAiXjcuMSB8fCBeOC4wIiwKICAgICJleHQtc2ltcGxleG1sIjogIioiLAogICAgImV4dC1tYnN0cmluZyI6ICIqIiwKICAgICJleHQtY3R5cGUiOiAiKiIsCiAgICAiZXh0LWpzb24iOiAiKiIKICB9LAogICJyZXF1aXJlLWRldiI6IHsKICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIioiLAogICAgInBocHN0YW4vcGhwc3RhbiI6ICIqIiwKICAgICJwaHB1bml0L3BocHVuaXQiOiAiPj02LjAuMCIsCiAgICAieW9hc3QvcGhwdW5pdC1wb2x5ZmlsbHMiOiAiXjAuMS4wIgogIH0sCiAgImF1dG9sb2FkIjogewogICAgInBzci00IjogewogICAgICAiQXNzZXJ0XFwiOiAibGliL0Fzc2VydCIKICAgIH0sCiAgICAiZmlsZXMiOiBbCiAgICAgICJsaWIvQXNzZXJ0L2Z1bmN0aW9ucy5waHAiCiAgICBdCiAgfSwKICAiYXV0b2xvYWQtZGV2IjogewogICAgInBzci00IjogewogICAgICAiQXNzZXJ0XFxUZXN0c1xcIjogInRlc3RzL0Fzc2VydC9UZXN0cyIKICAgIH0sCiAgICAiZmlsZXMiOiBbCiAgICAgICJ0ZXN0cy9Bc3NlcnQvVGVzdHMvRml4dHVyZXMvZnVuY3Rpb25zLnBocCIKICAgIF0KICB9LAogICJzY3JpcHRzIjogewogICAgImFzc2VydDpnZW5lcmF0ZS1kb2NzIjogInBocCBiaW4vZ2VuZXJhdGVfbWV0aG9kX2RvY3MucGhwIiwKICAgICJhc3NlcnQ6Y3MtbGludCI6ICJwaHAtY3MtZml4ZXIgZml4IC0tZGlmZiAtdnZ2IC0tZHJ5LXJ1biIsCiAgICAiYXNzZXJ0OmNzLWZpeCI6ICJwaHAtY3MtZml4ZXIgZml4IC4gLXZ2diB8fCB0cnVlIiwKICAgICJhc3NlcnQ6c2EtY29kZSI6ICJ2ZW5kb3IvYmluL3BocHN0YW4gYW5hbHlzZSAtLWNvbmZpZ3VyYXRpb249cGhwc3Rhbi1jb2RlLm5lb24gLS1uby1wcm9ncmVzcyAtLWFuc2kgLWwgNyBiaW4gbGliIiwKICAgICJhc3NlcnQ6c2EtdGVzdHMiOiAidmVuZG9yL2Jpbi9waHBzdGFuIGFuYWx5c2UgLS1jb25maWd1cmF0aW9uPXBocHN0YW4tdGVzdHMubmVvbiAtLW5vLXByb2dyZXNzIC0tYW5zaSAtbCA3IHRlc3RzIgogIH0sCiAgInN1Z2dlc3QiOiB7CiAgICAiZXh0LWludGwiOiAiTmVlZGVkIHRvIGFsbG93IEFzc2VydGlvbjo6Y291bnQoKSwgQXNzZXJ0aW9uOjppc0NvdW50YWJsZSgpLCBBc3NlcnRpb246Om1pbkNvdW50KCksIGFuZCBBc3NlcnRpb246Om1heENvdW50KCkgdG8gb3BlcmF0ZSBvbiBSZXNvdXJjZUJ1bmRsZXMiCiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/Assert.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKLyoqCiAqIEFzc2VydGlvbkNoYWluIGZhY3RvcnkuCiAqLwphYnN0cmFjdCBjbGFzcyBBc3NlcnQKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRsYXp5QXNzZXJ0aW9uRXhjZXB0aW9uQ2xhc3MgPSBMYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzczsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGFzc2VydGlvbkNsYXNzID0gQXNzZXJ0aW9uOjpjbGFzczsKCiAgICAvKioKICAgICAqIFN0YXJ0IHZhbGlkYXRpb24gb24gYSB2YWx1ZSwgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogICAgICoKICAgICAqIFRoZSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHN0YXJ0cyBhbiBhc3NlcnRpb24gY2hhaW4KICAgICAqIHRoYXQgaXMgaGFwcGVuaW5nIG9uIHRoZSBwYXNzZWQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKgogICAgICogIEFzc2VydDo6dGhhdCgkdmFsdWUpLT5ub3RFbXB0eSgpLT5pbnRlZ2VyKCk7CiAgICAgKiAgQXNzZXJ0Ojp0aGF0KCR2YWx1ZSktPm51bGxPcigpLT5zdHJpbmcoKS0+c3RhcnRzV2l0aCgiRm9vIik7CiAgICAgKgogICAgICogVGhlIGFzc2VydGlvbiBjaGFpbiBjYW4gYmUgc3RhdGVmdWwsIHRoYXQgbWVhbnMgYmUgY2FyZWZ1bCB3aGVuIHlvdSByZXVzZQogICAgICogaXQuIFlvdSBzaG91bGQgbmV2ZXIgcGFzcyBhcm91bmQgdGhlIGNoYWluLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoYXQoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgJGFzc2VydGlvbkNoYWluID0gbmV3IEFzc2VydGlvbkNoYWluKCR2YWx1ZSwgJGRlZmF1bHRNZXNzYWdlLCAkZGVmYXVsdFByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiAkYXNzZXJ0aW9uQ2hhaW4tPnNldEFzc2VydGlvbkNsYXNzTmFtZShzdGF0aWM6OiRhc3NlcnRpb25DbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCB2YWxpZGF0aW9uIG9uIGEgc2V0IG9mIHZhbHVlcywgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWVzCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJGRlZmF1bHRNZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGhhdEFsbCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6dGhhdCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKS0+YWxsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCB2YWxpZGF0aW9uIGFuZCBhbGxvdyBOVUxMLCByZXR1cm5zIHtAbGluayBBc3NlcnRpb25DaGFpbn0uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6dGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSwgJGRlZmF1bHRQcm9wZXJ0eVBhdGgpLT5udWxsT3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIGxhenkgYXNzZXJ0aW9uIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsYXp5KCk6IExhenlBc3NlcnRpb24KICAgIHsKICAgICAgICAkbGF6eUFzc2VydGlvbiA9IG5ldyBMYXp5QXNzZXJ0aW9uKCk7CgogICAgICAgIHJldHVybiAkbGF6eUFzc2VydGlvbgogICAgICAgICAgICAtPnNldEFzc2VydENsYXNzKFxnZXRfY2FsbGVkX2NsYXNzKCkpCiAgICAgICAgICAgIC0+c2V0RXhjZXB0aW9uQ2xhc3Moc3RhdGljOjokbGF6eUFzc2VydGlvbkV4Y2VwdGlvbkNsYXNzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/Assertion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIEFycmF5QWNjZXNzOwp1c2UgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbjsKdXNlIENvdW50YWJsZTsKdXNlIERhdGVUaW1lOwp1c2UgUmVmbGVjdGlvbkNsYXNzOwp1c2UgUmVmbGVjdGlvbkV4Y2VwdGlvbjsKdXNlIFJlc291cmNlQnVuZGxlOwp1c2UgU2ltcGxlWE1MRWxlbWVudDsKdXNlIFRocm93YWJsZTsKdXNlIFRyYXZlcnNhYmxlOwoKLyoqCiAqIEFzc2VydCBsaWJyYXJ5LgogKgogKiBAYXV0aG9yIEJlbmphbWluIEViZXJsZWkgPGtvbnRha3RAYmViZXJsZWkuZGU+CiAqCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQWxudW0obWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYWxwaGFudW1lcmljIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJhc2U2NChzdHJpbmdbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGJhc2U2NCBzdHJpbmcgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQmV0d2VlbihtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJGxvd2VyTGltaXQsIG1peGVkICR1cHBlckxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW4gdXBwZXIgbGltaXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQmV0d2VlbkV4Y2x1c2l2ZShtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJGxvd2VyTGltaXQsIG1peGVkICR1cHBlckxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gYW4gdXBwZXIgbGltaXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQmV0d2Vlbkxlbmd0aChtaXhlZFtdICR2YWx1ZSwgaW50ICRtaW5MZW5ndGgsIGludCAkbWF4TGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBsZW5ndGggaXMgYmV0d2VlbiBtaW4gYW5kIG1heCBsZW5ndGhzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEJvb2xlYW4obWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgcGhwIGJvb2xlYW4gZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQ2hvaWNlKG1peGVkW10gJHZhbHVlLCBhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbENob2ljZXNOb3RFbXB0eShhcnJheVtdICR2YWx1ZXMsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlcyBhcnJheSBoYXMgZXZlcnkgY2hvaWNlIGFzIGtleSBhbmQgdGhhdCB0aGlzIGNob2ljZSBoYXMgY29udGVudCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxDbGFzc0V4aXN0cyhtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbENvbnRhaW5zKG1peGVkW10gJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsQ291bnQoYXJyYXlbXXxDb3VudGFibGVbXXxSZXNvdXJjZUJ1bmRsZVtdfFNpbXBsZVhNTEVsZW1lbnRbXSAkY291bnRhYmxlLCBpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudCBvZiBjb3VudGFibGUgaXMgZXF1YWwgdG8gY291bnQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRGF0ZShzdHJpbmdbXSAkdmFsdWUsIHN0cmluZyAkZm9ybWF0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGRhdGUgaXMgdmFsaWQgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBmb3JtYXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRGVmaW5lZChtaXhlZFtdICRjb25zdGFudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRGlnaXQobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgVmFsaWRhdGVzIGlmIGFuIGludGVnZXIgb3IgaW50ZWdlcmlzaCBpcyBhIGRpZ2l0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbERpcmVjdG9yeShzdHJpbmdbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBkaXJlY3RvcnkgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEUxNjQoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBFMTY0IFBob25lIE51bWJlciBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxFbWFpbChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBlbWFpbCBhZGRyZXNzICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0VNQUlMKSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxFbmRzV2l0aChtaXhlZFtdICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBlbmRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxFcShtaXhlZFtdICR2YWx1ZSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBlcXVhbCAodXNpbmcgPT0pIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEVxQXJyYXlTdWJzZXQobWl4ZWRbXSAkdmFsdWUsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGFycmF5IGNvbnRhaW5zIHRoZSBzdWJzZXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRXh0ZW5zaW9uTG9hZGVkKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRXh0ZW5zaW9uVmVyc2lvbihzdHJpbmdbXSAkZXh0ZW5zaW9uLCBzdHJpbmcgJG9wZXJhdG9yLCBtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIGFuZCBhIHNwZWNpZmljIHZlcnNpb24gaXMgaW5zdGFsbGVkIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEZhbHNlKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIEZhbHNlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEZpbGUoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZmlsZSBleGlzdHMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsRmxvYXQobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgZmxvYXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsR3JlYXRlck9yRXF1YWxUaGFuKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEdyZWF0ZXJUaGFuKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGdpdmVuIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEltcGxlbWVudHNJbnRlcmZhY2UobWl4ZWRbXSAkY2xhc3MsIHN0cmluZyAkaW50ZXJmYWNlTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEluQXJyYXkobWl4ZWRbXSAkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIGFycmF5IG9mIGNob2ljZXMuIFRoaXMgaXMgYW4gYWxpYXMgb2YgQXNzZXJ0aW9uOjpjaG9pY2UoKSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJbnRlZ2VyKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGludGVnZXIgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSW50ZWdlcmlzaChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyJ2lzaCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJbnRlcmZhY2VFeGlzdHMobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGludGVyZmFjZSBleGlzdHMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXAoc3RyaW5nW10gJHZhbHVlLCBpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElwdjQoc3RyaW5nW10gJHZhbHVlLCBpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgYWRkcmVzcyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJcHY2KHN0cmluZ1tdICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY2IGFkZHJlc3MgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNBcnJheShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc0FycmF5QWNjZXNzaWJsZShtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhbiBhcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc0NhbGxhYmxlKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgY2FsbGFibGUgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsSXNDb3VudGFibGUoYXJyYXlbXXxDb3VudGFibGVbXXxSZXNvdXJjZUJ1bmRsZVtdfFNpbXBsZVhNTEVsZW1lbnRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgY291bnRhYmxlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElzSW5zdGFuY2VPZihtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc0pzb25TdHJpbmcobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGpzb24gc3RyaW5nIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElzT2JqZWN0KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYW4gb2JqZWN0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbElzUmVzb3VyY2UobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSByZXNvdXJjZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxJc1RyYXZlcnNhYmxlKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIGEgdHJhdmVyc2FibGUgb2JqZWN0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbEtleUV4aXN0cyhtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsS2V5SXNzZXQobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IHVzaW5nIGlzc2V0KCkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsS2V5Tm90RXhpc3RzKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGRvZXMgbm90IGV4aXN0IGluIGFuIGFycmF5IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbExlbmd0aChtaXhlZFtdICR2YWx1ZSwgaW50ICRsZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGhhcyBhIGdpdmVuIGxlbmd0aCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxMZXNzT3JFcXVhbFRoYW4obWl4ZWRbXSAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTGVzc1RoYW4obWl4ZWRbXSAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gZ2l2ZW4gbGltaXQgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWF4KG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBudW1iZXIgaXMgc21hbGxlciBhcyBhIGdpdmVuIGxpbWl0IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE1heENvdW50KGFycmF5W118Q291bnRhYmxlW118UmVzb3VyY2VCdW5kbGVbXXxTaW1wbGVYTUxFbGVtZW50W10gJGNvdW50YWJsZSwgaW50ICRjb3VudCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY291bnRhYmxlIGhhdmUgYXQgbW9zdCAkY291bnQgZWxlbWVudHMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWF4TGVuZ3RoKG1peGVkW10gJHZhbHVlLCBpbnQgJG1heExlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgdmFsdWUgaXMgbm90IGxvbmdlciB0aGFuICRtYXhMZW5ndGggY2hhcnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWV0aG9kRXhpc3RzKHN0cmluZ1tdICR2YWx1ZSwgbWl4ZWQgJG9iamVjdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIG5hbWVkIG1ldGhvZCBpcyBkZWZpbmVkIGluIHRoZSBwcm92aWRlZCBvYmplY3QgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTWluKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbWluVmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgYSBnaXZlbiBsaW1pdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxNaW5Db3VudChhcnJheVtdfENvdW50YWJsZVtdfFJlc291cmNlQnVuZGxlW118U2ltcGxlWE1MRWxlbWVudFtdICRjb3VudGFibGUsIGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IGxlYXN0ICRjb3VudCBlbGVtZW50cyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxNaW5MZW5ndGgobWl4ZWRbXSAkdmFsdWUsIGludCAkbWluTGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IGEgc3RyaW5nIGlzIGF0IGxlYXN0ICRtaW5MZW5ndGggY2hhcnMgbG9uZyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb0NvbnRlbnQobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgZW1wdHkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90QmxhbmsobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGJsYW5rIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdENvbnRhaW5zKG1peGVkW10gJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90RW1wdHkobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGVtcHR5IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdEVtcHR5S2V5KG1peGVkW10gJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBlbXB0eSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3RFcShtaXhlZFtdICR2YWx1ZTEsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IGVxdWFsICh1c2luZyA9PSkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90SW5BcnJheShtaXhlZFtdICR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGluIGFycmF5IG9mIGNob2ljZXMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTm90SXNJbnN0YW5jZU9mKG1peGVkW10gJHZhbHVlLCBzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3ROdWxsKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBudWxsIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE5vdFJlZ2V4KG1peGVkW10gJHZhbHVlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYSByZWdleCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxOb3RTYW1lKG1peGVkW10gJHZhbHVlMSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBub3QgdGhlIHNhbWUgKHVzaW5nID09PSkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsTnVsbChtaXhlZFtdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBudWxsIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbE51bWVyaWMobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVtZXJpYyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxPYmplY3RPckNsYXNzKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIG9yIGEgY2xhc3MgdGhhdCBleGlzdHMgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsUGhwVmVyc2lvbihzdHJpbmdbXSAkb3BlcmF0b3IsIG1peGVkICR2ZXJzaW9uLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBvbiBQSFAgdmVyc2lvbiBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxQcm9wZXJ0aWVzRXhpc3QobWl4ZWRbXSAkdmFsdWUsIGFycmF5ICRwcm9wZXJ0aWVzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0aWVzIGFsbCBleGlzdCBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxQcm9wZXJ0eUV4aXN0cyhtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRwcm9wZXJ0eSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydHkgZXhpc3RzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFJhbmdlKG1peGVkW10gJHZhbHVlLCBtaXhlZCAkbWluVmFsdWUsIG1peGVkICRtYXhWYWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiByYW5nZSBvZiBudW1iZXJzIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFJlYWRhYmxlKHN0cmluZ1tdICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHJlYWRhYmxlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFJlZ2V4KG1peGVkW10gJHZhbHVlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4IGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFNhbWUobWl4ZWRbXSAkdmFsdWUsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgKHVzaW5nID09PSkgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsU2F0aXNmeShtaXhlZFtdICR2YWx1ZSwgY2FsbGFibGUgJGNhbGxiYWNrLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyB2YWxpZCBhY2NvcmRpbmcgdG8gYSBjYWxsYmFjayBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxTY2FsYXIobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBQSFAgc2NhbGFyIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFN0YXJ0c1dpdGgobWl4ZWRbXSAkc3RyaW5nLCBzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgc3RhcnRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxTdHJpbmcobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsU3ViY2xhc3NPZihtaXhlZFtdICR2YWx1ZSwgc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgc3ViY2xhc3Mgb2YgZ2l2ZW4gY2xhc3MtbmFtZSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxUcnVlKG1peGVkW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIFRydWUgZm9yIGFsbCB2YWx1ZXMuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgYWxsVW5pcXVlVmFsdWVzKGFycmF5W10gJHZhbHVlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZXMgaW4gYXJyYXkgYXJlIHVuaXF1ZSAodXNpbmcgc3RyaWN0IGVxdWFsaXR5KSBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxVcmwobWl4ZWRbXSAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gVVJMIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFV1aWQoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIGFsbFZlcnNpb24oc3RyaW5nW10gJHZlcnNpb24xLCBzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJHZlcnNpb24yLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBjb21wYXJpc29uIG9mIHR3byB2ZXJzaW9ucyBmb3IgYWxsIHZhbHVlcy4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBhbGxXcml0ZWFibGUoc3RyaW5nW10gJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgd3JpdGVhYmxlIGZvciBhbGwgdmFsdWVzLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckFsbnVtKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFscGhhbnVtZXJpYyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckJhc2U2NChzdHJpbmd8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGJhc2U2NCBzdHJpbmcgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JCZXR3ZWVuKG1peGVkfG51bGwgJHZhbHVlLCBtaXhlZCAkbG93ZXJMaW1pdCwgbWl4ZWQgJHVwcGVyTGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gYSBsb3dlciBsaW1pdCwgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbiB1cHBlciBsaW1pdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckJldHdlZW5FeGNsdXNpdmUobWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIGFuIHVwcGVyIGxpbWl0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQmV0d2Vlbkxlbmd0aChtaXhlZHxudWxsICR2YWx1ZSwgaW50ICRtaW5MZW5ndGgsIGludCAkbWF4TGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBsZW5ndGggaXMgYmV0d2VlbiBtaW4gYW5kIG1heCBsZW5ndGhzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQm9vbGVhbihtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBwaHAgYm9vbGVhbiBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckNob2ljZShtaXhlZHxudWxsICR2YWx1ZSwgYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckNob2ljZXNOb3RFbXB0eShhcnJheXxudWxsICR2YWx1ZXMsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlcyBhcnJheSBoYXMgZXZlcnkgY2hvaWNlIGFzIGtleSBhbmQgdGhhdCB0aGlzIGNob2ljZSBoYXMgY29udGVudCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckNsYXNzRXhpc3RzKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjbGFzcyBleGlzdHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JDb250YWlucyhtaXhlZHxudWxsICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yQ291bnQoYXJyYXl8Q291bnRhYmxlfFJlc291cmNlQnVuZGxlfFNpbXBsZVhNTEVsZW1lbnR8bnVsbCAkY291bnRhYmxlLCBpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudCBvZiBjb3VudGFibGUgaXMgZXF1YWwgdG8gY291bnQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JEYXRlKHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nICRmb3JtYXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZGF0ZSBpcyB2YWxpZCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGZvcm1hdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckRlZmluZWQobWl4ZWR8bnVsbCAkY29uc3RhbnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBjb25zdGFudCBpcyBkZWZpbmVkIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRGlnaXQobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgVmFsaWRhdGVzIGlmIGFuIGludGVnZXIgb3IgaW50ZWdlcmlzaCBpcyBhIGRpZ2l0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRGlyZWN0b3J5KHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGRpcmVjdG9yeSBleGlzdHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JFMTY0KHN0cmluZ3xudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JFbWFpbChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBlbWFpbCBhZGRyZXNzICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0VNQUlMKSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckVuZHNXaXRoKG1peGVkfG51bGwgJHN0cmluZywgc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGVuZHMgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRXEobWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgZXF1YWwgKHVzaW5nID09KSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckVxQXJyYXlTdWJzZXQobWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGFycmF5IGNvbnRhaW5zIHRoZSBzdWJzZXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JFeHRlbnNpb25Mb2FkZWQobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckV4dGVuc2lvblZlcnNpb24oc3RyaW5nfG51bGwgJGV4dGVuc2lvbiwgc3RyaW5nICRvcGVyYXRvciwgbWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZCBhbmQgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIGluc3RhbGxlZCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckZhbHNlKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIEZhbHNlIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yRmlsZShzdHJpbmd8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBmaWxlIGV4aXN0cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckZsb2F0KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGZsb2F0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yR3JlYXRlck9yRXF1YWxUaGFuKG1peGVkfG51bGwgJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yR3JlYXRlclRoYW4obWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJbXBsZW1lbnRzSW50ZXJmYWNlKG1peGVkfG51bGwgJGNsYXNzLCBzdHJpbmcgJGludGVyZmFjZU5hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckluQXJyYXkobWl4ZWR8bnVsbCAkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIGFycmF5IG9mIGNob2ljZXMuIFRoaXMgaXMgYW4gYWxpYXMgb2YgQXNzZXJ0aW9uOjpjaG9pY2UoKSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckludGVnZXIobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlciBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPckludGVnZXJpc2gobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlcidpc2ggb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJbnRlcmZhY2VFeGlzdHMobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGludGVyZmFjZSBleGlzdHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJcChzdHJpbmd8bnVsbCAkdmFsdWUsIGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3Mgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJcHY0KHN0cmluZ3xudWxsICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IGFkZHJlc3Mgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJcHY2KHN0cmluZ3xudWxsICR2YWx1ZSwgaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY2IGFkZHJlc3Mgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0FycmF5KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9ySXNBcnJheUFjY2Vzc2libGUobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkgb3IgYW4gYXJyYXktYWNjZXNzaWJsZSBvYmplY3Qgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0NhbGxhYmxlKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgY2FsbGFibGUgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0NvdW50YWJsZShhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudHxudWxsICR2YWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBjb3VudGFibGUgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0luc3RhbmNlT2YobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzLW5hbWUgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc0pzb25TdHJpbmcobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGpzb24gc3RyaW5nIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9ySXNPYmplY3QobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc1Jlc291cmNlKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcmVzb3VyY2Ugb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JJc1RyYXZlcnNhYmxlKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIGEgdHJhdmVyc2FibGUgb2JqZWN0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yS2V5RXhpc3RzKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPcktleUlzc2V0KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCB1c2luZyBpc3NldCgpIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yS2V5Tm90RXhpc3RzKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGRvZXMgbm90IGV4aXN0IGluIGFuIGFycmF5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTGVuZ3RoKG1peGVkfG51bGwgJHZhbHVlLCBpbnQgJGxlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgaGFzIGEgZ2l2ZW4gbGVuZ3RoIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTGVzc09yRXF1YWxUaGFuKG1peGVkfG51bGwgJHZhbHVlLCBtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTGVzc1RoYW4obWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JNYXgobWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRtYXhWYWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIG51bWJlciBpcyBzbWFsbGVyIGFzIGEgZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JNYXhDb3VudChhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudHxudWxsICRjb3VudGFibGUsIGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IG1vc3QgJGNvdW50IGVsZW1lbnRzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTWF4TGVuZ3RoKG1peGVkfG51bGwgJHZhbHVlLCBpbnQgJG1heExlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgdmFsdWUgaXMgbm90IGxvbmdlciB0aGFuICRtYXhMZW5ndGggY2hhcnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JNZXRob2RFeGlzdHMoc3RyaW5nfG51bGwgJHZhbHVlLCBtaXhlZCAkb2JqZWN0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgbmFtZWQgbWV0aG9kIGlzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkIG9iamVjdCBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1pbihtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJG1pblZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGEgZ2l2ZW4gbGltaXQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JNaW5Db3VudChhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudHxudWxsICRjb3VudGFibGUsIGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IGxlYXN0ICRjb3VudCBlbGVtZW50cyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck1pbkxlbmd0aChtaXhlZHxudWxsICR2YWx1ZSwgaW50ICRtaW5MZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgYSBzdHJpbmcgaXMgYXQgbGVhc3QgJG1pbkxlbmd0aCBjaGFycyBsb25nIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm9Db250ZW50KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGVtcHR5IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90QmxhbmsobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGJsYW5rIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90Q29udGFpbnMobWl4ZWR8bnVsbCAkc3RyaW5nLCBzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZG9lcyBub3QgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycyBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdEVtcHR5KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBlbXB0eSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdEVtcHR5S2V5KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBlbXB0eSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdEVxKG1peGVkfG51bGwgJHZhbHVlMSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBub3QgZXF1YWwgKHVzaW5nID09KSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdEluQXJyYXkobWl4ZWR8bnVsbCAkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbiBhcnJheSBvZiBjaG9pY2VzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yTm90SXNJbnN0YW5jZU9mKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPck5vdE51bGwobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IG51bGwgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb3RSZWdleChtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVnZXggb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOb3RTYW1lKG1peGVkfG51bGwgJHZhbHVlMSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBub3QgdGhlIHNhbWUgKHVzaW5nID09PSkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOdWxsKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bGwgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JOdW1lcmljKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bWVyaWMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JPYmplY3RPckNsYXNzKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIG9yIGEgY2xhc3MgdGhhdCBleGlzdHMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JQaHBWZXJzaW9uKHN0cmluZ3xudWxsICRvcGVyYXRvciwgbWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IG9uIFBIUCB2ZXJzaW9uIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yUHJvcGVydGllc0V4aXN0KG1peGVkfG51bGwgJHZhbHVlLCBhcnJheSAkcHJvcGVydGllcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydGllcyBhbGwgZXhpc3Qgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JQcm9wZXJ0eUV4aXN0cyhtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nICRwcm9wZXJ0eSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydHkgZXhpc3RzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yUmFuZ2UobWl4ZWR8bnVsbCAkdmFsdWUsIG1peGVkICRtaW5WYWx1ZSwgbWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIHJhbmdlIG9mIG51bWJlcnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JSZWFkYWJsZShzdHJpbmd8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyByZWFkYWJsZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclJlZ2V4KG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4IG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yU2FtZShtaXhlZHxudWxsICR2YWx1ZSwgbWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSAodXNpbmcgPT09KSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclNhdGlzZnkobWl4ZWR8bnVsbCAkdmFsdWUsIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIGEgY2FsbGJhY2sgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JTY2FsYXIobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBQSFAgc2NhbGFyIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yU3RhcnRzV2l0aChtaXhlZHxudWxsICRzdHJpbmcsIHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBzdGFydHMgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJzIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yU3RyaW5nKG1peGVkfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgc3RyaW5nIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yU3ViY2xhc3NPZihtaXhlZHxudWxsICR2YWx1ZSwgc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgc3ViY2xhc3Mgb2YgZ2l2ZW4gY2xhc3MtbmFtZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclRydWUobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gVHJ1ZSBvciB0aGF0IHRoZSB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIHN0YXRpYyBib29sIG51bGxPclVuaXF1ZVZhbHVlcyhhcnJheXxudWxsICR2YWx1ZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWVzIGluIGFycmF5IGFyZSB1bmlxdWUgKHVzaW5nIHN0cmljdCBlcXVhbGl0eSkgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JVcmwobWl4ZWR8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gVVJMIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2Qgc3RhdGljIGJvb2wgbnVsbE9yVXVpZChzdHJpbmd8bnVsbCAkdmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIFVVSUQgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JWZXJzaW9uKHN0cmluZ3xudWxsICR2ZXJzaW9uMSwgc3RyaW5nICRvcGVyYXRvciwgc3RyaW5nICR2ZXJzaW9uMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgY29tcGFyaXNvbiBvZiB0d28gdmVyc2lvbnMgb3IgdGhhdCB0aGUgdmFsdWUgaXMgbnVsbC4KICogQG1ldGhvZCBzdGF0aWMgYm9vbCBudWxsT3JXcml0ZWFibGUoc3RyaW5nfG51bGwgJHZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgd3JpdGVhYmxlIG9yIHRoYXQgdGhlIHZhbHVlIGlzIG51bGwuCiAqLwpjbGFzcyBBc3NlcnRpb24KewogICAgY29uc3QgSU5WQUxJRF9GTE9BVCA9IDk7CiAgICBjb25zdCBJTlZBTElEX0lOVEVHRVIgPSAxMDsKICAgIGNvbnN0IElOVkFMSURfRElHSVQgPSAxMTsKICAgIGNvbnN0IElOVkFMSURfSU5URUdFUklTSCA9IDEyOwogICAgY29uc3QgSU5WQUxJRF9CT09MRUFOID0gMTM7CiAgICBjb25zdCBWQUxVRV9FTVBUWSA9IDE0OwogICAgY29uc3QgVkFMVUVfTlVMTCA9IDE1OwogICAgY29uc3QgVkFMVUVfTk9UX05VTEwgPSAyNTsKICAgIGNvbnN0IElOVkFMSURfU1RSSU5HID0gMTY7CiAgICBjb25zdCBJTlZBTElEX1JFR0VYID0gMTc7CiAgICBjb25zdCBJTlZBTElEX01JTl9MRU5HVEggPSAxODsKICAgIGNvbnN0IElOVkFMSURfTUFYX0xFTkdUSCA9IDE5OwogICAgY29uc3QgSU5WQUxJRF9TVFJJTkdfU1RBUlQgPSAyMDsKICAgIGNvbnN0IElOVkFMSURfU1RSSU5HX0NPTlRBSU5TID0gMjE7CiAgICBjb25zdCBJTlZBTElEX0NIT0lDRSA9IDIyOwogICAgY29uc3QgSU5WQUxJRF9OVU1FUklDID0gMjM7CiAgICBjb25zdCBJTlZBTElEX0FSUkFZID0gMjQ7CiAgICBjb25zdCBJTlZBTElEX0tFWV9FWElTVFMgPSAyNjsKICAgIGNvbnN0IElOVkFMSURfTk9UX0JMQU5LID0gMjc7CiAgICBjb25zdCBJTlZBTElEX0lOU1RBTkNFX09GID0gMjg7CiAgICBjb25zdCBJTlZBTElEX1NVQkNMQVNTX09GID0gMjk7CiAgICBjb25zdCBJTlZBTElEX1JBTkdFID0gMzA7CiAgICBjb25zdCBJTlZBTElEX0FMTlVNID0gMzE7CiAgICBjb25zdCBJTlZBTElEX1RSVUUgPSAzMjsKICAgIGNvbnN0IElOVkFMSURfRVEgPSAzMzsKICAgIGNvbnN0IElOVkFMSURfU0FNRSA9IDM0OwogICAgY29uc3QgSU5WQUxJRF9NSU4gPSAzNTsKICAgIGNvbnN0IElOVkFMSURfTUFYID0gMzY7CiAgICBjb25zdCBJTlZBTElEX0xFTkdUSCA9IDM3OwogICAgY29uc3QgSU5WQUxJRF9GQUxTRSA9IDM4OwogICAgY29uc3QgSU5WQUxJRF9TVFJJTkdfRU5EID0gMzk7CiAgICBjb25zdCBJTlZBTElEX1VVSUQgPSA0MDsKICAgIGNvbnN0IElOVkFMSURfQ09VTlQgPSA0MTsKICAgIGNvbnN0IElOVkFMSURfTk9UX0VRID0gNDI7CiAgICBjb25zdCBJTlZBTElEX05PVF9TQU1FID0gNDM7CiAgICBjb25zdCBJTlZBTElEX1RSQVZFUlNBQkxFID0gNDQ7CiAgICBjb25zdCBJTlZBTElEX0FSUkFZX0FDQ0VTU0lCTEUgPSA0NTsKICAgIGNvbnN0IElOVkFMSURfS0VZX0lTU0VUID0gNDY7CiAgICBjb25zdCBJTlZBTElEX1ZBTFVFX0lOX0FSUkFZID0gNDc7CiAgICBjb25zdCBJTlZBTElEX0UxNjQgPSA0ODsKICAgIGNvbnN0IElOVkFMSURfQkFTRTY0ID0gNDk7CiAgICBjb25zdCBJTlZBTElEX05PVF9SRUdFWCA9IDUwOwogICAgY29uc3QgSU5WQUxJRF9ESVJFQ1RPUlkgPSAxMDE7CiAgICBjb25zdCBJTlZBTElEX0ZJTEUgPSAxMDI7CiAgICBjb25zdCBJTlZBTElEX1JFQURBQkxFID0gMTAzOwogICAgY29uc3QgSU5WQUxJRF9XUklURUFCTEUgPSAxMDQ7CiAgICBjb25zdCBJTlZBTElEX0NMQVNTID0gMTA1OwogICAgY29uc3QgSU5WQUxJRF9JTlRFUkZBQ0UgPSAxMDY7CiAgICBjb25zdCBJTlZBTElEX0ZJTEVfTk9UX0VYSVNUUyA9IDEwNzsKICAgIGNvbnN0IElOVkFMSURfRU1BSUwgPSAyMDE7CiAgICBjb25zdCBJTlRFUkZBQ0VfTk9UX0lNUExFTUVOVEVEID0gMjAyOwogICAgY29uc3QgSU5WQUxJRF9VUkwgPSAyMDM7CiAgICBjb25zdCBJTlZBTElEX05PVF9JTlNUQU5DRV9PRiA9IDIwNDsKICAgIGNvbnN0IFZBTFVFX05PVF9FTVBUWSA9IDIwNTsKICAgIGNvbnN0IElOVkFMSURfSlNPTl9TVFJJTkcgPSAyMDY7CiAgICBjb25zdCBJTlZBTElEX09CSkVDVCA9IDIwNzsKICAgIGNvbnN0IElOVkFMSURfTUVUSE9EID0gMjA4OwogICAgY29uc3QgSU5WQUxJRF9TQ0FMQVIgPSAyMDk7CiAgICBjb25zdCBJTlZBTElEX0xFU1MgPSAyMTA7CiAgICBjb25zdCBJTlZBTElEX0xFU1NfT1JfRVFVQUwgPSAyMTE7CiAgICBjb25zdCBJTlZBTElEX0dSRUFURVIgPSAyMTI7CiAgICBjb25zdCBJTlZBTElEX0dSRUFURVJfT1JfRVFVQUwgPSAyMTM7CiAgICBjb25zdCBJTlZBTElEX0RBVEUgPSAyMTQ7CiAgICBjb25zdCBJTlZBTElEX0NBTExBQkxFID0gMjE1OwogICAgY29uc3QgSU5WQUxJRF9LRVlfTk9UX0VYSVNUUyA9IDIxNjsKICAgIGNvbnN0IElOVkFMSURfU0FUSVNGWSA9IDIxNzsKICAgIGNvbnN0IElOVkFMSURfSVAgPSAyMTg7CiAgICBjb25zdCBJTlZBTElEX0JFVFdFRU4gPSAyMTk7CiAgICBjb25zdCBJTlZBTElEX0JFVFdFRU5fRVhDTFVTSVZFID0gMjIwOwogICAgY29uc3QgSU5WQUxJRF9FWFRFTlNJT04gPSAyMjI7CiAgICBjb25zdCBJTlZBTElEX0NPTlNUQU5UID0gMjIxOwogICAgY29uc3QgSU5WQUxJRF9WRVJTSU9OID0gMjIzOwogICAgY29uc3QgSU5WQUxJRF9QUk9QRVJUWSA9IDIyNDsKICAgIGNvbnN0IElOVkFMSURfUkVTT1VSQ0UgPSAyMjU7CiAgICBjb25zdCBJTlZBTElEX0NPVU5UQUJMRSA9IDIyNjsKICAgIGNvbnN0IElOVkFMSURfTUlOX0NPVU5UID0gMjI3OwogICAgY29uc3QgSU5WQUxJRF9NQVhfQ09VTlQgPSAyMjg7CiAgICBjb25zdCBJTlZBTElEX1NUUklOR19OT1RfQ09OVEFJTlMgPSAyMjk7CiAgICBjb25zdCBJTlZBTElEX1VOSVFVRV9WQUxVRVMgPSAyMzA7CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb24gdG8gdGhyb3cgd2hlbiBhbiBhc3NlcnRpb24gZmFpbGVkLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGV4Y2VwdGlvbkNsYXNzID0gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOjpjbGFzczsKCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIGVxdWFsICh1c2luZyA9PSkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTIKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXEoJHZhbHVlLCAkdmFsdWUyLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSAhPSAkdmFsdWUyKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZCB2YWx1ZSAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZTIpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfRVEsICRwcm9wZXJ0eVBhdGgsIFsnZXhwZWN0ZWQnID0+ICR2YWx1ZTJdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGFycmF5IGNvbnRhaW5zIHRoZSBzdWJzZXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTIKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXFBcnJheVN1YnNldCgkdmFsdWUsICR2YWx1ZTIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlzQXJyYXkoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgc3RhdGljOjppc0FycmF5KCR2YWx1ZTIsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgJHBhdGNoZWQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJHZhbHVlLCAkdmFsdWUyKTsKICAgICAgICBzdGF0aWM6OmVxKCRwYXRjaGVkLCAkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSB0aGUgc2FtZSAodXNpbmcgPT09KS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS10ZW1wbGF0ZSBFeHBlY3RlZFR5cGUKICAgICAqIEBwc2FsbS1wYXJhbSBFeHBlY3RlZFR5cGUgJHZhbHVlMgogICAgICogQHBzYWxtLWFzc2VydCA9RXhwZWN0ZWRUeXBlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2FtZSgkdmFsdWUsICR2YWx1ZTIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlICE9PSAkdmFsdWUyKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgdGhlIHNhbWUgYXMgZXhwZWN0ZWQgdmFsdWUgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUyKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1NBTUUsICRwcm9wZXJ0eVBhdGgsIFsnZXhwZWN0ZWQnID0+ICR2YWx1ZTJdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IGVxdWFsICh1c2luZyA9PSkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTEKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUyCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vdEVxKCR2YWx1ZTEsICR2YWx1ZTIsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlMSA9PSAkdmFsdWUyKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiB3YXMgbm90IGV4cGVjdGVkIHRvIGJlIGVxdWFsIHRvIHZhbHVlICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUxKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZTIpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZTEsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTk9UX0VRLCAkcHJvcGVydHlQYXRoLCBbJ2V4cGVjdGVkJyA9PiAkdmFsdWUyXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSAodXNpbmcgPT09KS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTIKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tdGVtcGxhdGUgRXhwZWN0ZWRUeXBlCiAgICAgKiBAcHNhbG0tcGFyYW0gRXhwZWN0ZWRUeXBlICR2YWx1ZTIKICAgICAqIEBwc2FsbS1hc3NlcnQgIT1FeHBlY3RlZFR5cGUgJHZhbHVlMQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90U2FtZSgkdmFsdWUxLCAkdmFsdWUyLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZTEgPT09ICR2YWx1ZTIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBub3QgZXhwZWN0ZWQgdG8gYmUgdGhlIHNhbWUgYXMgdmFsdWUgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZTEpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlMikKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlMSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OT1RfU0FNRSwgJHByb3BlcnR5UGF0aCwgWydleHBlY3RlZCcgPT4gJHZhbHVlMl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgaW4gYXJyYXkgb2YgY2hvaWNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vdEluQXJyYXkoJHZhbHVlLCBhcnJheSAkY2hvaWNlcywgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICh0cnVlID09PSBcaW5fYXJyYXkoJHZhbHVlLCAkY2hvaWNlcykpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBub3QgZXhwZWN0ZWQgdG8gYmUgYW4gZWxlbWVudCBvZiB0aGUgdmFsdWVzOiAlcycpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRjaG9pY2VzKQogICAgICAgICAgICApOwogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfVkFMVUVfSU5fQVJSQVksICRwcm9wZXJ0eVBhdGgsIFsnY2hvaWNlcycgPT4gJGNob2ljZXNdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBpbnQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnRlZ2VyKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2ludCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gaW50ZWdlci4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9JTlRFR0VSLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgZmxvYXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgZmxvYXQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmbG9hdCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19mbG9hdCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYSBmbG9hdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9GTE9BVCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBpZiBhbiBpbnRlZ2VyIG9yIGludGVnZXJpc2ggaXMgYSBkaWdpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9bnVtZXJpYyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRpZ2l0KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGN0eXBlX2RpZ2l0KChzdHJpbmcpJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgZGlnaXQuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfRElHSVQsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyJ2lzaC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGludGVnZXJpc2goJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKAogICAgICAgICAgICBcaXNfcmVzb3VyY2UoJHZhbHVlKSB8fAogICAgICAgICAgICBcaXNfb2JqZWN0KCR2YWx1ZSkgfHwKICAgICAgICAgICAgXGlzX2Jvb2woJHZhbHVlKSB8fAogICAgICAgICAgICBcaXNfbnVsbCgkdmFsdWUpIHx8CiAgICAgICAgICAgIFxpc19hcnJheSgkdmFsdWUpIHx8CiAgICAgICAgICAgIChcaXNfc3RyaW5nKCR2YWx1ZSkgJiYgJycgPT0gJHZhbHVlKSB8fAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICBcc3RydmFsKFxpbnR2YWwoJHZhbHVlKSkgIT09IFxzdHJ2YWwoJHZhbHVlKSAmJgogICAgICAgICAgICAgICAgXHN0cnZhbChcaW50dmFsKCR2YWx1ZSkpICE9PSBcc3RydmFsKFxsdHJpbSgkdmFsdWUsICcwJykpICYmCiAgICAgICAgICAgICAgICAnJyAhPT0gXHN0cnZhbChcaW50dmFsKCR2YWx1ZSkpICYmCiAgICAgICAgICAgICAgICAnJyAhPT0gXHN0cnZhbChcbHRyaW0oJHZhbHVlLCAnMCcpKQogICAgICAgICAgICApCiAgICAgICAgKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gaW50ZWdlciBvciBhIG51bWJlciBjYXN0YWJsZSB0byBpbnRlZ2VyLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0lOVEVHRVJJU0gsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBwaHAgYm9vbGVhbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBib29sICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm9vbGVhbigkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19ib29sKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIGJvb2xlYW4uJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQk9PTEVBTiwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgUEhQIHNjYWxhci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBzY2FsYXIgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzY2FsYXIoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc2NhbGFyKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIHNjYWxhci4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TQ0FMQVIsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgZW1wdHkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgIWVtcHR5ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90RW1wdHkoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIGVtcHR5LCBidXQgbm9uIGVtcHR5IHZhbHVlIHdhcyBleHBlY3RlZC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6VkFMVUVfRU1QVFksICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBlbXB0eSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vQ29udGVudCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBlbXB0eSwgYnV0IGVtcHR5IHZhbHVlIHdhcyBleHBlY3RlZC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6VkFMVUVfTk9UX0VNUFRZLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBudWxsICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG51bGwoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICR2YWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IG51bGwsIGJ1dCBudWxsIHZhbHVlIHdhcyBleHBlY3RlZC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6VkFMVUVfTk9UX05VTEwsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgbnVsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCAhbnVsbCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vdE51bGwoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR2YWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbnVsbCwgYnV0IG5vbiBudWxsIHZhbHVlIHdhcyBleHBlY3RlZC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6VkFMVUVfTlVMTCwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmluZygkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nLCB0eXBlICVzIGdpdmVuLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIFxnZXR0eXBlKCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9TVFJJTkcsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBtYXRjaGVzIGEgcmVnZXguCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2V4KCR2YWx1ZSwgJHBhdHRlcm4sICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCFccHJlZ19tYXRjaCgkcGF0dGVybiwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZG9lcyBub3QgbWF0Y2ggZXhwcmVzc2lvbi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9SRUdFWCwgJHByb3BlcnR5UGF0aCwgWydwYXR0ZXJuJyA9PiAkcGF0dGVybl0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCBhIHJlZ2V4LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ICE9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90UmVnZXgoJHZhbHVlLCAkcGF0dGVybiwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIG1hdGNoZXMgZXhwcmVzc2lvbi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OT1RfUkVHRVgsICRwcm9wZXJ0eVBhdGgsIFsncGF0dGVybicgPT4gJHBhdHRlcm5dKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIGhhcyBhIGdpdmVuIGxlbmd0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGgKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVuZ3RoKCR2YWx1ZSwgJGxlbmd0aCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChcbWJfc3RybGVuKCR2YWx1ZSwgJGVuY29kaW5nKSAhPT0gJGxlbmd0aCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaGFzIHRvIGJlICVkIGV4YWN0bHkgY2hhcmFjdGVycyBsb25nLCBidXQgbGVuZ3RoIGlzICVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgICRsZW5ndGgsCiAgICAgICAgICAgICAgICBcbWJfc3RybGVuKCR2YWx1ZSwgJGVuY29kaW5nKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0xFTkdUSCwgJHByb3BlcnR5UGF0aCwgWydsZW5ndGgnID0+ICRsZW5ndGgsICdlbmNvZGluZycgPT4gJGVuY29kaW5nXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGEgc3RyaW5nIGlzIGF0IGxlYXN0ICRtaW5MZW5ndGggY2hhcnMgbG9uZy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gaW50ICRtaW5MZW5ndGgKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluTGVuZ3RoKCR2YWx1ZSwgJG1pbkxlbmd0aCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmIChcbWJfc3RybGVuKCR2YWx1ZSwgJGVuY29kaW5nKSA8ICRtaW5MZW5ndGgpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIHRvbyBzaG9ydCwgaXQgc2hvdWxkIGhhdmUgYXQgbGVhc3QgJWQgY2hhcmFjdGVycywgYnV0IG9ubHkgaGFzICVkIGNoYXJhY3RlcnMuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgJG1pbkxlbmd0aCwKICAgICAgICAgICAgICAgIFxtYl9zdHJsZW4oJHZhbHVlLCAkZW5jb2RpbmcpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTUlOX0xFTkdUSCwgJHByb3BlcnR5UGF0aCwgWydtaW5fbGVuZ3RoJyA9PiAkbWluTGVuZ3RoLCAnZW5jb2RpbmcnID0+ICRlbmNvZGluZ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBzdHJpbmcgdmFsdWUgaXMgbm90IGxvbmdlciB0aGFuICRtYXhMZW5ndGggY2hhcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIGludCAkbWF4TGVuZ3RoCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1heExlbmd0aCgkdmFsdWUsICRtYXhMZW5ndGgsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGVuY29kaW5nID0gJ3V0ZjgnKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoXG1iX3N0cmxlbigkdmFsdWUsICRlbmNvZGluZykgPiAkbWF4TGVuZ3RoKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyB0b28gbG9uZywgaXQgc2hvdWxkIGhhdmUgbm8gbW9yZSB0aGFuICVkIGNoYXJhY3RlcnMsIGJ1dCBoYXMgJWQgY2hhcmFjdGVycy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICAkbWF4TGVuZ3RoLAogICAgICAgICAgICAgICAgXG1iX3N0cmxlbigkdmFsdWUsICRlbmNvZGluZykKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NQVhfTEVOR1RILCAkcHJvcGVydHlQYXRoLCBbJ21heF9sZW5ndGgnID0+ICRtYXhMZW5ndGgsICdlbmNvZGluZycgPT4gJGVuY29kaW5nXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHN0cmluZyBsZW5ndGggaXMgYmV0d2VlbiBtaW4gYW5kIG1heCBsZW5ndGhzLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBpbnQgJG1pbkxlbmd0aAogICAgICogQHBhcmFtIGludCAkbWF4TGVuZ3RoCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJldHdlZW5MZW5ndGgoJHZhbHVlLCAkbWluTGVuZ3RoLCAkbWF4TGVuZ3RoLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRlbmNvZGluZyA9ICd1dGY4Jyk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICBzdGF0aWM6Om1pbkxlbmd0aCgkdmFsdWUsICRtaW5MZW5ndGgsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoLCAkZW5jb2RpbmcpOwogICAgICAgIHN0YXRpYzo6bWF4TGVuZ3RoKCR2YWx1ZSwgJG1heExlbmd0aCwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgsICRlbmNvZGluZyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhcnRzV2l0aCgkc3RyaW5nLCAkbmVlZGxlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsICRlbmNvZGluZyA9ICd1dGY4Jyk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkc3RyaW5nLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICgwICE9PSBcbWJfc3RycG9zKCRzdHJpbmcsICRuZWVkbGUsIDAsICRlbmNvZGluZykpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGRvZXMgbm90IHN0YXJ0IHdpdGggIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRzdHJpbmcpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG5lZWRsZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRzdHJpbmcsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU1RSSU5HX1NUQVJULCAkcHJvcGVydHlQYXRoLCBbJ25lZWRsZScgPT4gJG5lZWRsZSwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIGVuZHMgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJzLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICRzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuZHNXaXRoKCRzdHJpbmcsICRuZWVkbGUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGVuY29kaW5nID0gJ3V0ZjgnKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCRzdHJpbmcsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgJHN0cmluZ1Bvc2l0aW9uID0gXG1iX3N0cmxlbigkc3RyaW5nLCAkZW5jb2RpbmcpIC0gXG1iX3N0cmxlbigkbmVlZGxlLCAkZW5jb2RpbmcpOwoKICAgICAgICBpZiAoXG1iX3N0cnJpcG9zKCRzdHJpbmcsICRuZWVkbGUsIDAsICRlbmNvZGluZykgIT09ICRzdHJpbmdQb3NpdGlvbikgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZG9lcyBub3QgZW5kIHdpdGggIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRzdHJpbmcpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG5lZWRsZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRzdHJpbmcsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU1RSSU5HX0VORCwgJHByb3BlcnR5UGF0aCwgWyduZWVkbGUnID0+ICRuZWVkbGUsICdlbmNvZGluZycgPT4gJGVuY29kaW5nXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHN0cmluZyBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICRzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnRhaW5zKCRzdHJpbmcsICRuZWVkbGUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGVuY29kaW5nID0gJ3V0ZjgnKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCRzdHJpbmcsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBcbWJfc3RycG9zKCRzdHJpbmcsICRuZWVkbGUsIDAsICRlbmNvZGluZykpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGRvZXMgbm90IGNvbnRhaW4gIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRzdHJpbmcpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG5lZWRsZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRzdHJpbmcsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU1RSSU5HX0NPTlRBSU5TLCAkcHJvcGVydHlQYXRoLCBbJ25lZWRsZScgPT4gJG5lZWRsZSwgJ2VuY29kaW5nJyA9PiAkZW5jb2RpbmddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgY2hhcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0ID1zdHJpbmcgJHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90Q29udGFpbnMoJHN0cmluZywgJG5lZWRsZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCAkZW5jb2RpbmcgPSAndXRmOCcpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHN0cmluZywgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoZmFsc2UgIT09IFxtYl9zdHJwb3MoJHN0cmluZywgJG5lZWRsZSwgMCwgJGVuY29kaW5nKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgY29udGFpbnMgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRzdHJpbmcpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG5lZWRsZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRzdHJpbmcsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU1RSSU5HX05PVF9DT05UQUlOUywgJHByb3BlcnR5UGF0aCwgWyduZWVkbGUnID0+ICRuZWVkbGUsICdlbmNvZGluZycgPT4gJGVuY29kaW5nXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIGFycmF5IG9mIGNob2ljZXMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaG9pY2UoJHZhbHVlLCBhcnJheSAkY2hvaWNlcywgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGluX2FycmF5KCR2YWx1ZSwgJGNob2ljZXMsIHRydWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gZWxlbWVudCBvZiB0aGUgdmFsaWQgdmFsdWVzOiAlcycpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIFxpbXBsb2RlKCcsICcsIFxhcnJheV9tYXAoW1xnZXRfY2FsbGVkX2NsYXNzKCksICdzdHJpbmdpZnknXSwgJGNob2ljZXMpKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0NIT0lDRSwgJHByb3BlcnR5UGF0aCwgWydjaG9pY2VzJyA9PiAkY2hvaWNlc10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzLgogICAgICoKICAgICAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BzZWUgY2hvaWNlKCl9LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5BcnJheSgkdmFsdWUsIGFycmF5ICRjaG9pY2VzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6Y2hvaWNlKCR2YWx1ZSwgJGNob2ljZXMsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bWVyaWMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgbnVtZXJpYyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG51bWVyaWMoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfbnVtZXJpYygkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgbnVtZXJpYy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9OVU1FUklDLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSByZXNvdXJjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCByZXNvdXJjZSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1Jlc291cmNlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX3Jlc291cmNlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIHJlc291cmNlLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1JFU09VUkNFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgYXJyYXkgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0FycmF5KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhbiBhcnJheS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9BUlJBWSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIGEgdHJhdmVyc2FibGUgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IGl0ZXJhYmxlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNUcmF2ZXJzYWJsZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxpc19hcnJheSgkdmFsdWUpICYmICEkdmFsdWUgaW5zdGFuY2VvZiBUcmF2ZXJzYWJsZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGFuIGFycmF5IGFuZCBkb2VzIG5vdCBpbXBsZW1lbnQgVHJhdmVyc2FibGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfVFJBVkVSU0FCTEUsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhbiBhcnJheS1hY2Nlc3NpYmxlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQXJyYXlBY2Nlc3NpYmxlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCR2YWx1ZSkgJiYgISR2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYW4gYXJyYXkgYW5kIGRvZXMgbm90IGltcGxlbWVudCBBcnJheUFjY2Vzcy4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9BUlJBWV9BQ0NFU1NJQkxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgY291bnRhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IGNvdW50YWJsZSAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQ291bnRhYmxlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdpc19jb3VudGFibGUnKSkgewogICAgICAgICAgICAkYXNzZXJ0ID0gXGlzX2NvdW50YWJsZSgkdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhc3NlcnQgPSBcaXNfYXJyYXkoJHZhbHVlKSB8fCAkdmFsdWUgaW5zdGFuY2VvZiBDb3VudGFibGUgfHwgJHZhbHVlIGluc3RhbmNlb2YgUmVzb3VyY2VCdW5kbGUgfHwgJHZhbHVlIGluc3RhbmNlb2YgU2ltcGxlWE1MRWxlbWVudDsKICAgICAgICB9CgogICAgICAgIGlmICghJGFzc2VydCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGFuIGFycmF5IGFuZCBkb2VzIG5vdCBpbXBsZW1lbnQgQ291bnRhYmxlLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0NPVU5UQUJMRSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGtleQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBrZXlFeGlzdHMoJHZhbHVlLCAka2V5LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjppc0FycmF5KCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCRrZXksICR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdBcnJheSBkb2VzIG5vdCBjb250YWluIGFuIGVsZW1lbnQgd2l0aCBrZXkgIiVzIicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGtleSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9LRVlfRVhJU1RTLCAkcHJvcGVydHlQYXRoLCBbJ2tleScgPT4gJGtleV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGtleQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBrZXlOb3RFeGlzdHMoJHZhbHVlLCAka2V5LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjppc0FycmF5KCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0FycmF5IGNvbnRhaW5zIGFuIGVsZW1lbnQgd2l0aCBrZXkgIiVzIicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGtleSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9LRVlfTk9UX0VYSVNUUywgJHByb3BlcnR5UGF0aCwgWydrZXknID0+ICRrZXldKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWVzIGluIGFycmF5IGFyZSB1bmlxdWUgKHVzaW5nIHN0cmljdCBlcXVhbGl0eSkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkW10gJHZhbHVlcwogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bmlxdWVWYWx1ZXMoYXJyYXkgJHZhbHVlcywgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKFxhcnJheV9zZWFyY2goJHZhbHVlLCAkdmFsdWVzLCB0cnVlKSAhPT0gJGtleSkgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgaW4gYXJyYXknKSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9VTklRVUVfVkFMVUVTLCAkcHJvcGVydHlQYXRoLCBbJ3ZhbHVlJyA9PiAkdmFsdWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IHVzaW5nIGlzc2V0KCkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGtleQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBrZXlJc3NldCgkdmFsdWUsICRrZXksICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlzQXJyYXlBY2Nlc3NpYmxlKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIWlzc2V0KCR2YWx1ZVska2V5XSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdUaGUgZWxlbWVudCB3aXRoIGtleSAiJXMiIHdhcyBub3QgZm91bmQnKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRrZXkpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfS0VZX0lTU0VULCAkcHJvcGVydHlQYXRoLCBbJ2tleScgPT4gJGtleV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IGFuZCBpdHMgdmFsdWUgaXMgbm90IGVtcHR5LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90RW1wdHlLZXkoJHZhbHVlLCAka2V5LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjprZXlJc3NldCgkdmFsdWUsICRrZXksICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICBzdGF0aWM6Om5vdEVtcHR5KCR2YWx1ZVska2V5XSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBibGFuay4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vdEJsYW5rKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gJHZhbHVlIHx8IChlbXB0eSgkdmFsdWUpICYmICcwJyAhPSAkdmFsdWUpIHx8IChcaXNfc3RyaW5nKCR2YWx1ZSkgJiYgJycgPT09IFx0cmltKCR2YWx1ZSkpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBibGFuaywgYnV0IHdhcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsdWUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTk9UX0JMQU5LLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc05hbWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tdGVtcGxhdGUgRXhwZWN0ZWRUeXBlIG9mIG9iamVjdAogICAgICogQHBzYWxtLXBhcmFtIGNsYXNzLXN0cmluZzxFeHBlY3RlZFR5cGU+ICRjbGFzc05hbWUKICAgICAqIEBwc2FsbS1hc3NlcnQgRXhwZWN0ZWRUeXBlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKCR2YWx1ZSwgJGNsYXNzTmFtZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghKCR2YWx1ZSBpbnN0YW5jZW9mICRjbGFzc05hbWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgaW5zdGFuY2VvZiBvZiAiJXMiIGJ1dCBpcyBub3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgJGNsYXNzTmFtZQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0lOU1RBTkNFX09GLCAkcHJvcGVydHlQYXRoLCBbJ2NsYXNzJyA9PiAkY2xhc3NOYW1lXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS10ZW1wbGF0ZSBFeHBlY3RlZFR5cGUgb2Ygb2JqZWN0CiAgICAgKiBAcHNhbG0tcGFyYW0gY2xhc3Mtc3RyaW5nPEV4cGVjdGVkVHlwZT4gJGNsYXNzTmFtZQogICAgICogQHBzYWxtLWFzc2VydCAhRXhwZWN0ZWRUeXBlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm90SXNJbnN0YW5jZU9mKCR2YWx1ZSwgJGNsYXNzTmFtZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiAkY2xhc3NOYW1lKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiB3YXMgbm90IGV4cGVjdGVkIHRvIGJlIGluc3RhbmNlb2Ygb2YgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICAkY2xhc3NOYW1lCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTk9UX0lOU1RBTkNFX09GLCAkcHJvcGVydHlQYXRoLCBbJ2NsYXNzJyA9PiAkY2xhc3NOYW1lXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIHN1YmNsYXNzIG9mIGdpdmVuIGNsYXNzLW5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1YmNsYXNzT2YoJHZhbHVlLCAkY2xhc3NOYW1lLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3ViY2xhc3Nfb2YoJHZhbHVlLCAkY2xhc3NOYW1lKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0NsYXNzICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIHN1YmNsYXNzIG9mICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgJGNsYXNzTmFtZQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1NVQkNMQVNTX09GLCAkcHJvcGVydHlQYXRoLCBbJ2NsYXNzJyA9PiAkY2xhc3NOYW1lXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIHJhbmdlIG9mIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRtaW5WYWx1ZQogICAgICogQHBhcmFtIG1peGVkICRtYXhWYWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPW51bWVyaWMgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYW5nZSgkdmFsdWUsICRtaW5WYWx1ZSwgJG1heFZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpudW1lcmljKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoJHZhbHVlIDwgJG1pblZhbHVlIHx8ICR2YWx1ZSA+ICRtYXhWYWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ051bWJlciAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhdCBsZWFzdCAiJWQiIGFuZCBhdCBtb3N0ICIlZCIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG1pblZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRtYXhWYWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9SQU5HRSwgJHByb3BlcnR5UGF0aCwgWydtaW4nID0+ICRtaW5WYWx1ZSwgJ21heCcgPT4gJG1heFZhbHVlXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGEgZ2l2ZW4gbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRtaW5WYWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPW51bWVyaWMgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaW4oJHZhbHVlLCAkbWluVmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om51bWVyaWMoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICgkdmFsdWUgPCAkbWluVmFsdWUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdOdW1iZXIgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgYXQgbGVhc3QgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkbWluVmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTUlOLCAkcHJvcGVydHlQYXRoLCBbJ21pbicgPT4gJG1pblZhbHVlXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGEgbnVtYmVyIGlzIHNtYWxsZXIgYXMgYSBnaXZlbiBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1heFZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9bnVtZXJpYyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1heCgkdmFsdWUsICRtYXhWYWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6bnVtZXJpYygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCR2YWx1ZSA+ICRtYXhWYWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ051bWJlciAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhdCBtb3N0ICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG1heFZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX01BWCwgJHByb3BlcnR5UGF0aCwgWydtYXgnID0+ICRtYXhWYWx1ZV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBhIGZpbGUgZXhpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgc3RhdGljOjpub3RFbXB0eSgkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCFcaXNfZmlsZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnRmlsZSAiJXMiIHdhcyBleHBlY3RlZCB0byBleGlzdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9GSUxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSBkaXJlY3RvcnkgZXhpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRpcmVjdG9yeSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgaWYgKCFcaXNfZGlyKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQYXRoICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGEgZGlyZWN0b3J5LicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0RJUkVDVE9SWSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgcmVhZGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZGFibGUoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpzdHJpbmcoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGlmICghXGlzX3JlYWRhYmxlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQYXRoICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlYWRhYmxlLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1JFQURBQkxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyB3cml0ZWFibGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3JpdGVhYmxlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxpc193cml0YWJsZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUGF0aCAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSB3cml0ZWFibGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfV1JJVEVBQkxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gZW1haWwgYWRkcmVzcyAodXNpbmcgaW5wdXRfZmlsdGVyL0ZJTFRFUl9WQUxJREFURV9FTUFJTCkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgPXN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVtYWlsKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxmaWx0ZXJfdmFyKCR2YWx1ZSwgRklMVEVSX1ZBTElEQVRFX0VNQUlMKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgd2FzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfRU1BSUwsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBVUkwuCiAgICAgKgogICAgICogVGhpcyBjb2RlIHNuaXBwZWQgd2FzIHRha2VuIGZyb20gdGhlIFN5bWZvbnkgcHJvamVjdCBhbmQgbW9kaWZpZWQgdG8gdGhlIHNwZWNpYWwgZGVtYW5kcyBvZiB0aGlzIG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9WYWxpZGF0b3IvYmxvYi9tYXN0ZXIvQ29uc3RyYWludHMvVXJsVmFsaWRhdG9yLnBocAogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9WYWxpZGF0b3IvYmxvYi9tYXN0ZXIvQ29uc3RyYWludHMvVXJsLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVybCgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OnN0cmluZygkdmFsdWUsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgJHByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOwoKICAgICAgICAkcGF0dGVybiA9ICd+XgogICAgICAgICAgICAoJXMpOi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvdG9jb2wKICAgICAgICAgICAgKChbXC5ccExccE4tXSs6KT8oW1wuXHBMXHBOLV0rKUApPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJhc2ljIGF1dGgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgKFtccExccE5ccFNcLVwuXSkrKFwuPyhbXHBMXHBOXXx4blwtXC1bXHBMXHBOLV0rKStcLj8pICAgICAgICAgICMgYSBkb21haW4gbmFtZQogICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IKICAgICAgICAgICAgICAgIFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuIElQIGFkZHJlc3MKICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yCiAgICAgICAgICAgICAgICBcWwogICAgICAgICAgICAgICAgICAgICg/Oig/Oig/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezZ9KSg/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTooPzooPzpbMC05YS1mXXsxLDR9KSkpfCg/Oig/Oig/Oig/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKVwuKXszfSg/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKSkpKSkpfCg/Oig/Ojo6KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7NX0pKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpKT86Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezR9KSg/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTooPzooPzpbMC05YS1mXXsxLDR9KSkpfCg/Oig/Oig/Oig/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKVwuKXszfSg/Oig/OjI1WzAtNV18KD86WzEtOV18MVswLTldfDJbMC00XSk/WzAtOV0pKSkpKSkpfCg/Oig/Oig/Oig/Oig/Oig/OlswLTlhLWZdezEsNH0pKTopezAsMX0oPzooPzpbMC05YS1mXXsxLDR9KSkpPzo6KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7M30pKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7MCwyfSg/Oig/OlswLTlhLWZdezEsNH0pKSk/OjooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXsyfSkoPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSlcLil7M30oPzooPzoyNVswLTVdfCg/OlsxLTldfDFbMC05XXwyWzAtNF0pP1swLTldKSkpKSkpKXwoPzooPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXswLDN9KD86KD86WzAtOWEtZl17MSw0fSkpKT86Oig/Oig/OlswLTlhLWZdezEsNH0pKTopKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7MCw0fSg/Oig/OlswLTlhLWZdezEsNH0pKSk/OjopKD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOig/Oig/OlswLTlhLWZdezEsNH0pKSl8KD86KD86KD86KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpXC4pezN9KD86KD86MjVbMC01XXwoPzpbMS05XXwxWzAtOV18MlswLTRdKT9bMC05XSkpKSkpKSl8KD86KD86KD86KD86KD86KD86WzAtOWEtZl17MSw0fSkpOil7MCw1fSg/Oig/OlswLTlhLWZdezEsNH0pKSk/OjopKD86KD86WzAtOWEtZl17MSw0fSkpKXwoPzooPzooPzooPzooPzooPzpbMC05YS1mXXsxLDR9KSk6KXswLDZ9KD86KD86WzAtOWEtZl17MSw0fSkpKT86OikpKSkKICAgICAgICAgICAgICAgIFxdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuIElQdjYgYWRkcmVzcwogICAgICAgICAgICApCiAgICAgICAgICAgICg6WzAtOV0rKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHBvcnQgKG9wdGlvbmFsKQogICAgICAgICAgICAoPzovICg/OltccExccE5cLS5fXH4hJCZcJygpKissOz06QF18JSVbMC05QS1GYS1mXXsyfSkqICkqICAgICAgICAgICMgYSBwYXRoCiAgICAgICAgICAgICg/Olw/ICg/OltccExccE5cLS5fXH4hJCZcJ1xbXF0oKSorLDs9OkAvP118JSVbMC05QS1GYS1mXXsyfSkqICk/ICAgIyBhIHF1ZXJ5IChvcHRpb25hbCkKICAgICAgICAgICAgKD86XCMgKD86W1xwTFxwTlwtLl9cfiEkJlwnKCkqKyw7PTpALz9dfCUlWzAtOUEtRmEtZl17Mn0pKiApPyAgICAgICAjIGEgZnJhZ21lbnQgKG9wdGlvbmFsKQogICAgICAgICR+aXh1RCc7CgogICAgICAgICRwYXR0ZXJuID0gXHNwcmludGYoJHBhdHRlcm4sIFxpbXBsb2RlKCd8JywgJHByb3RvY29scykpOwoKICAgICAgICBpZiAoIVxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBVUkwgc3RhcnRpbmcgd2l0aCBodHRwIG9yIGh0dHBzJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfVVJMLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYWxwaGFudW1lcmljLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxudW0oJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc3RhdGljOjpyZWdleCgkdmFsdWUsICcoXihbYS16QS1aXXsxfVthLXpBLVowLTldKikkKUQnLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYWxwaGFudW1lcmljLCBzdGFydGluZyB3aXRoIGxldHRlcnMgYW5kIGNvbnRhaW5pbmcgb25seSBsZXR0ZXJzIGFuZCBudW1iZXJzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0FMTlVNLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gVHJ1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCB0cnVlICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHJ1ZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAodHJ1ZSAhPT0gJHZhbHVlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgVFJVRS4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9UUlVFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gRmFsc2UuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgZmFsc2UgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYWxzZSgkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoZmFsc2UgIT09ICR2YWx1ZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IEZBTFNFLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0ZBTFNFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBjbGFzcy1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGFzc0V4aXN0cygkdmFsdWUsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIVxjbGFzc19leGlzdHMoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0NsYXNzICIlcyIgZG9lcyBub3QgZXhpc3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQ0xBU1MsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgaW50ZXJmYWNlIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCBjbGFzcy1zdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnRlcmZhY2VFeGlzdHMoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcaW50ZXJmYWNlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnSW50ZXJmYWNlICIlcyIgZG9lcyBub3QgZXhpc3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSU5URVJGQUNFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNsYXNzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnRlcmZhY2VOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGltcGxlbWVudHNJbnRlcmZhY2UoJGNsYXNzLCAkaW50ZXJmYWNlTmFtZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZWZsZWN0aW9uID0gbmV3IFJlZmxlY3Rpb25DbGFzcygkY2xhc3MpOwogICAgICAgICAgICBpZiAoISRyZWZsZWN0aW9uLT5pbXBsZW1lbnRzSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKSkgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlICIlcyIuJyksCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNsYXNzKSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkaW50ZXJmYWNlTmFtZSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNsYXNzLCAkbWVzc2FnZSwgc3RhdGljOjpJTlRFUkZBQ0VfTk9UX0lNUExFTUVOVEVELCAkcHJvcGVydHlQYXRoLCBbJ2ludGVyZmFjZScgPT4gJGludGVyZmFjZU5hbWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFJlZmxlY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdDbGFzcyAiJXMiIGZhaWxlZCByZWZsZWN0aW9uLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNsYXNzKQogICAgICAgICAgICApOwogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkY2xhc3MsICRtZXNzYWdlLCBzdGF0aWM6OklOVEVSRkFDRV9OT1RfSU1QTEVNRU5URUQsICRwcm9wZXJ0eVBhdGgsIFsnaW50ZXJmYWNlJyA9PiAkaW50ZXJmYWNlTmFtZV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQganNvbiBzdHJpbmcuCiAgICAgKgogICAgICogTk9USUNFOgogICAgICogU2luY2UgdGhpcyBkb2VzIGEganNvbl9kZWNvZGUgdG8gZGV0ZXJtaW5lIGl0cyB2YWxpZGl0eQogICAgICogeW91IHByb2JhYmx5IHNob3VsZCBjb25zaWRlciwgd2hlbiB1c2luZyB0aGUgdmFyaWFibGUKICAgICAqIGNvbnRlbnQgYWZ0ZXJ3YXJkcywganVzdCB0byBkZWNvZGUgYW5kIGNoZWNrIGZvciB5b3Vyc2VsZiBpbnN0ZWFkCiAgICAgKiBvZiB1c2luZyB0aGlzIGFzc2VydGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHBzYWxtLWFzc2VydCA9c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uU3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChudWxsID09PSBcanNvbl9kZWNvZGUoJHZhbHVlKSAmJiBKU09OX0VSUk9SX05PTkUgIT09IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgdmFsaWQgSlNPTiBzdHJpbmcuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfSlNPTl9TVFJJTkcsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRC4KICAgICAqCiAgICAgKiBVc2VzIGNvZGUgZnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkfSB0aGF0IGlzIE1JVCBsaWNlbnNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXHByZWdfbWF0Y2goJy9eKD86dXJuOik/KD86dXVpZDopPyhceyk/WzAtOUEtRmEtZl17OH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17NH0tWzAtOUEtRmEtZl17MTJ9KD8oMSlcfSkkL0QnLCAkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiBpcyBub3QgYSB2YWxpZCBVVUlELicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX1VVSUQsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FLjE2NAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGUxNjQoJHZhbHVlLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFccHJlZ19tYXRjaCgnL15cKz9bMS05XVxkezEsMTR9JC9EJywgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgaXMgbm90IGEgdmFsaWQgRTE2NC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9FMTY0LCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNvdW50IG9mIGNvdW50YWJsZSBpcyBlcXVhbCB0byBjb3VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl8Q291bnRhYmxlfFJlc291cmNlQnVuZGxlfFNpbXBsZVhNTEVsZW1lbnQgJGNvdW50YWJsZQogICAgICogQHBhcmFtIGludCAkY291bnQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvdW50KCRjb3VudGFibGUsICRjb3VudCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkY291bnQgIT09IFxjb3VudCgkY291bnRhYmxlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0xpc3QgZG9lcyBub3QgY29udGFpbiBleGFjdGx5ICVkIGVsZW1lbnRzICglZCBnaXZlbikuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkY291bnQpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoXGNvdW50KCRjb3VudGFibGUpKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNvdW50YWJsZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9DT1VOVCwgJHByb3BlcnR5UGF0aCwgWydjb3VudCcgPT4gJGNvdW50XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBsZWFzdCAkY291bnQgZWxlbWVudHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fENvdW50YWJsZXxSZXNvdXJjZUJ1bmRsZXxTaW1wbGVYTUxFbGVtZW50ICRjb3VudGFibGUKICAgICAqIEBwYXJhbSBpbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbkNvdW50KCRjb3VudGFibGUsICRjb3VudCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkY291bnQgPiBcY291bnQoJGNvdW50YWJsZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdMaXN0IHNob3VsZCBoYXZlIGF0IGxlYXN0ICVkIGVsZW1lbnRzLCBidXQgaGFzICVkIGVsZW1lbnRzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNvdW50KSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KFxjb3VudCgkY291bnRhYmxlKSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRjb3VudGFibGUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTUlOX0NPVU5ULCAkcHJvcGVydHlQYXRoLCBbJ2NvdW50JyA9PiAkY291bnRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IG1vc3QgJGNvdW50IGVsZW1lbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxDb3VudGFibGV8UmVzb3VyY2VCdW5kbGV8U2ltcGxlWE1MRWxlbWVudCAkY291bnRhYmxlCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXhDb3VudCgkY291bnRhYmxlLCAkY291bnQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJGNvdW50IDwgXGNvdW50KCRjb3VudGFibGUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnTGlzdCBzaG91bGQgaGF2ZSBhdCBtb3N0ICVkIGVsZW1lbnRzLCBidXQgaGFzICVkIGVsZW1lbnRzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJGNvdW50KSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KFxjb3VudCgkY291bnRhYmxlKSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCRjb3VudGFibGUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfTUFYX0NPVU5ULCAkcHJvcGVydHlQYXRoLCBbJ2NvdW50JyA9PiAkY291bnRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogc3RhdGljIGNhbGwgaGFuZGxlciB0byBpbXBsZW1lbnQ6CiAgICAgKiAgLSAibnVsbCBvciBhc3NlcnRpb24iIGRlbGVnYXRpb24KICAgICAqICAtICJhbGwiIGRlbGVnYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8bWl4ZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fY2FsbFN0YXRpYygkbWV0aG9kLCAkYXJncykKICAgIHsKICAgICAgICBpZiAoMCA9PT0gXHN0cnBvcygkbWV0aG9kLCAnbnVsbE9yJykpIHsKICAgICAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygwLCAkYXJncykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdNaXNzaW5nIHRoZSBmaXJzdCBhcmd1bWVudC4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG51bGwgPT09ICRhcmdzWzBdKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1ldGhvZCA9IFxzdWJzdHIoJG1ldGhvZCwgNik7CgogICAgICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFtcZ2V0X2NhbGxlZF9jbGFzcygpLCAkbWV0aG9kXSwgJGFyZ3MpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgPT09IFxzdHJwb3MoJG1ldGhvZCwgJ2FsbCcpKSB7CiAgICAgICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoMCwgJGFyZ3MpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignTWlzc2luZyB0aGUgZmlyc3QgYXJndW1lbnQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYzo6aXNUcmF2ZXJzYWJsZSgkYXJnc1swXSk7CgogICAgICAgICAgICAkbWV0aG9kID0gXHN1YnN0cigkbWV0aG9kLCAzKTsKICAgICAgICAgICAgJHZhbHVlcyA9IFxhcnJheV9zaGlmdCgkYXJncyk7CiAgICAgICAgICAgICRjYWxsZWRDbGFzcyA9IFxnZXRfY2FsbGVkX2NsYXNzKCk7CgogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAgICAgXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskY2FsbGVkQ2xhc3MsICRtZXRob2RdLCBcYXJyYXlfbWVyZ2UoWyR2YWx1ZV0sICRhcmdzKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ05vIGFzc2VydGlvbiBBc3NlcnRpb24jJy4kbWV0aG9kLicgZXhpc3RzLicpOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWVzIGFycmF5IGhhcyBldmVyeSBjaG9pY2UgYXMga2V5IGFuZCB0aGF0IHRoaXMgY2hvaWNlIGhhcyBjb250ZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hvaWNlc05vdEVtcHR5KGFycmF5ICR2YWx1ZXMsIGFycmF5ICRjaG9pY2VzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpub3RFbXB0eSgkdmFsdWVzLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIGZvcmVhY2ggKCRjaG9pY2VzIGFzICRjaG9pY2UpIHsKICAgICAgICAgICAgc3RhdGljOjpub3RFbXB0eUtleSgkdmFsdWVzLCAkY2hvaWNlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgdGhhdCB0aGUgbmFtZWQgbWV0aG9kIGlzIGRlZmluZWQgaW4gdGhlIHByb3ZpZGVkIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRvYmplY3QKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWV0aG9kRXhpc3RzKCR2YWx1ZSwgJG9iamVjdCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6aXNPYmplY3QoJG9iamVjdCwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICBpZiAoIVxtZXRob2RfZXhpc3RzKCRvYmplY3QsICR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdFeHBlY3RlZCAiJXMiIGRvZXMgbm90IGV4aXN0IGluIHByb3ZpZGVkIG9iamVjdC4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9NRVRIT0QsICRwcm9wZXJ0eVBhdGgsIFsnb2JqZWN0JyA9PiBcZ2V0X2NsYXNzKCRvYmplY3QpXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYW4gb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAcHNhbG0tYXNzZXJ0IG9iamVjdCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzT2JqZWN0KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX29iamVjdCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnUHJvdmlkZWQgIiVzIiBpcyBub3QgYSB2YWxpZCBvYmplY3QuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfT0JKRUNULCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIGdpdmVuIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbGltaXQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVzc1RoYW4oJHZhbHVlLCAkbGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID49ICRsaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbm90IGxlc3MgdGhhbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsaW1pdCkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9MRVNTLCAkcHJvcGVydHlQYXRoLCBbJ2xpbWl0JyA9PiAkbGltaXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbGltaXQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVzc09yRXF1YWxUaGFuKCR2YWx1ZSwgJGxpbWl0LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA+ICRsaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbm90IGxlc3Mgb3IgZXF1YWwgdGhhbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsaW1pdCkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9MRVNTX09SX0VRVUFMLCAkcHJvcGVydHlQYXRoLCBbJ2xpbWl0JyA9PiAkbGltaXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGdpdmVuIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbGltaXQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ3JlYXRlclRoYW4oJHZhbHVlLCAkbGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHZhbHVlIDw9ICRsaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbm90IGdyZWF0ZXIgdGhhbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsaW1pdCkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9HUkVBVEVSLCAkcHJvcGVydHlQYXRoLCBbJ2xpbWl0JyA9PiAkbGltaXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIGdpdmVuIGxpbWl0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkbGltaXQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ3JlYXRlck9yRXF1YWxUaGFuKCR2YWx1ZSwgJGxpbWl0LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA8ICRsaW1pdCkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgbm90IGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsaW1pdCkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9HUkVBVEVSX09SX0VRVUFMLCAkcHJvcGVydHlQYXRoLCBbJ2xpbWl0JyA9PiAkbGltaXRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gYSBsb3dlciBsaW1pdCwgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbiB1cHBlciBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGxvd2VyTGltaXQKICAgICAqIEBwYXJhbSBtaXhlZCAkdXBwZXJMaW1pdAogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eVBhdGgKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJldHdlZW4oJHZhbHVlLCAkbG93ZXJMaW1pdCwgJHVwcGVyTGltaXQsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJGxvd2VyTGltaXQgPiAkdmFsdWUgfHwgJHZhbHVlID4gJHVwcGVyTGltaXQpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQcm92aWRlZCAiJXMiIGlzIG5laXRoZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIlcyIgbm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsb3dlckxpbWl0KSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR1cHBlckxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0JFVFdFRU4sICRwcm9wZXJ0eVBhdGgsIFsnbG93ZXInID0+ICRsb3dlckxpbWl0LCAndXBwZXInID0+ICR1cHBlckxpbWl0XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gYW4gdXBwZXIgbGltaXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIG1peGVkICRsb3dlckxpbWl0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHVwcGVyTGltaXQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlQYXRoCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiZXR3ZWVuRXhjbHVzaXZlKCR2YWx1ZSwgJGxvd2VyTGltaXQsICR1cHBlckxpbWl0LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCRsb3dlckxpbWl0ID49ICR2YWx1ZSB8fCAkdmFsdWUgPj0gJHVwcGVyTGltaXQpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQcm92aWRlZCAiJXMiIGlzIG5laXRoZXIgZ3JlYXRlciB0aGFuICIlcyIgbm9yIGxlc3MgdGhhbiAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRsb3dlckxpbWl0KSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR1cHBlckxpbWl0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0JFVFdFRU5fRVhDTFVTSVZFLCAkcHJvcGVydHlQYXRoLCBbJ2xvd2VyJyA9PiAkbG93ZXJMaW1pdCwgJ3VwcGVyJyA9PiAkdXBwZXJMaW1pdF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXh0ZW5zaW9uTG9hZGVkKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGV4dGVuc2lvbl9sb2FkZWQoJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0V4dGVuc2lvbiAiJXMiIGlzIHJlcXVpcmVkLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0VYVEVOU0lPTiwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IGRhdGUgaXMgdmFsaWQgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBmb3JtYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBzdXBwb3J0cyBhbGwgb2YgdGhlIG9wdGlvbnMgZGF0ZSgpLCBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmc6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgTiwgdywgVywgdCwgTCwgbywgQiwgYSwgQSwgZywgaCwgSSwgTywgUCwgWiwgYywgcgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9mdW5jdGlvbi5kYXRlLnBocCNyZWZzZWN0MS1mdW5jdGlvbi5kYXRlLXBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkYXRlKCR2YWx1ZSwgJGZvcm1hdCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIHN0YXRpYzo6c3RyaW5nKCRmb3JtYXQsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgJGRhdGVUaW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJyEnLiRmb3JtYXQsICR2YWx1ZSk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJGRhdGVUaW1lIHx8ICR2YWx1ZSAhPT0gJGRhdGVUaW1lLT5mb3JtYXQoJGZvcm1hdCkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdEYXRlICIlcyIgaXMgaW52YWxpZCBvciBkb2VzIG5vdCBtYXRjaCBmb3JtYXQgIiVzIi4nKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2YWx1ZSksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkZm9ybWF0KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0RBVEUsICRwcm9wZXJ0eVBhdGgsIFsnZm9ybWF0JyA9PiAkZm9ybWF0XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIG9yIGEgY2xhc3MgdGhhdCBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvYmplY3RPckNsYXNzKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX29iamVjdCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHN0YXRpYzo6Y2xhc3NFeGlzdHMoJHZhbHVlLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0eSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHkKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvcGVydHlFeGlzdHMoJHZhbHVlLCAkcHJvcGVydHksICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6Om9iamVjdE9yQ2xhc3MoJHZhbHVlKTsKCiAgICAgICAgaWYgKCFccHJvcGVydHlfZXhpc3RzKCR2YWx1ZSwgJHByb3BlcnR5KSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ0NsYXNzICIlcyIgZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSAiJXMiLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCRwcm9wZXJ0eSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9QUk9QRVJUWSwgJHByb3BlcnR5UGF0aCwgWydwcm9wZXJ0eScgPT4gJHByb3BlcnR5XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgY2xhc3MsIGFuZCB0aGF0IHRoZSBwcm9wZXJ0aWVzIGFsbCBleGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByb3BlcnRpZXNFeGlzdCgkdmFsdWUsIGFycmF5ICRwcm9wZXJ0aWVzLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpvYmplY3RPckNsYXNzKCR2YWx1ZSk7CiAgICAgICAgc3RhdGljOjphbGxTdHJpbmcoJHByb3BlcnRpZXMsICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgJGludmFsaWRQcm9wZXJ0aWVzID0gW107CiAgICAgICAgZm9yZWFjaCAoJHByb3BlcnRpZXMgYXMgJHByb3BlcnR5KSB7CiAgICAgICAgICAgIGlmICghXHByb3BlcnR5X2V4aXN0cygkdmFsdWUsICRwcm9wZXJ0eSkpIHsKICAgICAgICAgICAgICAgICRpbnZhbGlkUHJvcGVydGllc1tdID0gJHByb3BlcnR5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJGludmFsaWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICAgICBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnQ2xhc3MgIiVzIiBkb2VzIG5vdCBoYXZlIHRoZXNlIHByb3BlcnRpZXM6ICVzLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KFxpbXBsb2RlKCcsICcsICRpbnZhbGlkUHJvcGVydGllcykpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfUFJPUEVSVFksICRwcm9wZXJ0eVBhdGgsIFsncHJvcGVydGllcycgPT4gJHByb3BlcnRpZXNdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IGNvbXBhcmlzb24gb2YgdHdvIHZlcnNpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24xCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvcgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjIKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyc2lvbigkdmVyc2lvbjEsICRvcGVyYXRvciwgJHZlcnNpb24yLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpub3RFbXB0eSgkb3BlcmF0b3IsICd2ZXJzaW9uQ29tcGFyZSBvcGVyYXRvciBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5LicpOwoKICAgICAgICBpZiAodHJ1ZSAhPT0gXHZlcnNpb25fY29tcGFyZSgkdmVyc2lvbjEsICR2ZXJzaW9uMiwgJG9wZXJhdG9yKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZlcnNpb24gIiVzIiBpcyBub3QgIiVzIiB2ZXJzaW9uICIlcyIuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmVyc2lvbjEpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJG9wZXJhdG9yKSwKICAgICAgICAgICAgICAgIHN0YXRpYzo6c3RyaW5naWZ5KCR2ZXJzaW9uMikKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2ZXJzaW9uMSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9WRVJTSU9OLCAkcHJvcGVydHlQYXRoLCBbJ29wZXJhdG9yJyA9PiAkb3BlcmF0b3IsICd2ZXJzaW9uJyA9PiAkdmVyc2lvbjJdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IG9uIFBIUCB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wZXJhdG9yCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZlcnNpb24KICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGhwVmVyc2lvbigkb3BlcmF0b3IsICR2ZXJzaW9uLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjpkZWZpbmVkKCdQSFBfVkVSU0lPTicpOwoKICAgICAgICByZXR1cm4gc3RhdGljOjp2ZXJzaW9uKFBIUF9WRVJTSU9OLCAkb3BlcmF0b3IsICR2ZXJzaW9uLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIGFuZCBhIHNwZWNpZmljIHZlcnNpb24gaXMgaW5zdGFsbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4dGVuc2lvbgogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSBtaXhlZCAkdmVyc2lvbgogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRlbnNpb25WZXJzaW9uKCRleHRlbnNpb24sICRvcGVyYXRvciwgJHZlcnNpb24sICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmV4dGVuc2lvbkxvYWRlZCgkZXh0ZW5zaW9uLCAkbWVzc2FnZSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiBzdGF0aWM6OnZlcnNpb24oXHBocHZlcnNpb24oJGV4dGVuc2lvbiksICRvcGVyYXRvciwgJHZlcnNpb24sICRtZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgY2FsbGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb3BlcnR5UGF0aAogICAgICoKICAgICAqIEBwc2FsbS1hc3NlcnQgY2FsbGFibGUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0NhbGxhYmxlKCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICghXGlzX2NhbGxhYmxlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdQcm92aWRlZCAiJXMiIGlzIG5vdCBhIGNhbGxhYmxlLicpLAogICAgICAgICAgICAgICAgc3RhdGljOjpzdHJpbmdpZnkoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJHZhbHVlLCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0NBTExBQkxFLCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIHZhbGlkIGFjY29yZGluZyB0byBhIGNhbGxiYWNrLgogICAgICoKICAgICAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAgdGhlIGFzc2VydGlvbiB3aWxsIGZhaWwuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXRpc2Z5KCR2YWx1ZSwgJGNhbGxiYWNrLCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljOjppc0NhbGxhYmxlKCRjYWxsYmFjayk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gXGNhbGxfdXNlcl9mdW5jKCRjYWxsYmFjaywgJHZhbHVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAgICAgc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1Byb3ZpZGVkICIlcyIgaXMgaW52YWxpZCBhY2NvcmRpbmcgdG8gY3VzdG9tIHJ1bGUuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfU0FUSVNGWSwgJHByb3BlcnR5UGF0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzCiAgICAgKiAodXNpbmcgaW5wdXRfZmlsdGVyL0ZJTFRFUl9WQUxJREFURV9JUCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZwogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9maWx0ZXIuZmlsdGVycy5mbGFncy5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpcCgkdmFsdWUsICRmbGFnID0gbnVsbCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6c3RyaW5nKCR2YWx1ZSwgJG1lc3NhZ2UsICRwcm9wZXJ0eVBhdGgpOwogICAgICAgIGlmICgkZmxhZyA9PT0gbnVsbCkgewogICAgICAgICAgICAkZmlsdGVyVmFyUmVzdWx0ID0gXGZpbHRlcl92YXIoJHZhbHVlLCBGSUxURVJfVkFMSURBVEVfSVApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRmaWx0ZXJWYXJSZXN1bHQgPSBcZmlsdGVyX3ZhcigkdmFsdWUsIEZJTFRFUl9WQUxJREFURV9JUCwgJGZsYWcpOwogICAgICAgIH0KICAgICAgICBpZiAoISRmaWx0ZXJWYXJSZXN1bHQpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZigKICAgICAgICAgICAgICAgIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIElQIGFkZHJlc3MuJyksCiAgICAgICAgICAgICAgICBzdGF0aWM6OnN0cmluZ2lmeSgkdmFsdWUpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHRocm93IHN0YXRpYzo6Y3JlYXRlRXhjZXB0aW9uKCR2YWx1ZSwgJG1lc3NhZ2UsIHN0YXRpYzo6SU5WQUxJRF9JUCwgJHByb3BlcnR5UGF0aCwgWydmbGFnJyA9PiAkZmxhZ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IGFkZHJlc3MKICAgICAqICh1c2luZyBpbnB1dF9maWx0ZXIvRklMVEVSX1ZBTElEQVRFX0lQKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIGludHxudWxsICRmbGFnCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2ZpbHRlci5maWx0ZXJzLmZsYWdzLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlwdjQoJHZhbHVlLCAkZmxhZyA9IG51bGwsICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICBzdGF0aWM6OmlwKCR2YWx1ZSwgJGZsYWcgfCBGSUxURVJfRkxBR19JUFY0LCBzdGF0aWM6OmdlbmVyYXRlTWVzc2FnZSgkbWVzc2FnZSA/OiAnVmFsdWUgIiVzIiB3YXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MuJyksICRwcm9wZXJ0eVBhdGgpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjYgYWRkcmVzcwogICAgICogKHVzaW5nIGlucHV0X2ZpbHRlci9GSUxURVJfVkFMSURBVEVfSVApLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGZsYWcKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZmlsdGVyLmZpbHRlcnMuZmxhZ3MucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXB2NigkdmFsdWUsICRmbGFnID0gbnVsbCwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIHN0YXRpYzo6aXAoJHZhbHVlLCAkZmxhZyB8IEZJTFRFUl9GTEFHX0lQVjYsIHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIHdhcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcy4nKSwgJHByb3BlcnR5UGF0aCk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgYSBjb25zdGFudCBpcyBkZWZpbmVkLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkY29uc3RhbnQKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQoJGNvbnN0YW50LCAkbWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFcZGVmaW5lZCgkY29uc3RhbnQpKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoc3RhdGljOjpnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UgPzogJ1ZhbHVlICIlcyIgZXhwZWN0ZWQgdG8gYmUgYSBkZWZpbmVkIGNvbnN0YW50LicpLCAkY29uc3RhbnQpOwoKICAgICAgICAgICAgdGhyb3cgc3RhdGljOjpjcmVhdGVFeGNlcHRpb24oJGNvbnN0YW50LCAkbWVzc2FnZSwgc3RhdGljOjpJTlZBTElEX0NPTlNUQU5ULCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQXNzZXJ0IHRoYXQgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGJhc2U2NCBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmd8Y2FsbGFibGV8bnVsbCAkbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmFzZTY0KCR2YWx1ZSwgJG1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gXGJhc2U2NF9kZWNvZGUoJHZhbHVlLCB0cnVlKSkgewogICAgICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKHN0YXRpYzo6Z2VuZXJhdGVNZXNzYWdlKCRtZXNzYWdlID86ICdWYWx1ZSAiJXMiIGlzIG5vdCBhIHZhbGlkIGJhc2U2NCBzdHJpbmcuJyksICR2YWx1ZSk7CgogICAgICAgICAgICB0aHJvdyBzdGF0aWM6OmNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCBzdGF0aWM6OklOVkFMSURfQkFTRTY0LCAkcHJvcGVydHlQYXRoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGhhbmRsZXMgYnVpbGRpbmcgdGhlIGFzc2VydGlvbiBmYWlsdXJlIGV4Y2VwdGlvbnMuCiAgICAgKiBUaGV5IGFyZSByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIHNvIHRoYXQgdGhlIHN0YWNrIHRyYWNlIHN0aWxsIHNob3dzCiAgICAgKiB0aGUgYXNzZXJ0aW9ucyBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUV4Y2VwdGlvbigkdmFsdWUsICRtZXNzYWdlLCAkY29kZSwgJHByb3BlcnR5UGF0aCA9IG51bGwsIGFycmF5ICRjb25zdHJhaW50cyA9IFtdKQogICAgewogICAgICAgICRleGNlcHRpb25DbGFzcyA9IHN0YXRpYzo6JGV4Y2VwdGlvbkNsYXNzOwoKICAgICAgICByZXR1cm4gbmV3ICRleGNlcHRpb25DbGFzcygkbWVzc2FnZSwgJGNvZGUsICRwcm9wZXJ0eVBhdGgsICR2YWx1ZSwgJGNvbnN0cmFpbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1ha2UgYSBzdHJpbmcgdmVyc2lvbiBvZiBhIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzdHJpbmdpZnkoJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXR0eXBlKCR2YWx1ZSk7CgogICAgICAgIGlmIChcaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdmFsdWUgPyAnPFRSVUU+JyA6ICc8RkFMU0U+JzsKICAgICAgICB9IGVsc2VpZiAoXGlzX3NjYWxhcigkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWwgPSAoc3RyaW5nKSR2YWx1ZTsKCiAgICAgICAgICAgIGlmIChcbWJfc3RybGVuKCR2YWwpID4gMTAwKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gXG1iX3N1YnN0cigkdmFsLCAwLCA5NykuJy4uLic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHQgPSAkdmFsOwogICAgICAgIH0gZWxzZWlmIChcaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJzxBUlJBWT4nOwogICAgICAgIH0gZWxzZWlmIChcaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFxnZXRfY2xhc3MoJHZhbHVlKTsKICAgICAgICB9IGVsc2VpZiAoXGlzX3Jlc291cmNlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFxnZXRfcmVzb3VyY2VfdHlwZSgkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmIChudWxsID09PSAkdmFsdWUpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICc8TlVMTD4nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJG1lc3NhZ2UKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZU1lc3NhZ2UoJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoXGlzX2NhbGxhYmxlKCRtZXNzYWdlKSkgewogICAgICAgICAgICAkdHJhY2VzID0gXGRlYnVnX2JhY2t0cmFjZSgwKTsKCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gW107CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHJlZmxlY3Rpb24gPSBuZXcgUmVmbGVjdGlvbkNsYXNzKCR0cmFjZXNbMV1bJ2NsYXNzJ10pOwogICAgICAgICAgICAgICAgJG1ldGhvZCA9ICRyZWZsZWN0aW9uLT5nZXRNZXRob2QoJHRyYWNlc1sxXVsnZnVuY3Rpb24nXSk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkbWV0aG9kLT5nZXRQYXJhbWV0ZXJzKCkgYXMgJGluZGV4ID0+ICRwYXJhbWV0ZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJ21lc3NhZ2UnICE9PSAkcGFyYW1ldGVyLT5nZXROYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJHBhcmFtZXRlci0+Z2V0TmFtZSgpXSA9IFxhcnJheV9rZXlfZXhpc3RzKCRpbmRleCwgJHRyYWNlc1sxXVsnYXJncyddKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAkdHJhY2VzWzFdWydhcmdzJ11bJGluZGV4XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkcGFyYW1ldGVyLT5nZXREZWZhdWx0VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJzo6YXNzZXJ0aW9uJ10gPSBcc3ByaW50ZignJXMlcyVzJywgJHRyYWNlc1sxXVsnY2xhc3MnXSwgJHRyYWNlc1sxXVsndHlwZSddLCAkdHJhY2VzWzFdWydmdW5jdGlvbiddKTsKCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9IFxjYWxsX3VzZXJfZnVuY19hcnJheSgkbWVzc2FnZSwgWyRwYXJhbWV0ZXJzXSk7CiAgICAgICAgICAgIH0gLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBcc3ByaW50ZignVW5hYmxlIHRvIGdlbmVyYXRlIG1lc3NhZ2UgOiAlcycsICRleGNlcHRpb24tPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0gLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHJpbmcpJG1lc3NhZ2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/AssertionChain.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIExvZ2ljRXhjZXB0aW9uOwoKLyoqCiAqIENoYWluaW5nIGJ1aWxkZXIgZm9yIGFzc2VydGlvbnMuCiAqCiAqIEBhdXRob3IgQmVuamFtaW4gRWJlcmxlaSA8a29udGFrdEBiZWJlcmxlaS5kZT4KICoKICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBhbG51bShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFscGhhbnVtZXJpYy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBiYXNlNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgYmFzZTY0IHN0cmluZy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBiZXR3ZWVuKG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFuIHVwcGVyIGxpbWl0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGJldHdlZW5FeGNsdXNpdmUobWl4ZWQgJGxvd2VyTGltaXQsIG1peGVkICR1cHBlckxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gYW4gdXBwZXIgbGltaXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gYmV0d2Vlbkxlbmd0aChpbnQgJG1pbkxlbmd0aCwgaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGxlbmd0aCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGxlbmd0aHMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gYm9vbGVhbihzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHBocCBib29sZWFuLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGNob2ljZShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGNob2ljZXNOb3RFbXB0eShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZXMgYXJyYXkgaGFzIGV2ZXJ5IGNob2ljZSBhcyBrZXkgYW5kIHRoYXQgdGhpcyBjaG9pY2UgaGFzIGNvbnRlbnQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gY2xhc3NFeGlzdHMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGNvbnRhaW5zKHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGNvdW50KGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50IG9mIGNvdW50YWJsZSBpcyBlcXVhbCB0byBjb3VudC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBkYXRlKHN0cmluZyAkZm9ybWF0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGRhdGUgaXMgdmFsaWQgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBmb3JtYXQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZGVmaW5lZChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgY29uc3RhbnQgaXMgZGVmaW5lZC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBkaWdpdChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIFZhbGlkYXRlcyBpZiBhbiBpbnRlZ2VyIG9yIGludGVnZXJpc2ggaXMgYSBkaWdpdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBkaXJlY3Rvcnkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGRpcmVjdG9yeSBleGlzdHMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZTE2NChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBFMTY0IFBob25lIE51bWJlci4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBlbWFpbChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGVtYWlsIGFkZHJlc3MgKHVzaW5nIGlucHV0X2ZpbHRlci9GSUxURVJfVkFMSURBVEVfRU1BSUwpLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGVuZHNXaXRoKHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBlbmRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBlcShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIGVxdWFsICh1c2luZyA9PSkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZXFBcnJheVN1YnNldChtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBhcnJheSBjb250YWlucyB0aGUgc3Vic2V0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGV4dGVuc2lvbkxvYWRlZChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGV4dGVuc2lvbiBpcyBsb2FkZWQuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZXh0ZW5zaW9uVmVyc2lvbihzdHJpbmcgJG9wZXJhdG9yLCBtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBleHRlbnNpb24gaXMgbG9hZGVkIGFuZCBhIHNwZWNpZmljIHZlcnNpb24gaXMgaW5zdGFsbGVkLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGZhbHNlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gRmFsc2UuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZmlsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZmlsZSBleGlzdHMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gZmxvYXQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBmbG9hdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBncmVhdGVyT3JFcXVhbFRoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBncmVhdGVyVGhhbihtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGltcGxlbWVudHNJbnRlcmZhY2Uoc3RyaW5nICRpbnRlcmZhY2VOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjbGFzcyBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2UuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaW5BcnJheShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIEFzc2VydGlvbjo6Y2hvaWNlKCkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaW50ZWdlcihzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGludGVnZXIuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaW50ZWdlcmlzaChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGEgcGhwIGludGVnZXInaXNoLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGludGVyZmFjZUV4aXN0cyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBpbnRlcmZhY2UgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlwKGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gaXB2NChpbnQgJGZsYWcgPSBudWxsLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIElQdjQgYWRkcmVzcy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpcHY2KGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NiBhZGRyZXNzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzQXJyYXkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc0FycmF5QWNjZXNzaWJsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5IG9yIGFuIGFycmF5LWFjY2Vzc2libGUgb2JqZWN0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzQ2FsbGFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNhbGxhYmxlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzQ291bnRhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgY291bnRhYmxlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzSW5zdGFuY2VPZihzdHJpbmcgJGNsYXNzTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzSnNvblN0cmluZyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBqc29uIHN0cmluZy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBpc09iamVjdChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYW4gb2JqZWN0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzUmVzb3VyY2Uoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHJlc291cmNlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIGlzVHJhdmVyc2FibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhIHRyYXZlcnNhYmxlIG9iamVjdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBrZXlFeGlzdHMoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4ga2V5SXNzZXQoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBleGlzdHMgaW4gYW4gYXJyYXkvYXJyYXktYWNjZXNzaWJsZSBvYmplY3QgdXNpbmcgaXNzZXQoKS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBrZXlOb3RFeGlzdHMoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbiBhcnJheS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBsZW5ndGgoaW50ICRsZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGhhcyBhIGdpdmVuIGxlbmd0aC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBsZXNzT3JFcXVhbFRoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGxlc3Mgb3IgZXF1YWwgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBsZXNzVGhhbihtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1heChtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBudW1iZXIgaXMgc21hbGxlciBhcyBhIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1heENvdW50KGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50YWJsZSBoYXZlIGF0IG1vc3QgJGNvdW50IGVsZW1lbnRzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1heExlbmd0aChpbnQgJG1heExlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgdmFsdWUgaXMgbm90IGxvbmdlciB0aGFuICRtYXhMZW5ndGggY2hhcnMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbWV0aG9kRXhpc3RzKG1peGVkICRvYmplY3QsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBuYW1lZCBtZXRob2QgaXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZWQgb2JqZWN0LgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG1pbihtaXhlZCAkbWluVmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSB2YWx1ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgYSBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBtaW5Db3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBsZWFzdCAkY291bnQgZWxlbWVudHMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbWluTGVuZ3RoKGludCAkbWluTGVuZ3RoLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IGEgc3RyaW5nIGlzIGF0IGxlYXN0ICRtaW5MZW5ndGggY2hhcnMgbG9uZy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub0NvbnRlbnQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBlbXB0eS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RCbGFuayhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBibGFuay4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RDb250YWlucyhzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgZG9lcyBub3QgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RFbXB0eShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBlbXB0eS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RFbXB0eUtleShzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBlbXB0eS4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RFcShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbCAodXNpbmcgPT0pLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG5vdEluQXJyYXkoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbm90IGluIGFycmF5IG9mIGNob2ljZXMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gbm90SXNJbnN0YW5jZU9mKHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG5vdE51bGwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgbnVsbC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RSZWdleChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYSByZWdleC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBub3RTYW1lKG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lICh1c2luZyA9PT0pLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG51bGwoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBudWxsLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG51bWVyaWMoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBudW1lcmljLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIG9iamVjdE9yQ2xhc3Moc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LCBvciBhIGNsYXNzIHRoYXQgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHBocFZlcnNpb24obWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IG9uIFBIUCB2ZXJzaW9uLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHByb3BlcnRpZXNFeGlzdChhcnJheSAkcHJvcGVydGllcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydGllcyBhbGwgZXhpc3QuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gcHJvcGVydHlFeGlzdHMoc3RyaW5nICRwcm9wZXJ0eSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydHkgZXhpc3RzLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHJhbmdlKG1peGVkICRtaW5WYWx1ZSwgbWl4ZWQgJG1heFZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGluIHJhbmdlIG9mIG51bWJlcnMuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gcmVhZGFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIHJlYWRhYmxlLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHJlZ2V4KHN0cmluZyAkcGF0dGVybiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBtYXRjaGVzIGEgcmVnZXguCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gc2FtZShtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lICh1c2luZyA9PT0pLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHNhdGlzZnkoY2FsbGFibGUgJGNhbGxiYWNrLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyB2YWxpZCBhY2NvcmRpbmcgdG8gYSBjYWxsYmFjay4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBzY2FsYXIoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIFBIUCBzY2FsYXIuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gc3RhcnRzV2l0aChzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgc3RhcnRzIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBzdHJpbmcoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHN0cmluZy4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiBzdWJjbGFzc09mKHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHN1YmNsYXNzIG9mIGdpdmVuIGNsYXNzLW5hbWUuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gdHJ1ZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBib29sZWFuIFRydWUuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gdW5pcXVlVmFsdWVzKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWVzIGluIGFycmF5IGFyZSB1bmlxdWUgKHVzaW5nIHN0cmljdCBlcXVhbGl0eSkuCiAqIEBtZXRob2QgQXNzZXJ0aW9uQ2hhaW4gdXJsKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gVVJMLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHV1aWQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVVJRC4KICogQG1ldGhvZCBBc3NlcnRpb25DaGFpbiB2ZXJzaW9uKHN0cmluZyAkb3BlcmF0b3IsIHN0cmluZyAkdmVyc2lvbjIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IGNvbXBhcmlzb24gb2YgdHdvIHZlcnNpb25zLgogKiBAbWV0aG9kIEFzc2VydGlvbkNoYWluIHdyaXRlYWJsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgd3JpdGVhYmxlLgogKi8KY2xhc3MgQXNzZXJ0aW9uQ2hhaW4KewogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8Y2FsbGFibGV8bnVsbAogICAgICovCiAgICBwcml2YXRlICRkZWZhdWx0TWVzc2FnZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGVmYXVsdFByb3BlcnR5UGF0aDsKCiAgICAvKioKICAgICAqIFJldHVybiBlYWNoIGFzc2VydGlvbiBhcyBhbHdheXMgdmFsaWQuCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGFsd2F5c1ZhbGlkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGFzc2VydGlvbiBvbiBldmVyeSBlbGVtZW50IG9mIGFycmF5IG9yIHRyYXZlcnNhYmxlLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRhbGwgPSBmYWxzZTsKCiAgICAvKiogQHZhciBzdHJpbmd8QXNzZXJ0aW9uIENsYXNzIHRvIHVzZSBmb3IgYXNzZXJ0aW9uIGNhbGxzICovCiAgICBwcml2YXRlICRhc3NlcnRpb25DbGFzc05hbWUgPSAnQXNzZXJ0XEFzc2VydGlvbic7CgogICAgLyoqCiAgICAgKiBBc3NlcnRpb25DaGFpbiBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJGRlZmF1bHRNZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGggPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgICAgICAkdGhpcy0+ZGVmYXVsdE1lc3NhZ2UgPSAkZGVmYXVsdE1lc3NhZ2U7CiAgICAgICAgJHRoaXMtPmRlZmF1bHRQcm9wZXJ0eVBhdGggPSAkZGVmYXVsdFByb3BlcnR5UGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGwgYXNzZXJ0aW9uIG9uIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBjaGFpbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2ROYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kTmFtZSwgJGFyZ3MpOiBBc3NlcnRpb25DaGFpbgogICAgewogICAgICAgIGlmICh0cnVlID09PSAkdGhpcy0+YWx3YXlzVmFsaWQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG1ldGhvZCA9IG5ldyBcUmVmbGVjdGlvbk1ldGhvZCgkdGhpcy0+YXNzZXJ0aW9uQ2xhc3NOYW1lLCAkbWV0aG9kTmFtZSk7CiAgICAgICAgfSBjYXRjaCAoXFJlZmxlY3Rpb25FeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkFzc2VydGlvbiAnIi4kbWV0aG9kTmFtZS4iJyBkb2VzIG5vdCBleGlzdC4iKTsKICAgICAgICB9CgogICAgICAgIFxhcnJheV91bnNoaWZ0KCRhcmdzLCAkdGhpcy0+dmFsdWUpOwogICAgICAgICRwYXJhbXMgPSAkbWV0aG9kLT5nZXRQYXJhbWV0ZXJzKCk7CgogICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGlkeCA9PiAkcGFyYW0pIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmdzWyRpZHhdKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN3aXRjaCAoJHBhcmFtLT5nZXROYW1lKCkpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOgogICAgICAgICAgICAgICAgICAgICRhcmdzWyRpZHhdID0gJHRoaXMtPmRlZmF1bHRNZXNzYWdlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncHJvcGVydHlQYXRoJzoKICAgICAgICAgICAgICAgICAgICAkYXJnc1skaWR4XSA9ICR0aGlzLT5kZWZhdWx0UHJvcGVydHlQYXRoOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmFsbCkgewogICAgICAgICAgICAkbWV0aG9kTmFtZSA9ICdhbGwnLiRtZXRob2ROYW1lOwogICAgICAgIH0KCiAgICAgICAgXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+YXNzZXJ0aW9uQ2xhc3NOYW1lLCAkbWV0aG9kTmFtZV0sICRhcmdzKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU3dpdGNoIGNoYWluIGludG8gdmFsaWRhdGlvbiBtb2RlIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogQXNzZXJ0aW9uQ2hhaW4KICAgIHsKICAgICAgICAkdGhpcy0+YWxsID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU3dpdGNoIGNoYWluIGludG8gbW9kZSBhbGxvd2luZyBudWxscywgaWdub3JpbmcgZnVydGhlciBhc3NlcnRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbnVsbE9yKCk6IEFzc2VydGlvbkNoYWluCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT52YWx1ZSkgewogICAgICAgICAgICAkdGhpcy0+YWx3YXlzVmFsaWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NOYW1lCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXNzZXJ0aW9uQ2xhc3NOYW1lKCRjbGFzc05hbWUpOiBBc3NlcnRpb25DaGFpbgogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkY2xhc3NOYW1lKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0V4Y2VwdGlvbiBjbGFzcyBuYW1lIG11c3QgYmUgcGFzc2VkIGFzIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoQXNzZXJ0aW9uOjpjbGFzcyAhPT0gJGNsYXNzTmFtZSAmJiAhXGlzX3N1YmNsYXNzX29mKCRjbGFzc05hbWUsIEFzc2VydGlvbjo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbigkY2xhc3NOYW1lLicgaXMgbm90IChhIHN1YmNsYXNzIG9mKSAnLkFzc2VydGlvbjo6Y2xhc3MpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFzc2VydGlvbkNsYXNzTmFtZSA9ICRjbGFzc05hbWU7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIFRocm93YWJsZTsKCmludGVyZmFjZSBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eVBhdGgoKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnN0cmFpbnRzKCk6IGFycmF5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKLyoqCiAqIFN0YXJ0IHZhbGlkYXRpb24gb24gYSB2YWx1ZSwgcmV0dXJucyB7QGxpbmsgQXNzZXJ0aW9uQ2hhaW59LgogKgogKiBUaGUgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCBzdGFydHMgYW4gYXNzZXJ0aW9uIGNoYWluCiAqIHRoYXQgaXMgaGFwcGVuaW5nIG9uIHRoZSBwYXNzZWQgdmFsdWUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoCiAqCiAqIEBleGFtcGxlCiAqCiAqICBcQXNzZXJ0XHRoYXQoJHZhbHVlKS0+bm90RW1wdHkoKS0+aW50ZWdlcigpOwogKiAgXEFzc2VydFx0aGF0KCR2YWx1ZSktPm51bGxPcigpLT5zdHJpbmcoKS0+c3RhcnRzV2l0aCgiRm9vIik7CiAqCiAqIFRoZSBhc3NlcnRpb24gY2hhaW4gY2FuIGJlIHN0YXRlZnVsLCB0aGF0IG1lYW5zIGJlIGNhcmVmdWwgd2hlbiB5b3UgcmV1c2UKICogaXQuIFlvdSBzaG91bGQgbmV2ZXIgcGFzcyBhcm91bmQgdGhlIGNoYWluLgogKi8KZnVuY3Rpb24gdGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGggPSBudWxsKTogQXNzZXJ0aW9uQ2hhaW4KewogICAgcmV0dXJuIEFzc2VydDo6dGhhdCgkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSwgJGRlZmF1bHRQcm9wZXJ0eVBhdGgpOwp9CgovKioKICogU3RhcnQgdmFsaWRhdGlvbiBvbiBhIHNldCBvZiB2YWx1ZXMsIHJldHVybnMge0BsaW5rIEFzc2VydGlvbkNoYWlufS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZXMKICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoCiAqLwpmdW5jdGlvbiB0aGF0QWxsKCR2YWx1ZXMsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsID9zdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGggPSBudWxsKTogQXNzZXJ0aW9uQ2hhaW4KewogICAgcmV0dXJuIEFzc2VydDo6dGhhdEFsbCgkdmFsdWVzLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKTsKfQoKLyoqCiAqIFN0YXJ0IHZhbGlkYXRpb24gYW5kIGFsbG93IE5VTEwsIHJldHVybnMge0BsaW5rIEFzc2VydGlvbkNoYWlufS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZQogKiBAcGFyYW0gc3RyaW5nfGNhbGxhYmxlfG51bGwgJGRlZmF1bHRNZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHRQcm9wZXJ0eVBhdGgKICoKICogQGRlcHJlY2F0ZWQgSW4gZmF2b3VyIG9mIEFzc2VydDo6dGhhdE51bGxPcigkdmFsdWUsICRkZWZhdWx0TWVzc2FnZSA9IG51bGwsICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCkKICovCmZ1bmN0aW9uIHRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UgPSBudWxsLCA/c3RyaW5nICRkZWZhdWx0UHJvcGVydHlQYXRoID0gbnVsbCk6IEFzc2VydGlvbkNoYWluCnsKICAgIHJldHVybiBBc3NlcnQ6OnRoYXROdWxsT3IoJHZhbHVlLCAkZGVmYXVsdE1lc3NhZ2UsICRkZWZhdWx0UHJvcGVydHlQYXRoKTsKfQoKLyoqCiAqIENyZWF0ZSBhIGxhenkgYXNzZXJ0aW9uIG9iamVjdC4KICovCmZ1bmN0aW9uIGxhenkoKTogTGF6eUFzc2VydGlvbgp7CiAgICByZXR1cm4gQXNzZXJ0OjpsYXp5KCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcHJvcGVydHlQYXRoOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkY29uc3RyYWludHM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJHZhbHVlID0gbnVsbCwgYXJyYXkgJGNvbnN0cmFpbnRzID0gW10pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUpOwoKICAgICAgICAkdGhpcy0+cHJvcGVydHlQYXRoID0gJHByb3BlcnR5UGF0aDsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICAgICAgJHRoaXMtPmNvbnN0cmFpbnRzID0gJGNvbnN0cmFpbnRzOwogICAgfQoKICAgIC8qKgogICAgICogVXNlciBjb250cm9sbGVkIHdheSB0byBkZWZpbmUgYSBzdWItcHJvcGVydHkgY2F1c2luZwogICAgICogdGhlIGZhaWx1cmUgb2YgYSBjdXJyZW50bHkgYXNzZXJ0ZWQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBVc2VmdWwgdG8gdHJhbnNwb3J0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yCiAgICAgKiBiYWNrIHRvIGhpZ2hlciBsYXllcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvcGVydHlQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb3BlcnR5UGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdmFsdWUgdGhhdCBjYXVzZWQgdGhlIGFzc2VydGlvbiB0byBmYWlsLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25zdHJhaW50cyB0aGF0IGFwcGxpZWQgdG8gdGhlIGZhaWxlZCBhc3NlcnRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdHJhaW50cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29uc3RyYWludHM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/LazyAssertion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKdXNlIExvZ2ljRXhjZXB0aW9uOwoKLyoqCiAqIENoYWluaW5nIGJ1aWxkZXIgZm9yIGxhenkgYXNzZXJ0aW9ucy4KICoKICogQGF1dGhvciBCZW5qYW1pbiBFYmVybGVpIDxrb250YWt0QGJlYmVybGVpLmRlPgogKgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYWxudW0oc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbHBoYW51bWVyaWMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBiYXNlNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgYmFzZTY0IHN0cmluZy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGJldHdlZW4obWl4ZWQgJGxvd2VyTGltaXQsIG1peGVkICR1cHBlckxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIGEgbG93ZXIgbGltaXQsIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW4gdXBwZXIgbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBiZXR3ZWVuRXhjbHVzaXZlKG1peGVkICRsb3dlckxpbWl0LCBtaXhlZCAkdXBwZXJMaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBhIGxvd2VyIGxpbWl0LCBhbmQgbGVzcyB0aGFuIGFuIHVwcGVyIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYmV0d2Vlbkxlbmd0aChpbnQgJG1pbkxlbmd0aCwgaW50ICRtYXhMZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGxlbmd0aCBpcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGxlbmd0aHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBib29sZWFuKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgcGhwIGJvb2xlYW4uCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBjaG9pY2UoYXJyYXkgJGNob2ljZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gYXJyYXkgb2YgY2hvaWNlcy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGNob2ljZXNOb3RFbXB0eShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZXMgYXJyYXkgaGFzIGV2ZXJ5IGNob2ljZSBhcyBrZXkgYW5kIHRoYXQgdGhpcyBjaG9pY2UgaGFzIGNvbnRlbnQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBjbGFzc0V4aXN0cyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjbGFzcyBleGlzdHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBjb250YWlucyhzdHJpbmcgJG5lZWRsZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgY29udGFpbnMgYSBzZXF1ZW5jZSBvZiBjaGFycy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGNvdW50KGludCAkY291bnQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIGNvdW50IG9mIGNvdW50YWJsZSBpcyBlcXVhbCB0byBjb3VudC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGRhdGUoc3RyaW5nICRmb3JtYXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZGF0ZSBpcyB2YWxpZCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGZvcm1hdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGRlZmluZWQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIGNvbnN0YW50IGlzIGRlZmluZWQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBkaWdpdChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIFZhbGlkYXRlcyBpZiBhbiBpbnRlZ2VyIG9yIGludGVnZXJpc2ggaXMgYSBkaWdpdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGRpcmVjdG9yeShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgZGlyZWN0b3J5IGV4aXN0cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGUxNjQoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgRTE2NCBQaG9uZSBOdW1iZXIuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBlbWFpbChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGVtYWlsIGFkZHJlc3MgKHVzaW5nIGlucHV0X2ZpbHRlci9GSUxURVJfVkFMSURBVEVfRU1BSUwpLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZW5kc1dpdGgoc3RyaW5nICRuZWVkbGUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgc3RyaW5nIGVuZHMgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZXEobWl4ZWQgJHZhbHVlMiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0d28gdmFsdWVzIGFyZSBlcXVhbCAodXNpbmcgPT0pLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZXFBcnJheVN1YnNldChtaXhlZCAkdmFsdWUyLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBhcnJheSBjb250YWlucyB0aGUgc3Vic2V0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gZXh0ZW5zaW9uTG9hZGVkKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGV4dGVuc2lvblZlcnNpb24oc3RyaW5nICRvcGVyYXRvciwgbWl4ZWQgJHZlcnNpb24sIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgZXh0ZW5zaW9uIGlzIGxvYWRlZCBhbmQgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIGluc3RhbGxlZC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGZhbHNlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gRmFsc2UuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBmaWxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgYSBmaWxlIGV4aXN0cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGZsb2F0KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgZmxvYXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBncmVhdGVyT3JFcXVhbFRoYW4obWl4ZWQgJGxpbWl0LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIERldGVybWluZXMgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBnaXZlbiBsaW1pdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGdyZWF0ZXJUaGFuKG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpbXBsZW1lbnRzSW50ZXJmYWNlKHN0cmluZyAkaW50ZXJmYWNlTmFtZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaW5BcnJheShhcnJheSAkY2hvaWNlcywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBpbiBhcnJheSBvZiBjaG9pY2VzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIEFzc2VydGlvbjo6Y2hvaWNlKCkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpbnRlZ2VyKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBwaHAgaW50ZWdlci4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGludGVnZXJpc2goc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIHBocCBpbnRlZ2VyJ2lzaC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGludGVyZmFjZUV4aXN0cyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBpbnRlcmZhY2UgZXhpc3RzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXAoaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlwdjQoaW50ICRmbGFnID0gbnVsbCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBJUHY0IGFkZHJlc3MuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpcHY2KGludCAkZmxhZyA9IG51bGwsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gSVB2NiBhZGRyZXNzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXNBcnJheShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIGFuIGFycmF5LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXNBcnJheUFjY2Vzc2libGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhbiBhcnJheS1hY2Nlc3NpYmxlIG9iamVjdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzQ2FsbGFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNhbGxhYmxlLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gaXNDb3VudGFibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBjb3VudGFibGUuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc0luc3RhbmNlT2Yoc3RyaW5nICRjbGFzc05hbWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MtbmFtZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzSnNvblN0cmluZyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBqc29uIHN0cmluZy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzT2JqZWN0KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3QuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBpc1Jlc291cmNlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSByZXNvdXJjZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGlzVHJhdmVyc2FibGUoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhbiBhcnJheSBvciBhIHRyYXZlcnNhYmxlIG9iamVjdC4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGtleUV4aXN0cyhzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGtleUlzc2V0KHN0cmluZ3xpbnQgJGtleSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBrZXkgZXhpc3RzIGluIGFuIGFycmF5L2FycmF5LWFjY2Vzc2libGUgb2JqZWN0IHVzaW5nIGlzc2V0KCkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBrZXlOb3RFeGlzdHMoc3RyaW5nfGludCAka2V5LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGtleSBkb2VzIG5vdCBleGlzdCBpbiBhbiBhcnJheS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIGxlbmd0aChpbnQgJGxlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgaGFzIGEgZ2l2ZW4gbGVuZ3RoLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbGVzc09yRXF1YWxUaGFuKG1peGVkICRsaW1pdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIG9yIGVxdWFsIHRoYW4gZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBsZXNzVGhhbihtaXhlZCAkbGltaXQsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIGdpdmVuIGxpbWl0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbWF4KG1peGVkICRtYXhWYWx1ZSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCBhIG51bWJlciBpcyBzbWFsbGVyIGFzIGEgZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtYXhDb3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBtb3N0ICRjb3VudCBlbGVtZW50cy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG1heExlbmd0aChpbnQgJG1heExlbmd0aCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsLCBzdHJpbmcgJGVuY29kaW5nID0gJ3V0ZjgnKSBBc3NlcnQgdGhhdCBzdHJpbmcgdmFsdWUgaXMgbm90IGxvbmdlciB0aGFuICRtYXhMZW5ndGggY2hhcnMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtZXRob2RFeGlzdHMobWl4ZWQgJG9iamVjdCwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBEZXRlcm1pbmVzIHRoYXQgdGhlIG5hbWVkIG1ldGhvZCBpcyBkZWZpbmVkIGluIHRoZSBwcm92aWRlZCBvYmplY3QuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtaW4obWl4ZWQgJG1pblZhbHVlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIGEgZ2l2ZW4gbGltaXQuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtaW5Db3VudChpbnQgJGNvdW50LCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBjb3VudGFibGUgaGF2ZSBhdCBsZWFzdCAkY291bnQgZWxlbWVudHMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBtaW5MZW5ndGgoaW50ICRtaW5MZW5ndGgsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9ICd1dGY4JykgQXNzZXJ0IHRoYXQgYSBzdHJpbmcgaXMgYXQgbGVhc3QgJG1pbkxlbmd0aCBjaGFycyBsb25nLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm9Db250ZW50KHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgZW1wdHkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RCbGFuayhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBibGFuay4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdENvbnRhaW5zKHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBkb2VzIG5vdCBjb250YWlucyBhIHNlcXVlbmNlIG9mIGNoYXJzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90RW1wdHkoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBub3QgZW1wdHkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RFbXB0eUtleShzdHJpbmd8aW50ICRrZXksIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQga2V5IGV4aXN0cyBpbiBhbiBhcnJheS9hcnJheS1hY2Nlc3NpYmxlIG9iamVjdCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBlbXB0eS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG5vdEVxKG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IGVxdWFsICh1c2luZyA9PSkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RJbkFycmF5KGFycmF5ICRjaG9pY2VzLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbiBhcnJheSBvZiBjaG9pY2VzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90SXNJbnN0YW5jZU9mKHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcy1uYW1lLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90TnVsbChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG5vdCBudWxsLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbm90UmVnZXgoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGEgcmVnZXguCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBub3RTYW1lKG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lICh1c2luZyA9PT0pLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gbnVsbChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIG51bGwuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBudW1lcmljKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgbnVtZXJpYy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIG9iamVjdE9yQ2xhc3Moc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LCBvciBhIGNsYXNzIHRoYXQgZXhpc3RzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gcGhwVmVyc2lvbihtaXhlZCAkdmVyc2lvbiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgb24gUEhQIHZlcnNpb24uCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBwcm9wZXJ0aWVzRXhpc3QoYXJyYXkgJHByb3BlcnRpZXMsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBvciBjbGFzcywgYW5kIHRoYXQgdGhlIHByb3BlcnRpZXMgYWxsIGV4aXN0LgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gcHJvcGVydHlFeGlzdHMoc3RyaW5nICRwcm9wZXJ0eSwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGNsYXNzLCBhbmQgdGhhdCB0aGUgcHJvcGVydHkgZXhpc3RzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gcmFuZ2UobWl4ZWQgJG1pblZhbHVlLCBtaXhlZCAkbWF4VmFsdWUsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgaW4gcmFuZ2Ugb2YgbnVtYmVycy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHJlYWRhYmxlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIHNvbWV0aGluZyByZWFkYWJsZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHJlZ2V4KHN0cmluZyAkcGF0dGVybiwgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBtYXRjaGVzIGEgcmVnZXguCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBzYW1lKG1peGVkICR2YWx1ZTIsIHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdHdvIHZhbHVlcyBhcmUgdGhlIHNhbWUgKHVzaW5nID09PSkuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBzYXRpc2Z5KGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIGEgY2FsbGJhY2suCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBzY2FsYXIoc3RyaW5nfGNhbGxhYmxlICRtZXNzYWdlID0gbnVsbCwgc3RyaW5nICRwcm9wZXJ0eVBhdGggPSBudWxsKSBBc3NlcnQgdGhhdCB2YWx1ZSBpcyBhIFBIUCBzY2FsYXIuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBzdGFydHNXaXRoKHN0cmluZyAkbmVlZGxlLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSAndXRmOCcpIEFzc2VydCB0aGF0IHN0cmluZyBzdGFydHMgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJzLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gc3RyaW5nKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYSBzdHJpbmcuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBzdWJjbGFzc09mKHN0cmluZyAkY2xhc3NOYW1lLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlIGlzIHN1YmNsYXNzIG9mIGdpdmVuIGNsYXNzLW5hbWUuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiB0cnVlKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdGhlIHZhbHVlIGlzIGJvb2xlYW4gVHJ1ZS4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHVuaXF1ZVZhbHVlcyhzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHZhbHVlcyBpbiBhcnJheSBhcmUgdW5pcXVlICh1c2luZyBzdHJpY3QgZXF1YWxpdHkpLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gdXJsKHN0cmluZ3xjYWxsYWJsZSAkbWVzc2FnZSA9IG51bGwsIHN0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCkgQXNzZXJ0IHRoYXQgdmFsdWUgaXMgYW4gVVJMLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gdXVpZChzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVVUlELgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gdmVyc2lvbihzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJHZlcnNpb24yLCBzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCBjb21wYXJpc29uIG9mIHR3byB2ZXJzaW9ucy4KICogQG1ldGhvZCBMYXp5QXNzZXJ0aW9uIHdyaXRlYWJsZShzdHJpbmd8Y2FsbGFibGUgJG1lc3NhZ2UgPSBudWxsLCBzdHJpbmcgJHByb3BlcnR5UGF0aCA9IG51bGwpIEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgd3JpdGVhYmxlLgogKiBAbWV0aG9kIExhenlBc3NlcnRpb24gYWxsKCkgU3dpdGNoIGNoYWluIGludG8gdmFsaWRhdGlvbiBtb2RlIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCiAqIEBtZXRob2QgTGF6eUFzc2VydGlvbiBudWxsT3IoKSBTd2l0Y2ggY2hhaW4gaW50byBtb2RlIGFsbG93aW5nIG51bGxzLCBpZ25vcmluZyBmdXJ0aGVyIGFzc2VydGlvbnMuCiAqLwpjbGFzcyBMYXp5QXNzZXJ0aW9uCnsKICAgIHByaXZhdGUgJGN1cnJlbnRDaGFpbkZhaWxlZCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkYWx3YXlzVHJ5QWxsID0gZmFsc2U7CiAgICBwcml2YXRlICR0aGlzQ2hhaW5UcnlBbGwgPSBmYWxzZTsKICAgIHByaXZhdGUgJGN1cnJlbnRDaGFpbjsKICAgIHByaXZhdGUgJGVycm9ycyA9IFtdOwoKICAgIC8qKiBAdmFyIHN0cmluZyBUaGUgY2xhc3MgdG8gdXNlIGFzIEFzc2VydGlvbkNoYWluIGZhY3RvcnkgKi8KICAgIHByaXZhdGUgJGFzc2VydENsYXNzID0gQXNzZXJ0OjpjbGFzczsKCiAgICAvKiogQHZhciBzdHJpbmd8TGF6eUFzc2VydGlvbkV4Y2VwdGlvbiBUaGUgY2xhc3MgdG8gdXNlIGZvciBleGNlcHRpb25zICovCiAgICBwcml2YXRlICRleGNlcHRpb25DbGFzcyA9IExhenlBc3NlcnRpb25FeGNlcHRpb246OmNsYXNzOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZ3xjYWxsYWJsZXxudWxsICRkZWZhdWx0TWVzc2FnZQogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aGF0KCR2YWx1ZSwgP3N0cmluZyAkcHJvcGVydHlQYXRoID0gbnVsbCwgJGRlZmF1bHRNZXNzYWdlID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudENoYWluRmFpbGVkID0gZmFsc2U7CiAgICAgICAgJHRoaXMtPnRoaXNDaGFpblRyeUFsbCA9IGZhbHNlOwogICAgICAgICRhc3NlcnRDbGFzcyA9ICR0aGlzLT5hc3NlcnRDbGFzczsKICAgICAgICAkdGhpcy0+Y3VycmVudENoYWluID0gJGFzc2VydENsYXNzOjp0aGF0KCR2YWx1ZSwgJGRlZmF1bHRNZXNzYWdlLCAkcHJvcGVydHlQYXRoKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyeUFsbCgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y3VycmVudENoYWluKSB7CiAgICAgICAgICAgICR0aGlzLT5hbHdheXNUcnlBbGwgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnRoaXNDaGFpblRyeUFsbCA9IHRydWU7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHBhcmFtIGFycmF5ICRhcmdzCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kLCAkYXJncykKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09ICR0aGlzLT5hbHdheXNUcnlBbGwKICAgICAgICAgICAgJiYgZmFsc2UgPT09ICR0aGlzLT50aGlzQ2hhaW5UcnlBbGwKICAgICAgICAgICAgJiYgdHJ1ZSA9PT0gJHRoaXMtPmN1cnJlbnRDaGFpbkZhaWxlZAogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5jdXJyZW50Q2hhaW4sICRtZXRob2RdLCAkYXJncyk7CiAgICAgICAgfSBjYXRjaCAoQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5lcnJvcnNbXSA9ICRlOwogICAgICAgICAgICAkdGhpcy0+Y3VycmVudENoYWluRmFpbGVkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgTGF6eUFzc2VydGlvbkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5Tm93KCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVycm9ycykgewogICAgICAgICAgICB0aHJvdyBcY2FsbF91c2VyX2Z1bmMoWyR0aGlzLT5leGNlcHRpb25DbGFzcywgJ2Zyb21FcnJvcnMnXSwgJHRoaXMtPmVycm9ycyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzTmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBc3NlcnRDbGFzcyhzdHJpbmcgJGNsYXNzTmFtZSk6IExhenlBc3NlcnRpb24KICAgIHsKICAgICAgICBpZiAoQXNzZXJ0OjpjbGFzcyAhPT0gJGNsYXNzTmFtZSAmJiAhXGlzX3N1YmNsYXNzX29mKCRjbGFzc05hbWUsIEFzc2VydDo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbigkY2xhc3NOYW1lLicgaXMgbm90IChhIHN1YmNsYXNzIG9mKSAnLkFzc2VydDo6Y2xhc3MpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFzc2VydENsYXNzID0gJGNsYXNzTmFtZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NOYW1lCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4Y2VwdGlvbkNsYXNzKHN0cmluZyAkY2xhc3NOYW1lKTogTGF6eUFzc2VydGlvbgogICAgewogICAgICAgIGlmIChMYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzcyAhPT0gJGNsYXNzTmFtZSAmJiAhXGlzX3N1YmNsYXNzX29mKCRjbGFzc05hbWUsIExhenlBc3NlcnRpb25FeGNlcHRpb246OmNsYXNzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJGNsYXNzTmFtZS4nIGlzIG5vdCAoYSBzdWJjbGFzcyBvZikgJy5MYXp5QXNzZXJ0aW9uRXhjZXB0aW9uOjpjbGFzcyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZXhjZXB0aW9uQ2xhc3MgPSAkY2xhc3NOYW1lOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBc3NlcnQKICoKICogTElDRU5TRQogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE1JVCBsaWNlbnNlIHRoYXQgaXMgYnVuZGxlZAogKiB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLnR4dC4KICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBrb250YWt0QGJlYmVybGVpLmRlIHNvIEkgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICovCgpuYW1lc3BhY2UgQXNzZXJ0OwoKY2xhc3MgTGF6eUFzc2VydGlvbkV4Y2VwdGlvbiBleHRlbmRzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10KICAgICAqLwogICAgcHJpdmF0ZSAkZXJyb3JzID0gW107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10gJGVycm9ycwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21FcnJvcnMoYXJyYXkgJGVycm9ycyk6IHNlbGYKICAgIHsKICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKCdUaGUgZm9sbG93aW5nICVkIGFzc2VydGlvbnMgZmFpbGVkOicsIFxjb3VudCgkZXJyb3JzKSkuIlxuIjsKCiAgICAgICAgJGkgPSAxOwogICAgICAgIGZvcmVhY2ggKCRlcnJvcnMgYXMgJGVycm9yKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49IFxzcHJpbnRmKCIlZCkgJXM6ICVzXG4iLCAkaSsrLCAkZXJyb3ItPmdldFByb3BlcnR5UGF0aCgpLCAkZXJyb3ItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkbWVzc2FnZSwgJGVycm9ycyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCBhcnJheSAkZXJyb3JzKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsIDAsIG51bGwsIG51bGwpOwoKICAgICAgICAkdGhpcy0+ZXJyb3JzID0gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yRXhjZXB0aW9ucygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXJyb3JzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/beberlei/assert/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLTIwMTMsIEJlbmphbWluIEViZXJsZWkKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCi0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K]]></data>
	</file>
	<file>
	  <filename>/vendor/bin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUuCgojIyBbMC45LjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjkuMykgLSAyMDIxLTA4LTE1Cgrwn5qAICoqQ29tcGF0aWJpbGl0eSB3aXRoIFBIUCA4LjEqKgoKLSBTdXBwb3J0IGZvciBjdXN0b20gb2JqZWN0IHNlcmlhbGl6YXRpb247IHRoaXMgcmVtb3ZlcyBhIHdhcm5pbmcgb24gUEhQIDguMSBkdWUgdG8gdGhlIGBTZXJpYWxpemFibGVgIGludGVyZmFjZSBiZWluZyBkZXByZWNhdGVkICh0aGFua3MgQFRSb3dib3RoYW0pCgojIyBbMC45LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjkuMikgLSAyMDIxLTAxLTIwCgrwn5CbICoqQnVnIGZpeCoqCgotIEluY29ycmVjdCByZXN1bHRzIGNvdWxkIGJlIHJldHVybmVkIHdoZW4gdXNpbmcgdGhlIEJDTWF0aCBjYWxjdWxhdG9yLCB3aXRoIGEgZGVmYXVsdCBzY2FsZSBzZXQgd2l0aCBgYmNzY2FsZSgpYCwgb24gUEhQID49IDcuMiAoIzU1KS4KCiMjIFswLjkuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOS4xKSAtIDIwMjAtMDgtMTkKCuKcqCBOZXcgZmVhdHVyZXMKCi0gYEJpZ0ludGVnZXI6Om5vdCgpYCByZXR1cm5zIHRoZSBiaXR3aXNlIGBOT1RgIHZhbHVlCgrwn5CbICoqQnVnIGZpeGVzKioKCi0gYEJpZ0ludGVnZXI6OnRvQnl0ZXMoKWAgY291bGQgcmV0dXJuIGFuIGluY29ycmVjdCBiaW5hcnkgcmVwcmVzZW50YXRpb24gZm9yIHNvbWUgbnVtYmVycwotIFRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgYGFuZCgpYCwgYG9yKClgLCBgeG9yKClgIG9uIGBCaWdJbnRlZ2VyYCBjb3VsZCByZXR1cm4gYW4gaW5jb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBHTVAgZXh0ZW5zaW9uIGlzIG5vdCBhdmFpbGFibGUKCiMjIFswLjkuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOS4wKSAtIDIwMjAtMDgtMTgKCvCfkYwgKipJbXByb3ZlbWVudHMqKgoKLSBgQmlnTnVtYmVyOjpvZigpYCBub3cgYWNjZXB0cyBgLjEyM2AgYW5kIGAxMjMuYCBmb3JtYXRzLCBib3RoIG9mIHdoaWNoIHJldHVybiBhIGBCaWdEZWNpbWFsYAoK8J+SpSAqKkJyZWFraW5nIGNoYW5nZXMqKgoKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnSW50ZWdlcjo6cG93ZXJNb2QoKWAgaGFzIGJlZW4gcmVtb3ZlZCAtIHVzZSBgbW9kUG93KClgIGluc3RlYWQKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnSW50ZWdlcjo6cGFyc2UoKWAgaGFzIGJlZW4gcmVtb3ZlZCAtIHVzZSBgZnJvbUJhc2UoKWAgaW5zdGVhZAoKIyMgWzAuOC4xN10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNykgLSAyMDIwLTA4LTE5Cgrwn5CbICoqQnVnIGZpeCoqCgotIGBCaWdJbnRlZ2VyOjp0b0J5dGVzKClgIGNvdWxkIHJldHVybiBhbiBpbmNvcnJlY3QgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGZvciBzb21lIG51bWJlcnMKLSBUaGUgYml0d2lzZSBvcGVyYXRpb25zIGBhbmQoKWAsIGBvcigpYCwgYHhvcigpYCBvbiBgQmlnSW50ZWdlcmAgY291bGQgcmV0dXJuIGFuIGluY29ycmVjdCByZXN1bHQgd2hlbiB0aGUgR01QIGV4dGVuc2lvbiBpcyBub3QgYXZhaWxhYmxlCgojIyBbMC44LjE2XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjE2KSAtIDIwMjAtMDgtMTgKCvCfmpEgKipDcml0aWNhbCBmaXgqKgoKLSBUaGlzIHZlcnNpb24gcmVpbnRyb2R1Y2VzIHRoZSBkZXByZWNhdGVkIGBCaWdJbnRlZ2VyOjpwYXJzZSgpYCBtZXRob2QsIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBieSBtaXN0YWtlIGluIHZlcnNpb24gYDAuOC45YCBhbmQgc2hvdWxkIGhhdmUgbGFzdGVkIGZvciB0aGUgd2hvbGUgYDAuOGAgcmVsZWFzZSBjeWNsZS4KCuKcqCAqKk5ldyBmZWF0dXJlcyoqCgotIGBCaWdJbnRlZ2VyOjptb2RJbnZlcnNlKClgIGNhbGN1bGF0ZXMgYSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2UKLSBgQmlnSW50ZWdlcjo6ZnJvbUJ5dGVzKClgIGNyZWF0ZXMgYSBgQmlnSW50ZWdlcmAgZnJvbSBhIGJ5dGUgc3RyaW5nCi0gYEJpZ0ludGVnZXI6OnRvQnl0ZXMoKWAgY29udmVydHMgYSBgQmlnSW50ZWdlcmAgdG8gYSBieXRlIHN0cmluZwotIGBCaWdJbnRlZ2VyOjpyYW5kb21CaXRzKClgIGNyZWF0ZXMgYSBwc2V1ZG8tcmFuZG9tIGBCaWdJbnRlZ2VyYCBvZiBhIGdpdmVuIGJpdCBsZW5ndGgKLSBgQmlnSW50ZWdlcjo6cmFuZG9tUmFuZ2UoKWAgY3JlYXRlcyBhIHBzZXVkby1yYW5kb20gYEJpZ0ludGVnZXJgIGJldHdlZW4gdHdvIGJvdW5kcwoK8J+SqSAqKkRlcHJlY2F0aW9ucyoqCgotIGBCaWdJbnRlZ2VyOjpwb3dlck1vZCgpYCBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYG1vZFBvdygpYAoKIyMgWzAuOC4xNV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNSkgLSAyMDIwLTA0LTE1Cgrwn5CbICoqRml4ZXMqKgoKLSBhZGRlZCBtaXNzaW5nIGBleHQtanNvbmAgcmVxdWlyZW1lbnQsIGR1ZSB0byBgQmlnTnVtYmVyYCBpbXBsZW1lbnRpbmcgYEpzb25TZXJpYWxpemFibGVgCgrimqHvuI8gKipPcHRpbWl6YXRpb25zKioKCi0gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24gaW4gYEJpZ0ludGVnZXI6OnJlbWFpbmRlcigpYAoKIyMgWzAuOC4xNF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xNCkgLSAyMDIwLTAyLTE4CgrinKggKipOZXcgZmVhdHVyZXMqKgoKLSBgQmlnSW50ZWdlcjo6Z2V0TG93ZXN0U2V0Qml0KClgIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSByaWdodG1vc3Qgb25lIGJpdAoKIyMgWzAuOC4xM10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC4xMykgLSAyMDIwLTAyLTE2CgrinKggKipOZXcgZmVhdHVyZXMqKgoKLSBgQmlnSW50ZWdlcjo6aXNFdmVuKClgIHRlc3RzIHdoZXRoZXIgdGhlIG51bWJlciBpcyBldmVuCi0gYEJpZ0ludGVnZXI6OmlzT2RkKClgIHRlc3RzIHdoZXRoZXIgdGhlIG51bWJlciBpcyBvZGQKLSBgQmlnSW50ZWdlcjo6dGVzdEJpdCgpYCB0ZXN0cyBpZiBhIGJpdCBpcyBzZXQKLSBgQmlnSW50ZWdlcjo6Z2V0Qml0TGVuZ3RoKClgIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBtaW5pbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIKCiMjIFswLjguMTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTIpIC0gMjAyMC0wMi0wMwoK8J+boO+4jyAqKk1haW50ZW5hbmNlIHJlbGVhc2UqKgoKQ2xhc3NlcyBhcmUgbm93IGFubm90YXRlZCBmb3IgYmV0dGVyIHN0YXRpYyBhbmFseXNpcyB3aXRoIFtwc2FsbV0oaHR0cHM6Ly9wc2FsbS5kZXYvKS4KClRoaXMgaXMgYSBtYWludGVuYW5jZSByZWxlYXNlOiBubyBidWcgZml4ZXMsIG5vIG5ldyBmZWF0dXJlcywgbm8gYnJlYWtpbmcgY2hhbmdlcy4KCiMjIFswLjguMTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTEpIC0gMjAyMC0wMS0yMwoK4pyoICoqTmV3IGZlYXR1cmUqKgoKYEJpZ0ludGVnZXI6OnBvd2VyTW9kKClgIHBlcmZvcm1zIGEgcG93ZXItd2l0aC1tb2R1bG8gb3BlcmF0aW9uLiBVc2VmdWwgZm9yIGNyeXB0by4KCiMjIFswLjguMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMTApIC0gMjAyMC0wMS0yMQoK4pyoICoqTmV3IGZlYXR1cmUqKgoKYEJpZ0ludGVnZXI6Om1vZCgpYCByZXR1cm5zIHRoZSAqKm1vZHVsbyoqIG9mIHR3byBudW1iZXJzLiBUaGUgKm1vZHVsbyogZGlmZmVycyBmcm9tIHRoZSAqcmVtYWluZGVyKiB3aGVuIHRoZSBzaWducyBvZiB0aGUgb3BlcmFuZHMgYXJlIGRpZmZlcmVudC4KCiMjIFswLjguOV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC45KSAtIDIwMjAtMDEtMDgKCuKaoe+4jyAqKlBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyoqCgpBIGZldyBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gYEJpZ0ludGVnZXJgIGFuZCBgQmlnRGVjaW1hbGAgd2hlbiBvbmUgb2YgdGhlIG9wZXJhbmRzIGNhbiBiZSByZXR1cm5lZCBhcyBpcy4gVGhhbmtzIHRvIEB0b210b21zZW4gaW4gIzI0LgoKIyMgWzAuOC44XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjgpIC0gMjAxOS0wNC0yNQoK8J+QmyAqKkJ1ZyBmaXhlcyoqCgotIGBCaWdJbnRlZ2VyOjp0b0Jhc2UoKWAgY291bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgemVybyB2YWx1ZXMgKEJDTWF0aCAmIE5hdGl2ZSBjYWxjdWxhdG9ycyBvbmx5LCBHTVAgY2FsY3VsYXRvciB1bmFmZmVjdGVkKQoK4pyoICoqTmV3IGZlYXR1cmVzKioKCi0gYEJpZ0ludGVnZXI6OnRvQXJiaXRyYXJ5QmFzZSgpYCBjb252ZXJ0cyBhIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZSwgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQKLSBgQmlnSW50ZWdlcjo6ZnJvbUFyYml0cmFyeUJhc2UoKWAgY29udmVydHMgYSBzdHJpbmcgaW4gYW4gYXJiaXRyYXJ5IGJhc2UsIHVzaW5nIGEgY3VzdG9tIGFscGhhYmV0LCBiYWNrIHRvIGEgbnVtYmVyCgpUaGVzZSBtZXRob2RzIGNhbiBiZSB1c2VkIGFzIHRoZSBmb3VuZGF0aW9uIHRvIGNvbnZlcnQgc3RyaW5ncyBiZXR3ZWVuIGRpZmZlcmVudCBiYXNlcy9hbHBoYWJldHMsIHVzaW5nIEJpZ0ludGVnZXIgYXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgoK8J+SqSAqKkRlcHJlY2F0aW9ucyoqCgotIGBCaWdJbnRlZ2VyOjpwYXJzZSgpYCBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYGZyb21CYXNlKClgCgpgQmlnSW50ZWdlcjo6ZnJvbUJhc2UoKWAgd29ya3MgdGhlIHNhbWUgd2F5IGFzIGBwYXJzZSgpYCwgd2l0aCAyIG1pbm9yIGRpZmZlcmVuY2VzOgoKLSB0aGUgYCRiYXNlYCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQsIGl0IGRvZXMgbm90IGRlZmF1bHQgdG8gYDEwYAotIGl0IHRocm93cyBhIGBOdW1iZXJGb3JtYXRFeGNlcHRpb25gIGluc3RlYWQgb2YgYW4gYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgd2hlbiB0aGUgbnVtYmVyIGlzIG1hbGZvcm1lZAoKIyMgWzAuOC43XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjcpIC0gMjAxOS0wNC0yMAoKKipJbXByb3ZlbWVudHMqKgoKLSBTYWZlciBjb252ZXJzaW9uIGZyb20gYGZsb2F0YCB3aGVuIHVzaW5nIGN1c3RvbSBsb2NhbGVzCi0gKipNdWNoIGZhc3RlcioqIGBOYXRpdmVDYWxjdWxhdG9yYCBpbXBsZW1lbnRhdGlvbiDwn5qACgpZb3UgY2FuIGV4cGVjdCAqKmF0IGxlYXN0IGEgM3ggcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQqKiBmb3IgY29tbW9uIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB3aGVuIHVzaW5nIHRoZSBsaWJyYXJ5IG9uIHN5c3RlbXMgd2l0aG91dCBHTVAgb3IgQkNNYXRoOyBpdCBnZXRzIGV4cG9uZW50aWFsbHkgZmFzdGVyIG9uIG11bHRpcGxpY2F0aW9ucyB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZGlnaXRzLiBUaGlzIGlzIGR1ZSB0byBjYWxjdWxhdGlvbnMgbm93IGJlaW5nIHBlcmZvcm1lZCBvbiB3aG9sZSBibG9ja3Mgb2YgZGlnaXRzICh0aGUgYmxvY2sgc2l6ZSBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCAzMi1iaXQgb3IgNjQtYml0KSBpbnN0ZWFkIG9mIGRpZ2l0LWJ5LWRpZ2l0IGFzIGJlZm9yZS4KCiMjIFswLjguNl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuOC42KSAtIDIwMTktMDQtMTEKCioqTmV3IG1ldGhvZCoqCgpgQmlnTnVtYmVyOjpzdW0oKWAgcmV0dXJucyB0aGUgc3VtIG9mIG9uZSBvciBtb3JlIG51bWJlcnMuCgojIyBbMC44LjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguNSkgLSAyMDE5LTAyLTEyCgoqKkJ1ZyBmaXgqKjogYG9mKClgIGZhY3RvcnkgbWV0aG9kcyBjb3VsZCBmYWlsIHdoZW4gcGFzc2luZyBhIGBmbG9hdGAgaW4gZW52aXJvbm1lbnRzIHVzaW5nIGEgYExDX05VTUVSSUNgIGxvY2FsZSB3aXRoIGEgZGVjaW1hbCBzZXBhcmF0b3Igb3RoZXIgdGhhbiBgJy4nYCAoIzIwKS4KClRoYW5rcyBAbWFub3dhcmsg8J+RjQoKIyMgWzAuOC40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC44LjQpIC0gMjAxOC0xMi0wNwoKKipOZXcgbWV0aG9kKioKCmBCaWdEZWNpbWFsOjpzcXJ0KClgIGNhbGN1bGF0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgZGVjaW1hbCBudW1iZXIsIHRvIGEgZ2l2ZW4gc2NhbGUuCgojIyBbMC44LjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMykgLSAyMDE4LTEyLTA2CgoqKk5ldyBtZXRob2QqKgoKYEJpZ0ludGVnZXI6OnNxcnQoKWAgY2FsY3VsYXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIgKHRoYW5rcyBAcGV0ZXIyNzlrKS4KCioqTmV3IGV4Y2VwdGlvbioqCgpgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb25gIGlzIHRocm93biB3aGVuIGNhbGxpbmcgYHNxcnQoKWAgb24gYSBuZWdhdGl2ZSBudW1iZXIuCgojIyBbMC44LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMikgLSAyMDE4LTExLTA4CgoqKlBlcmZvcm1hbmNlIHVwZGF0ZSoqCgotIEZ1cnRoZXIgaW1wcm92ZW1lbnQgb2YgYHRvSW50KClgIHBlcmZvcm1hbmNlCi0gYE5hdGl2ZUNhbGN1bGF0b3JgIGNhbiBub3cgcGVyZm9ybSBzb21lIG11bHRpcGxpY2F0aW9ucyBtb3JlIGVmZmljaWVudGx5CgojIyBbMC44LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMSkgLSAyMDE4LTExLTA3CgpQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb2YgYHRvSW50KClgIG1ldGhvZHMuCgojIyBbMC44LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjguMCkgLSAyMDE4LTEwLTEzCgoqKkJyZWFraW5nIGNoYW5nZXMqKgoKVGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lIGluc3RlYWQ6Cgp8IE1ldGhvZCByZW1vdmVkIHwgUmVwbGFjZW1lbnQgbWV0aG9kIHwKfCAtLS0gfCAtLS0gfAp8IGBCaWdEZWNpbWFsOjpnZXRJbnRlZ3JhbCgpYCB8IGBCaWdEZWNpbWFsOjpnZXRJbnRlZ3JhbFBhcnQoKWAgfAp8IGBCaWdEZWNpbWFsOjpnZXRGcmFjdGlvbigpYCB8IGBCaWdEZWNpbWFsOjpnZXRGcmFjdGlvbmFsUGFydCgpYCB8CgotLS0KCioqTmV3IGZlYXR1cmVzKioKCmBCaWdJbnRlZ2VyYCBoYXMgYmVlbiBhdWdtZW50ZWQgd2l0aCA1IG5ldyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnM6Cgp8IE5ldyBtZXRob2QgfCBEZXNjcmlwdGlvbiB8CnwgLS0tIHwgLS0tIHwKfCBgYW5kKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBBTkRgIG9wZXJhdGlvbiBvbiB0d28gbnVtYmVycyB8CnwgYG9yKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBPUmAgb3BlcmF0aW9uIG9uIHR3byBudW1iZXJzIHwKfCBgeG9yKClgIHwgcGVyZm9ybXMgYSBiaXR3aXNlIGBYT1JgIG9wZXJhdGlvbiBvbiB0d28gbnVtYmVycyB8CnwgYHNoaWZ0ZWRMZWZ0KClgIHwgcmV0dXJucyB0aGUgbnVtYmVyIHNoaWZ0ZWQgbGVmdCBieSBhIG51bWJlciBvZiBiaXRzIHwKfCBgc2hpZnRlZFJpZ2h0KClgIHwgcmV0dXJucyB0aGUgbnVtYmVyIHNoaWZ0ZWQgcmlnaHQgYnkgYSBudW1iZXIgb2YgYml0cyB8CgpUaGFua3MgdG8gQERBU1BSaUQg8J+RjQoKIyMgWzAuNy4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC43LjMpIC0gMjAxOC0wOC0yMAoKKipOZXcgbWV0aG9kOioqIGBCaWdEZWNpbWFsOjpoYXNOb25aZXJvRnJhY3Rpb25hbFBhcnQoKWAKCioqUmVuYW1lZC9kZXByZWNhdGVkIG1ldGhvZHM6KioKCi0gYEJpZ0RlY2ltYWw6OmdldEludGVncmFsKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEludGVncmFsUGFydCgpYCBhbmQgaXMgbm93IGRlcHJlY2F0ZWQKLSBgQmlnRGVjaW1hbDo6Z2V0RnJhY3Rpb24oKWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZ2V0RnJhY3Rpb25hbFBhcnQoKWAgYW5kIGlzIG5vdyBkZXByZWNhdGVkCgojIyBbMC43LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjcuMikgLSAyMDE4LTA3LTIxCgoqKlBlcmZvcm1hbmNlIHVwZGF0ZSoqCgpgQmlnSW50ZWdlcjo6cGFyc2UoKWAgYW5kIGB0b0Jhc2UoKWAgbm93IHVzZSBHTVAncyBidWlsdC1pbiBiYXNlIGNvbnZlcnNpb24gZmVhdHVyZXMgd2hlbiBhdmFpbGFibGUuCgojIyBbMC43LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjcuMSkgLSAyMDE4LTAzLTAxCgpUaGlzIGlzIGEgbWFpbnRlbmFuY2UgcmVsZWFzZSwgbm8gY29kZSBoYXMgYmVlbiBjaGFuZ2VkLgoKLSBXaGVuIGluc3RhbGxlZCB3aXRoIGAtLW5vLWRldmAsIHRoZSBhdXRvbG9hZGVyIGRvZXMgbm90IGF1dG9sb2FkIHRlc3RzIGFueW1vcmUKLSBUZXN0cyBhbmQgb3RoZXIgZmlsZXMgdW5uZWNlc3NhcnkgZm9yIHByb2R1Y3Rpb24gYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGRpc3QgcGFja2FnZQoKVGhpcyB3aWxsIGhlbHAgbWFrZSBpbnN0YWxsYXRpb25zIG1vcmUgY29tcGFjdC4KCiMjIFswLjcuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNy4wKSAtIDIwMTctMTAtMDIKCk1ldGhvZHMgcmVuYW1lZDoKCi0gYEJpZ051bWJlcjpzaWduKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldFNpZ24oKWAKLSBgQmlnRGVjaW1hbDo6dW5zY2FsZWRWYWx1ZSgpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBnZXRVbnNjYWxlZFZhbHVlKClgCi0gYEJpZ0RlY2ltYWw6OnNjYWxlKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldFNjYWxlKClgCi0gYEJpZ0RlY2ltYWw6OmludGVncmFsKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEludGVncmFsKClgCi0gYEJpZ0RlY2ltYWw6OmZyYWN0aW9uKClgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGdldEZyYWN0aW9uKClgCi0gYEJpZ1JhdGlvbmFsOjpudW1lcmF0b3IoKWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgZ2V0TnVtZXJhdG9yKClgCi0gYEJpZ1JhdGlvbmFsOjpkZW5vbWluYXRvcigpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBnZXREZW5vbWluYXRvcigpYAoKQ2xhc3NlcyByZW5hbWVkOgoKLSBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaGFzIGJlZW4gcmVuYW1lZCB0byBgTWF0aEV4Y2VwdGlvbmAKCiMjIFswLjYuMl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNi4yKSAtIDIwMTctMTAtMDIKClRoZSBiYXNlIGNsYXNzIGZvciBhbGwgZXhjZXB0aW9ucyBpcyBub3cgYE1hdGhFeGNlcHRpb25gLgpgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAwLjcuMC4KCiMjIFswLjYuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNi4xKSAtIDIwMTctMTAtMDIKCkEgbnVtYmVyIG9mIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbmFtZWQ6CgotIGBCaWdOdW1iZXI6c2lnbigpYCBpcyBkZXByZWNhdGVkOyB1c2UgYGdldFNpZ24oKWAgaW5zdGVhZAotIGBCaWdEZWNpbWFsOjp1bnNjYWxlZFZhbHVlKClgIGlzIGRlcHJlY2F0ZWQ7IHVzZSBgZ2V0VW5zY2FsZWRWYWx1ZSgpYCBpbnN0ZWFkCi0gYEJpZ0RlY2ltYWw6OnNjYWxlKClgIGlzIGRlcHJlY2F0ZWQ7IHVzZSBgZ2V0U2NhbGUoKWAgaW5zdGVhZAotIGBCaWdEZWNpbWFsOjppbnRlZ3JhbCgpYCBpcyBkZXByZWNhdGVkOyB1c2UgYGdldEludGVncmFsKClgIGluc3RlYWQKLSBgQmlnRGVjaW1hbDo6ZnJhY3Rpb24oKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXRGcmFjdGlvbigpYCBpbnN0ZWFkCi0gYEJpZ1JhdGlvbmFsOjpudW1lcmF0b3IoKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXROdW1lcmF0b3IoKWAgaW5zdGVhZAotIGBCaWdSYXRpb25hbDo6ZGVub21pbmF0b3IoKWAgaXMgZGVwcmVjYXRlZDsgdXNlIGBnZXREZW5vbWluYXRvcigpYCBpbnN0ZWFkCgpUaGUgb2xkIG1ldGhvZHMgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMC43LjAuCgojIyBbMC42LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjYuMCkgLSAyMDE3LTA4LTI1CgotIE1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IFs3LjFdKGh0dHBzOi8vZ29waHA3MS5vcmcvKTsgZm9yIFBIUCA1LjYgYW5kIFBIUCA3LjAgc3VwcG9ydCwgdXNlIHZlcnNpb24gYDAuNWAKLSBEZXByZWNhdGVkIG1ldGhvZCBgQmlnRGVjaW1hbDo6d2l0aFNjYWxlKClgIGhhcyBiZWVuIHJlbW92ZWQ7IHVzZSBgdG9TY2FsZSgpYCBpbnN0ZWFkCi0gTWV0aG9kIGBCaWdOdW1iZXI6OnRvSW50ZWdlcigpYCBoYXMgYmVlbiByZW5hbWVkIHRvIGB0b0ludCgpYAoKIyMgWzAuNS40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjQpIC0gMjAxNi0xMC0xNwoKYEJpZ051bWJlcmAgY2xhc3NlcyBub3cgaW1wbGVtZW50IFtKc29uU2VyaWFsaXphYmxlXShodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuanNvbnNlcmlhbGl6YWJsZS5waHApLgpUaGUgSlNPTiBvdXRwdXQgaXMgYWx3YXlzIGEgc3RyaW5nLgoKIyMgWzAuNS4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjMpIC0gMjAxNi0wMy0zMQoKVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlLiBEaXZpZGluZyBieSBhIG5lZ2F0aXZlIHBvd2VyIG9mIDEgd2l0aCB0aGUgc2FtZSBzY2FsZSBhcyB0aGUgZGl2aWRlbmQgY291bGQgdHJpZ2dlciBhbiBpbmNvcnJlY3Qgb3B0aW1pemF0aW9uIHdoaWNoIHJlc3VsdGVkIGluIGEgd3JvbmcgcmVzdWx0LiBTZWUgIzYuCgojIyBbMC41LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjUuMikgLSAyMDE1LTA4LTA2CgpUaGUgYCRzY2FsZWAgcGFyYW1ldGVyIG9mIGBCaWdEZWNpbWFsOjpkaXZpZGVkQnkoKWAgaXMgbm93IG9wdGlvbmFsIGFnYWluLgoKIyMgWzAuNS4xXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjEpIC0gMjAxNS0wNy0wNQoKKipOZXcgbWV0aG9kOiBgQmlnTnVtYmVyOjp0b1NjYWxlKClgKioKClRoaXMgYWxsb3dzIHRvIGNvbnZlcnQgYW55IGBCaWdOdW1iZXJgIHRvIGEgYEJpZ0RlY2ltYWxgIHdpdGggYSBnaXZlbiBzY2FsZSwgdXNpbmcgcm91bmRpbmcgaWYgbmVjZXNzYXJ5LgoKIyMgWzAuNS4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC41LjApIC0gMjAxNS0wNy0wNAoKKipOZXcgZmVhdHVyZXMqKgotIENvbW1vbiBgQmlnTnVtYmVyYCBpbnRlcmZhY2UgZm9yIGFsbCBjbGFzc2VzLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAtIGBzaWduKClgIGFuZCBkZXJpdmVkIG1ldGhvZHMgKGBpc1plcm8oKWAsIGBpc1Bvc2l0aXZlKClgLCAuLi4pCiAgLSBgY29tcGFyZVRvKClgIGFuZCBkZXJpdmVkIG1ldGhvZHMgKGBpc0VxdWFsVG8oKWAsIGBpc0dyZWF0ZXJUaGFuKClgLCAuLi4pIHRoYXQgd29yayBhY3Jvc3MgZGlmZmVyZW50IGBCaWdOdW1iZXJgIHR5cGVzCiAgLSBgdG9CaWdJbnRlZ2VyKClgLCBgdG9CaWdEZWNpbWFsKClgLCBgdG9CaWdSYXRpb25hbGAoKSBjb252ZXJzaW9uIG1ldGhvZHMKICAtIGB0b0ludGVnZXIoKWAgYW5kIGB0b0Zsb2F0KClgIGNvbnZlcnNpb24gbWV0aG9kcyB0byBuYXRpdmUgdHlwZXMKLSBVbmlmaWVkIGBvZigpYCBiZWhhdmlvdXI6IGV2ZXJ5IGNsYXNzIG5vdyBhY2NlcHRzIGFueSB0eXBlIG9mIG51bWJlciwgcHJvdmlkZWQgdGhhdCBpdCBjYW4gYmUgc2FmZWx5IGNvbnZlcnRlZCB0byB0aGUgY3VycmVudCB0eXBlCi0gTmV3IG1ldGhvZDogYEJpZ0RlY2ltYWw6OmV4YWN0bHlEaXZpZGVkQnkoKWA7IHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY29tcHV0ZXMgdGhlIHNjYWxlIG9mIHRoZSByZXN1bHQsIHByb3ZpZGVkIHRoYXQgdGhlIGRpdmlzaW9uIHlpZWxkcyBhIGZpbml0ZSBudW1iZXIgb2YgZGlnaXRzCi0gTmV3IG1ldGhvZHM6IGBCaWdSYXRpb25hbDo6cXVvdGllbnQoKWAgYW5kIGByZW1haW5kZXIoKWAKLSBGaW5lLWdyYWluZWQgZXhjZXB0aW9uczogYERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uYCwgYFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uYCwgYE51bWJlckZvcm1hdEV4Y2VwdGlvbmAKLSBGYWN0b3J5IG1ldGhvZHMgYHplcm8oKWAsIGBvbmUoKWAgYW5kIGB0ZW4oKWAgYXZhaWxhYmxlIGluIGFsbCBjbGFzc2VzCi0gUm91bmRpbmcgbW9kZSByZWludHJvZHVjZWQgaW4gYEJpZ0ludGVnZXI6OmRpdmlkZWRCeSgpYAoKVGhpcyByZWxlYXNlIGFsc28gY29tZXMgd2l0aCBtYW55IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCi0tLQoKKipCcmVha2luZyBjaGFuZ2VzKioKLSBgQmlnSW50ZWdlcmA6CiAgLSBgZ2V0U2lnbigpYCBpcyByZW5hbWVkIHRvIGBzaWduKClgCiAgLSBgdG9TdHJpbmcoKWAgaXMgcmVuYW1lZCB0byBgdG9CYXNlKClgCiAgLSBgQmlnSW50ZWdlcjo6ZGl2aWRlZEJ5KClgIG5vdyB0aHJvd3MgYW4gZXhjZXB0aW9uIGJ5IGRlZmF1bHQgaWYgdGhlIHJlbWFpbmRlciBpcyBub3QgemVybzsgdXNlIGBxdW90aWVudCgpYCB0byBnZXQgdGhlIHByZXZpb3VzIGJlaGF2aW91cgotIGBCaWdEZWNpbWFsYDoKICAtIGBnZXRTaWduKClgIGlzIHJlbmFtZWQgdG8gYHNpZ24oKWAKICAtIGBnZXRVbnNjYWxlZFZhbHVlKClgIGlzIHJlbmFtZWQgdG8gYHVuc2NhbGVkVmFsdWUoKWAKICAtIGBnZXRTY2FsZSgpYCBpcyByZW5hbWVkIHRvIGBzY2FsZSgpYAogIC0gYGdldEludGVncmFsKClgIGlzIHJlbmFtZWQgdG8gYGludGVncmFsKClgCiAgLSBgZ2V0RnJhY3Rpb24oKWAgaXMgcmVuYW1lZCB0byBgZnJhY3Rpb24oKWAKICAtIGBkaXZpZGVBbmRSZW1haW5kZXIoKWAgaXMgcmVuYW1lZCB0byBgcXVvdGllbnRBbmRSZW1haW5kZXIoKWAKICAtIGBkaXZpZGVkQnkoKWAgbm93IHRha2VzIGEgKiptYW5kYXRvcnkqKiBgJHNjYWxlYCBwYXJhbWV0ZXIgKipiZWZvcmUqKiB0aGUgcm91bmRpbmcgbW9kZQogIC0gYHRvQmlnSW50ZWdlcigpYCBkb2VzIG5vdCBhY2NlcHQgYSBgJHJvdW5kaW5nTW9kZWAgcGFyYW1ldGVyIGFueSBtb3JlCiAgLSBgdG9CaWdSYXRpb25hbCgpYCBkb2VzIG5vdCBzaW1wbGlmeSB0aGUgZnJhY3Rpb24gYW55IG1vcmU7IGV4cGxpY2l0bHkgYWRkIGAtPnNpbXBsaWZpZWQoKWAgdG8gZ2V0IHRoZSBwcmV2aW91cyBiZWhhdmlvdXIKLSBgQmlnUmF0aW9uYWxgOgogIC0gYGdldFNpZ24oKWAgaXMgcmVuYW1lZCB0byBgc2lnbigpYAogIC0gYGdldE51bWVyYXRvcigpYCBpcyByZW5hbWVkIHRvICBgbnVtZXJhdG9yKClgCiAgLSBgZ2V0RGVub21pbmF0b3IoKWAgaXMgcmVuYW1lZCB0byAgYGRlbm9taW5hdG9yKClgCiAgLSBgb2YoKWAgaXMgcmVuYW1lZCB0byBgbmQoKWAsIHdoaWxlIGBwYXJzZSgpYCBpcyByZW5hbWVkIHRvIGBvZigpYAotIE1pc2NlbGxhbmVvdXM6CiAgLSBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgaXMgbW92ZWQgdG8gYW4gYEV4Y2VwdGlvblxgIHN1Yi1uYW1lc3BhY2UKICAtIGBvZigpYCBmYWN0b3J5IG1ldGhvZHMgbm93IHRocm93IGBOdW1iZXJGb3JtYXRFeGNlcHRpb25gIGluc3RlYWQgb2YgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAKCiMjIFswLjQuM10oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNC4zKSAtIDIwMTYtMDMtMzEKCkJhY2twb3J0IG9mIHR3byBidWcgZml4ZXMgZnJvbSB0aGUgMC41IGJyYW5jaDoKLSBgQmlnSW50ZWdlcjo6cGFyc2UoKWAgZGlkIG5vdCBhbHdheXMgdGhyb3cgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgYXMgZXhwZWN0ZWQKLSBEaXZpZGluZyBieSBhIG5lZ2F0aXZlIHBvd2VyIG9mIDEgd2l0aCB0aGUgc2FtZSBzY2FsZSBhcyB0aGUgZGl2aWRlbmQgY291bGQgdHJpZ2dlciBhbiBpbmNvcnJlY3Qgb3B0aW1pemF0aW9uIHdoaWNoIHJlc3VsdGVkIGluIGEgd3JvbmcgcmVzdWx0LiBTZWUgIzYuCgojIyBbMC40LjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjQuMikgLSAyMDE1LTA2LTE2CgpOZXcgbWV0aG9kOiBgQmlnRGVjaW1hbDo6c3RyaXBUcmFpbGluZ1plcm9zKClgCgojIyBbMC40LjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjQuMSkgLSAyMDE1LTA2LTEyCgpJbnRyb2R1Y2luZyBhIGBCaWdSYXRpb25hbGAgY2xhc3MsIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIG9uIGZyYWN0aW9ucyBvZiBhbnkgc2l6ZS4KCiMjIFswLjQuMF0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuNC4wKSAtIDIwMTUtMDYtMTIKClJvdW5kaW5nIG1vZGVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYEJpZ0ludGVnZXJgLCBhbmQgYXJlIG5vdyBhIGNvbmNlcHQgc3BlY2lmaWMgdG8gYEJpZ0RlY2ltYWxgLgoKYEJpZ0ludGVnZXI6OmRpdmlkZWRCeSgpYCBub3cgYWx3YXlzIHJldHVybnMgdGhlIHF1b3RpZW50IG9mIHRoZSBkaXZpc2lvbi4KCiMjIFswLjMuNV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy41KSAtIDIwMTYtMDMtMzEKCkJhY2twb3J0IG9mIHR3byBidWcgZml4ZXMgZnJvbSB0aGUgMC41IGJyYW5jaDoKCi0gYEJpZ0ludGVnZXI6OnBhcnNlKClgIGRpZCBub3QgYWx3YXlzIHRocm93IGBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25gIGFzIGV4cGVjdGVkCi0gRGl2aWRpbmcgYnkgYSBuZWdhdGl2ZSBwb3dlciBvZiAxIHdpdGggdGhlIHNhbWUgc2NhbGUgYXMgdGhlIGRpdmlkZW5kIGNvdWxkIHRyaWdnZXIgYW4gaW5jb3JyZWN0IG9wdGltaXphdGlvbiB3aGljaCByZXN1bHRlZCBpbiBhIHdyb25nIHJlc3VsdC4gU2VlICM2LgoKIyMgWzAuMy40XShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjQpIC0gMjAxNS0wNi0xMQoKTmV3IG1ldGhvZHM6Ci0gYEJpZ0ludGVnZXI6OnJlbWFpbmRlcigpYCByZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgYSBkaXZpc2lvbiBvbmx5Ci0gYEJpZ0ludGVnZXI6OmdjZCgpYCByZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gbnVtYmVycwoKIyMgWzAuMy4zXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjMpIC0gMjAxNS0wNi0wNwoKRml4IGB0b1N0cmluZygpYCBub3QgaGFuZGxpbmcgbmVnYXRpdmUgbnVtYmVycy4KCiMjIFswLjMuMl0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy4yKSAtIDIwMTUtMDYtMDcKCmBCaWdJbnRlZ2VyYCBhbmQgYEJpZ0RlY2ltYWxgIG5vdyBoYXZlIGEgYGdldFNpZ24oKWAgbWV0aG9kIHRoYXQgcmV0dXJuczoKLSBgLTFgIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUKLSBgMGAgaWYgdGhlIG51bWJlciBpcyB6ZXJvCi0gYDFgIGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUKCiMjIFswLjMuMV0oaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcmVsZWFzZXMvdGFnLzAuMy4xKSAtIDIwMTUtMDYtMDUKCk1pbm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwoKIyMgWzAuMy4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4zLjApIC0gMjAxNS0wNi0wNAoKVGhlIGAkcm91bmRpbmdNb2RlYCBhbmQgYCRzY2FsZWAgcGFyYW1ldGVycyBoYXZlIGJlZW4gc3dhcHBlZCBpbiBgQmlnRGVjaW1hbDo6ZGl2aWRlZEJ5KClgLgoKIyMgWzAuMi4yXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjIpIC0gMjAxNS0wNi0wNAoKU3Ryb25nZXIgaW1tdXRhYmlsaXR5IGd1YXJhbnRlZSBmb3IgYEJpZ0ludGVnZXJgIGFuZCBgQmlnRGVjaW1hbGAuCgpTbyBmYXIsIGl0IHdvdWxkIGhhdmUgYmVlbiBwb3NzaWJsZSB0byBicmVhayBpbW11dGFiaWxpdHkgb2YgdGhlc2UgY2xhc3NlcyBieSBjYWxsaW5nIHRoZSBgdW5zZXJpYWxpemUoKWAgaW50ZXJuYWwgZnVuY3Rpb24uIFRoaXMgcmVsZWFzZSBmaXhlcyB0aGF0LgoKIyMgWzAuMi4xXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjEpIC0gMjAxNS0wNi0wMgoKQWRkZWQgYEJpZ0RlY2ltYWw6OmRpdmlkZUFuZFJlbWFpbmRlcigpYAoKIyMgWzAuMi4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4yLjApIC0gMjAxNS0wNS0yMgoKLSBgbWluKClgIGFuZCBgbWF4KClgIGRvIG5vdCBhY2NlcHQgYW4gYGFycmF5YCBhbnkgbW9yZSwgYnV0IGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMKLSAqKm1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IDUuNioqCi0gY29udGludW91cyBpbnRlZ3JhdGlvbiB3aXRoIFBIUCA3CgojIyBbMC4xLjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3JlbGVhc2VzL3RhZy8wLjEuMSkgLSAyMDE0LTA5LTAxCgotIEFkZGVkIGBCaWdJbnRlZ2VyOjpwb3dlcigpYAotIEFkZGVkIEhIVk0gc3VwcG9ydAoKIyMgWzAuMS4wXShodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aC9yZWxlYXNlcy90YWcvMC4xLjApIC0gMjAxNC0wOC0zMQoKRmlyc3QgYmV0YSByZWxlYXNlLgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiYnJpY2svbWF0aCIsCiAgICAiZGVzY3JpcHRpb24iOiAiQXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljIGxpYnJhcnkiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgIkJyaWNrIiwKICAgICAgICAiTWF0aCIsCiAgICAgICAgIkFyYml0cmFyeS1wcmVjaXNpb24iLAogICAgICAgICJBcml0aG1ldGljIiwKICAgICAgICAiQmlnSW50ZWdlciIsCiAgICAgICAgIkJpZ0RlY2ltYWwiLAogICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgIkJpZ251bSIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICJeNy4xIHx8IF44LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjUuMTUgfHwgXjguNSB8fCBeOS4wIiwKICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjIiLAogICAgICAgICJ2aW1lby9wc2FsbSI6ICI0LjkuMiIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQnJpY2tcXE1hdGhcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFxUZXN0c1xcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCBCZW5qYW1pbiBNb3JlbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCnRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUgpDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/SECURITY.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBTZWN1cml0eSBQb2xpY3kKCiMjIFN1cHBvcnRlZCBWZXJzaW9ucwoKT25seSB0aGUgbGFzdCB0d28gcmVsZWFzZSBzdHJlYW1zIGFyZSBzdXBwb3J0ZWQuCgp8IFZlcnNpb24gfCBTdXBwb3J0ZWQgICAgICAgICAgfAp8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfAp8IDAuOS54ICAgfCA6d2hpdGVfY2hlY2tfbWFyazogfAp8IDAuOC54ICAgfCA6d2hpdGVfY2hlY2tfbWFyazogfAp8IDwgMC44ICAgfCA6eDogICAgICAgICAgICAgICAgfAoKIyMgUmVwb3J0aW5nIGEgVnVsbmVyYWJpbGl0eQoKVG8gcmVwb3J0IGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgcGxlYXNlIHVzZSB0aGUKW1RpZGVsaWZ0IHNlY3VyaXR5IGNvbnRhY3RdKGh0dHBzOi8vdGlkZWxpZnQuY29tL3NlY3VyaXR5KS4KVGlkZWxpZnQgd2lsbCBjb29yZGluYXRlIHRoZSBmaXggYW5kIGRpc2Nsb3N1cmUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigDecimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTmVnYXRpdmVOdW1iZXJFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogSW1tdXRhYmxlLCBhcmJpdHJhcnktcHJlY2lzaW9uIHNpZ25lZCBkZWNpbWFsIG51bWJlcnMuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEJpZ0RlY2ltYWwgZXh0ZW5kcyBCaWdOdW1iZXIKewogICAgLyoqCiAgICAgKiBUaGUgdW5zY2FsZWQgdmFsdWUgb2YgdGhpcyBkZWNpbWFsIG51bWJlci4KICAgICAqCiAgICAgKiBUaGlzIGlzIGEgc3RyaW5nIG9mIGRpZ2l0cyB3aXRoIGFuIG9wdGlvbmFsIGxlYWRpbmcgbWludXMgc2lnbi4KICAgICAqIE5vIGxlYWRpbmcgemVybyBtdXN0IGJlIHByZXNlbnQuCiAgICAgKiBObyBsZWFkaW5nIG1pbnVzIHNpZ24gbXVzdCBiZSBwcmVzZW50IGlmIHRoZSB2YWx1ZSBpcyAwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogVGhlIHNjYWxlIChudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50KSBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIFRoaXMgbXVzdCBiZSB6ZXJvIG9yIG1vcmUuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkc2NhbGU7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgdW5zY2FsZWQgdmFsdWUsIHZhbGlkYXRlZC4KICAgICAqIEBwYXJhbSBpbnQgICAgJHNjYWxlIFRoZSBzY2FsZSwgdmFsaWRhdGVkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSwgaW50ICRzY2FsZSA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgICAgICR0aGlzLT5zY2FsZSA9ICRzY2FsZTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdEZWNpbWFsIG9mIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKCR2YWx1ZSkgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpvZigkdmFsdWUpLT50b0JpZ0RlY2ltYWwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdEZWNpbWFsIGZyb20gYW4gdW5zY2FsZWQgdmFsdWUgYW5kIGEgc2NhbGUuCiAgICAgKgogICAgICogRXhhbXBsZTogYCgxMjM0NSwgMylgIHdpbGwgcmVzdWx0IGluIHRoZSBCaWdEZWNpbWFsIGAxMi4zNDVgLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdmFsdWUgVGhlIHVuc2NhbGVkIHZhbHVlLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAkc2NhbGUgVGhlIHNjYWxlIG9mIHRoZSBudW1iZXIsIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBzY2FsZSBpcyBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mVW5zY2FsZWRWYWx1ZSgkdmFsdWUsIGludCAkc2NhbGUgPSAwKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICBpZiAoJHNjYWxlIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHNjYWxlIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQmlnRGVjaW1hbCgoc3RyaW5nKSBCaWdJbnRlZ2VyOjpvZigkdmFsdWUpLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0RlY2ltYWwgcmVwcmVzZW50aW5nIHplcm8sIHdpdGggYSBzY2FsZSBvZiB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gemVybygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnRGVjaW1hbHxudWxsICR6ZXJvCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICR6ZXJvOwoKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBuZXcgQmlnRGVjaW1hbCgnMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR6ZXJvOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0RlY2ltYWwgcmVwcmVzZW50aW5nIG9uZSwgd2l0aCBhIHNjYWxlIG9mIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvbmUoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljVmFyaWFibGUKICAgICAgICAgKiBAdmFyIEJpZ0RlY2ltYWx8bnVsbCAkb25lCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICRvbmU7CgogICAgICAgIGlmICgkb25lID09PSBudWxsKSB7CiAgICAgICAgICAgICRvbmUgPSBuZXcgQmlnRGVjaW1hbCgnMScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgQmlnRGVjaW1hbCByZXByZXNlbnRpbmcgdGVuLCB3aXRoIGEgc2NhbGUgb2YgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnRGVjaW1hbHxudWxsICR0ZW4KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHRlbjsKCiAgICAgICAgaWYgKCR0ZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgJHRlbiA9IG5ldyBCaWdEZWNpbWFsKCcxMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gYWRkLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVzKCR0aGF0KSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnICYmICR0aGF0LT5zY2FsZSA8PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSA9PT0gJzAnICYmICR0aGlzLT5zY2FsZSA8PSAkdGhhdC0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgWyRhLCAkYl0gPSAkdGhpcy0+c2NhbGVWYWx1ZXMoJHRoaXMsICR0aGF0KTsKCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmFkZCgkYSwgJGIpOwogICAgICAgICRzY2FsZSA9ICR0aGlzLT5zY2FsZSA+ICR0aGF0LT5zY2FsZSA/ICR0aGlzLT5zY2FsZSA6ICR0aGF0LT5zY2FsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gc3VidHJhY3QuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZCwgb3IgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbnVzKCR0aGF0KSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnICYmICR0aGF0LT5zY2FsZSA8PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgWyRhLCAkYl0gPSAkdGhpcy0+c2NhbGVWYWx1ZXMoJHRoaXMsICR0aGF0KTsKCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPnN1YigkYSwgJGIpOwogICAgICAgICRzY2FsZSA9ICR0aGlzLT5zY2FsZSA+ICR0aGF0LT5zY2FsZSA/ICR0aGlzLT5zY2FsZSA6ICR0aGF0LT5zY2FsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgJHRoaXMtPnNjYWxlICsgJHRoYXQtPnNjYWxlYC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIG11bHRpcGxpZXIuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbXVsdGlwbGllciBpcyBub3QgYSB2YWxpZCBudW1iZXIsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBsaWVkQnkoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMScgJiYgJHRoYXQtPnNjYWxlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcxJyAmJiAkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm11bCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlICsgJHRoYXQtPnNjYWxlOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHZhbHVlLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLCBhdCB0aGUgZ2l2ZW4gc2NhbGUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0ICAgICAgICAgVGhlIGRpdmlzb3IuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgICAgICAgICAgICAgICAgICAgJHNjYWxlICAgICAgICBUaGUgZGVzaXJlZCBzY2FsZSwgb3IgbnVsbCB0byB1c2UgdGhlIHNjYWxlIG9mIHRoaXMgbnVtYmVyLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICRyb3VuZGluZ01vZGUgQW4gb3B0aW9uYWwgcm91bmRpbmcgbW9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNjYWxlIG9yIHJvdW5kaW5nIG1vZGUgaXMgaW52YWxpZC4KICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIGlzIGludmFsaWQsIGlzIHplcm8sIG9yIHJvdW5kaW5nIHdhcyBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGVkQnkoJHRoYXQsID9pbnQgJHNjYWxlID0gbnVsbCwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT5pc1plcm8oKSkgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc2NhbGUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlOwogICAgICAgIH0gZWxzZWlmICgkc2NhbGUgPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdTY2FsZSBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMScgJiYgJHRoYXQtPnNjYWxlID09PSAwICYmICRzY2FsZSA9PT0gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRwID0gJHRoaXMtPnZhbHVlV2l0aE1pblNjYWxlKCR0aGF0LT5zY2FsZSArICRzY2FsZSk7CiAgICAgICAgJHEgPSAkdGhhdC0+dmFsdWVXaXRoTWluU2NhbGUoJHRoaXMtPnNjYWxlIC0gJHNjYWxlKTsKCiAgICAgICAgJHJlc3VsdCA9IENhbGN1bGF0b3I6OmdldCgpLT5kaXZSb3VuZCgkcCwgJHEsICRyb3VuZGluZ01vZGUpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHJlc3VsdCwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4YWN0IHJlc3VsdCBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIHJlc3VsdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgdG8gZml0IGFsbCB0aGUgZnJhY3Rpb24gZGlnaXRzLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbCwgaXMgemVybywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgcmVzdWx0IHlpZWxkcyBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGlnaXRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhhY3RseURpdmlkZWRCeSgkdGhhdCkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdEZWNpbWFsOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIFssICRiXSA9ICR0aGlzLT5zY2FsZVZhbHVlcygkdGhpcywgJHRoYXQpOwoKICAgICAgICAkZCA9IFxydHJpbSgkYiwgJzAnKTsKICAgICAgICAkc2NhbGUgPSBcc3RybGVuKCRiKSAtIFxzdHJsZW4oJGQpOwoKICAgICAgICAkY2FsY3VsYXRvciA9IENhbGN1bGF0b3I6OmdldCgpOwoKICAgICAgICBmb3JlYWNoIChbNSwgMl0gYXMgJHByaW1lKSB7CiAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICRsYXN0RGlnaXQgPSAoaW50KSAkZFstMV07CgogICAgICAgICAgICAgICAgaWYgKCRsYXN0RGlnaXQgJSAkcHJpbWUgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZCA9ICRjYWxjdWxhdG9yLT5kaXZRKCRkLCAoc3RyaW5nKSAkcHJpbWUpOwogICAgICAgICAgICAgICAgJHNjYWxlKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGl2aWRlZEJ5KCR0aGF0LCAkc2NhbGUpLT5zdHJpcFRyYWlsaW5nWmVyb3MoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhpcyBudW1iZXIgZXhwb25lbnRpYXRlZCB0byB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogVGhlIHJlc3VsdCBoYXMgYSBzY2FsZSBvZiBgJHRoaXMtPnNjYWxlICogJGV4cG9uZW50YC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBleHBvbmVudCBpcyBub3QgaW4gdGhlIHJhbmdlIDAgdG8gMSwwMDAsMDAwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93ZXIoaW50ICRleHBvbmVudCkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnRGVjaW1hbDo6b25lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkZXhwb25lbnQgPCAwIHx8ICRleHBvbmVudCA+IENhbGN1bGF0b3I6Ok1BWF9QT1dFUikgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgZXhwb25lbnQgJWQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvICVkLicsCiAgICAgICAgICAgICAgICAkZXhwb25lbnQsCiAgICAgICAgICAgICAgICBDYWxjdWxhdG9yOjpNQVhfUE9XRVIKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoQ2FsY3VsYXRvcjo6Z2V0KCktPnBvdygkdGhpcy0+dmFsdWUsICRleHBvbmVudCksICR0aGlzLT5zY2FsZSAqICRleHBvbmVudCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhpcyBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHF1b3RpZW50IGhhcyBhIHNjYWxlIG9mIGAwYC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdEZWNpbWFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnRGVjaW1hbCBUaGUgcXVvdGllbnQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIGRlY2ltYWwgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGllbnQoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPmlzWmVybygpKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHAgPSAkdGhpcy0+dmFsdWVXaXRoTWluU2NhbGUoJHRoYXQtPnNjYWxlKTsKICAgICAgICAkcSA9ICR0aGF0LT52YWx1ZVdpdGhNaW5TY2FsZSgkdGhpcy0+c2NhbGUpOwoKICAgICAgICAkcXVvdGllbnQgPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2USgkcCwgJHEpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHF1b3RpZW50LCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhpcyBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHJlbWFpbmRlciBoYXMgYSBzY2FsZSBvZiBgbWF4KCR0aGlzLT5zY2FsZSwgJHRoYXQtPnNjYWxlKWAuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIHJlbWFpbmRlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgbm90IGEgdmFsaWQgZGVjaW1hbCBudW1iZXIsIG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1haW5kZXIoJHRoYXQpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnRGVjaW1hbDo6b2YoJHRoYXQpOwoKICAgICAgICBpZiAoJHRoYXQtPmlzWmVybygpKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHAgPSAkdGhpcy0+dmFsdWVXaXRoTWluU2NhbGUoJHRoYXQtPnNjYWxlKTsKICAgICAgICAkcSA9ICR0aGF0LT52YWx1ZVdpdGhNaW5TY2FsZSgkdGhpcy0+c2NhbGUpOwoKICAgICAgICAkcmVtYWluZGVyID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlIoJHAsICRxKTsKCiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlID4gJHRoYXQtPnNjYWxlID8gJHRoaXMtPnNjYWxlIDogJHRoYXQtPnNjYWxlOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHJlbWFpbmRlciwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogVGhlIHF1b3RpZW50IGhhcyBhIHNjYWxlIG9mIGAwYCwgYW5kIHRoZSByZW1haW5kZXIgaGFzIGEgc2NhbGUgb2YgYG1heCgkdGhpcy0+c2NhbGUsICR0aGF0LT5zY2FsZSlgLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0RlY2ltYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsW10gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXIuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIGRlY2ltYWwgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGllbnRBbmRSZW1haW5kZXIoJHRoYXQpIDogYXJyYXkKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0RlY2ltYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT5pc1plcm8oKSkgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgICRwID0gJHRoaXMtPnZhbHVlV2l0aE1pblNjYWxlKCR0aGF0LT5zY2FsZSk7CiAgICAgICAgJHEgPSAkdGhhdC0+dmFsdWVXaXRoTWluU2NhbGUoJHRoaXMtPnNjYWxlKTsKCiAgICAgICAgWyRxdW90aWVudCwgJHJlbWFpbmRlcl0gPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2UVIoJHAsICRxKTsKCiAgICAgICAgJHNjYWxlID0gJHRoaXMtPnNjYWxlID4gJHRoYXQtPnNjYWxlID8gJHRoaXMtPnNjYWxlIDogJHRoYXQtPnNjYWxlOwoKICAgICAgICAkcXVvdGllbnQgPSBuZXcgQmlnRGVjaW1hbCgkcXVvdGllbnQsIDApOwogICAgICAgICRyZW1haW5kZXIgPSBuZXcgQmlnRGVjaW1hbCgkcmVtYWluZGVyLCAkc2NhbGUpOwoKICAgICAgICByZXR1cm4gWyRxdW90aWVudCwgJHJlbWFpbmRlcl07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIG51bWJlciwgcm91bmRlZCBkb3duIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2NhbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNjYWxlIGlzIG5lZ2F0aXZlLgogICAgICogQHRocm93cyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoaW50ICRzY2FsZSkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NjYWxlIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJzAnLCAkc2NhbGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZVswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbignQ2Fubm90IGNhbGN1bGF0ZSB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBuZWdhdGl2ZSBudW1iZXIuJyk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWU7CiAgICAgICAgJGFkZERpZ2l0cyA9IDIgKiAkc2NhbGUgLSAkdGhpcy0+c2NhbGU7CgogICAgICAgIGlmICgkYWRkRGlnaXRzID4gMCkgewogICAgICAgICAgICAvLyBhZGQgemVyb3MKICAgICAgICAgICAgJHZhbHVlIC49IFxzdHJfcmVwZWF0KCcwJywgJGFkZERpZ2l0cyk7CiAgICAgICAgfSBlbHNlaWYgKCRhZGREaWdpdHMgPCAwKSB7CiAgICAgICAgICAgIC8vIHRyaW0gZGlnaXRzCiAgICAgICAgICAgIGlmICgtJGFkZERpZ2l0cyA+PSBcc3RybGVuKCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RpbmcgYSBzY2FsZSB0b28gbG93LCB3aWxsIGFsd2F5cyB5aWVsZCBhIHplcm8gcmVzdWx0CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJzAnLCAkc2NhbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFsdWUgPSBcc3Vic3RyKCR2YWx1ZSwgMCwgJGFkZERpZ2l0cyk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+c3FydCgkdmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHZhbHVlLCAkc2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBCaWdEZWNpbWFsIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQgJG4gcGxhY2VzIHRvIHRoZSBsZWZ0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQb2ludE1vdmVkTGVmdChpbnQgJG4pIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIGlmICgkbiA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG4gPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+d2l0aFBvaW50TW92ZWRSaWdodCgtJG4pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR0aGlzLT52YWx1ZSwgJHRoaXMtPnNjYWxlICsgJG4pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBCaWdEZWNpbWFsIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQgbW92ZWQgJG4gcGxhY2VzIHRvIHRoZSByaWdodC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9pbnRNb3ZlZFJpZ2h0KGludCAkbikgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgaWYgKCRuID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkbiA8IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT53aXRoUG9pbnRNb3ZlZExlZnQoLSRuKTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkc2NhbGUgPSAkdGhpcy0+c2NhbGUgLSAkbjsKCiAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSAhPT0gJzAnKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgLj0gXHN0cl9yZXBlYXQoJzAnLCAtJHNjYWxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2NhbGUgPSAwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKCR2YWx1ZSwgJHNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgQmlnRGVjaW1hbCB3aXRoIGFueSB0cmFpbGluZyB6ZXJvcyByZW1vdmVkIGZyb20gdGhlIGZyYWN0aW9uYWwgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdaZXJvcygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIGlmICgkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJHRyaW1tZWRWYWx1ZSA9IFxydHJpbSgkdGhpcy0+dmFsdWUsICcwJyk7CgogICAgICAgIGlmICgkdHJpbW1lZFZhbHVlID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gQmlnRGVjaW1hbDo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgJHRyaW1tYWJsZVplcm9zID0gXHN0cmxlbigkdGhpcy0+dmFsdWUpIC0gXHN0cmxlbigkdHJpbW1lZFZhbHVlKTsKCiAgICAgICAgaWYgKCR0cmltbWFibGVaZXJvcyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRyaW1tYWJsZVplcm9zID4gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgICR0cmltbWFibGVaZXJvcyA9ICR0aGlzLT5zY2FsZTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9IFxzdWJzdHIoJHRoaXMtPnZhbHVlLCAwLCAtJHRyaW1tYWJsZVplcm9zKTsKICAgICAgICAkc2NhbGUgPSAkdGhpcy0+c2NhbGUgLSAkdHJpbW1hYmxlWmVyb3M7CgogICAgICAgIHJldHVybiBuZXcgQmlnRGVjaW1hbCgkdmFsdWUsICRzY2FsZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFicygpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXNOZWdhdGl2ZSgpID8gJHRoaXMtPm5lZ2F0ZWQoKSA6ICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmVnYXRlZCB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoQ2FsY3VsYXRvcjo6Z2V0KCktPm5lZygkdGhpcy0+dmFsdWUpLCAkdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKCR0aGF0KSA6IGludAogICAgewogICAgICAgICR0aGF0ID0gQmlnTnVtYmVyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdCBpbnN0YW5jZW9mIEJpZ0ludGVnZXIpIHsKICAgICAgICAgICAgJHRoYXQgPSAkdGhhdC0+dG9CaWdEZWNpbWFsKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIFskYSwgJGJdID0gJHRoaXMtPnNjYWxlVmFsdWVzKCR0aGlzLCAkdGhhdCk7CgogICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRvcjo6Z2V0KCktPmNtcCgkYSwgJGIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIC0gJHRoYXQtPmNvbXBhcmVUbygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT52YWx1ZSA9PT0gJzAnKSA/IDAgOiAoKCR0aGlzLT52YWx1ZVswXSA9PT0gJy0nKSA/IC0xIDogMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVuc2NhbGVkVmFsdWUoKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6Y3JlYXRlKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NhbGUoKSA6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaW50ZWdyYWwgcGFydCBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEV4YW1wbGU6IGAtMTIzLjQ1NmAgPT4gYC0xMjNgLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbnRlZ3JhbFBhcnQoKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+c2NhbGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5nZXRVbnNjYWxlZFZhbHVlV2l0aExlYWRpbmdaZXJvcygpOwoKICAgICAgICByZXR1cm4gXHN1YnN0cigkdmFsdWUsIDAsIC0kdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGlzIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIElmIHRoZSBzY2FsZSBpcyB6ZXJvLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogRXhhbXBsZXM6IGAtMTIzLjQ1NmAgPT4gJzQ1NicsIGAxMjNgID0+ICcnLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsUGFydCgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zY2FsZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKTsKCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHZhbHVlLCAtJHRoaXMtPnNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGRlY2ltYWwgbnVtYmVyIGhhcyBhIG5vbi16ZXJvIGZyYWN0aW9uYWwgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc05vblplcm9GcmFjdGlvbmFsUGFydCgpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RnJhY3Rpb25hbFBhcnQoKSAhPT0gXHN0cl9yZXBlYXQoJzAnLCAkdGhpcy0+c2NhbGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CaWdJbnRlZ2VyKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHplcm9TY2FsZURlY2ltYWwgPSAkdGhpcy0+c2NhbGUgPT09IDAgPyAkdGhpcyA6ICR0aGlzLT5kaXZpZGVkQnkoMSwgMCk7CgogICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjpjcmVhdGUoJHplcm9TY2FsZURlY2ltYWwtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnRGVjaW1hbCgpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJG51bWVyYXRvciA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgkdGhpcy0+dmFsdWUpOwogICAgICAgICRkZW5vbWluYXRvciA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgnMScgLiBcc3RyX3JlcGVhdCgnMCcsICR0aGlzLT5zY2FsZSkpOwoKICAgICAgICByZXR1cm4gQmlnUmF0aW9uYWw6OmNyZWF0ZSgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvU2NhbGUoaW50ICRzY2FsZSwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICBpZiAoJHNjYWxlID09PSAkdGhpcy0+c2NhbGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZpZGVkQnkoQmlnRGVjaW1hbDo6b25lKCksICRzY2FsZSwgJHJvdW5kaW5nTW9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludCgpIDogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0JpZ0ludGVnZXIoKS0+dG9JbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvRmxvYXQoKSA6IGZsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuIChmbG9hdCkgKHN0cmluZykgJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnNjYWxlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKTsKCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHZhbHVlLCAwLCAtJHRoaXMtPnNjYWxlKSAuICcuJyAuIFxzdWJzdHIoJHZhbHVlLCAtJHRoaXMtPnNjYWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBzZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7dmFsdWU6IHN0cmluZywgc2NhbGU6IGludH0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsndmFsdWUnID0+ICR0aGlzLT52YWx1ZSwgJ3NjYWxlJyA9PiAkdGhpcy0+c2NhbGVdOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGFsbG93IHVuc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXt2YWx1ZTogc3RyaW5nLCBzY2FsZTogaW50fSAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+dmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ19fdW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJGRhdGFbJ3ZhbHVlJ107CiAgICAgICAgJHRoaXMtPnNjYWxlID0gJGRhdGFbJ3NjYWxlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBieSBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUgLiAnOicgLiAkdGhpcy0+c2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGhlcmUgdG8gaW1wbGVtZW50IGludGVyZmFjZSBTZXJpYWxpemFibGUgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRQcm9wZXJ0eUluaXRpYWxpemF0aW9uQ2hlY2sKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkdmFsdWUpIDogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+dmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ3Vuc2VyaWFsaXplKCkgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4nKTsKICAgICAgICB9CgogICAgICAgIFskdmFsdWUsICRzY2FsZV0gPSBcZXhwbG9kZSgnOicsICR2YWx1ZSk7CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgICAgICAkdGhpcy0+c2NhbGUgPSAoaW50KSAkc2NhbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXRzIHRoZSBpbnRlcm5hbCB2YWx1ZXMgb2YgdGhlIGdpdmVuIGRlY2ltYWwgbnVtYmVycyBvbiB0aGUgc2FtZSBzY2FsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnRGVjaW1hbCAkeCBUaGUgZmlyc3QgZGVjaW1hbCBudW1iZXIuCiAgICAgKiBAcGFyYW0gQmlnRGVjaW1hbCAkeSBUaGUgc2Vjb25kIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7c3RyaW5nLCBzdHJpbmd9IFRoZSBzY2FsZWQgaW50ZWdlciB2YWx1ZXMgb2YgJHggYW5kICR5LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNjYWxlVmFsdWVzKEJpZ0RlY2ltYWwgJHgsIEJpZ0RlY2ltYWwgJHkpIDogYXJyYXkKICAgIHsKICAgICAgICAkYSA9ICR4LT52YWx1ZTsKICAgICAgICAkYiA9ICR5LT52YWx1ZTsKCiAgICAgICAgaWYgKCRiICE9PSAnMCcgJiYgJHgtPnNjYWxlID4gJHktPnNjYWxlKSB7CiAgICAgICAgICAgICRiIC49IFxzdHJfcmVwZWF0KCcwJywgJHgtPnNjYWxlIC0gJHktPnNjYWxlKTsKICAgICAgICB9IGVsc2VpZiAoJGEgIT09ICcwJyAmJiAkeC0+c2NhbGUgPCAkeS0+c2NhbGUpIHsKICAgICAgICAgICAgJGEgLj0gXHN0cl9yZXBlYXQoJzAnLCAkeS0+c2NhbGUgLSAkeC0+c2NhbGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskYSwgJGJdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2NhbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbHVlV2l0aE1pblNjYWxlKGludCAkc2NhbGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlOwoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlICE9PSAnMCcgJiYgJHNjYWxlID4gJHRoaXMtPnNjYWxlKSB7CiAgICAgICAgICAgICR2YWx1ZSAuPSBcc3RyX3JlcGVhdCgnMCcsICRzY2FsZSAtICR0aGlzLT5zY2FsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBsZWFkaW5nIHplcm9zIGlmIG5lY2Vzc2FyeSB0byB0aGUgdW5zY2FsZWQgdmFsdWUgdG8gcmVwcmVzZW50IHRoZSBmdWxsIGRlY2ltYWwgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0VW5zY2FsZWRWYWx1ZVdpdGhMZWFkaW5nWmVyb3MoKSA6IHN0cmluZwogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkdGFyZ2V0TGVuZ3RoID0gJHRoaXMtPnNjYWxlICsgMTsKICAgICAgICAkbmVnYXRpdmUgPSAoJHZhbHVlWzBdID09PSAnLScpOwogICAgICAgICRsZW5ndGggPSBcc3RybGVuKCR2YWx1ZSk7CgogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgJGxlbmd0aC0tOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsZW5ndGggPj0gJHRhcmdldExlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICAkdmFsdWUgPSBcc3Vic3RyKCR2YWx1ZSwgMSk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBcc3RyX3BhZCgkdmFsdWUsICR0YXJnZXRMZW5ndGgsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICAkdmFsdWUgPSAnLScgLiAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTmVnYXRpdmVOdW1iZXJFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxOdW1iZXJGb3JtYXRFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQW4gYXJiaXRyYXJ5LXNpemUgaW50ZWdlci4KICoKICogQWxsIG1ldGhvZHMgYWNjZXB0aW5nIGEgbnVtYmVyIGFzIGEgcGFyYW1ldGVyIGFjY2VwdCBlaXRoZXIgYSBCaWdJbnRlZ2VyIGluc3RhbmNlLAogKiBhbiBpbnRlZ2VyLCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gYXJiaXRyYXJ5IHNpemUgaW50ZWdlci4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQmlnSW50ZWdlciBleHRlbmRzIEJpZ051bWJlcgp7CiAgICAvKioKICAgICAqIFRoZSB2YWx1ZSwgYXMgYSBzdHJpbmcgb2YgZGlnaXRzIHdpdGggb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduLgogICAgICoKICAgICAqIE5vIGxlYWRpbmcgemVyb3MgbXVzdCBiZSBwcmVzZW50LgogICAgICogTm8gbGVhZGluZyBtaW51cyBzaWduIG11c3QgYmUgcHJlc2VudCBpZiB0aGUgbnVtYmVyIGlzIHplcm8uCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBBIHN0cmluZyBvZiBkaWdpdHMsIHdpdGggb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgQmlnSW50ZWdlciBvZiB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigkdmFsdWUpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgcmV0dXJuIHBhcmVudDo6b2YoJHZhbHVlKS0+dG9CaWdJbnRlZ2VyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbnVtYmVyIGZyb20gYSBzdHJpbmcgaW4gYSBnaXZlbiBiYXNlLgogICAgICoKICAgICAqIFRoZSBzdHJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCB0aGUgYCtgIG9yIGAtYCBzaWduLgogICAgICoKICAgICAqIEJhc2VzIGdyZWF0ZXIgdGhhbiAzNiBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZCwgYXMgdGhlcmUgaXMgbm8gY2xlYXIgY29uc2Vuc3VzIG9uIHdoaWNoIG9mIHRoZSBsb3dlcmNhc2UKICAgICAqIG9yIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHNob3VsZCBjb21lIGZpcnN0LiBJbnN0ZWFkLCB0aGlzIG1ldGhvZCBhY2NlcHRzIGFueSBiYXNlIHVwIHRvIDM2LCBhbmQgZG9lcyBub3QKICAgICAqIGRpZmZlcmVudGlhdGUgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgY2hhcmFjdGVycywgd2hpY2ggYXJlIGNvbnNpZGVyZWQgZXF1YWwuCiAgICAgKgogICAgICogRm9yIGJhc2VzIGdyZWF0ZXIgdGhhbiAzNiwgYW5kL29yIGN1c3RvbSBhbHBoYWJldHMsIHVzZSB0aGUgZnJvbUFyYml0cmFyeUJhc2UoKSBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIFRoZSBudW1iZXIgdG8gY29udmVydCwgaW4gdGhlIGdpdmVuIGJhc2UuCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgVGhlIGJhc2Ugb2YgdGhlIG51bWJlciwgYmV0d2VlbiAyIGFuZCAzNi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiAgICAgSWYgdGhlIG51bWJlciBpcyBlbXB0eSwgb3IgY29udGFpbnMgaW52YWxpZCBjaGFycyBmb3IgdGhlIGdpdmVuIGJhc2UuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGJhc2UgaXMgb3V0IG9mIHJhbmdlLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oJ1RoZSBudW1iZXIgY2Fubm90IGJlIGVtcHR5LicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiYXNlIDwgMiB8fCAkYmFzZSA+IDM2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdCYXNlICVkIGlzIG5vdCBpbiByYW5nZSAyIHRvIDM2LicsICRiYXNlKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlclswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgICRzaWduID0gJy0nOwogICAgICAgICAgICAkbnVtYmVyID0gXHN1YnN0cigkbnVtYmVyLCAxKTsKICAgICAgICB9IGVsc2VpZiAoJG51bWJlclswXSA9PT0gJysnKSB7CiAgICAgICAgICAgICRzaWduID0gJyc7CiAgICAgICAgICAgICRudW1iZXIgPSBcc3Vic3RyKCRudW1iZXIsIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlciA9PT0gJycpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE51bWJlckZvcm1hdEV4Y2VwdGlvbignVGhlIG51bWJlciBjYW5ub3QgYmUgZW1wdHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gXGx0cmltKCRudW1iZXIsICcwJyk7CgogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICAvLyBUaGUgcmVzdWx0IHdpbGwgYmUgdGhlIHNhbWUgaW4gYW55IGJhc2UsIGF2b2lkIGZ1cnRoZXIgY2FsY3VsYXRpb24uCiAgICAgICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjp6ZXJvKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bWJlciA9PT0gJzEnKSB7CiAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSBpbiBhbnkgYmFzZSwgYXZvaWQgZnVydGhlciBjYWxjdWxhdGlvbi4KICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRzaWduIC4gJzEnKTsKICAgICAgICB9CgogICAgICAgICRwYXR0ZXJuID0gJy9bXicgLiBcc3Vic3RyKENhbGN1bGF0b3I6OkFMUEhBQkVULCAwLCAkYmFzZSkgLiAnXS8nOwoKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJHBhdHRlcm4sIFxzdHJ0b2xvd2VyKCRudW1iZXIpLCAkbWF0Y2hlcykgPT09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE51bWJlckZvcm1hdEV4Y2VwdGlvbihcc3ByaW50ZignIiVzIiBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIgaW4gYmFzZSAlZC4nLCAkbWF0Y2hlc1swXSwgJGJhc2UpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmFzZSA9PT0gMTApIHsKICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB1c2FibGUgYXMgaXMsIGF2b2lkIGZ1cnRoZXIgY2FsY3VsYXRpb24uCiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkc2lnbiAuICRudW1iZXIpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IENhbGN1bGF0b3I6OmdldCgpLT5mcm9tQmFzZSgkbnVtYmVyLCAkYmFzZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkc2lnbiAuICRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gaW50ZWdlciBpbiBhbiBhcmJpdHJhcnkgYmFzZSwgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQuCiAgICAgKgogICAgICogQmVjYXVzZSB0aGlzIG1ldGhvZCBhY2NlcHRzIGFuIGFscGhhYmV0IHdpdGggYW55IGNoYXJhY3RlciwgaW5jbHVkaW5nIGRhc2gsIGl0IGRvZXMgbm90IGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bWJlciAgIFRoZSBudW1iZXIgdG8gcGFyc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbHBoYWJldCBUaGUgYWxwaGFiZXQsIGZvciBleGFtcGxlICcwMScgZm9yIGJhc2UgMiwgb3IgJzAxMjM0NTY3JyBmb3IgYmFzZSA4LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uICAgICBJZiB0aGUgZ2l2ZW4gbnVtYmVyIGlzIGVtcHR5IG9yIGNvbnRhaW5zIGludmFsaWQgY2hhcnMgZm9yIHRoZSBnaXZlbiBhbHBoYWJldC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgYWxwaGFiZXQgZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJzLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFyYml0cmFyeUJhc2Uoc3RyaW5nICRudW1iZXIsIHN0cmluZyAkYWxwaGFiZXQpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCdUaGUgbnVtYmVyIGNhbm5vdCBiZSBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgICRiYXNlID0gXHN0cmxlbigkYWxwaGFiZXQpOwoKICAgICAgICBpZiAoJGJhc2UgPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgYWxwaGFiZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IDIgY2hhcnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkcGF0dGVybiA9ICcvW14nIC4gXHByZWdfcXVvdGUoJGFscGhhYmV0LCAnLycpIC4gJ10vJzsKCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkbnVtYmVyLCAkbWF0Y2hlcykgPT09IDEpIHsKICAgICAgICAgICAgdGhyb3cgTnVtYmVyRm9ybWF0RXhjZXB0aW9uOjpjaGFyTm90SW5BbHBoYWJldCgkbWF0Y2hlc1swXSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmZyb21BcmJpdHJhcnlCYXNlKCRudW1iZXIsICRhbHBoYWJldCwgJGJhc2UpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoJG51bWJlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmFuc2xhdGVzIGEgc3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIEJpZ0ludGVnZXIgaW50byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogVGhlIGlucHV0IHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlIGluIGJpZy1lbmRpYW4gYnl0ZS1vcmRlcjogdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBpbiB0aGUgemVyb3RoIGVsZW1lbnQuCiAgICAgKgogICAgICogSWYgYCRzaWduZWRgIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBhc3N1bWVkIHRvIGJlIGluIHR3bydzLWNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24sIGFuZCB0aGUgbGVhZGluZyBiaXQgaXMKICAgICAqIGludGVycHJldGVkIGFzIGEgc2lnbiBiaXQuIElmIGAkc2lnbmVkYCBpcyBmYWxzZSwgdGhlIGlucHV0IGlzIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIG51bWJlciwgYW5kIHRoZQogICAgICogcmVzdWx0aW5nIEJpZ0ludGVnZXIgd2lsbCBhbHdheXMgYmUgcG9zaXRpdmUgb3IgemVyby4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBhIG51bWJlciBleHBvcnRlZCBieSBgdG9CeXRlcygpYCwgYXMgbG9uZyBhcyB0aGUgYCRzaWduZWRgIGZsYWdzIG1hdGNoLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlICBUaGUgYnl0ZSBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYm9vbCAgICRzaWduZWQgV2hldGhlciB0byBpbnRlcnByZXQgYXMgYSBzaWduZWQgbnVtYmVyIGluIHR3bydzLWNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24gd2l0aCBhIGxlYWRpbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBzaWduIGJpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CeXRlcyhzdHJpbmcgJHZhbHVlLCBib29sICRzaWduZWQgPSB0cnVlKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBub3QgYmUgZW1wdHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkdHdvc0NvbXBsZW1lbnQgPSBmYWxzZTsKCiAgICAgICAgaWYgKCRzaWduZWQpIHsKICAgICAgICAgICAgJHggPSBcb3JkKCR2YWx1ZVswXSk7CgogICAgICAgICAgICBpZiAoKCR0d29zQ29tcGxlbWVudCA9ICgkeCA+PSAweDgwKSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IH4kdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRudW1iZXIgPSBzZWxmOjpmcm9tQmFzZShcYmluMmhleCgkdmFsdWUpLCAxNik7CgogICAgICAgIGlmICgkdHdvc0NvbXBsZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICRudW1iZXItPnBsdXMoMSktPm5lZ2F0ZWQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgcHNldWRvLXJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIDAgdG8gMl5udW1CaXRzIC0gMS4KICAgICAqCiAgICAgKiBVc2luZyB0aGUgZGVmYXVsdCByYW5kb20gYnl0ZXMgZ2VuZXJhdG9yLCB0aGlzIG1ldGhvZCBpcyBzdWl0YWJsZSBmb3IgY3J5cHRvZ3JhcGhpYyB1c2UuCiAgICAgKgogICAgICogQHBzYWxtLXBhcmFtIGNhbGxhYmxlKGludCk6IHN0cmluZyAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAkbnVtQml0cyAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBiaXRzLgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgbnVtYmVyIG9mIGJ5dGVzIGFzIGFuIGludGVnZXIsIGFuZCByZXR1cm5zIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzIG9mIHRoZSBnaXZlbiBsZW5ndGguIERlZmF1bHRzIHRvIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByYW5kb21fYnl0ZXMoKWAgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmICRudW1CaXRzIGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbUJpdHMoaW50ICRudW1CaXRzLCA/Y2FsbGFibGUgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yID0gbnVsbCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRudW1CaXRzIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIG51bWJlciBvZiBiaXRzIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbnVtQml0cyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyYW5kb21CeXRlc0dlbmVyYXRvciA9PT0gbnVsbCkgewogICAgICAgICAgICAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IgPSAncmFuZG9tX2J5dGVzJzsKICAgICAgICB9CgogICAgICAgICRieXRlTGVuZ3RoID0gXGludGRpdigkbnVtQml0cyAtIDEsIDgpICsgMTsKCiAgICAgICAgJGV4dHJhQml0cyA9ICgkYnl0ZUxlbmd0aCAqIDggLSAkbnVtQml0cyk7CiAgICAgICAgJGJpdG1hc2sgICA9IFxjaHIoMHhGRiA+PiAkZXh0cmFCaXRzKTsKCiAgICAgICAgJHJhbmRvbUJ5dGVzICAgID0gJHJhbmRvbUJ5dGVzR2VuZXJhdG9yKCRieXRlTGVuZ3RoKTsKICAgICAgICAkcmFuZG9tQnl0ZXNbMF0gPSAkcmFuZG9tQnl0ZXNbMF0gJiAkYml0bWFzazsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZyb21CeXRlcygkcmFuZG9tQnl0ZXMsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIHBzZXVkby1yYW5kb20gbnVtYmVyIGJldHdlZW4gYCRtaW5gIGFuZCBgJG1heGAuCiAgICAgKgogICAgICogVXNpbmcgdGhlIGRlZmF1bHQgcmFuZG9tIGJ5dGVzIGdlbmVyYXRvciwgdGhpcyBtZXRob2QgaXMgc3VpdGFibGUgZm9yIGNyeXB0b2dyYXBoaWMgdXNlLgogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSAoY2FsbGFibGUoaW50KTogc3RyaW5nKXxudWxsICRyYW5kb21CeXRlc0dlbmVyYXRvcgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkbWluICAgICAgICAgICAgICAgICAgVGhlIGxvd2VyIGJvdW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkbWF4ICAgICAgICAgICAgICAgICAgVGhlIHVwcGVyIGJvdW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICAgICAgICAgICAgICAkcmFuZG9tQnl0ZXNHZW5lcmF0b3IgQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBudW1iZXIgb2YgYnl0ZXMgYXMgYW4gaW50ZWdlciwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzIG9mIHRoZSBnaXZlbiBsZW5ndGguCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBgcmFuZG9tX2J5dGVzKClgIGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgb3IgYCRtaW5gIGlzIGdyZWF0ZXIgdGhhbiBgJG1heGAuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmFuZG9tUmFuZ2UoJG1pbiwgJG1heCwgP2NhbGxhYmxlICRyYW5kb21CeXRlc0dlbmVyYXRvciA9IG51bGwpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgICRtaW4gPSBCaWdJbnRlZ2VyOjpvZigkbWluKTsKICAgICAgICAkbWF4ID0gQmlnSW50ZWdlcjo6b2YoJG1heCk7CgogICAgICAgIGlmICgkbWluLT5pc0dyZWF0ZXJUaGFuKCRtYXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBNYXRoRXhjZXB0aW9uKCckbWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJG1heC4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWluLT5pc0VxdWFsVG8oJG1heCkpIHsKICAgICAgICAgICAgcmV0dXJuICRtaW47CiAgICAgICAgfQoKICAgICAgICAkZGlmZiAgICAgID0gJG1heC0+bWludXMoJG1pbik7CiAgICAgICAgJGJpdExlbmd0aCA9ICRkaWZmLT5nZXRCaXRMZW5ndGgoKTsKCiAgICAgICAgLy8gdHJ5IHVudGlsIHRoZSBudW1iZXIgaXMgaW4gcmFuZ2UgKDUwJSB0byAxMDAlIGNoYW5jZSBvZiBzdWNjZXNzKQogICAgICAgIGRvIHsKICAgICAgICAgICAgJHJhbmRvbU51bWJlciA9IHNlbGY6OnJhbmRvbUJpdHMoJGJpdExlbmd0aCwgJHJhbmRvbUJ5dGVzR2VuZXJhdG9yKTsKICAgICAgICB9IHdoaWxlICgkcmFuZG9tTnVtYmVyLT5pc0dyZWF0ZXJUaGFuKCRkaWZmKSk7CgogICAgICAgIHJldHVybiAkcmFuZG9tTnVtYmVyLT5wbHVzKCRtaW4pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0ludGVnZXIgcmVwcmVzZW50aW5nIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB6ZXJvKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdJbnRlZ2VyfG51bGwgJHplcm8KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHplcm87CgogICAgICAgIGlmICgkemVybyA9PT0gbnVsbCkgewogICAgICAgICAgICAkemVybyA9IG5ldyBCaWdJbnRlZ2VyKCcwJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHplcm87CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgQmlnSW50ZWdlciByZXByZXNlbnRpbmcgb25lLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25lKCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdJbnRlZ2VyfG51bGwgJG9uZQogICAgICAgICAqLwogICAgICAgIHN0YXRpYyAkb25lOwoKICAgICAgICBpZiAoJG9uZSA9PT0gbnVsbCkgewogICAgICAgICAgICAkb25lID0gbmV3IEJpZ0ludGVnZXIoJzEnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb25lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ0ludGVnZXIgcmVwcmVzZW50aW5nIHRlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnSW50ZWdlcnxudWxsICR0ZW4KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgJHRlbjsKCiAgICAgICAgaWYgKCR0ZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgJHRlbiA9IG5ldyBCaWdJbnRlZ2VyKCcxMCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBudW1iZXIgYW5kIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBudW1iZXIgdG8gYWRkLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVzKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJHRoYXQ7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+YWRkKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbnVtYmVyIHRvIHN1YnRyYWN0LiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQsIG9yIGlzIG5vdCBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW51cygkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+c3ViKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbXVsdGlwbGllci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBtdWx0aXBsaWVyIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgb3IgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGxpZWRCeSgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm11bCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCAgICAgICAgIFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAkcm91bmRpbmdNb2RlIEFuIG9wdGlvbmFsIHJvdW5kaW5nIG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgaXMgbm90IGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlciwgaXMgemVybywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBvciBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZIGlzIHVzZWQgYW5kIHRoZSByZW1haW5kZXIgaXMgbm90IHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGVkQnkoJHRoYXQsIGludCAkcm91bmRpbmdNb2RlID0gUm91bmRpbmdNb2RlOjpVTk5FQ0VTU0FSWSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMCcpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRpdmlzaW9uQnlaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlJvdW5kKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlLCAkcm91bmRpbmdNb2RlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciBleHBvbmVudGlhdGVkIHRvIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBleHBvbmVudCBpcyBub3QgaW4gdGhlIHJhbmdlIDAgdG8gMSwwMDAsMDAwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93ZXIoaW50ICRleHBvbmVudCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6b25lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICgkZXhwb25lbnQgPCAwIHx8ICRleHBvbmVudCA+IENhbGN1bGF0b3I6Ok1BWF9QT1dFUikgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgZXhwb25lbnQgJWQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvICVkLicsCiAgICAgICAgICAgICAgICAkZXhwb25lbnQsCiAgICAgICAgICAgICAgICBDYWxjdWxhdG9yOjpNQVhfUE9XRVIKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoQ2FsY3VsYXRvcjo6Z2V0KCktPnBvdygkdGhpcy0+dmFsdWUsICRleHBvbmVudCkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmIHRoZSBkaXZpc29yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudCgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoYXQtPnZhbHVlID09PSAnMCcpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRpdmlzaW9uQnlaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcXVvdGllbnQgPSBDYWxjdWxhdG9yOjpnZXQoKS0+ZGl2USgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkcXVvdGllbnQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0aGlzIG51bWJlciBieSB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSByZW1haW5kZXIsIHdoZW4gbm9uLXplcm8sIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdJbnRlZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbWFpbmRlcigkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6emVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkaXZpc2lvbkJ5WmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHJlbWFpbmRlciA9IENhbGN1bGF0b3I6OmdldCgpLT5kaXZSKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRyZW1haW5kZXIpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgYW5kIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gb2YgdGhpcyBudW1iZXIgYnkgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIGRpdmlzb3IuIE11c3QgYmUgY29udmVydGlibGUgdG8gYSBCaWdJbnRlZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcltdIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHF1b3RpZW50IGFuZCB0aGUgcmVtYWluZGVyLgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1b3RpZW50QW5kUmVtYWluZGVyKCR0aGF0KSA6IGFycmF5CiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICB0aHJvdyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbjo6ZGl2aXNpb25CeVplcm8oKTsKICAgICAgICB9CgogICAgICAgIFskcXVvdGllbnQsICRyZW1haW5kZXJdID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmRpdlFSKCR0aGlzLT52YWx1ZSwgJHRoYXQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJHF1b3RpZW50KSwKICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJHJlbWFpbmRlcikKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbW9kdWxvIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSBtb2R1bG8gb3BlcmF0aW9uIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIHJlbWFpbmRlciBvcGVyYXRpb24gd2hlbiBib3RoIG9wZXJhbmRzIGFyZSBvZiB0aGUgc2FtZSBzaWduLAogICAgICogYW5kIG1heSBkaWZmZXIgd2hlbiBzaWducyBhcmUgZGlmZmVyZW50LgogICAgICoKICAgICAqIFRoZSByZXN1bHQgb2YgdGhlIG1vZHVsbyBvcGVyYXRpb24sIHdoZW4gbm9uLXplcm8sIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgZGl2aXNvci4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKgogICAgICogQHRocm93cyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBJZiB0aGUgZGl2aXNvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0LT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjptb2R1bHVzTXVzdE5vdEJlWmVybygpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm1vZCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgQmlnSW50ZWdlciBtb2R1bG8gJG0uCiAgICAgKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJG0KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmICRtIGlzIHplcm8uCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmICRtIGlzIG5lZ2F0aXZlLgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uICAgICAgICAgICBJZiB0aGlzIEJpZ0ludGVnZXIgaGFzIG5vIG11bHRpcGxpY2F0aXZlIGludmVyc2UgbW9kIG0gKHRoYXQgaXMsIHRoaXMgQmlnSW50ZWdlcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgcmVsYXRpdmVseSBwcmltZSB0byBtKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZEludmVyc2UoQmlnSW50ZWdlciAkbSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRtLT52YWx1ZSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjptb2R1bHVzTXVzdE5vdEJlWmVybygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRtLT5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uKCdNb2R1bHVzIG11c3Qgbm90IGJlIG5lZ2F0aXZlLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRtLT52YWx1ZSA9PT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjp6ZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBDYWxjdWxhdG9yOjpnZXQoKS0+bW9kSW52ZXJzZSgkdGhpcy0+dmFsdWUsICRtLT52YWx1ZSk7CgogICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE1hdGhFeGNlcHRpb24oJ1VuYWJsZSB0byBjb21wdXRlIHRoZSBtb2RJbnZlcnNlIGZvciB0aGUgZ2l2ZW4gbW9kdWx1cy4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciByYWlzZWQgaW50byBwb3dlciB3aXRoIG1vZHVsby4KICAgICAqCiAgICAgKiBUaGlzIG9wZXJhdGlvbiBvbmx5IHdvcmtzIG9uIHBvc2l0aXZlIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICRleHAgVGhlIGV4cG9uZW50LiBNdXN0IGJlIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJG1vZCBUaGUgbW9kdWx1cy4gTXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmIGFueSBvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIElmIHRoZSBtb2R1bHVzIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coJGV4cCwgJG1vZCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJGV4cCA9IEJpZ0ludGVnZXI6Om9mKCRleHApOwogICAgICAgICRtb2QgPSBCaWdJbnRlZ2VyOjpvZigkbW9kKTsKCiAgICAgICAgaWYgKCR0aGlzLT5pc05lZ2F0aXZlKCkgfHwgJGV4cC0+aXNOZWdhdGl2ZSgpIHx8ICRtb2QtPmlzTmVnYXRpdmUoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oJ1RoZSBvcGVyYW5kcyBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1vZC0+aXNaZXJvKCkpIHsKICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246Om1vZHVsdXNNdXN0Tm90QmVaZXJvKCk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gQ2FsY3VsYXRvcjo6Z2V0KCktPm1vZFBvdygkdGhpcy0+dmFsdWUsICRleHAtPnZhbHVlLCAkbW9kLT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIFRoZSBHQ0QgaXMgYWx3YXlzIHBvc2l0aXZlLCB1bmxlc3MgYm90aCBvcGVyYW5kcyBhcmUgemVybywgaW4gd2hpY2ggY2FzZSBpdCBpcyB6ZXJvLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgb3BlcmFuZC4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhbiBpbnRlZ2VyIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdjZCgkdGhhdCkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdJbnRlZ2VyOjpvZigkdGhhdCk7CgogICAgICAgIGlmICgkdGhhdC0+dmFsdWUgPT09ICcwJyAmJiAkdGhpcy0+dmFsdWVbMF0gIT09ICctJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09PSAnMCcgJiYgJHRoYXQtPnZhbHVlWzBdICE9PSAnLScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGF0OwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPmdjZCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBzcXVhcmUgcm9vdCBudW1iZXIgb2YgdGhpcyBudW1iZXIsIHJvdW5kZWQgZG93bi4KICAgICAqCiAgICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBsYXJnZXN0IHggc3VjaCB0aGF0IHjCsiDiiaQgbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIE5lZ2F0aXZlTnVtYmVyRXhjZXB0aW9uIElmIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3FydCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkdGhpcy0+dmFsdWVbMF0gPT09ICctJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oJ0Nhbm5vdCBjYWxjdWxhdGUgdGhlIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgbnVtYmVyLicpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gQ2FsY3VsYXRvcjo6Z2V0KCktPnNxcnQoJHRoaXMtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFicygpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXNOZWdhdGl2ZSgpID8gJHRoaXMtPm5lZ2F0ZWQoKSA6ICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoQ2FsY3VsYXRvcjo6Z2V0KCktPm5lZygkdGhpcy0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgYml0d2lzZS1hbmQgY29tYmluZWQgd2l0aCBhbm90aGVyIGludGVnZXIuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5lZ2F0aXZlIEJpZ0ludGVnZXIgaWYgYW5kIG9ubHkgaWYgYm90aCBvcGVyYW5kcyBhcmUgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBvcGVyYW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGFuIGludGVnZXIgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5kKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT5hbmQoJHRoaXMtPnZhbHVlLCAkdGhhdC0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgYml0d2lzZS1vciBjb21iaW5lZCB3aXRoIGFub3RoZXIgaW50ZWdlci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmVnYXRpdmUgQmlnSW50ZWdlciBpZiBhbmQgb25seSBpZiBlaXRoZXIgb2YgdGhlIG9wZXJhbmRzIGlzIG5lZ2F0aXZlLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgb3BlcmFuZC4gTXVzdCBiZSBjb252ZXJ0aWJsZSB0byBhbiBpbnRlZ2VyIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9yKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT5vcigkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBiaXR3aXNlLXhvciBjb21iaW5lZCB3aXRoIGFub3RoZXIgaW50ZWdlci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmVnYXRpdmUgQmlnSW50ZWdlciBpZiBhbmQgb25seSBpZiBleGFjdGx5IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBvcGVyYW5kLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGFuIGludGVnZXIgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKCR0aGF0KSA6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ0ludGVnZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKENhbGN1bGF0b3I6OmdldCgpLT54b3IoJHRoaXMtPnZhbHVlLCAkdGhhdC0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2Utbm90IG9mIHRoaXMgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vdCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmVnYXRlZCgpLT5taW51cygxKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGludGVnZXIgbGVmdCBzaGlmdGVkIGJ5IGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGlzdGFuY2UgVGhlIGRpc3RhbmNlIHRvIHNoaWZ0LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRlZExlZnQoaW50ICRkaXN0YW5jZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRkaXN0YW5jZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRpc3RhbmNlIDwgMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRSaWdodCgtICRkaXN0YW5jZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm11bHRpcGxpZWRCeShCaWdJbnRlZ2VyOjpvZigyKS0+cG93ZXIoJGRpc3RhbmNlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHJpZ2h0IHNoaWZ0ZWQgYnkgYSBnaXZlbiBudW1iZXIgb2YgYml0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRkaXN0YW5jZSBUaGUgZGlzdGFuY2UgdG8gc2hpZnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdGVkUmlnaHQoaW50ICRkaXN0YW5jZSkgOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgaWYgKCRkaXN0YW5jZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRpc3RhbmNlIDwgMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRMZWZ0KC0gJGRpc3RhbmNlKTsKICAgICAgICB9CgogICAgICAgICRvcGVyYW5kID0gQmlnSW50ZWdlcjo6b2YoMiktPnBvd2VyKCRkaXN0YW5jZSk7CgogICAgICAgIGlmICgkdGhpcy0+aXNQb3NpdGl2ZU9yWmVybygpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cXVvdGllbnQoJG9wZXJhbmQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZpZGVkQnkoJG9wZXJhbmQsIFJvdW5kaW5nTW9kZTo6VVApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIG1pbmltYWwgdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEJpZ0ludGVnZXIsIGV4Y2x1ZGluZyBhIHNpZ24gYml0LgogICAgICoKICAgICAqIEZvciBwb3NpdGl2ZSBCaWdJbnRlZ2VycywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3JkaW5hcnkgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgogICAgICogQ29tcHV0ZXMgKGNlaWwobG9nMih0aGlzIDwgMCA/IC10aGlzIDogdGhpcysxKSkpLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXRMZW5ndGgoKSA6IGludAogICAgewogICAgICAgIGlmICgkdGhpcy0+dmFsdWUgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCktPm1pbnVzKDEpLT5nZXRCaXRMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RybGVuKCR0aGlzLT50b0Jhc2UoMikpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJpZ2h0bW9zdCAobG93ZXN0LW9yZGVyKSBvbmUgYml0IGluIHRoaXMgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBSZXR1cm5zIC0xIGlmIHRoaXMgQmlnSW50ZWdlciBjb250YWlucyBubyBvbmUgYml0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG93ZXN0U2V0Qml0KCkgOiBpbnQKICAgIHsKICAgICAgICAkbiA9ICR0aGlzOwogICAgICAgICRiaXRMZW5ndGggPSAkdGhpcy0+Z2V0Qml0TGVuZ3RoKCk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8PSAkYml0TGVuZ3RoOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkbi0+aXNPZGQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbiA9ICRuLT5zaGlmdGVkUmlnaHQoMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBudW1iZXIgaXMgZXZlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRXZlbigpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiBcaW5fYXJyYXkoJHRoaXMtPnZhbHVlWy0xXSwgWycwJywgJzInLCAnNCcsICc2JywgJzgnXSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBudW1iZXIgaXMgb2RkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPZGQoKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGluX2FycmF5KCR0aGlzLT52YWx1ZVstMV0sIFsnMScsICczJywgJzUnLCAnNycsICc5J10sIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBkZXNpZ25hdGVkIGJpdCBpcyBzZXQuCiAgICAgKgogICAgICogQ29tcHV0ZXMgKCh0aGlzICYgKDE8PG4pKSAhPSAwKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuIFRoZSBiaXQgdG8gdGVzdCwgMC1iYXNlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIGJpdCB0byB0ZXN0IGlzIG5lZ2F0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEJpdChpbnQgJG4pIDogYm9vbAogICAgewogICAgICAgIGlmICgkbiA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBiaXQgdG8gdGVzdCBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0ZWRSaWdodCgkbiktPmlzT2RkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlVG8oJHRoYXQpIDogaW50CiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdOdW1iZXI6Om9mKCR0aGF0KTsKCiAgICAgICAgaWYgKCR0aGF0IGluc3RhbmNlb2YgQmlnSW50ZWdlcikgewogICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRvcjo6Z2V0KCktPmNtcCgkdGhpcy0+dmFsdWUsICR0aGF0LT52YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gLSAkdGhhdC0+Y29tcGFyZVRvKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ24oKSA6IGludAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnZhbHVlID09PSAnMCcpID8gMCA6ICgoJHRoaXMtPnZhbHVlWzBdID09PSAnLScpID8gLTEgOiAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnRGVjaW1hbCgpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBCaWdEZWNpbWFsOjpjcmVhdGUoJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuIEJpZ1JhdGlvbmFsOjpjcmVhdGUoJHRoaXMsIEJpZ0ludGVnZXI6Om9uZSgpLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1NjYWxlKGludCAkc2NhbGUsIGludCAkcm91bmRpbmdNb2RlID0gUm91bmRpbmdNb2RlOjpVTk5FQ0VTU0FSWSkgOiBCaWdEZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0JpZ0RlY2ltYWwoKS0+dG9TY2FsZSgkc2NhbGUsICRyb3VuZGluZ01vZGUpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKSA6IGludAogICAgewogICAgICAgICRpbnRWYWx1ZSA9IChpbnQpICR0aGlzLT52YWx1ZTsKCiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSAhPT0gKHN0cmluZykgJGludFZhbHVlKSB7CiAgICAgICAgICAgIHRocm93IEludGVnZXJPdmVyZmxvd0V4Y2VwdGlvbjo6dG9JbnRPdmVyZmxvdygkdGhpcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGludFZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9GbG9hdCgpIDogZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gKGZsb2F0KSAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgbnVtYmVyIGluIHRoZSBnaXZlbiBiYXNlLgogICAgICoKICAgICAqIFRoZSBvdXRwdXQgd2lsbCBhbHdheXMgYmUgbG93ZXJjYXNlIGZvciBiYXNlcyBncmVhdGVyIHRoYW4gMTAuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYmFzZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBiYXNlIGlzIG91dCBvZiByYW5nZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmFzZShpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRiYXNlID09PSAxMCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiYXNlIDwgMiB8fCAkYmFzZSA+IDM2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdCYXNlICVkIGlzIG91dCBvZiByYW5nZSBbMiwgMzZdJywgJGJhc2UpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBDYWxjdWxhdG9yOjpnZXQoKS0+dG9CYXNlKCR0aGlzLT52YWx1ZSwgJGJhc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG51bWJlciBpbiBhbiBhcmJpdHJhcnkgYmFzZSB3aXRoIGEgY3VzdG9tIGFscGhhYmV0LgogICAgICoKICAgICAqIEJlY2F1c2UgdGhpcyBtZXRob2QgYWNjZXB0cyBhbiBhbHBoYWJldCB3aXRoIGFueSBjaGFyYWN0ZXIsIGluY2x1ZGluZyBkYXNoLCBpdCBkb2VzIG5vdCBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyczsKICAgICAqIGEgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gd2lsbCBiZSB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGNhbGwgdGhpcyBtZXRob2Qgb24gYSBuZWdhdGl2ZSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWxwaGFiZXQgVGhlIGFscGhhYmV0LCBmb3IgZXhhbXBsZSAnMDEnIGZvciBiYXNlIDIsIG9yICcwMTIzNDU2NycgZm9yIGJhc2UgOC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gICBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZ2l2ZW4gYWxwaGFiZXQgZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcmJpdHJhcnlCYXNlKHN0cmluZyAkYWxwaGFiZXQpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGJhc2UgPSBcc3RybGVuKCRhbHBoYWJldCk7CgogICAgICAgIGlmICgkYmFzZSA8IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBhbHBoYWJldCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMiBjaGFycy4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dmFsdWVbMF0gPT09ICctJykgewogICAgICAgICAgICB0aHJvdyBuZXcgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24oX19GVU5DVElPTl9fIC4gJygpIGRvZXMgbm90IHN1cHBvcnQgbmVnYXRpdmUgbnVtYmVycy4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBDYWxjdWxhdG9yOjpnZXQoKS0+dG9BcmJpdHJhcnlCYXNlKCR0aGlzLT52YWx1ZSwgJGFscGhhYmV0LCAkYmFzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIG9mIGJ5dGVzIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogVGhlIHN0cmluZyBpcyBpbiBiaWctZW5kaWFuIGJ5dGUtb3JkZXI6IHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMgaW4gdGhlIHplcm90aCBlbGVtZW50LgogICAgICoKICAgICAqIElmIGAkc2lnbmVkYCBpcyB0cnVlLCB0aGUgb3V0cHV0IHdpbGwgYmUgaW4gdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiwgYW5kIGEgc2lnbiBiaXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8KICAgICAqIHRoZSBvdXRwdXQuIElmIGAkc2lnbmVkYCBpcyBmYWxzZSwgbm8gc2lnbiBiaXQgd2lsbCBiZSBwcmVwZW5kZWQsIGFuZCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUKICAgICAqIG51bWJlciBpcyBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBUaGUgc3RyaW5nIHdpbGwgY29udGFpbiB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoaXMgQmlnSW50ZWdlciwgaW5jbHVkaW5nIGEgc2lnbiBiaXQKICAgICAqIGlmIGAkc2lnbmVkYCBpcyB0cnVlLgogICAgICoKICAgICAqIFRoaXMgcmVwcmVzZW50YXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBgZnJvbUJ5dGVzKClgIGZhY3RvcnkgbWV0aG9kLCBhcyBsb25nIGFzIHRoZSBgJHNpZ25lZGAgZmxhZ3MgbWF0Y2guCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNpZ25lZCBXaGV0aGVyIHRvIG91dHB1dCBhIHNpZ25lZCBudW1iZXIgaW4gdHdvJ3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiB3aXRoIGEgbGVhZGluZyBzaWduIGJpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gSWYgJHNpZ25lZCBpcyBmYWxzZSwgYW5kIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0J5dGVzKGJvb2wgJHNpZ25lZCA9IHRydWUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEgJHNpZ25lZCAmJiAkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU51bWJlckV4Y2VwdGlvbignQ2Fubm90IGNvbnZlcnQgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBieXRlIHN0cmluZyB3aGVuICRzaWduZWQgaXMgZmFsc2UuJyk7CiAgICAgICAgfQoKICAgICAgICAkaGV4ID0gJHRoaXMtPmFicygpLT50b0Jhc2UoMTYpOwoKICAgICAgICBpZiAoXHN0cmxlbigkaGV4KSAlIDIgIT09IDApIHsKICAgICAgICAgICAgJGhleCA9ICcwJyAuICRoZXg7CiAgICAgICAgfQoKICAgICAgICAkYmFzZUhleExlbmd0aCA9IFxzdHJsZW4oJGhleCk7CgogICAgICAgIGlmICgkc2lnbmVkKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAkYmluID0gXGhleDJiaW4oJGhleCk7CiAgICAgICAgICAgICAgICBhc3NlcnQoJGJpbiAhPT0gZmFsc2UpOwoKICAgICAgICAgICAgICAgICRoZXggPSBcYmluMmhleCh+JGJpbik7CiAgICAgICAgICAgICAgICAkaGV4ID0gc2VsZjo6ZnJvbUJhc2UoJGhleCwgMTYpLT5wbHVzKDEpLT50b0Jhc2UoMTYpOwoKICAgICAgICAgICAgICAgICRoZXhMZW5ndGggPSBcc3RybGVuKCRoZXgpOwoKICAgICAgICAgICAgICAgIGlmICgkaGV4TGVuZ3RoIDwgJGJhc2VIZXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAkaGV4ID0gXHN0cl9yZXBlYXQoJzAnLCAkYmFzZUhleExlbmd0aCAtICRoZXhMZW5ndGgpIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGhleFswXSA8ICc4JykgewogICAgICAgICAgICAgICAgICAgICRoZXggPSAnRkYnIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkaGV4WzBdID49ICc4JykgewogICAgICAgICAgICAgICAgICAgICRoZXggPSAnMDAnIC4gJGhleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxoZXgyYmluKCRoZXgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBzZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7dmFsdWU6IHN0cmluZ30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsndmFsdWUnID0+ICR0aGlzLT52YWx1ZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGhlcmUgdG8gYWxsb3cgdW5zZXJpYWxpemluZyB0aGUgb2JqZWN0IGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50UHJvcGVydHlJbml0aWFsaXphdGlvbkNoZWNrCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5e3ZhbHVlOiBzdHJpbmd9ICRkYXRhCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignX191bnNlcmlhbGl6ZSgpIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkZGF0YVsndmFsdWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGJ5IGludGVyZmFjZSBTZXJpYWxpemFibGUgYW5kIFNIT1VMRCBOT1QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgaGVyZSB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCR2YWx1ZSkgOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT52YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigndW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigNumber.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTnVtYmVyRm9ybWF0RXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CgovKioKICogQ29tbW9uIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiByYXRpb25hbCBudW1iZXJzLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwphYnN0cmFjdCBjbGFzcyBCaWdOdW1iZXIgaW1wbGVtZW50cyBcU2VyaWFsaXphYmxlLCBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBwYXJzZSBpbnRlZ2VyLCBkZWNpbWFsIGFuZCByYXRpb25hbCBudW1iZXJzLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFBBUlNFX1JFR0VYUCA9CiAgICAgICAgJy9eJyAuCiAgICAgICAgICAgICcoPzxzaWduPltcLVwrXSk/JyAuCiAgICAgICAgICAgICcoPzonIC4KICAgICAgICAgICAgICAgICcoPzonIC4KICAgICAgICAgICAgICAgICAgICAnKD88aW50ZWdyYWw+WzAtOV0rKT8nIC4KICAgICAgICAgICAgICAgICAgICAnKD88cG9pbnQ+XC4pPycgLgogICAgICAgICAgICAgICAgICAgICcoPzxmcmFjdGlvbmFsPlswLTldKyk/JyAuCiAgICAgICAgICAgICAgICAgICAgJyg/OltlRV0oPzxleHBvbmVudD5bXC1cK10/WzAtOV0rKSk/JyAuCiAgICAgICAgICAgICAgICAnKXwoPzonIC4KICAgICAgICAgICAgICAgICAgICAnKD88bnVtZXJhdG9yPlswLTldKyknIC4KICAgICAgICAgICAgICAgICAgICAnXC8/JyAuCiAgICAgICAgICAgICAgICAgICAgJyg/PGRlbm9taW5hdG9yPlswLTldKyknIC4KICAgICAgICAgICAgICAgICcpJyAuCiAgICAgICAgICAgICcpJyAuCiAgICAgICAgJyQvJzsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdOdW1iZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIFRoZSBjb25jcmV0ZSByZXR1cm4gdHlwZSBpcyBkZXBlbmRlbnQgb24gdGhlIGdpdmVuIHZhbHVlLCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXM6CiAgICAgKgogICAgICogLSBCaWdOdW1iZXIgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCBhcyBpcwogICAgICogLSBpbnRlZ2VyIG51bWJlcnMgYXJlIHJldHVybmVkIGFzIEJpZ0ludGVnZXIKICAgICAqIC0gZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHRoZW4gcGFyc2VkIGFzIHN1Y2gKICAgICAqIC0gc3RyaW5ncyBjb250YWluaW5nIGEgYC9gIGNoYXJhY3RlciBhcmUgcmV0dXJuZWQgYXMgQmlnUmF0aW9uYWwKICAgICAqIC0gc3RyaW5ncyBjb250YWluaW5nIGEgYC5gIGNoYXJhY3RlciBvciB1c2luZyBhbiBleHBvbmVudGlhbCBub3RhdGlvbiBhcmUgcmV0dXJuZWQgYXMgQmlnRGVjaW1hbAogICAgICogLSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBkaWdpdHMgd2l0aCBhbiBvcHRpb25hbCBsZWFkaW5nIGArYCBvciBgLWAgc2lnbiBhcmUgcmV0dXJuZWQgYXMgQmlnSW50ZWdlcgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ051bWJlcgogICAgICoKICAgICAqIEB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uICAgSWYgdGhlIGZvcm1hdCBvZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIHZhbHVlIHJlcHJlc2VudHMgYSByYXRpb25hbCBudW1iZXIgd2l0aCBhIGRlbm9taW5hdG9yIG9mIHplcm8uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigkdmFsdWUpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlcikgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoKHN0cmluZykgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q2FzdEdpdmVuRG9jYmxvY2tUeXBlIFdlIGNhbm5vdCB0cnVzdCB0aGUgdW50eXBlZCAkdmFsdWUgaGVyZSEgKi8KICAgICAgICAkdmFsdWUgPSBcaXNfZmxvYXQoJHZhbHVlKSA/IHNlbGY6OmZsb2F0VG9TdHJpbmcoJHZhbHVlKSA6IChzdHJpbmcpICR2YWx1ZTsKCiAgICAgICAgJHRocm93ID0gc3RhdGljIGZ1bmN0aW9uKCkgdXNlICgkdmFsdWUpIDogdm9pZCB7CiAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oXHNwcmludGYoCiAgICAgICAgICAgICAgICAnVGhlIGdpdmVuIHZhbHVlICIlcyIgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgbnVtYmVyLicsCiAgICAgICAgICAgICAgICAkdmFsdWUKICAgICAgICAgICAgKSk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKHNlbGY6OlBBUlNFX1JFR0VYUCwgJHZhbHVlLCAkbWF0Y2hlcykgIT09IDEpIHsKICAgICAgICAgICAgJHRocm93KCk7CiAgICAgICAgfQoKICAgICAgICAkZ2V0TWF0Y2ggPSBzdGF0aWMgZnVuY3Rpb24oc3RyaW5nICR2YWx1ZSkgdXNlICgkbWF0Y2hlcykgOiA/c3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRtYXRjaGVzWyR2YWx1ZV0pICYmICRtYXRjaGVzWyR2YWx1ZV0gIT09ICcnID8gJG1hdGNoZXNbJHZhbHVlXSA6IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgJHNpZ24gICAgICAgID0gJGdldE1hdGNoKCdzaWduJyk7CiAgICAgICAgJG51bWVyYXRvciAgID0gJGdldE1hdGNoKCdudW1lcmF0b3InKTsKICAgICAgICAkZGVub21pbmF0b3IgPSAkZ2V0TWF0Y2goJ2Rlbm9taW5hdG9yJyk7CgogICAgICAgIGlmICgkbnVtZXJhdG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgIGFzc2VydCgkZGVub21pbmF0b3IgIT09IG51bGwpOwoKICAgICAgICAgICAgaWYgKCRzaWduICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbnVtZXJhdG9yID0gJHNpZ24gLiAkbnVtZXJhdG9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbnVtZXJhdG9yICAgPSBzZWxmOjpjbGVhblVwKCRudW1lcmF0b3IpOwogICAgICAgICAgICAkZGVub21pbmF0b3IgPSBzZWxmOjpjbGVhblVwKCRkZW5vbWluYXRvcik7CgogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yID09PSAnMCcpIHsKICAgICAgICAgICAgICAgIHRocm93IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uOjpkZW5vbWluYXRvck11c3ROb3RCZVplcm8oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgKICAgICAgICAgICAgICAgIG5ldyBCaWdJbnRlZ2VyKCRudW1lcmF0b3IpLAogICAgICAgICAgICAgICAgbmV3IEJpZ0ludGVnZXIoJGRlbm9taW5hdG9yKSwKICAgICAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkcG9pbnQgICAgICA9ICRnZXRNYXRjaCgncG9pbnQnKTsKICAgICAgICAkaW50ZWdyYWwgICA9ICRnZXRNYXRjaCgnaW50ZWdyYWwnKTsKICAgICAgICAkZnJhY3Rpb25hbCA9ICRnZXRNYXRjaCgnZnJhY3Rpb25hbCcpOwogICAgICAgICRleHBvbmVudCAgID0gJGdldE1hdGNoKCdleHBvbmVudCcpOwoKICAgICAgICBpZiAoJGludGVncmFsID09PSBudWxsICYmICRmcmFjdGlvbmFsID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aHJvdygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbnRlZ3JhbCA9PT0gbnVsbCkgewogICAgICAgICAgICAkaW50ZWdyYWwgPSAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBvaW50ICE9PSBudWxsIHx8ICRleHBvbmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICAkZnJhY3Rpb25hbCA9ICgkZnJhY3Rpb25hbCA/PyAnJyk7CiAgICAgICAgICAgICRleHBvbmVudCA9ICgkZXhwb25lbnQgIT09IG51bGwpID8gKGludCkgJGV4cG9uZW50IDogMDsKCiAgICAgICAgICAgIGlmICgkZXhwb25lbnQgPT09IFBIUF9JTlRfTUlOIHx8ICRleHBvbmVudCA9PT0gUEhQX0lOVF9NQVgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oJ0V4cG9uZW50IHRvbyBsYXJnZS4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHVuc2NhbGVkVmFsdWUgPSBzZWxmOjpjbGVhblVwKCgkc2lnbiA/PyAnJykuICRpbnRlZ3JhbCAuICRmcmFjdGlvbmFsKTsKCiAgICAgICAgICAgICRzY2FsZSA9IFxzdHJsZW4oJGZyYWN0aW9uYWwpIC0gJGV4cG9uZW50OwoKICAgICAgICAgICAgaWYgKCRzY2FsZSA8IDApIHsKICAgICAgICAgICAgICAgIGlmICgkdW5zY2FsZWRWYWx1ZSAhPT0gJzAnKSB7CiAgICAgICAgICAgICAgICAgICAgJHVuc2NhbGVkVmFsdWUgLj0gXHN0cl9yZXBlYXQoJzAnLCAtICRzY2FsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc2NhbGUgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoJHVuc2NhbGVkVmFsdWUsICRzY2FsZSk7CiAgICAgICAgfQoKICAgICAgICAkaW50ZWdyYWwgPSBzZWxmOjpjbGVhblVwKCgkc2lnbiA/PyAnJykgLiAkaW50ZWdyYWwpOwoKICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoJGludGVncmFsKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhZmVseSBjb252ZXJ0cyBmbG9hdCB0byBzdHJpbmcsIGF2b2lkaW5nIGxvY2FsZS1kZXBlbmRlbnQgaXNzdWVzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGgvcHVsbC8yMAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkZmxvYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlRnVuY3Rpb25DYWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZsb2F0VG9TdHJpbmcoZmxvYXQgJGZsb2F0KSA6IHN0cmluZwogICAgewogICAgICAgICRjdXJyZW50TG9jYWxlID0gXHNldGxvY2FsZShMQ19OVU1FUklDLCAnMCcpOwogICAgICAgIFxzZXRsb2NhbGUoTENfTlVNRVJJQywgJ0MnKTsKCiAgICAgICAgJHJlc3VsdCA9IChzdHJpbmcpICRmbG9hdDsKCiAgICAgICAgXHNldGxvY2FsZShMQ19OVU1FUklDLCAkY3VycmVudExvY2FsZSk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgbWV0aG9kIHRvIGFjY2VzcyBwcm90ZWN0ZWQgY29uc3RydWN0b3JzIGZyb20gc2libGluZyBjbGFzc2VzLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAuLi4kYXJncyBUaGUgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVG9vTWFueUFyZ3VtZW50cwogICAgICogQHBzYWxtLXN1cHByZXNzIFVuc2FmZUluc3RhbnRpYXRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoLi4uICRhcmdzKSA6IEJpZ051bWJlcgogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKC4uLiAkYXJncyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHRoZSBnaXZlbiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nIC4uLiR2YWx1ZXMgVGhlIG51bWJlcnMgdG8gY29tcGFyZS4gQWxsIHRoZSBudW1iZXJzIG5lZWQgdG8gYmUgY29udmVydGlibGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24uCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMgVGhlIG1pbmltdW0gdmFsdWUuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIG5vIHZhbHVlcyBhcmUgZ2l2ZW4uCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gICAgICAgICAgICAgSWYgYW4gYXJndW1lbnQgaXMgbm90IHZhbGlkLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbiguLi4kdmFsdWVzKSA6IEJpZ051bWJlcgogICAgewogICAgICAgICRtaW4gPSBudWxsOwoKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAkdmFsdWUgPSBzdGF0aWM6Om9mKCR2YWx1ZSk7CgogICAgICAgICAgICBpZiAoJG1pbiA9PT0gbnVsbCB8fCAkdmFsdWUtPmlzTGVzc1RoYW4oJG1pbikpIHsKICAgICAgICAgICAgICAgICRtaW4gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkbWluID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKF9fTUVUSE9EX18gLiAnKCkgZXhwZWN0cyBhdCBsZWFzdCBvbmUgdmFsdWUuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG1pbjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdGhlIGdpdmVuIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgLi4uJHZhbHVlcyBUaGUgbnVtYmVycyB0byBjb21wYXJlLiBBbGwgdGhlIG51bWJlcnMgbmVlZCB0byBiZSBjb252ZXJ0aWJsZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBUaGUgbWF4aW11bSB2YWx1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgbm8gdmFsdWVzIGFyZSBnaXZlbi4KICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiAgICAgICAgICAgICBJZiBhbiBhcmd1bWVudCBpcyBub3QgdmFsaWQuCiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4KC4uLiR2YWx1ZXMpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgJG1heCA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN0YXRpYzo6b2YoJHZhbHVlKTsKCiAgICAgICAgICAgIGlmICgkbWF4ID09PSBudWxsIHx8ICR2YWx1ZS0+aXNHcmVhdGVyVGhhbigkbWF4KSkgewogICAgICAgICAgICAgICAgJG1heCA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRtYXggPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oX19NRVRIT0RfXyAuICcoKSBleHBlY3RzIGF0IGxlYXN0IG9uZSB2YWx1ZS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWF4OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VtIG9mIHRoZSBnaXZlbiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nIC4uLiR2YWx1ZXMgVGhlIG51bWJlcnMgdG8gYWRkLiBBbGwgdGhlIG51bWJlcnMgbmVlZCB0byBiZSBjb252ZXJ0aWJsZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBUaGUgc3VtLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiBubyB2YWx1ZXMgYXJlIGdpdmVuLgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uICAgICAgICAgICAgIElmIGFuIGFyZ3VtZW50IGlzIG5vdCB2YWxpZC4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdW0oLi4uJHZhbHVlcykgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICAvKiogQHZhciBCaWdOdW1iZXJ8bnVsbCAkc3VtICovCiAgICAgICAgJHN1bSA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN0YXRpYzo6b2YoJHZhbHVlKTsKCiAgICAgICAgICAgICRzdW0gPSAkc3VtID09PSBudWxsID8gJHZhbHVlIDogc2VsZjo6YWRkKCRzdW0sICR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHN1bSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihfX01FVEhPRF9fIC4gJygpIGV4cGVjdHMgYXQgbGVhc3Qgb25lIHZhbHVlLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdW07CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHR3byBCaWdOdW1iZXIgaW5zdGFuY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyIHRvIGF2b2lkIGEgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24uCiAgICAgKgogICAgICogQHRvZG8gVGhpcyBjb3VsZCBiZSBiZXR0ZXIgcmVzb2x2ZWQgYnkgY3JlYXRpbmcgYW4gYWJzdHJhY3QgcHJvdGVjdGVkIG1ldGhvZCBpbiBCaWdOdW1iZXIsIGFuZCBsZWF2aW5nIHRvCiAgICAgKiAgICAgICBjb25jcmV0ZSBjbGFzc2VzIHRoZSByZXNwb25zaWJpbGl0eSB0byBwZXJmb3JtIHRoZSBhZGRpdGlvbiB0aGVtc2VsdmVzIG9yIGRlbGVnYXRlIGl0IHRvIHRoZSBnaXZlbiBudW1iZXIsCiAgICAgKiAgICAgICBkZXBlbmRpbmcgb24gdGhlaXIgYWJpbGl0eSB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uIFRoaXMgd2lsbCBhbHNvIHJlcXVpcmUgYSB2ZXJzaW9uIGJ1bXAgYmVjYXVzZSB3ZSdyZQogICAgICogICAgICAgcG90ZW50aWFsbHkgYnJlYWtpbmcgY3VzdG9tIEJpZ051bWJlciBpbXBsZW1lbnRhdGlvbnMgKGlmIGFueS4uLikKICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyICRhCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyICRiCiAgICAgKgogICAgICogQHJldHVybiBCaWdOdW1iZXIKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhZGQoQmlnTnVtYmVyICRhLCBCaWdOdW1iZXIgJGIpIDogQmlnTnVtYmVyCiAgICB7CiAgICAgICAgaWYgKCRhIGluc3RhbmNlb2YgQmlnUmF0aW9uYWwpIHsKICAgICAgICAgICAgcmV0dXJuICRhLT5wbHVzKCRiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiBpbnN0YW5jZW9mIEJpZ1JhdGlvbmFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYi0+cGx1cygkYSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYS0+cGx1cygkYik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGIgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKSB7CiAgICAgICAgICAgIHJldHVybiAkYi0+cGx1cygkYSk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBCaWdJbnRlZ2VyICRhICovCgogICAgICAgIHJldHVybiAkYS0+cGx1cygkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIG9wdGlvbmFsIGxlYWRpbmcgemVyb3MgYW5kICsgc2lnbiBmcm9tIHRoZSBnaXZlbiBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIFRoZSBudW1iZXIsIHZhbGlkYXRlZCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcgb2YgZGlnaXRzIHdpdGggb3B0aW9uYWwgbGVhZGluZyBzaWduLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2xlYW5VcChzdHJpbmcgJG51bWJlcikgOiBzdHJpbmcKICAgIHsKICAgICAgICAkZmlyc3RDaGFyID0gJG51bWJlclswXTsKCiAgICAgICAgaWYgKCRmaXJzdENoYXIgPT09ICcrJyB8fCAkZmlyc3RDaGFyID09PSAnLScpIHsKICAgICAgICAgICAgJG51bWJlciA9IFxzdWJzdHIoJG51bWJlciwgMSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gXGx0cmltKCRudW1iZXIsICcwJyk7CgogICAgICAgIGlmICgkbnVtYmVyID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJzAnOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmaXJzdENoYXIgPT09ICctJykgewogICAgICAgICAgICByZXR1cm4gJy0nIC4gJG51bWJlcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA9PT0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0xlc3NUaGFuKCR0aGF0KSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBhcmVUbygkdGhhdCkgPCAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTGVzc1RoYW5PckVxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA8PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNHcmVhdGVyVGhhbigkdGhhdCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb21wYXJlVG8oJHRoYXQpID4gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzR3JlYXRlclRoYW5PckVxdWFsVG8oJHRoYXQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCR0aGF0KSA+PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGVxdWFscyB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNaZXJvKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyBudW1iZXIgaXMgc3RyaWN0bHkgbmVnYXRpdmUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPCAwOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlT3JaZXJvKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRTaWduKCkgPD0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG51bWJlciBpcyBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUG9zaXRpdmUoKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFNpZ24oKSA+IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyBudW1iZXIgaXMgcG9zaXRpdmUgb3IgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUG9zaXRpdmVPclplcm8oKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFNpZ24oKSA+PSAwOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCAtMSBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCAwIGlmIHplcm8sIDEgaWYgcG9zaXRpdmUuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCkgOiBpbnQ7CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0aGlzIG51bWJlciB0byB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFstMSwwLDFdIElmIGAkdGhpc2AgaXMgbG93ZXIgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBgJHRoYXRgLgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmVUbygkdGhhdCkgOiBpbnQ7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGlzIG51bWJlciB0byBhIEJpZ0ludGVnZXIuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLgogICAgICoKICAgICAqIEB0aHJvd3MgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24gSWYgdGhpcyBudW1iZXIgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIEJpZ0ludGVnZXIgd2l0aG91dCByb3VuZGluZy4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoaXMgbnVtYmVyIHRvIGEgQmlnRGVjaW1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0RlY2ltYWwgVGhlIGNvbnZlcnRlZCBudW1iZXIuCiAgICAgKgogICAgICogQHRocm93cyBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgQmlnRGVjaW1hbCB3aXRob3V0IHJvdW5kaW5nLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9CaWdEZWNpbWFsKCkgOiBCaWdEZWNpbWFsOwoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhpcyBudW1iZXIgdG8gYSBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9CaWdSYXRpb25hbCgpIDogQmlnUmF0aW9uYWw7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGlzIG51bWJlciB0byBhIEJpZ0RlY2ltYWwgd2l0aCB0aGUgZ2l2ZW4gc2NhbGUsIHVzaW5nIHJvdW5kaW5nIGlmIG5lY2Vzc2FyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzY2FsZSAgICAgICAgVGhlIHNjYWxlIG9mIHRoZSByZXN1bHRpbmcgYEJpZ0RlY2ltYWxgLgogICAgICogQHBhcmFtIGludCAkcm91bmRpbmdNb2RlIEEgYFJvdW5kaW5nTW9kZWAgY29uc3RhbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdEZWNpbWFsCiAgICAgKgogICAgICogQHRocm93cyBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbiBJZiB0aGlzIG51bWJlciBjYW5ub3QgYmUgY29udmVydGVkIHRvIHRoZSBnaXZlbiBzY2FsZSB3aXRob3V0IHJvdW5kaW5nLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9ubHkgYXBwbGllcyB3aGVuIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkgaXMgdXNlZC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvU2NhbGUoaW50ICRzY2FsZSwgaW50ICRyb3VuZGluZ01vZGUgPSBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZKSA6IEJpZ0RlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleGFjdCB2YWx1ZSBvZiB0aGlzIG51bWJlciBhcyBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICoKICAgICAqIElmIHRoaXMgbnVtYmVyIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBuYXRpdmUgaW50ZWdlciB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24sIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgKiBOb3RlIHRoYXQgdGhlIGFjY2VwdGFibGUgcmFuZ2UgZm9yIGFuIGludGVnZXIgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0gYW5kIGRpZmZlcnMgZm9yIDMyLWJpdCBhbmQgNjQtYml0LgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBjb252ZXJ0ZWQgdmFsdWUuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoaXMgbnVtYmVyIGNhbm5vdCBiZSBleGFjdGx5IGNvbnZlcnRlZCB0byBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKSA6IGludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXBwcm94aW1hdGlvbiBvZiB0aGlzIG51bWJlciBhcyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBjYW4gZGlzY2FyZCBpbmZvcm1hdGlvbiBhcyB0aGUgcHJlY2lzaW9uIG9mIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUKICAgICAqIGlzIGluaGVyZW50bHkgbGltaXRlZC4KICAgICAqCiAgICAgKiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGFyZ2VzdCByZXByZXNlbnRhYmxlIGZsb2F0aW5nIHBvaW50IG51bWJlciwgcG9zaXRpdmUgaW5maW5pdHkgaXMgcmV0dXJuZWQuCiAgICAgKiBJZiB0aGUgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgc21hbGxlc3QgcmVwcmVzZW50YWJsZSBmbG9hdGluZyBwb2ludCBudW1iZXIsIG5lZ2F0aXZlIGluZmluaXR5IGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQgVGhlIGNvbnZlcnRlZCB2YWx1ZS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvRmxvYXQoKSA6IGZsb2F0OwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG51bWJlci4KICAgICAqCiAgICAgKiBUaGUgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGNhbiBiZSBwYXJzZWQgYnkgdGhlIGBvZigpYCBmYWN0b3J5IG1ldGhvZDsKICAgICAqIHRoaXMgd2lsbCB5aWVsZCBhbiBvYmplY3QgZXF1YWwgdG8gdGhpcyBvbmUsIHdpdGhvdXQgYW55IGluZm9ybWF0aW9uIGxvc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSA6IHN0cmluZzsKCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X190b1N0cmluZygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/BigRational.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cRGl2aXNpb25CeVplcm9FeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXEV4Y2VwdGlvblxNYXRoRXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTnVtYmVyRm9ybWF0RXhjZXB0aW9uOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CgovKioKICogQW4gYXJiaXRyYXJpbHkgbGFyZ2UgcmF0aW9uYWwgbnVtYmVyLgogKgogKiBUaGlzIGNsYXNzIGlzIGltbXV0YWJsZS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQmlnUmF0aW9uYWwgZXh0ZW5kcyBCaWdOdW1iZXIKewogICAgLyoqCiAgICAgKiBUaGUgbnVtZXJhdG9yLgogICAgICoKICAgICAqIEB2YXIgQmlnSW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRudW1lcmF0b3I7CgogICAgLyoqCiAgICAgKiBUaGUgZGVub21pbmF0b3IuIEFsd2F5cyBzdHJpY3RseSBwb3NpdGl2ZS4KICAgICAqCiAgICAgKiBAdmFyIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVub21pbmF0b3I7CgogICAgLyoqCiAgICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3IuIFVzZSBhIGZhY3RvcnkgbWV0aG9kIHRvIG9idGFpbiBhbiBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkbnVtZXJhdG9yICAgICAgICBUaGUgbnVtZXJhdG9yLgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJGRlbm9taW5hdG9yICAgICAgVGhlIGRlbm9taW5hdG9yLgogICAgICogQHBhcmFtIGJvb2wgICAgICAgJGNoZWNrRGVub21pbmF0b3IgV2hldGhlciB0byBjaGVjayB0aGUgZGVub21pbmF0b3IgZm9yIG5lZ2F0aXZlIGFuZCB6ZXJvLgogICAgICoKICAgICAqIEB0aHJvd3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gSWYgdGhlIGRlbm9taW5hdG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdChCaWdJbnRlZ2VyICRudW1lcmF0b3IsIEJpZ0ludGVnZXIgJGRlbm9taW5hdG9yLCBib29sICRjaGVja0Rlbm9taW5hdG9yKQogICAgewogICAgICAgIGlmICgkY2hlY2tEZW5vbWluYXRvcikgewogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yLT5pc1plcm8oKSkgewogICAgICAgICAgICAgICAgdGhyb3cgRGl2aXNpb25CeVplcm9FeGNlcHRpb246OmRlbm9taW5hdG9yTXVzdE5vdEJlWmVybygpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGRlbm9taW5hdG9yLT5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgICAgICRudW1lcmF0b3IgICA9ICRudW1lcmF0b3ItPm5lZ2F0ZWQoKTsKICAgICAgICAgICAgICAgICRkZW5vbWluYXRvciA9ICRkZW5vbWluYXRvci0+bmVnYXRlZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bnVtZXJhdG9yICAgPSAkbnVtZXJhdG9yOwogICAgICAgICR0aGlzLT5kZW5vbWluYXRvciA9ICRkZW5vbWluYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBCaWdSYXRpb25hbCBvZiB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKCR2YWx1ZSkgOiBCaWdOdW1iZXIKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpvZigkdmFsdWUpLT50b0JpZ1JhdGlvbmFsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgQmlnUmF0aW9uYWwgb3V0IG9mIGEgbnVtZXJhdG9yIGFuZCBhIGRlbm9taW5hdG9yLgogICAgICoKICAgICAqIElmIHRoZSBkZW5vbWluYXRvciBpcyBuZWdhdGl2ZSwgdGhlIHNpZ25zIG9mIGJvdGggdGhlIG51bWVyYXRvciBhbmQgdGhlIGRlbm9taW5hdG9yCiAgICAgKiB3aWxsIGJlIGludmVydGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZW5vbWluYXRvciBpcyBhbHdheXMgcG9zaXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICRudW1lcmF0b3IgICBUaGUgbnVtZXJhdG9yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkZGVub21pbmF0b3IgVGhlIGRlbm9taW5hdG9yLiBNdXN0IGJlIGNvbnZlcnRpYmxlIHRvIGEgQmlnSW50ZWdlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsCiAgICAgKgogICAgICogQHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gICAgICBJZiBhbiBhcmd1bWVudCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBudW1iZXIuCiAgICAgKiBAdGhyb3dzIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIElmIGFuIGFyZ3VtZW50IHJlcHJlc2VudHMgYSBub24taW50ZWdlciBudW1iZXIuCiAgICAgKiBAdGhyb3dzIERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uICAgIElmIHRoZSBkZW5vbWluYXRvciBpcyB6ZXJvLgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmQoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJG51bWVyYXRvciAgID0gQmlnSW50ZWdlcjo6b2YoJG51bWVyYXRvcik7CiAgICAgICAgJGRlbm9taW5hdG9yID0gQmlnSW50ZWdlcjo6b2YoJGRlbm9taW5hdG9yKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ1JhdGlvbmFsIHJlcHJlc2VudGluZyB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHplcm8oKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZVN0YXRpY1ZhcmlhYmxlCiAgICAgICAgICogQHZhciBCaWdSYXRpb25hbHxudWxsICR6ZXJvCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICR6ZXJvOwoKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBuZXcgQmlnUmF0aW9uYWwoQmlnSW50ZWdlcjo6emVybygpLCBCaWdJbnRlZ2VyOjpvbmUoKSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR6ZXJvOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEJpZ1JhdGlvbmFsIHJlcHJlc2VudGluZyBvbmUuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25lKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNWYXJpYWJsZQogICAgICAgICAqIEB2YXIgQmlnUmF0aW9uYWx8bnVsbCAkb25lCiAgICAgICAgICovCiAgICAgICAgc3RhdGljICRvbmU7CgogICAgICAgIGlmICgkb25lID09PSBudWxsKSB7CiAgICAgICAgICAgICRvbmUgPSBuZXcgQmlnUmF0aW9uYWwoQmlnSW50ZWdlcjo6b25lKCksIEJpZ0ludGVnZXI6Om9uZSgpLCBmYWxzZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBCaWdSYXRpb25hbCByZXByZXNlbnRpbmcgdGVuLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbigpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljVmFyaWFibGUKICAgICAgICAgKiBAdmFyIEJpZ1JhdGlvbmFsfG51bGwgJHRlbgogICAgICAgICAqLwogICAgICAgIHN0YXRpYyAkdGVuOwoKICAgICAgICBpZiAoJHRlbiA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGVuID0gbmV3IEJpZ1JhdGlvbmFsKEJpZ0ludGVnZXI6OnRlbigpLCBCaWdJbnRlZ2VyOjpvbmUoKSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE51bWVyYXRvcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZW5vbWluYXRvcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGVub21pbmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBvZiB0aGUgZGl2aXNpb24gb2YgdGhlIG51bWVyYXRvciBieSB0aGUgZGVub21pbmF0b3IuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudCgpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT5xdW90aWVudCgkdGhpcy0+ZGVub21pbmF0b3IpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0aGUgbnVtZXJhdG9yIGJ5IHRoZSBkZW5vbWluYXRvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbWFpbmRlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT5yZW1haW5kZXIoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHRoZSBudW1lcmF0b3IgYnkgdGhlIGRlbm9taW5hdG9yLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90aWVudEFuZFJlbWFpbmRlcigpIDogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+cXVvdGllbnRBbmRSZW1haW5kZXIoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN1bSBvZiB0aGlzIG51bWJlciBhbmQgdGhlIGdpdmVuIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnTnVtYmVyfGludHxmbG9hdHxzdHJpbmcgJHRoYXQgVGhlIG51bWJlciB0byBhZGQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgTWF0aEV4Y2VwdGlvbiBJZiB0aGUgbnVtYmVyIGlzIG5vdCB2YWxpZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBsdXMoJHRoYXQpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICAkdGhhdCA9IEJpZ1JhdGlvbmFsOjpvZigkdGhhdCk7CgogICAgICAgICRudW1lcmF0b3IgICA9ICR0aGlzLT5udW1lcmF0b3ItPm11bHRpcGxpZWRCeSgkdGhhdC0+ZGVub21pbmF0b3IpOwogICAgICAgICRudW1lcmF0b3IgICA9ICRudW1lcmF0b3ItPnBsdXMoJHRoYXQtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGlzLT5kZW5vbWluYXRvcikpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbnVtYmVyIHRvIHN1YnRyYWN0LgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIG51bWJlciBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW51cygkdGhhdCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnUmF0aW9uYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgJG51bWVyYXRvciAgID0gJHRoaXMtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CiAgICAgICAgJG51bWVyYXRvciAgID0gJG51bWVyYXRvci0+bWludXMoJHRoYXQtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGlzLT5kZW5vbWluYXRvcikpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgbnVtYmVyIGFuZCB0aGUgZ2l2ZW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdOdW1iZXJ8aW50fGZsb2F0fHN0cmluZyAkdGhhdCBUaGUgbXVsdGlwbGllci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsIFRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHRocm93cyBNYXRoRXhjZXB0aW9uIElmIHRoZSBtdWx0aXBsaWVyIGlzIG5vdCBhIHZhbGlkIG51bWJlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGxpZWRCeSgkdGhhdCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgICR0aGF0ID0gQmlnUmF0aW9uYWw6Om9mKCR0aGF0KTsKCiAgICAgICAgJG51bWVyYXRvciAgID0gJHRoaXMtPm51bWVyYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5udW1lcmF0b3IpOwogICAgICAgICRkZW5vbWluYXRvciA9ICR0aGlzLT5kZW5vbWluYXRvci0+bXVsdGlwbGllZEJ5KCR0aGF0LT5kZW5vbWluYXRvcik7CgogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG51bWVyYXRvciwgJGRlbm9taW5hdG9yLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGRpdmlzaW9uIG9mIHRoaXMgbnVtYmVyIGJ5IHRoZSBnaXZlbiBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ051bWJlcnxpbnR8ZmxvYXR8c3RyaW5nICR0aGF0IFRoZSBkaXZpc29yLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwgVGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIE1hdGhFeGNlcHRpb24gSWYgdGhlIGRpdmlzb3IgaXMgbm90IGEgdmFsaWQgbnVtYmVyLCBvciBpcyB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2aWRlZEJ5KCR0aGF0KSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJHRoYXQgPSBCaWdSYXRpb25hbDo6b2YoJHRoYXQpOwoKICAgICAgICAkbnVtZXJhdG9yICAgPSAkdGhpcy0+bnVtZXJhdG9yLT5tdWx0aXBsaWVkQnkoJHRoYXQtPmRlbm9taW5hdG9yKTsKICAgICAgICAkZGVub21pbmF0b3IgPSAkdGhpcy0+ZGVub21pbmF0b3ItPm11bHRpcGxpZWRCeSgkdGhhdC0+bnVtZXJhdG9yKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGlzIG51bWJlciBleHBvbmVudGlhdGVkIHRvIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBvbmVudCBUaGUgZXhwb25lbnQuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbCBUaGUgcmVzdWx0LgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZXhwb25lbnQgaXMgbm90IGluIHRoZSByYW5nZSAwIHRvIDEsMDAwLDAwMC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvd2VyKGludCAkZXhwb25lbnQpIDogQmlnUmF0aW9uYWwKICAgIHsKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAwKSB7CiAgICAgICAgICAgICRvbmUgPSBCaWdJbnRlZ2VyOjpvbmUoKTsKCiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJG9uZSwgJG9uZSwgZmFsc2UpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEJpZ1JhdGlvbmFsKAogICAgICAgICAgICAkdGhpcy0+bnVtZXJhdG9yLT5wb3dlcigkZXhwb25lbnQpLAogICAgICAgICAgICAkdGhpcy0+ZGVub21pbmF0b3ItPnBvd2VyKCRleHBvbmVudCksCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlY2lwcm9jYWwgb2YgdGhpcyBCaWdSYXRpb25hbC4KICAgICAqCiAgICAgKiBUaGUgcmVjaXByb2NhbCBoYXMgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igc3dhcHBlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ1JhdGlvbmFsCiAgICAgKgogICAgICogQHRocm93cyBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBJZiB0aGUgbnVtZXJhdG9yIGlzIHplcm8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWNpcHJvY2FsKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJHRoaXMtPmRlbm9taW5hdG9yLCAkdGhpcy0+bnVtZXJhdG9yLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnUmF0aW9uYWwuCiAgICAgKgogICAgICogQHJldHVybiBCaWdSYXRpb25hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWJzKCkgOiBCaWdSYXRpb25hbAogICAgewogICAgICAgIHJldHVybiBuZXcgQmlnUmF0aW9uYWwoJHRoaXMtPm51bWVyYXRvci0+YWJzKCksICR0aGlzLT5kZW5vbWluYXRvciwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmVnYXRlZCB2YWx1ZSBvZiB0aGlzIEJpZ1JhdGlvbmFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5lZ2F0ZWQoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkdGhpcy0+bnVtZXJhdG9yLT5uZWdhdGVkKCksICR0aGlzLT5kZW5vbWluYXRvciwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2ltcGxpZmllZCB2YWx1ZSBvZiB0aGlzIEJpZ1JhdGlvbmFsLgogICAgICoKICAgICAqIEByZXR1cm4gQmlnUmF0aW9uYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpbXBsaWZpZWQoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgJGdjZCA9ICR0aGlzLT5udW1lcmF0b3ItPmdjZCgkdGhpcy0+ZGVub21pbmF0b3IpOwoKICAgICAgICAkbnVtZXJhdG9yID0gJHRoaXMtPm51bWVyYXRvci0+cXVvdGllbnQoJGdjZCk7CiAgICAgICAgJGRlbm9taW5hdG9yID0gJHRoaXMtPmRlbm9taW5hdG9yLT5xdW90aWVudCgkZ2NkKTsKCiAgICAgICAgcmV0dXJuIG5ldyBCaWdSYXRpb25hbCgkbnVtZXJhdG9yLCAkZGVub21pbmF0b3IsIGZhbHNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmVUbygkdGhhdCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbnVzKCR0aGF0KS0+Z2V0U2lnbigpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpIDogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1lcmF0b3ItPmdldFNpZ24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnSW50ZWdlcigpIDogQmlnSW50ZWdlcgogICAgewogICAgICAgICRzaW1wbGlmaWVkID0gJHRoaXMtPnNpbXBsaWZpZWQoKTsKCiAgICAgICAgaWYgKCEgJHNpbXBsaWZpZWQtPmRlbm9taW5hdG9yLT5pc0VxdWFsVG8oMSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uKCdUaGlzIHJhdGlvbmFsIG51bWJlciBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlciB2YWx1ZSB3aXRob3V0IHJvdW5kaW5nLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzaW1wbGlmaWVkLT5udW1lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0JpZ0RlY2ltYWwoKSA6IEJpZ0RlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+dG9CaWdEZWNpbWFsKCktPmV4YWN0bHlEaXZpZGVkQnkoJHRoaXMtPmRlbm9taW5hdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQmlnUmF0aW9uYWwoKSA6IEJpZ1JhdGlvbmFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TY2FsZShpbnQgJHNjYWxlLCBpbnQgJHJvdW5kaW5nTW9kZSA9IFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkpIDogQmlnRGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yLT50b0JpZ0RlY2ltYWwoKS0+ZGl2aWRlZEJ5KCR0aGlzLT5kZW5vbWluYXRvciwgJHNjYWxlLCAkcm91bmRpbmdNb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50KCkgOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvQmlnSW50ZWdlcigpLT50b0ludCgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9GbG9hdCgpIDogZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWVyYXRvci0+dG9GbG9hdCgpIC8gJHRoaXMtPmRlbm9taW5hdG9yLT50b0Zsb2F0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICAkbnVtZXJhdG9yICAgPSAoc3RyaW5nKSAkdGhpcy0+bnVtZXJhdG9yOwogICAgICAgICRkZW5vbWluYXRvciA9IChzdHJpbmcpICR0aGlzLT5kZW5vbWluYXRvcjsKCiAgICAgICAgaWYgKCRkZW5vbWluYXRvciA9PT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiAkbnVtZXJhdG9yOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1lcmF0b3IgLiAnLycgLiAkdGhpcy0+ZGVub21pbmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3Igc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgU0hPVUxEIE5PVCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e251bWVyYXRvcjogQmlnSW50ZWdlciwgZGVub21pbmF0b3I6IEJpZ0ludGVnZXJ9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbJ251bWVyYXRvcicgPT4gJHRoaXMtPm51bWVyYXRvciwgJ2Rlbm9taW5hdG9yJyA9PiAkdGhpcy0+ZGVub21pbmF0b3JdOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGFsbG93IHVuc2VyaWFsaXppbmcgdGhlIG9iamVjdCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBzYWxtLXN1cHByZXNzIFJlZHVuZGFudFByb3BlcnR5SW5pdGlhbGl6YXRpb25DaGVjawogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXtudW1lcmF0b3I6IEJpZ0ludGVnZXIsIGRlbm9taW5hdG9yOiBCaWdJbnRlZ2VyfSAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+bnVtZXJhdG9yKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdfX3Vuc2VyaWFsaXplKCkgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5udW1lcmF0b3IgPSAkZGF0YVsnbnVtZXJhdG9yJ107CiAgICAgICAgJHRoaXMtPmRlbm9taW5hdG9yID0gJGRhdGFbJ2Rlbm9taW5hdG9yJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBieSBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBTSE9VTEQgTk9UIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtZXJhdG9yIC4gJy8nIC4gJHRoaXMtPmRlbm9taW5hdG9yOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50UHJvcGVydHlJbml0aWFsaXphdGlvbkNoZWNrCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxMb2dpY0V4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHZhbHVlKSA6IHZvaWQKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPm51bWVyYXRvcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigndW5zZXJpYWxpemUoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LicpOwogICAgICAgIH0KCiAgICAgICAgWyRudW1lcmF0b3IsICRkZW5vbWluYXRvcl0gPSBcZXhwbG9kZSgnLycsICR2YWx1ZSk7CgogICAgICAgICR0aGlzLT5udW1lcmF0b3IgICA9IEJpZ0ludGVnZXI6Om9mKCRudW1lcmF0b3IpOwogICAgICAgICR0aGlzLT5kZW5vbWluYXRvciA9IEJpZ0ludGVnZXI6Om9mKCRkZW5vbWluYXRvcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/DivisionByZeroException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIGRpdmlzaW9uIGJ5IHplcm8gb2NjdXJzLgogKi8KY2xhc3MgRGl2aXNpb25CeVplcm9FeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGl2aXNpb25CeVplcm8oKSA6IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdEaXZpc2lvbiBieSB6ZXJvLicpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW9kdWx1c011c3ROb3RCZVplcm8oKSA6IERpdmlzaW9uQnlaZXJvRXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdUaGUgbW9kdWx1cyBtdXN0IG5vdCBiZSB6ZXJvLicpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVub21pbmF0b3JNdXN0Tm90QmVaZXJvKCkgOiBEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZignVGhlIGRlbm9taW5hdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGNhbm5vdCBiZSB6ZXJvLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/IntegerOverflowException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKdXNlIEJyaWNrXE1hdGhcQmlnSW50ZWdlcjsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYW4gaW50ZWdlciBvdmVyZmxvdyBvY2N1cnMuCiAqLwpjbGFzcyBJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBJbnRlZ2VyT3ZlcmZsb3dFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvSW50T3ZlcmZsb3coQmlnSW50ZWdlciAkdmFsdWUpIDogSW50ZWdlck92ZXJmbG93RXhjZXB0aW9uCiAgICB7CiAgICAgICAgJG1lc3NhZ2UgPSAnJXMgaXMgb3V0IG9mIHJhbmdlICVkIHRvICVkIGFuZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlci4nOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXHNwcmludGYoJG1lc3NhZ2UsIChzdHJpbmcpICR2YWx1ZSwgUEhQX0lOVF9NSU4sIFBIUF9JTlRfTUFYKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/MathException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBtYXRoIGV4Y2VwdGlvbnMuCiAqCiAqIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QgdG8gZW5zdXJlIHRoYXQgb25seSBmaW5lLWdyYWluZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIHRocm91Z2hvdXQgdGhlIGNvZGUuCiAqLwpjbGFzcyBNYXRoRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/NegativeNumberException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gYW4gdW5zdXBwb3J0ZWQgb3BlcmF0aW9uLCBzdWNoIGFzIGEgc3F1YXJlIHJvb3QsIG9uIGEgbmVnYXRpdmUgbnVtYmVyLgogKi8KY2xhc3MgTmVnYXRpdmVOdW1iZXJFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/NumberFormatException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIG51bWJlciBmcm9tIGEgc3RyaW5nIHdpdGggYW4gaW52YWxpZCBmb3JtYXQuCiAqLwpjbGFzcyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhciBUaGUgZmFpbGluZyBjaGFyYWN0ZXIuCiAgICAgKgogICAgICogQHJldHVybiBOdW1iZXJGb3JtYXRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJOb3RJbkFscGhhYmV0KHN0cmluZyAkY2hhcikgOiBzZWxmCiAgICB7CiAgICAgICAgJG9yZCA9IFxvcmQoJGNoYXIpOwoKICAgICAgICBpZiAoJG9yZCA8IDMyIHx8ICRvcmQgPiAxMjYpIHsKICAgICAgICAgICAgJGNoYXIgPSBcc3RydG91cHBlcihcZGVjaGV4KCRvcmQpKTsKCiAgICAgICAgICAgIGlmICgkb3JkIDwgMTApIHsKICAgICAgICAgICAgICAgICRjaGFyID0gJzAnIC4gJGNoYXI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2hhciA9ICciJyAuICRjaGFyIC4gJyInOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKHNwcmludGYoJ0NoYXIgJXMgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIGluIHRoZSBnaXZlbiBhbHBoYWJldC4nLCAkY2hhcikpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Exception/RoundingNecessaryException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIG51bWJlciBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXQgdGhlIHJlcXVlc3RlZCBzY2FsZSB3aXRob3V0IHJvdW5kaW5nLgogKi8KY2xhc3MgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb24gZXh0ZW5kcyBNYXRoRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQHJldHVybiBSb3VuZGluZ05lY2Vzc2FyeUV4Y2VwdGlvbgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcm91bmRpbmdOZWNlc3NhcnkoKSA6IFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdSb3VuZGluZyBpcyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBhdCB0aGlzIHNjYWxlLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWw7Cgp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb247CnVzZSBCcmlja1xNYXRoXFJvdW5kaW5nTW9kZTsKCi8qKgogKiBQZXJmb3JtcyBiYXNpYyBvcGVyYXRpb25zIG9uIGFyYml0cmFyeSBzaXplIGludGVnZXJzLgogKgogKiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSB2YWxpZGF0ZWQgYXMgbm9uLWVtcHR5IHN0cmluZ3Mgb2YgZGlnaXRzLAogKiB3aXRob3V0IGxlYWRpbmcgemVybywgYW5kIHdpdGggYW4gb3B0aW9uYWwgbGVhZGluZyBtaW51cyBzaWduIGlmIHRoZSBudW1iZXIgaXMgbm90IHplcm8uCiAqCiAqIEFueSBvdGhlciBwYXJhbWV0ZXIgZm9ybWF0IHdpbGwgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyLgogKiBBbGwgbWV0aG9kcyBtdXN0IHJldHVybiBzdHJpbmdzIHJlc3BlY3RpbmcgdGhpcyBmb3JtYXQsIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KYWJzdHJhY3QgY2xhc3MgQ2FsY3VsYXRvcgp7CiAgICAvKioKICAgICAqIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlIGFsbG93ZWQgZm9yIHRoZSBwb3coKSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQVhfUE9XRVIgPSAxMDAwMDAwOwoKICAgIC8qKgogICAgICogVGhlIGFscGhhYmV0IGZvciBjb252ZXJ0aW5nIGZyb20gYW5kIHRvIGJhc2UgMiB0byAzNiwgbG93ZXJjYXNlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsKCiAgICAvKioKICAgICAqIFRoZSBDYWxjdWxhdG9yIGluc3RhbmNlIGluIHVzZS4KICAgICAqCiAgICAgKiBAdmFyIENhbGN1bGF0b3J8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2U7CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBDYWxjdWxhdG9yIGluc3RhbmNlIHRvIHVzZS4KICAgICAqCiAgICAgKiBBbiBpbnN0YW5jZSBpcyB0eXBpY2FsbHkgc2V0IG9ubHkgaW4gdW5pdCB0ZXN0czogdGhlIGF1dG9kZXRlY3QgaXMgdXN1YWxseSB0aGUgYmVzdCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIENhbGN1bGF0b3J8bnVsbCAkY2FsY3VsYXRvciBUaGUgY2FsY3VsYXRvciBpbnN0YW5jZSwgb3IgTlVMTCB0byByZXZlcnQgdG8gYXV0b2RldGVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoP0NhbGN1bGF0b3IgJGNhbGN1bGF0b3IpIDogdm9pZAogICAgewogICAgICAgIHNlbGY6OiRpbnN0YW5jZSA9ICRjYWxjdWxhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgQ2FsY3VsYXRvciBpbnN0YW5jZSB0byB1c2UuCiAgICAgKgogICAgICogSWYgbm9uZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCwgdGhlIGZhc3Rlc3QgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHJldHVybiBDYWxjdWxhdG9yCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVTdGF0aWNQcm9wZXJ0eQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgpIDogQ2FsY3VsYXRvcgogICAgewogICAgICAgIGlmIChzZWxmOjokaW5zdGFuY2UgPT09IG51bGwpIHsKICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsICovCiAgICAgICAgICAgIHNlbGY6OiRpbnN0YW5jZSA9IHNlbGY6OmRldGVjdCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZhc3Rlc3QgYXZhaWxhYmxlIENhbGN1bGF0b3IgaW1wbGVtZW50YXRpb24uCiAgICAgKgogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICoKICAgICAqIEByZXR1cm4gQ2FsY3VsYXRvcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkZXRlY3QoKSA6IENhbGN1bGF0b3IKICAgIHsKICAgICAgICBpZiAoXGV4dGVuc2lvbl9sb2FkZWQoJ2dtcCcpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsY3VsYXRvclxHbXBDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoXGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsY3VsYXRvclxCY01hdGhDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IENhbGN1bGF0b3JcTmF0aXZlQ2FsY3VsYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogRXh0cmFjdHMgdGhlIHNpZ24gJiBkaWdpdHMgb2YgdGhlIG9wZXJhbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBzZWNvbmQgb3BlcmFuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e2Jvb2wsIGJvb2wsIHN0cmluZywgc3RyaW5nfSBXaGV0aGVyICRhIGFuZCAkYiBhcmUgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IHRoZWlyIGRpZ2l0cy4KICAgICAqLwogICAgZmluYWwgcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAkYU5lZyA9ICgkYVswXSA9PT0gJy0nKSwKICAgICAgICAgICAgJGJOZWcgPSAoJGJbMF0gPT09ICctJyksCgogICAgICAgICAgICAkYU5lZyA/IFxzdWJzdHIoJGEsIDEpIDogJGEsCiAgICAgICAgICAgICRiTmVnID8gXHN1YnN0cigkYiwgMSkgOiAkYiwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbiBUaGUgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBhYnNvbHV0ZSB2YWx1ZS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFicyhzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkblswXSA9PT0gJy0nKSA/IFxzdWJzdHIoJG4sIDEpIDogJG47CiAgICB9CgogICAgLyoqCiAgICAgKiBOZWdhdGVzIGEgbnVtYmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG4gVGhlIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgbmVnYXRlZCB2YWx1ZS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG5lZyhzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRuID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgIGlmICgkblswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgIHJldHVybiBcc3Vic3RyKCRuLCAxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnLScgLiAkbjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmVzIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG51bWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgWy0xLCAwLCAxXSBJZiB0aGUgZmlyc3QgbnVtYmVyIGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG51bWJlci4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNtcChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBpbnQKICAgIHsKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgaWYgKCRhTmVnICYmICEgJGJOZWcpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiTmVnICYmICEgJGFOZWcpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAkYUxlbiA9IFxzdHJsZW4oJGFEaWcpOwogICAgICAgICRiTGVuID0gXHN0cmxlbigkYkRpZyk7CgogICAgICAgIGlmICgkYUxlbiA8ICRiTGVuKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAtMTsKICAgICAgICB9IGVsc2VpZiAoJGFMZW4gPiAkYkxlbikgewogICAgICAgICAgICAkcmVzdWx0ID0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0ID0gJGFEaWcgPD0+ICRiRGlnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhTmVnID8gLSRyZXN1bHQgOiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBhdWdlbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBhZGRlbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHN1bS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgbWludWVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHN1YnRyYWhlbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGRpZmZlcmVuY2UuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzdWIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nOwoKICAgIC8qKgogICAgICogTXVsdGlwbGllcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBtdWx0aXBsaWNhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBtdWx0aXBsaWVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwcm9kdWN0LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbXVsKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1b3RpZW50IG9mIHRoZSBkaXZpc2lvbiBvZiB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBkaXZpZGVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHF1b3RpZW50LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UShzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGRpdmlkZW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgZGl2aXNvciwgbXVzdCBub3QgYmUgemVyby4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVtYWluZGVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBxdW90aWVudCBhbmQgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBkaXZpZGVuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBxdW90aWVudCBhbmQgcmVtYWluZGVyLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGl2UVIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogYXJyYXk7CgogICAgLyoqCiAgICAgKiBFeHBvbmVudGlhdGVzIGEgbnVtYmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGJhc2UgbnVtYmVyLgogICAgICogQHBhcmFtIGludCAgICAkZSBUaGUgZXhwb25lbnQsIHZhbGlkYXRlZCBhcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgTUFYX1BPV0VSLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwb3dlci4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHBvdyhzdHJpbmcgJGEsIGludCAkZSkgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBtb2R1bHVzOyBtdXN0IG5vdCBiZSB6ZXJvLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2Qoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZSKCR0aGlzLT5hZGQoJHRoaXMtPmRpdlIoJGEsICRiKSwgJGIpLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgJHggbW9kdWxvICRtLgogICAgICoKICAgICAqIElmICR4IGhhcyBubyBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG1vZCBtLCB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBudWxsLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG0gVGhlIG1vZHVsdXM7IG11c3Qgbm90IGJlIG5lZ2F0aXZlIG9yIHplcm8uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kSW52ZXJzZShzdHJpbmcgJHgsIHN0cmluZyAkbSkgOiA/c3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRtID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgICRtb2RWYWwgPSAkeDsKCiAgICAgICAgaWYgKCR4WzBdID09PSAnLScgfHwgKCR0aGlzLT5jbXAoJHRoaXMtPmFicygkeCksICRtKSA+PSAwKSkgewogICAgICAgICAgICAkbW9kVmFsID0gJHRoaXMtPm1vZCgkeCwgJG0pOwogICAgICAgIH0KCiAgICAgICAgJHggPSAnMCc7CiAgICAgICAgJHkgPSAnMCc7CiAgICAgICAgJGcgPSAkdGhpcy0+Z2NkRXh0ZW5kZWQoJG1vZFZhbCwgJG0sICR4LCAkeSk7CgogICAgICAgIGlmICgkZyAhPT0gJzEnKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2QoJHRoaXMtPmFkZCgkdGhpcy0+bW9kKCR4LCAkbSksICRtKSwgJG0pOwogICAgfQoKICAgIC8qKgogICAgICogUmFpc2VzIGEgbnVtYmVyIGludG8gcG93ZXIgd2l0aCBtb2R1bG8uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZSBUaGUgYmFzZSBudW1iZXI7IG11c3QgYmUgcG9zaXRpdmUgb3IgemVyby4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cCAgVGhlIGV4cG9uZW50OyBtdXN0IGJlIHBvc2l0aXZlIG9yIHplcm8uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2QgIFRoZSBtb2R1bHVzOyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwb3dlci4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIG1vZFBvdyhzdHJpbmcgJGJhc2UsIHN0cmluZyAkZXhwLCBzdHJpbmcgJG1vZCkgOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGUgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkKICAgICAqIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBHQ0QgY2FsY3VsYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG51bWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIEdDRCwgYWx3YXlzIHBvc2l0aXZlLCBvciB6ZXJvIGlmIGJvdGggYXJndW1lbnRzIGFyZSB6ZXJvLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2NkKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkYSA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCRiKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWJzKCRhKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2NkKCRiLCAkdGhpcy0+ZGl2UigkYSwgJGIpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdjZEV4dGVuZGVkKHN0cmluZyAkYSwgc3RyaW5nICRiLCBzdHJpbmcgJiR4LCBzdHJpbmcgJiR5KSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkYSA9PT0gJzAnKSB7CiAgICAgICAgICAgICR4ID0gJzAnOwogICAgICAgICAgICAkeSA9ICcxJzsKCiAgICAgICAgICAgIHJldHVybiAkYjsKICAgICAgICB9CgogICAgICAgICR4MSA9ICcwJzsKICAgICAgICAkeTEgPSAnMCc7CgogICAgICAgICRnY2QgPSAkdGhpcy0+Z2NkRXh0ZW5kZWQoJHRoaXMtPm1vZCgkYiwgJGEpLCAkYSwgJHgxLCAkeTEpOwoKICAgICAgICAkeCA9ICR0aGlzLT5zdWIoJHkxLCAkdGhpcy0+bXVsKCR0aGlzLT5kaXZRKCRiLCAkYSksICR4MSkpOwogICAgICAgICR5ID0gJHgxOwoKICAgICAgICByZXR1cm4gJGdjZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBnaXZlbiBudW1iZXIsIHJvdW5kZWQgZG93bi4KICAgICAqCiAgICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBsYXJnZXN0IHggc3VjaCB0aGF0IHjCsiDiiaQgbi4KICAgICAqIFRoZSBpbnB1dCBNVVNUIE5PVCBiZSBuZWdhdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuIFRoZSBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHNxdWFyZSByb290LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc3FydChzdHJpbmcgJG4pIDogc3RyaW5nOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBudW1iZXIgZnJvbSBhbiBhcmJpdHJhcnkgYmFzZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaWYgdGhlIHVuZGVybHlpbmcgbGlicmFyeQogICAgICogaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGJhc2UgY29udmVyc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgVGhlIG51bWJlciwgcG9zaXRpdmUgb3IgemVybywgbm9uLWVtcHR5LCBjYXNlLWluc2Vuc2l0aXZlbHkgdmFsaWRhdGVkIGZvciB0aGUgZ2l2ZW4gYmFzZS4KICAgICAqIEBwYXJhbSBpbnQgICAgJGJhc2UgICBUaGUgYmFzZSBvZiB0aGUgbnVtYmVyLCB2YWxpZGF0ZWQgZnJvbSAyIHRvIDM2LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb252ZXJ0ZWQgbnVtYmVyLCBmb2xsb3dpbmcgdGhlIENhbGN1bGF0b3IgY29udmVudGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tQmFzZShzdHJpbmcgJG51bWJlciwgaW50ICRiYXNlKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbUFyYml0cmFyeUJhc2UoXHN0cnRvbG93ZXIoJG51bWJlciksIHNlbGY6OkFMUEhBQkVULCAkYmFzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaWYgdGhlIHVuZGVybHlpbmcgbGlicmFyeQogICAgICogaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGJhc2UgY29udmVyc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgVGhlIG51bWJlciB0byBjb252ZXJ0LCBmb2xsb3dpbmcgdGhlIENhbGN1bGF0b3IgY29udmVudGlvbnMuCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgVGhlIGJhc2UgdG8gY29udmVydCB0bywgdmFsaWRhdGVkIGZyb20gMiB0byAzNi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgY29udmVydGVkIG51bWJlciwgbG93ZXJjYXNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CYXNlKHN0cmluZyAkbnVtYmVyLCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJG5lZ2F0aXZlID0gKCRudW1iZXJbMF0gPT09ICctJyk7CgogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgJG51bWJlciA9IFxzdWJzdHIoJG51bWJlciwgMSk7CiAgICAgICAgfQoKICAgICAgICAkbnVtYmVyID0gJHRoaXMtPnRvQXJiaXRyYXJ5QmFzZSgkbnVtYmVyLCBzZWxmOjpBTFBIQUJFVCwgJGJhc2UpOwoKICAgICAgICBpZiAoJG5lZ2F0aXZlKSB7CiAgICAgICAgICAgIHJldHVybiAnLScgLiAkbnVtYmVyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgaW4gYW4gYXJiaXRyYXJ5IGJhc2UgdXNpbmcgYSBjdXN0b20gYWxwaGFiZXQsIHRvIGJhc2UgMTAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyICAgVGhlIG51bWJlciB0byBjb252ZXJ0LCB2YWxpZGF0ZWQgYXMgYSBub24tZW1wdHkgc3RyaW5nLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyBvbmx5IGNoYXJzIGluIHRoZSBnaXZlbiBhbHBoYWJldC9iYXNlLgogICAgICogQHBhcmFtIHN0cmluZyAkYWxwaGFiZXQgVGhlIGFscGhhYmV0IHRoYXQgY29udGFpbnMgZXZlcnkgZGlnaXQsIHZhbGlkYXRlZCBhcyAyIGNoYXJzIG1pbmltdW0uCiAgICAgKiBAcGFyYW0gaW50ICAgICRiYXNlICAgICBUaGUgYmFzZSBvZiB0aGUgbnVtYmVyLCB2YWxpZGF0ZWQgZnJvbSAyIHRvIGFscGhhYmV0IGxlbmd0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgbnVtYmVyIGluIGJhc2UgMTAsIGZvbGxvd2luZyB0aGUgQ2FsY3VsYXRvciBjb252ZW50aW9ucy4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyb21BcmJpdHJhcnlCYXNlKHN0cmluZyAkbnVtYmVyLCBzdHJpbmcgJGFscGhhYmV0LCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgInplcm9zIgogICAgICAgICRudW1iZXIgPSBcbHRyaW0oJG51bWJlciwgJGFscGhhYmV0WzBdKTsKCiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBvcHRpbWl6ZSBmb3IgIm9uZSIKICAgICAgICBpZiAoJG51bWJlciA9PT0gJGFscGhhYmV0WzFdKSB7CiAgICAgICAgICAgIHJldHVybiAnMSc7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJzAnOwogICAgICAgICRwb3dlciA9ICcxJzsKCiAgICAgICAgJGJhc2UgPSAoc3RyaW5nKSAkYmFzZTsKCiAgICAgICAgZm9yICgkaSA9IFxzdHJsZW4oJG51bWJlcikgLSAxOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICRpbmRleCA9IFxzdHJwb3MoJGFscGhhYmV0LCAkbnVtYmVyWyRpXSk7CgogICAgICAgICAgICBpZiAoJGluZGV4ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmFkZCgkcmVzdWx0LCAoJGluZGV4ID09PSAxKQogICAgICAgICAgICAgICAgICAgID8gJHBvd2VyCiAgICAgICAgICAgICAgICAgICAgOiAkdGhpcy0+bXVsKCRwb3dlciwgKHN0cmluZykgJGluZGV4KQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcG93ZXIgPSAkdGhpcy0+bXVsKCRwb3dlciwgJGJhc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBhbiBhcmJpdHJhcnkgYmFzZSB1c2luZyBhIGN1c3RvbSBhbHBoYWJldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRudW1iZXIgICBUaGUgbnVtYmVyIHRvIGNvbnZlcnQsIHBvc2l0aXZlIG9yIHplcm8sIGZvbGxvd2luZyB0aGUgQ2FsY3VsYXRvciBjb252ZW50aW9ucy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFscGhhYmV0IFRoZSBhbHBoYWJldCB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGRpZ2l0LCB2YWxpZGF0ZWQgYXMgMiBjaGFycyBtaW5pbXVtLgogICAgICogQHBhcmFtIGludCAgICAkYmFzZSAgICAgVGhlIGJhc2UgdG8gY29udmVydCB0bywgdmFsaWRhdGVkIGZyb20gMiB0byBhbHBoYWJldCBsZW5ndGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGNvbnZlcnRlZCBudW1iZXIgaW4gdGhlIGdpdmVuIGFscGhhYmV0LgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdG9BcmJpdHJhcnlCYXNlKHN0cmluZyAkbnVtYmVyLCBzdHJpbmcgJGFscGhhYmV0LCBpbnQgJGJhc2UpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRudW1iZXIgPT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gJGFscGhhYmV0WzBdOwogICAgICAgIH0KCiAgICAgICAgJGJhc2UgPSAoc3RyaW5nKSAkYmFzZTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIHdoaWxlICgkbnVtYmVyICE9PSAnMCcpIHsKICAgICAgICAgICAgWyRudW1iZXIsICRyZW1haW5kZXJdID0gJHRoaXMtPmRpdlFSKCRudW1iZXIsICRiYXNlKTsKICAgICAgICAgICAgJHJlbWFpbmRlciA9IChpbnQpICRyZW1haW5kZXI7CgogICAgICAgICAgICAkcmVzdWx0IC49ICRhbHBoYWJldFskcmVtYWluZGVyXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RycmV2KCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSByb3VuZGVkIGRpdmlzaW9uLgogICAgICoKICAgICAqIFJvdW5kaW5nIGlzIHBlcmZvcm1lZCB3aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCB6ZXJvLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgICAgICAgICAgICBUaGUgZGl2aWRlbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiICAgICAgICAgICAgVGhlIGRpdmlzb3IsIG11c3Qgbm90IGJlIHplcm8uCiAgICAgKiBAcGFyYW0gaW50ICAgICRyb3VuZGluZ01vZGUgVGhlIHJvdW5kaW5nIG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSByb3VuZGluZyBtb2RlIGlzIGludmFsaWQuCiAgICAgKiBAdGhyb3dzIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIElmIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlkgaXMgcHJvdmlkZWQgYnV0IHJvdW5kaW5nIGlzIG5lY2Vzc2FyeS4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRpdlJvdW5kKHN0cmluZyAkYSwgc3RyaW5nICRiLCBpbnQgJHJvdW5kaW5nTW9kZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICBbJHF1b3RpZW50LCAkcmVtYWluZGVyXSA9ICR0aGlzLT5kaXZRUigkYSwgJGIpOwoKICAgICAgICAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gPSAoJHJlbWFpbmRlciAhPT0gJzAnKTsKICAgICAgICAkaXNQb3NpdGl2ZU9yWmVybyA9ICgkYVswXSA9PT0gJy0nKSA9PT0gKCRiWzBdID09PSAnLScpOwoKICAgICAgICAkZGlzY2FyZGVkRnJhY3Rpb25TaWduID0gZnVuY3Rpb24oKSB1c2UgKCRyZW1haW5kZXIsICRiKSA6IGludCB7CiAgICAgICAgICAgICRyID0gJHRoaXMtPmFicygkdGhpcy0+bXVsKCRyZW1haW5kZXIsICcyJykpOwogICAgICAgICAgICAkYiA9ICR0aGlzLT5hYnMoJGIpOwoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbXAoJHIsICRiKTsKICAgICAgICB9OwoKICAgICAgICAkaW5jcmVtZW50ID0gZmFsc2U7CgogICAgICAgIHN3aXRjaCAoJHJvdW5kaW5nTW9kZSkgewogICAgICAgICAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VU5ORUNFU1NBUlk6CiAgICAgICAgICAgICAgICBpZiAoJGhhc0Rpc2NhcmRlZEZyYWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgUm91bmRpbmdOZWNlc3NhcnlFeGNlcHRpb246OnJvdW5kaW5nTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpVUDoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb247CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpET1dOOgogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFJvdW5kaW5nTW9kZTo6Q0VJTElORzoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gJiYgJGlzUG9zaXRpdmVPclplcm87CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpGTE9PUjoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaGFzRGlzY2FyZGVkRnJhY3Rpb24gJiYgISAkaXNQb3NpdGl2ZU9yWmVybzsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfVVA6CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIQUxGX0RPV046CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID4gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfQ0VJTElORzoKICAgICAgICAgICAgICAgICRpbmNyZW1lbnQgPSAkaXNQb3NpdGl2ZU9yWmVybyA/ICRkaXNjYXJkZWRGcmFjdGlvblNpZ24oKSA+PSAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID4gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBSb3VuZGluZ01vZGU6OkhBTEZfRkxPT1I6CiAgICAgICAgICAgICAgICAkaW5jcmVtZW50ID0gJGlzUG9zaXRpdmVPclplcm8gPyAkZGlzY2FyZGVkRnJhY3Rpb25TaWduKCkgPiAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUm91bmRpbmdNb2RlOjpIQUxGX0VWRU46CiAgICAgICAgICAgICAgICAkbGFzdERpZ2l0ID0gKGludCkgJHF1b3RpZW50Wy0xXTsKICAgICAgICAgICAgICAgICRsYXN0RGlnaXRJc0V2ZW4gPSAoJGxhc3REaWdpdCAlIDIgPT09IDApOwogICAgICAgICAgICAgICAgJGluY3JlbWVudCA9ICRsYXN0RGlnaXRJc0V2ZW4gPyAkZGlzY2FyZGVkRnJhY3Rpb25TaWduKCkgPiAwIDogJGRpc2NhcmRlZEZyYWN0aW9uU2lnbigpID49IDA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByb3VuZGluZyBtb2RlLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbmNyZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJHF1b3RpZW50LCAkaXNQb3NpdGl2ZU9yWmVybyA/ICcxJyA6ICctMScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRxdW90aWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgYml0d2lzZSBBTkQgb2YgdHdvIG51bWJlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlmIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkKICAgICAqIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHBhcmFtIHN0cmluZyAkYgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5iaXR3aXNlKCdhbmQnLCAkYSwgJGIpOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyBiaXR3aXNlIE9SIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5CiAgICAgKiBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYml0d2lzZSBvcGVyYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Ioc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5iaXR3aXNlKCdvcicsICRhLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIGJpdHdpc2UgWE9SIG9mIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5CiAgICAgKiBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgYml0d2lzZSBvcGVyYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Yml0d2lzZSgneG9yJywgJGEsICRiKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGEgYml0d2lzZSBvcGVyYXRpb24gb24gYSBkZWNpbWFsIG51bWJlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gdXNlLCBtdXN0IGJlICJhbmQiLCAib3IiIG9yICJ4b3IiLgogICAgICogQHBhcmFtIHN0cmluZyAkYSAgICAgICAgVGhlIGxlZnQgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgICAgICAgIFRoZSByaWdodCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYml0d2lzZShzdHJpbmcgJG9wZXJhdG9yLCBzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgJGFCaW4gPSAkdGhpcy0+dG9CaW5hcnkoJGFEaWcpOwogICAgICAgICRiQmluID0gJHRoaXMtPnRvQmluYXJ5KCRiRGlnKTsKCiAgICAgICAgJGFMZW4gPSBcc3RybGVuKCRhQmluKTsKICAgICAgICAkYkxlbiA9IFxzdHJsZW4oJGJCaW4pOwoKICAgICAgICBpZiAoJGFMZW4gPiAkYkxlbikgewogICAgICAgICAgICAkYkJpbiA9IFxzdHJfcmVwZWF0KCJceDAwIiwgJGFMZW4gLSAkYkxlbikgLiAkYkJpbjsKICAgICAgICB9IGVsc2VpZiAoJGJMZW4gPiAkYUxlbikgewogICAgICAgICAgICAkYUJpbiA9IFxzdHJfcmVwZWF0KCJceDAwIiwgJGJMZW4gLSAkYUxlbikgLiAkYUJpbjsKICAgICAgICB9CgogICAgICAgIGlmICgkYU5lZykgewogICAgICAgICAgICAkYUJpbiA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkYUJpbik7CiAgICAgICAgfQogICAgICAgIGlmICgkYk5lZykgewogICAgICAgICAgICAkYkJpbiA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkYkJpbik7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRvcGVyYXRvcikgewogICAgICAgICAgICBjYXNlICdhbmQnOgogICAgICAgICAgICAgICAgJHZhbHVlID0gJGFCaW4gJiAkYkJpbjsKICAgICAgICAgICAgICAgICRuZWdhdGl2ZSA9ICgkYU5lZyBhbmQgJGJOZWcpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdvcic6CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkYUJpbiB8ICRiQmluOwogICAgICAgICAgICAgICAgJG5lZ2F0aXZlID0gKCRhTmVnIG9yICRiTmVnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAneG9yJzoKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICRhQmluIF4gJGJCaW47CiAgICAgICAgICAgICAgICAkbmVnYXRpdmUgPSAoJGFOZWcgeG9yICRiTmVnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBiaXR3aXNlIG9wZXJhdG9yLicpOwogICAgICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCiAgICAgICAgfQoKICAgICAgICBpZiAoJG5lZ2F0aXZlKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICR0aGlzLT50d29zQ29tcGxlbWVudCgkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT50b0RlY2ltYWwoJHZhbHVlKTsKCiAgICAgICAgcmV0dXJuICRuZWdhdGl2ZSA/ICR0aGlzLT5uZWcoJHJlc3VsdCkgOiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIEEgcG9zaXRpdmUsIGJpbmFyeSBudW1iZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0d29zQ29tcGxlbWVudChzdHJpbmcgJG51bWJlcikgOiBzdHJpbmcKICAgIHsKICAgICAgICAkeG9yID0gXHN0cl9yZXBlYXQoIlx4ZmYiLCBcc3RybGVuKCRudW1iZXIpKTsKCiAgICAgICAgJG51bWJlciBePSAkeG9yOwoKICAgICAgICBmb3IgKCRpID0gXHN0cmxlbigkbnVtYmVyKSAtIDE7ICRpID49IDA7ICRpLS0pIHsKICAgICAgICAgICAgJGJ5dGUgPSBcb3JkKCRudW1iZXJbJGldKTsKCiAgICAgICAgICAgIGlmICgrKyRieXRlICE9PSAyNTYpIHsKICAgICAgICAgICAgICAgICRudW1iZXJbJGldID0gXGNocigkYnl0ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG51bWJlclskaV0gPSAiXHgwMCI7CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgICRudW1iZXIgPSAiXHgwMSIgLiAkbnVtYmVyOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG51bWJlcjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgZGVjaW1hbCBudW1iZXIgdG8gYSBiaW5hcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bWJlciBUaGUgbnVtYmVyIHRvIGNvbnZlcnQsIHBvc2l0aXZlIG9yIHplcm8sIG9ubHkgZGlnaXRzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nICRudW1iZXIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwoKICAgICAgICB3aGlsZSAoJG51bWJlciAhPT0gJzAnKSB7CiAgICAgICAgICAgIFskbnVtYmVyLCAkcmVtYWluZGVyXSA9ICR0aGlzLT5kaXZRUigkbnVtYmVyLCAnMjU2Jyk7CiAgICAgICAgICAgICRyZXN1bHQgLj0gXGNocigoaW50KSAkcmVtYWluZGVyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RycmV2KCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9zaXRpdmUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGJpbmFyeSBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdG9EZWNpbWFsKHN0cmluZyAkYnl0ZXMpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcwJzsKICAgICAgICAkcG93ZXIgPSAnMSc7CgogICAgICAgIGZvciAoJGkgPSBcc3RybGVuKCRieXRlcykgLSAxOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICRpbmRleCA9IFxvcmQoJGJ5dGVzWyRpXSk7CgogICAgICAgICAgICBpZiAoJGluZGV4ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmFkZCgkcmVzdWx0LCAoJGluZGV4ID09PSAxKQogICAgICAgICAgICAgICAgICAgID8gJHBvd2VyCiAgICAgICAgICAgICAgICAgICAgOiAkdGhpcy0+bXVsKCRwb3dlciwgKHN0cmluZykgJGluZGV4KQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkcG93ZXIgPSAkdGhpcy0+bXVsKCRwb3dlciwgJzI1NicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiBidWlsdCBhcm91bmQgdGhlIGJjbWF0aCBsaWJyYXJ5LgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgQmNNYXRoQ2FsY3VsYXRvciBleHRlbmRzIENhbGN1bGF0b3IKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY2FkZCgkYSwgJGIsIDApOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcYmNzdWIoJGEsICRiLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJjbXVsKCRhLCAkYiwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWROdWxsYWJsZVJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBOdWxsYWJsZVJldHVyblN0YXRlbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UShzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJjZGl2KCRhLCAkYiwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWROdWxsYWJsZVJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBOdWxsYWJsZVJldHVyblN0YXRlbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy4yJykgPj0gMCkgewogICAgICAgICAgICByZXR1cm4gXGJjbW9kKCRhLCAkYiwgMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGJjbW9kKCRhLCAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZRUihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICRxID0gXGJjZGl2KCRhLCAkYiwgMCk7CgogICAgICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjInKSA+PSAwKSB7CiAgICAgICAgICAgICRyID0gXGJjbW9kKCRhLCAkYiwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHIgPSBcYmNtb2QoJGEsICRiKTsKICAgICAgICB9CgogICAgICAgIGFzc2VydCgkcSAhPT0gbnVsbCk7CiAgICAgICAgYXNzZXJ0KCRyICE9PSBudWxsKTsKCiAgICAgICAgcmV0dXJuIFskcSwgJHJdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG93KHN0cmluZyAkYSwgaW50ICRlKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcYmNwb3coJGEsIChzdHJpbmcpICRlLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZE51bGxhYmxlUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIE51bGxhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc3RyaW5nICRiYXNlLCBzdHJpbmcgJGV4cCwgc3RyaW5nICRtb2QpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY3Bvd21vZCgkYmFzZSwgJGV4cCwgJG1vZCwgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIE51bGxhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZE51bGxhYmxlUmV0dXJuVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3FydChzdHJpbmcgJG4pIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxiY3NxcnQoJG4sIDApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiBidWlsdCBhcm91bmQgdGhlIEdNUCBsaWJyYXJ5LgogKgogKiBAaW50ZXJuYWwKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgR21wQ2FsY3VsYXRvciBleHRlbmRzIENhbGN1bGF0b3IKewogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfYWRkKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3N1YigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9tdWwoJGEsICRiKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZRKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX2Rpdl9xKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9kaXZfcigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlFSKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IGFycmF5CiAgICB7CiAgICAgICAgWyRxLCAkcl0gPSBcZ21wX2Rpdl9xcigkYSwgJGIpOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBcZ21wX3N0cnZhbCgkcSksCiAgICAgICAgICAgIFxnbXBfc3RydmFsKCRyKQogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3coc3RyaW5nICRhLCBpbnQgJGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfcG93KCRhLCAkZSkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kSW52ZXJzZShzdHJpbmcgJHgsIHN0cmluZyAkbSkgOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFxnbXBfaW52ZXJ0KCR4LCAkbSk7CgogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbCgkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZFBvdyhzdHJpbmcgJGJhc2UsIHN0cmluZyAkZXhwLCBzdHJpbmcgJG1vZCkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9wb3dtKCRiYXNlLCAkZXhwLCAkbW9kKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnY2Qoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfZ2NkKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoXGdtcF9pbml0KCRudW1iZXIsICRiYXNlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0Jhc2Uoc3RyaW5nICRudW1iZXIsIGludCAkYmFzZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9zdHJ2YWwoJG51bWJlciwgJGJhc2UpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5kKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX2FuZCgkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX29yKCRhLCAkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9yKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3hvcigkYSwgJGIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoc3RyaW5nICRuKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX3NxcnQoJG4pKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGhcSW50ZXJuYWxcQ2FsY3VsYXRvcjsKCnVzZSBCcmlja1xNYXRoXEludGVybmFsXENhbGN1bGF0b3I7CgovKioKICogQ2FsY3VsYXRvciBpbXBsZW1lbnRhdGlvbiB1c2luZyBvbmx5IG5hdGl2ZSBQSFAgY29kZS4KICoKICogQGludGVybmFsCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIE5hdGl2ZUNhbGN1bGF0b3IgZXh0ZW5kcyBDYWxjdWxhdG9yCnsKICAgIC8qKgogICAgICogVGhlIG1heCBudW1iZXIgb2YgZGlnaXRzIHRoZSBwbGF0Zm9ybSBjYW4gbmF0aXZlbHkgYWRkLCBzdWJ0cmFjdCwgbXVsdGlwbHkgb3IgZGl2aWRlIHdpdGhvdXQgb3ZlcmZsb3cuCiAgICAgKiBGb3IgbXVsdGlwbGljYXRpb24sIHRoaXMgcmVwcmVzZW50cyB0aGUgbWF4IHN1bSBvZiB0aGUgbGVuZ3RocyBvZiBib3RoIG9wZXJhbmRzLgogICAgICoKICAgICAqIEZvciBhZGRpdGlvbiwgaXQgaXMgYXNzdW1lZCB0aGF0IGFuIGV4dHJhIGRpZ2l0IGNhbiBob2xkIGEgY2FycnkgKDEpIHdpdGhvdXQgb3ZlcmZsb3dpbmcuCiAgICAgKiBFeGFtcGxlOiAzMi1iaXQ6IG1heCBudW1iZXIgMSw5OTksOTk5LDk5OSAoOSBkaWdpdHMgKyBjYXJyeSkKICAgICAqICAgICAgICAgIDY0LWJpdDogbWF4IG51bWJlciAxLDk5OSw5OTksOTk5LDk5OSw5OTksOTk5ICgxOCBkaWdpdHMgKyBjYXJyeSkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhEaWdpdHM7CgogICAgLyoqCiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgc3dpdGNoIChQSFBfSU5UX1NJWkUpIHsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1heERpZ2l0cyA9IDk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXhEaWdpdHMgPSAxODsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIHBsYXRmb3JtIGlzIG5vdCAzMi1iaXQgb3IgNjQtYml0IGFzIGV4cGVjdGVkLicpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRhCiAgICAgICAgICogQHBzYWxtLXZhciBudW1lcmljLXN0cmluZyAkYgogICAgICAgICAqLwogICAgICAgICRyZXN1bHQgPSAkYSArICRiOwoKICAgICAgICBpZiAoaXNfaW50KCRyZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICRiOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KCiAgICAgICAgWyRhTmVnLCAkYk5lZywgJGFEaWcsICRiRGlnXSA9ICR0aGlzLT5pbml0KCRhLCAkYik7CgogICAgICAgICRyZXN1bHQgPSAkYU5lZyA9PT0gJGJOZWcgPyAkdGhpcy0+ZG9BZGQoJGFEaWcsICRiRGlnKSA6ICR0aGlzLT5kb1N1YigkYURpZywgJGJEaWcpOwoKICAgICAgICBpZiAoJGFOZWcpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5uZWcoJHJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkZCgkYSwgJHRoaXMtPm5lZygkYikpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGEKICAgICAgICAgKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRiCiAgICAgICAgICovCiAgICAgICAgJHJlc3VsdCA9ICRhICogJGI7CgogICAgICAgIGlmIChpc19pbnQoJHJlc3VsdCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICcwJyB8fCAkYiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJGI7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGIgPT09ICcxJykgewogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICctMScpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uZWcoJGIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnLTEnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bmVnKCRhKTsKICAgICAgICB9CgogICAgICAgIFskYU5lZywgJGJOZWcsICRhRGlnLCAkYkRpZ10gPSAkdGhpcy0+aW5pdCgkYSwgJGIpOwoKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmRvTXVsKCRhRGlnLCAkYkRpZyk7CgogICAgICAgIGlmICgkYU5lZyAhPT0gJGJOZWcpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5uZWcoJHJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlEoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kaXZRUigkYSwgJGIpWzBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2UihzdHJpbmcgJGEsIHN0cmluZyAkYik6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGl2UVIoJGEsICRiKVsxXTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdlFSKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCRhID09PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuIFsnMCcsICcwJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoJGEgPT09ICRiKSB7CiAgICAgICAgICAgIHJldHVybiBbJzEnLCAnMCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuIFskYSwgJzAnXTsKICAgICAgICB9CgogICAgICAgIGlmICgkYiA9PT0gJy0xJykgewogICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5uZWcoJGEpLCAnMCddOwogICAgICAgIH0KCiAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGEgKi8KICAgICAgICAkbmEgPSAkYSAqIDE7IC8vIGNhc3QgdG8gbnVtYmVyCgogICAgICAgIGlmIChpc19pbnQoJG5hKSkgewogICAgICAgICAgICAvKiogQHBzYWxtLXZhciBudW1lcmljLXN0cmluZyAkYiAqLwogICAgICAgICAgICAkbmIgPSAkYiAqIDE7CgogICAgICAgICAgICBpZiAoaXNfaW50KCRuYikpIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGRpdmlzaW9uIHRoYXQgbWF5IG92ZXJmbG93IGlzIFBIUF9JTlRfTUlOIC8gLTEsCiAgICAgICAgICAgICAgICAvLyB3aGljaCBjYW5ub3QgaGFwcGVuIGhlcmUgYXMgd2UndmUgYWxyZWFkeSBoYW5kbGVkIGEgZGl2aXNvciBvZiAtMSBhYm92ZS4KICAgICAgICAgICAgICAgICRyID0gJG5hICUgJG5iOwogICAgICAgICAgICAgICAgJHEgPSAoJG5hIC0gJHIpIC8gJG5iOwoKICAgICAgICAgICAgICAgIGFzc2VydChpc19pbnQoJHEpKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIChzdHJpbmcpICRxLAogICAgICAgICAgICAgICAgICAgIChzdHJpbmcpICRyCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBbJGFOZWcsICRiTmVnLCAkYURpZywgJGJEaWddID0gJHRoaXMtPmluaXQoJGEsICRiKTsKCiAgICAgICAgWyRxLCAkcl0gPSAkdGhpcy0+ZG9EaXYoJGFEaWcsICRiRGlnKTsKCiAgICAgICAgaWYgKCRhTmVnICE9PSAkYk5lZykgewogICAgICAgICAgICAkcSA9ICR0aGlzLT5uZWcoJHEpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhTmVnKSB7CiAgICAgICAgICAgICRyID0gJHRoaXMtPm5lZygkcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRxLCAkcl07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3coc3RyaW5nICRhLCBpbnQgJGUpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRlID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAnMSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGUgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KCiAgICAgICAgJG9kZCA9ICRlICUgMjsKICAgICAgICAkZSAtPSAkb2RkOwoKICAgICAgICAkYWEgPSAkdGhpcy0+bXVsKCRhLCAkYSk7CgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUG9zc2libHlJbnZhbGlkQXJndW1lbnQgV2UncmUgc3VyZSB0aGF0ICRlIC8gMiBpcyBhbiBpbnQgbm93ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wb3coJGFhLCAkZSAvIDIpOwoKICAgICAgICBpZiAoJG9kZCA9PT0gMSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPm11bCgkcmVzdWx0LCAkYSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEFsZ29yaXRobSBmcm9tOiBodHRwczovL3d3dy5nZWVrc2ZvcmdlZWtzLm9yZy9tb2R1bGFyLWV4cG9uZW50aWF0aW9uLXBvd2VyLWluLW1vZHVsYXItYXJpdGhtZXRpYy8KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc3RyaW5nICRiYXNlLCBzdHJpbmcgJGV4cCwgc3RyaW5nICRtb2QpIDogc3RyaW5nCiAgICB7CiAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiB0aGUgYWxnb3JpdGhtIGJlbG93IGZhaWxzIHdpdGggMCBwb3dlciAwIG1vZCAxIChyZXR1cm5zIDEgaW5zdGVhZCBvZiAwKQogICAgICAgIGlmICgkYmFzZSA9PT0gJzAnICYmICRleHAgPT09ICcwJyAmJiAkbW9kID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgIC8vIHNwZWNpYWwgY2FzZTogdGhlIGFsZ29yaXRobSBiZWxvdyBmYWlscyB3aXRoIHBvd2VyIDAgbW9kIDEgKHJldHVybnMgMSBpbnN0ZWFkIG9mIDApCiAgICAgICAgaWYgKCRleHAgPT09ICcwJyAmJiAkbW9kID09PSAnMScpIHsKICAgICAgICAgICAgcmV0dXJuICcwJzsKICAgICAgICB9CgogICAgICAgICR4ID0gJGJhc2U7CgogICAgICAgICRyZXMgPSAnMSc7CgogICAgICAgIC8vIG51bWJlcnMgYXJlIHBvc2l0aXZlLCBzbyB3ZSBjYW4gdXNlIHJlbWFpbmRlciBpbnN0ZWFkIG9mIG1vZHVsbwogICAgICAgICR4ID0gJHRoaXMtPmRpdlIoJHgsICRtb2QpOwoKICAgICAgICB3aGlsZSAoJGV4cCAhPT0gJzAnKSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXhwWy0xXSwgWycxJywgJzMnLCAnNScsICc3JywgJzknXSkpIHsgLy8gb2RkCiAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPmRpdlIoJHRoaXMtPm11bCgkcmVzLCAkeCksICRtb2QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXhwID0gJHRoaXMtPmRpdlEoJGV4cCwgJzInKTsKICAgICAgICAgICAgJHggPSAkdGhpcy0+ZGl2UigkdGhpcy0+bXVsKCR4LCAkeCksICRtb2QpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGFwdGVkIGZyb20gaHR0cHM6Ly9jcC1hbGdvcml0aG1zLmNvbS9udW1fbWV0aG9kcy9yb290c19uZXd0b24uaHRtbAogICAgICoKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxcnQoc3RyaW5nICRuKSA6IHN0cmluZwogICAgewogICAgICAgIGlmICgkbiA9PT0gJzAnKSB7CiAgICAgICAgICAgIHJldHVybiAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBpbml0aWFsIGFwcHJveGltYXRpb24KICAgICAgICAkeCA9IFxzdHJfcmVwZWF0KCc5JywgXGludGRpdihcc3RybGVuKCRuKSwgMikgPzogMSk7CgogICAgICAgICRkZWNyZWFzZWQgPSBmYWxzZTsKCiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAkbnggPSAkdGhpcy0+ZGl2USgkdGhpcy0+YWRkKCR4LCAkdGhpcy0+ZGl2USgkbiwgJHgpKSwgJzInKTsKCiAgICAgICAgICAgIGlmICgkeCA9PT0gJG54IHx8ICR0aGlzLT5jbXAoJG54LCAkeCkgPiAwICYmICRkZWNyZWFzZWQpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZGVjcmVhc2VkID0gJHRoaXMtPmNtcCgkbngsICR4KSA8IDA7CiAgICAgICAgICAgICR4ID0gJG54OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4OwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgdGhlIGFkZGl0aW9uIG9mIHR3byBub24tc2lnbmVkIGxhcmdlIGludGVnZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEgVGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiIFRoZSBzZWNvbmQgb3BlcmFuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvQWRkKHN0cmluZyAkYSwgc3RyaW5nICRiKSA6IHN0cmluZwogICAgewogICAgICAgIFskYSwgJGIsICRsZW5ndGhdID0gJHRoaXMtPnBhZCgkYSwgJGIpOwoKICAgICAgICAkY2FycnkgPSAwOwogICAgICAgICRyZXN1bHQgPSAnJzsKCiAgICAgICAgZm9yICgkaSA9ICRsZW5ndGggLSAkdGhpcy0+bWF4RGlnaXRzOzsgJGkgLT0gJHRoaXMtPm1heERpZ2l0cykgewogICAgICAgICAgICAkYmxvY2tMZW5ndGggPSAkdGhpcy0+bWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrTGVuZ3RoICs9ICRpOwogICAgICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBMb29wSW52YWxpZGF0aW9uICovCiAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRibG9ja0EgKi8KICAgICAgICAgICAgJGJsb2NrQSA9IFxzdWJzdHIoJGEsICRpLCAkYmxvY2tMZW5ndGgpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGJsb2NrQiAqLwogICAgICAgICAgICAkYmxvY2tCID0gXHN1YnN0cigkYiwgJGksICRibG9ja0xlbmd0aCk7CgogICAgICAgICAgICAkc3VtID0gKHN0cmluZykgKCRibG9ja0EgKyAkYmxvY2tCICsgJGNhcnJ5KTsKICAgICAgICAgICAgJHN1bUxlbmd0aCA9IFxzdHJsZW4oJHN1bSk7CgogICAgICAgICAgICBpZiAoJHN1bUxlbmd0aCA+ICRibG9ja0xlbmd0aCkgewogICAgICAgICAgICAgICAgJHN1bSA9IFxzdWJzdHIoJHN1bSwgMSk7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCRzdW1MZW5ndGggPCAkYmxvY2tMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAkc3VtID0gXHN0cl9yZXBlYXQoJzAnLCAkYmxvY2tMZW5ndGggLSAkc3VtTGVuZ3RoKSAuICRzdW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY2FycnkgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzdWx0ID0gJHN1bSAuICRyZXN1bHQ7CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNhcnJ5ID09PSAxKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAnMScgLiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyB0aGUgc3VidHJhY3Rpb24gb2YgdHdvIG5vbi1zaWduZWQgbGFyZ2UgaW50ZWdlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9TdWIoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRhID09PSAkYikgewogICAgICAgICAgICByZXR1cm4gJzAnOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgYWx3YXlzIHN1YnRyYWN0IHRvIGEgcG9zaXRpdmUgcmVzdWx0OiBiaWdnZXN0IG1pbnVzIHNtYWxsZXN0LgogICAgICAgICRjbXAgPSAkdGhpcy0+ZG9DbXAoJGEsICRiKTsKCiAgICAgICAgJGludmVydCA9ICgkY21wID09PSAtMSk7CgogICAgICAgIGlmICgkaW52ZXJ0KSB7CiAgICAgICAgICAgICRjID0gJGE7CiAgICAgICAgICAgICRhID0gJGI7CiAgICAgICAgICAgICRiID0gJGM7CiAgICAgICAgfQoKICAgICAgICBbJGEsICRiLCAkbGVuZ3RoXSA9ICR0aGlzLT5wYWQoJGEsICRiKTsKCiAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgICRjb21wbGVtZW50ID0gMTAgKiogJHRoaXMtPm1heERpZ2l0czsKCiAgICAgICAgZm9yICgkaSA9ICRsZW5ndGggLSAkdGhpcy0+bWF4RGlnaXRzOzsgJGkgLT0gJHRoaXMtPm1heERpZ2l0cykgewogICAgICAgICAgICAkYmxvY2tMZW5ndGggPSAkdGhpcy0+bWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrTGVuZ3RoICs9ICRpOwogICAgICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBMb29wSW52YWxpZGF0aW9uICovCiAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRibG9ja0EgKi8KICAgICAgICAgICAgJGJsb2NrQSA9IFxzdWJzdHIoJGEsICRpLCAkYmxvY2tMZW5ndGgpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcgJGJsb2NrQiAqLwogICAgICAgICAgICAkYmxvY2tCID0gXHN1YnN0cigkYiwgJGksICRibG9ja0xlbmd0aCk7CgogICAgICAgICAgICAkc3VtID0gJGJsb2NrQSAtICRibG9ja0IgLSAkY2Fycnk7CgogICAgICAgICAgICBpZiAoJHN1bSA8IDApIHsKICAgICAgICAgICAgICAgICRzdW0gKz0gJGNvbXBsZW1lbnQ7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHN1bSA9IChzdHJpbmcpICRzdW07CiAgICAgICAgICAgICRzdW1MZW5ndGggPSBcc3RybGVuKCRzdW0pOwoKICAgICAgICAgICAgaWYgKCRzdW1MZW5ndGggPCAkYmxvY2tMZW5ndGgpIHsKICAgICAgICAgICAgICAgICRzdW0gPSBcc3RyX3JlcGVhdCgnMCcsICRibG9ja0xlbmd0aCAtICRzdW1MZW5ndGgpIC4gJHN1bTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlc3VsdCA9ICRzdW0gLiAkcmVzdWx0OwoKICAgICAgICAgICAgaWYgKCRpID09PSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2FycnkgY2Fubm90IGJlIDEgd2hlbiB0aGUgbG9vcCBlbmRzLCBhcyBhID4gYgogICAgICAgIGFzc2VydCgkY2FycnkgPT09IDApOwoKICAgICAgICAkcmVzdWx0ID0gXGx0cmltKCRyZXN1bHQsICcwJyk7CgogICAgICAgIGlmICgkaW52ZXJ0KSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+bmVnKCRyZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyB0aGUgbXVsdGlwbGljYXRpb24gb2YgdHdvIG5vbi1zaWduZWQgbGFyZ2UgaW50ZWdlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9NdWwoc3RyaW5nICRhLCBzdHJpbmcgJGIpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJHggPSBcc3RybGVuKCRhKTsKICAgICAgICAkeSA9IFxzdHJsZW4oJGIpOwoKICAgICAgICAkbWF4RGlnaXRzID0gXGludGRpdigkdGhpcy0+bWF4RGlnaXRzLCAyKTsKICAgICAgICAkY29tcGxlbWVudCA9IDEwICoqICRtYXhEaWdpdHM7CgogICAgICAgICRyZXN1bHQgPSAnMCc7CgogICAgICAgIGZvciAoJGkgPSAkeCAtICRtYXhEaWdpdHM7OyAkaSAtPSAkbWF4RGlnaXRzKSB7CiAgICAgICAgICAgICRibG9ja0FMZW5ndGggPSAkbWF4RGlnaXRzOwoKICAgICAgICAgICAgaWYgKCRpIDwgMCkgewogICAgICAgICAgICAgICAgJGJsb2NrQUxlbmd0aCArPSAkaTsKICAgICAgICAgICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgTG9vcEludmFsaWRhdGlvbiAqLwogICAgICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYmxvY2tBID0gKGludCkgXHN1YnN0cigkYSwgJGksICRibG9ja0FMZW5ndGgpOwoKICAgICAgICAgICAgJGxpbmUgPSAnJzsKICAgICAgICAgICAgJGNhcnJ5ID0gMDsKCiAgICAgICAgICAgIGZvciAoJGogPSAkeSAtICRtYXhEaWdpdHM7OyAkaiAtPSAkbWF4RGlnaXRzKSB7CiAgICAgICAgICAgICAgICAkYmxvY2tCTGVuZ3RoID0gJG1heERpZ2l0czsKCiAgICAgICAgICAgICAgICBpZiAoJGogPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrQkxlbmd0aCArPSAkajsKICAgICAgICAgICAgICAgICAgICAvKiogQHBzYWxtLXN1cHByZXNzIExvb3BJbnZhbGlkYXRpb24gKi8KICAgICAgICAgICAgICAgICAgICAkaiA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGJsb2NrQiA9IChpbnQpIFxzdWJzdHIoJGIsICRqLCAkYmxvY2tCTGVuZ3RoKTsKCiAgICAgICAgICAgICAgICAkbXVsID0gJGJsb2NrQSAqICRibG9ja0IgKyAkY2Fycnk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAkbXVsICUgJGNvbXBsZW1lbnQ7CiAgICAgICAgICAgICAgICAkY2FycnkgPSAoJG11bCAtICR2YWx1ZSkgLyAkY29tcGxlbWVudDsKCiAgICAgICAgICAgICAgICAkdmFsdWUgPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSBcc3RyX3BhZCgkdmFsdWUsICRtYXhEaWdpdHMsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgICAgICAgICAkbGluZSA9ICR2YWx1ZSAuICRsaW5lOwoKICAgICAgICAgICAgICAgIGlmICgkaiA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNhcnJ5ICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkbGluZSA9ICRjYXJyeSAuICRsaW5lOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbGluZSA9IFxsdHJpbSgkbGluZSwgJzAnKTsKCiAgICAgICAgICAgIGlmICgkbGluZSAhPT0gJycpIHsKICAgICAgICAgICAgICAgICRsaW5lIC49IFxzdHJfcmVwZWF0KCcwJywgJHggLSAkYmxvY2tBTGVuZ3RoIC0gJGkpOwogICAgICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5hZGQoJHJlc3VsdCwgJGxpbmUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIHRoZSBkaXZpc2lvbiBvZiB0d28gbm9uLXNpZ25lZCBsYXJnZSBpbnRlZ2Vycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBmaXJzdCBvcGVyYW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgc2Vjb25kIG9wZXJhbmQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUaGUgcXVvdGllbnQgYW5kIHJlbWFpbmRlci4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb0RpdihzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICRjbXAgPSAkdGhpcy0+ZG9DbXAoJGEsICRiKTsKCiAgICAgICAgaWYgKCRjbXAgPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBbJzAnLCAkYV07CiAgICAgICAgfQoKICAgICAgICAkeCA9IFxzdHJsZW4oJGEpOwogICAgICAgICR5ID0gXHN0cmxlbigkYik7CgogICAgICAgIC8vIHdlIG5vdyBrbm93IHRoYXQgYSA+PSBiICYmIHggPj0geQoKICAgICAgICAkcSA9ICcwJzsgLy8gcXVvdGllbnQKICAgICAgICAkciA9ICRhOyAvLyByZW1haW5kZXIKICAgICAgICAkeiA9ICR5OyAvLyBmb2N1cyBsZW5ndGgsIGFsd2F5cyAkeSBvciAkeSsxCgogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgJGZvY3VzID0gXHN1YnN0cigkYSwgMCwgJHopOwoKICAgICAgICAgICAgJGNtcCA9ICR0aGlzLT5kb0NtcCgkZm9jdXMsICRiKTsKCiAgICAgICAgICAgIGlmICgkY21wID09PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKCR6ID09PSAkeCkgeyAvLyByZW1haW5kZXIgPCBkaXZpZGVuZAogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR6Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR6ZXJvcyA9IFxzdHJfcmVwZWF0KCcwJywgJHggLSAkeik7CgogICAgICAgICAgICAkcSA9ICR0aGlzLT5hZGQoJHEsICcxJyAuICR6ZXJvcyk7CiAgICAgICAgICAgICRhID0gJHRoaXMtPnN1YigkYSwgJGIgLiAkemVyb3MpOwoKICAgICAgICAgICAgJHIgPSAkYTsKCiAgICAgICAgICAgIGlmICgkciA9PT0gJzAnKSB7IC8vIHJlbWFpbmRlciA9PSAwCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHggPSBcc3RybGVuKCRhKTsKCiAgICAgICAgICAgIGlmICgkeCA8ICR5KSB7IC8vIHJlbWFpbmRlciA8IGRpdmlkZW5kCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHogPSAkeTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHEsICRyXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmVzIHR3byBub24tc2lnbmVkIGxhcmdlIG51bWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYSBUaGUgZmlyc3Qgb3BlcmFuZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGIgVGhlIHNlY29uZCBvcGVyYW5kLgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFstMSwgMCwgMV0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb0NtcChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBpbnQKICAgIHsKICAgICAgICAkeCA9IFxzdHJsZW4oJGEpOwogICAgICAgICR5ID0gXHN0cmxlbigkYik7CgogICAgICAgICRjbXAgPSAkeCA8PT4gJHk7CgogICAgICAgIGlmICgkY21wICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkY21wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxzdHJjbXAoJGEsICRiKSA8PT4gMDsgLy8gZW5mb3JjZSBbLTEsIDAsIDFdCiAgICB9CgogICAgLyoqCiAgICAgKiBQYWRzIHRoZSBsZWZ0IG9mIG9uZSBvZiB0aGUgZ2l2ZW4gbnVtYmVycyB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeSB0byBtYWtlIGJvdGggbnVtYmVycyB0aGUgc2FtZSBsZW5ndGguCiAgICAgKgogICAgICogVGhlIG51bWJlcnMgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgZGlnaXRzLCB3aXRob3V0IGxlYWRpbmcgbWludXMgc2lnbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhIFRoZSBmaXJzdCBvcGVyYW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkYiBUaGUgc2Vjb25kIG9wZXJhbmQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXtzdHJpbmcsIHN0cmluZywgaW50fQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhZChzdHJpbmcgJGEsIHN0cmluZyAkYikgOiBhcnJheQogICAgewogICAgICAgICR4ID0gXHN0cmxlbigkYSk7CiAgICAgICAgJHkgPSBcc3RybGVuKCRiKTsKCiAgICAgICAgaWYgKCR4ID4gJHkpIHsKICAgICAgICAgICAgJGIgPSBcc3RyX3JlcGVhdCgnMCcsICR4IC0gJHkpIC4gJGI7CgogICAgICAgICAgICByZXR1cm4gWyRhLCAkYiwgJHhdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR4IDwgJHkpIHsKICAgICAgICAgICAgJGEgPSBcc3RyX3JlcGVhdCgnMCcsICR5IC0gJHgpIC4gJGE7CgogICAgICAgICAgICByZXR1cm4gWyRhLCAkYiwgJHldOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskYSwgJGIsICR4XTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/brick/math/src/RoundingMode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEJyaWNrXE1hdGg7CgovKioKICogU3BlY2lmaWVzIGEgcm91bmRpbmcgYmVoYXZpb3IgZm9yIG51bWVyaWNhbCBvcGVyYXRpb25zIGNhcGFibGUgb2YgZGlzY2FyZGluZyBwcmVjaXNpb24uCiAqCiAqIEVhY2ggcm91bmRpbmcgbW9kZSBpbmRpY2F0ZXMgaG93IHRoZSBsZWFzdCBzaWduaWZpY2FudCByZXR1cm5lZCBkaWdpdCBvZiBhIHJvdW5kZWQgcmVzdWx0CiAqIGlzIHRvIGJlIGNhbGN1bGF0ZWQuIElmIGZld2VyIGRpZ2l0cyBhcmUgcmV0dXJuZWQgdGhhbiB0aGUgZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlCiAqIGV4YWN0IG51bWVyaWNhbCByZXN1bHQsIHRoZSBkaXNjYXJkZWQgZGlnaXRzIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbgogKiByZWdhcmRsZXNzIHRoZSBkaWdpdHMnIGNvbnRyaWJ1dGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIGNvbnNpZGVyZWQKICogYXMgYSBudW1lcmljYWwgdmFsdWUsIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gY291bGQgaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb25lLgogKi8KZmluYWwgY2xhc3MgUm91bmRpbmdNb2RlCnsKICAgIC8qKgogICAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci4gVGhpcyBjbGFzcyBpcyBub3QgaW5zdGFudGlhYmxlLgogICAgICoKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaGFzIGFuIGV4YWN0IHJlc3VsdCwgaGVuY2Ugbm8gcm91bmRpbmcgaXMgbmVjZXNzYXJ5LgogICAgICoKICAgICAqIElmIHRoaXMgcm91bmRpbmcgbW9kZSBpcyBzcGVjaWZpZWQgb24gYW4gb3BlcmF0aW9uIHRoYXQgeWllbGRzIGEgcmVzdWx0IHRoYXQKICAgICAqIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhdCB0aGUgcmVxdWVzdGVkIHNjYWxlLCBhIFJvdW5kaW5nTmVjZXNzYXJ5RXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVOTkVDRVNTQVJZID0gMDsKCiAgICAvKioKICAgICAqIFJvdW5kcyBhd2F5IGZyb20gemVyby4KICAgICAqCiAgICAgKiBBbHdheXMgaW5jcmVtZW50cyB0aGUgZGlnaXQgcHJpb3IgdG8gYSBub256ZXJvIGRpc2NhcmRlZCBmcmFjdGlvbi4KICAgICAqIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgZGVjcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVUCA9IDE7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyB6ZXJvLgogICAgICoKICAgICAqIE5ldmVyIGluY3JlbWVudHMgdGhlIGRpZ2l0IHByaW9yIHRvIGEgZGlzY2FyZGVkIGZyYWN0aW9uIChpLmUuLCB0cnVuY2F0ZXMpLgogICAgICogTm90ZSB0aGF0IHRoaXMgcm91bmRpbmcgbW9kZSBuZXZlciBpbmNyZWFzZXMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERPV04gPSAyOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgcG9zaXRpdmUgaW5maW5pdHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYmVoYXZlcyBhcyBmb3IgVVA7IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBET1dOLgogICAgICogTm90ZSB0aGF0IHRoaXMgcm91bmRpbmcgbW9kZSBuZXZlciBkZWNyZWFzZXMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDRUlMSU5HID0gMzsKCiAgICAvKioKICAgICAqIFJvdW5kcyB0b3dhcmRzIG5lZ2F0aXZlIGluZmluaXR5LgogICAgICoKICAgICAqIElmIHRoZSByZXN1bHQgaXMgcG9zaXRpdmUsIGJlaGF2ZSBhcyBmb3IgRE9XTjsgaWYgbmVnYXRpdmUsIGJlaGF2ZSBhcyBmb3IgVVAuCiAgICAgKiBOb3RlIHRoYXQgdGhpcyByb3VuZGluZyBtb2RlIG5ldmVyIGluY3JlYXNlcyB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMT09SID0gNDsKCiAgICAvKioKICAgICAqIFJvdW5kcyB0b3dhcmRzICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMgYXJlIGVxdWlkaXN0YW50LCBpbiB3aGljaCBjYXNlIHJvdW5kIHVwLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPj0gMC41OyBvdGhlcndpc2UsIGJlaGF2ZXMgYXMgZm9yIERPV04uCiAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgcm91bmRpbmcgbW9kZSBjb21tb25seSB0YXVnaHQgYXQgc2Nob29sLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFMRl9VUCA9IDU7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCBkb3duLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPiAwLjU7IG90aGVyd2lzZSwgYmVoYXZlcyBhcyBmb3IgRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRE9XTiA9IDY7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCB0b3dhcmRzIHBvc2l0aXZlIGluZmluaXR5LgogICAgICoKICAgICAqIElmIHRoZSByZXN1bHQgaXMgcG9zaXRpdmUsIGJlaGF2ZXMgYXMgZm9yIEhBTEZfVVA7IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV04uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0NFSUxJTkcgPSA3OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV047IGlmIG5lZ2F0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX1VQLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFMRl9GTE9PUiA9IDg7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyB0aGUgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsIGluIHdoaWNoIGNhc2Ugcm91bmRzIHRvd2FyZHMgdGhlIGV2ZW4gbmVpZ2hib3IuCiAgICAgKgogICAgICogQmVoYXZlcyBhcyBmb3IgSEFMRl9VUCBpZiB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiBpcyBvZGQ7CiAgICAgKiBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV04gaWYgaXQncyBldmVuLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSByb3VuZGluZyBtb2RlIHRoYXQgc3RhdGlzdGljYWxseSBtaW5pbWl6ZXMKICAgICAqIGN1bXVsYXRpdmUgZXJyb3Igd2hlbiBhcHBsaWVkIHJlcGVhdGVkbHkgb3ZlciBhIHNlcXVlbmNlIG9mIGNhbGN1bGF0aW9ucy4KICAgICAqIEl0IGlzIHNvbWV0aW1lcyBrbm93biBhcyAiQmFua2VyJ3Mgcm91bmRpbmciLCBhbmQgaXMgY2hpZWZseSB1c2VkIGluIHRoZSBVU0EuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0VWRU4gPSA5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_classmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ0F0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvQXR0cmlidXRlLnBocCcsCiAgICAnQ1VSTFN0cmluZ0ZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUmVzb3VyY2VzL3N0dWJzL0NVUkxTdHJpbmdGaWxlLnBocCcsCiAgICAnQ29tcG9zZXJcXEluc3RhbGxlZFZlcnNpb25zJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9JbnN0YWxsZWRWZXJzaW9ucy5waHAnLAogICAgJ1BocFRva2VuJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9QaHBUb2tlbi5waHAnLAogICAgJ1JldHVyblR5cGVXaWxsQ2hhbmdlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL1Jlc291cmNlcy9zdHVicy9SZXR1cm5UeXBlV2lsbENoYW5nZS5waHAnLAogICAgJ1N0cmluZ2FibGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL1N0cmluZ2FibGUucGhwJywKICAgICdVbmhhbmRsZWRNYXRjaEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9VbmhhbmRsZWRNYXRjaEVycm9yLnBocCcsCiAgICAnVmFsdWVFcnJvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVmFsdWVFcnJvci5waHAnLAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_files.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2ZpbGVzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ2E0YTExOWE1NmU1MGZiYjI5MzI4MWQ5YTQ4MDA3ZTBlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL2Jvb3RzdHJhcC5waHAnLAogICAgJzZlM2ZhZTI5NjMxZWYyODA2NjBiM2NkYWQwNmYyNWE4JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cy9mdW5jdGlvbi5waHAnLAogICAgJ2E0ZWNhZWFmYjhjZmIwMDlhZDBlMDUyYzkwMzU1ZTk4JyA9PiAkdmVuZG9yRGlyIC4gJy9iZWJlcmxlaS9hc3NlcnQvbGliL0Fzc2VydC9mdW5jdGlvbnMucGhwJywKICAgICc3YjExYzRkYzQyYjNiMzAyMzA3M2NiMTRlNTE5NjgzYycgPT4gJHZlbmRvckRpciAuICcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvc3JjL2dldGFsbGhlYWRlcnMucGhwJywKICAgICcyM2MxODA0NmY1MmJlZjNlZWEwMzQ2NTdiYWZkYTUwZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9ib290c3RyYXAucGhwJywKICAgICczMjBjZGUyMmY2NmRkNGY1ZDNmZDYyMWQzZTg4Yjk4ZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9ib290c3RyYXAucGhwJywKICAgICczN2EzZGM1MTExZmU4ZjcwN2FiNGMxMzJlZjFkYmM2MicgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCcsCiAgICAnZTM5YThiMjNjNDJkNGUxNDUyMjM0ZDc2MmIwMzgzNWEnID0+ICR2ZW5kb3JEaXIgLiAnL3JhbXNleS91dWlkL3NyYy9mdW5jdGlvbnMucGhwJywKICAgICc1MWZjZjRlMDZjMDdjYzAwYzkyMGI0NGJjZDkwMGU3YScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvYXBjLnBocCcsCiAgICAnNDdmNjE5ZDkxOTdiMzZjZjVhYjcwNzM4ZDc3NDNmZTInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL2xpYmV2ZW50LnBocCcsCiAgICAnZWE2YmI4YTEyZWY5YjY4ZjZhZGE5OTA1OGU1MzA3NjAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL21zc3FsLnBocCcsCiAgICAnOWEyOTA4OWViM2NlNDFhNDQ2NzQ0YzY4YTAwZjExOGMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkL3N0YXRzLnBocCcsCiAgICAnNzIyNDNlNTUzNmI2M2UyOThhY2I2NDc2ZjAxZjFhZmYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9saWIvc3BlY2lhbF9jYXNlcy5waHAnLAogICAgJzNmNjQ4ODg5ZTY4N2YzMWM1MmY5NDliYThhOWQwODczJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FwYWNoZS5waHAnLAogICAgJ2VlYjQ1ODFkOTU4NDIxYTQyNDRhYWE0MTY3YzZhNTc1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FwY3UucGhwJywKICAgICcwNGNiMGIzYzFkYWM1YjVkZGIyM2MxNGUzZDY2ZGJlOScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9hcnJheS5waHAnLAogICAgJzQ1MGIzMzJhNzRhOWEyMWUwNDNjNWU5NTM0ODVhNzkxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2J6aXAyLnBocCcsCiAgICAnNmU5Yjc5NTRlY2ZkN2NiYjljYTIzOTMxOWQxYWNkYjYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY2FsZW5kYXIucGhwJywKICAgICcyYzZkN2U4YmQyZGU5YTI3MmE5ZDRkNDNiMGE0MzA0YScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9jbGFzc29iai5waHAnLAogICAgJzBiODIzMWMxYWQwODY1NDQ3Yzk4OGE0YzE2YjQwMDFmJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2NvbS5waHAnLAogICAgJzc2NDNhNzFmZTFjMzI1NjA1OGM4ZmVlMjM0Y2I4NmU1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2N1YnJpZC5waHAnLAogICAgJzY4ZTEzNjU3MTA1NzU5NDJlZmMxZDU1MDAwMDMyY2VlJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2N1cmwucGhwJywKICAgICcwMmZkMjZiY2E4MDMxMDZjNWI5NDJhNzE5N2MzYWQ4YicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9kYXRldGltZS5waHAnLAogICAgJ2Y0ODE3ZGNiZDk1NmNkMjIxYjFjMzFmNmZiZDU3NDljJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Rpci5waHAnLAogICAgJzUxYzNmMmQxMGNhNjFhNzBkYmNlYTBlMzhkOGU5MDJkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Vpby5waHAnLAogICAgJzFkMzRmMzQzMjdjYTNlODE1MzU5NjMwMTZlM2JlMmMzJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Vycm9yZnVuYy5waHAnLAogICAgJzRmZDBiYTJkMzcxN2IwNDI0ZDQ3NGJlYmZkYWZhMmI0JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2V4ZWMucGhwJywKICAgICc5OGY0ZGFlMDU0YmM3ZmIxOWMxM2JlMTQ5MzVjYmRkMycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9maWxlaW5mby5waHAnLAogICAgJzU1MzBhZTA2M2JhODgzMjNlYWYwYTA3OTA0ZWZkZjg1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbGVzeXN0ZW0ucGhwJywKICAgICc2MzNmNGYxMzQ5NzVkNzBlOTdiZGRhZDgzMzQ4ZTkxYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9maWx0ZXIucGhwJywKICAgICdmYmQxNjNmYzY4YzVmYWY3M2Q1ZWQ0MDAyZmZkODM2ZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mcG0ucGhwJywKICAgICcyMWI1MTE5OTlkNjE0MTFmYWIwNjkyZmY4Nzk1YmJlZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mdHAucGhwJywKICAgICc4NWZiZDczZmM5MjM2NWNkOTA1MjZiMGVhMDNjYWUzYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9mdW5jaGFuZC5waHAnLAogICAgJzUxZGY5YzE0NmUwYjdkY2JkZjM1OGQ4YWJkMjRkYmRjJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2dtcC5waHAnLAogICAgJzkzYmI3ZmU2NzhkN2RjZmIxMzIyZjhlMzQ3NWE0OGIwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2dudXBnLnBocCcsCiAgICAnYzE3MWJhOTljZjMxNjM3OWZmNjY0NjgzOTJiZjQ5NTAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaGFzaC5waHAnLAogICAgJzVhYjRhYWQ0YzI4ZTQ2ODIwOWZiZmNjZWIyZTVlNmE1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2liYXNlLnBocCcsCiAgICAnNGQ1NzQwOWM1ZThlNTc2YjBjNjRjMDhkOWQ3MzFjZmInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWJtRGIyLnBocCcsCiAgICAnZWViMjQ2ZDU0MDM5NzJhOWQ2MjEwNmU0YTQ4ODM0OTYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWNvbnYucGhwJywKICAgICdjMjhhMDVmNDk4YzAxYjgxMGE3MTRmNzIxNGI3YThkYScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbWFnZS5waHAnLAogICAgJzgwNjNjZDkyYWNkZjAwZmQ5NzhiNTU5OWViN2NjMTQyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ltYXAucGhwJywKICAgICc4YmQyNmRiZTc2OGU5Yzk1OTllZGFkN2IxOThlNTQ0NicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbmZvLnBocCcsCiAgICAnMGM1NzdmZTYwM2IwMjlkNGI2NWM4NDM3NmIxNWRiZDUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW5ncmVzLWlpLnBocCcsCiAgICAnZDQzNjI5MTBiZGU0M2MwZjk1NmI1MjUyN2VmZmQ3ZDQnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW5vdGlmeS5waHAnLAogICAgJzY5NmJhNDkxOTdkOWI1NWYwNDI4YTEyYmI1YTgxOGUxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2pzb24ucGhwJywKICAgICc5ODE4YWFhOTljODY0N2M2M2Y4ZWY2MmI3YTM2ODE2MCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9sZGFwLnBocCcsCiAgICAnYmNmNTIzZmYyYTE5NWViMDhlMGZiYjY2OGVkNzg0ZDAnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbGlieG1sLnBocCcsCiAgICAnNjhiZTY4YTlhOGI5NWJiNTZjYWI2MTA5ZmYwM2JjODgnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbHpmLnBocCcsCiAgICAnYmRjYTgwNGJiMDkwNGVhOWY1M2YzMjhkZmMwYmI4YTUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbWFpbHBhcnNlLnBocCcsCiAgICAnYjBhM2ZjYWMzZWFmNTU0NDU3OTZkNmFmMjZiODkzNjYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbWJzdHJpbmcucGhwJywKICAgICc5OGRlMTZiOGRiMDNlYjBjYjRkMzE4YjQ0MDIyMTVhNicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9taXNjLnBocCcsCiAgICAnYzExMjQ0MDAwM2I1NmUyNDNiMTkyYzExZmE5ZDgzNmUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXNxbC5waHAnLAogICAgJzdjZWZkODE2MDdjZDIxYjhiM2ExNTY1NmViNjQ2NWY1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL215c3FsLnBocCcsCiAgICAnYWFmNDM4YjA4MDA4OWM2ZDA2ODY2NzljZDM0YWE3MmUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxpLnBocCcsCiAgICAnZGYwZWY4OTBlOWFmYmY5NWYzOTI0ZmViMWM3YTg5ZjMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxuZE1zLnBocCcsCiAgICAnZGI1OTVmZWU1OTcyODY3ZTQ1YzUzMjcwMTBkNzg3MzUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWxuZFFjLnBocCcsCiAgICAnY2JhYzk1NjgzNmI3MjQ4M2RjZmYxYWMzOWQ1YzBhMGYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbmV0d29yay5waHAnLAogICAgJzZjOGY4OWRmYmRjMTE3ZDc4NzFmNTcyMjY5MzYzZjI1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL29jaTgucGhwJywKICAgICcxNjlhNjY5OTY2YTQ1YzA2YmY1NWVkMDI5MTIyNzI5YicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9vcGNhY2hlLnBocCcsCiAgICAnZGVmNjFiZjRmZWNkNGQ0YmNhNzM1NDkxOWNkNjkzMDInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb3BlbnNzbC5waHAnLAogICAgJzI2YmIwMTA2NDlhNmQzMmQ0MTIwMTgxNDU4YWE2ZWYyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL291dGNvbnRyb2wucGhwJywKICAgICcxMjEyYzIwMWZlNDNjNzQ5MmEwODViMmM3MTUwNWUwZicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wYXNzd29yZC5waHAnLAogICAgJzAwMmViY2I4NDJlMmMwZDViN2Y2N2ZlNjRjYzkzMTU4JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BjbnRsLnBocCcsCiAgICAnODZkZjM4NjEyOTgyZGFkZTcyYzcwODVjZTdlY2E4MWYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGNyZS5waHAnLAogICAgJzFjYWNjM2U2NWY4MmE0NzNmYmQ1NTA3YzdjZTQzODVkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BkZi5waHAnLAogICAgJzFmYzIyZjQ0NWM2OWVhODcwNmU4MmZjZTMwMWMwODMxJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Bnc3FsLnBocCcsCiAgICAnYzcwYjQyNTYxNTg0ZjcxNDRiZmYzOGNkNjNjNGVlZjMnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcG9zaXgucGhwJywKICAgICc5OTIzMjE0NjM5YzMyY2E1MTczZGIwM2ExNzdkM2I2MycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wcy5waHAnLAogICAgJzdlOWMzZjhlYWUyYjViZjQyMjA1YzRmMTI5NWNiN2E3JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BzcGVsbC5waHAnLAogICAgJzkxYWE5MWY2MjQ1YzM0OWMyZTJlODhiZDAwMjVmMTk5JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3JlYWRsaW5lLnBocCcsCiAgICAnZDQzNzczY2FjYjllNWU4ZTg5N2FhMjU1ZTMyMDA3ZDEnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcnBtaW5mby5waHAnLAogICAgJ2YwNTNhMzg0OWU5ZTgzODM3NjJiMzRiOTFkYjAzMjBiJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3JyZC5waHAnLAogICAgJzc3NWI5NjRmNzJmODI3YTFiZjg3YzY1YWI1YjEwODAwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NlbS5waHAnLAogICAgJzgxNjQyOGJkNjljMjlhYjVlMWVkNjIyYWY1ZGNhMGNkJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Nlc3Npb24ucGhwJywKICAgICc1MDkzZTIzM2JlZGJlZmFlZjBkZjI2MmJmYmFiMGE1YycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zaG1vcC5waHAnLAogICAgJzAxMzUyOTIwYjAxNTFmMTdlNjcxMjY2ZTQ0YjUyNTM2JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NpbXBsZXhtbC5waHAnLAogICAgJ2IwODA2MTdiMWQ5NDk2ODNjMmUzN2Y4ZjAxZGMwZTE1JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvY2tldHMucGhwJywKICAgICcyNzA4YWExODJkZGNmZTZjZTI3Yzk2YWNhYWE0MGY2OScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zb2RpdW0ucGhwJywKICAgICdmMWI5NmNiMjYwYTViYWVlYTlhNzI4NWNkYTgyYTFlYycgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zb2xyLnBocCcsCiAgICAnM2ZkODg1Mzc1N2QwZmUzNTU3YzE3OWVmYjgwN2FmZWInID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3BsLnBocCcsCiAgICAnOTMxMmNlOTZhNTFjODQ2OTEzZmNkYTVmMTg2ZDU4ZGQnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3Fsc3J2LnBocCcsCiAgICAnZDNlYjM4M2FkMGI4Yjk2MmIyOWRjNGFmZDI5ZDY3MTUnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3NkZWVwLnBocCcsCiAgICAnNDJhMDliYzQ0OGY0NDFhMGI5ZjkzNjdlYTk3NWMwYmYnID0+ICR2ZW5kb3JEaXIgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3NoMi5waHAnLAogICAgJ2VmNzExMDc3ZDM1NmQxYjMzY2EwYjEwYjY3YjBiZThmJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N0cmVhbS5waHAnLAogICAgJzc2NGIwOWY2ZGYwODFjYmIyODA3Yjk3YzZhY2UzODY2JyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N0cmluZ3MucGhwJywKICAgICdlZjI0MTY3ODc2OWZlZTRhNDRhYWEyODhmM2I3OGFhMScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zd29vbGUucGhwJywKICAgICcwZWZjOGY2Nzc4Y2JhOTMyYjllMmE4OWUyOGRlMjQ1MicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC91b2RiYy5waHAnLAogICAgJ2QzODNkMzI5MDdiOThhZjUzZWU5MjA4YzYyMjA0ZmQwJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VvcHoucGhwJywKICAgICcyZmQyZTQwNjBmN2ZlNzcyNjYwZjAwMmNlMzhmMGI3MScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC91cmwucGhwJywKICAgICc3ODIyNDllMDNkZWViZWFmNTdiOTk5MWZmNTQ5M2FhMCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC92YXIucGhwJywKICAgICczNDQ0NDBjZDFjZDcyMDBmZGI0ZjEyYWYwZDNjNTg3ZicgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC94ZGlmZi5waHAnLAogICAgJzM1OTlmMzY5MjE5YzY1OGE1ZmI2YzRmZTY2ODMyZjYyJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3htbC5waHAnLAogICAgJzdmY2QzMTNkYTlmYWUzMzcwNTFiMDkxYjM0OTJjMjFiJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3htbHJwYy5waHAnLAogICAgJ2Q2NjhjNzRjZmE5MmQ4OTNiNTgyMzU2NzMzZDlhODBlJyA9PiAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3lhbWwucGhwJywKICAgICc0YWYxZGNhNmRiOGM1MjdjNmVlZDI3YmZmODVmZjBlNScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC95YXoucGhwJywKICAgICdmZTQzY2EwNjQ5OWFjMzdiYzJkZWRkODIzYWY3MWViNScgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC96aXAucGhwJywKICAgICczNTY3MzZkYjk4YTY4MzRmMGE4ODZiOGQ1MDliMGVjZCcgPT4gJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC96bGliLnBocCcsCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_namespaces.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX25hbWVzcGFjZXMucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKF9fRElSX18pOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_psr4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKF9fRElSX18pOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCiAgICAnV2ViYXV0aG5cXE1ldGFkYXRhU2VydmljZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL3NyYycpLAogICAgJ1dlYmF1dGhuXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi9zcmMnKSwKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MScpLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJyksCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEN0eXBlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUnKSwKICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzJyksCiAgICAnU2FmZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvbGliJywgJHZlbmRvckRpciAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQnLCAkdmVuZG9yRGlyIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkJyksCiAgICAnUm9iUmljaGFyZHNcXFhNTFNlY0xpYnNcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcm9icmljaGFyZHMveG1sc2VjbGlicy9zcmMnKSwKICAgICdSYW1zZXlcXFV1aWRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcmFtc2V5L3V1aWQvc3JjJyksCiAgICAnUmFtc2V5XFxDb2xsZWN0aW9uXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3JhbXNleS9jb2xsZWN0aW9uL3NyYycpLAogICAgJ1BzclxcTG9nXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3Bzci9sb2cvUHNyL0xvZycpLAogICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1mYWN0b3J5L3NyYycsICR2ZW5kb3JEaXIgLiAnL3Bzci9odHRwLW1lc3NhZ2Uvc3JjJyksCiAgICAnUHNyXFxIdHRwXFxDbGllbnRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcHNyL2h0dHAtY2xpZW50L3NyYycpLAogICAgJ09uZUxvZ2luXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL29uZWxvZ2luL3BocC1zYW1sL3NyYycpLAogICAgJ0xlYWd1ZVxcVXJpXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2xlYWd1ZS91cmkvc3JjJywgJHZlbmRvckRpciAuICcvbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3NyYycpLAogICAgJ0xlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvbGVhZ3VlL29hdXRoMi1jbGllbnQvc3JjJyksCiAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Bzcjcvc3JjJyksCiAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Byb21pc2VzL3NyYycpLAogICAgJ0d1enpsZUh0dHBcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjJyksCiAgICAnRmlyZWJhc2VcXEpXVFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9maXJlYmFzZS9waHAtand0L3NyYycpLAogICAgJ0ZHXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2Zncm9zc2UvcGhwYXNuMS9saWInKSwKICAgICdDb3NlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi1hdXRoL2Nvc2UtbGliL3NyYycpLAogICAgJ0NCT1JcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3BvbWt5LWxhYnMvY2Jvci1waHAvc3JjJyksCiAgICAnQnJpY2tcXE1hdGhcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvYnJpY2svbWF0aC9zcmMnKSwKICAgICdCYXNlNjRVcmxcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3BvbWt5LWxhYnMvYmFzZTY0dXJsL3NyYycpLAogICAgJ0Fzc2VydFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9iZWJlcmxlaS9hc3NlcnQvbGliL0Fzc2VydCcpLAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_real.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3JlYWwucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCmNsYXNzIENvbXBvc2VyQXV0b2xvYWRlckluaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYwp7CiAgICBwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZENsYXNzTG9hZGVyKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyJyA9PT0gJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvYWRlcigpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09IHNlbGY6OiRsb2FkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRsb2FkZXI7CiAgICAgICAgfQoKICAgICAgICByZXF1aXJlIF9fRElSX18gLiAnL3BsYXRmb3JtX2NoZWNrLnBocCc7CgogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgnQ29tcG9zZXJBdXRvbG9hZGVySW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjJywgJ2xvYWRDbGFzc0xvYWRlcicpLCB0cnVlLCB0cnVlKTsKICAgICAgICBzZWxmOjokbG9hZGVyID0gJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoXGRpcm5hbWUoX19ESVJfXykpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGMnLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX3N0YXRpYy5waHAnOwogICAgICAgIGNhbGxfdXNlcl9mdW5jKFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6Z2V0SW5pdGlhbGl6ZXIoJGxvYWRlcikpOwoKICAgICAgICAkbG9hZGVyLT5yZWdpc3Rlcih0cnVlKTsKCiAgICAgICAgJGZpbGVzVG9Mb2FkID0gXENvbXBvc2VyXEF1dG9sb2FkXENvbXBvc2VyU3RhdGljSW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjOjokZmlsZXM7CiAgICAgICAgJHJlcXVpcmVGaWxlID0gXENsb3N1cmU6OmJpbmQoc3RhdGljIGZ1bmN0aW9uICgkZmlsZUlkZW50aWZpZXIsICRmaWxlKSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0pKSB7CiAgICAgICAgICAgICAgICAkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0gPSB0cnVlOwoKICAgICAgICAgICAgICAgIHJlcXVpcmUgJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9LCBudWxsLCBudWxsKTsKICAgICAgICBmb3JlYWNoICgkZmlsZXNUb0xvYWQgYXMgJGZpbGVJZGVudGlmaWVyID0+ICRmaWxlKSB7CiAgICAgICAgICAgICRyZXF1aXJlRmlsZSgkZmlsZUlkZW50aWZpZXIsICRmaWxlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbG9hZGVyOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_static.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3N0YXRpYy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKY2xhc3MgQ29tcG9zZXJTdGF0aWNJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGMKewogICAgcHVibGljIHN0YXRpYyAkZmlsZXMgPSBhcnJheSAoCiAgICAgICAgJ2E0YTExOWE1NmU1MGZiYjI5MzI4MWQ5YTQ4MDA3ZTBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvYm9vdHN0cmFwLnBocCcsCiAgICAgICAgJzZlM2ZhZTI5NjMxZWYyODA2NjBiM2NkYWQwNmYyNWE4JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzL2Z1bmN0aW9uLnBocCcsCiAgICAgICAgJ2E0ZWNhZWFmYjhjZmIwMDlhZDBlMDUyYzkwMzU1ZTk4JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2JlYmVybGVpL2Fzc2VydC9saWIvQXNzZXJ0L2Z1bmN0aW9ucy5waHAnLAogICAgICAgICc3YjExYzRkYzQyYjNiMzAyMzA3M2NiMTRlNTE5NjgzYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy9zcmMvZ2V0YWxsaGVhZGVycy5waHAnLAogICAgICAgICcyM2MxODA0NmY1MmJlZjNlZWEwMzQ2NTdiYWZkYTUwZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICczMjBjZGUyMmY2NmRkNGY1ZDNmZDYyMWQzZTg4Yjk4ZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWN0eXBlL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICczN2EzZGM1MTExZmU4ZjcwN2FiNGMxMzJlZjFkYmM2MicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL2d1enpsZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnZTM5YThiMjNjNDJkNGUxNDUyMjM0ZDc2MmIwMzgzNWEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmFtc2V5L3V1aWQvc3JjL2Z1bmN0aW9ucy5waHAnLAogICAgICAgICc1MWZjZjRlMDZjMDdjYzAwYzkyMGI0NGJjZDkwMGU3YScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZGVwcmVjYXRlZC9hcGMucGhwJywKICAgICAgICAnNDdmNjE5ZDkxOTdiMzZjZjVhYjcwNzM4ZDc3NDNmZTInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvbGliZXZlbnQucGhwJywKICAgICAgICAnZWE2YmI4YTEyZWY5YjY4ZjZhZGE5OTA1OGU1MzA3NjAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvbXNzcWwucGhwJywKICAgICAgICAnOWEyOTA4OWViM2NlNDFhNDQ2NzQ0YzY4YTAwZjExOGMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2RlcHJlY2F0ZWQvc3RhdHMucGhwJywKICAgICAgICAnNzIyNDNlNTUzNmI2M2UyOThhY2I2NDc2ZjAxZjFhZmYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2xpYi9zcGVjaWFsX2Nhc2VzLnBocCcsCiAgICAgICAgJzNmNjQ4ODg5ZTY4N2YzMWM1MmY5NDliYThhOWQwODczJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYXBhY2hlLnBocCcsCiAgICAgICAgJ2VlYjQ1ODFkOTU4NDIxYTQyNDRhYWE0MTY3YzZhNTc1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYXBjdS5waHAnLAogICAgICAgICcwNGNiMGIzYzFkYWM1YjVkZGIyM2MxNGUzZDY2ZGJlOScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2FycmF5LnBocCcsCiAgICAgICAgJzQ1MGIzMzJhNzRhOWEyMWUwNDNjNWU5NTM0ODVhNzkxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvYnppcDIucGhwJywKICAgICAgICAnNmU5Yjc5NTRlY2ZkN2NiYjljYTIzOTMxOWQxYWNkYjYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9jYWxlbmRhci5waHAnLAogICAgICAgICcyYzZkN2U4YmQyZGU5YTI3MmE5ZDRkNDNiMGE0MzA0YScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2NsYXNzb2JqLnBocCcsCiAgICAgICAgJzBiODIzMWMxYWQwODY1NDQ3Yzk4OGE0YzE2YjQwMDFmJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY29tLnBocCcsCiAgICAgICAgJzc2NDNhNzFmZTFjMzI1NjA1OGM4ZmVlMjM0Y2I4NmU1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY3VicmlkLnBocCcsCiAgICAgICAgJzY4ZTEzNjU3MTA1NzU5NDJlZmMxZDU1MDAwMDMyY2VlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvY3VybC5waHAnLAogICAgICAgICcwMmZkMjZiY2E4MDMxMDZjNWI5NDJhNzE5N2MzYWQ4YicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2RhdGV0aW1lLnBocCcsCiAgICAgICAgJ2Y0ODE3ZGNiZDk1NmNkMjIxYjFjMzFmNmZiZDU3NDljJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZGlyLnBocCcsCiAgICAgICAgJzUxYzNmMmQxMGNhNjFhNzBkYmNlYTBlMzhkOGU5MDJkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZWlvLnBocCcsCiAgICAgICAgJzFkMzRmMzQzMjdjYTNlODE1MzU5NjMwMTZlM2JlMmMzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZXJyb3JmdW5jLnBocCcsCiAgICAgICAgJzRmZDBiYTJkMzcxN2IwNDI0ZDQ3NGJlYmZkYWZhMmI0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZXhlYy5waHAnLAogICAgICAgICc5OGY0ZGFlMDU0YmM3ZmIxOWMxM2JlMTQ5MzVjYmRkMycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbGVpbmZvLnBocCcsCiAgICAgICAgJzU1MzBhZTA2M2JhODgzMjNlYWYwYTA3OTA0ZWZkZjg1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZmlsZXN5c3RlbS5waHAnLAogICAgICAgICc2MzNmNGYxMzQ5NzVkNzBlOTdiZGRhZDgzMzQ4ZTkxYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZpbHRlci5waHAnLAogICAgICAgICdmYmQxNjNmYzY4YzVmYWY3M2Q1ZWQ0MDAyZmZkODM2ZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ZwbS5waHAnLAogICAgICAgICcyMWI1MTE5OTlkNjE0MTFmYWIwNjkyZmY4Nzk1YmJlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Z0cC5waHAnLAogICAgICAgICc4NWZiZDczZmM5MjM2NWNkOTA1MjZiMGVhMDNjYWUzYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2Z1bmNoYW5kLnBocCcsCiAgICAgICAgJzUxZGY5YzE0NmUwYjdkY2JkZjM1OGQ4YWJkMjRkYmRjJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZ21wLnBocCcsCiAgICAgICAgJzkzYmI3ZmU2NzhkN2RjZmIxMzIyZjhlMzQ3NWE0OGIwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvZ251cGcucGhwJywKICAgICAgICAnYzE3MWJhOTljZjMxNjM3OWZmNjY0NjgzOTJiZjQ5NTAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9oYXNoLnBocCcsCiAgICAgICAgJzVhYjRhYWQ0YzI4ZTQ2ODIwOWZiZmNjZWIyZTVlNmE1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaWJhc2UucGhwJywKICAgICAgICAnNGQ1NzQwOWM1ZThlNTc2YjBjNjRjMDhkOWQ3MzFjZmInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pYm1EYjIucGhwJywKICAgICAgICAnZWViMjQ2ZDU0MDM5NzJhOWQ2MjEwNmU0YTQ4ODM0OTYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pY29udi5waHAnLAogICAgICAgICdjMjhhMDVmNDk4YzAxYjgxMGE3MTRmNzIxNGI3YThkYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2ltYWdlLnBocCcsCiAgICAgICAgJzgwNjNjZDkyYWNkZjAwZmQ5NzhiNTU5OWViN2NjMTQyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvaW1hcC5waHAnLAogICAgICAgICc4YmQyNmRiZTc2OGU5Yzk1OTllZGFkN2IxOThlNTQ0NicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2luZm8ucGhwJywKICAgICAgICAnMGM1NzdmZTYwM2IwMjlkNGI2NWM4NDM3NmIxNWRiZDUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbmdyZXMtaWkucGhwJywKICAgICAgICAnZDQzNjI5MTBiZGU0M2MwZjk1NmI1MjUyN2VmZmQ3ZDQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9pbm90aWZ5LnBocCcsCiAgICAgICAgJzY5NmJhNDkxOTdkOWI1NWYwNDI4YTEyYmI1YTgxOGUxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvanNvbi5waHAnLAogICAgICAgICc5ODE4YWFhOTljODY0N2M2M2Y4ZWY2MmI3YTM2ODE2MCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL2xkYXAucGhwJywKICAgICAgICAnYmNmNTIzZmYyYTE5NWViMDhlMGZiYjY2OGVkNzg0ZDAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9saWJ4bWwucGhwJywKICAgICAgICAnNjhiZTY4YTlhOGI5NWJiNTZjYWI2MTA5ZmYwM2JjODgnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9semYucGhwJywKICAgICAgICAnYmRjYTgwNGJiMDkwNGVhOWY1M2YzMjhkZmMwYmI4YTUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tYWlscGFyc2UucGhwJywKICAgICAgICAnYjBhM2ZjYWMzZWFmNTU0NDU3OTZkNmFmMjZiODkzNjYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tYnN0cmluZy5waHAnLAogICAgICAgICc5OGRlMTZiOGRiMDNlYjBjYjRkMzE4YjQ0MDIyMTVhNicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL21pc2MucGhwJywKICAgICAgICAnYzExMjQ0MDAwM2I1NmUyNDNiMTkyYzExZmE5ZDgzNmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9tc3FsLnBocCcsCiAgICAgICAgJzdjZWZkODE2MDdjZDIxYjhiM2ExNTY1NmViNjQ2NWY1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvbXlzcWwucGhwJywKICAgICAgICAnYWFmNDM4YjA4MDA4OWM2ZDA2ODY2NzljZDM0YWE3MmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbGkucGhwJywKICAgICAgICAnZGYwZWY4OTBlOWFmYmY5NWYzOTI0ZmViMWM3YTg5ZjMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbG5kTXMucGhwJywKICAgICAgICAnZGI1OTVmZWU1OTcyODY3ZTQ1YzUzMjcwMTBkNzg3MzUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9teXNxbG5kUWMucGhwJywKICAgICAgICAnY2JhYzk1NjgzNmI3MjQ4M2RjZmYxYWMzOWQ1YzBhMGYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9uZXR3b3JrLnBocCcsCiAgICAgICAgJzZjOGY4OWRmYmRjMTE3ZDc4NzFmNTcyMjY5MzYzZjI1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb2NpOC5waHAnLAogICAgICAgICcxNjlhNjY5OTY2YTQ1YzA2YmY1NWVkMDI5MTIyNzI5YicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL29wY2FjaGUucGhwJywKICAgICAgICAnZGVmNjFiZjRmZWNkNGQ0YmNhNzM1NDkxOWNkNjkzMDInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9vcGVuc3NsLnBocCcsCiAgICAgICAgJzI2YmIwMTA2NDlhNmQzMmQ0MTIwMTgxNDU4YWE2ZWYyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvb3V0Y29udHJvbC5waHAnLAogICAgICAgICcxMjEyYzIwMWZlNDNjNzQ5MmEwODViMmM3MTUwNWUwZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Bhc3N3b3JkLnBocCcsCiAgICAgICAgJzAwMmViY2I4NDJlMmMwZDViN2Y2N2ZlNjRjYzkzMTU4JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGNudGwucGhwJywKICAgICAgICAnODZkZjM4NjEyOTgyZGFkZTcyYzcwODVjZTdlY2E4MWYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wY3JlLnBocCcsCiAgICAgICAgJzFjYWNjM2U2NWY4MmE0NzNmYmQ1NTA3YzdjZTQzODVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGRmLnBocCcsCiAgICAgICAgJzFmYzIyZjQ0NWM2OWVhODcwNmU4MmZjZTMwMWMwODMxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcGdzcWwucGhwJywKICAgICAgICAnYzcwYjQyNTYxNTg0ZjcxNDRiZmYzOGNkNjNjNGVlZjMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9wb3NpeC5waHAnLAogICAgICAgICc5OTIzMjE0NjM5YzMyY2E1MTczZGIwM2ExNzdkM2I2MycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3BzLnBocCcsCiAgICAgICAgJzdlOWMzZjhlYWUyYjViZjQyMjA1YzRmMTI5NWNiN2E3JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcHNwZWxsLnBocCcsCiAgICAgICAgJzkxYWE5MWY2MjQ1YzM0OWMyZTJlODhiZDAwMjVmMTk5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcmVhZGxpbmUucGhwJywKICAgICAgICAnZDQzNzczY2FjYjllNWU4ZTg5N2FhMjU1ZTMyMDA3ZDEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9ycG1pbmZvLnBocCcsCiAgICAgICAgJ2YwNTNhMzg0OWU5ZTgzODM3NjJiMzRiOTFkYjAzMjBiJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvcnJkLnBocCcsCiAgICAgICAgJzc3NWI5NjRmNzJmODI3YTFiZjg3YzY1YWI1YjEwODAwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2VtLnBocCcsCiAgICAgICAgJzgxNjQyOGJkNjljMjlhYjVlMWVkNjIyYWY1ZGNhMGNkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2Vzc2lvbi5waHAnLAogICAgICAgICc1MDkzZTIzM2JlZGJlZmFlZjBkZjI2MmJmYmFiMGE1YycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NobW9wLnBocCcsCiAgICAgICAgJzAxMzUyOTIwYjAxNTFmMTdlNjcxMjY2ZTQ0YjUyNTM2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc2ltcGxleG1sLnBocCcsCiAgICAgICAgJ2IwODA2MTdiMWQ5NDk2ODNjMmUzN2Y4ZjAxZGMwZTE1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc29ja2V0cy5waHAnLAogICAgICAgICcyNzA4YWExODJkZGNmZTZjZTI3Yzk2YWNhYWE0MGY2OScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvZGl1bS5waHAnLAogICAgICAgICdmMWI5NmNiMjYwYTViYWVlYTlhNzI4NWNkYTgyYTFlYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3NvbHIucGhwJywKICAgICAgICAnM2ZkODg1Mzc1N2QwZmUzNTU3YzE3OWVmYjgwN2FmZWInID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zcGwucGhwJywKICAgICAgICAnOTMxMmNlOTZhNTFjODQ2OTEzZmNkYTVmMTg2ZDU4ZGQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zcWxzcnYucGhwJywKICAgICAgICAnZDNlYjM4M2FkMGI4Yjk2MmIyOWRjNGFmZDI5ZDY3MTUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zc2RlZXAucGhwJywKICAgICAgICAnNDJhMDliYzQ0OGY0NDFhMGI5ZjkzNjdlYTk3NWMwYmYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2dlbmVyYXRlZC9zc2gyLnBocCcsCiAgICAgICAgJ2VmNzExMDc3ZDM1NmQxYjMzY2EwYjEwYjY3YjBiZThmJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3RyZWFtLnBocCcsCiAgICAgICAgJzc2NGIwOWY2ZGYwODFjYmIyODA3Yjk3YzZhY2UzODY2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvc3RyaW5ncy5waHAnLAogICAgICAgICdlZjI0MTY3ODc2OWZlZTRhNDRhYWEyODhmM2I3OGFhMScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3N3b29sZS5waHAnLAogICAgICAgICcwZWZjOGY2Nzc4Y2JhOTMyYjllMmE4OWUyOGRlMjQ1MicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VvZGJjLnBocCcsCiAgICAgICAgJ2QzODNkMzI5MDdiOThhZjUzZWU5MjA4YzYyMjA0ZmQwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQvdW9wei5waHAnLAogICAgICAgICcyZmQyZTQwNjBmN2ZlNzcyNjYwZjAwMmNlMzhmMGI3MScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3VybC5waHAnLAogICAgICAgICc3ODIyNDllMDNkZWViZWFmNTdiOTk5MWZmNTQ5M2FhMCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3Zhci5waHAnLAogICAgICAgICczNDQ0NDBjZDFjZDcyMDBmZGI0ZjEyYWYwZDNjNTg3ZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3hkaWZmLnBocCcsCiAgICAgICAgJzM1OTlmMzY5MjE5YzY1OGE1ZmI2YzRmZTY2ODMyZjYyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveG1sLnBocCcsCiAgICAgICAgJzdmY2QzMTNkYTlmYWUzMzcwNTFiMDkxYjM0OTJjMjFiJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveG1scnBjLnBocCcsCiAgICAgICAgJ2Q2NjhjNzRjZmE5MmQ4OTNiNTgyMzU2NzMzZDlhODBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQveWFtbC5waHAnLAogICAgICAgICc0YWYxZGNhNmRiOGM1MjdjNmVlZDI3YmZmODVmZjBlNScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3lhei5waHAnLAogICAgICAgICdmZTQzY2EwNjQ5OWFjMzdiYzJkZWRkODIzYWY3MWViNScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3ppcC5waHAnLAogICAgICAgICczNTY3MzZkYjk4YTY4MzRmMGE4ODZiOGQ1MDliMGVjZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvZ2VuZXJhdGVkL3psaWIucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1cnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnV2ViYXV0aG5cXE1ldGFkYXRhU2VydmljZVxcJyA9PiAyNSwKICAgICAgICAgICAgJ1dlYmF1dGhuXFwnID0+IDksCiAgICAgICAgKSwKICAgICAgICAnUycgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gMjYsCiAgICAgICAgICAgICdTYWZlXFwnID0+IDUsCiAgICAgICAgKSwKICAgICAgICAnUicgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdSb2JSaWNoYXJkc1xcWE1MU2VjTGlic1xcJyA9PiAyMywKICAgICAgICAgICAgJ1JhbXNleVxcVXVpZFxcJyA9PiAxMiwKICAgICAgICAgICAgJ1JhbXNleVxcQ29sbGVjdGlvblxcJyA9PiAxOCwKICAgICAgICApLAogICAgICAgICdQJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ1BzclxcTG9nXFwnID0+IDgsCiAgICAgICAgICAgICdQc3JcXEh0dHBcXE1lc3NhZ2VcXCcgPT4gMTcsCiAgICAgICAgICAgICdQc3JcXEh0dHBcXENsaWVudFxcJyA9PiAxNiwKICAgICAgICApLAogICAgICAgICdPJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ09uZUxvZ2luXFwnID0+IDksCiAgICAgICAgKSwKICAgICAgICAnTCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdMZWFndWVcXFVyaVxcJyA9PiAxMSwKICAgICAgICAgICAgJ0xlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCcgPT4gMjEsCiAgICAgICAgKSwKICAgICAgICAnRycgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdHdXp6bGVIdHRwXFxQc3I3XFwnID0+IDE2LAogICAgICAgICAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiAxOSwKICAgICAgICAgICAgJ0d1enpsZUh0dHBcXCcgPT4gMTEsCiAgICAgICAgKSwKICAgICAgICAnRicgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdGaXJlYmFzZVxcSldUXFwnID0+IDEzLAogICAgICAgICAgICAnRkdcXCcgPT4gMywKICAgICAgICApLAogICAgICAgICdDJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ0Nvc2VcXCcgPT4gNSwKICAgICAgICAgICAgJ0NCT1JcXCcgPT4gNSwKICAgICAgICApLAogICAgICAgICdCJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ0JyaWNrXFxNYXRoXFwnID0+IDExLAogICAgICAgICAgICAnQmFzZTY0VXJsXFwnID0+IDEwLAogICAgICAgICksCiAgICAgICAgJ0EnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnQXNzZXJ0XFwnID0+IDcsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1dlYmF1dGhuXFxNZXRhZGF0YVNlcnZpY2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnV2ViYXV0aG5cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC93ZWJhdXRobi1saWIvc3JjJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWN0eXBlJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MnLAogICAgICAgICksCiAgICAgICAgJ1NhZmVcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvbGliJywKICAgICAgICAgICAgMSA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9kZXByZWNhdGVkJywKICAgICAgICAgICAgMiA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9nZW5lcmF0ZWQnLAogICAgICAgICksCiAgICAgICAgJ1JvYlJpY2hhcmRzXFxYTUxTZWNMaWJzXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcm9icmljaGFyZHMveG1sc2VjbGlicy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ1JhbXNleVxcVXVpZFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JhbXNleS91dWlkL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnUmFtc2V5XFxDb2xsZWN0aW9uXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmFtc2V5L2NvbGxlY3Rpb24vc3JjJywKICAgICAgICApLAogICAgICAgICdQc3JcXExvZ1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Bzci9sb2cvUHNyL0xvZycsCiAgICAgICAgKSwKICAgICAgICAnUHNyXFxIdHRwXFxNZXNzYWdlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtZmFjdG9yeS9zcmMnLAogICAgICAgICAgICAxID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMnLAogICAgICAgICksCiAgICAgICAgJ1BzclxcSHR0cFxcQ2xpZW50XFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtY2xpZW50L3NyYycsCiAgICAgICAgKSwKICAgICAgICAnT25lTG9naW5cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmVsb2dpbi9waHAtc2FtbC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0xlYWd1ZVxcVXJpXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvbGVhZ3VlL3VyaS9zcmMnLAogICAgICAgICAgICAxID0+IF9fRElSX18gLiAnLy4uJyAuICcvbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnTGVhZ3VlXFxPQXV0aDJcXENsaWVudFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2xlYWd1ZS9vYXV0aDItY2xpZW50L3NyYycsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHNyNy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0d1enpsZUh0dHBcXFByb21pc2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL3Byb21pc2VzL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnRmlyZWJhc2VcXEpXVFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpcmViYXNlL3BocC1qd3Qvc3JjJywKICAgICAgICApLAogICAgICAgICdGR1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2Zncm9zc2UvcGhwYXNuMS9saWInLAogICAgICAgICksCiAgICAgICAgJ0Nvc2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItYXV0aC9jb3NlLWxpYi9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0NCT1JcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zcG9ta3ktbGFicy9jYm9yLXBocC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0JyaWNrXFxNYXRoXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvYnJpY2svbWF0aC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0Jhc2U2NFVybFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Nwb21reS1sYWJzL2Jhc2U2NHVybC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0Fzc2VydFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2JlYmVybGVpL2Fzc2VydC9saWIvQXNzZXJ0JywKICAgICAgICApLAogICAgKTsKCiAgICBwdWJsaWMgc3RhdGljICRjbGFzc01hcCA9IGFycmF5ICgKICAgICAgICAnQXR0cmlidXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL0F0dHJpYnV0ZS5waHAnLAogICAgICAgICdDVVJMU3RyaW5nRmlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxL1Jlc291cmNlcy9zdHVicy9DVVJMU3RyaW5nRmlsZS5waHAnLAogICAgICAgICdDb21wb3NlclxcSW5zdGFsbGVkVmVyc2lvbnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvSW5zdGFsbGVkVmVyc2lvbnMucGhwJywKICAgICAgICAnUGhwVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvUGhwVG9rZW4ucGhwJywKICAgICAgICAnUmV0dXJuVHlwZVdpbGxDaGFuZ2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9SZXNvdXJjZXMvc3R1YnMvUmV0dXJuVHlwZVdpbGxDaGFuZ2UucGhwJywKICAgICAgICAnU3RyaW5nYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9TdHJpbmdhYmxlLnBocCcsCiAgICAgICAgJ1VuaGFuZGxlZE1hdGNoRXJyb3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVW5oYW5kbGVkTWF0Y2hFcnJvci5waHAnLAogICAgICAgICdWYWx1ZUVycm9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUmVzb3VyY2VzL3N0dWJzL1ZhbHVlRXJyb3IucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbml0aWFsaXplcihDbGFzc0xvYWRlciAkbG9hZGVyKQogICAgewogICAgICAgIHJldHVybiBcQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCRsb2FkZXIpIHsKICAgICAgICAgICAgJGxvYWRlci0+cHJlZml4TGVuZ3Roc1BzcjQgPSBDb21wb3NlclN0YXRpY0luaXRmMjYzNDhkYjFlNjI2NTAwNDQ2MWZjMTk1NzQ1MGNkYzo6JHByZWZpeExlbmd0aHNQc3I0OwogICAgICAgICAgICAkbG9hZGVyLT5wcmVmaXhEaXJzUHNyNCA9IENvbXBvc2VyU3RhdGljSW5pdGYyNjM0OGRiMWU2MjY1MDA0NDYxZmMxOTU3NDUwY2RjOjokcHJlZml4RGlyc1BzcjQ7CiAgICAgICAgICAgICRsb2FkZXItPmNsYXNzTWFwID0gQ29tcG9zZXJTdGF0aWNJbml0ZjI2MzQ4ZGIxZTYyNjUwMDQ0NjFmYzE5NTc0NTBjZGM6OiRjbGFzc01hcDsKCiAgICAgICAgfSwgbnVsbCwgQ2xhc3NMb2FkZXI6OmNsYXNzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/ClassLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgovKioKICogQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBhIFBTUi0wLCBQU1ItNCBhbmQgY2xhc3NtYXAgY2xhc3MgbG9hZGVyLgogKgogKiAgICAgJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKICoKICogICAgIC8vIHJlZ2lzdGVyIGNsYXNzZXMgd2l0aCBuYW1lc3BhY2VzCiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnlcQ29tcG9uZW50JywgX19ESVJfXy4nL2NvbXBvbmVudCcpOwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255JywgICAgICAgICAgIF9fRElSX18uJy9mcmFtZXdvcmsnKTsKICoKICogICAgIC8vIGFjdGl2YXRlIHRoZSBhdXRvbG9hZGVyCiAqICAgICAkbG9hZGVyLT5yZWdpc3RlcigpOwogKgogKiAgICAgLy8gdG8gZW5hYmxlIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIChlZy4gZm9yIFBFQVIgcGFja2FnZXMpCiAqICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKICoKICogSW4gdGhpcyBleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIHVzZSBhIGNsYXNzIGluIHRoZSBTeW1mb255XENvbXBvbmVudAogKiBuYW1lc3BhY2Ugb3Igb25lIG9mIGl0cyBjaGlsZHJlbiAoU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZSBmb3IgaW5zdGFuY2UpLAogKiB0aGUgYXV0b2xvYWRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIHRoZSBjbGFzcyB1bmRlciB0aGUgY29tcG9uZW50LwogKiBkaXJlY3RvcnksIGFuZCBpdCB3aWxsIHRoZW4gZmFsbGJhY2sgdG8gdGhlIGZyYW1ld29yay8gZGlyZWN0b3J5IGlmIG5vdAogKiBmb3VuZCBiZWZvcmUgZ2l2aW5nIHVwLgogKgogKiBUaGlzIGNsYXNzIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIFN5bWZvbnkgVW5pdmVyc2FsQ2xhc3NMb2FkZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqIEBzZWUgICAgaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci0wLwogKiBAc2VlICAgIGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNC8KICovCmNsYXNzIENsYXNzTG9hZGVyCnsKICAgIC8qKiBAdmFyIFxDbG9zdXJlKHN0cmluZyk6dm9pZCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluY2x1ZGVGaWxlOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICR2ZW5kb3JEaXI7CgogICAgLy8gUFNSLTQKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGFycmF5PHN0cmluZywgaW50Pj4KICAgICAqLwogICAgcHJpdmF0ZSAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgbGlzdDxzdHJpbmc+PgogICAgICovCiAgICBwcml2YXRlICRwcmVmaXhEaXJzUHNyNCA9IGFycmF5KCk7CiAgICAvKioKICAgICAqIEB2YXIgbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgJGZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheSgpOwoKICAgIC8vIFBTUi0wCiAgICAvKioKICAgICAqIExpc3Qgb2YgUFNSLTAgcHJlZml4ZXMKICAgICAqCiAgICAgKiBTdHJ1Y3R1cmVkIGFzIGFycmF5KCdGIChmaXJzdCBsZXR0ZXIpJyA9PiBhcnJheSgnRm9vXEJhciAoZnVsbCBwcmVmaXgpJyA9PiBhcnJheSgncGF0aCcsICdwYXRoMicpKSkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgYXJyYXk8c3RyaW5nLCBsaXN0PHN0cmluZz4+PgogICAgICovCiAgICBwcml2YXRlICRwcmVmaXhlc1BzcjAgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3IwID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGJvb2w+CiAgICAgKi8KICAgIHByaXZhdGUgJG1pc3NpbmdDbGFzc2VzID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJpdmF0ZSAkYXBjdVByZWZpeDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBzZWxmPgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkcmVnaXN0ZXJlZExvYWRlcnMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICR2ZW5kb3JEaXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2ZW5kb3JEaXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT52ZW5kb3JEaXIgPSAkdmVuZG9yRGlyOwogICAgICAgIHNlbGY6OmluaXRpYWxpemVJbmNsdWRlQ2xvc3VyZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzKCkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5wcmVmaXhlc1BzcjApKSB7CiAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheSgnYXJyYXlfbWVyZ2UnLCBhcnJheV92YWx1ZXMoJHRoaXMtPnByZWZpeGVzUHNyMCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgbGlzdDxzdHJpbmc+PgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZml4ZXNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByZWZpeERpcnNQc3I0OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlyc1BzcjQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBzdHJpbmc+IEFycmF5IG9mIGNsYXNzbmFtZSA9PiBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzc01hcCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIHN0cmluZz4gJGNsYXNzTWFwIENsYXNzIHRvIGZpbGVuYW1lIG1hcAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ2xhc3NNYXAoYXJyYXkgJGNsYXNzTWFwKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2xhc3NNYXApIHsKICAgICAgICAgICAgJHRoaXMtPmNsYXNzTWFwID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmNsYXNzTWFwLCAkY2xhc3NNYXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jbGFzc01hcCA9ICRjbGFzc01hcDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTAgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gcHJlZml4LCBlaXRoZXIKICAgICAqIGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHRvIHRoZSBvbmVzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4CiAgICAgKiBAcGFyYW0gbGlzdDxzdHJpbmc+fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTAgcm9vdCBkaXJlY3RvcmllcwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICAgICAgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBkaXJlY3RvcmllcwogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkcGF0aHMgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICRwYXRocywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAsCiAgICAgICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZmlyc3QgPSAkcHJlZml4WzBdOwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdKSkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSAkcGF0aHM7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICRwYXRocywKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdLAogICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGxpc3Q8c3RyaW5nPnxzdHJpbmcgJHBhdGhzICAgVGhlIFBTUi00IGJhc2UgZGlyZWN0b3JpZXMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBzcjQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgICRwYXRocyA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAvLyBSZWdpc3RlciBkaXJlY3RvcmllcyBmb3IgdGhlIHJvb3QgbmFtZXNwYWNlLgogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHBhdGhzLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCwKICAgICAgICAgICAgICAgICAgICAkcGF0aHMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSkpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZGlyZWN0b3JpZXMgZm9yIGEgbmV3IG5hbWVzcGFjZS4KICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkcHJlZml4KTsKICAgICAgICAgICAgaWYgKCdcXCcgIT09ICRwcmVmaXhbJGxlbmd0aCAtIDFdKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSBub24tZW1wdHkgUFNSLTQgcHJlZml4IG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskcHJlZml4WzBdXVskcHJlZml4XSA9ICRsZW5ndGg7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9ICRwYXRoczsKICAgICAgICB9IGVsc2VpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgLy8gUHJlcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBBcHBlbmQgZGlyZWN0b3JpZXMgZm9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBuYW1lc3BhY2UuCiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdLAogICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi0wIGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIHByZWZpeCwKICAgICAqIHJlcGxhY2luZyBhbnkgb3RoZXJzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkcHJlZml4IFRoZSBwcmVmaXgKICAgICAqIEBwYXJhbSBsaXN0PHN0cmluZz58c3RyaW5nICRwYXRocyAgVGhlIFBTUi0wIGJhc2UgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJlZml4LCAkcGF0aHMpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskcHJlZml4WzBdXVskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItNCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCBUaGUgcHJlZml4L25hbWVzcGFjZSwgd2l0aCB0cmFpbGluZyAnXFwnCiAgICAgKiBAcGFyYW0gbGlzdDxzdHJpbmc+fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQc3I0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVHVybnMgb24gc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggZm9yIGNsYXNzIGZpbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlSW5jbHVkZVBhdGgoJHVzZUluY2x1ZGVQYXRoKQogICAgewogICAgICAgICR0aGlzLT51c2VJbmNsdWRlUGF0aCA9ICR1c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhdXRvbG9hZGVyIHVzZXMgdGhlIGluY2x1ZGUgcGF0aCB0byBjaGVjawogICAgICogZm9yIGNsYXNzZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm5zIG9mZiBzZWFyY2hpbmcgdGhlIHByZWZpeCBhbmQgZmFsbGJhY2sgZGlyZWN0b3JpZXMgZm9yIGNsYXNzZXMKICAgICAqIHRoYXQgaGF2ZSBub3QgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIG1hcC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY2xhc3NNYXBBdXRob3JpdGF0aXZlCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDbGFzc01hcEF1dGhvcml0YXRpdmUoJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlID0gJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBjbGFzcyBsb29rdXAgZmFpbCBpZiBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgY2xhc3MgbWFwPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGFzc01hcEF1dGhvcml0YXRpdmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlOwogICAgfQoKICAgIC8qKgogICAgICogQVBDdSBwcmVmaXggdG8gdXNlIHRvIGNhY2hlIGZvdW5kL25vdC1mb3VuZCBjbGFzc2VzLCBpZiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhcGN1UHJlZml4CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcGN1UHJlZml4KCRhcGN1UHJlZml4KQogICAgewogICAgICAgICR0aGlzLT5hcGN1UHJlZml4ID0gZnVuY3Rpb25fZXhpc3RzKCdhcGN1X2ZldGNoJykgJiYgZmlsdGVyX3ZhcihpbmlfZ2V0KCdhcGMuZW5hYmxlZCcpLCBGSUxURVJfVkFMSURBVEVfQk9PTEVBTikgPyAkYXBjdVByZWZpeCA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgQVBDdSBwcmVmaXggaW4gdXNlLCBvciBudWxsIGlmIEFQQ3UgY2FjaGluZyBpcyBub3QgZW5hYmxlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcGN1UHJlZml4KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFwY3VQcmVmaXg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgdGhpcyBpbnN0YW5jZSBhcyBhbiBhdXRvbG9hZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgYXV0b2xvYWRlciBvciBub3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCRwcmVwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnbG9hZENsYXNzJyksIHRydWUsICRwcmVwZW5kKTsKCiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT52ZW5kb3JEaXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVycyA9IGFycmF5KCR0aGlzLT52ZW5kb3JEaXIgPT4gJHRoaXMpICsgc2VsZjo6JHJlZ2lzdGVyZWRMb2FkZXJzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVuc2V0KHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyc1skdGhpcy0+dmVuZG9yRGlyXSk7CiAgICAgICAgICAgIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyc1skdGhpcy0+dmVuZG9yRGlyXSA9ICR0aGlzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFVucmVnaXN0ZXJzIHRoaXMgaW5zdGFuY2UgYXMgYW4gYXV0b2xvYWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVucmVnaXN0ZXIoKQogICAgewogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCR0aGlzLCAnbG9hZENsYXNzJykpOwoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnZlbmRvckRpcikgewogICAgICAgICAgICB1bnNldChzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnNbJHRoaXMtPnZlbmRvckRpcl0pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExvYWRzIHRoZSBnaXZlbiBjbGFzcyBvciBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICAgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogICAgICogQHJldHVybiB0cnVlfG51bGwgVHJ1ZSBpZiBsb2FkZWQsIG51bGwgb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQ2xhc3MoJGNsYXNzKQogICAgewogICAgICAgIGlmICgkZmlsZSA9ICR0aGlzLT5maW5kRmlsZSgkY2xhc3MpKSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZSA9IHNlbGY6OiRpbmNsdWRlRmlsZTsKICAgICAgICAgICAgJGluY2x1ZGVGaWxlKCRmaWxlKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGUgY2xhc3MgaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgcGF0aCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmlsZSgkY2xhc3MpCiAgICB7CiAgICAgICAgLy8gY2xhc3MgbWFwIGxvb2t1cAogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZSB8fCBpc3NldCgkdGhpcy0+bWlzc2luZ0NsYXNzZXNbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgJGZpbGUgPSBhcGN1X2ZldGNoKCR0aGlzLT5hcGN1UHJlZml4LiRjbGFzcywgJGhpdCk7CiAgICAgICAgICAgIGlmICgkaGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRmaWxlID0gJHRoaXMtPmZpbmRGaWxlV2l0aEV4dGVuc2lvbigkY2xhc3MsICcucGhwJyk7CgogICAgICAgIC8vIFNlYXJjaCBmb3IgSGFjayBmaWxlcyBpZiB3ZSBhcmUgcnVubmluZyBvbiBISFZNCiAgICAgICAgaWYgKGZhbHNlID09PSAkZmlsZSAmJiBkZWZpbmVkKCdISFZNX1ZFUlNJT04nKSkgewogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLmhoJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgYXBjdV9hZGQoJHRoaXMtPmFwY3VQcmVmaXguJGNsYXNzLCAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICRmaWxlKSB7CiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgJHRoaXMtPm1pc3NpbmdDbGFzc2VzWyRjbGFzc10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmaWxlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgbG9hZGVycyBrZXllZCBieSB0aGVpciBjb3JyZXNwb25kaW5nIHZlbmRvciBkaXJlY3Rvcmllcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgc2VsZj4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkTG9hZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICRjbGFzcwogICAgICogQHBhcmFtICBzdHJpbmcgICAgICAgJGV4dAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAkZXh0KQogICAgewogICAgICAgIC8vIFBTUi00IGxvb2t1cAogICAgICAgICRsb2dpY2FsUGF0aFBzcjQgPSBzdHJ0cigkY2xhc3MsICdcXCcsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gJGV4dDsKCiAgICAgICAgJGZpcnN0ID0gJGNsYXNzWzBdOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJGZpcnN0XSkpIHsKICAgICAgICAgICAgJHN1YlBhdGggPSAkY2xhc3M7CiAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gJGxhc3RQb3MgPSBzdHJycG9zKCRzdWJQYXRoLCAnXFwnKSkgewogICAgICAgICAgICAgICAgJHN1YlBhdGggPSBzdWJzdHIoJHN1YlBhdGgsIDAsICRsYXN0UG9zKTsKICAgICAgICAgICAgICAgICRzZWFyY2ggPSAkc3ViUGF0aCAuICdcXCc7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeERpcnNQc3I0WyRzZWFyY2hdKSkgewogICAgICAgICAgICAgICAgICAgICRwYXRoRW5kID0gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkbGFzdFBvcyArIDEpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskc2VhcmNoXSBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiAkcGF0aEVuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTQgZmFsbGJhY2sgZGlycwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mYWxsYmFja0RpcnNQc3I0IGFzICRkaXIpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3I0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBsb29rdXAKICAgICAgICBpZiAoZmFsc2UgIT09ICRwb3MgPSBzdHJycG9zKCRjbGFzcywgJ1xcJykpIHsKICAgICAgICAgICAgLy8gbmFtZXNwYWNlZCBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgMCwgJHBvcyArIDEpCiAgICAgICAgICAgICAgICAuIHN0cnRyKHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkcG9zICsgMSksICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUEVBUi1saWtlIGNsYXNzIG5hbWUKICAgICAgICAgICAgJGxvZ2ljYWxQYXRoUHNyMCA9IHN0cnRyKCRjbGFzcywgJ18nLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0gYXMgJHByZWZpeCA9PiAkZGlycykgewogICAgICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkY2xhc3MsICRwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRpcnMgYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgaW5jbHVkZSBwYXRocy4KICAgICAgICBpZiAoJHRoaXMtPnVzZUluY2x1ZGVQYXRoICYmICRmaWxlID0gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKCRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbml0aWFsaXplSW5jbHVkZUNsb3N1cmUoKQogICAgewogICAgICAgIGlmIChzZWxmOjokaW5jbHVkZUZpbGUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2NvcGUgaXNvbGF0ZWQgaW5jbHVkZS4KICAgICAgICAgKgogICAgICAgICAqIFByZXZlbnRzIGFjY2VzcyB0byAkdGhpcy9zZWxmIGZyb20gaW5jbHVkZWQgZmlsZXMuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gIHN0cmluZyAkZmlsZQogICAgICAgICAqIEByZXR1cm4gdm9pZAogICAgICAgICAqLwogICAgICAgIHNlbGY6OiRpbmNsdWRlRmlsZSA9IFxDbG9zdXJlOjpiaW5kKHN0YXRpYyBmdW5jdGlvbigkZmlsZSkgewogICAgICAgICAgICBpbmNsdWRlICRmaWxlOwogICAgICAgIH0sIG51bGwsIG51bGwpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiYmViZXJsZWkvYXNzZXJ0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjMuMy40IiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjMuNC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjE5M2Y0NjEzYzdkN2ZiY2VlMmMwNWU0ZGFmZjQwNjFkNDljMDQwZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2JlYmVybGVpL2Fzc2VydC96aXBiYWxsL2YxOTNmNDYxM2M3ZDdmYmNlZTJjMDVlNGRhZmY0MDYxZDQ5YzA0MGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmMTkzZjQ2MTNjN2Q3ZmJjZWUyYzA1ZTRkYWZmNDA2MWQ0OWMwNDBlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1zaW1wbGV4bWwiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIioiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICI+PTYuMC4wIiwKICAgICAgICAgICAgICAgICJ5b2FzdC9waHB1bml0LXBvbHlmaWxscyI6ICJeMC4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIk5lZWRlZCB0byBhbGxvdyBBc3NlcnRpb246OmNvdW50KCksIEFzc2VydGlvbjo6aXNDb3VudGFibGUoKSwgQXNzZXJ0aW9uOjptaW5Db3VudCgpLCBhbmQgQXNzZXJ0aW9uOjptYXhDb3VudCgpIHRvIG9wZXJhdGUgb24gUmVzb3VyY2VCdW5kbGVzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA2LTEwVDE5OjQ3OjA1KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImxpYi9Bc3NlcnQvZnVuY3Rpb25zLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkFzc2VydFxcIjogImxpYi9Bc3NlcnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTItQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZW5qYW1pbiBFYmVybGVpIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAia29udGFrdEBiZWJlcmxlaS5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiTGVhZCBEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlJpY2hhcmQgUXVhZGxpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJycXVhZGxpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJDb2xsYWJvcmF0b3IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGluIGFzc2VydGlvbiBsaWJyYXJ5IGZvciBpbnB1dCB2YWxpZGF0aW9uIGluIGJ1c2luZXNzIG1vZGVscy4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYXNzZXJ0IiwKICAgICAgICAgICAgICAgICJhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgInZhbGlkYXRpb24iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vYmViZXJsZWkvYXNzZXJ0L2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9iZWJlcmxlaS9hc3NlcnQvdHJlZS92My4zLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vYmViZXJsZWkvYXNzZXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJicmljay9tYXRoIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMC45LjMiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjAuOS4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2JyaWNrL21hdGguZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2E1N2QxOGYwMjhmODRmNzc3YjIxNjhjZDE5MTFiMGRlZTIzNDNhZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2JyaWNrL21hdGgvemlwYmFsbC9jYTU3ZDE4ZjAyOGY4NGY3NzdiMjE2OGNkMTkxMWIwZGVlMjM0M2FlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2E1N2QxOGYwMjhmODRmNzc3YjIxNjhjZDE5MTFiMGRlZTIzNDNhZSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4yIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuNS4xNSB8fCBeOC41IHx8IF45LjAiLAogICAgICAgICAgICAgICAgInZpbWVvL3BzYWxtIjogIjQuOS4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTA4LTE1VDIwOjUwOjE4KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkJyaWNrXFxNYXRoXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJBcmJpdHJhcnktcHJlY2lzaW9uIiwKICAgICAgICAgICAgICAgICJCaWdJbnRlZ2VyIiwKICAgICAgICAgICAgICAgICJCaWdSYXRpb25hbCIsCiAgICAgICAgICAgICAgICAiYXJpdGhtZXRpYyIsCiAgICAgICAgICAgICAgICAiYmlnZGVjaW1hbCIsCiAgICAgICAgICAgICAgICAiYmlnbnVtIiwKICAgICAgICAgICAgICAgICJicmljayIsCiAgICAgICAgICAgICAgICAibWF0aCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9icmljay9tYXRoL3RyZWUvMC45LjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0Jlbk1vcmVsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2JyaWNrL21hdGgiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL2JyaWNrL21hdGgiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImZncm9zc2UvcGhwYXNuMSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYyLjUuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi41LjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQyMDYwZWQ0NTM0NDc4OWZiOWYyMWY5ZjE4NjRmYzQ3YjllMzUwN2IiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9mZ3Jvc3NlL1BIUEFTTjEvemlwYmFsbC80MjA2MGVkNDUzNDQ3ODlmYjlmMjFmOWYxODY0ZmM0N2I5ZTM1MDdiIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDIwNjBlZDQ1MzQ0Nzg5ZmI5ZjIxZjlmMTg2NGZjNDdiOWUzNTA3YiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJ+Mi4wIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMCB8fCBeOC4wIHx8IF45LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1iY21hdGgiOiAiQkNtYXRoIGlzIHRoZSBmYWxsYmFjayBleHRlbnNpb24gZm9yIGJpZyBpbnRlZ2VyIGNhbGN1bGF0aW9ucyIsCiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiRm9yIGxvYWRpbmcgT0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIHdlYiBpZiB0aGV5IGhhdmUgbm90IGJlZSBkZWZpbmVkIHN0YXRpY2FsbHkiLAogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIGlzIHRoZSBwcmVmZXJyZWQgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAgICAgInBocHNlY2xpYi9iY21hdGhfY29tcGF0IjogIkJDbWF0aCBwb2x5ZmlsbCBmb3Igc2VydmVycyB3aGVyZSBuZWl0aGVyIEdNUCBub3IgQkNtYXRoIGlzIGF2YWlsYWJsZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0xMi0xOVQxMTowODoyNiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRkdcXCI6ICJsaWIvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRnJpZWRyaWNoIEdyb8OfZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkF1dGhvciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgRnJhbWV3b3JrIHRoYXQgYWxsb3dzIHlvdSB0byBlbmNvZGUgYW5kIGRlY29kZSBhcmJpdHJhcnkgQVNOLjEgc3RydWN0dXJlcyB1c2luZyB0aGUgSVRVLVQgWC42OTAgRW5jb2RpbmcgUnVsZXMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiREVSIiwKICAgICAgICAgICAgICAgICJhc24uMSIsCiAgICAgICAgICAgICAgICAiYXNuMSIsCiAgICAgICAgICAgICAgICAiYmVyIiwKICAgICAgICAgICAgICAgICJiaW5hcnkiLAogICAgICAgICAgICAgICAgImRlY29kaW5nIiwKICAgICAgICAgICAgICAgICJlbmNvZGluZyIsCiAgICAgICAgICAgICAgICAieC41MDkiLAogICAgICAgICAgICAgICAgInguNjkwIiwKICAgICAgICAgICAgICAgICJ4NTA5IiwKICAgICAgICAgICAgICAgICJ4NjkwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3RyZWUvdjIuNS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiYWJhbmRvbmVkIjogdHJ1ZSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9mZ3Jvc3NlL3BocGFzbjEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImZpcmViYXNlL3BocC1qd3QiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Ni4xMC4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI2LjEwLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE0OWRiNmYwYTUwMzNhZWY1MTQzMjk1MzQyZjFjOTU1MjFiMDc1ZmYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9nb29nbGVhcGlzL3BocC1qd3QvemlwYmFsbC9hNDlkYjZmMGE1MDMzYWVmNTE0MzI5NTM0MmYxYzk1NTIxYjA3NWZmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTQ5ZGI2ZjBhNTAzM2FlZjUxNDMyOTUzNDJmMWM5NTUyMWIwNzVmZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjR8fF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5LXBocHVuaXQiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtc29kaXVtIjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMiLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IjogIlN1cHBvcnQgRWREU0EgKEVkMjU1MTkpIHNpZ25hdHVyZXMgd2hlbiBsaWJzb2RpdW0gaXMgbm90IHByZXNlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjMtMTItMDFUMTY6MjY6MzkrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRmlyZWJhc2VcXEpXVFxcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5ldW1hbiBWb25nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibmV1bWFuK3BlYXJAdHdpbGlvLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbmFudCBOYXJheWFuYW4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJhbmFudEBwaHAubmV0IiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHNpbXBsZSBsaWJyYXJ5IHRvIGVuY29kZSBhbmQgZGVjb2RlIEpTT04gV2ViIFRva2VucyAoSldUKSBpbiBQSFAuIFNob3VsZCBjb25mb3JtIHRvIHRoZSBjdXJyZW50IHNwZWMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICAgICAicGhwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvcGhwLWp3dC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9waHAtand0L3RyZWUvdjYuMTAuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9maXJlYmFzZS9waHAtand0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL2d1enpsZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMTIuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNy4xMi4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZWFhODE1OTgwMzFjZjU3YTllMzYyNThjODU0NmRlZmZmYzk5NGNiYSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9ndXp6bGUvemlwYmFsbC9lYWE4MTU5ODAzMWNmNTdhOWUzNjI1OGM4NTQ2ZGVmZmZjOTk0Y2JhIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZWFhODE1OTgwMzFjZjU3YTllMzYyNThjODU0NmRlZmZmYzk5NGNiYSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wcm9taXNlcyI6ICJeMi41IiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL3BzcjciOiAiXjIuMTIiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIjogIl4yLjUgfHwgXjMuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4yNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInByb3ZpZGUiOiB7CiAgICAgICAgICAgICAgICAicHNyL2h0dHAtY2xpZW50LWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAgICAgImd1enpsZS9jbGllbnQtaW50ZWdyYXRpb24tdGVzdHMiOiAiMy4wLjIiLAogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvdGVzdC1zZXJ2ZXIiOiAiXjAuNSIsCiAgICAgICAgICAgICAgICAicGhwLWh0dHAvbWVzc2FnZS1mYWN0b3J5IjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjUyIHx8IF45LjYuMzQiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSB8fCBeMi4wIHx8IF4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIlJlcXVpcmVkIGZvciBDVVJMIGhhbmRsZXIgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAiZXh0LWludGwiOiAiUmVxdWlyZWQgZm9yIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lIChJRE4pIHN1cHBvcnQiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiUmVxdWlyZWQgZm9yIHVzaW5nIHRoZSBMb2cgbWlkZGxld2FyZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNi0xNlQyMjoxMTo0OCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICAgICAgICAgImJpbi1saW5rcyI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKZXJlbXkgTGluZGJsb20iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJqZXJlbWVhbWlhQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qZXJlbWVhbWlhIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ21wb25vcyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNsaWVudCIsCiAgICAgICAgICAgICAgICAiY3VybCIsCiAgICAgICAgICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwIGNsaWVudCIsCiAgICAgICAgICAgICAgICAicHNyLTE4IiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVzdCIsCiAgICAgICAgICAgICAgICAid2ViIHNlcnZpY2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzcuMTIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L2d1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9ndXp6bGVodHRwL2d1enpsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNS4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjUuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDM2MGU5ODJmODdmNWYyNThiZjg3MmQwOTQ2NDc3OTFkYjJmNGM4ZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9wcm9taXNlcy96aXBiYWxsLzQzNjBlOTgyZjg3ZjVmMjU4YmY4NzJkMDk0NjQ3NzkxZGIyZjRjOGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0MzYwZTk4MmY4N2Y1ZjI1OGJmODcyZDA5NDY0Nzc5MWRiMmY0YzhlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMi41IHx8IF44LjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIjogIl4yLjUgfHwgXjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjUyIHx8IF45LjYuMzQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDYtMDJUMTI6MjM6NDMrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICJmb3J3YXJkLWNvbW1hbmQiOiBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQcm9taXNlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ3ZWJtYXN0ZXJAdHViby13b3JsZC5kZSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgcHJvbWlzZXMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJwcm9taXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Byb21pc2VzL3RyZWUvMi41LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL0dyYWhhbUNhbXBiZWxsIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9ndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9ndXp6bGVodHRwL3Byb21pc2VzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3BzcjciLAogICAgICAgICAgICAidmVyc2lvbiI6ICIyLjEyLjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuMTIuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5YjM4MDEyZTdiNTRmNTk0NzA3ZTZkYjUyYzY4NGRjMGE3NGIzYTQzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3BzcjcvemlwYmFsbC85YjM4MDEyZTdiNTRmNTk0NzA3ZTZkYjUyYzY4NGRjMGE3NGIzYTQzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiOWIzODAxMmU3YjU0ZjU5NDcwN2U2ZGI1MmM2ODRkYzBhNzRiM2E0MyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMSB8fCBeMi4wIiwKICAgICAgICAgICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMy4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cyI6ICJeMi41IHx8IF4zLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnktaW1wbGVtZW50YXRpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICAgICAgICAgImh0dHAtaW50ZXJvcC9odHRwLWZhY3RvcnktdGVzdHMiOiAiMS4xLjAiLAogICAgICAgICAgICAgICAgImpzaHR0cC9taW1lLWRiIjogIjEuNTQuMC4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS41MiB8fCBeOS42LjM0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJsYW1pbmFzL2xhbWluYXMtaHR0cGhhbmRsZXJydW5uZXIiOiAiRW1pdCBQU1ItNyByZXNwb25zZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDYtMTZUMjE6NTA6MTErMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICJmb3J3YXJkLWNvbW1hbmQiOiBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQc3I3XFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImhlbGxvQGdqY2FtcGJlbGwuY28udWsiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ21wb25vcyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlvbiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWFyay5zYWdpa2F6YXJAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zYWdpa2F6YXJtYXJrLmh1IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTcgbWVzc2FnZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsc28gcHJvdmlkZXMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiLAogICAgICAgICAgICAgICAgInN0cmVhbSIsCiAgICAgICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgICAgICJ1cmwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L3RyZWUvMi4xMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3QvZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9ndXp6bGVodHRwL3BzcjciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImxlYWd1ZS9vYXV0aDItY2xpZW50IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi45LjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuOS4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC96aXBiYWxsLzI2ZThjNWRhNGYzZDc4Y2VkZTcwMjFlMDliMTMzMGEwZmMwOTNkNWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmU4YzVkYTRmM2Q3OGNlZGU3MDIxZTA5YjEzMzBhMGZjMDkzZDVlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41LjggfHwgXjcuNC41IiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSB8fCA+PTguMC4wIDw4LjYuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zLjUiLAogICAgICAgICAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1wYXJhbGxlbC1saW50IjogIl4xLjQiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjExIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI1LTExLTI1VDIyOjE3OjE3KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkxlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxleCBCaWxiaWUiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BhbGV4YmlsYmllLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cuYWxleGJpbGJpZS5jb20iLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiV29vZHkgR2lsayIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zaGFkb3doYW5kIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJDb250cmlidXRvciIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9BdXRoIDIuMCBDbGllbnQgTGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiIsCiAgICAgICAgICAgICAgICAiU1NPIiwKICAgICAgICAgICAgICAgICJhdXRob3JpemF0aW9uIiwKICAgICAgICAgICAgICAgICJpZGVudGl0eSIsCiAgICAgICAgICAgICAgICAiaWRwIiwKICAgICAgICAgICAgICAgICJvYXV0aCIsCiAgICAgICAgICAgICAgICAib2F1dGgyIiwKICAgICAgICAgICAgICAgICJzaW5nbGUgc2lnbiBvbiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQvdHJlZS8yLjkuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9sZWFndWUvb2F1dGgyLWNsaWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibGVhZ3VlL3VyaSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjYuNy4yIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI2LjcuMi4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQzYjUwODEyZGQ1MWYzZmJmMTc2MzQ0Y2MyOTgxZGIwM2QxMGZlMDYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy90aGVwaHBsZWFndWUvdXJpL3ppcGJhbGwvZDNiNTA4MTJkZDUxZjNmYmYxNzYzNDRjYzI5ODFkYjAzZDEwZmUwNiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQzYjUwODEyZGQ1MWYzZmJmMTc2MzQ0Y2MyOTgxZGIwM2QxMGZlMDYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgImxlYWd1ZS91cmktaW50ZXJmYWNlcyI6ICJeMi4zIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuNCB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJjb25mbGljdCI6IHsKICAgICAgICAgICAgICAgICJsZWFndWUvdXJpLXNjaGVtZXMiOiAiXjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiXnYzLjMuMiIsCiAgICAgICAgICAgICAgICAibnlob2xtL3BzcjciOiAiXjEuNSIsCiAgICAgICAgICAgICAgICAicGhwLWh0dHAvcHNyNy1pbnRlZ3JhdGlvbi10ZXN0cyI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjEuMi4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjEuMC4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4xLjEuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUuMTAiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiXjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWZpbGVpbmZvIjogIk5lZWRlZCB0byBjcmVhdGUgRGF0YSBVUkkgZnJvbSBhIGZpbGVwYXRoIiwKICAgICAgICAgICAgICAgICJleHQtaW50bCI6ICJOZWVkZWQgdG8gaW1wcm92ZSBob3N0IHZhbGlkYXRpb24iLAogICAgICAgICAgICAgICAgImxlYWd1ZS91cmktY29tcG9uZW50cyI6ICJOZWVkZWQgdG8gZWFzaWx5IG1hbmlwdWxhdGUgVVJJIG9iamVjdHMiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiTmVlZGVkIHRvIHVzZSB0aGUgVVJJIGZhY3RvcnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjItMDktMTNUMTk6NTA6NDIrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJMZWFndWVcXFVyaVxcIjogInNyYyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIklnbmFjZSBOeWFtYWdhbmEgQnV0ZXJhIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibnlhbXNwcm9kQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVSSSBtYW5pcHVsYXRpb24gbGlicmFyeSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImRhdGEtdXJpIiwKICAgICAgICAgICAgICAgICJmaWxlLXVyaSIsCiAgICAgICAgICAgICAgICAiZnRwIiwKICAgICAgICAgICAgICAgICJob3N0bmFtZSIsCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAiaHR0cHMiLAogICAgICAgICAgICAgICAgIm1pZGRsZXdhcmUiLAogICAgICAgICAgICAgICAgInBhcnNlX3N0ciIsCiAgICAgICAgICAgICAgICAicGFyc2VfdXJsIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicXVlcnktc3RyaW5nIiwKICAgICAgICAgICAgICAgICJxdWVyeXN0cmluZyIsCiAgICAgICAgICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgICAgICAgICAicmZjMzk4NyIsCiAgICAgICAgICAgICAgICAicmZjNjU3MCIsCiAgICAgICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgICAgICJ1cmktdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInVybCIsCiAgICAgICAgICAgICAgICAid3MiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImRvY3MiOiAiaHR0cHM6Ly91cmkudGhlcGhwbGVhZ3VlLmNvbSIsCiAgICAgICAgICAgICAgICAiZm9ydW0iOiAiaHR0cHM6Ly90aGVwaHBsZWFndWUuc2xhY2suY29tIiwKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmkvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmkvdHJlZS82LjcuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnlhbXNwcm9kIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vbGVhZ3VlL3VyaSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuMy4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIwMGU3ZTI5NDNmNzZkOGNiNTBjN2RmZGMyZjZkZWUzNTZlMTVlMzgzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3ppcGJhbGwvMDBlN2UyOTQzZjc2ZDhjYjUwYzdkZmRjMmY2ZGVlMzU2ZTE1ZTM4MyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAwZTdlMjk0M2Y3NmQ4Y2I1MGM3ZGZkYzJmNmRlZTM1NmUxNWUzODMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIuOTAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyLjE5IiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyLjkiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41LjE1IHx8IF45LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogInRvIHVzZSB0aGUgSUROQSBmZWF0dXJlIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2ludGwiOiAidG8gdXNlIHRoZSBJRE5BIGZlYXR1cmUgdmlhIFN5bWZvbnkgUG9seWZpbGwiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMDYtMjhUMDQ6Mjc6MjErMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJMZWFndWVcXFVyaVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJJZ25hY2UgTnlhbWFnYW5hIEJ1dGVyYSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm55YW1zcHJvZEBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL255YW1zcHJvZC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBVUkkgcmVwcmVzZW50YXRpb24iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgInJmYzM5ODYiLAogICAgICAgICAgICAgICAgInJmYzM5ODciLAogICAgICAgICAgICAgICAgInVyaSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS91cmktaW50ZXJmYWNlcy9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS1pbnRlcmZhY2VzL3RyZWUvMi4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL255YW1zcHJvZCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL2xlYWd1ZS91cmktaW50ZXJmYWNlcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAib25lbG9naW4vcGhwLXNhbWwiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI0LjMuMiIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNC4zLjIuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU0FNTC1Ub29sa2l0cy9waHAtc2FtbC96aXBiYWxsLzI2YjNhNDczNDk0MTVlNWI3YWEzMDBiYTRhYjdmYzMxNmM2NWYxOWUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyNmIzYTQ3MzQ5NDE1ZTViN2FhMzAwYmE0YWI3ZmMzMTZjNjVmMTllIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjMiLAogICAgICAgICAgICAgICAgInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiOiAiXjMuMS41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGRlcGVuZC9wZGVwZW5kIjogIl4yLjguMCIsCiAgICAgICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInBocGxvYy9waHBsb2MiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgfHwgXjcuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9waHBjcGQiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUuOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWN1cmwiOiAiSW5zdGFsbCBjdXJsIGxpYiB0byBiZSBhYmxlIHRvIHVzZSB0aGUgSWRQTWV0YWRhdGFQYXJzZXIgZm9yIHBhcnNpbmcgcmVtb3RlIFhNTHMiLAogICAgICAgICAgICAgICAgImV4dC1kb20iOiAiSW5zdGFsbCB4bWwgbGliIiwKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICJJbnN0YWxsIG9wZW5zc2wgbGliIGluIG9yZGVyIHRvIGhhbmRsZSB3aXRoIHg1MDkgY2VydHMgKHJlcXVpcmUgdG8gc3VwcG9ydCBzaWduIGFuZCBlbmNyeXB0aW9uKSIsCiAgICAgICAgICAgICAgICAiZXh0LXpsaWIiOiAiSW5zdGFsbCB6bGliIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA1LTA3VDIyOjM4OjA0KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIk9uZUxvZ2luXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQSFAgU0FNTCBUb29sa2l0IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkZlZGVyYXRpb24iLAogICAgICAgICAgICAgICAgIlNBTUwyIiwKICAgICAgICAgICAgICAgICJTU08iLAogICAgICAgICAgICAgICAgImlkZW50aXR5IiwKICAgICAgICAgICAgICAgICJzYW1sIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9TQU1MLVRvb2xraXRzL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9TQU1MLVRvb2xraXRzLyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL29uZWxvZ2luL3BocC1zYW1sIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwc3IvaHR0cC1jbGllbnQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4wLjMuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiYjU5MDZlZGMxYzMyNGM5YTA1YWEwODczZDQwMTE3OTQxZTVmYTkwIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGhwLWZpZy9odHRwLWNsaWVudC96aXBiYWxsL2JiNTkwNmVkYzFjMzI0YzlhMDVhYTA4NzNkNDAxMTc5NDFlNWZhOTAiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiYjU5MDZlZGMxYzMyNGM5YTA1YWEwODczZDQwMTE3OTQxZTVmYTkwIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMCB8fCBeOC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAgfHwgXjIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMy0wOS0yM1QxNDoxNzo1MCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxDbGllbnRcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUEhQLUZJRyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgY2xpZW50cyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwLWNsaWVudCIsCiAgICAgICAgICAgICAgICAicHNyIiwKICAgICAgICAgICAgICAgICJwc3ItMTgiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9wc3IvaHR0cC1jbGllbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLWZhY3RvcnkiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4xLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWZhY3RvcnkuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMmI0NzY1ZmRkZmUzYjUwOGFjNjJmODI5ZTg1MmIxNTAxZDNmNmU4YSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvaHR0cC1mYWN0b3J5L3ppcGJhbGwvMmI0NzY1ZmRkZmUzYjUwOGFjNjJmODI5ZTg1MmIxNTAxZDNmNmU4YSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjJiNDc2NWZkZGZlM2I1MDhhYzYyZjgyOWU4NTJiMTUwMWQzZjZlOGEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMSIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIHx8IF4yLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjQtMDQtMTVUMTI6MDY6MTQrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTE3OiBDb21tb24gaW50ZXJmYWNlcyBmb3IgUFNSLTcgSFRUUCBtZXNzYWdlIGZhY3RvcmllcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJmYWN0b3J5IiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0xNyIsCiAgICAgICAgICAgICAgICAicHNyLTciLAogICAgICAgICAgICAgICAgInJlcXVlc3QiLAogICAgICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1mYWN0b3J5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3Bzci9odHRwLWZhY3RvcnkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuMS4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtbWVzc2FnZS96aXBiYWxsL2NiNmNlNDg0NWNlMzRhOGFkOWU2ODExN2MxMGVlOTBhMjk5MTllYmEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjYjZjZTQ4NDVjZTM0YThhZDllNjgxMTdjMTBlZTkwYTI5OTE5ZWJhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIzLTA0LTA0VDA5OjUwOjUyKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4xLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXEh0dHBcXE1lc3NhZ2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUEhQLUZJRyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAiaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJyZXNwb25zZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtbWVzc2FnZS90cmVlLzEuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9wc3IvaHR0cC1tZXNzYWdlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwc3IvbG9nIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuMS40LjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImQ0OTY5NWI5MDljM2I3NjI4YjYyODlkYjU0NzlhMWMyMDQ2MDFmMTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2xvZy96aXBiYWxsL2Q0OTY5NWI5MDljM2I3NjI4YjYyODlkYjU0NzlhMWMyMDQ2MDFmMTEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkNDk2OTViOTA5YzNiNzYyOGI2Mjg5ZGI1NDc5YTFjMjA0NjAxZjExIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0wNS0wM1QxMToyMDoyNyswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMS54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxMb2dcXCI6ICJQc3IvTG9nLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBsb2dnaW5nIGxpYnJhcmllcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9sb2ciLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAibG9nIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci0zIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nL3RyZWUvMS4xLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vcHNyL2xvZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicmFsb3VwaGllL2dldGFsbGhlYWRlcnMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMy4wLjMuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTIwYjYwNWRmZWI5OTY4MDhjMzFiNjQ3NzI5MGE3MTRkMzU2ZTgyMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3ppcGJhbGwvMTIwYjYwNWRmZWI5OTY4MDhjMzFiNjQ3NzI5MGE3MTRkMzU2ZTgyMiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjEyMGI2MDVkZmViOTk2ODA4YzMxYjY0NzcyOTBhNzE0ZDM1NmU4MjIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuNiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjUgfHwgXjYuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOS0wMy0wOFQwODo1NTozNyswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZ2V0YWxsaGVhZGVycy5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJSYWxwaCBLaGF0dGFyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHBvbHlmaWxsIGZvciBnZXRhbGxoZWFkZXJzLiIsCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3RyZWUvZGV2ZWxvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicmFtc2V5L2NvbGxlY3Rpb24iLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24uZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYWQ3NDc1ZDFjOWU3MGIxOTBlY2ZmYzU4ZjJkOTg5NDE2YWYzMzliNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3JhbXNleS9jb2xsZWN0aW9uL3ppcGJhbGwvYWQ3NDc1ZDFjOWU3MGIxOTBlY2ZmYzU4ZjJkOTg5NDE2YWYzMzliNCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImFkNzQ3NWQxYzllNzBiMTkwZWNmZmM1OGYyZDk4OTQxNmFmMzM5YjQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy40IHx8IF44LjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODEiOiAiXjEuMjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJjYXB0YWluaG9vay9wbHVnaW4tY29tcG9zZXIiOiAiXjUuMyIsCiAgICAgICAgICAgICAgICAiZXJnZWJuaXMvY29tcG9zZXItbm9ybWFsaXplIjogIl4yLjI4LjMiLAogICAgICAgICAgICAgICAgImZha2VycGhwL2Zha2VyIjogIl4xLjIxIiwKICAgICAgICAgICAgICAgICJoYW1jcmVzdC9oYW1jcmVzdC1waHAiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAiamFuZ3JlZ29yL3BocHN0YW4tcHJvcGhlY3kiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAibW9ja2VyeS9tb2NrZXJ5IjogIl4xLjUiLAogICAgICAgICAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1jb25zb2xlLWhpZ2hsaWdodGVyIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1wYXJhbGxlbC1saW50IjogIl4xLjMiLAogICAgICAgICAgICAgICAgInBocGNzc3RhbmRhcmRzL3BocGNzdXRpbHMiOiAiXjEuMC4wLXJjMSIsCiAgICAgICAgICAgICAgICAicGhwc3BlYy9wcm9waGVjeS1waHB1bml0IjogIl4yLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vZXh0ZW5zaW9uLWluc3RhbGxlciI6ICJeMS4yIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjEuOSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUiLAogICAgICAgICAgICAgICAgInBzYWxtL3BsdWdpbi1tb2NrZXJ5IjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBzYWxtL3BsdWdpbi1waHB1bml0IjogIl4wLjE4LjQiLAogICAgICAgICAgICAgICAgInJhbXNleS9jb2Rpbmctc3RhbmRhcmQiOiAiXjIuMC4zIiwKICAgICAgICAgICAgICAgICJyYW1zZXkvY29udmVudGlvbmFsLWNvbW1pdHMiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiXjUuNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0xMi0yN1QxOToxMjoyNCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2siOiB7CiAgICAgICAgICAgICAgICAgICAgImZvcmNlLWluc3RhbGwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInJhbXNleS9jb252ZW50aW9uYWwtY29tbWl0cyI6IHsKICAgICAgICAgICAgICAgICAgICAiY29uZmlnRmlsZSI6ICJjb252ZW50aW9uYWwtY29tbWl0cy5qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSYW1zZXlcXENvbGxlY3Rpb25cXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmVuIFJhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJlbkBiZW5yYW1zZXkuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9iZW5yYW1zZXkuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29sbGVjdGlvbnMuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJjb2xsZWN0aW9uIiwKICAgICAgICAgICAgICAgICJoYXNoIiwKICAgICAgICAgICAgICAgICJtYXAiLAogICAgICAgICAgICAgICAgInF1ZXVlIiwKICAgICAgICAgICAgICAgICJzZXQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL3RyZWUvMS4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9yYW1zZXkvY29sbGVjdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vcmFtc2V5L2NvbGxlY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbXNleS91dWlkIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjQuMi4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYW1zZXkvdXVpZC96aXBiYWxsL2ZjOWJiN2ZiNTM4ODY5MWZkNzM3M2NkNDRkY2I0ZDYzYmJjZjI0ZGYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmYzliYjdmYjUzODg2OTFmZDczNzNjZDQ0ZGNiNGQ2M2JiY2YyNGRmIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJicmljay9tYXRoIjogIl4wLjggfHwgXjAuOSIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjIgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAicmFtc2V5L2NvbGxlY3Rpb24iOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSI6ICJeMS44IiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLXBocDgwIjogIl4xLjE0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVwbGFjZSI6IHsKICAgICAgICAgICAgICAgICJyaHVtc2FhL3V1aWQiOiAic2VsZi52ZXJzaW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2svY2FwdGFpbmhvb2siOiAiXjUuMTAiLAogICAgICAgICAgICAgICAgImNhcHRhaW5ob29rL3BsdWdpbi1jb21wb3NlciI6ICJeNS4zIiwKICAgICAgICAgICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogIl4wLjcuMCIsCiAgICAgICAgICAgICAgICAiZG9jdHJpbmUvYW5ub3RhdGlvbnMiOiAiXjEuOCIsCiAgICAgICAgICAgICAgICAiZXJnZWJuaXMvY29tcG9zZXItbm9ybWFsaXplIjogIl4yLjE1IiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAibW9vbnRvYXN0L21hdGgiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbS1saWIiOiAiXjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrIjogIl4yLjIiLAogICAgICAgICAgICAgICAgInBocC1tb2NrL3BocC1tb2NrLW1vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAicGhwLXBhcmFsbGVsLWxpbnQvcGhwLXBhcmFsbGVsLWxpbnQiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwYmVuY2gvcGhwYmVuY2giOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMiIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNSB8fCBeOSIsCiAgICAgICAgICAgICAgICAic2xldm9tYXQvY29kaW5nLXN0YW5kYXJkIjogIl43LjAiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuNSIsCiAgICAgICAgICAgICAgICAidmltZW8vcHNhbG0iOiAiXjQuOSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWJjbWF0aCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBCQ01hdGguIiwKICAgICAgICAgICAgICAgICJleHQtY3R5cGUiOiAiRW5hYmxlcyBmYXN0ZXIgcHJvY2Vzc2luZyBvZiBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdXNpbmcgY3R5cGUgZnVuY3Rpb25zLiIsCiAgICAgICAgICAgICAgICAiZXh0LWdtcCI6ICJFbmFibGVzIGZhc3RlciBtYXRoIHdpdGggYXJiaXRyYXJ5LXByZWNpc2lvbiBpbnRlZ2VycyB1c2luZyBHTVAuIiwKICAgICAgICAgICAgICAgICJleHQtdXVpZCI6ICJFbmFibGVzIHRoZSB1c2Ugb2YgUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGFuZCBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvci4iLAogICAgICAgICAgICAgICAgInBhcmFnb25pZS9yYW5kb20tbGliIjogIlByb3ZpZGVzIFJhbmRvbUxpYiBmb3IgdXNlIHdpdGggdGhlIFJhbmRvbUxpYkFkYXB0ZXIiLAogICAgICAgICAgICAgICAgInJhbXNleS91dWlkLWRvY3RyaW5lIjogIkFsbG93cyB0aGUgdXNlIG9mIFJhbXNleVxcVXVpZFxcVXVpZCBhcyBEb2N0cmluZSBmaWVsZCB0eXBlLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0wOS0yNVQyMzoxMDozOCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiY2FwdGFpbmhvb2siOiB7CiAgICAgICAgICAgICAgICAgICAgImZvcmNlLWluc3RhbGwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1haW4iOiAiNC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9ucy5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJSYW1zZXlcXFV1aWRcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgUEhQIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYW5kIHdvcmtpbmcgd2l0aCB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllcnMgKFVVSURzKS4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZ3VpZCIsCiAgICAgICAgICAgICAgICAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAidXVpZCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9pc3N1ZXMiLAogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQvdHJlZS80LjIuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3JhbXNleS91dWlkIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9yYW1zZXkvdXVpZCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicm9icmljaGFyZHMveG1sc2VjbGlicyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjEuNS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yb2JyaWNoYXJkcy94bWxzZWNsaWJzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yb2JyaWNoYXJkcy94bWxzZWNsaWJzL3ppcGJhbGwvMDMwNjJiZTc4MTc4Y2JiNWU4ZjYwNWNkMjU1ZGMzMmExNDk4MWY5MiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PSA1LjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjYtMDMtMTNUMTA6MzE6NTYrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUm9iUmljaGFyZHNcXFhNTFNlY0xpYnNcXCI6ICJzcmMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgWE1MIFNlY3VyaXR5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yb2JyaWNoYXJkcy94bWxzZWNsaWJzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgInNlY3VyaXR5IiwKICAgICAgICAgICAgICAgICJzaWduYXR1cmUiLAogICAgICAgICAgICAgICAgInhtbCIsCiAgICAgICAgICAgICAgICAieG1sZHNpZyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yb2JyaWNoYXJkcy94bWxzZWNsaWJzL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yb2JyaWNoYXJkcy94bWxzZWNsaWJzL3RyZWUvMy4xLjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vcm9icmljaGFyZHMveG1sc2VjbGlicyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMC40IiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjAuNC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNzc1MmNlOTMxZWMyODVkYTRlZDFmNGM1YWEyN2U0NWUwOTdiZTYxZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL1Nwb21reS1MYWJzL2Jhc2U2NHVybC96aXBiYWxsLzc3NTJjZTkzMWVjMjg1ZGE0ZWQxZjRjNWFhMjdlNDVlMDk3YmU2MWQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4wLjExfF4wLjEyIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjExfF4wLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIwLTExLTAzVDA5OjEwOjI1KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkJhc2U2NFVybFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Jhc2U2NHVybC9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJCYXNlIDY0IFVSTCBTYWZlIEVuY29kaW5nL0RlY29kaW5nIFBIUCBMaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiYmFzZTY0IiwKICAgICAgICAgICAgICAgICJyZmM0NjQ4IiwKICAgICAgICAgICAgICAgICJzYWZlIiwKICAgICAgICAgICAgICAgICJ1cmwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwvdHJlZS92Mi4wLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9zcG9ta3ktbGFicy9iYXNlNjR1cmwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNwb21reS1sYWJzL2Nib3ItcGhwIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMS4wIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjEuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvU3BvbWt5LUxhYnMvY2Jvci1waHAvemlwYmFsbC8yOGUyNzEyY2ZjMGI0OGZhZTY2MWE0OGZmYzY4OTZkN2FiZTgzNjg0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjhlMjcxMmNmYzBiNDhmYWU2NjFhNDhmZmM2ODk2ZDdhYmU4MzY4NCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiYnJpY2svbWF0aCI6ICJeMC44LjE1fF4wLjkuMCIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImVraW5vL3BocHN0YW4tYmFubmVkLWNvZGUiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiaW5mZWN0aW9uL2luZmVjdGlvbiI6ICJeMC4xOHxeMC4yNSIsCiAgICAgICAgICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjEiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tYmViZXJsZWktYXNzZXJ0IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAgICAgICAgICJyZWN0b3IvcmVjdG9yIjogIl4wLjEyIiwKICAgICAgICAgICAgICAgICJyb2F2ZS9zZWN1cml0eS1hZHZpc29yaWVzIjogImRldi1sYXRlc3QiLAogICAgICAgICAgICAgICAgInN5bXBsaWZ5L2Vhc3ktY29kaW5nLXN0YW5kYXJkIjogIl4xMC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtYmNtYXRoIjogIkdNUCBvciBCQ01hdGggZXh0ZW5zaW9ucyB3aWxsIGRyYXN0aWNhbGx5IGltcHJvdmUgdGhlIGxpYnJhcnkgcGVyZm9ybWFuY2UuIEJDTWF0aCBleHRlbnNpb24gbmVlZGVkIHRvIGhhbmRsZSB0aGUgQmlnIEZsb2F0IGFuZCBEZWNpbWFsIEZyYWN0aW9uIFRhZ3MiLAogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMS0xMi0xM1QxMjo0NjoyNiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJDQk9SXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Nib3ItcGhwL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNCT1IgRW5jb2Rlci9EZWNvZGVyIGZvciBQSFAiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiQ29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJlc2VudGF0aW9uIiwKICAgICAgICAgICAgICAgICJSRkM3MDQ5IiwKICAgICAgICAgICAgICAgICJjYm9yIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJpc3N1ZXMiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reS1MYWJzL2Nib3ItcGhwL2lzc3VlcyIsCiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9jYm9yLXBocC90cmVlL3YyLjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3Nwb21reS1sYWJzL2Nib3ItcGhwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYyLjUuNCIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi41LjQuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNjA1Mzg5ZjJhN2U1NjI1ZjI3M2I1Mzk2MGRjNDZhZWFmOWM2MjkxOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzL3ppcGJhbGwvNjA1Mzg5ZjJhN2U1NjI1ZjI3M2I1Mzk2MGRjNDZhZWFmOWM2MjkxOCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjYwNTM4OWYyYTdlNTYyNWYyNzNiNTM5NjBkYzQ2YWVhZjljNjI5MTgiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNC0wOS0yNVQxNDoxMToxMyswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvY29udHJhY3RzIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L2NvbnRyYWN0cyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFpbiI6ICIyLjUtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbi5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGdlbmVyaWMgZnVuY3Rpb24gYW5kIGNvbnZlbnRpb24gdG8gdHJpZ2dlciBkZXByZWNhdGlvbiBub3RpY2VzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzL3RyZWUvdjIuNS40IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9zeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM3LjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuMzcuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsLWN0eXBlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3BvbHlmaWxsLWN0eXBlL3ppcGJhbGwvMTQxMDQ2YThmOTQ3Nzk0OGZmMjg0ZmE2NWJlMjA5NWJhYWZiOTRmMiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInByb3ZpZGUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWN0eXBlIjogIioiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1jdHlwZSI6ICJGb3IgYmVzdCBwZXJmb3JtYW5jZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCI6ICIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJHZXJ0IGRlIFBhZ3RlciIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIkJhY2tFbmRUZWFAZ21haWwuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3ltZm9ueSBwb2x5ZmlsbCBmb3IgY3R5cGUgZnVuY3Rpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAiY3R5cGUiLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsLWN0eXBlL3RyZWUvdjEuMzcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZ1bmRpbmciOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3N5bWZvbnkuY29tL3Nwb25zb3IiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImN1c3RvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFicG90IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL25pY29sYXMtZ3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvcGFja2FnaXN0L3N5bWZvbnkvc3ltZm9ueSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjM3LjAiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuMzcuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsLXBocDgwLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImRmYjU1NzI2YzNhNzZlYTNiNjQ1OWZjZmRhMWVjMmQ4MGE2ODI0MTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3BvbHlmaWxsLXBocDgwL3ppcGJhbGwvZGZiNTU3MjZjM2E3NmVhM2I2NDU5ZmNmZGExZWMyZDgwYTY4MjQxMSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImRmYjU1NzI2YzNhNzZlYTNiNjQ1OWZjZmRhMWVjMmQ4MGE2ODI0MTEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTcuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wNC0xMFQxNjoxOToyMiswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAidGhhbmtzIjogewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvc3R1YnMiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJJb24gQmF6YW4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJpb24uYmF6YW5AZ21haWwuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMCsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAgICAgInBvcnRhYmxlIiwKICAgICAgICAgICAgICAgICJzaGltIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvdHJlZS92MS4zNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvciIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiY3VzdG9tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYWJwb3QiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vbmljb2xhcy1ncmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9wYWNrYWdpc3Qvc3ltZm9ueS9zeW1mb255IiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi9zeW1mb255L3BvbHlmaWxsLXBocDgwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3BvbHlmaWxsLXBocDgxIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMzguMSIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zOC4xLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwODEuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNmJmYjljNzY2Y2FjZmZiYzhlMTE4Y2I4NzIxN2QwOGVkODRlNWNkNyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvemlwYmFsbC82YmZiOWM3NjZjYWNmZmJjOGUxMThjYjg3MjE3ZDA4ZWQ4NGU1Y2Q3IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNmJmYjljNzY2Y2FjZmZiYzhlMTE4Y2I4NzIxN2QwOGVkODRlNWNkNyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDI2LTA1LTI2VDEyOjQ1OjU4KzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MVxcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlcy9zdHVicyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN5bWZvbnkgcG9seWZpbGwgYmFja3BvcnRpbmcgc29tZSBQSFAgOC4xKyBmZWF0dXJlcyB0byBsb3dlciBQSFAgdmVyc2lvbnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXRpYmlsaXR5IiwKICAgICAgICAgICAgICAgICJwb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAicG9ydGFibGUiLAogICAgICAgICAgICAgICAgInNoaW0iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS90cmVlL3YxLjM4LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFzLWdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3N5bWZvbnkvcG9seWZpbGwtcGhwODEiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcHJvY2VzcyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInY1LjQuNTEiLAogICAgICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjUuNC41MS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3Byb2Nlc3MuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvcHJvY2Vzcy96aXBiYWxsLzQ2N2JmYzU2ZjE4ZjVlZjZkNWNjYjA5MzI0ZDdlOTg4YzFjMGE5OGYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0NjdiZmM1NmYxOGY1ZWY2ZDVjY2IwOTMyNGQ3ZTk4OGMxYzBhOThmIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIuNSIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4xNiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyNi0wMS0yNlQxNTo1MzozNyswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImV4Y2x1ZGUtZnJvbS1jbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZhYmllbiBQb3RlbmNpZXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJmYWJpZW5Ac3ltZm9ueS5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFeGVjdXRlcyBjb21tYW5kcyBpbiBzdWItcHJvY2Vzc2VzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcHJvY2Vzcy90cmVlL3Y1LjQuNTEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9zcG9uc29yIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJjdXN0b20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZhYnBvdCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFzLWdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL3BhY2thZ2lzdC9zeW1mb255L3N5bWZvbnkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiaW5zdGFsbC1wYXRoIjogIi4uL3N5bWZvbnkvcHJvY2VzcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAidGhlY29kaW5nbWFjaGluZS9zYWZlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4zIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVjb2RpbmdtYWNoaW5lL3NhZmUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3RoZWNvZGluZ21hY2hpbmUvc2FmZS96aXBiYWxsL2E4YWIwODc2MzA1YTRjZGFlZjMxYjIzNTBmY2I5ODExYjU2MDhkYmMiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhOGFiMDg3NjMwNWE0Y2RhZWYzMWIyMzUwZmNiOTgxMWI1NjA4ZGJjIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIiLAogICAgICAgICAgICAgICAgInNxdWl6bGFicy9waHBfY29kZXNuaWZmZXIiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAidGhlY29kaW5nbWFjaGluZS9waHBzdGFuLXN0cmljdC1ydWxlcyI6ICJeMC4xMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMC0xMC0yOFQxNzo1MTozNCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjAuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvYXBjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvbGliZXZlbnQucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZC9tc3NxbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkL3N0YXRzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImxpYi9zcGVjaWFsX2Nhc2VzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9hcGFjaGUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2FwY3UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2FycmF5LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9iemlwMi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY2FsZW5kYXIucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2NsYXNzb2JqLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9jb20ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2N1YnJpZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvY3VybC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZGF0ZXRpbWUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2Rpci5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZWlvLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9lcnJvcmZ1bmMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2V4ZWMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZpbGVpbmZvLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9maWxlc3lzdGVtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9maWx0ZXIucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ZwbS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZnRwLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9mdW5jaGFuZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvZ21wLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9nbnVwZy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaGFzaC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaWJhc2UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2libURiMi5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvaWNvbnYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2ltYWdlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pbWFwLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pbmZvLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9pbmdyZXMtaWkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2lub3RpZnkucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2pzb24ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2xkYXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL2xpYnhtbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbHpmLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9tYWlscGFyc2UucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL21ic3RyaW5nLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9taXNjLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9tc3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbXlzcWxpLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbG5kTXMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRRYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvbmV0d29yay5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvb2NpOC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvb3BjYWNoZS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvb3BlbnNzbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvb3V0Y29udHJvbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcGFzc3dvcmQucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BjbnRsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wY3JlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wZGYucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3Bnc3FsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9wb3NpeC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcHMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3BzcGVsbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvcmVhZGxpbmUucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3JwbWluZm8ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3JyZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc2VtLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zZXNzaW9uLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zaG1vcC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc2ltcGxleG1sLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zb2NrZXRzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zb2RpdW0ucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NvbHIucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NwbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3Fsc3J2LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC9zc2RlZXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3NzaDIucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3N0cmVhbS5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3RyaW5ncy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvc3dvb2xlLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC91b2RiYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvdW9wei5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvdXJsLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC92YXIucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3hkaWZmLnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC94bWwucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3htbHJwYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveWFtbC5waHAiLAogICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQveWF6LnBocCIsCiAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZC96aXAucGhwIiwKICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkL3psaWIucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiU2FmZVxcIjogWwogICAgICAgICAgICAgICAgICAgICAgICAibGliLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvIgogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQSFAgY29yZSBmdW5jdGlvbnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIGluc3RlYWQgb2YgcmV0dXJuaW5nIEZBTFNFIG9uIGVycm9yIiwKICAgICAgICAgICAgInN1cHBvcnQiOiB7CiAgICAgICAgICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aGVjb2RpbmdtYWNoaW5lL3NhZmUvaXNzdWVzIiwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZWNvZGluZ21hY2hpbmUvc2FmZS90cmVlL3YxLjMuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi90aGVjb2RpbmdtYWNoaW5lL3NhZmUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi1hdXRoL2Nvc2UtbGliIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjMuMy4xMiIsCiAgICAgICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMy4zLjEyLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UtbGliLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImVmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItYXV0aC9jb3NlLWxpYi96aXBiYWxsL2VmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZmE2ZWMyYmE0ZTg0MGJjMTMxNmE0OTM5NzNjOTkxNjAyOGFmZWViIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMjEtMTItMDRUMTI6MTM6MzUrMDA6MDAiLAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiQ29zZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC9jb3NlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNCT1IgT2JqZWN0IFNpZ25pbmcgYW5kIEVuY3J5cHRpb24gKENPU0UpIEZvciBQSFAiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkNPU0UiLAogICAgICAgICAgICAgICAgIlJGQzgxNTIiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJzdXBwb3J0IjogewogICAgICAgICAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvY29zZS1saWIvdHJlZS92My4zLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpbnN0YWxsLXBhdGgiOiAiLi4vd2ViLWF1dGgvY29zZS1saWIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4zLjEyIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjMuMTIuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLWF1dGgvd2ViYXV0aG4tbWV0YWRhdGEtc2VydmljZS96aXBiYWxsL2VmNDBkMmI3YjY4YzQ5NjQyNDdkMTNmYWI1MmUyZmE4ZGJkNjUyNDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlZjQwZDJiN2I2OGM0OTY0MjQ3ZDEzZmFiNTJlMmZhOGRiZDY1MjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAibGVhZ3VlL3VyaSI6ICJeNi4wIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjIiLAogICAgICAgICAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJNYW5kYXRvcnkgZm9yIGZldGNoaW5nIE1ldGFkYXRhIFN0YXRlbWVudCBmcm9tIGRpc3RhbnQgc291cmNlcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIjogIk1hbmRhdG9yeSBmb3IgZmV0Y2hpbmcgTWV0YWRhdGEgU3RhdGVtZW50IGZyb20gZGlzdGFudCBzb3VyY2VzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGltZSI6ICIyMDIxLTExLTIxVDExOjE0OjMxKzAwOjAwIiwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIldlYmF1dGhuXFxNZXRhZGF0YVNlcnZpY2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJNZXRhZGF0YSBTZXJ2aWNlIGZvciBGSURPMi9XZWJhdXRobiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiRklETzIiLAogICAgICAgICAgICAgICAgImZpZG8iLAogICAgICAgICAgICAgICAgIndlYmF1dGhuIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLW1ldGFkYXRhLXNlcnZpY2UvdHJlZS92My4zLjEyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhYmFuZG9uZWQiOiAid2ViLWF1dGgvd2ViYXV0aG4tbGliIiwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItYXV0aC93ZWJhdXRobi1saWIiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2My4zLjEyIiwKICAgICAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIzLjMuMTIuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgvd2ViYXV0aG4tbGliLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjVlZjliMjFjOGU5ZjhhODE3ZTUyNGFjOTMyOTBkMDhhOWYwNjViMzMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItYXV0aC93ZWJhdXRobi1saWIvemlwYmFsbC81ZWY5YjIxYzhlOWY4YTgxN2U1MjRhYzkzMjkwZDA4YTlmMDY1YjMzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiYmViZXJsZWkvYXNzZXJ0IjogIl4zLjIiLAogICAgICAgICAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1tYnN0cmluZyI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtb3BlbnNzbCI6ICIqIiwKICAgICAgICAgICAgICAgICJmZ3Jvc3NlL3BocGFzbjEiOiAiXjIuMSIsCiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4yIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicmFtc2V5L3V1aWQiOiAiXjMuOHxeNC4wIiwKICAgICAgICAgICAgICAgICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAic3BvbWt5LWxhYnMvY2Jvci1waHAiOiAiXjEuMHxeMi4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3Byb2Nlc3MiOiAiXjMuMHxeNC4wfF41LjAiLAogICAgICAgICAgICAgICAgInRoZWNvZGluZ21hY2hpbmUvc2FmZSI6ICJeMS4xIiwKICAgICAgICAgICAgICAgICJ3ZWItYXV0aC9jb3NlLWxpYiI6ICJzZWxmLnZlcnNpb24iLAogICAgICAgICAgICAgICAgIndlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UiOiAic2VsZi52ZXJzaW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJwc3IvbG9nLWltcGxlbWVudGF0aW9uIjogIlJlY29tbWVuZGVkIHRvIHJlY2VpdmUgbG9ncyBmcm9tIHRoZSBsaWJyYXJ5IiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LWtleS1tZ210IjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lY2RzYSI6ICJSZWNvbW1lbmRlZCBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lZGRzYSI6ICJSZWNvbW1lbmRlZCBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1yc2EiOiAiTWFuZGF0b3J5IGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRpbWUiOiAiMjAyMi0wMi0xOFQwNzoxMzo0NCswMDowMCIsCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJXZWJhdXRoblxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1saWJyYXJ5L2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZJRE8yL1dlYmF1dGhuIFN1cHBvcnQgRm9yIFBIUCIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiRklETzIiLAogICAgICAgICAgICAgICAgImZpZG8iLAogICAgICAgICAgICAgICAgIndlYmF1dGhuIgogICAgICAgICAgICBdLAogICAgICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL3dlYmF1dGhuLWxpYi90cmVlL3YzLjMuMTIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImluc3RhbGwtcGF0aCI6ICIuLi93ZWItYXV0aC93ZWJhdXRobi1saWIiCiAgICAgICAgfQogICAgXSwKICAgICJkZXYiOiBmYWxzZSwKICAgICJkZXYtcGFja2FnZS1uYW1lcyI6IFtdCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgcmV0dXJuIGFycmF5KAogICAgJ3Jvb3QnID0+IGFycmF5KAogICAgICAgICduYW1lJyA9PiAnbWFzdGVyMzM5NS9tYXMtYXV0aGh1YicsCiAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnZGV2LW1haW4nLAogICAgICAgICd2ZXJzaW9uJyA9PiAnZGV2LW1haW4nLAogICAgICAgICdyZWZlcmVuY2UnID0+ICcyNmZlYzQ5MDUxMTFjNmQ2MjUxMGExMGE3OTdiNjEzMDY0YWJiZGI0JywKICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uLy4uLycsCiAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgJ2RldicgPT4gZmFsc2UsCiAgICApLAogICAgJ3ZlcnNpb25zJyA9PiBhcnJheSgKICAgICAgICAnYmViZXJsZWkvYXNzZXJ0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMy40JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjMuNC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2YxOTNmNDYxM2M3ZDdmYmNlZTJjMDVlNGRhZmY0MDYxZDQ5YzA0MGUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9iZWJlcmxlaS9hc3NlcnQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnYnJpY2svbWF0aCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzAuOS4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcwLjkuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2NhNTdkMThmMDI4Zjg0Zjc3N2IyMTY4Y2QxOTExYjBkZWUyMzQzYWUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9icmljay9tYXRoJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2Zncm9zc2UvcGhwYXNuMScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjUuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi41LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc0MjA2MGVkNDUzNDQ3ODlmYjlmMjFmOWYxODY0ZmM0N2I5ZTM1MDdiJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vZmdyb3NzZS9waHBhc24xJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2ZpcmViYXNlL3BocC1qd3QnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2Ni4xMC4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc2LjEwLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdhNDlkYjZmMGE1MDMzYWVmNTE0MzI5NTM0MmYxYzk1NTIxYjA3NWZmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vZmlyZWJhc2UvcGhwLWp3dCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdndXp6bGVodHRwL2d1enpsZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzcuMTIuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNy4xMi4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZWFhODE1OTgwMzFjZjU3YTllMzYyNThjODU0NmRlZmZmYzk5NGNiYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2d1enpsZWh0dHAvZ3V6emxlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2d1enpsZWh0dHAvcHJvbWlzZXMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcyLjUuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi41LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc0MzYwZTk4MmY4N2Y1ZjI1OGJmODcyZDA5NDY0Nzc5MWRiMmY0YzhlJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vZ3V6emxlaHR0cC9wcm9taXNlcycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdndXp6bGVodHRwL3BzcjcnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcyLjEyLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMTIuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzliMzgwMTJlN2I1NGY1OTQ3MDdlNmRiNTJjNjg0ZGMwYTc0YjNhNDMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9ndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbGVhZ3VlL29hdXRoMi1jbGllbnQnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcyLjkuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi45LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcyNmU4YzVkYTRmM2Q3OGNlZGU3MDIxZTA5YjEzMzBhMGZjMDkzZDVlJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vbGVhZ3VlL29hdXRoMi1jbGllbnQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbGVhZ3VlL3VyaScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzYuNy4yJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc2LjcuMi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2QzYjUwODEyZGQ1MWYzZmJmMTc2MzQ0Y2MyOTgxZGIwM2QxMGZlMDYnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9sZWFndWUvdXJpJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2xlYWd1ZS91cmktaW50ZXJmYWNlcycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuMy4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjMuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzAwZTdlMjk0M2Y3NmQ4Y2I1MGM3ZGZkYzJmNmRlZTM1NmUxNWUzODMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9sZWFndWUvdXJpLWludGVyZmFjZXMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbWFzdGVyMzM5NS9tYXMtYXV0aGh1YicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ2Rldi1tYWluJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICdkZXYtbWFpbicsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcyNmZlYzQ5MDUxMTFjNmQ2MjUxMGExMGE3OTdiNjEzMDY0YWJiZGI0JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vLi4vJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ29uZWxvZ2luL3BocC1zYW1sJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNC4zLjInLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMy4yLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMjZiM2E0NzM0OTQxNWU1YjdhYTMwMGJhNGFiN2ZjMzE2YzY1ZjE5ZScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL29uZWxvZ2luL3BocC1zYW1sJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLWNsaWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMC4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjAuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2JiNTkwNmVkYzFjMzI0YzlhMDVhYTA4NzNkNDAxMTc5NDFlNWZhOTAnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9wc3IvaHR0cC1jbGllbnQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncHNyL2h0dHAtY2xpZW50LWltcGxlbWVudGF0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdwcm92aWRlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcxLjAnLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLWZhY3RvcnknID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcyYjQ3NjVmZGRmZTNiNTA4YWM2MmY4MjllODUyYjE1MDFkM2Y2ZThhJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcHNyL2h0dHAtZmFjdG9yeScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdwc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdwcm92aWRlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcxLjAnLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLW1lc3NhZ2UnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnY2I2Y2U0ODQ1Y2UzNGE4YWQ5ZTY4MTE3YzEwZWU5MGEyOTkxOWViYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3Bzci9odHRwLW1lc3NhZ2UnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncHNyL2h0dHAtbWVzc2FnZS1pbXBsZW1lbnRhdGlvbicgPT4gYXJyYXkoCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICAgICAncHJvdmlkZWQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgMCA9PiAnMS4wJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgICdwc3IvbG9nJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZDQ5Njk1YjkwOWMzYjc2MjhiNjI4OWRiNTQ3OWExYzIwNDYwMWYxMScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3Bzci9sb2cnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFsb3VwaGllL2dldGFsbGhlYWRlcnMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjAuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4wLjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcxMjBiNjA1ZGZlYjk5NjgwOGMzMWI2NDc3MjkwYTcxNGQzNTZlODIyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFtc2V5L2NvbGxlY3Rpb24nID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjMuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4zLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdhZDc0NzVkMWM5ZTcwYjE5MGVjZmZjNThmMmQ5ODk0MTZhZjMzOWI0JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFtc2V5L2NvbGxlY3Rpb24nLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmFtc2V5L3V1aWQnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc0LjIuMycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNC4yLjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmYzliYjdmYjUzODg2OTFmZDczNzNjZDQ0ZGNiNGQ2M2JiY2YyNGRmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmFtc2V5L3V1aWQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmh1bXNhYS91dWlkJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdyZXBsYWNlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICc0LjIuMycsCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICAncm9icmljaGFyZHMveG1sc2VjbGlicycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzMuMS41JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjEuNS4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzAzMDYyYmU3ODE3OGNiYjVlOGY2MDVjZDI1NWRjMzJhMTQ5ODFmOTInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yb2JyaWNoYXJkcy94bWxzZWNsaWJzJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Nwb21reS1sYWJzL2Jhc2U2NHVybCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjAuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi4wLjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc3NzUyY2U5MzFlYzI4NWRhNGVkMWY0YzVhYTI3ZTQ1ZTA5N2JlNjFkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3BvbWt5LWxhYnMvYmFzZTY0dXJsJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Nwb21reS1sYWJzL2Nib3ItcGhwJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjIuMS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzI4ZTI3MTJjZmMwYjQ4ZmFlNjYxYTQ4ZmZjNjg5NmQ3YWJlODM2ODQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zcG9ta3ktbGFicy9jYm9yLXBocCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjUuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi41LjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc2MDUzODlmMmE3ZTU2MjVmMjczYjUzOTYwZGM0NmFlYWY5YzYyOTE4JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjM3LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzcuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzE0MTA0NmE4Zjk0Nzc5NDhmZjI4NGZhNjViZTIwOTViYWFmYjk0ZjInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLWN0eXBlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvcG9seWZpbGwtcGhwODAnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zNy4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjM3LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdkZmI1NTcyNmMzYTc2ZWEzYjY0NTlmY2ZkYTFlYzJkODBhNjgyNDExJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L3BvbHlmaWxsLXBocDgxJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuMzguMScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4zOC4xLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNmJmYjljNzY2Y2FjZmZiYzhlMTE4Y2I4NzIxN2QwOGVkODRlNWNkNycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvcG9seWZpbGwtcGhwODEnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wcm9jZXNzJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjUuNC41MScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNS40LjUxLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNDY3YmZjNTZmMThmNWVmNmQ1Y2NiMDkzMjRkN2U5ODhjMWMwYTk4ZicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvcHJvY2VzcycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd0aGVjb2RpbmdtYWNoaW5lL3NhZmUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMy4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYThhYjA4NzYzMDVhNGNkYWVmMzFiMjM1MGZjYjk4MTFiNTYwOGRiYycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3RoZWNvZGluZ21hY2hpbmUvc2FmZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd3ZWItYXV0aC9jb3NlLWxpYicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjMuMTInLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMy4xMi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2VmYTZlYzJiYTRlODQwYmMxMzE2YTQ5Mzk3M2M5OTE2MDI4YWZlZWInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi93ZWItYXV0aC9jb3NlLWxpYicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICd3ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMy4xMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4zLjEyLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZWY0MGQyYjdiNjhjNDk2NDI0N2QxM2ZhYjUyZTJmYThkYmQ2NTI0NicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3dlYi1hdXRoL21ldGFkYXRhLXNlcnZpY2UnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnd2ViLWF1dGgvd2ViYXV0aG4tbGliJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMy4xMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4zLjEyLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNWVmOWIyMWM4ZTlmOGE4MTdlNTI0YWM5MzI5MGQwOGE5ZjA2NWIzMycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3dlYi1hdXRoL3dlYmF1dGhuLWxpYicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgKSwKKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/InstalledVersions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXI7Cgp1c2UgQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXI7CnVzZSBDb21wb3NlclxTZW12ZXJcVmVyc2lvblBhcnNlcjsKCi8qKgogKiBUaGlzIGNsYXNzIGlzIGNvcGllZCBpbiBldmVyeSBDb21wb3NlciBpbnN0YWxsZWQgcHJvamVjdCBhbmQgYXZhaWxhYmxlIHRvIGFsbAogKgogKiBTZWUgYWxzbyBodHRwczovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDctcnVudGltZS5tZCNpbnN0YWxsZWQtdmVyc2lvbnMKICoKICogVG8gcmVxdWlyZSBpdHMgcHJlc2VuY2UsIHlvdSBjYW4gcmVxdWlyZSBgY29tcG9zZXItcnVudGltZS1hcGkgXjIuMGAKICoKICogQGZpbmFsCiAqLwpjbGFzcyBJbnN0YWxsZWRWZXJzaW9ucwp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwgaWYgc2V0IChieSByZWZsZWN0aW9uIGJ5IENvbXBvc2VyKSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBwYXRoIHdoZXJlIHRoaXMgY2xhc3MgaXMgYmVpbmcgY29waWVkIHRvCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNlbGZEaXIgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZFtdfG51bGwKICAgICAqIEBwc2FsbS12YXIgYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn18YXJyYXl7fXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbnN0YWxsZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluc3RhbGxlZElzTG9jYWxEaXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2x8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkY2FuR2V0VmVuZG9yczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXlbXQogICAgICogQHBzYWxtLXZhciBhcnJheTxzdHJpbmcsIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59PgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFsbGVkQnlWZW5kb3IgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2hpY2ggYXJlIHByZXNlbnQsIGVpdGhlciBieSBiZWluZyBpbnN0YWxsZWQsIHJlcGxhY2VkIG9yIHByb3ZpZGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICogQHBzYWxtLXJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YWxsZWRQYWNrYWdlcygpCiAgICB7CiAgICAgICAgJHBhY2thZ2VzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgICRwYWNrYWdlc1tdID0gYXJyYXlfa2V5cygkaW5zdGFsbGVkWyd2ZXJzaW9ucyddKTsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBcY291bnQoJHBhY2thZ2VzKSkgewogICAgICAgICAgICByZXR1cm4gJHBhY2thZ2VzWzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoYXJyYXlfZmxpcChcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHBhY2thZ2VzKSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2l0aCBhIHNwZWNpZmljIHR5cGUgZS5nLiAnbGlicmFyeScKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICR0eXBlCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbGxlZFBhY2thZ2VzQnlUeXBlKCR0eXBlKQogICAgewogICAgICAgICRwYWNrYWdlc0J5VHlwZSA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGluc3RhbGxlZFsndmVyc2lvbnMnXSBhcyAkbmFtZSA9PiAkcGFja2FnZSkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRwYWNrYWdlWyd0eXBlJ10pICYmICRwYWNrYWdlWyd0eXBlJ10gPT09ICR0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhY2thZ2VzQnlUeXBlW10gPSAkbmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYWNrYWdlc0J5VHlwZTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgICoKICAgICAqIFRoaXMgYWxzbyByZXR1cm5zIHRydWUgaWYgdGhlIHBhY2thZ2UgbmFtZSBpcyBwcm92aWRlZCBvciByZXBsYWNlZCBieSBhbm90aGVyIHBhY2thZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgYm9vbCAgICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luc3RhbGxlZCgkcGFja2FnZU5hbWUsICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzID0gdHJ1ZSkKICAgIHsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVEZXZSZXF1aXJlbWVudHMgfHwgIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10pIHx8ICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10gPT09IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGFja2FnZSBzYXRpc2ZpZXMgYSB2ZXJzaW9uIGNvbnN0cmFpbnQKICAgICAqCiAgICAgKiBlLmcuIElmIHlvdSB3YW50IHRvIGtub3cgd2hldGhlciB2ZXJzaW9uIDIuMysgb2YgcGFja2FnZSBmb28vYmFyIGlzIGluc3RhbGxlZCwgeW91IHdvdWxkIGNhbGw6CiAgICAgKgogICAgICogICBDb21wb3NlclxJbnN0YWxsZWRWZXJzaW9uczo6c2F0aXNmaWVzKG5ldyBWZXJzaW9uUGFyc2VyLCAnZm9vL2JhcicsICdeMi4zJykKICAgICAqCiAgICAgKiBAcGFyYW0gIFZlcnNpb25QYXJzZXIgJHBhcnNlciAgICAgIEluc3RhbGwgY29tcG9zZXIvc2VtdmVyIHRvIGhhdmUgYWNjZXNzIHRvIHRoaXMgY2xhc3MgYW5kIGZ1bmN0aW9uYWxpdHkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICAkY29uc3RyYWludCAgQSB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gY2hlY2sgZm9yLCBpZiB5b3UgcGFzcyBvbmUgeW91IGhhdmUgdG8gbWFrZSBzdXJlIGNvbXBvc2VyL3NlbXZlciBpcyByZXF1aXJlZCBieSB5b3VyIHBhY2thZ2UKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdGlzZmllcyhWZXJzaW9uUGFyc2VyICRwYXJzZXIsICRwYWNrYWdlTmFtZSwgJGNvbnN0cmFpbnQpCiAgICB7CiAgICAgICAgJGNvbnN0cmFpbnQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKChzdHJpbmcpICRjb25zdHJhaW50KTsKICAgICAgICAkcHJvdmlkZWQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKHNlbGY6OmdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKSk7CgogICAgICAgIHJldHVybiAkcHJvdmlkZWQtPm1hdGNoZXMoJGNvbnN0cmFpbnQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gY29uc3RyYWludCByZXByZXNlbnRpbmcgYWxsIHRoZSByYW5nZShzKSB3aGljaCBhcmUgaW5zdGFsbGVkIGZvciBhIGdpdmVuIHBhY2thZ2UKICAgICAqCiAgICAgKiBJdCBpcyBlYXNpZXIgdG8gdXNlIHRoaXMgdmlhIGlzSW5zdGFsbGVkKCkgd2l0aCB0aGUgJGNvbnN0cmFpbnQgYXJndW1lbnQgaWYgeW91IG5lZWQgdG8gY2hlY2sKICAgICAqIHdoZXRoZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQsIGFuZCBub3QganVzdCB3aGV0aGVyIGl0IGV4aXN0cwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmcgVmVyc2lvbiBjb25zdHJhaW50IHVzYWJsZSB3aXRoIGNvbXBvc2VyL3NlbXZlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJhbmdlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzW10gPSAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2FsaWFzZXMnLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzID0gYXJyYXlfbWVyZ2UoJHJhbmdlcywgJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydhbGlhc2VzJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdyZXBsYWNlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlcGxhY2VkJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdwcm92aWRlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3Byb3ZpZGVkJ10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnIHx8ICcsICRyYW5nZXMpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIHZlcnNpb24sIHVzZSBzYXRpc2ZpZXMgb3IgZ2V0VmVyc2lvblJhbmdlcyBpZiB5b3UgbmVlZCB0byBrbm93IGlmIGEgZ2l2ZW4gdmVyc2lvbiBpcyBwcmVzZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigkcGFja2FnZU5hbWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoc2VsZjo6Z2V0SW5zdGFsbGVkKCkgYXMgJGluc3RhbGxlZCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsndmVyc2lvbiddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZXJzaW9uLCB1c2Ugc2F0aXNmaWVzIG9yIGdldFZlcnNpb25SYW5nZXMgaWYgeW91IG5lZWQgdG8ga25vdyBpZiBhIGdpdmVuIHZlcnNpb24gaXMgcHJlc2VudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByZXR0eVZlcnNpb24oJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsncHJldHR5X3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyByZWZlcmVuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWZlcmVuY2UoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIGluc3RhbGwgcGF0aC4gUGFja2FnZXMgb2YgdHlwZSBtZXRhcGFja2FnZXMgYWxzbyBoYXZlIGEgbnVsbCBpbnN0YWxsIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbFBhdGgoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnaW5zdGFsbF9wYXRoJ10pID8gJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydpbnN0YWxsX3BhdGgnXSA6IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdQYWNrYWdlICInIC4gJHBhY2thZ2VOYW1lIC4gJyIgaXMgbm90IGluc3RhbGxlZCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHBzYWxtLXJldHVybiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSb290UGFja2FnZSgpCiAgICB7CiAgICAgICAgJGluc3RhbGxlZCA9IHNlbGY6OmdldEluc3RhbGxlZCgpOwoKICAgICAgICByZXR1cm4gJGluc3RhbGxlZFswXVsncm9vdCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmF3IGluc3RhbGxlZC5waHAgZGF0YSBmb3IgY3VzdG9tIGltcGxlbWVudGF0aW9ucwogICAgICoKICAgICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBbGxSYXdEYXRhKCkgaW5zdGVhZCB3aGljaCByZXR1cm5zIGFsbCBkYXRhc2V0cyBmb3IgYWxsIGF1dG9sb2FkZXJzIHByZXNlbnQgaW4gdGhlIHByb2Nlc3MuIGdldFJhd0RhdGEgb25seSByZXR1cm5zIHRoZSBmaXJzdCBkYXRhc2V0IGxvYWRlZCwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QuCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdEYXRhKCkKICAgIHsKICAgICAgICBAdHJpZ2dlcl9lcnJvcignZ2V0UmF3RGF0YSBvbmx5IHJldHVybnMgdGhlIGZpcnN0IGRhdGFzZXQgbG9hZGVkLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IGV4cGVjdC4gVXNlIGdldEFsbFJhd0RhdGEoKSBpbnN0ZWFkIHdoaWNoIHJldHVybnMgYWxsIGRhdGFzZXRzIGZvciBhbGwgYXV0b2xvYWRlcnMgcHJlc2VudCBpbiB0aGUgcHJvY2Vzcy4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gaW5jbHVkZSBfX0RJUl9fIC4gJy9pbnN0YWxsZWQucGhwJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWQgPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbGxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhdyBkYXRhIG9mIGFsbCBpbnN0YWxsZWQucGhwIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkIGZvciBjdXN0b20gaW1wbGVtZW50YXRpb25zCiAgICAgKgogICAgICogQHJldHVybiBhcnJheVtdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8YXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsUmF3RGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEluc3RhbGxlZCgpOwogICAgfQoKICAgIC8qKgogICAgICogTGV0cyB5b3UgcmVsb2FkIHRoZSBzdGF0aWMgYXJyYXkgZnJvbSBhbm90aGVyIGZpbGUKICAgICAqCiAgICAgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBjb21wbGV4IGludGVncmF0aW9ucyBpbiB3aGljaCBhIHByb2plY3QgbmVlZHMgdG8gdXNlCiAgICAgKiB0aGlzIGNsYXNzIGJ1dCB0aGVuIGFsc28gbmVlZHMgdG8gZXhlY3V0ZSBhbm90aGVyIHByb2plY3QncyBhdXRvbG9hZGVyIGluIHByb2Nlc3MsCiAgICAgKiBhbmQgd2FudHMgdG8gZW5zdXJlIGJvdGggcHJvamVjdHMgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgdmVyc2lvbiBvZiBpbnN0YWxsZWQucGhwLgogICAgICoKICAgICAqIEEgdHlwaWNhbCBjYXNlIHdvdWxkIGJlIFBIUFVuaXQsIHdoZXJlIGl0IHdvdWxkIG5lZWQgdG8gbWFrZSBzdXJlIGl0IHJlYWRzIGFsbAogICAgICogdGhlIGRhdGEgaXQgbmVlZHMgZnJvbSB0aGlzIGNsYXNzLCB0aGVuIGNhbGwgcmVsb2FkKCkgd2l0aAogICAgICogYHJlcXVpcmUgJENXRC92ZW5kb3IvY29tcG9zZXIvaW5zdGFsbGVkLnBocGAgKG9yIHNpbWlsYXIpIGFzIGlucHV0IHRvIG1ha2Ugc3VyZQogICAgICogdGhlIHByb2plY3QgaW4gd2hpY2ggaXQgcnVucyBjYW4gdGhlbiBhbHNvIHVzZSB0aGlzIGNsYXNzIHNhZmVseSwgd2l0aG91dAogICAgICogaW50ZXJmZXJlbmNlIGJldHdlZW4gUEhQVW5pdCdzIGRlcGVuZGVuY2llcyBhbmQgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheVtdICRkYXRhIEEgdmVuZG9yL2NvbXBvc2VyL2luc3RhbGxlZC5waHAgZGF0YSBzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbG9hZCgkZGF0YSkKICAgIHsKICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJGRhdGE7CiAgICAgICAgc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yID0gYXJyYXkoKTsKCiAgICAgICAgLy8gd2hlbiB1c2luZyByZWxvYWQsIHdlIGRpc2FibGUgdGhlIGR1cGxpY2F0ZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGF0IHNlbGY6OiRpbnN0YWxsZWQgZGF0YSBpcwogICAgICAgIC8vIGFsd2F5cyByZXR1cm5lZCwgYnV0IHdlIGNhbm5vdCBrbm93IHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgaW5zdGFsbGVkLnBocCBpbiBfX0RJUl9fIG9yIG5vdCwKICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGFzc3VtZSBpdCBkb2VzIG5vdCwgYW5kIHRoYXQgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZGF0YSBiZWluZyByZXR1cm5lZCB3aGVuIGxpc3RpbmcKICAgICAgICAvLyBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGZvciBleGFtcGxlCiAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZEaXIoKQogICAgewogICAgICAgIGlmIChzZWxmOjokc2VsZkRpciA9PT0gbnVsbCkgewogICAgICAgICAgICBzZWxmOjokc2VsZkRpciA9IHN0cnRyKF9fRElSX18sICdcXCcsICcvJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JHNlbGZEaXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gbGlzdDxhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fT4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGVkKCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JGNhbkdldFZlbmRvcnMpIHsKICAgICAgICAgICAgc2VsZjo6JGNhbkdldFZlbmRvcnMgPSBtZXRob2RfZXhpc3RzKCdDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcicsICdnZXRSZWdpc3RlcmVkTG9hZGVycycpOwogICAgICAgIH0KCiAgICAgICAgJGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgJGNvcGllZExvY2FsRGlyID0gZmFsc2U7CgogICAgICAgIGlmIChzZWxmOjokY2FuR2V0VmVuZG9ycykgewogICAgICAgICAgICAkc2VsZkRpciA9IHNlbGY6OmdldFNlbGZEaXIoKTsKICAgICAgICAgICAgZm9yZWFjaCAoQ2xhc3NMb2FkZXI6OmdldFJlZ2lzdGVyZWRMb2FkZXJzKCkgYXMgJHZlbmRvckRpciA9PiAkbG9hZGVyKSB7CiAgICAgICAgICAgICAgICAkdmVuZG9yRGlyID0gc3RydHIoJHZlbmRvckRpciwgJ1xcJywgJy8nKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokaW5zdGFsbGVkQnlWZW5kb3JbJHZlbmRvckRpcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yWyR2ZW5kb3JEaXJdOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnKSkgewogICAgICAgICAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59ICRyZXF1aXJlZCAqLwogICAgICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnOwogICAgICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWRCeVZlbmRvclskdmVuZG9yRGlyXSA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAkaW5zdGFsbGVkW10gPSAkcmVxdWlyZWQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGY6OiRpbnN0YWxsZWQgPT09IG51bGwgJiYgJHZlbmRvckRpci4nL2NvbXBvc2VyJyA9PT0gJHNlbGZEaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkSXNMb2NhbERpciAmJiAkdmVuZG9yRGlyLicvY29tcG9zZXInID09PSAkc2VsZkRpcikgewogICAgICAgICAgICAgICAgICAgICRjb3BpZWRMb2NhbERpciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkcmVxdWlyZWQgKi8KICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgX19ESVJfXyAuICcvaW5zdGFsbGVkLnBocCc7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJHJlcXVpcmVkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkICE9PSBhcnJheSgpICYmICEkY29waWVkTG9jYWxEaXIpIHsKICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5zdGFsbGVkOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CkNvcHlyaWdodCAoYykgTmlscyBBZGVybWFubiwgSm9yZGkgQm9nZ2lhbm8KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/platform_check.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIHBsYXRmb3JtX2NoZWNrLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokaXNzdWVzID0gYXJyYXkoKTsKCmlmICghKFBIUF9WRVJTSU9OX0lEID49IDcwNDAwKSkgewogICAgJGlzc3Vlc1tdID0gJ1lvdXIgQ29tcG9zZXIgZGVwZW5kZW5jaWVzIHJlcXVpcmUgYSBQSFAgdmVyc2lvbiAiPj0gNy40LjAiLiBZb3UgYXJlIHJ1bm5pbmcgJyAuIFBIUF9WRVJTSU9OIC4gJy4nOwp9CgppZiAoJGlzc3VlcykgewogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSkgewogICAgICAgIGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOwogICAgfQogICAgaWYgKCFpbmlfZ2V0KCdkaXNwbGF5X2Vycm9ycycpKSB7CiAgICAgICAgaWYgKFBIUF9TQVBJID09PSAnY2xpJyB8fCBQSFBfU0FQSSA9PT0gJ3BocGRiZycpIHsKICAgICAgICAgICAgZndyaXRlKFNUREVSUiwgJ0NvbXBvc2VyIGRldGVjdGVkIGlzc3VlcyBpbiB5b3VyIHBsYXRmb3JtOicgLiBQSFBfRU9MLlBIUF9FT0wgLiBpbXBsb2RlKFBIUF9FT0wsICRpc3N1ZXMpIC4gUEhQX0VPTC5QSFBfRU9MKTsKICAgICAgICB9IGVsc2VpZiAoIWhlYWRlcnNfc2VudCgpKSB7CiAgICAgICAgICAgIGVjaG8gJ0NvbXBvc2VyIGRldGVjdGVkIGlzc3VlcyBpbiB5b3VyIHBsYXRmb3JtOicgLiBQSFBfRU9MLlBIUF9FT0wgLiBzdHJfcmVwbGFjZSgnWW91IGFyZSBydW5uaW5nICcuUEhQX1ZFUlNJT04uJy4nLCAnJywgaW1wbG9kZShQSFBfRU9MLCAkaXNzdWVzKSkgLiBQSFBfRU9MLlBIUF9FT0w7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICdDb21wb3NlciBkZXRlY3RlZCBpc3N1ZXMgaW4geW91ciBwbGF0Zm9ybTogJyAuIGltcGxvZGUoJyAnLCAkaXNzdWVzKQogICAgKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMjIyB2Mi41LjAgKDIwMjItMTIpCiogU3VwcG9ydCBQSFAgOC4yIFsjOTldKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC85OSkKKiBQSFAgOCBjb21wYXRpYmlsaXR5IGZpeCBmb3IgRGF0ZVRpbWU6OmdldExhc3RFcnJvcnMgWyM5OF0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzk4KQoqIFN1cHBvcnQgbW9yZSBPSURzIFsjOTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC85NSkKKiBGSU5BTCBSRUxFQVNFLiBMaWJyYXJ5IGlzIG5vdyBubyBsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWFya2VkIGFzIGFyY2hpdmVkIG9uIEdpdEh1YgoKIyMjIyB2Mi40LjAgKDIwMjEtMTIpCiogRHJvcCBzdXBwb3J0IGZvciBQSFAgNy4wIFsjODldKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvcHVsbC84OSkKCiMjIyMgdjIuMy4xICgyMDIxLTEyKQoqIEFkZCBgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdYCBhdHRyaWJ1dGVzIGZvciBQSFAgOC4xIGNvbXBhdGliaWxpdHkgWyM4N10oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzg3KQoKIyMjIyB2Mi4zLjAgKDIwMjEtMDQpCiogQWxsb3cgY3JlYXRpbmcgYW4gdW5zaWduZWQgQ1NSIGFuZCBhZGRpbmcgdGhlIHNpZ25hdHVyZSBsYXRlciBbIzgyXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3B1bGwvODIpCgojIyMjIHYyLjIuMCAoMjAyMC0wOCkKKiBzdXBwb3J0IHBvbHlmaWxscyBmb3IgYmNtYXRoIGFuZCBnbXAsIGFuZCBhZGQgYSBjb21wb3Nlci5qc29uCiAgc3VnZ2VzdGlvbiBmb3IgdGhlIGBwaHBzZWNsaWIvYmNtYXRoX3BvbHlmaWxsYCBmb3Igc2VydmVycyB1bmFibGUKICB0byBpbnN0YWxsIFBIUCB0aGUgZ21wIG9yIGJjbWF0aCBleHRlbnNpb25zLgoKIyMjIyB2LjIuMS4xICYgJnYuMi4wLjIgKDIwMTgtMTIpCiogYWRkIHN0cmljdGVyIHZhbGlkYXRpb24gYXJvdW5kIHNvbWUgc3RydWN0dXJlcywgaGlnaGxpZ2hlZAogIGJ5IHd5Y2hlcHJvb2YgdGVzdCBzdWl0ZQoKIyMjIyB2LjIuMS4wICgyMDE4LTAzKQoqIGFkZCBzdXBwb3J0IGZvciBgYmNtYXRoYCBleHRlbnNpb24gKG1ha2luZyBgZ21wYCBvcHRpb25hbCkgWyM2OF0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzY4KQoKIyMjIyB2LjIuMC4xICYgdi4xLjUuMyAoMjAxNy0xMikKKiBhZGQgLmdpdGF0dHJpYnV0ZXMgZmlsZSB0byBwcmV2ZW50IGV4YW1wbGVzIGFuZCB0ZXN0cyB0byBiZSBpbnN0YWxsZWQgdmlhIGNvbXBvc2VyIHdoZW4gLS1wcmVmZXItZGlzdCB3YXMgc2V0CgojIyMjIHYuMi4wLjAgKDIwMTctMDgpCiogcmVuYW1lIGBGR1xBU04xXE9iamVjdGAgdG8gYEZHXEFTTjFcQVNOT2JqZWN0YCBiZWNhdXNlIGBPYmplY3RgIGlzIGEgc3BlY2lhbCBjbGFzcyBuYW1lIGluIHRoZSBuZXh0IG1ham9yIFBIUCByZWxlYXNlCiAgLSB3aGVuIHlvdSB1cGdyYWRlIHlvdSBoYXZlIHRvIGFkYXB0IGFsbCBjb3JyZXNwb25kaW5nIGB1c2VgIGFuZCBgZXh0ZW5kc2Agc3RhdGVtZW50cyBhcyB3ZWxsIGFzIHR5cGUgaGludHMgYW5kIGFsbAogICAgdXNhZ2VzIG9mIGBPYmplY3Q6OmZyb21CaW5hcnko4oCmKWAuCiogIGdlbmVyYWxseSBkcm9wIFBIUCA1LjYgc3VwcG9ydAoKIyMjIyB2LjEuNS4yICgyMDE2LTEwLTI5KQoqIGFsbG93IGVtcHR5IG9jdGV0IHN0cmluZ3MKCiMjIyMgdi4xLjUuMSAoMjAxNS0xMC0wMikKKiBhZGQga2V5d29yZHMgdG8gY29tcG9zZXIuanNvbiAodGhpcyBpcyBhIHZlcnNpb24gb24gaXRzIG93biBzbyB0aGUga2V5d29yZHMgYXJlIGZvdW5kIG9uIGEgc3RhYmxlIHZlcnNpb24gYXQgcGFja2FnaXN0Lm9yZykKCiMjIyMgdi4xLjUuMCAoMjAxNS0xMC0zMCkKKiBmaXggYSBidWcgdGhhdCB3b3VsZCBwcmV2ZW50IHlvdSBmcm9tIGRlY29kaW5nIGNvbnRleHQgc3BlY2lmaWMgdGFncyBvbiBtdWx0aXBsZSBvYmplY3RzIFsjNTddKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvaXNzdWVzLzU3KQogIC0gYEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6Ol9fY29uc3RydWN0YCBkb2VzIG5vdyBhY2NlcHQgbXVsdGlwbGUgb2JqZWN0cyB0byBiZSB0YWdnZWQgd2l0aCBhIHNpbmdsZSB0YWcKICAtIGBFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0OjpnZXRDb250ZW50YCB3aWxsIG5vdyBhbHdheXMgcmV0dXJuIGFuIGFycmF5IChldmVuIGlmIG9ubHkgb25lIG9iamVjdCBpcyB0YWdnZWQpCgojIyMjIHYuMS40LjIgKDIwMTUtMDktMjkpCiogZml4IGEgYnVnIHRoYXQgd291bGQgcHJldmVudCB5b3UgZnJvbSBkZWNvZGluZyBlbXB0eSB0YWdnZWQgb2JqZWN0cyBbIzU3XShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2lzc3Vlcy81NykKCiMjIyMgdi4xLjQuMQoqIGltcHJvdmUgZXhjZXB0aW9uIG1lc3NhZ2VzIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nIFsjNTVdKGh0dHBzIDovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3B1bGwvNTUpCgojIyMjIHYuMS40LjAKKiAqKnJlcXVpcmUgUEhQIDUuNioqCiogc3VwcG9ydCBiaWcgaW50ZWdlcnMgKGNsb3NlcyAjMSBhbmQgIzM3KQoqIGVuZm9yY2Ugb25lIGNvZGUgc3R5bGUgdmlhIFtzdHlsZWNpLmlvXVs5XQoqIHRyYWNrIGNvZGUgY292ZXJhZ2UgdmlhIFtjb3ZlcmFsbHMuaW9dWzEwXQoqIHJlcGxhY2Ugb2Jzb2xldGUgYEZHXEFTTjFcRXhjZXB0aW9uXEdlbmVyYWxFeGNlcHRpb25gIHdpdGggYFxFeGNlcHRpb25gCiogYENvbnN0cnVjdGAgKGBTZXF1ZW5jZWAsIGBTZXRgKSBkb2VzIG5vdyBpbXBsZW1lbnQgYEFycmF5QWNjZXNzYCwgYENvdW50YWJsZWAgYW5kIGBJdGVyYXRvcmAgc28gaXRzIGVhc2llciB0byB1c2UKKiBhZGQgW2BUZW1wbGF0ZVBhcnNlcmBdWzExXQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZmdyb3NzZS9waHBhc24xIiwKICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBBU04uMSBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlcy4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGcmllZHJpY2ggR3Jvw59lIiwKICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlIiwKICAgICAgICAgICAgInJvbGUiOiAiQXV0aG9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAia2V5d29yZHMiOiBbICJ4NjkwIiwgInguNjkwIiwgInguNTA5IiwgIng1MDkiLCAiYXNuMSIsICJhc24uMSIsICJiZXIiLCAiZGVyIiwgImJpbmFyeSIsICJlbmNvZGluZyIsICJkZWNvZGluZyIgXSwKCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEgfHwgXjguMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy4wIHx8IF44LjAgfHwgXjkuMCIsCiAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJ+Mi4wIgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtZ21wIjogIkdNUCBpcyB0aGUgcHJlZmVycmVkIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAiZXh0LWJjbWF0aCI6ICJCQ21hdGggaXMgdGhlIGZhbGxiYWNrIGV4dGVuc2lvbiBmb3IgYmlnIGludGVnZXIgY2FsY3VsYXRpb25zIiwKICAgICAgICAicGhwc2VjbGliL2JjbWF0aF9jb21wYXQiOiAiQkNtYXRoIHBvbHlmaWxsIGZvciBzZXJ2ZXJzIHdoZXJlIG5laXRoZXIgR01QIG5vciBCQ21hdGggaXMgYXZhaWxhYmxlIiwKICAgICAgICAiZXh0LWN1cmwiOiAiRm9yIGxvYWRpbmcgT0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIHdlYiBpZiB0aGV5IGhhdmUgbm90IGJlZSBkZWZpbmVkIHN0YXRpY2FsbHkiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkZHXFwiOiAibGliLyIKICAgICAgICB9CiAgICB9LAogICAgImF1dG9sb2FkLWRldiI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJGR1xcVGVzdFxcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0cmluZyBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKICAgIHByaXZhdGUgJGNoZWNrU3RyaW5nRm9ySWxsZWdhbENoYXJzID0gdHJ1ZTsKICAgIHByaXZhdGUgJGFsbG93ZWRDaGFyYWN0ZXJzID0gW107CgogICAgLyoqCiAgICAgKiBUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgQVNOLjEgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgc29tZSBzdHJpbmcgb2YgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd0NoYXJhY3RlcigkY2hhcmFjdGVyKQogICAgewogICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXJhY3RlcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDaGFyYWN0ZXJzKC4uLiRjaGFyYWN0ZXJzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRjaGFyYWN0ZXJzIGFzICRjaGFyYWN0ZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAkY2hhcmFjdGVyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dOdW1iZXJzKCkKICAgIHsKICAgICAgICBmb3JlYWNoIChyYW5nZSgnMCcsICc5JykgYXMgJGNoYXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAoc3RyaW5nKSAkY2hhcjsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsTGV0dGVycygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93U21hbGxMZXR0ZXJzKCk7CiAgICAgICAgJHRoaXMtPmFsbG93Q2FwaXRhbExldHRlcnMoKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dTbWFsbExldHRlcnMoKQogICAgewogICAgICAgIGZvcmVhY2ggKHJhbmdlKCdhJywgJ3onKSBhcyAkY2hhcikgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dlZENoYXJhY3RlcnNbXSA9ICRjaGFyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDYXBpdGFsTGV0dGVycygpCiAgICB7CiAgICAgICAgZm9yZWFjaCAocmFuZ2UoJ0EnLCAnWicpIGFzICRjaGFyKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXI7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd1NwYWNlcygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAnICc7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMgPSBmYWxzZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+dmFsdWUpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMpIHsKICAgICAgICAgICAgJHRoaXMtPmNoZWNrU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja1N0cmluZygpCiAgICB7CiAgICAgICAgJHN0cmluZ0xlbmd0aCA9ICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHN0cmluZ0xlbmd0aDsgJGkrKykgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHRoaXMtPnZhbHVlWyRpXSwgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHR5cGVOYW1lID0gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvdWxkIG5vdCBjcmVhdGUgYSB7JHR5cGVOYW1lfSBmcm9tIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgJ3skdGhpcy0+dmFsdWV9Jy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygnJyk7CgogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCAkcGFyc2VkT2JqZWN0LT5nZXRUeXBlKCksICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkc3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWQoJHN0cmluZykKICAgIHsKICAgICAgICAkdGVzdE9iamVjdCA9IG5ldyBzdGF0aWMoJHN0cmluZyk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRlc3RPYmplY3QtPmNoZWNrU3RyaW5nKCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBEYXRlSW50ZXJ2YWw7CnVzZSBEYXRlVGltZTsKdXNlIERhdGVUaW1lWm9uZTsKdXNlIEV4Y2VwdGlvbjsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGltZSBleHRlbmRzIEFTTk9iamVjdAp7CiAgICAvKiogQHZhciBEYXRlVGltZSAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIGlmICgkZGF0ZVRpbWUgPT0gbnVsbCB8fCBpc19zdHJpbmcoJGRhdGVUaW1lKSkgewogICAgICAgICAgICAkdGltZVpvbmUgPSBuZXcgRGF0ZVRpbWVab25lKCRkYXRlVGltZVpvbmUpOwogICAgICAgICAgICAkZGF0ZVRpbWVPYmplY3QgPSBuZXcgRGF0ZVRpbWUoJGRhdGVUaW1lLCAkdGltZVpvbmUpOwogICAgICAgICAgICBpZiAoJGRhdGVUaW1lT2JqZWN0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNZXNzYWdlID0gJHRoaXMtPmdldExhc3REYXRlVGltZUVycm9ycygpOwogICAgICAgICAgICAgICAgJGNsYXNzTmFtZSA9IElkZW50aWZpZXI6OmdldE5hbWUoJHRoaXMtPmdldFR5cGUoKSk7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoIkNvdWxkIG5vdCBjcmVhdGUgJXMgZnJvbSBkYXRlIHRpbWUgc3RyaW5nICclcyc6ICVzIiwgJGNsYXNzTmFtZSwgJGRhdGVUaW1lLCAkZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGVUaW1lID0gJGRhdGVUaW1lT2JqZWN0OwogICAgICAgIH0gZWxzZWlmICghJGRhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZVRpbWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBmaXJzdCBhcmd1bWVudCBmb3Igc29tZSBpbnN0YW5jZSBvZiBBYnN0cmFjdFRpbWUgY29uc3RydWN0b3InKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICRkYXRlVGltZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFzdERhdGVUaW1lRXJyb3JzKCkKICAgIHsKICAgICAgICAkbWVzc2FnZXMgPSAnJzsKICAgICAgICAkbGFzdEVycm9ycyA9IERhdGVUaW1lOjpnZXRMYXN0RXJyb3JzKCkgPzogWydlcnJvcnMnID0+IFtdXTsKICAgICAgICBmb3JlYWNoICgkbGFzdEVycm9yc1snZXJyb3JzJ10gYXMgJGVycm9yTWVzc2FnZSkgewogICAgICAgICAgICAkbWVzc2FnZXMgLj0gInskZXJyb3JNZXNzYWdlfSwgIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdWJzdHIoJG1lc3NhZ2VzLCAwLCAtMik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgiWS1tLWRcdEg6aTpzIik7CiAgICB9CgogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0VGltZVpvbmVEYXRhKCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCwgRGF0ZVRpbWUgJGRhdGVUaW1lKQogICAgewogICAgICAgICRzaWduID0gJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdOwogICAgICAgICR0aW1lT2Zmc2V0SG91cnMgICA9IGludHZhbChzdWJzdHIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMikpOwogICAgICAgICR0aW1lT2Zmc2V0TWludXRlcyA9IGludHZhbChzdWJzdHIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCArIDIsIDIpKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gNDsKCiAgICAgICAgJGludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgiUFR7JHRpbWVPZmZzZXRIb3Vyc31IeyR0aW1lT2Zmc2V0TWludXRlc31NIik7CiAgICAgICAgaWYgKCRzaWduID09ICcrJykgewogICAgICAgICAgICAkZGF0ZVRpbWUtPnN1YigkaW50ZXJ2YWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkYXRlVGltZS0+YWRkKCRpbnRlcnZhbCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGVUaW1lOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ASNObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCaXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCb29sZWFuOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcRW51bWVyYXRlZDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdlbmVyYWxpemVkVGltZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEludGVnZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVVENUaW1lOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVtZXJpY1N0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFVURjhTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVbml2ZXJzYWxTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxDaGFyYWN0ZXJTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxHZW5lcmFsU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVmlzaWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdyYXBoaWNTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCTVBTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxUNjFTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3REZXNjcmlwdG9yOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgTG9naWNFeGNlcHRpb247CgovKioKICogQ2xhc3MgQVNOT2JqZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY29uY3JldGUgQVNOLjEgb2JqZWN0cy4KICovCmFic3RyYWN0IGNsYXNzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbnRlbnRMZW5ndGg7CiAgICBwcml2YXRlICRuck9mTGVuZ3RoT2N0ZXRzOwoKICAgIC8qKgogICAgICogTXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBvY3RldHMgb2YgdGhlIGNvbnRlbnQgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpOwoKICAgIC8qKgogICAgICogRW5jb2RlIHRoZSBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjY5MCNERVJfZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdHMgdmFsdWUKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBjb250ZW50IG9mIHRoaXMgb2JqZWN0IGluIGEgbm9uIGVuY29kZWQgZm9ybS4KICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbnQgdGhlIHZhbHVlIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBvYmplY3QgdHlwZSBvY3RldC4KICAgICAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgY2xhc3MgY29uc3RhbnRzIG9mIElkZW50aWZpZXIuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGlkZW50aWZpZXIgb2N0ZXRzLiBJZiBhbiBpbmhlcml0aW5nIGNsYXNzIG1vZGVscyBhIHRhZyB3aXRoCiAgICAgKiB0aGUgbG9uZyBmb3JtIGlkZW50aWZpZXIgZm9ybWF0LCBpdCBNVVNUIHJlaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvCiAgICAgKiByZXR1cm4gYWxsIG9jdGV0cyBvZiB0aGUgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIElmIHRoZSBpZGVudGlmaWVyIGZvcm1hdCBpcyBsb25nIGZvcm0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBJZGVudGlmaWVyIGFzIGEgc2V0IG9mIG9jdGV0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSAkdGhpcy0+Z2V0VHlwZSgpOwoKICAgICAgICBpZiAoSWRlbnRpZmllcjo6aXNMb25nRm9ybSgkZmlyc3RPY3RldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0lkZW50aWZpZXIgb2YgJXMgdXNlcyB0aGUgbG9uZyBmb3JtIGFuZCBtdXN0IHRoZXJlZm9yIG92ZXJyaWRlICJBU05PYmplY3Q6OmdldElkZW50aWZpZXIoKSIuJywgZ2V0X2NsYXNzKCR0aGlzKSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGUgdGhpcyBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBmdWxsIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxldGUgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaW5hcnkoKQogICAgewogICAgICAgICRyZXN1bHQgID0gJHRoaXMtPmdldElkZW50aWZpZXIoKTsKICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5jcmVhdGVMZW5ndGhQYXJ0KCk7CiAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlTGVuZ3RoUGFydCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkdGhpcy0+Z2V0Q29udGVudExlbmd0aCgpOwogICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJHRoaXMtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgaWYgKCRuck9mTGVuZ3RoT2N0ZXRzID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGNocigkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGxlbmd0aCBvY3RldCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgc3Vic2VxdWVudCBsZW5ndGggb2N0ZXRzCiAgICAgICAgICAgICRsZW5ndGhPY3RldHMgPSBjaHIoMHg4MCB8ICgkbnJPZkxlbmd0aE9jdGV0cyAtIDEpKTsKICAgICAgICAgICAgZm9yICgkc2hpZnRMZW5ndGggPSA4ICogKCRuck9mTGVuZ3RoT2N0ZXRzIC0gMik7ICRzaGlmdExlbmd0aCA+PSAwOyAkc2hpZnRMZW5ndGggLT0gOCkgewogICAgICAgICAgICAgICAgJGxlbmd0aE9jdGV0cyAuPSBjaHIoJGNvbnRlbnRMZW5ndGggPj4gJHNoaWZ0TGVuZ3RoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRsZW5ndGhPY3RldHM7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+bnJPZkxlbmd0aE9jdGV0cykpIHsKICAgICAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMgPSAxOwogICAgICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPiAxMjcpIHsKICAgICAgICAgICAgICAgIGRvIHsgLy8gbG9uZyBmb3JtCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMrKzsKICAgICAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoID4+IDg7CiAgICAgICAgICAgICAgICB9IHdoaWxlICgkY29udGVudExlbmd0aCA+IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmNvbnRlbnRMZW5ndGgpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250ZW50TGVuZ3RoID0gJHRoaXMtPmNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0Q29udGVudExlbmd0aCgkbmV3Q29udGVudExlbmd0aCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9ICRuZXdDb250ZW50TGVuZ3RoOwogICAgICAgICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkbmV3Q29udGVudExlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHdob2xlIG9iamVjdCAoaW5jbHVkaW5nIHRoZSBpZGVudGlmaWVyIGFuZCBsZW5ndGggb2N0ZXRzKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9iamVjdExlbmd0aCgpCiAgICB7CiAgICAgICAgJG5yT2ZJZGVudGlmaWVyT2N0ZXRzID0gc3RybGVuKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAkbnJPZkxlbmd0aE9jdGV0cyA9ICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkbnJPZklkZW50aWZpZXJPY3RldHMgKyAkbnJPZkxlbmd0aE9jdGV0cyArICRjb250ZW50TGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbnRlbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEFTTi4xIFR5cGUgb2YgdGhpcyBvYmplY3QuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyOjpnZXROYW1lKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGVOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRiaW5hcnlEYXRhKSA8PSAkb2Zmc2V0SW5kZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ2FuIG5vdCBwYXJzZSBiaW5hcnkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnRleHRTcGVjaWZpY0NsYXNzKCRpZGVudGlmaWVyT2N0ZXQpICYmIElkZW50aWZpZXI6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgcmV0dXJuIEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRpZGVudGlmaWVyT2N0ZXQpIHsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCSVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gQml0U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbjo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuIEVudW1lcmF0ZWQ6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6SU5URUdFUjoKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTEw6CiAgICAgICAgICAgICAgICByZXR1cm4gTnVsbE9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RJZGVudGlmaWVyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDoKICAgICAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gT2N0ZXRTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVuY2U6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNldDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiBVVENUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhbGl6ZWRUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OklBNV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gSUE1U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gUHJpbnRhYmxlU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gVVRGOFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFVuaXZlcnNhbFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3RlclN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmFsU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6R1JBUEhJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY1N0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIEJNUFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFQ2MVN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3REZXNjcmlwdG9yOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaWRlbnRpZmllciBtYXkgYmUgPjEgYnl0ZS4KICAgICAgICAgICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmtub3duQ29uc3RydWN0ZWRPYmplY3QoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6cGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICRsZW5ndGhPZlVua25vd25PYmplY3QgPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgJG9mZnNldEluZGV4ICs9ICRsZW5ndGhPZlVua25vd25PYmplY3Q7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5rbm93bk9iamVjdCgkaWRlbnRpZmllciwgJGxlbmd0aE9mVW5rbm93bk9iamVjdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VJZGVudGlmaWVyKCRpZGVudGlmaWVyT2N0ZXQsICRleHBlY3RlZElkZW50aWZpZXIsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZykKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRpZGVudGlmaWVyT2N0ZXQpIHx8IGlzX251bWVyaWMoJGlkZW50aWZpZXJPY3RldCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IG9yZCgkaWRlbnRpZmllck9jdGV0KTsKICAgICAgICB9CgogICAgICAgIGlmICgkaWRlbnRpZmllck9jdGV0ICE9ICRleHBlY3RlZElkZW50aWZpZXIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAnQ2FuIG5vdCBjcmVhdGUgYW4gJy5JZGVudGlmaWVyOjpnZXROYW1lKCRleHBlY3RlZElkZW50aWZpZXIpLicgZnJvbSBhbiAnLklkZW50aWZpZXI6OmdldE5hbWUoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJG1lc3NhZ2UsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZyk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4KQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllciA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKCiAgICAgICAgaWYgKElkZW50aWZpZXI6OmlzTG9uZ0Zvcm0ob3JkKCRpZGVudGlmaWVyKSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHN0cmxlbigkYmluYXJ5RGF0YSkgPD0gJG9mZnNldEluZGV4KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5leHRPY3RldCA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJG5leHRPY3RldDsKCiAgICAgICAgICAgIGlmICgob3JkKCRuZXh0T2N0ZXQpICYgMHg4MCkgPT09IDApIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyAwIHRvIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VDb250ZW50TGVuZ3RoKCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCwgJG1pbmltdW1MZW5ndGggPSAwKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogT2Zmc2V0IGluZGV4IGxhcmdlciB0aGFuIGlucHV0IHNpemUnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICBpZiAoKCRjb250ZW50TGVuZ3RoICYgMHg4MCkgIT0gMCkgewogICAgICAgICAgICAvLyBiaXQgOCBpcyBzZXQgLT4gdGhpcyBpcyB0aGUgbG9uZyBmb3JtCiAgICAgICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJGNvbnRlbnRMZW5ndGggJiAweDdGOwogICAgICAgICAgICAkY29udGVudExlbmd0aCA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgweDAwKTsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZMZW5ndGhPY3RldHM7ICRpKyspIHsKICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgY29udGVudCBsZW5ndGggKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoLT5zaGlmdExlZnQoOCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY29udGVudExlbmd0aC0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCJDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogbGVuZ3RoID4gbWF4aW11bSBpbnRlZ2VyIiwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkY29udGVudExlbmd0aC0+dG9JbnRlZ2VyKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAkbWluaW11bUxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdBICcuZ2V0X2NhbGxlZF9jbGFzcygpLiIgc2hvdWxkIGhhdmUgYSBjb250ZW50IGxlbmd0aCBvZiBhdCBsZWFzdCB7JG1pbmltdW1MZW5ndGh9LiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRsZW5EYXRhUmVtYWluaW5nID0gc3RybGVuKCRiaW5hcnlEYXRhKSAtICRvZmZzZXRJbmRleDsKCiAgICAgICAgaWYgKCRsZW5EYXRhUmVtYWluaW5nIDwgJGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGVudCBsZW5ndGggeyRjb250ZW50TGVuZ3RofSBleGNlZWRzIHJlbWFpbmluZyBkYXRhIGxlbmd0aCB7JGxlbkRhdGFSZW1haW5pbmd9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudExlbmd0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Base128.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGR1xBU04xOwoKdXNlIEZHXFV0aWxpdHlcQmlnSW50ZWdlcjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBBIGJhc2UtMTI4IGRlY29kZXIuCiAqLwpjbGFzcyBCYXNlMTI4CnsKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gQmlnSW50ZWdlcjo6Y3JlYXRlKCR2YWx1ZSk7CiAgICAgICAgJG9jdGV0cyA9IGNocigkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKCiAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIHdoaWxlICgkdmFsdWUtPmNvbXBhcmUoMCkgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgLj0gY2hyKDB4ODAgfCAkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKICAgICAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0cnJldigkb2N0ZXRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9jdGV0cwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBnaXZlbiBvY3RldHMgcmVwcmVzZW50IGEgbWFsZm9ybWVkIGJhc2UtMTI4IHZhbHVlIG9yIHRoZSBkZWNvZGVkIHZhbHVlIHdvdWxkIGV4Y2VlZCB0aGUgdGhlIG1heGltdW0gaW50ZWdlciBsZW5ndGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZSgkb2N0ZXRzKQogICAgewogICAgICAgICRiaXRzUGVyT2N0ZXQgPSA3OwogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgwKTsKICAgICAgICAkaSA9IDA7CgogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9jdGV0c1skaV0pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ01hbGZvcm1lZCBiYXNlLTEyOCBlbmNvZGVkIHZhbHVlICgweCVzKS4nLCBzdHJ0b3VwcGVyKGJpbjJoZXgoJG9jdGV0cykpID86ICcwJykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb2N0ZXQgPSBvcmQoJG9jdGV0c1skaSsrXSk7CgogICAgICAgICAgICAkbDEgPSAkdmFsdWUtPnNoaWZ0TGVmdCgkYml0c1Blck9jdGV0KTsKICAgICAgICAgICAgJHIxID0gJG9jdGV0ICYgMHg3ZjsKICAgICAgICAgICAgJHZhbHVlID0gJGwxLT5hZGQoJHIxKTsKCiAgICAgICAgICAgIGlmICgwID09PSAoJG9jdGV0ICYgMHg4MCkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykkdmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/AttributeTypeAndValue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBPYmplY3RJZGVudGlmaWVyfHN0cmluZyAkb2JqSWRlbnRpZmllcgogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmpJZGVudGlmaWVyLCBBU05PYmplY3QgJHZhbHVlKQogICAgewogICAgICAgIGlmICgkb2JqSWRlbnRpZmllciBpbnN0YW5jZW9mIE9iamVjdElkZW50aWZpZXIgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJG9iaklkZW50aWZpZXIgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigkb2JqSWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXIsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bMF0uJzogJy4kdGhpcy0+Y2hpbGRyZW5bMV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RDNString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVVRGOFN0cmluZzsKCmNsYXNzIFJETlN0cmluZyBleHRlbmRzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmplY3RJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3RJZGVudGlmaWVyU3RyaW5nLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKFByaW50YWJsZVN0cmluZzo6aXNWYWxpZCgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBQcmludGFibGVTdHJpbmcoJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoSUE1U3RyaW5nOjppc1ZhbGlkKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBJQTVTdHJpbmcoJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBVVEY4U3RyaW5nKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RelativeDistinguishedName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cTm90SW1wbGVtZW50ZWRFeGNlcHRpb247CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNldDsKCmNsYXNzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgZXh0ZW5kcyBTZXQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmpJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXJTdHJpbmcsIEFTTk9iamVjdCAkdmFsdWUpCiAgICB7CiAgICAgICAgLy8gVE9ETzogVGhpcyBkb2VzIG9ubHkgc3VwcG9ydCBvbmUgZWxlbWVudCBpbiB0aGUgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSBTZXQgYnV0IGl0IGl0IGlzIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgICAvLyBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIDo6PSBTRVQgU0laRSAoMS4uTUFYKSBPRiBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KG5ldyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUoJG9iaklkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJGZpcnN0T2JqZWN0ICovCiAgICAgICAgJGZpcnN0T2JqZWN0ID0gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgICAgIHJldHVybiAkZmlyc3RPYmplY3QtPl9fdG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEF0IHRoZSBjdXJyZW50IHZlcnNpb24gdGhpcyBjb2RlIGNhbiBub3Qgd29yayBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29uc3RydWN0IHJlcXVpcmVzCiAgICAgKiB0aGUgY2xhc3MgdG8gc3VwcG9ydCBhIGNvbnN0cnVjdG9yIHdpdGhvdXQgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCEgRmVlbCBmcmVlIHRvIHN1Ym1pdCBhIHB1bGwgcmVxdWVzdCBvbiBnaXRodWIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKiBAdGhyb3dzIE5vdEltcGxlbWVudGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Construct.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBBcnJheUFjY2VzczsKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBDb3VudGFibGU7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBJdGVyYXRvcjsKCmFic3RyYWN0IGNsYXNzIENvbnN0cnVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIENvdW50YWJsZSwgQXJyYXlBY2Nlc3MsIEl0ZXJhdG9yLCBQYXJzYWJsZQp7CiAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3RbXSAqLwogICAgcHJvdGVjdGVkICRjaGlsZHJlbjsKICAgIHByaXZhdGUgJGl0ZXJhdG9yUG9zaXRpb247CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0W10gJGNoaWxkcmVuIHRoZSB2YXJpYWRpYyB0eXBlIGhpbnQgaXMgY29tbWVudGVkIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaGh2bS9pc3N1ZXMvNDg1OAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRjaGlsZHJlbikKICAgIHsKICAgICAgICAkdGhpcy0+Y2hpbGRyZW4gPSAkY2hpbGRyZW47CiAgICAgICAgJHRoaXMtPml0ZXJhdG9yUG9zaXRpb24gPSAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPml0ZXJhdG9yUG9zaXRpb24gPSAwOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bJHRoaXMtPml0ZXJhdG9yUG9zaXRpb25dOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKQogICAgewogICAgICAgICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uKys7CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+Y2hpbGRyZW5bJHRoaXMtPml0ZXJhdG9yUG9zaXRpb25dKTsKICAgIH0KCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygkb2Zmc2V0LCAkdGhpcy0+Y2hpbGRyZW4pOwogICAgfQoKICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bJG9mZnNldF07CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkb2Zmc2V0ID0gY291bnQoJHRoaXMtPmNoaWxkcmVuKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jaGlsZHJlblskb2Zmc2V0XSA9ICR2YWx1ZTsKICAgIH0KCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jaGlsZHJlblskb2Zmc2V0XSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jaGlsZHJlbiBhcyAkY29tcG9uZW50KSB7CiAgICAgICAgICAgICRsZW5ndGggKz0gJGNvbXBvbmVudC0+Z2V0T2JqZWN0TGVuZ3RoKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNoaWxkcmVuIGFzICRjb21wb25lbnQpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY29tcG9uZW50LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZChBU05PYmplY3QgJGNoaWxkKQogICAgewogICAgICAgICR0aGlzLT5jaGlsZHJlbltdID0gJGNoaWxkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZHJlbihhcnJheSAkY2hpbGRyZW4pCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGNoaWxkcmVuIGFzICRjaGlsZCkgewogICAgICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGNoaWxkKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRuck9mQ2hpbGRyZW4gPSAkdGhpcy0+Z2V0TnVtYmVyT2ZDaGlsZHJlbigpOwogICAgICAgICRjaGlsZFN0cmluZyA9ICRuck9mQ2hpbGRyZW4gPT0gMSA/ICdjaGlsZCcgOiAnY2hpbGRyZW4nOwoKICAgICAgICByZXR1cm4gIlt7JG5yT2ZDaGlsZHJlbn0geyRjaGlsZFN0cmluZ31dIjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5jaGlsZHJlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jaGlsZHJlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdENoaWxkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXgKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbnN0cnVjdHxzdGF0aWMKICAgICAqLwogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygpOwogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCAkcGFyc2VkT2JqZWN0LT5nZXRUeXBlKCksICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkc3RhcnRJbmRleCA9ICRvZmZzZXRJbmRleDsKCiAgICAgICAgJGNoaWxkcmVuID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICRjb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkbmV3Q2hpbGQgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJG5ld0NoaWxkLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGNoaWxkcmVuW10gPSAkbmV3Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9jdGV0c1RvUmVhZCAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCJTZXF1ZW5jZSBsZW5ndGggaW5jb3JyZWN0IiwgJHN0YXJ0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkQ2hpbGRyZW4oJGNoaWxkcmVuKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9CgogICAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoJG1vZGUgPSBDT1VOVF9OT1JNQUwpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5jaGlsZHJlbiwgJG1vZGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5jaGlsZHJlbik7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/NotImplementedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/ParserException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBQYXJzZXJFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uCnsKICAgIHByaXZhdGUgJGVycm9yTWVzc2FnZTsKICAgIHByaXZhdGUgJG9mZnNldDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGVycm9yTWVzc2FnZSwgJG9mZnNldCkKICAgIHsKICAgICAgICAkdGhpcy0+ZXJyb3JNZXNzYWdlID0gJGVycm9yTWVzc2FnZTsKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCJBU04uMSBQYXJzZXIgRXhjZXB0aW9uIGF0IG9mZnNldCB7JHRoaXMtPm9mZnNldH06IHskdGhpcy0+ZXJyb3JNZXNzYWdlfSIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2Zmc2V0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ExplicitlyTaggedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogQ2xhc3MgRXhwbGljaXRseVRhZ2dlZE9iamVjdCBkZWNvcmF0ZSBhbiBpbm5lciBvYmplY3Qgd2l0aCBhbiBhZGRpdGlvbmFsIHRhZyB0aGF0IGdpdmVzIGluZm9ybWF0aW9uIGFib3V0CiAqIGl0cyBjb250ZXh0IHNwZWNpZmljIG1lYW5pbmcuCiAqCiAqIEV4cGxhbmF0aW9uIHRha2VuIGZyb20gQSBMYXltYW4ncyBHdWlkZSB0byBhIFN1YnNldCBvZiBBU04uMSwgQkVSLCBhbmQgREVSOgogKiA+Pj4gQW4gUlNBIExhYm9yYXRvcmllcyBUZWNobmljYWwgTm90ZQogKiA+Pj4gQnVydG9uIFMuIEthbGlza2kgSnIuCiAqID4+PiBSZXZpc2VkIE5vdmVtYmVyIDEsIDE5OTMKICoKICogWy4uLl0KICogRXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbSBvdGhlciB0eXBlcyBieSBhZGRpbmcgYW4gb3V0ZXIgdGFnIHRvIHRoZSB1bmRlcmx5aW5nIHR5cGUuCiAqIEluIGVmZmVjdCwgZXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIHN0cnVjdHVyZWQgdHlwZXMgY29uc2lzdGluZyBvZiBvbmUgY29tcG9uZW50LCB0aGUgdW5kZXJseWluZyB0eXBlLgogKiBFeHBsaWNpdCB0YWdnaW5nIGlzIGRlbm90ZWQgYnkgdGhlIEFTTi4xIGtleXdvcmRzIFtjbGFzcyBudW1iZXJdIEVYUExJQ0lUIChzZWUgU2VjdGlvbiA1LjIpLgogKiBbLi4uXQogKgogKiBAc2VlIGh0dHA6Ly9sdWNhLm50b3Aub3JnL1RlYWNoaW5nL0FwcHVudGkvYXNuMS5odG1sCiAqLwpjbGFzcyBFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0IGV4dGVuZHMgQVNOT2JqZWN0CnsKICAgIC8qKiBAdmFyIFxGR1xBU04xXEFTTk9iamVjdFtdICovCiAgICBwcml2YXRlICRkZWNvcmF0ZWRPYmplY3RzOwogICAgcHJpdmF0ZSAkdGFnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGFnCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3RzLC4uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhZywgLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRvYmplY3RzKQogICAgewogICAgICAgICR0aGlzLT50YWcgPSAkdGFnOwogICAgICAgICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzID0gJG9iamVjdHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJGxlbmd0aCArPSAkb2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlY29yYXRlZE9iamVjdHMgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkZW5jb2RlZCAuPSAkb2JqZWN0LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZW5jb2RlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRsZW5ndGggPSBjb3VudCgkdGhpcy0+ZGVjb3JhdGVkT2JqZWN0cykpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyBlbXB0eSBvYmplY3Qgd2l0aCB0YWcgW3skdGhpcy0+dGFnfV0iOwogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgJGRlY29yYXRlZFR5cGUgPSBJZGVudGlmaWVyOjpnZXRTaG9ydE5hbWUoJHRoaXMtPmRlY29yYXRlZE9iamVjdHNbMF0tPmdldFR5cGUoKSk7CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyAkZGVjb3JhdGVkVHlwZSB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICIkbGVuZ3RoIGNvbnRleHQgc3BlY2lmaWMgb2JqZWN0cyB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmNyZWF0ZShJZGVudGlmaWVyOjpDTEFTU19DT05URVhUX1NQRUNJRklDLCB0cnVlLCAkdGhpcy0+dGFnKTsKCiAgICAgICAgcmV0dXJuIGlzX2ludCgkaWRlbnRpZmllcikgPyBjaHIoJGlkZW50aWZpZXIpIDogJGlkZW50aWZpZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50YWc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjpwYXJzZUJpbmFyeUlkZW50aWZpZXIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgJGZpcnN0SWRlbnRpZmllck9jdGV0ID0gb3JkKCRpZGVudGlmaWVyKTsKICAgICAgICBhc3NlcnQoSWRlbnRpZmllcjo6aXNDb250ZXh0U3BlY2lmaWNDbGFzcygkZmlyc3RJZGVudGlmaWVyT2N0ZXQpLCAnaWRlbnRpZmllciBvY3RldCBzaG91bGQgaW5kaWNhdGUgY29udGV4dCBzcGVjaWZpYyBjbGFzcycpOwogICAgICAgIGFzc2VydChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRmaXJzdElkZW50aWZpZXJPY3RldCksICdpZGVudGlmaWVyIG9jdGV0IHNob3VsZCBpbmRpY2F0ZSBjb25zdHJ1Y3RlZCBvYmplY3QnKTsKICAgICAgICAkdGFnID0gSWRlbnRpZmllcjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKCiAgICAgICAgJHRvdGFsQ29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkcmVtYWluaW5nQ29udGVudExlbmd0aCA9ICR0b3RhbENvbnRlbnRMZW5ndGg7CgogICAgICAgICRvZmZzZXRJbmRleE9mRGVjb3JhdGVkT2JqZWN0ID0gJG9mZnNldEluZGV4OwogICAgICAgICRkZWNvcmF0ZWRPYmplY3RzID0gW107CgogICAgICAgIHdoaWxlICgkcmVtYWluaW5nQ29udGVudExlbmd0aCA+IDApIHsKICAgICAgICAgICAgJG5leHRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIC09ICRuZXh0T2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGRlY29yYXRlZE9iamVjdHNbXSA9ICRuZXh0T2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZW1haW5pbmdDb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGV4dC1TcGVjaWZpYyBleHBsaWNpdGx5IHRhZ2dlZCBvYmplY3QgWyR0YWddIHN0YXJ0aW5nIGF0IG9mZnNldCAkb2Zmc2V0SW5kZXhPZkRlY29yYXRlZE9iamVjdCBzcGVjaWZpZXMgYSBsZW5ndGggb2YgJHRvdGFsQ29udGVudExlbmd0aCBvY3RldHMgYnV0ICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIHJlbWFpbiBhZnRlciBwYXJzaW5nIHRoZSBjb250ZW50IiwgJG9mZnNldEluZGV4T2ZEZWNvcmF0ZWRPYmplY3QpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCR0YWcsIC4uLiRkZWNvcmF0ZWRPYmplY3RzKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCR0b3RhbENvbnRlbnRMZW5ndGgpOwogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Identifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgovKioKICogVGhlIElkZW50aWZpZXIgZW5jb2RlcyB0aGUgQVNOLjEgdGFnIChjbGFzcyBhbmQgbnVtYmVyKSBvZiB0aGUgdHlwZSBvZiBhIGRhdGEgdmFsdWUuCiAqCiAqIEV2ZXJ5IGlkZW50aWZpZXIgd2hvc2UgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAwIHRvIDMwIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICoKICogQml0czogICAgOCAgNyAgICA2ICAgIDUgIDQgIDMgIDIgIDEKICogICAgICAgfCBDbGFzcyB8IFAvQyB8ICAgVGFnIG51bWJlciAgfAogKiAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAqCiAqIEJpdHMgOCBhbmQgNyBkZWZpbmUgdGhlIGNsYXNzIG9mIHRoaXMgdHlwZSAoIFVuaXZlcnNhbCwgQXBwbGljYXRpb24sIENvbnRleHQtc3BlY2lmaWMgb3IgUHJpdmF0ZSkuCiAqIEJpdCA2IGVuY29kZWQgd2hldGhlciB0aGlzIHR5cGUgaXMgcHJpbWl0aXZlIG9yIGNvbnN0cnVjdGVkCiAqIFRoZSByZW1haW5pbmcgYml0cyA1IC0gMSBlbmNvZGUgdGhlIHRhZyBudW1iZXIKICovCmNsYXNzIElkZW50aWZpZXIKewogICAgY29uc3QgQ0xBU1NfVU5JVkVSU0FMICAgICAgICA9IDB4MDA7CiAgICBjb25zdCBDTEFTU19BUFBMSUNBVElPTiAgICAgID0gMHgwMTsKICAgIGNvbnN0IENMQVNTX0NPTlRFWFRfU1BFQ0lGSUMgPSAweDAyOwogICAgY29uc3QgQ0xBU1NfUFJJVkFURSAgICAgICAgICA9IDB4MDM7CgogICAgY29uc3QgRU9DICAgICAgICAgICAgICAgPSAweDAwOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBCT09MRUFOICAgICAgICAgICA9IDB4MDE7CiAgICBjb25zdCBJTlRFR0VSICAgICAgICAgICA9IDB4MDI7CiAgICBjb25zdCBCSVRTVFJJTkcgICAgICAgICA9IDB4MDM7CiAgICBjb25zdCBPQ1RFVFNUUklORyAgICAgICA9IDB4MDQ7CiAgICBjb25zdCBOVUxMICAgICAgICAgICAgICA9IDB4MDU7CiAgICBjb25zdCBPQkpFQ1RfSURFTlRJRklFUiA9IDB4MDY7CiAgICBjb25zdCBPQkpFQ1RfREVTQ1JJUFRPUiA9IDB4MDc7CiAgICBjb25zdCBFWFRFUk5BTCAgICAgICAgICA9IDB4MDg7IC8vIHVuc3VwcG9ydGVkIGZvciBub3cKICAgIGNvbnN0IFJFQUwgICAgICAgICAgICAgID0gMHgwOTsgLy8gdW5zdXBwb3J0ZWQgZm9yIG5vdwogICAgY29uc3QgRU5VTUVSQVRFRCAgICAgICAgPSAweDBBOwogICAgY29uc3QgRU1CRURERURfUERWICAgICAgPSAweDBCOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBVVEY4X1NUUklORyAgICAgICA9IDB4MEM7CiAgICBjb25zdCBSRUxBVElWRV9PSUQgICAgICA9IDB4MEQ7CiAgICAvLyB2YWx1ZSAweDBFIGFuZCAweDBGIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgIGNvbnN0IFNFUVVFTkNFICAgICAgICAgID0gMHgzMDsKICAgIGNvbnN0IFNFVCAgICAgICAgICAgICAgID0gMHgzMTsKICAgIGNvbnN0IE5VTUVSSUNfU1RSSU5HICAgID0gMHgxMjsKICAgIGNvbnN0IFBSSU5UQUJMRV9TVFJJTkcgID0gMHgxMzsKICAgIGNvbnN0IFQ2MV9TVFJJTkcgICAgICAgID0gMHgxNDsgLy8gc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFRlbGV0ZXh0U3RyaW5nCiAgICBjb25zdCBWSURFT1RFWFRfU1RSSU5HICA9IDB4MTU7CiAgICBjb25zdCBJQTVfU1RSSU5HICAgICAgICA9IDB4MTY7CiAgICBjb25zdCBVVENfVElNRSAgICAgICAgICA9IDB4MTc7CiAgICBjb25zdCBHRU5FUkFMSVpFRF9USU1FICA9IDB4MTg7CiAgICBjb25zdCBHUkFQSElDX1NUUklORyAgICA9IDB4MTk7CiAgICBjb25zdCBWSVNJQkxFX1NUUklORyAgICA9IDB4MUE7CiAgICBjb25zdCBHRU5FUkFMX1NUUklORyAgICA9IDB4MUI7CiAgICBjb25zdCBVTklWRVJTQUxfU1RSSU5HICA9IDB4MUM7CiAgICBjb25zdCBDSEFSQUNURVJfU1RSSU5HICA9IDB4MUQ7IC8vIFVucmVzdHJpY3RlZCBjaGFyYWN0ZXIgdHlwZQogICAgY29uc3QgQk1QX1NUUklORyAgICAgICAgPSAweDFFOwoKICAgIGNvbnN0IExPTkdfRk9STSAgICAgICAgID0gMHgxRjsKICAgIGNvbnN0IElTX0NPTlNUUlVDVEVEICAgID0gMHgyMDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpZmllci4gU2hvcnQgZm9ybSBpZGVudGlmaWVycyBhcmUgcmV0dXJuZWQgYXMgaW50ZWdlcnMKICAgICAqIGZvciBCQywgbG9uZyBmb3JtIGlkZW50aWZpZXJzIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcgb2Ygb2N0ZXRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNsYXNzCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNDb25zdHJ1Y3RlZAogICAgICogQHBhcmFtIGludCAkdGFnTnVtYmVyCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgaW52YWxpZAogICAgICoKICAgICAqIEByZXR1cm4gaW50fHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgkY2xhc3MsICRpc0NvbnN0cnVjdGVkLCAkdGFnTnVtYmVyKQogICAgewogICAgICAgIGlmICghaXNfbnVtZXJpYygkY2xhc3MpIHx8ICRjbGFzcyA8IHNlbGY6OkNMQVNTX1VOSVZFUlNBTCB8fCAkY2xhc3MgPiBzZWxmOjpDTEFTU19QUklWQVRFKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBjbGFzcyAlZCBnaXZlbicsICRjbGFzcykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19ib29sKCRpc0NvbnN0cnVjdGVkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJcJGlzQ29uc3RydWN0ZWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUgKCRpc0NvbnN0cnVjdGVkIGdpdmVuKSIpOwogICAgICAgIH0KCiAgICAgICAgJHRhZ051bWJlciA9IHNlbGY6Om1ha2VOdW1lcmljKCR0YWdOdW1iZXIpOwogICAgICAgIGlmICgkdGFnTnVtYmVyIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgJHRhZ051bWJlciAlZCBnaXZlbi4gWW91IGNhbiBvbmx5IHVzZSBwb3NpdGl2ZSBpbnRlZ2Vycy4nLCAkdGFnTnVtYmVyKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gKCRjbGFzcyA8PCA2KSB8ICgkaXNDb25zdHJ1Y3RlZCA8PCA1KSB8ICR0YWdOdW1iZXI7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3RPY3RldCA9ICgkY2xhc3MgPDwgNikgfCAoJGlzQ29uc3RydWN0ZWQgPDwgNSkgfCBzZWxmOjpMT05HX0ZPUk07CgogICAgICAgIC8vIFRhZyBudW1iZXJzIGZvcm1hdHRlZCBpbiBsb25nIGZvcm0gYXJlIGJhc2UtMTI4IGVuY29kZWQuIFNlZSBYLjYwOSM4LjEuMi40CiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCkuQmFzZTEyODo6ZW5jb2RlKCR0YWdOdW1iZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb25zdHJ1Y3RlZCgkaWRlbnRpZmllck9jdGV0KQogICAgewogICAgICAgIHJldHVybiAoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OklTX0NPTlNUUlVDVEVEKSA9PT0gc2VsZjo6SVNfQ09OU1RSVUNURUQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0xvbmdGb3JtKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgcmV0dXJuICgkaWRlbnRpZmllck9jdGV0ICYgc2VsZjo6TE9OR19GT1JNKSA9PT0gc2VsZjo6TE9OR19GT1JNOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBtYXBwZWQgQVNOLjEgdHlwZSB3aXRoIGEgcHJlY2VkaW5nICJBU04uMSAiLgogICAgICoKICAgICAqIEV4YW1wbGU6IEFTTi4xIE9jdGV0IFN0cmluZwogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0U2hvcnROYW1lKCkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaWRlbnRpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZSgkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICAkdHlwZU5hbWUgPSBzdGF0aWM6OmdldFNob3J0TmFtZSgkaWRlbnRpZmllcik7CgogICAgICAgIGlmICgoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OkxPTkdfRk9STSkgPCBzZWxmOjpMT05HX0ZPUk0pIHsKICAgICAgICAgICAgJHR5cGVOYW1lID0gIkFTTi4xIHskdHlwZU5hbWV9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdHlwZU5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNob3J0IHZlcnNpb24gb2YgdGhlIHR5cGUgbmFtZS4KICAgICAqCiAgICAgKiBJZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciBvY3RldCBjYW4gYmUgbWFwcGVkIHRvIGEga25vd24gdW5pdmVyc2FsIHR5cGUgdGhpcyB3aWxsCiAgICAgKiByZXR1cm4gaXRzIG5hbWUuIEVsc2UgSWRlbnRpZmllcjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigpIGlzIHVzZWQgdG8gcmV0cmlldmUKICAgICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpZGVudGlmaWVyLgogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0TmFtZSgpCiAgICAgKiBAc2VlIElkZW50aWZpZXI6OmdldENsYXNzRGVzY3JpcHRpb24oKQogICAgICoKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgc3dpdGNoICgkaWRlbnRpZmllck9jdGV0KSB7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6RU9DOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbmQtb2YtY29udGVudHMgb2N0ZXQnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gJ0Jvb2xlYW4nOwogICAgICAgICAgICBjYXNlIHNlbGY6OklOVEVHRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0ludGVnZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJJVFNUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnQml0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09jdGV0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVMTDoKICAgICAgICAgICAgICAgIHJldHVybiAnTlVMTCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09iamVjdCBJZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnT2JqZWN0IERlc2NyaXB0b3InOwogICAgICAgICAgICBjYXNlIHNlbGY6OkVYVEVSTkFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdFeHRlcm5hbCBUeXBlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdSZWFsJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbnVtZXJhdGVkJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTUJFRERFRF9QRFY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0VtYmVkZGVkIFBEVic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VURjggU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUxBVElWRV9PSUQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlbGF0aXZlIE9JRCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlcXVlbmNlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTRVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NldCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVNRVJJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ051bWVyaWMgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQUklOVEFCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdQcmludGFibGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdUNjEgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpWSURFT1RFWFRfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdWaWRlb3RleHQgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpJQTVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdJQTUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiAnVVRDIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0dlbmVyYWxpemVkIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdSQVBISUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdHcmFwaGljIFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VklTSUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Zpc2libGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnR2VuZXJhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlVOSVZFUlNBTF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VuaXZlcnNhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNIQVJBQ1RFUl9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NoYXJhY3RlciBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJNUF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0JNUCBTdHJpbmcnOwoKICAgICAgICAgICAgY2FzZSAweDBFOgogICAgICAgICAgICAgICAgcmV0dXJuICdSRVNFUlZFRCAoMHgwRSknOwogICAgICAgICAgICBjYXNlIDB4MEY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JFU0VSVkVEICgweDBGKSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OkxPTkdfRk9STToKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gc2VsZjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigkaWRlbnRpZmllcik7CgogICAgICAgICAgICAgICAgaWYgKGlzX2ludCgkaWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICIkY2xhc3NEZXNjcmlwdGlvbiAoMHgiLnN0cnRvdXBwZXIoYmluMmhleCgkaWRlbnRpZmllcikpLicpJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIGdpdmVuIGlkZW50aWZpZXIgb2N0ZXQuCiAgICAgKgogICAgICogVGhlIGZpcnN0IHRocmVlIChtb3N0IHNpZ25pZmljYW50KSBieXRlcyBhcmUgZXZhbHVhdGVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEKICAgICAqIGNvbnN0cnVjdGVkIG9yIHByaW1pdGl2ZSB0eXBlIGFuZCBpZiBpdCBpcyBlaXRoZXIgdW5pdmVyc2FsLCBhcHBsaWNhdGlvbiwgY29udGV4dC1zcGVjaWZpYyBvcgogICAgICogcHJpdmF0ZS4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICogICAgIENvbnN0cnVjdGVkIGNvbnRleHQtc3BlY2lmaWMKICAgICAqICAgICBQcmltaXRpdmUgdW5pdmVyc2FsCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGlkZW50aWZpZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsYXNzRGVzY3JpcHRpb24oJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgaWYgKHNlbGY6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gPSAnQ29uc3RydWN0ZWQgJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiA9ICdQcmltaXRpdmUgJzsKICAgICAgICB9CiAgICAgICAgJGNsYXNzQml0cyA9ICRpZGVudGlmaWVyT2N0ZXQgPj4gNjsKICAgICAgICBzd2l0Y2ggKCRjbGFzc0JpdHMpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDTEFTU19VTklWRVJTQUw6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAndW5pdmVyc2FsJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOgogICAgICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gLj0gJ2FwcGxpY2F0aW9uJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0NPTlRFWFRfU1BFQ0lGSUM6CiAgICAgICAgICAgICAgICAkdGFnTnVtYmVyID0gc2VsZjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gIlskdGFnTnVtYmVyXSBDb250ZXh0LXNwZWNpZmljIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX1BSSVZBVEU6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAncHJpdmF0ZSc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIklOVkFMSUQgSURFTlRJRklFUiBPQ1RFVDogeyRpZGVudGlmaWVyT2N0ZXR9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xhc3NEZXNjcmlwdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdOdW1iZXIoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CiAgICAgICAgJHRhZ051bWJlciA9ICRmaXJzdE9jdGV0ICYgc2VsZjo6TE9OR19GT1JNOwoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gJHRhZ051bWJlcjsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udW1lcmljKCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBCYXNlMTI4OjpkZWNvZGUoc3Vic3RyKCRpZGVudGlmaWVyLCAxKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1VuaXZlcnNhbENsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19VTklWRVJTQUw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0FwcGxpY2F0aW9uQ2xhc3MoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CgogICAgICAgIHJldHVybiAkaWRlbnRpZmllciA+PiA2ID09IHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb250ZXh0U3BlY2lmaWNDbGFzcygkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyID4+IDYgPT0gc2VsZjo6Q0xBU1NfQ09OVEVYVF9TUEVDSUZJQzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUHJpdmF0ZUNsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19QUklWQVRFOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG1ha2VOdW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgaWYgKCFpc19udW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgIHJldHVybiBvcmQoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyT2N0ZXQ7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/OID.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIE9JRAp7CiAgICBjb25zdCBSU0FfRU5DUllQVElPTiAgICAgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOwogICAgY29uc3QgTUQ1X1dJVEhfUlNBX0VOQ1JZUFRJT04gICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuMS40JzsKICAgIGNvbnN0IFNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjEuNSc7CiAgICBjb25zdCBTSEEyNTZfV0lUSF9SU0FfU0lHTkFUVVJFICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS4xLjExJzsKICAgIGNvbnN0IFBLQ1M5X0VNQUlMICAgICAgICAgICAgICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuMSc7CiAgICBjb25zdCBQS0NTOV9VTlNUUlVDVFVSRURfTkFNRSAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjInOwogICAgY29uc3QgUEtDUzlfQ09OVEVOVF9UWVBFICAgICAgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS4zJzsKICAgIGNvbnN0IFBLQ1M5X01FU1NBR0VfRElHRVNUICAgICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuNCc7CiAgICBjb25zdCBQS0NTOV9TSUdOSU5HX1RJTUUgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjUnOwogICAgY29uc3QgUEtDUzlfRVhURU5TSU9OX1JFUVVFU1QgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS4xNCc7CgogICAgLy8gY2VydGlmaWNhdGUgZXh0ZW5zaW9uIGlkZW50aWZpZXIKICAgIGNvbnN0IENFUlRfRVhUX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFIgICA9ICcyLjUuMjkuOSc7CiAgICBjb25zdCBDRVJUX0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSICAgPSAnMi41LjI5LjE0JzsKICAgIGNvbnN0IENFUlRfRVhUX0tFWV9VU0FHRSAgICAgICAgICAgICAgICA9ICcyLjUuMjkuMTUnOwogICAgY29uc3QgQ0VSVF9FWFRfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9EID0gJzIuNS4yOS4xNic7CiAgICBjb25zdCBDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FICAgICAgICAgPSAnMi41LjI5LjE3JzsKICAgIGNvbnN0IENFUlRfRVhUX0lTU1VFUl9BTFRfTkFNRSAgICAgICAgICA9ICcyLjUuMjkuMTgnOwogICAgY29uc3QgQ0VSVF9FWFRfQkFTSUNfQ09OU1RSQUlOVFMgICAgICAgID0gJzIuNS4yOS4xOSc7CiAgICBjb25zdCBDRVJUX0VYVF9DUkxfTlVNQkVSICAgICAgICAgICAgICAgPSAnMi41LjI5LjIwJzsKICAgIGNvbnN0IENFUlRfRVhUX1JFQVNPTl9DT0RFICAgICAgICAgICAgICA9ICcyLjUuMjkuMjEnOwogICAgY29uc3QgQ0VSVF9FWFRfSU5WQUxJRElUWV9EQVRFICAgICAgICAgID0gJzIuNS4yOS4yNCc7CiAgICBjb25zdCBDRVJUX0VYVF9ERUxUQV9DUkxfSU5ESUNBVE9SICAgICAgPSAnMi41LjI5LjI3JzsKICAgIGNvbnN0IENFUlRfRVhUX0lTU1VJTkdfRElTVF9QT0lOVCAgICAgICA9ICcyLjUuMjkuMjgnOwogICAgY29uc3QgQ0VSVF9FWFRfQ0VSVF9JU1NVRVIgICAgICAgICAgICAgID0gJzIuNS4yOS4yOSc7CiAgICBjb25zdCBDRVJUX0VYVF9OQU1FX0NPTlNUUkFJTlRTICAgICAgICAgPSAnMi41LjI5LjMwJzsKICAgIGNvbnN0IENFUlRfRVhUX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTICA9ICcyLjUuMjkuMzEnOwogICAgY29uc3QgQ0VSVF9FWFRfQ0VSVF9QT0xJQ0lFUyAgICAgICAgICAgID0gJzIuNS4yOS4zMic7CiAgICBjb25zdCBDRVJUX0VYVF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgPSAnMi41LjI5LjM1JzsKICAgIGNvbnN0IENFUlRfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSAgICAgICA9ICcyLjUuMjkuMzcnOwoKICAgIC8vIHN0YW5kYXJkIGNlcnRpZmljYXRlIGZpbGVzCiAgICBjb25zdCBDT01NT05fTkFNRSAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMyc7CiAgICBjb25zdCBTVVJOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNCc7CiAgICBjb25zdCBTRVJJQUxfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNSc7CiAgICBjb25zdCBDT1VOVFJZX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNic7CiAgICBjb25zdCBMT0NBTElUWV9OQU1FICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuNyc7CiAgICBjb25zdCBTVEFURV9PUl9QUk9WSU5DRV9OQU1FICAgICAgICAgICAgPSAnMi41LjQuOCc7CiAgICBjb25zdCBTVFJFRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuOSc7CiAgICBjb25zdCBPUkdBTklaQVRJT05fTkFNRSAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTAnOwogICAgY29uc3QgT1VfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjExJzsKICAgIGNvbnN0IFRJVExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xMic7CiAgICBjb25zdCBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTMnOwogICAgY29uc3QgUE9TVEFMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjE2JzsKICAgIGNvbnN0IFBPU1RBTF9DT0RFICAgICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xNyc7CiAgICBjb25zdCBBVVRIT1JJVFlfUkVWT0NBVElPTl9MSVNUICAgICAgICAgPSAnMi41LjQuMzgnOwoKICAgIGNvbnN0IEFVVEhPUklUWV9JTkZPUk1BVElPTl9BQ0NFU1MgICAgICA9ICcxLjMuNi4xLjUuNS43LjEuMSc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBvYmplY3QgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBTb21lIE9JRHMgYXJlIHNhdmVkIGFzIGNsYXNzIGNvbnN0YW50cyBpbiB0aGlzIGNsYXNzLgogICAgICogSWYgdGhlIHdhbnRlZCBvaWRTdHJpbmcgaXMgbm90IGFtb25nIHRoZW0sIHRoaXMgbWV0aG9kIHdpbGwKICAgICAqIHF1ZXJ5IGh0dHA6Ly9vaWQtaW5mby5jb20gZm9yIHRoZSByaWdodCBuYW1lLgogICAgICogVGhpcyBiZWhhdmlvciBjYW4gYmUgc3VwcHJlc3NlZCBieSBzZXR0aW5nIHRoZSBzZWNvbmQgbWV0aG9kIHBhcmFtZXRlciB0byBmYWxzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvaWRTdHJpbmcKICAgICAqIEBwYXJhbSBib29sICRsb2FkRnJvbVdlYgogICAgICoKICAgICAqIEBzZWUgc2VsZjo6bG9hZEZyb21XZWIoJG9pZFN0cmluZykKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWUoJG9pZFN0cmluZywgJGxvYWRGcm9tV2ViID0gdHJ1ZSkKICAgIHsKICAgICAgICAkb2lkcyA9IFsKICAgICAgICAgICAgJzEuMicgPT4gJ0lTTyBNZW1iZXIgQm9keScsCiAgICAgICAgICAgICcxLjMnID0+ICdvcmcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuOC4xLjEnID0+ICdobWFjLW1kNScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS44LjEuMicgPT4gJ2htYWMtc2hhMScsCiAgICAgICAgICAgICcxLjMuMTMyJyA9PiAnY2VydGljb20tYXJjJywKICAgICAgICAgICAgJzIuMjMnID0+ICdJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbnMnLAogICAgICAgICAgICAnMi4yMy40MycgPT4gJ3dhcCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEnID0+ICd3YXAtd3NnJywKICAgICAgICAgICAgJzIuNS4xLjUnID0+ICdTZWxlY3RlZCBBdHRyaWJ1dGUgVHlwZXMnLAogICAgICAgICAgICAnMi41LjEuNS41NScgPT4gJ2NsZWFyYW5jZScsCiAgICAgICAgICAgICcxLjIuODQwJyA9PiAnSVNPIFVTIE1lbWJlciBCb2R5JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDAnID0+ICdYOS41NycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQwLjQnID0+ICdYOS41NyBDTSA/JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDAuNC4xJyA9PiAnZHNhRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQwLjQuMycgPT4gJ2RzYVdpdGhTSEExJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUnID0+ICdBTlNJIFg5LjYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMScgPT4gJ1g5LTYyX2lkLWZpZWxkVHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjEuMScgPT4gJ1g5LTYyX3ByaW1lLWZpZWxkJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yJyA9PiAnWDktNjJfY2hhcmFjdGVyaXN0aWMtdHdvLWZpZWxkJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yLjMnID0+ICdYOS02Ml9pZC1jaGFyYWN0ZXJpc3RpYy10d28tYmFzaXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4xLjIuMy4xJyA9PiAnWDktNjJfb25CYXNpcycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjEuMi4zLjInID0+ICdYOS02Ml90cEJhc2lzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMS4yLjMuMycgPT4gJ1g5LTYyX3BwQmFzaXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4yJyA9PiAnWDktNjJfaWQtcHVibGljS2V5VHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjIuMScgPT4gJ1g5LTYyX2lkLWVjUHVibGljS2V5JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMycgPT4gJ1g5LTYyX2VsbGlwdGljQ3VydmUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAnID0+ICdYOS02Ml9jLVR3b0N1cnZlJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEnID0+ICdYOS02Ml9jMnBuYjE2M3YxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjInID0+ICdYOS02Ml9jMnBuYjE2M3YyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjMnID0+ICdYOS02Ml9jMnBuYjE2M3YzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjQnID0+ICdYOS02Ml9jMnBuYjE3NnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjUnID0+ICdYOS02Ml9jMnRuYjE5MXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjYnID0+ICdYOS02Ml9jMnRuYjE5MXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjcnID0+ICdYOS02Ml9jMnRuYjE5MXYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjgnID0+ICdYOS02Ml9jMm9uYjE5MXY0JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjknID0+ICdYOS02Ml9jMm9uYjE5MXY1JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEwJyA9PiAnWDktNjJfYzJwbmIyMDh3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xMScgPT4gJ1g5LTYyX2MydG5iMjM5djEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTInID0+ICdYOS02Ml9jMnRuYjIzOXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjEzJyA9PiAnWDktNjJfYzJ0bmIyMzl2MycsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xNCcgPT4gJ1g5LTYyX2Myb25iMjM5djQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTUnID0+ICdYOS02Ml9jMm9uYjIzOXY1JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjE2JyA9PiAnWDktNjJfYzJwbmIyNzJ3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4xNycgPT4gJ1g5LTYyX2MycG5iMzA0dzEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjAuMTgnID0+ICdYOS02Ml9jMnRuYjM1OXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4wLjE5JyA9PiAnWDktNjJfYzJwbmIzNjh3MScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjMuMC4yMCcgPT4gJ1g5LTYyX2MydG5iNDMxcjEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS4zLjEnID0+ICdYOS02Ml9wcmltZUN1cnZlJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjEnID0+ICdYOS02Ml9wcmltZTE5MnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjInID0+ICdYOS02Ml9wcmltZTE5MnYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjMnID0+ICdYOS02Ml9wcmltZTE5MnYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjQnID0+ICdYOS02Ml9wcmltZTIzOXYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjUnID0+ICdYOS02Ml9wcmltZTIzOXYyJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjYnID0+ICdYOS02Ml9wcmltZTIzOXYzJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuMy4xLjcnID0+ICdYOS02Ml9wcmltZTI1NnYxJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuNCcgPT4gJ1g5LTYyX2lkLWVjU2lnVHlwZScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMScgPT4gJ2VjZHNhLXdpdGgtU0hBMScsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMicgPT4gJ2VjZHNhLXdpdGgtUmVjb21tZW5kZWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS40LjMnID0+ICdlY2RzYS13aXRoLVNwZWNpZmllZCcsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMy4xJyA9PiAnZWNkc2Etd2l0aC1TSEEyMjQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMDA0NS40LjMuMicgPT4gJ2VjZHNhLXdpdGgtU0hBMjU2JywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDUuNC4zLjMnID0+ICdlY2RzYS13aXRoLVNIQTM4NCcsCiAgICAgICAgICAgICcxLjIuODQwLjEwMDQ1LjQuMy40JyA9PiAnZWNkc2Etd2l0aC1TSEE1MTInLAogICAgICAgICAgICAnMS4zLjEzMi4wJyA9PiAnc2VjZ19lbGxpcHRpY0N1cnZlJywKICAgICAgICAgICAgJzIuMjMuNDMuMS40JyA9PiAnd2FwLXdzZy1pZG0tZWNpZCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4xJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4zJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMycsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC40JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC41JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC42JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNicsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC43JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzNycsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC44JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzOCcsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC45JyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzOScsCiAgICAgICAgICAgICcyLjIzLjQzLjEuNC4xMCcgPT4gJ3dhcC13c2ctaWRtLWVjaWQtd3RsczEwJywKICAgICAgICAgICAgJzIuMjMuNDMuMS40LjExJyA9PiAnd2FwLXdzZy1pZG0tZWNpZC13dGxzMTEnLAogICAgICAgICAgICAnMi4yMy40My4xLjQuMTInID0+ICd3YXAtd3NnLWlkbS1lY2lkLXd0bHMxMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzUzMy43LjY2LjEwJyA9PiAnY2FzdDUtY2JjJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTMzLjcuNjYuMTInID0+ICdwYmVXaXRoTUQ1QW5kQ2FzdDVDQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1MzMuNy42Ni4xMycgPT4gJ3Bhc3N3b3JkIGJhc2VkIE1BQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzUzMy43LjY2LjMwJyA9PiAnRGlmZmllLUhlbGxtYW4gYmFzZWQgTUFDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5JyA9PiAnUlNBIERhdGEgU2VjdXJpdHksIEluYy4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMScgPT4gJ1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIFBLQ1MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xJyA9PiAncGtjczEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnID0+ICdyc2FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4yJyA9PiAnbWQyV2l0aFJTQUVuY3J5cHRpb24nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjMnID0+ICdtZDRXaXRoUlNBRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEuNCcgPT4gJ21kNVdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS41JyA9PiAnc2hhMVdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS43JyA9PiAncnNhZXNPYWVwJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS44JyA9PiAnbWdmMScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEuOScgPT4gJ3BTcGVjaWZpZWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjEwJyA9PiAncnNhc3NhUHNzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMScgPT4gJ3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMicgPT4gJ3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xMycgPT4gJ3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMS4xNCcgPT4gJ3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMycgPT4gJ3BrY3MzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMy4xJyA9PiAnZGhLZXlBZ3JlZW1lbnQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41JyA9PiAncGtjczUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjEnID0+ICdwYmVXaXRoTUQyQW5kREVTLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMycgPT4gJ3BiZVdpdGhNRDVBbmRERVMtQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNS40JyA9PiAncGJlV2l0aE1EMkFuZFJDMi1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjYnID0+ICdwYmVXaXRoTUQ1QW5kUkMyLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTAnID0+ICdwYmVXaXRoU0hBMUFuZERFUy1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS41LjExJyA9PiAncGJlV2l0aFNIQTFBbmRSQzItQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNS4xMicgPT4gJ1BCS0RGMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTMnID0+ICdQQkVTMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjUuMTQnID0+ICdQQk1BQzEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43JyA9PiAncGtjczcnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43LjEnID0+ICdwa2NzNy1kYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNy4yJyA9PiAncGtjczctc2lnbmVkRGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjcuMycgPT4gJ3BrY3M3LWVudmVsb3BlZERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS43LjQnID0+ICdwa2NzNy1zaWduZWRBbmRFbnZlbG9wZWREYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuNy41JyA9PiAncGtjczctZGlnZXN0RGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjcuNicgPT4gJ3BrY3M3LWVuY3J5cHRlZERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45JyA9PiAncGtjczknLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjEnID0+ICdlbWFpbEFkZHJlc3MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjInID0+ICd1bnN0cnVjdHVyZWROYW1lJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4zJyA9PiAnY29udGVudFR5cGUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjQnID0+ICdtZXNzYWdlRGlnZXN0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS41JyA9PiAnc2lnbmluZ1RpbWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjYnID0+ICdjb3VudGVyc2lnbmF0dXJlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS43JyA9PiAnY2hhbGxlbmdlUGFzc3dvcmQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjgnID0+ICd1bnN0cnVjdHVyZWRBZGRyZXNzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS45JyA9PiAnZXh0ZW5kZWRDZXJ0aWZpY2F0ZUF0dHJpYnV0ZXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE0JyA9PiAnRXh0ZW5zaW9uIFJlcXVlc3QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE1JyA9PiAnUy9NSU1FIENhcGFiaWxpdGllcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYnID0+ICdTL01JTUUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAnID0+ICdpZC1zbWltZS1tb2QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEnID0+ICdpZC1zbWltZS1jdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMicgPT4gJ2lkLXNtaW1lLWFhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4zJyA9PiAnaWQtc21pbWUtYWxnJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi40JyA9PiAnaWQtc21pbWUtY2QnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjUnID0+ICdpZC1zbWltZS1zcHEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYnID0+ICdpZC1zbWltZS1jdGknLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMScgPT4gJ2lkLXNtaW1lLW1vZC1jbXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMicgPT4gJ2lkLXNtaW1lLW1vZC1lc3MnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuMycgPT4gJ2lkLXNtaW1lLW1vZC1vaWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuNCcgPT4gJ2lkLXNtaW1lLW1vZC1tc2ctdjMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuNScgPT4gJ2lkLXNtaW1lLW1vZC1ldHMtZVNpZ25hdHVyZS04OCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMC42JyA9PiAnaWQtc21pbWUtbW9kLWV0cy1lU2lnbmF0dXJlLTk3JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4wLjcnID0+ICdpZC1zbWltZS1tb2QtZXRzLWVTaWdQb2xpY3ktODgnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjAuOCcgPT4gJ2lkLXNtaW1lLW1vZC1ldHMtZVNpZ1BvbGljeS05NycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4xJyA9PiAnaWQtc21pbWUtY3QtcmVjZWlwdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4yJyA9PiAnaWQtc21pbWUtY3QtYXV0aERhdGEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjEuMycgPT4gJ2lkLXNtaW1lLWN0LXB1Ymxpc2hDZXJ0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjQnID0+ICdpZC1zbWltZS1jdC1UU1RJbmZvJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjUnID0+ICdpZC1zbWltZS1jdC1URFRJbmZvJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjYnID0+ICdpZC1zbWltZS1jdC1jb250ZW50SW5mbycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS43JyA9PiAnaWQtc21pbWUtY3QtRFZDU1JlcXVlc3REYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjgnID0+ICdpZC1zbWltZS1jdC1EVkNTUmVzcG9uc2VEYXRhJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4xLjknID0+ICdpZC1zbWltZS1jdC1jb21wcmVzc2VkRGF0YScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMS4yNycgPT4gJ2lkLWN0LWFzY2lpVGV4dFdpdGhDUkxGJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjEnID0+ICdpZC1zbWltZS1hYS1yZWNlaXB0UmVxdWVzdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yJyA9PiAnaWQtc21pbWUtYWEtc2VjdXJpdHlMYWJlbCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4zJyA9PiAnaWQtc21pbWUtYWEtbWxFeHBhbmRIaXN0b3J5JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjQnID0+ICdpZC1zbWltZS1hYS1jb250ZW50SGludCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi41JyA9PiAnaWQtc21pbWUtYWEtbXNnU2lnRGlnZXN0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjYnID0+ICdpZC1zbWltZS1hYS1lbmNhcENvbnRlbnRUeXBlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjcnID0+ICdpZC1zbWltZS1hYS1jb250ZW50SWRlbnRpZmllcicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi44JyA9PiAnaWQtc21pbWUtYWEtbWFjVmFsdWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuOScgPT4gJ2lkLXNtaW1lLWFhLWVxdWl2YWxlbnRMYWJlbHMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTAnID0+ICdpZC1zbWltZS1hYS1jb250ZW50UmVmZXJlbmNlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjExJyA9PiAnaWQtc21pbWUtYWEtZW5jcnlwS2V5UHJlZicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xMicgPT4gJ2lkLXNtaW1lLWFhLXNpZ25pbmdDZXJ0aWZpY2F0ZScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xMycgPT4gJ2lkLXNtaW1lLWFhLXNtaW1lRW5jcnlwdENlcnRzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjE0JyA9PiAnaWQtc21pbWUtYWEtdGltZVN0YW1wVG9rZW4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTUnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnUG9saWN5SWQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTYnID0+ICdpZC1zbWltZS1hYS1ldHMtY29tbWl0bWVudFR5cGUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTcnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnbmVyTG9jYXRpb24nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMTgnID0+ICdpZC1zbWltZS1hYS1ldHMtc2lnbmVyQXR0cicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4xOScgPT4gJ2lkLXNtaW1lLWFhLWV0cy1vdGhlclNpZ0NlcnQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjAnID0+ICdpZC1zbWltZS1hYS1ldHMtY29udGVudFRpbWVzdGFtcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yMScgPT4gJ2lkLXNtaW1lLWFhLWV0cy1DZXJ0aWZpY2F0ZVJlZnMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjInID0+ICdpZC1zbWltZS1hYS1ldHMtUmV2b2NhdGlvblJlZnMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjMnID0+ICdpZC1zbWltZS1hYS1ldHMtY2VydFZhbHVlcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yNCcgPT4gJ2lkLXNtaW1lLWFhLWV0cy1yZXZvY2F0aW9uVmFsdWVzJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI1JyA9PiAnaWQtc21pbWUtYWEtZXRzLWVzY1RpbWVTdGFtcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMi4yNicgPT4gJ2lkLXNtaW1lLWFhLWV0cy1jZXJ0Q1JMVGltZXN0YW1wJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI3JyA9PiAnaWQtc21pbWUtYWEtZXRzLWFyY2hpdmVUaW1lU3RhbXAnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjIuMjgnID0+ICdpZC1zbWltZS1hYS1zaWduYXR1cmVUeXBlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4yLjI5JyA9PiAnaWQtc21pbWUtYWEtZHZjcy1kdmMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuMScgPT4gJ2lkLXNtaW1lLWFsZy1FU0RId2l0aDNERVMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuMicgPT4gJ2lkLXNtaW1lLWFsZy1FU0RId2l0aFJDMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy4zJyA9PiAnaWQtc21pbWUtYWxnLTNERVN3cmFwJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi4zLjQnID0+ICdpZC1zbWltZS1hbGctUkMyd3JhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy41JyA9PiAnaWQtc21pbWUtYWxnLUVTREgnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuNicgPT4gJ2lkLXNtaW1lLWFsZy1DTVMzREVTd3JhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy43JyA9PiAnaWQtc21pbWUtYWxnLUNNU1JDMndyYXAnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjMuOScgPT4gJ2lkLWFsZy1QV1JJLUtFSycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuNC4xJyA9PiAnaWQtc21pbWUtY2QtbGRhcCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuNS4xJyA9PiAnaWQtc21pbWUtc3BxLWV0cy1zcXQtdXJpJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi41LjInID0+ICdpZC1zbWltZS1zcHEtZXRzLXNxdC11bm90aWNlJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjEnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZPcmlnaW4nLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuMicgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZlJlY2VpcHQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuMycgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkRlbGl2ZXJ5JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjQnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZTZW5kZXInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjE2LjYuNScgPT4gJ2lkLXNtaW1lLWN0aS1ldHMtcHJvb2ZPZkFwcHJvdmFsJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4xNi42LjYnID0+ICdpZC1zbWltZS1jdGktZXRzLXByb29mT2ZDcmVhdGlvbicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjAnID0+ICdmcmllbmRseU5hbWUnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIxJyA9PiAnbG9jYWxLZXlJRCcsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTcuMScgPT4gJ01pY3Jvc29mdCBDU1AgTmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTcuMicgPT4gJ01pY3Jvc29mdCBMb2NhbCBLZXkgc2V0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuOS4yMicgPT4gJ2NlcnRUeXBlcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjIuMScgPT4gJ3g1MDlDZXJ0aWZpY2F0ZScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMjIuMicgPT4gJ3Nkc2lDZXJ0aWZpY2F0ZScsCgogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIzJyA9PiAnY3JsVHlwZXMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS45LjIzLjEnID0+ICd4NTA5Q3JsJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTInID0+ICdwa2NzMTInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xJyA9PiAncGtjczEyLXBiZWlkcycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEuMScgPT4gJ3BiZVdpdGhTSEExQW5kMTI4Qml0UkM0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMS4yJyA9PiAncGJlV2l0aFNIQTFBbmQ0MEJpdFJDNCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEuMycgPT4gJ3BiZVdpdGhTSEExQW5kMy1LZXlUcmlwbGVERVMtQ0JDJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMS40JyA9PiAncGJlV2l0aFNIQTFBbmQyLUtleVRyaXBsZURFUy1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xLjUnID0+ICdwYmVXaXRoU0hBMUFuZDEyOEJpdFJDMi1DQkMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xLjYnID0+ICdwYmVXaXRoU0hBMUFuZDQwQml0UkMyLUNCQycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwJyA9PiAncGtjczEyLVZlcnNpb24xJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMTAuMScgPT4gJ3BrY3MxMi1CYWdJZHMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xMC4xLjEnID0+ICdrZXlCYWcnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xMi4xMC4xLjInID0+ICdwa2NzOFNocm91ZGVkS2V5QmFnJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjEuMTIuMTAuMS4zJyA9PiAnY2VydEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNCcgPT4gJ2NybEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNScgPT4gJ3NlY3JldEJhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjEyLjEwLjEuNicgPT4gJ3NhZmVDb250ZW50c0JhZycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjInID0+ICdtZDInLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi40JyA9PiAnbWQ0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjIuNScgPT4gJ21kNScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjYnID0+ICdobWFjV2l0aE1ENScsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4yLjcnID0+ICdobWFjV2l0aFNIQTEnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi44JyA9PiAnaG1hY1dpdGhTSEEyMjQnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi45JyA9PiAnaG1hY1dpdGhTSEEyNTYnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMi4xMCcgPT4gJ2htYWNXaXRoU0hBMzg0JywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjIuMTEnID0+ICdobWFjV2l0aFNIQTUxMicsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjInID0+ICdyYzItY2JjJywKICAgICAgICAgICAgJzEuMi44NDAuMTEzNTQ5LjMuNCcgPT4gJ3JjNCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjcnID0+ICdkZXMtZWRlMy1jYmMnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMy44JyA9PiAncmM1LWNiYycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMi4xLjE0JyA9PiAnTWljcm9zb2Z0IEV4dGVuc2lvbiBSZXF1ZXN0JywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS4yLjEuMjEnID0+ICdNaWNyb3NvZnQgSW5kaXZpZHVhbCBDb2RlIFNpZ25pbmcnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjIuMS4yMicgPT4gJ01pY3Jvc29mdCBDb21tZXJjaWFsIENvZGUgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTAuMy4xJyA9PiAnTWljcm9zb2Z0IFRydXN0IExpc3QgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMTAuMy4zJyA9PiAnTWljcm9zb2Z0IFNlcnZlciBHYXRlZCBDcnlwdG8nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjEwLjMuNCcgPT4gJ01pY3Jvc29mdCBFbmNyeXB0ZWQgRmlsZSBTeXN0ZW0nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMzExLjIwLjIuMicgPT4gJ01pY3Jvc29mdCBTbWFydGNhcmRsb2dpbicsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuMjAuMi4zJyA9PiAnTWljcm9zb2Z0IFVuaXZlcnNhbCBQcmluY2lwYWwgTmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4xODguNy4xLjEuMicgPT4gJ2lkZWEtY2JjJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMwMjkuMS4yJyA9PiAnYmYtY2JjJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcnID0+ICdQS0lYJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMCcgPT4gJ2lkLXBraXgtbW9kJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMScgPT4gJ2lkLXBlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMicgPT4gJ2lkLXF0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMycgPT4gJ2lkLWtwJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNCcgPT4gJ2lkLWl0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNScgPT4gJ2lkLXBraXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42JyA9PiAnaWQtYWxnJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNycgPT4gJ2lkLWNtYycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjgnID0+ICdpZC1vbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjknID0+ICdpZC1wZGEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMCcgPT4gJ2lkLWFjYScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjExJyA9PiAnaWQtcWNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTInID0+ICdpZC1jY3QnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yMScgPT4gJ2lkLXBwbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4JyA9PiAnaWQtYWQnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEnID0+ICdpZC1wa2l4MS1leHBsaWNpdC04OCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMicgPT4gJ2lkLXBraXgxLWltcGxpY2l0LTg4JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC4zJyA9PiAnaWQtcGtpeDEtZXhwbGljaXQtOTMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjQnID0+ICdpZC1wa2l4MS1pbXBsaWNpdC05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuNScgPT4gJ2lkLW1vZC1jcm1mJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC42JyA9PiAnaWQtbW9kLWNtYycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuNycgPT4gJ2lkLW1vZC1rZWEtcHJvZmlsZS04OCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuOCcgPT4gJ2lkLW1vZC1rZWEtcHJvZmlsZS05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuOScgPT4gJ2lkLW1vZC1jbXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEwJyA9PiAnaWQtbW9kLXF1YWxpZmllZC1jZXJ0LTg4JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMC4xMScgPT4gJ2lkLW1vZC1xdWFsaWZpZWQtY2VydC05MycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTInID0+ICdpZC1tb2QtYXR0cmlidXRlLWNlcnQnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4wLjEzJyA9PiAnaWQtbW9kLXRpbWVzdGFtcC1wcm90b2NvbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTQnID0+ICdpZC1tb2Qtb2NzcCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTUnID0+ICdpZC1tb2QtZHZjcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjAuMTYnID0+ICdpZC1tb2QtY21wMjAwMCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuMScgPT4gJ0F1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjInID0+ICdCaW9tZXRyaWMgSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuMycgPT4gJ3FjU3RhdGVtZW50cycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuNCcgPT4gJ2FjLWF1ZGl0RW50aXR5JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMS41JyA9PiAnYWMtdGFyZ2V0aW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMS42JyA9PiAnYWFDb250cm9scycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEuNycgPT4gJ3NiZ3AtaXBBZGRyQmxvY2snLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjgnID0+ICdzYmdwLWF1dG9ub21vdXNTeXNOdW0nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjknID0+ICdzYmdwLXJvdXRlcklkZW50aWZpZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjEwJyA9PiAnYWMtcHJveHlpbmcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjExJyA9PiAnU3ViamVjdCBJbmZvcm1hdGlvbiBBY2Nlc3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xLjE0JyA9PiAnUHJveHkgQ2VydGlmaWNhdGUgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yLjEnID0+ICdQb2xpY3kgUXVhbGlmaWVyIENQUycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIuMicgPT4gJ1BvbGljeSBRdWFsaWZpZXIgVXNlciBOb3RpY2UnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4yLjMnID0+ICd0ZXh0Tm90aWNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xJyA9PiAnVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjInID0+ICdUTFMgV2ViIENsaWVudCBBdXRoZW50aWNhdGlvbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMycgPT4gJ0NvZGUgU2lnbmluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNCcgPT4gJ0UtbWFpbCBQcm90ZWN0aW9uJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy41JyA9PiAnSVBTZWMgRW5kIFN5c3RlbScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNicgPT4gJ0lQU2VjIFR1bm5lbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuNycgPT4gJ0lQU2VjIFVzZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjgnID0+ICdUaW1lIFN0YW1waW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy45JyA9PiAnT0NTUCBTaWduaW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xMCcgPT4gJ2R2Y3MnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjEnID0+ICdpZC1pdC1jYVByb3RFbmNDZXJ0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4yJyA9PiAnaWQtaXQtc2lnbktleVBhaXJUeXBlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMycgPT4gJ2lkLWl0LWVuY0tleVBhaXJUeXBlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuNCcgPT4gJ2lkLWl0LXByZWZlcnJlZFN5bW1BbGcnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjUnID0+ICdpZC1pdC1jYUtleVVwZGF0ZUluZm8nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjYnID0+ICdpZC1pdC1jdXJyZW50Q1JMJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC43JyA9PiAnaWQtaXQtdW5zdXBwb3J0ZWRPSURzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC44JyA9PiAnaWQtaXQtc3Vic2NyaXB0aW9uUmVxdWVzdCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuOScgPT4gJ2lkLWl0LXN1YnNjcmlwdGlvblJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xMCcgPT4gJ2lkLWl0LWtleVBhaXJQYXJhbVJlcScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMTEnID0+ICdpZC1pdC1rZXlQYWlyUGFyYW1SZXAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjEyJyA9PiAnaWQtaXQtcmV2UGFzc3BocmFzZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQuMTMnID0+ICdpZC1pdC1pbXBsaWNpdENvbmZpcm0nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40LjE0JyA9PiAnaWQtaXQtY29uZmlybVdhaXRUaW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xNScgPT4gJ2lkLWl0LW9yaWdQS0lNZXNzYWdlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNC4xNicgPT4gJ2lkLWl0LXN1cHBMYW5nVGFncycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjUuMScgPT4gJ2lkLXJlZ0N0cmwnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjInID0+ICdpZC1yZWdJbmZvJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjEnID0+ICdpZC1yZWdDdHJsLXJlZ1Rva2VuJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjInID0+ICdpZC1yZWdDdHJsLWF1dGhlbnRpY2F0b3InLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjEuMycgPT4gJ2lkLXJlZ0N0cmwtcGtpUHVibGljYXRpb25JbmZvJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjQnID0+ICdpZC1yZWdDdHJsLXBraUFyY2hpdmVPcHRpb25zJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4xLjUnID0+ICdpZC1yZWdDdHJsLW9sZENlcnRJRCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjUuMS42JyA9PiAnaWQtcmVnQ3RybC1wcm90b2NvbEVuY3JLZXknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy41LjIuMScgPT4gJ2lkLXJlZ0luZm8tdXRmOFBhaXJzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNS4yLjInID0+ICdpZC1yZWdJbmZvLWNlcnRSZXEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjEnID0+ICdpZC1hbGctZGVzNDAnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjInID0+ICdpZC1hbGctbm9TaWduYXR1cmUnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy42LjMnID0+ICdpZC1hbGctZGgtc2lnLWhtYWMtc2hhMScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjYuNCcgPT4gJ2lkLWFsZy1kaC1wb3AnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjEnID0+ICdpZC1jbWMtc3RhdHVzSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMicgPT4gJ2lkLWNtYy1pZGVudGlmaWNhdGlvbicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMycgPT4gJ2lkLWNtYy1pZGVudGl0eVByb29mJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy40JyA9PiAnaWQtY21jLWRhdGFSZXR1cm4nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjUnID0+ICdpZC1jbWMtdHJhbnNhY3Rpb25JZCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuNicgPT4gJ2lkLWNtYy1zZW5kZXJOb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuNycgPT4gJ2lkLWNtYy1yZWNpcGllbnROb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuOCcgPT4gJ2lkLWNtYy1hZGRFeHRlbnNpb25zJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy45JyA9PiAnaWQtY21jLWVuY3J5cHRlZFBPUCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMTAnID0+ICdpZC1jbWMtZGVjcnlwdGVkUE9QJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xMScgPT4gJ2lkLWNtYy1scmFQT1BXaXRuZXNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xNScgPT4gJ2lkLWNtYy1nZXRDZXJ0JywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4xNicgPT4gJ2lkLWNtYy1nZXRDUkwnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE3JyA9PiAnaWQtY21jLXJldm9rZVJlcXVlc3QnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE4JyA9PiAnaWQtY21jLXJlZ0luZm8nLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy43LjE5JyA9PiAnaWQtY21jLXJlc3BvbnNlSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMjEnID0+ICdpZC1jbWMtcXVlcnlQZW5kaW5nJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4yMicgPT4gJ2lkLWNtYy1wb3BMaW5rUmFuZG9tJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNy4yMycgPT4gJ2lkLWNtYy1wb3BMaW5rV2l0bmVzcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjcuMjQnID0+ICdpZC1jbWMtY29uZmlybUNlcnRBY2NlcHRhbmNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOC4xJyA9PiAnaWQtb24tcGVyc29uYWxEYXRhJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOC4zJyA9PiAnUGVybWFuZW50IElkZW50aWZpZXInLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy45LjEnID0+ICdpZC1wZGEtZGF0ZU9mQmlydGgnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy45LjInID0+ICdpZC1wZGEtcGxhY2VPZkJpcnRoJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuOS4zJyA9PiAnaWQtcGRhLWdlbmRlcicsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjkuNCcgPT4gJ2lkLXBkYS1jb3VudHJ5T2ZDaXRpemVuc2hpcCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjkuNScgPT4gJ2lkLXBkYS1jb3VudHJ5T2ZSZXNpZGVuY2UnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC4xJyA9PiAnaWQtYWNhLWF1dGhlbnRpY2F0aW9uSW5mbycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjEwLjInID0+ICdpZC1hY2EtYWNjZXNzSWRlbnRpdHknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC4zJyA9PiAnaWQtYWNhLWNoYXJnaW5nSWRlbnRpdHknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMC40JyA9PiAnaWQtYWNhLWdyb3VwJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTAuNScgPT4gJ2lkLWFjYS1yb2xlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTAuNicgPT4gJ2lkLWFjYS1lbmNBdHRycycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjExLjEnID0+ICdpZC1xY3MtcGtpeFFDU3ludGF4LXYxJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMTIuMScgPT4gJ2lkLWNjdC1jcnMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMi4yJyA9PiAnaWQtY2N0LVBLSURhdGEnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4xMi4zJyA9PiAnaWQtY2N0LVBLSVJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMjEuMCcgPT4gJ0FueSBsYW5ndWFnZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIxLjEnID0+ICdJbmhlcml0IGFsbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjIxLjInID0+ICdJbmRlcGVuZGVudCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEnID0+ICdPQ1NQJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMicgPT4gJ0NBIElzc3VlcnMnLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4zJyA9PiAnQUQgVGltZSBTdGFtcGluZycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjQnID0+ICdhZCBkdmNzJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguNScgPT4gJ0NBIFJlcG9zaXRvcnknLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjEnID0+ICdCYXNpYyBPQ1NQIFJlc3BvbnNlJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS4yJyA9PiAnT0NTUCBOb25jZScsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMycgPT4gJ09DU1AgQ1JMIElEJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS40JyA9PiAnQWNjZXB0YWJsZSBPQ1NQIFJlc3BvbnNlcycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuNScgPT4gJ09DU1AgTm8gQ2hlY2snLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjYnID0+ICdPQ1NQIEFyY2hpdmUgQ3V0b2ZmJywKICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuNDguMS43JyA9PiAnT0NTUCBTZXJ2aWNlIExvY2F0b3InLAogICAgICAgICAgICAnMS4zLjYuMS41LjUuNy40OC4xLjgnID0+ICdFeHRlbmRlZCBPQ1NQIFN0YXR1cycsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuOScgPT4gJ2lkLXBraXgtT0NTUF92YWxpZCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMTAnID0+ICdpZC1wa2l4LU9DU1BfcGF0aCcsCiAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjQ4LjEuMTEnID0+ICdUcnVzdCBSb290JywKICAgICAgICAgICAgJzEuMy4xNC4zLjInID0+ICdhbGdvcml0aG0nLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4zJyA9PiAnbWQ1V2l0aFJTQScsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjYnID0+ICdkZXMtZWNiJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuNycgPT4gJ2Rlcy1jYmMnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi44JyA9PiAnZGVzLW9mYicsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjknID0+ICdkZXMtY2ZiJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTEnID0+ICdyc2FTaWduYXR1cmUnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4xMicgPT4gJ2RzYUVuY3J5cHRpb24tb2xkJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTMnID0+ICdkc2FXaXRoU0hBJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMTUnID0+ICdzaGFXaXRoUlNBRW5jcnlwdGlvbicsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjE3JyA9PiAnZGVzLWVkZScsCiAgICAgICAgICAgICcxLjMuMTQuMy4yLjE4JyA9PiAnc2hhJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMjYnID0+ICdzaGExJywKICAgICAgICAgICAgJzEuMy4xNC4zLjIuMjcnID0+ICdkc2FXaXRoU0hBMS1vbGQnLAogICAgICAgICAgICAnMS4zLjE0LjMuMi4yOScgPT4gJ3NoYTFXaXRoUlNBJywKICAgICAgICAgICAgJzEuMy4zNi4zLjIuMScgPT4gJ3JpcGVtZDE2MCcsCiAgICAgICAgICAgICcxLjMuMzYuMy4zLjEuMicgPT4gJ3JpcGVtZDE2MFdpdGhSU0EnLAogICAgICAgICAgICAnMS4zLjEwMS4xLjQuMScgPT4gJ1N0cm9uZyBFeHRyYW5ldCBJRCcsCiAgICAgICAgICAgICcyLjUnID0+ICdkaXJlY3Rvcnkgc2VydmljZXMgKFguNTAwKScsCiAgICAgICAgICAgICcyLjUuNCcgPT4gJ1g1MDknLAogICAgICAgICAgICAnMi41LjQuMycgPT4gJ2NvbW1vbk5hbWUnLAogICAgICAgICAgICAnMi41LjQuNCcgPT4gJ3N1cm5hbWUnLAogICAgICAgICAgICAnMi41LjQuNScgPT4gJ3NlcmlhbE51bWJlcicsCiAgICAgICAgICAgICcyLjUuNC42JyA9PiAnY291bnRyeU5hbWUnLAogICAgICAgICAgICAnMi41LjQuNycgPT4gJ2xvY2FsaXR5TmFtZScsCiAgICAgICAgICAgICcyLjUuNC44JyA9PiAnc3RhdGVPclByb3ZpbmNlTmFtZScsCiAgICAgICAgICAgICcyLjUuNC45JyA9PiAnc3RyZWV0QWRkcmVzcycsCiAgICAgICAgICAgICcyLjUuNC4xMCcgPT4gJ29yZ2FuaXphdGlvbk5hbWUnLAogICAgICAgICAgICAnMi41LjQuMTEnID0+ICdvcmdhbml6YXRpb25hbFVuaXROYW1lJywKICAgICAgICAgICAgJzIuNS40LjEyJyA9PiAndGl0bGUnLAogICAgICAgICAgICAnMi41LjQuMTMnID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICcyLjUuNC4xNCcgPT4gJ3NlYXJjaEd1aWRlJywKICAgICAgICAgICAgJzIuNS40LjE1JyA9PiAnYnVzaW5lc3NDYXRlZ29yeScsCiAgICAgICAgICAgICcyLjUuNC4xNicgPT4gJ3Bvc3RhbEFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMTcnID0+ICdwb3N0YWxDb2RlJywKICAgICAgICAgICAgJzIuNS40LjE4JyA9PiAncG9zdE9mZmljZUJveCcsCiAgICAgICAgICAgICcyLjUuNC4xOScgPT4gJ3BoeXNpY2FsRGVsaXZlcnlPZmZpY2VOYW1lJywKICAgICAgICAgICAgJzIuNS40LjIwJyA9PiAndGVsZXBob25lTnVtYmVyJywKICAgICAgICAgICAgJzIuNS40LjIxJyA9PiAndGVsZXhOdW1iZXInLAogICAgICAgICAgICAnMi41LjQuMjInID0+ICd0ZWxldGV4VGVybWluYWxJZGVudGlmaWVyJywKICAgICAgICAgICAgJzIuNS40LjIzJyA9PiAnZmFjc2ltaWxlVGVsZXBob25lTnVtYmVyJywKICAgICAgICAgICAgJzIuNS40LjI0JyA9PiAneDEyMUFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMjUnID0+ICdpbnRlcm5hdGlvbmFsaVNETk51bWJlcicsCiAgICAgICAgICAgICcyLjUuNC4yNicgPT4gJ3JlZ2lzdGVyZWRBZGRyZXNzJywKICAgICAgICAgICAgJzIuNS40LjI3JyA9PiAnZGVzdGluYXRpb25JbmRpY2F0b3InLAogICAgICAgICAgICAnMi41LjQuMjgnID0+ICdwcmVmZXJyZWREZWxpdmVyeU1ldGhvZCcsCiAgICAgICAgICAgICcyLjUuNC4yOScgPT4gJ3ByZXNlbnRhdGlvbkFkZHJlc3MnLAogICAgICAgICAgICAnMi41LjQuMzAnID0+ICdzdXBwb3J0ZWRBcHBsaWNhdGlvbkNvbnRleHQnLAogICAgICAgICAgICAnMi41LjQuMzEnID0+ICdtZW1iZXInLAogICAgICAgICAgICAnMi41LjQuMzInID0+ICdvd25lcicsCiAgICAgICAgICAgICcyLjUuNC4zMycgPT4gJ3JvbGVPY2N1cGFudCcsCiAgICAgICAgICAgICcyLjUuNC4zNCcgPT4gJ3NlZUFsc28nLAogICAgICAgICAgICAnMi41LjQuMzUnID0+ICd1c2VyUGFzc3dvcmQnLAogICAgICAgICAgICAnMi41LjQuMzYnID0+ICd1c2VyQ2VydGlmaWNhdGUnLAogICAgICAgICAgICAnMi41LjQuMzcnID0+ICdjQUNlcnRpZmljYXRlJywKICAgICAgICAgICAgJzIuNS40LjM4JyA9PiAnYXV0aG9yaXR5UmV2b2NhdGlvbkxpc3QnLAogICAgICAgICAgICAnMi41LjQuMzknID0+ICdjZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JywKICAgICAgICAgICAgJzIuNS40LjQwJyA9PiAnY3Jvc3NDZXJ0aWZpY2F0ZVBhaXInLAogICAgICAgICAgICAnMi41LjQuNDEnID0+ICduYW1lJywKICAgICAgICAgICAgJzIuNS40LjQyJyA9PiAnZ2l2ZW5OYW1lJywKICAgICAgICAgICAgJzIuNS40LjQzJyA9PiAnaW5pdGlhbHMnLAogICAgICAgICAgICAnMi41LjQuNDQnID0+ICdnZW5lcmF0aW9uUXVhbGlmaWVyJywKICAgICAgICAgICAgJzIuNS40LjQ1JyA9PiAneDUwMFVuaXF1ZUlkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjQuNDYnID0+ICdkblF1YWxpZmllcicsCiAgICAgICAgICAgICcyLjUuNC40NycgPT4gJ2VuaGFuY2VkU2VhcmNoR3VpZGUnLAogICAgICAgICAgICAnMi41LjQuNDgnID0+ICdwcm90b2NvbEluZm9ybWF0aW9uJywKICAgICAgICAgICAgJzIuNS40LjQ5JyA9PiAnZGlzdGluZ3Vpc2hlZE5hbWUnLAogICAgICAgICAgICAnMi41LjQuNTAnID0+ICd1bmlxdWVNZW1iZXInLAogICAgICAgICAgICAnMi41LjQuNTEnID0+ICdob3VzZUlkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjQuNTInID0+ICdzdXBwb3J0ZWRBbGdvcml0aG1zJywKICAgICAgICAgICAgJzIuNS40LjUzJyA9PiAnZGVsdGFSZXZvY2F0aW9uTGlzdCcsCiAgICAgICAgICAgICcyLjUuNC41NCcgPT4gJ2RtZE5hbWUnLAogICAgICAgICAgICAnMi41LjQuNjUnID0+ICdwc2V1ZG9ueW0nLAogICAgICAgICAgICAnMi41LjQuNzInID0+ICdyb2xlJywKICAgICAgICAgICAgJzIuNS44JyA9PiAnZGlyZWN0b3J5IHNlcnZpY2VzIC0gYWxnb3JpdGhtcycsCiAgICAgICAgICAgICcyLjUuOC4xLjEnID0+ICdyc2EnLAogICAgICAgICAgICAnMi41LjguMy4xMDAnID0+ICdtZGMyV2l0aFJTQScsCiAgICAgICAgICAgICcyLjUuOC4zLjEwMScgPT4gJ21kYzInLAogICAgICAgICAgICAnMi41LjI5JyA9PiAnaWQtY2UnLAogICAgICAgICAgICAnMi41LjI5LjknID0+ICdYNTA5djMgU3ViamVjdCBEaXJlY3RvcnkgQXR0cmlidXRlcycsCiAgICAgICAgICAgICcyLjUuMjkuMTQnID0+ICdYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcicsCiAgICAgICAgICAgICcyLjUuMjkuMTUnID0+ICdYNTA5djMgS2V5IFVzYWdlJywKICAgICAgICAgICAgJzIuNS4yOS4xNicgPT4gJ1g1MDl2MyBQcml2YXRlIEtleSBVc2FnZSBQZXJpb2QnLAogICAgICAgICAgICAnMi41LjI5LjE3JyA9PiAnWDUwOXYzIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZScsCiAgICAgICAgICAgICcyLjUuMjkuMTgnID0+ICdYNTA5djMgSXNzdWVyIEFsdGVybmF0aXZlIE5hbWUnLAogICAgICAgICAgICAnMi41LjI5LjE5JyA9PiAnWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzJywKICAgICAgICAgICAgJzIuNS4yOS4yMCcgPT4gJ1g1MDl2MyBDUkwgTnVtYmVyJywKICAgICAgICAgICAgJzIuNS4yOS4yMScgPT4gJ1g1MDl2MyBDUkwgUmVhc29uIENvZGUnLAogICAgICAgICAgICAnMi41LjI5LjI0JyA9PiAnSW52YWxpZGl0eSBEYXRlJywKICAgICAgICAgICAgJzIuNS4yOS4yNycgPT4gJ1g1MDl2MyBEZWx0YSBDUkwgSW5kaWNhdG9yJywKICAgICAgICAgICAgJzIuNS4yOS4yOCcgPT4gJ1g1MDl2MyBJc3N1aW5nIERpc3RyaWJ1dGlvbiBQb2ludCcsCiAgICAgICAgICAgICcyLjUuMjkuMjknID0+ICdYNTA5djMgQ2VydGlmaWNhdGUgSXNzdWVyJywKICAgICAgICAgICAgJzIuNS4yOS4zMCcgPT4gJ1g1MDl2MyBOYW1lIENvbnN0cmFpbnRzJywKICAgICAgICAgICAgJzIuNS4yOS4zMScgPT4gJ1g1MDl2MyBDUkwgRGlzdHJpYnV0aW9uIFBvaW50cycsCiAgICAgICAgICAgICcyLjUuMjkuMzInID0+ICdYNTA5djMgQ2VydGlmaWNhdGUgUG9saWNpZXMnLAogICAgICAgICAgICAnMi41LjI5LjMyLjAnID0+ICdYNTA5djMgQW55IFBvbGljeScsCiAgICAgICAgICAgICcyLjUuMjkuMzMnID0+ICdYNTA5djMgUG9saWN5IE1hcHBpbmdzJywKICAgICAgICAgICAgJzIuNS4yOS4zNScgPT4gJ1g1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXInLAogICAgICAgICAgICAnMi41LjI5LjM2JyA9PiAnWDUwOXYzIFBvbGljeSBDb25zdHJhaW50cycsCiAgICAgICAgICAgICcyLjUuMjkuMzcnID0+ICdYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlJywKICAgICAgICAgICAgJzIuNS4yOS40NicgPT4gJ1g1MDl2MyBGcmVzaGVzdCBDUkwnLAogICAgICAgICAgICAnMi41LjI5LjU0JyA9PiAnWDUwOXYzIEluaGliaXQgQW55IFBvbGljeScsCiAgICAgICAgICAgICcyLjUuMjkuNTUnID0+ICdYNTA5djMgQUMgVGFyZ2V0aW5nJywKICAgICAgICAgICAgJzIuNS4yOS41NicgPT4gJ1g1MDl2MyBObyBSZXZvY2F0aW9uIEF2YWlsYWJsZScsCiAgICAgICAgICAgICcyLjUuMjkuMzcuMCcgPT4gJ0FueSBFeHRlbmRlZCBLZXkgVXNhZ2UnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAnID0+ICdOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4xJyA9PiAnTmV0c2NhcGUgQ2VydGlmaWNhdGUgRXh0ZW5zaW9uJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjInID0+ICdOZXRzY2FwZSBEYXRhIFR5cGUnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAuMS4xJyA9PiAnTmV0c2NhcGUgQ2VydCBUeXBlJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuMicgPT4gJ05ldHNjYXBlIEJhc2UgVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuMycgPT4gJ05ldHNjYXBlIFJldm9jYXRpb24gVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuNCcgPT4gJ05ldHNjYXBlIENBIFJldm9jYXRpb24gVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuNycgPT4gJ05ldHNjYXBlIFJlbmV3YWwgVXJsJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTEzNzMwLjEuOCcgPT4gJ05ldHNjYXBlIENBIFBvbGljeSBVcmwnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMTM3MzAuMS4xMicgPT4gJ05ldHNjYXBlIFNTTCBTZXJ2ZXIgTmFtZScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4xLjEzJyA9PiAnTmV0c2NhcGUgQ29tbWVudCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC4yLjUnID0+ICdOZXRzY2FwZSBDZXJ0aWZpY2F0ZSBTZXF1ZW5jZScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjExMzczMC40LjEnID0+ICdOZXRzY2FwZSBTZXJ2ZXIgR2F0ZWQgQ3J5cHRvJywKICAgICAgICAgICAgJzEuMy42JyA9PiAnZG9kJywKICAgICAgICAgICAgJzEuMy42LjEnID0+ICdpYW5hJywKICAgICAgICAgICAgJzEuMy42LjEuMScgPT4gJ0RpcmVjdG9yeScsCiAgICAgICAgICAgICcxLjMuNi4xLjInID0+ICdNYW5hZ2VtZW50JywKICAgICAgICAgICAgJzEuMy42LjEuMycgPT4gJ0V4cGVyaW1lbnRhbCcsCiAgICAgICAgICAgICcxLjMuNi4xLjQnID0+ICdQcml2YXRlJywKICAgICAgICAgICAgJzEuMy42LjEuNScgPT4gJ1NlY3VyaXR5JywKICAgICAgICAgICAgJzEuMy42LjEuNicgPT4gJ1NOTVB2MicsCiAgICAgICAgICAgICcxLjMuNi4xLjcnID0+ICdNYWlsJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xJyA9PiAnRW50ZXJwcmlzZXMnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTQ2Ni4zNDQnID0+ICdkY09iamVjdCcsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4xLjkuMTYuMy44JyA9PiAnemxpYiBjb21wcmVzc2lvbicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zJyA9PiAnY3NvcicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQnID0+ICduaXN0QWxnb3JpdGhtcycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMScgPT4gJ2FlcycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xJyA9PiAnYWVzLTEyOC1lY2InLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMicgPT4gJ2Flcy0xMjgtY2JjJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjMnID0+ICdhZXMtMTI4LW9mYicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40JyA9PiAnYWVzLTEyOC1jZmInLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNScgPT4gJ2lkLWFlczEyOC13cmFwJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjYnID0+ICdhZXMtMTI4LWdjbScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS43JyA9PiAnYWVzLTEyOC1jY20nLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuOCcgPT4gJ2lkLWFlczEyOC13cmFwLXBhZCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMScgPT4gJ2Flcy0xOTItZWNiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjIyJyA9PiAnYWVzLTE5Mi1jYmMnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMjMnID0+ICdhZXMtMTkyLW9mYicsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCcgPT4gJ2Flcy0xOTItY2ZiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjI1JyA9PiAnaWQtYWVzMTkyLXdyYXAnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuMjYnID0+ICdhZXMtMTkyLWdjbScsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNycgPT4gJ2Flcy0xOTItY2NtJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjI4JyA9PiAnaWQtYWVzMTkyLXdyYXAtcGFkJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQxJyA9PiAnYWVzLTI1Ni1lY2InLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDInID0+ICdhZXMtMjU2LWNiYycsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MycgPT4gJ2Flcy0yNTYtb2ZiJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0JyA9PiAnYWVzLTI1Ni1jZmInLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDUnID0+ICdpZC1hZXMyNTYtd3JhcCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NicgPT4gJ2Flcy0yNTYtZ2NtJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4xLjQ3JyA9PiAnYWVzLTI1Ni1jY20nLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjEuNDgnID0+ICdpZC1hZXMyNTYtd3JhcC1wYWQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjInID0+ICduaXN0X2hhc2hhbGdzJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4yLjEnID0+ICdzaGEyNTYnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjIuMicgPT4gJ3NoYTM4NCcsCiAgICAgICAgICAgICcyLjE2Ljg0MC4xLjEwMS4zLjQuMi4zJyA9PiAnc2hhNTEyJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4yLjQnID0+ICdzaGEyMjQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjMnID0+ICdkc2Ffd2l0aF9zaGEyJywKICAgICAgICAgICAgJzIuMTYuODQwLjEuMTAxLjMuNC4zLjEnID0+ICdkc2Ffd2l0aF9TSEEyMjQnLAogICAgICAgICAgICAnMi4xNi44NDAuMS4xMDEuMy40LjMuMicgPT4gJ2RzYV93aXRoX1NIQTI1NicsCiAgICAgICAgICAgICcyLjUuMjkuMjMnID0+ICdIb2xkIEluc3RydWN0aW9uIENvZGUnLAogICAgICAgICAgICAnMC45JyA9PiAnZGF0YScsCiAgICAgICAgICAgICcwLjkuMjM0MicgPT4gJ3BzcycsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMCcgPT4gJ3VjbCcsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAnID0+ICdwaWxvdCcsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMScgPT4gJ3BpbG90QXR0cmlidXRlVHlwZScsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMycgPT4gJ3BpbG90QXR0cmlidXRlU3ludGF4JywKICAgICAgICAgICAgJzAuOS4yMzQyLjE5MjAwMzAwLjEwMC40JyA9PiAncGlsb3RPYmplY3RDbGFzcycsCiAgICAgICAgICAgICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMTAnID0+ICdwaWxvdEdyb3VwcycsCiAgICAgICAgICAgICcyLjIzLjQyJyA9PiAnU2VjdXJlIEVsZWN0cm9uaWMgVHJhbnNhY3Rpb25zJywKICAgICAgICAgICAgJzIuMjMuNDIuMCcgPT4gJ2NvbnRlbnQgdHlwZXMnLAogICAgICAgICAgICAnMi4yMy40Mi4xJyA9PiAnbWVzc2FnZSBleHRlbnNpb25zJywKICAgICAgICAgICAgJzIuMjMuNDIuMycgPT4gJ3NldC1hdHRyJywKICAgICAgICAgICAgJzIuMjMuNDIuNScgPT4gJ3NldC1wb2xpY3knLAogICAgICAgICAgICAnMi4yMy40Mi43JyA9PiAnY2VydGlmaWNhdGUgZXh0ZW5zaW9ucycsCiAgICAgICAgICAgICcyLjIzLjQyLjgnID0+ICdzZXQtYnJhbmQnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjAnID0+ICdzZXRjdC1QQU5EYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xJyA9PiAnc2V0Y3QtUEFOVG9rZW4nLAogICAgICAgICAgICAnMi4yMy40Mi4wLjInID0+ICdzZXRjdC1QQU5Pbmx5JywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zJyA9PiAnc2V0Y3QtT0lEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40JyA9PiAnc2V0Y3QtUEknLAogICAgICAgICAgICAnMi4yMy40Mi4wLjUnID0+ICdzZXRjdC1QSURhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYnID0+ICdzZXRjdC1QSURhdGFVbnNpZ25lZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNycgPT4gJ3NldGN0LUhPRElucHV0JywKICAgICAgICAgICAgJzIuMjMuNDIuMC44JyA9PiAnc2V0Y3QtQXV0aFJlc0JhZ2dhZ2UnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjknID0+ICdzZXRjdC1BdXRoUmV2UmVxQmFnZ2FnZScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTAnID0+ICdzZXRjdC1BdXRoUmV2UmVzQmFnZ2FnZScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTEnID0+ICdzZXRjdC1DYXBUb2tlblNlcScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTInID0+ICdzZXRjdC1QSW5pdFJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjEzJyA9PiAnc2V0Y3QtUEktVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xNCcgPT4gJ3NldGN0LVBSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4xNicgPT4gJ3NldGN0LUF1dGhSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjE3JyA9PiAnc2V0Y3QtQXV0aFJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTgnID0+ICdzZXRjdC1BdXRoUmVzVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMTknID0+ICdzZXRjdC1BdXRoVG9rZW5UQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjIwJyA9PiAnc2V0Y3QtQ2FwVG9rZW5EYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMScgPT4gJ3NldGN0LUNhcFRva2VuVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMicgPT4gJ3NldGN0LUFjcUNhcmRDb2RlTXNnJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yMycgPT4gJ3NldGN0LUF1dGhSZXZSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI0JyA9PiAnc2V0Y3QtQXV0aFJldlJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI1JyA9PiAnc2V0Y3QtQXV0aFJldlJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMjYnID0+ICdzZXRjdC1DYXBSZXFUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjI3JyA9PiAnc2V0Y3QtQ2FwUmVxVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMjgnID0+ICdzZXRjdC1DYXBSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4yOScgPT4gJ3NldGN0LUNhcFJldlJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzAnID0+ICdzZXRjdC1DYXBSZXZSZXFUQlNYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zMScgPT4gJ3NldGN0LUNhcFJldlJlc0RhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjMyJyA9PiAnc2V0Y3QtQ3JlZFJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzMnID0+ICdzZXRjdC1DcmVkUmVxVEJTWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzQnID0+ICdzZXRjdC1DcmVkUmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzUnID0+ICdzZXRjdC1DcmVkUmV2UmVxVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zNicgPT4gJ3NldGN0LUNyZWRSZXZSZXFUQlNYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zNycgPT4gJ3NldGN0LUNyZWRSZXZSZXNEYXRhJywKICAgICAgICAgICAgJzIuMjMuNDIuMC4zOCcgPT4gJ3NldGN0LVBDZXJ0UmVxRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuMzknID0+ICdzZXRjdC1QQ2VydFJlc1RCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDAnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVxRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDEnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDInID0+ICdzZXRjdC1DYXJkQ0luaXRSZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQzJyA9PiAnc2V0Y3QtTWVBcUNJbml0UmVzVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40NCcgPT4gJ3NldGN0LVJlZ0Zvcm1SZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQ1JyA9PiAnc2V0Y3QtQ2VydFJlcURhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjQ2JyA9PiAnc2V0Y3QtQ2VydFJlcVRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDcnID0+ICdzZXRjdC1DZXJ0UmVzRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNDgnID0+ICdzZXRjdC1DZXJ0SW5xUmVxVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC40OScgPT4gJ3NldGN0LUVycm9yVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41MCcgPT4gJ3NldGN0LVBJRHVhbFNpZ25lZFRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTEnID0+ICdzZXRjdC1QSVVuc2lnbmVkVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41MicgPT4gJ3NldGN0LUF1dGhSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjUzJyA9PiAnc2V0Y3QtQXV0aFJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTQnID0+ICdzZXRjdC1BdXRoUmVzVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNTUnID0+ICdzZXRjdC1BdXRoVG9rZW5UQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjU2JyA9PiAnc2V0Y3QtQ2FwVG9rZW5UQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjU3JyA9PiAnc2V0Y3QtQ2FwVG9rZW5UQkVYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41OCcgPT4gJ3NldGN0LUFjcUNhcmRDb2RlTXNnVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC41OScgPT4gJ3NldGN0LUF1dGhSZXZSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYwJyA9PiAnc2V0Y3QtQXV0aFJldlJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjEnID0+ICdzZXRjdC1BdXRoUmV2UmVzVEJFQicsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjInID0+ICdzZXRjdC1DYXBSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjYzJyA9PiAnc2V0Y3QtQ2FwUmVxVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNjQnID0+ICdzZXRjdC1DYXBSZXNUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY1JyA9PiAnc2V0Y3QtQ2FwUmV2UmVxVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC42NicgPT4gJ3NldGN0LUNhcFJldlJlcVRCRVgnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY3JyA9PiAnc2V0Y3QtQ2FwUmV2UmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC42OCcgPT4gJ3NldGN0LUNyZWRSZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjY5JyA9PiAnc2V0Y3QtQ3JlZFJlcVRCRVgnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjcwJyA9PiAnc2V0Y3QtQ3JlZFJlc1RCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzEnID0+ICdzZXRjdC1DcmVkUmV2UmVxVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43MicgPT4gJ3NldGN0LUNyZWRSZXZSZXFUQkVYJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43MycgPT4gJ3NldGN0LUNyZWRSZXZSZXNUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjc0JyA9PiAnc2V0Y3QtQmF0Y2hBZG1pblJlcVRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzUnID0+ICdzZXRjdC1CYXRjaEFkbWluUmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC43NicgPT4gJ3NldGN0LVJlZ0Zvcm1SZXFUQkUnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjc3JyA9PiAnc2V0Y3QtQ2VydFJlcVRCRScsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzgnID0+ICdzZXRjdC1DZXJ0UmVxVEJFWCcsCiAgICAgICAgICAgICcyLjIzLjQyLjAuNzknID0+ICdzZXRjdC1DZXJ0UmVzVEJFJywKICAgICAgICAgICAgJzIuMjMuNDIuMC44MCcgPT4gJ3NldGN0LUNSTE5vdGlmaWNhdGlvblRCUycsCiAgICAgICAgICAgICcyLjIzLjQyLjAuODEnID0+ICdzZXRjdC1DUkxOb3RpZmljYXRpb25SZXNUQlMnLAogICAgICAgICAgICAnMi4yMy40Mi4wLjgyJyA9PiAnc2V0Y3QtQkNJRGlzdHJpYnV0aW9uVEJTJywKICAgICAgICAgICAgJzIuMjMuNDIuMS4xJyA9PiAnZ2VuZXJpYyBjcnlwdG9ncmFtJywKICAgICAgICAgICAgJzIuMjMuNDIuMS4zJyA9PiAnbWVyY2hhbnQgaW5pdGlhdGVkIGF1dGgnLAogICAgICAgICAgICAnMi4yMy40Mi4xLjQnID0+ICdzZXRleHQtcGluU2VjdXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuMS41JyA9PiAnc2V0ZXh0LXBpbkFueScsCiAgICAgICAgICAgICcyLjIzLjQyLjEuNycgPT4gJ3NldGV4dC10cmFjazInLAogICAgICAgICAgICAnMi4yMy40Mi4xLjgnID0+ICdhZGRpdGlvbmFsIHZlcmlmaWNhdGlvbicsCiAgICAgICAgICAgICcyLjIzLjQyLjUuMCcgPT4gJ3NldC1wb2xpY3ktcm9vdCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMCcgPT4gJ3NldENleHQtaGFzaGVkUm9vdCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMScgPT4gJ3NldENleHQtY2VydFR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi43LjInID0+ICdzZXRDZXh0LW1lcmNoRGF0YScsCiAgICAgICAgICAgICcyLjIzLjQyLjcuMycgPT4gJ3NldENleHQtY0NlcnRSZXF1aXJlZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjcuNCcgPT4gJ3NldENleHQtdHVubmVsaW5nJywKICAgICAgICAgICAgJzIuMjMuNDIuNy41JyA9PiAnc2V0Q2V4dC1zZXRFeHQnLAogICAgICAgICAgICAnMi4yMy40Mi43LjYnID0+ICdzZXRDZXh0LXNldFF1YWxmJywKICAgICAgICAgICAgJzIuMjMuNDIuNy43JyA9PiAnc2V0Q2V4dC1QR1dZY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuNy44JyA9PiAnc2V0Q2V4dC1Ub2tlbklkZW50aWZpZXInLAogICAgICAgICAgICAnMi4yMy40Mi43LjknID0+ICdzZXRDZXh0LVRyYWNrMkRhdGEnLAogICAgICAgICAgICAnMi4yMy40Mi43LjEwJyA9PiAnc2V0Q2V4dC1Ub2tlblR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi43LjExJyA9PiAnc2V0Q2V4dC1Jc3N1ZXJDYXBhYmlsaXRpZXMnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjAnID0+ICdzZXRBdHRyLUNlcnQnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjEnID0+ICdwYXltZW50IGdhdGV3YXkgY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4yJyA9PiAnc2V0QXR0ci1Ub2tlblR5cGUnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMnID0+ICdpc3N1ZXIgY2FwYWJpbGl0aWVzJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4wLjAnID0+ICdzZXQtcm9vdEtleVRodW1iJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4wLjEnID0+ICdzZXQtYWRkUG9saWN5JywKICAgICAgICAgICAgJzIuMjMuNDIuMy4yLjEnID0+ICdzZXRBdHRyLVRva2VuLUVNVicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMi4yJyA9PiAnc2V0QXR0ci1Ub2tlbi1CMFByaW1lJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjMnID0+ICdzZXRBdHRyLUlzc0NhcC1DVk0nLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMuNCcgPT4gJ3NldEF0dHItSXNzQ2FwLVQyJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjUnID0+ICdzZXRBdHRyLUlzc0NhcC1TaWcnLAogICAgICAgICAgICAnMi4yMy40Mi4zLjMuMy4xJyA9PiAnZ2VuZXJhdGUgY3J5cHRvZ3JhbScsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy40LjEnID0+ICdlbmNyeXB0ZWQgdHJhY2sgMicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy40LjInID0+ICdjbGVhcnRleHQgdHJhY2sgMicsCiAgICAgICAgICAgICcyLjIzLjQyLjMuMy41LjEnID0+ICdJQ0Mgb3IgdG9rZW4gc2lnbmF0dXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuMy4zLjUuMicgPT4gJ3NlY3VyZSBkZXZpY2Ugc2lnbmF0dXJlJywKICAgICAgICAgICAgJzIuMjMuNDIuOC4xJyA9PiAnc2V0LWJyYW5kLUlBVEEtQVRBJywKICAgICAgICAgICAgJzIuMjMuNDIuOC4zMCcgPT4gJ3NldC1icmFuZC1EaW5lcnMnLAogICAgICAgICAgICAnMi4yMy40Mi44LjM0JyA9PiAnc2V0LWJyYW5kLUFtZXJpY2FuRXhwcmVzcycsCiAgICAgICAgICAgICcyLjIzLjQyLjguMzUnID0+ICdzZXQtYnJhbmQtSkNCJywKICAgICAgICAgICAgJzIuMjMuNDIuOC40JyA9PiAnc2V0LWJyYW5kLVZpc2EnLAogICAgICAgICAgICAnMi4yMy40Mi44LjUnID0+ICdzZXQtYnJhbmQtTWFzdGVyQ2FyZCcsCiAgICAgICAgICAgICcyLjIzLjQyLjguNjAxMScgPT4gJ3NldC1icmFuZC1Ob3Z1cycsCiAgICAgICAgICAgICcxLjIuODQwLjExMzU0OS4zLjEwJyA9PiAnZGVzLWNkbWYnLAogICAgICAgICAgICAnMS4yLjg0MC4xMTM1NDkuMS4xLjYnID0+ICdyc2FPQUVQRW5jcnlwdGlvblNFVCcsCiAgICAgICAgICAgICcxLjAuMTAxMTguMy4wLjU1JyA9PiAnd2hpcmxwb29sJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yJyA9PiAnY3J5cHRvcHJvJywKICAgICAgICAgICAgJzEuMi42NDMuMi45JyA9PiAnY3J5cHRvY29tJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMnID0+ICdHT1NUIFIgMzQuMTEtOTQgd2l0aCBHT1NUIFIgMzQuMTAtMjAwMScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi40JyA9PiAnR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjknID0+ICdHT1NUIFIgMzQuMTEtOTQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMTAnID0+ICdITUFDIEdPU1QgMzQuMTEtOTQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMTknID0+ICdHT1NUIFIgMzQuMTAtMjAwMScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMCcgPT4gJ0dPU1QgUiAzNC4xMC05NCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMScgPT4gJ0dPU1QgMjgxNDctODknLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMjInID0+ICdHT1NUIDI4MTQ3LTg5IE1BQycsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMycgPT4gJ0dPU1QgUiAzNC4xMS05NCBQUkYnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuOTgnID0+ICdHT1NUIFIgMzQuMTAtMjAwMSBESCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi45OScgPT4gJ0dPU1QgUiAzNC4xMC05NCBESCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4xNC4xJyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1LZXlNZXNoaW5nJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjE0LjAnID0+ICdpZC1Hb3N0MjgxNDctODktTm9uZS1LZXlNZXNoaW5nJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMwLjAnID0+ICdpZC1Hb3N0UjM0MTEtOTQtVGVzdFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMwLjEnID0+ICdpZC1Hb3N0UjM0MTEtOTQtQ3J5cHRvUHJvUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuMCcgPT4gJ2lkLUdvc3QyODE0Ny04OS1UZXN0UGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuMScgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tQS1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMS4yJyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1CLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMxLjMnID0+ICdpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLUMtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuNCcgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tRC1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMS41JyA9PiAnaWQtR29zdDI4MTQ3LTg5LUNyeXB0b1Byby1Pc2Nhci0xLTEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzEuNicgPT4gJ2lkLUdvc3QyODE0Ny04OS1DcnlwdG9Qcm8tT3NjYXItMS0wLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMxLjcnID0+ICdpZC1Hb3N0MjgxNDctODktQ3J5cHRvUHJvLVJJQy0xLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjAnID0+ICdpZC1Hb3N0UjM0MTAtOTQtVGVzdFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjInID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzIuMycgPT4gJ2lkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tQi1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMi40JyA9PiAnaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1DLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMyLjUnID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLUQtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzMuMScgPT4gJ2lkLUdvc3RSMzQxMC05NC1DcnlwdG9Qcm8tWGNoQS1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zMy4yJyA9PiAnaWQtR29zdFIzNDEwLTk0LUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjMzLjMnID0+ICdpZC1Hb3N0UjM0MTAtOTQtQ3J5cHRvUHJvLVhjaEMtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzUuMCcgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLVRlc3RQYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zNS4xJyA9PiAnaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzUuMicgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1CLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjM1LjMnID0+ICdpZC1Hb3N0UjM0MTAtMjAwMS1DcnlwdG9Qcm8tQy1QYXJhbVNldCcsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4zNi4wJyA9PiAnaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLVhjaEEtUGFyYW1TZXQnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMzYuMScgPT4gJ2lkLUdvc3RSMzQxMC0yMDAxLUNyeXB0b1Byby1YY2hCLVBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjIwLjEnID0+ICdpZC1Hb3N0UjM0MTAtOTQtYScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuMi4yMC4yJyA9PiAnaWQtR29zdFIzNDEwLTk0LWFCaXMnLAogICAgICAgICAgICAnMS4yLjY0My4yLjIuMjAuMycgPT4gJ2lkLUdvc3RSMzQxMC05NC1iJywKICAgICAgICAgICAgJzEuMi42NDMuMi4yLjIwLjQnID0+ICdpZC1Hb3N0UjM0MTAtOTQtYkJpcycsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjYuMScgPT4gJ0dPU1QgMjgxNDctODkgQ3J5cHRvY29tIFBhcmFtU2V0JywKICAgICAgICAgICAgJzEuMi42NDMuMi45LjEuNS4zJyA9PiAnR09TVCAzNC4xMC05NCBDcnlwdG9jb20nLAogICAgICAgICAgICAnMS4yLjY0My4yLjkuMS41LjQnID0+ICdHT1NUIDM0LjEwLTIwMDEgQ3J5cHRvY29tJywKICAgICAgICAgICAgJzEuMi42NDMuMi45LjEuMy4zJyA9PiAnR09TVCBSIDM0LjExLTk0IHdpdGggR09TVCBSIDM0LjEwLTk0IENyeXB0b2NvbScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjMuNCcgPT4gJ0dPU1QgUiAzNC4xMS05NCB3aXRoIEdPU1QgUiAzNC4xMC0yMDAxIENyeXB0b2NvbScsCiAgICAgICAgICAgICcxLjIuNjQzLjIuOS4xLjguMScgPT4gJ0dPU1QgUiAzNDEwLTIwMDEgUGFyYW1ldGVyIFNldCBDcnlwdG9jb20nLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuMicgPT4gJ2NhbWVsbGlhLTEyOC1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuMycgPT4gJ2NhbWVsbGlhLTE5Mi1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjEuNCcgPT4gJ2NhbWVsbGlhLTI1Ni1jYmMnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuMicgPT4gJ2lkLWNhbWVsbGlhMTI4LXdyYXAnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuMycgPT4gJ2lkLWNhbWVsbGlhMTkyLXdyYXAnLAogICAgICAgICAgICAnMS4yLjM5Mi4yMDAwMTEuNjEuMS4xLjMuNCcgPT4gJ2lkLWNhbWVsbGlhMjU2LXdyYXAnLAogICAgICAgICAgICAnMC4zLjQ0MDEuNScgPT4gJ250dC1kcycsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45JyA9PiAnY2FtZWxsaWEnLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS4xJyA9PiAnY2FtZWxsaWEtMTI4LWVjYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjMnID0+ICdjYW1lbGxpYS0xMjgtb2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuNCcgPT4gJ2NhbWVsbGlhLTEyOC1jZmInLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS42JyA9PiAnY2FtZWxsaWEtMTI4LWdjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjcnID0+ICdjYW1lbGxpYS0xMjgtY2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuOScgPT4gJ2NhbWVsbGlhLTEyOC1jdHInLAogICAgICAgICAgICAnMC4zLjQ0MDEuNS4zLjEuOS4xMCcgPT4gJ2NhbWVsbGlhLTEyOC1jbWFjJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjEnID0+ICdjYW1lbGxpYS0xOTItZWNiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjMnID0+ICdjYW1lbGxpYS0xOTItb2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjQnID0+ICdjYW1lbGxpYS0xOTItY2ZiJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjYnID0+ICdjYW1lbGxpYS0xOTItZ2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjcnID0+ICdjYW1lbGxpYS0xOTItY2NtJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMjknID0+ICdjYW1lbGxpYS0xOTItY3RyJywKICAgICAgICAgICAgJzAuMy40NDAxLjUuMy4xLjkuMzAnID0+ICdjYW1lbGxpYS0xOTItY21hYycsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQxJyA9PiAnY2FtZWxsaWEtMjU2LWVjYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQzJyA9PiAnY2FtZWxsaWEtMjU2LW9mYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ0JyA9PiAnY2FtZWxsaWEtMjU2LWNmYicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ2JyA9PiAnY2FtZWxsaWEtMjU2LWdjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ3JyA9PiAnY2FtZWxsaWEtMjU2LWNjbScsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjQ5JyA9PiAnY2FtZWxsaWEtMjU2LWN0cicsCiAgICAgICAgICAgICcwLjMuNDQwMS41LjMuMS45LjUwJyA9PiAnY2FtZWxsaWEtMjU2LWNtYWMnLAogICAgICAgICAgICAnMS4yLjQxMC4yMDAwMDQnID0+ICdraXNhJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuMycgPT4gJ3NlZWQtZWNiJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNCcgPT4gJ3NlZWQtY2JjJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNScgPT4gJ3NlZWQtY2ZiJywKICAgICAgICAgICAgJzEuMi40MTAuMjAwMDA0LjEuNicgPT4gJ3NlZWQtb2ZiJywKICAgICAgICAgICAgJzEuMi44NDAuMTAwNDYuMi4xJyA9PiAnWDkuNDIgREgnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEnID0+ICdicmFpbnBvb2xQMTYwcjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjInID0+ICdicmFpbnBvb2xQMTYwdDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjMnID0+ICdicmFpbnBvb2xQMTkycjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjQnID0+ICdicmFpbnBvb2xQMTkydDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjUnID0+ICdicmFpbnBvb2xQMjI0cjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjYnID0+ICdicmFpbnBvb2xQMjI0dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjcnID0+ICdicmFpbnBvb2xQMjU2cjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjgnID0+ICdicmFpbnBvb2xQMjU2dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjknID0+ICdicmFpbnBvb2xQMzIwcjEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEwJyA9PiAnYnJhaW5wb29sUDMyMHQxJywKICAgICAgICAgICAgJzEuMy4zNi4zLjMuMi44LjEuMS4xMScgPT4gJ2JyYWlucG9vbFAzODRyMScsCiAgICAgICAgICAgICcxLjMuMzYuMy4zLjIuOC4xLjEuMTInID0+ICdicmFpbnBvb2xQMzg0dDEnLAogICAgICAgICAgICAnMS4zLjM2LjMuMy4yLjguMS4xLjEzJyA9PiAnYnJhaW5wb29sUDUxMnIxJywKICAgICAgICAgICAgJzEuMy4zNi4zLjMuMi44LjEuMS4xNCcgPT4gJ2JyYWlucG9vbFA1MTJ0MScsCiAgICAgICAgICAgICcxLjMuMTMzLjE2Ljg0MC42My4wJyA9PiAneDktNjMtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMScgPT4gJ3NlY2ctc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzMuMTYuODQwLjYzLjAuMicgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGExa2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTEuMCcgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGEyMjRrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xMS4xJyA9PiAnZGhTaW5nbGVQYXNzLXN0ZERILXNoYTI1NmtkZi1zY2hlbWUnLAogICAgICAgICAgICAnMS4zLjEzMi4xLjExLjInID0+ICdkaFNpbmdsZVBhc3Mtc3RkREgtc2hhMzg0a2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTEuMycgPT4gJ2RoU2luZ2xlUGFzcy1zdGRESC1zaGE1MTJrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzMuMTYuODQwLjYzLjAuMycgPT4gJ2RoU2luZ2xlUGFzcy1jb2ZhY3RvckRILXNoYTFrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xNC4wJyA9PiAnZGhTaW5nbGVQYXNzLWNvZmFjdG9yREgtc2hhMjI0a2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuMTMyLjEuMTQuMScgPT4gJ2RoU2luZ2xlUGFzcy1jb2ZhY3RvckRILXNoYTI1NmtkZi1zY2hlbWUnLAogICAgICAgICAgICAnMS4zLjEzMi4xLjE0LjInID0+ICdkaFNpbmdsZVBhc3MtY29mYWN0b3JESC1zaGEzODRrZGYtc2NoZW1lJywKICAgICAgICAgICAgJzEuMy4xMzIuMS4xNC4zJyA9PiAnZGhTaW5nbGVQYXNzLWNvZmFjdG9yREgtc2hhNTEya2RmLXNjaGVtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4xMTEyOS4yLjQuMicgPT4gJ0NUIFByZWNlcnRpZmljYXRlIFNDVHMnLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjMnID0+ICdDVCBQcmVjZXJ0aWZpY2F0ZSBQb2lzb24nLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjQnID0+ICdDVCBQcmVjZXJ0aWZpY2F0ZSBTaWduZXInLAogICAgICAgICAgICAnMS4zLjYuMS40LjEuMTExMjkuMi40LjUnID0+ICdDVCBDZXJ0aWZpY2F0ZSBTQ1RzJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMScgPT4gJ2p1cmlzZGljdGlvbkxvY2FsaXR5TmFtZScsCiAgICAgICAgICAgICcxLjMuNi4xLjQuMS4zMTEuNjAuMi4xLjInID0+ICdqdXJpc2RpY3Rpb25TdGF0ZU9yUHJvdmluY2VOYW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycgPT4gJ2p1cmlzZGljdGlvbkNvdW50cnlOYW1lJywKICAgICAgICAgICAgJzEuMy42LjEuNC4xLjExNTkxLjQuMTEnID0+ICdpZC1zY3J5cHQnLAogICAgICAgIF07CgogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRvaWRTdHJpbmcsICRvaWRzKSkgewogICAgICAgICAgICByZXR1cm4gJG9pZHNbJG9pZFN0cmluZ107CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRvaWRTdHJpbmcpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSU0FfRU5DUllQVElPTjoKICAgICAgICAgICAgICAgIHJldHVybiAnUlNBIEVuY3J5cHRpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6Ok1ENV9XSVRIX1JTQV9FTkNSWVBUSU9OOgogICAgICAgICAgICAgICAgcmV0dXJuICdNRDUgd2l0aCBSU0EgRW5jcnlwdGlvbic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMV9XSVRIX1JTQV9TSUdOQVRVUkU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NIQS0xIHdpdGggUlNBIFNpZ25hdHVyZSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OlBLQ1M5X0VNQUlMOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IEVtYWlsIEFkZHJlc3MnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlBLQ1M5X1VOU1RSVUNUVVJFRF9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IFVuc3RydWN0dXJlZCBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9DT05URU5UX1RZUEU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BLQ1MgIzkgQ29udGVudCBUeXBlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9NRVNTQUdFX0RJR0VTVDoKICAgICAgICAgICAgICAgIHJldHVybiAnUEtDUyAjOSBNZXNzYWdlIERpZ2VzdCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UEtDUzlfU0lHTklOR19USU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IFNpZ25pbmcgVGltZSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OkNPTU1PTl9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdDb21tb24gTmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U1VSTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnU3VybmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0VSSUFMX05VTUJFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnU2VyaWFsIE51bWJlcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q09VTlRSWV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdDb3VudHJ5IE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkxPQ0FMSVRZX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0xvY2FsaXR5IE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNUQVRFX09SX1BST1ZJTkNFX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1N0YXRlIG9yIFByb3ZpbmNlIE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNUUkVFVF9BRERSRVNTOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdHJlZXQgQWRkcmVzcyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T1JHQU5JWkFUSU9OX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09yZ2FuaXphdGlvbiBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPVV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdPcmdhbml6YXRpb24gVW5pdCBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUSVRMRToKICAgICAgICAgICAgICAgIHJldHVybiAnVGl0bGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkRFU0NSSVBUSU9OOgogICAgICAgICAgICAgICAgcmV0dXJuICdEZXNjcmlwdGlvbic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UE9TVEFMX0FERFJFU1M6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Bvc3RhbCBBZGRyZXNzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQT1NUQUxfQ09ERToKICAgICAgICAgICAgICAgIHJldHVybiAnUG9zdGFsIENvZGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkFVVEhPUklUWV9SRVZPQ0FUSU9OX0xJU1Q6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0F1dGhvcml0eSBSZXZvY2F0aW9uIExpc3QnOwoKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdWJqZWN0IGRpcmVjdG9yeSBhdHRyaWJ1dGVzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdWJqZWN0IGtleSBpZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9LRVlfVVNBR0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0tleSB1c2FnZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRDoKICAgICAgICAgICAgICAgIHJldHVybiAnUHJpdmF0ZSBrZXkgdXNhZ2UnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX1NVQkpFQ1RfQUxUX05BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1N1YmplY3QgYWx0ZXJuYXRpdmUgbmFtZSAoU0FOKSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfSVNTVUVSX0FMVF9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdJc3N1ZXIgYWx0ZXJuYXRpdmUgbmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQkFTSUNfQ09OU1RSQUlOVFM6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0Jhc2ljIGNvbnN0cmFpbnRzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DUkxfTlVNQkVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdDUkwgbnVtYmVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9SRUFTT05fQ09ERToKICAgICAgICAgICAgICAgIHJldHVybiAnUmVhc29uIGNvZGUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0lOVkFMSURJVFlfREFURToKICAgICAgICAgICAgICAgIHJldHVybiAnSW52YWxpZGl0eSBjb2RlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9ERUxUQV9DUkxfSU5ESUNBVE9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdEZWx0YSBDUkwgaW5kaWNhdG9yJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9JU1NVSU5HX0RJU1RfUE9JTlQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0lzc3VpbmcgZGlzdHJpYnV0aW9uIHBvaW50JzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DRVJUX0lTU1VFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnQ2VydGlmaWNhdGUgaXNzdWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9OQU1FX0NPTlNUUkFJTlRTOgogICAgICAgICAgICAgICAgcmV0dXJuICdOYW1lIGNvbnN0cmFpbnRzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUzoKICAgICAgICAgICAgICAgIHJldHVybiAnQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0NFUlRfUE9MSUNJRVM6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NlcnRpZmljYXRlIHBvbGljaWVzICc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSOgogICAgICAgICAgICAgICAgcmV0dXJuICdBdXRob3JpdHkga2V5IGlkZW50aWZpZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0VYVEVOREVEX0tFWV9VU0FHRToKICAgICAgICAgICAgICAgIHJldHVybiAnRXh0ZW5kZWQga2V5IHVzYWdlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBVVRIT1JJVFlfSU5GT1JNQVRJT05fQUNDRVNTOgogICAgICAgICAgICAgICAgcmV0dXJuICdDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzIChBSUEpJzsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZiAoJGxvYWRGcm9tV2ViKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRGcm9tV2ViKCRvaWRTdHJpbmcpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG9pZFN0cmluZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRnJvbVdlYigkb2lkU3RyaW5nKQogICAgewogICAgICAgICRjaCA9IGN1cmxfaW5pdCgiaHR0cDovL29pZC1pbmZvLmNvbS9nZXQveyRvaWRTdHJpbmd9Iik7CgogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7CgogICAgICAgICRjb250ZW50cyA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKCiAgICAgICAgLy8gVGhpcyBwYXR0ZXJuIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYXMgc29vbiBhcyB0aGUgd2Vic2l0ZSBsYXlvdXQgb2Ygb2lkLWluZm8uY29tIGNoYW5nZXMKICAgICAgICBwcmVnX21hdGNoX2FsbCgnIzx0dD4oLispXChcZCtcKTwvdHQ+I3NpJywgJGNvbnRlbnRzLCAkb2lkTmFtZSk7CgogICAgICAgIGlmIChlbXB0eSgkb2lkTmFtZVsxXSkpIHsKICAgICAgICAgICAgcmV0dXJuICJ7JG9pZFN0cmluZ30gKHVua25vd24pIjsKICAgICAgICB9CgogICAgICAgICRvaWROYW1lID0gdWNmaXJzdChzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZSgnLyhbQS1aXVthLXpdKS8nLCAnICQxJywgJG9pZE5hbWVbMV1bMF0pKSk7CiAgICAgICAgJG9pZE5hbWUgPSBzdHJfcmVwbGFjZSgnLScsICcgJywgJG9pZE5hbWUpOwoKICAgICAgICByZXR1cm4gInskb2lkTmFtZX0gKHskb2lkU3RyaW5nfSkiOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Parsable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogVGhlIFBhcnNhYmxlIGludGVyZmFjZSBkZXNjcmliZXMgY2xhc3NlcyB0aGF0IGNhbiBiZSBwYXJzZWQgZnJvbSB0aGVpciBiaW5hcnkgREVSIHJlcHJlc2VudGF0aW9uLgogKi8KaW50ZXJmYWNlIFBhcnNhYmxlCnsKICAgIC8qKgogICAgICogUGFyc2UgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBmcm9tIGl0cyBiaW5hcnkgREVSIGVuY29kZWQgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXggdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIG9mIHRoZSAkYmluYXJ5RGF0YSBpcyBzdGFydGVkLiBUaGlzIHBhcmFtZXRlciBpbGwgYmUgbW9kaWZpZWQKICAgICAqICAgICAgICAgICAgdG8gY29udGFpbiB0aGUgb2Zmc2V0IGluZGV4IG9mIHRoZSBuZXh0IG9iamVjdCBhZnRlciB0aGlzIG9iamVjdCBoYXMgYmVlbiBwYXJzZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gYmluYXJ5IGRhdGEgaXMgZWl0aGVyIGludmFsaWQgb3Igbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/TemplateParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCmNsYXNzIFRlbXBsYXRlUGFyc2VyCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGFycmF5ICR0ZW1wbGF0ZQogICAgICogQHJldHVybiBcRkdcQVNOMVxBU05PYmplY3R8U2VxdWVuY2UKICAgICAqIEB0aHJvd3MgUGFyc2VyRXhjZXB0aW9uIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSBwYXJzaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZUJhc2U2NCgkZGF0YSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgIC8vIFRPRE8gdGVzdCB3aXRoIGludmFsaWQgZGF0YQogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VCaW5hcnkoYmFzZTY0X2RlY29kZSgkZGF0YSksICR0ZW1wbGF0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW5hcnkKICAgICAqIEBwYXJhbSBhcnJheSAkdGVtcGxhdGUKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0fFNlcXVlbmNlCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGVyZSB3YXMgYW4gaXNzdWUgcGFyc2luZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VCaW5hcnkoJGJpbmFyeSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgICRwYXJzZWRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeSk7CgogICAgICAgIGZvcmVhY2ggKCR0ZW1wbGF0ZSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGUoJHBhcnNlZE9iamVjdCwgJGtleSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGUoQVNOT2JqZWN0ICRvYmplY3QsICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCRrZXksICRvYmplY3QpOwoKICAgICAgICAgICAgLyogQHZhciBDb25zdHJ1Y3QgJG9iamVjdCAqLwogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJGtleSA9PiAkY2hpbGQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZSgkb2JqZWN0LT5jdXJyZW50KCksICRrZXksICRjaGlsZCk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT5uZXh0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCR2YWx1ZSwgJG9iamVjdCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXNzZXJ0VHlwZUlkKCRleHBlY3RlZFR5cGVJZCwgQVNOT2JqZWN0ICRvYmplY3QpCiAgICB7CiAgICAgICAgJGFjdHVhbFR5cGUgPSAkb2JqZWN0LT5nZXRUeXBlKCk7CiAgICAgICAgaWYgKCRleHBlY3RlZFR5cGVJZCAhPSAkYWN0dWFsVHlwZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJFeHBlY3RlZCB0eXBlICgkZXhwZWN0ZWRUeXBlSWQpIGRvZXMgbm90IG1hdGNoIGFjdHVhbCB0eXBlICgkYWN0dWFsVHlwZSIpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BitString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIE9jdGV0U3RyaW5nIGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJpdmF0ZSAkbnJPZlVudXNlZEJpdHM7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IEFTTi4xIEJpdFN0cmluZyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHZhbHVlIEVpdGhlciB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgYXMgYSBzdHJpbmcgKHNwYWNlcyBhcmUgYWxsb3dlZCAtIGxlYWRpbmcgMHggaXMgb3B0aW9uYWwpIG9yIGEgbnVtZXJpYyB2YWx1ZQogICAgICogQHBhcmFtIGludCAkbnJPZlVudXNlZEJpdHMgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBvY3RldCBbb3B0aW9uYWxdLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5vIHBvc2l0aXZlIG51bWVyaWMgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgJG5yT2ZVbnVzZWRCaXRzID0gMCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2YWx1ZSk7CgogICAgICAgIGlmICghaXNfbnVtZXJpYygkbnJPZlVudXNlZEJpdHMpIHx8ICRuck9mVW51c2VkQml0cyA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQml0U3RyaW5nOiBzZWNvbmQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGEgcG9zaXRpdmUgbnVtYmVyIChvciB6ZXJvKSEnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5uck9mVW51c2VkQml0cyA9ICRuck9mVW51c2VkQml0czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkJJVFNUUklORzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgLy8gYWRkIG9uZSB0byB0aGUgbGVuZ3RoIGZvciB0aGUgZmlyc3Qgb2N0ZXQgd2hpY2ggZW5jb2RlcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IG9jdGV0CiAgICAgICAgcmV0dXJuIHBhcmVudDo6Y2FsY3VsYXRlQ29udGVudExlbmd0aCgpICsgMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAvLyB0aGUgZmlyc3Qgb2N0ZXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzT2N0ZXQgPSBjaHIoJHRoaXMtPm5yT2ZVbnVzZWRCaXRzKTsKICAgICAgICAkYWN0dWFsQ29udGVudCA9IHBhcmVudDo6Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkbnJPZlVudXNlZEJpdHNPY3RldC4kYWN0dWFsQ29udGVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZVbnVzZWRCaXRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZVbnVzZWRCaXRzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpCSVRTVFJJTkcsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAyKTsKCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4ICsgMSwgJGNvbnRlbnRMZW5ndGggLSAxKTsKCiAgICAgICAgaWYgKCRuck9mVW51c2VkQml0cyA+IDcgfHwgLy8gbm8gbGVzcyB0aGFuIDEgdXNlZCwgb3RoZXJ3aXNlIG5vbi1taW5pbWFsCiAgICAgICAgICAgICgkY29udGVudExlbmd0aCAtIDEpID09IDEgJiYgJG5yT2ZVbnVzZWRCaXRzID4gMCB8fCAvLyBjb250ZW50IGxlbmd0aCBvbmx5IDEsIG5vCiAgICAgICAgICAgIChvcmQoJHZhbHVlW3N0cmxlbigkdmFsdWUpLTFdKSYoKDE8PCRuck9mVW51c2VkQml0cyktMSkpICE9IDAgLy8gdW51c2VkIGJpdHMgc2V0CiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIkNhbiBub3QgcGFyc2UgYml0IHN0cmluZyB3aXRoIGludmFsaWQgcGFkZGluZyIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZihiaW4yaGV4KCR2YWx1ZSksICRuck9mVW51c2VkQml0cyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BMPString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJNUFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBCTVAgU3RyaW5nLgogICAgICoKICAgICAqIEJNUFN0cmluZyBpcyBhIHN1YnR5cGUgb2YgVW5pdmVyc2FsU3RyaW5nIHRoYXQgaGFzIGl0cyBvd24KICAgICAqIHVuaXF1ZSB0YWcgYW5kIGNvbnRhaW5zIG9ubHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlCiAgICAgKiBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHRob3NlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0CiAgICAgKiA2NEstMiBjZWxscywgbGVzcyBjZWxscyB3aG9zZSBlbmNvZGluZyBpcyB1c2VkIHRvIGFkZHJlc3MKICAgICAqIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lKSBvZiBJU08vSUVDIDEwNjQ2LTEuCiAgICAgKgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Boolean.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgQm9vbGVhbiBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Qk9PTEVBTjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSA9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gY2hyKDB4MDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBjaHIoMHhGRik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuICdUUlVFJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJ0ZBTFNFJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6OkJPT0xFQU4sICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgQm9vbGVhbiBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiBvbmUuIEV4dHJhY3RlZCBsZW5ndGggd2FzIHskY29udGVudExlbmd0aH0iLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CiAgICAgICAgJGJvb2xlYW5WYWx1ZSA9ICR2YWx1ZSA9PSAweEZGID8gdHJ1ZSA6IGZhbHNlOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGJvb2xlYW5WYWx1ZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/CharacterString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Enumerated.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgRW51bWVyYXRlZCBleHRlbmRzIEludGVnZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralizedTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gSVNPIDg2MDEuCiAqCiAqIFRoZSB0eXBlIGNvbnNpc3RzIG9mIHZhbHVlcyByZXByZXNlbnRpbmc6CiAqIGEpIGEgY2FsZW5kYXIgZGF0ZSwgYXMgZGVmaW5lZCBpbiBJU08gODYwMTsgYW5kCiAqIGIpIGEgdGltZSBvZiBkYXksIHRvIGFueSBvZiB0aGUgcHJlY2lzaW9ucyBkZWZpbmVkIGluIElTTyA4NjAxLCBleGNlcHQgZm9yIHRoZSBob3VycyB2YWx1ZSAyNCB3aGljaCBzaGFsbCBub3QgYmUgdXNlZDsgYW5kCiAqIGMpIHRoZSBsb2NhbCB0aW1lIGRpZmZlcmVudGlhbCBmYWN0b3IgYXMgZGVmaW5lZCBpbiBJU08gODYwMS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIEFic3RyYWN0VGltZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJG1pY3Jvc2Vjb25kczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGRhdGVUaW1lLCAkZGF0ZVRpbWVab25lKTsKICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ3UnKTsKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgLy8gREVSIHJlcXVpcmVzIHVzIHRvIHJlbW92ZSB0cmFpbGluZyB6ZXJvcwogICAgICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gcHJlZ19yZXBsYWNlKCcvKFsxLTldKykwKyQvJywgJyQxJywgJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRTaXplID0gMTU7IC8vIFlZWVlNTURESEhtbVNTWgoKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgJGNvbnRlbnRTaXplICs9IDEgKyBzdHJsZW4oJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbnRlbnRTaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc0ZyYWN0aW9uYWxTZWNvbmRzRWxlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGludHZhbCgkdGhpcy0+bWljcm9zZWNvbmRzKSA+IDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGVuY29kZWRDb250ZW50ID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ1ltZEhpcycpOwogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICAkZW5jb2RlZENvbnRlbnQgLj0gIi57JHRoaXMtPm1pY3Jvc2Vjb25kc30iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkQ29udGVudC4nWic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlLT5mb3JtYXQoIlktbS1kXHRIOmk6cy51UCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgiWS1tLWRcdEg6aTpzUCIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nID0gMTQ7IC8vIFlZWVlNTURESEhtbVNTCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmcpOwogICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJGZvcm1hdCA9ICdZbWRHaXMnOwogICAgICAgICRjb250ZW50ID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgPSBzdWJzdHIoJGNvbnRlbnQsIDAsICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmc7CiAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZCAtPSAkbGVuZ3RoT2ZNaW5pbXVtVGltZVN0cmluZzsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09ICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKSB7CiAgICAgICAgICAgICRsb2NhbFRpbWVab25lID0gbmV3IFxEYXRlVGltZVpvbmUoZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpKTsKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgJGxvY2FsVGltZVpvbmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcuJykgewogICAgICAgICAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZC0tOyAvLyBhY2NvdW50IGZvciB0aGUgJy4nCiAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cyA9IDE7IC8vIGFjY291bnQgZm9yIHRoZSAnLicKCiAgICAgICAgICAgICAgICB3aGlsZSAoJG1heGltdW1CeXRlc1RvUmVhZCA+IDAKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnKycKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnLScKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cysrOwogICAgICAgICAgICAgICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQtLTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzKTsKICAgICAgICAgICAgICAgICRvZmZzZXRJbmRleCArPSAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50czsKICAgICAgICAgICAgICAgICRmb3JtYXQgLj0gJy51JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgbmV3IFxEYXRlVGltZVpvbmUoJ1VUQycpKTsKCiAgICAgICAgICAgIGlmICgkbWF4aW11bUJ5dGVzVG9SZWFkID4gMCkgewogICAgICAgICAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJysnCiAgICAgICAgICAgICAgICB8fCAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICctJykgewogICAgICAgICAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdJbnZhbGlkIElTTyA4NjAxIFRpbWUgU3RyaW5nJywgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCRkYXRlVGltZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR2VuZXJhbFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GraphicString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR3JhcGhpYyBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkdSQVBISUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/IA5String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCi8qKgogKiBUaGUgSW50ZXJuYXRpb25hbCBBbHBoYWJldCBOby41IChJQTUpIHJlZmVyZW5jZXMgdGhlIGVuY29kaW5nIG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXJzLgogKgogKiBFYWNoIGNoYXJhY3RlciBpbiB0aGUgZGF0YSBpcyBlbmNvZGVkIGFzIDEgYnl0ZS4KICovCmNsYXNzIElBNVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHN0cmluZyk7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTI4OyAkaSsrKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd0NoYXJhY3RlcihjaHIoJGkpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpJQTVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Integer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgSW50ZWdlciBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSB2YWx1ZSBpcyBub3QgbnVtZXJpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBWQUxVRSBbeyR2YWx1ZX1dIGZvciBBU04xX0lOVEVHRVIiKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6SU5URUdFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCkpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgkdGhpcy0+dmFsdWUsIDEwKTsKICAgICAgICAkbmVnYXRpdmUgPSAkdmFsdWUtPmNvbXBhcmUoMCkgPCAwOwogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgICR2YWx1ZSA9ICR2YWx1ZS0+YWJzb2x1dGVWYWx1ZSgpOwogICAgICAgICAgICAgJGxpbWl0ID0gMHg4MDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGxpbWl0ID0gMHg3ZjsKICAgICAgICB9CgogICAgICAgICRtb2QgPSAweGZmKzE7CiAgICAgICAgJHZhbHVlcyA9IFtdOwogICAgICAgIHdoaWxlKCR2YWx1ZS0+Y29tcGFyZSgkbGltaXQpID4gMCkgewogICAgICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICAgICAkdmFsdWUgPSAkdmFsdWUtPnNoaWZ0UmlnaHQoOCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICRudW1WYWx1ZXMgPSBjb3VudCgkdmFsdWVzKTsKCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDB4ZmYgLSAkdmFsdWVzWyRpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSArPSAxOwogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJGldIDw9IDB4ZmYpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzc2VydCgkaSAhPSAkbnVtVmFsdWVzIC0gMSk7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJG51bVZhbHVlcyAtIDFdID09IDB4N2YpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9IDB4ZmY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHZhbHVlcyA9IGFycmF5X3JldmVyc2UoJHZhbHVlcyk7CiAgICAgICAgJHIgPSBwYWNrKCJDKiIsIC4uLiR2YWx1ZXMpOwogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVNaW5pbWFsRW5jb2RpbmcoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAvLyBBbGwgdGhlIGZpcnN0IG5pbmUgYml0cyBjYW5ub3QgZXF1YWwgMCBvciAxLCB3aGljaCB3b3VsZAogICAgICAgIC8vIGJlIG5vbi1taW5pbWFsIGVuY29kaW5nIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW50ZWdlcnMgcmVzcGVjdGl2ZWx5CiAgICAgICAgaWYgKChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgPT0gMHgwMCAmJiAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsxXSkgJiAweDgwKSA9PSAwKSB8fAogICAgICAgICAgICAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pID09IDB4ZmYgJiYgKG9yZCgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrMV0pICYgMHg4MCkgPT0gMHg4MCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiSW50ZWdlciBub3QgbWluaW1hbGx5IGVuY29kZWQiLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygwKTsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgJHBhcnNlZE9iamVjdC0+Z2V0VHlwZSgpLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIGlmICgkY29udGVudExlbmd0aCA+IDEpIHsKICAgICAgICAgICAgc2VsZjo6ZW5zdXJlTWluaW1hbEVuY29kaW5nKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgICAgICAkaXNOZWdhdGl2ZSA9IChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgJiAweDgwKSAhPSAweDAwOwogICAgICAgICRudW1iZXIgPSBCaWdJbnRlZ2VyOjpjcmVhdGUob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkgJiAweDdGKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvbnRlbnRMZW5ndGggLSAxOyAkaSsrKSB7CiAgICAgICAgICAgICRudW1iZXIgPSAkbnVtYmVyLT5tdWx0aXBseSgweDEwMCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGlzTmVnYXRpdmUpIHsKICAgICAgICAgICAgJG51bWJlciA9ICRudW1iZXItPnN1YnRyYWN0KEJpZ0ludGVnZXI6OmNyZWF0ZSgyKS0+dG9Qb3dlcig4ICogJGNvbnRlbnRMZW5ndGggLSAxKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygoc3RyaW5nKSRudW1iZXIpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoJGNvbnRlbnRMZW5ndGgpOwoKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NullObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgTnVsbE9iamVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6TlVMTDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAnTlVMTCc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok5VTEwsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgTnVsbCBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiB6ZXJvLiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoMCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NumericString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIE51bWVyaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgTnVtZXJpY1N0cmluZy4KICAgICAqCiAgICAgKiBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZDoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd051bWJlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2JqZWN0RGVzY3JpcHRvciBleHRlbmRzIEdyYXBoaWNTdHJpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxCYXNlMTI4Owp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgpjbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJvdGVjdGVkICRzdWJJZGVudGlmaWVyczsKICAgIHByb3RlY3RlZCAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHZhbHVlKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skdmFsdWV9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTWVyZ2UgdGhlIGZpcnN0IHRvIGFyY3Mgb2YgdGhlIE9JRCByZWdpc3RyYXRpb24gdHJlZSAocGVyIEFTTiBkZWZpbml0aW9uISkKICAgICAgICBpZiAoJG5yT2ZTdWJJZGVudGlmaWVycyA+PSAyKSB7CiAgICAgICAgICAgICR0aGlzLT5zdWJJZGVudGlmaWVyc1sxXSA9ICgkdGhpcy0+c3ViSWRlbnRpZmllcnNbMF0gKiA0MCkgKyAkdGhpcy0+c3ViSWRlbnRpZmllcnNbMV07CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5zdWJJZGVudGlmaWVyc1swXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN1YklkZW50aWZpZXJzIGFzICRzdWJJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRzdWJJZGVudGlmaWVyID0gJHN1YklkZW50aWZpZXIgPj4gNzsKICAgICAgICAgICAgICAgICRsZW5ndGgrKzsKICAgICAgICAgICAgfSB3aGlsZSAoJHN1YklkZW50aWZpZXIgPiAwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkVmFsdWUgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3ViSWRlbnRpZmllcnMgYXMgJHN1YklkZW50aWZpZXIpIHsKICAgICAgICAgICAgJGVuY29kZWRWYWx1ZSAuPSBCYXNlMTI4OjplbmNvZGUoJHN1YklkZW50aWZpZXIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkVmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBPSUQ6OmdldE5hbWUoJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAxKTsKCiAgICAgICAgJGZpcnN0T2N0ZXQgPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICAkb2lkU3RyaW5nID0gZmxvb3IoJGZpcnN0T2N0ZXQgLyA0MCkuJy4nLigkZmlyc3RPY3RldCAlIDQwKTsKICAgICAgICAkb2lkU3RyaW5nIC49ICcuJy5zZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCAtIDEpOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGFuIG9iamVjdCBpZGVudGlmaWVyIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IG9jdGV0LCB3aGljaCBpcyBwYXJzZWQKICAgICAqIGRpZmZlcmVudGx5LiBUaGlzIHdheSByZWxhdGl2ZSBvYmplY3QgaWRlbnRpZmllcnMgY2FuIGFsc28gYmUgcGFyc2VkCiAgICAgKiB1c2luZyB0aGlzLgogICAgICoKICAgICAqIEBwYXJhbSAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtICRvZmZzZXRJbmRleAogICAgICogQHBhcmFtICRvY3RldHNUb1JlYWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VPaWQoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4LCAkb2N0ZXRzVG9SZWFkKQogICAgewogICAgICAgICRvaWQgPSAnJzsKCiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgPSAnJzsKCiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSAkb2N0ZXRzVG9SZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignTWFsZm9ybWVkIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyJywgJG9mZnNldEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG9jdGV0c1RvUmVhZC0tOwogICAgICAgICAgICAgICAgJG9jdGV0ID0gJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdOwogICAgICAgICAgICAgICAgJG9jdGV0cyAuPSAkb2N0ZXQ7CiAgICAgICAgICAgIH0gd2hpbGUgKG9yZCgkb2N0ZXQpICYgMHg4MCk7CgogICAgICAgICAgICAkb2lkIC49IHNwcmludGYoJyVkLicsIEJhc2UxMjg6OmRlY29kZSgkb2N0ZXRzKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgJy4nCiAgICAgICAgcmV0dXJuIHN1YnN0cigkb2lkLCAwLCAtMSkgPzogJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/OctetString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcm90ZWN0ZWQgJHZhbHVlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBnYXBzIGJldHdlZW4gaGV4IGRpZ2l0cwogICAgICAgICAgICAkdmFsdWUgPSBwcmVnX3JlcGxhY2UoJy9cc3wweC8nLCAnJywgJHZhbHVlKTsKICAgICAgICB9IGVsc2VpZiAoaXNfbnVtZXJpYygkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IGRlY2hleCgkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ09jdGV0U3RyaW5nOiB1bnJlY29nbml6ZWQgaW5wdXQgdHlwZSEnKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJHZhbHVlKSAlIDIgIT0gMCkgewogICAgICAgICAgICAvLyB0cmFuc2Zvcm0gdmFsdWVzIGxpa2UgMUYyIHRvIDAxRjIKICAgICAgICAgICAgJHZhbHVlID0gJzAnLiR2YWx1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT52YWx1ZSkgLyAyOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIC8vQWN0dWFsIGNvbnRlbnQKICAgICAgICB3aGlsZSAoc3RybGVuKCR2YWx1ZSkgPj0gMikgewogICAgICAgICAgICAvLyBnZXQgdGhlIGhleCB2YWx1ZSBieXRlIGJ5IGJ5dGUgZnJvbSB0aGUgc3RyaW5nIGFuZCBhbmQgYWRkIGl0IHRvIGJpbmFyeSByZXN1bHQKICAgICAgICAgICAgJHJlc3VsdCAuPSBjaHIoaGV4ZGVjKHN1YnN0cigkdmFsdWUsIDAsIDIpKSk7CiAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiBzdHJ0b3VwcGVyKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJpbmFyeUNvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgJG9mZnNldEluZGV4ICs9ICRjb250ZW50TGVuZ3RoOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoYmluMmhleCgkdmFsdWUpKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/PrintableString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFByaW50YWJsZVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBQcmludGFibGVTdHJpbmcuCiAgICAgKgogICAgICogVGhlIElUVS1UIFguNjgwIFRhYmxlIDggcGVybWl0cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CiAgICAgKiBMYXRpbiBjYXBpdGFsIGxldHRlcnMgQSxCLCAuLi4gWgogICAgICogTGF0aW4gc21hbGwgbGV0dGVycyAgIGEsYiwgLi4uIHoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICogQVBPU1RST1BIRSAgICAgICAgICAgICcKICAgICAqIExFRlQgUEFSRU5USEVTSVMgICAgICAoCiAgICAgKiBSSUdIVCBQQVJFTlRIRVNJUyAgICAgKQogICAgICogUExVUyBTSUdOICAgICAgICAgICAgICsKICAgICAqIENPTU1BICAgICAgICAgICAgICAgICAsCiAgICAgKiBIWVBIRU4tTUlOVVMgICAgICAgICAgLQogICAgICogRlVMTCBTVE9QICAgICAgICAgICAgIC4KICAgICAqIFNPTElEVVMgICAgICAgICAgICAgICAvCiAgICAgKiBDT0xPTiAgICAgICAgICAgICAgICAgOgogICAgICogRVFVQUxTIFNJR04gICAgICAgICAgID0KICAgICAqIFFVRVNUSU9OIE1BUksgICAgICAgICA/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93TnVtYmVycygpOwogICAgICAgICR0aGlzLT5hbGxvd0FsbExldHRlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dDaGFyYWN0ZXJzKCInIiwgJygnLCAnKScsICcrJywgJy0nLCAnLicsICcsJywgJy8nLCAnOicsICc9JywgJz8nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/RelativeObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcRXhjZXB0aW9uXFBhcnNlckV4Y2VwdGlvbjsKCmNsYXNzIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIE9iamVjdElkZW50aWZpZXIgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN1YklkZW50aWZpZXJzKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdWJJZGVudGlmaWVyczsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHN1YklkZW50aWZpZXJzKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skc3ViSWRlbnRpZmllcnN9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6UkVMQVRJVkVfT0lELCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSBzZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBjYXRjaCAoUGFyc2VyRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ01hbGZvcm1lZCBBU04uMSBSZWxhdGl2ZSBPYmplY3QgSWRlbnRpZmllcicsICRlLT5nZXRPZmZzZXQoKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Sequence.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxDb25zdHJ1Y3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlNFUVVFTkNFOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Set.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2V0IGV4dGVuZHMgU2VxdWVuY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpTRVQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/T61String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFQ2MVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBUNjEgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lUVV9ULjYxCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UniversalString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBVbml2ZXJzYWwgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaXZlcnNhbF9DaGFyYWN0ZXJfU2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTCTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgdGhlIGNhbGVuZGFyIGRhdGUgYW5kIHRpbWUuCiAqCiAqIFRoZSBwcmVjaXNpb24gaXMgb25lIG1pbnV0ZSBvciBvbmUgc2Vjb25kIGFuZCBvcHRpb25hbGx5IGEKICogbG9jYWwgdGltZSBkaWZmZXJlbnRpYWwgZnJvbSBjb29yZGluYXRlZCB1bml2ZXJzYWwgdGltZS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBBYnN0cmFjdFRpbWUgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlVUQ19USU1FOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gMTM7IC8vIENvbnRlbnQgaXMgYSBzdHJpbmcgbyB0aGUgZm9sbG93aW5nIGZvcm1hdDogWVlNTUREaGhtbXNzWiAoMTMgb2N0ZXRzKQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgneW1kSGlzJykuJ1onOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpVVENfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDExKTsKCiAgICAgICAgJGZvcm1hdCA9ICd5bWRHaSc7CiAgICAgICAgJGRhdGVUaW1lU3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDEwKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMTA7CgogICAgICAgIC8vIGV4dHJhY3Qgb3B0aW9uYWwgc2Vjb25kcyBwYXJ0CiAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gIT0gJ1onCiAgICAgICAgJiYgJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSAhPSAnKycKICAgICAgICAmJiAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdICE9ICctJykgewogICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDIpOwogICAgICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMjsKICAgICAgICAgICAgJGZvcm1hdCAuPSAncyc7CiAgICAgICAgfQoKICAgICAgICAkZGF0ZVRpbWUgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJGRhdGVUaW1lU3RyaW5nLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwoKICAgICAgICAvLyBleHRyYWN0IHRpbWUgem9uZSBzZXR0aW5ncwogICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcrJwogICAgICAgIHx8ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJy0nKSB7CiAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgIH0gZWxzZWlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrK10gIT0gJ1onKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0ludmFsaWQgVVRDIFN0cmluZycsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGRhdGVUaW1lKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTF8String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVURjhTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVW5pdmVyc2FsIFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/VisibleString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVmlzaWJsZSBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownConstructedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25Db25zdHJ1Y3RlZE9iamVjdCBleHRlbmRzIENvbnN0cnVjdAp7CiAgICBwcml2YXRlICRpZGVudGlmaWVyOwogICAgcHJpdmF0ZSAkY29udGVudExlbmd0aDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBcRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9IHNlbGY6OnBhcnNlQmluYXJ5SWRlbnRpZmllcigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJGNoaWxkcmVuID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICR0aGlzLT5jb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkbmV3Q2hpbGQgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJG5ld0NoaWxkLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGNoaWxkcmVuW10gPSAkbmV3Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KC4uLiRjaGlsZHJlbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBvcmQoJHRoaXMtPmlkZW50aWZpZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkZW50aWZpZXI7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25PYmplY3QgZXh0ZW5kcyBBU05PYmplY3QKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlICRpZGVudGlmaWVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGlkZW50aWZpZXIgRWl0aGVyIHRoZSBmaXJzdCBpZGVudGlmaWVyIG9jdGV0IGFzIGludCBvciBhbGwgaWRlbnRpZmllciBieXRlcyBhcyBhIHN0cmluZwogICAgICogQHBhcmFtIGludCAgICAgICAgJGNvbnRlbnRMZW5ndGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpZGVudGlmaWVyLCAkY29udGVudExlbmd0aCkKICAgIHsKICAgICAgICBpZiAoaXNfaW50KCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9ICRpZGVudGlmaWVyOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICJVbnBhcnNhYmxlIE9iamVjdCAoeyRjb250ZW50TGVuZ3RofSBieXRlcykiOwogICAgICAgICR0aGlzLT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG9yZCgkdGhpcy0+aWRlbnRpZmllclswXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWRlbnRpZmllcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlcgogKiBVdGlsaXR5IGNsYXNzIHRvIHJlbW92ZSBkZXBlbmRlbmNlIG9uIGEgc2luZ2xlIGxhcmdlIG51bWJlciBsaWJyYXJ5LiBOb3QgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgdGhpcyBjbGFzcyBvbmx5CiAqIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIHRocm91Z2hvdXQgdGhpcyBwcm9qZWN0LgogKgogKiBJbnN0YW5jZXMgYXJlIGltbXV0YWJsZSwgYWxsIG9wZXJhdGlvbnMgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHJlc3VsdC4KICoKICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIEJpZ0ludGVnZXIKewogICAgLyoqCiAgICAgKiBGb3JjZSBhIHByZWZlcmVuY2Ugb24gdGhlIHVuZGVybHlpbmcgYmlnIG51bWJlciBpbXBsZW1lbnRhdGlvbiwgdXNlZnVsIGZvciB0ZXN0aW5nLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3ByZWZlcjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFByZWZlcigkcHJlZmVyID0gbnVsbCkKICAgIHsKICAgICAgICBzZWxmOjokX3ByZWZlciA9ICRwcmVmZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBCaWdJbnRlZ2VyIGluc3RhbmNlIGJhc2VkIG9mZiB0aGUgYmFzZSAxMCBzdHJpbmcgb3IgYW4gaW50ZWdlci4KICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICR2YWwKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCR2YWwpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRfcHJlZmVyKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc2VsZjo6JF9wcmVmZXIpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2dtcCc6CiAgICAgICAgICAgICAgICAgICAgJHJldCA9IG5ldyBCaWdJbnRlZ2VyR21wKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdiY21hdGgnOgogICAgICAgICAgICAgICAgICAgICRyZXQgPSBuZXcgQmlnSW50ZWdlckJjbWF0aCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignVW5rbm93biBudW1iZXIgaW1wbGVtZW50YXRpb246ICcgLiBzZWxmOjokX3ByZWZlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIGF1dG9kZXRlY3QKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ21wX2FkZCcpKSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gbmV3IEJpZ0ludGVnZXJHbXAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnYmNhZGQnKSkgewogICAgICAgICAgICAgICAgJHJldCA9IG5ldyBCaWdJbnRlZ2VyQmNtYXRoKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1JlcXVpcmVzIEdNUCBvciBiY21hdGggZXh0ZW5zaW9uLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfaW50KCR2YWwpKSB7CiAgICAgICAgICAgICRyZXQtPl9mcm9tSW50ZWdlcigkdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gc3RyaW5nLCBpZiBub3QgYWxyZWFkeSBvbmUKICAgICAgICAgICAgJHZhbCA9IChzdHJpbmcpJHZhbDsKCiAgICAgICAgICAgIC8vIHZhbGlkYXRlIHN0cmluZwogICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eLT9bMC05XSskLycsICR2YWwpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRXhwZWN0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXQtPl9mcm9tU3RyaW5nKCR2YWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBCaWdJbnRlZ2VyIGNvbnN0cnVjdG9yLgogICAgICogUHJldmVudCBkaXJlY3RseSBpbnN0YW50aWF0aW5nIG9iamVjdCwgdXNlIEJpZ0ludGVnZXI6OmNyZWF0ZSBpbnN0ZWFkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewoKICAgIH0KCiAgICAvKioKICAgICAqIFN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIGNsb25lIGZ1bmN0aW9uYWxpdHkuCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKTsKCiAgICAvKioKICAgICAqIEFzc2lnbiB0aGUgaW5zdGFuY2UgdmFsdWUgZnJvbSBiYXNlIDEwIHN0cmluZy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cik7CgogICAgLyoqCiAgICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHZhbHVlIGZyb20gYW4gaW50ZWdlciB0eXBlLgogICAgICogQHBhcmFtIGludCAkaW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21JbnRlZ2VyKCRpbnRlZ2VyKTsKCiAgICAvKioKICAgICAqIE11c3QgcHJvdmlkZSBzdHJpbmcgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGJhc2UgMTAgbnVtYmVyLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKCiAgICAvKiBJTkZPUk1BVElPTkFMIEZVTkNUSU9OUyAqLwoKICAgIC8qKgogICAgICogUmV0dXJuIGludGVnZXIsIGlmIHBvc3NpYmxlLiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBudW1iZXIgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBhcyBhIG5hdGl2ZSBpbnRlZ2VyLgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgXE92ZXJmbG93RXhjZXB0aW9uCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoKTsKCiAgICAvKioKICAgICAqIElzIHJlcHJlc2VudGVkIGludGVnZXIgbmVnYXRpdmU/CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGlzTmVnYXRpdmUoKTsKCiAgICAvKioKICAgICAqIENvbXBhcmUgdGhlIGludGVnZXIgd2l0aCAkbnVtYmVyLCByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciBpZiAkdGhpcyBpcyBsZXNzIHRoYW4gbnVtYmVyLCByZXR1cm5zIDAgaWYgJHRoaXMgaXMKICAgICAqIGVxdWFsIHRvIG51bWJlciBhbmQgcmV0dXJucyBhIHBvc2l0aXZlIGludGVnZXIgaWYgJHRoaXMgaXMgZ3JlYXRlciB0aGFuIG51bWJlci4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJG51bWJlcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG51bWJlcik7CgogICAgLyogTU9ESUZZICovCgogICAgLyoqCiAgICAgKiBBZGQgYW5vdGhlciBpbnRlZ2VyICRiIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGFkZCgkYik7CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdCAkYiBmcm9tICR0aGlzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KCRiKTsKCiAgICAvKioKICAgICAqIE11bHRpcGx5IHZhbHVlLgogICAgICogQHBhcmFtIEJpZ0ludGVnZXJ8c3RyaW5nfGludCAkYgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseSgkYik7CgogICAgLyoqCiAgICAgKiBUaGUgdmFsdWUgJHRoaXMgbW9kdWx1cyAkYi4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJGIKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbW9kdWx1cygkYik7CgogICAgLyoqCiAgICAgKiBSYWlzZSAkdGhpcyB0byB0aGUgcG93ZXIgb2YgJGIgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJGIKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9Qb3dlcigkYik7CgogICAgLyoqCiAgICAgKiBTaGlmdCB0aGUgdmFsdWUgdG8gdGhlIHJpZ2h0IGJ5IGEgc2V0IG51bWJlciBvZiBiaXRzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gaW50ICRiaXRzCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHNoaWZ0UmlnaHQoJGJpdHMgPSA4KTsKCiAgICAvKioKICAgICAqIFNoaWZ0IHRoZSB2YWx1ZSB0byB0aGUgbGVmdCBieSBhIHNldCBudW1iZXIgb2YgYml0cyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIGludCAkYml0cwogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzaGlmdExlZnQoJGJpdHMgPSA4KTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlLgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBhYnNvbHV0ZVZhbHVlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerBcmath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckJjbWF0aAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBiY21hdGggbGlicmFyeSB0byBwZXJmb3JtIGxhcmdlIG9wZXJhdGlvbnMuCiAqIEBwYWNrYWdlIEZHXFV0aWxpdHkKICogQGludGVybmFsCiAqLwpjbGFzcyBCaWdJbnRlZ2VyQmNtYXRoIGV4dGVuZHMgQmlnSW50ZWdlcgp7CiAgICBwcm90ZWN0ZWQgJF9zdHI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKQogICAgewogICAgICAgIC8vIG5vdGhpbmcgbmVlZGVkIHRvIGNvcHkKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3N0ciA9IChzdHJpbmcpJHN0cjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21JbnRlZ2VyKCRpbnRlZ2VyKQogICAgewogICAgICAgICR0aGlzLT5fc3RyID0gKHN0cmluZykkaW50ZWdlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwIHx8ICR0aGlzLT5jb21wYXJlKFBIUF9JTlRfTUlOKSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxPdmVyZmxvd0V4Y2VwdGlvbihzcHJpbnRmKCdDYW4gbm90IHJlcHJlc2VudCAlcyBhcyBpbnRlZ2VyLicsICR0aGlzLT5fc3RyKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaW50KSR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAnMCcsIDApIDwgMDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3N0cjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG51bWJlcikKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkbnVtYmVyKSwgMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNhZGQoJHRoaXMtPl9zdHIsICR0aGlzLT5fdW53cmFwKCRiKSwgMCk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY3N1YigkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpLCAwKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjbXVsKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtb2R1bHVzKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIC8vIGJjbW9kIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyBkaWZmZXJlbnRseQogICAgICAgICAgICAkYiA9ICR0aGlzLT5fdW53cmFwKCRiKTsKICAgICAgICAgICAgJHJldC0+X3N0ciA9IGJjc3ViKCRiLCBiY21vZChiY3N1YignMCcsICR0aGlzLT5fc3RyLCAwKSwgJGIpLCAwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyZXQtPl9zdHIgPSBiY21vZCgkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvUG93ZXIoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjcG93KCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdFJpZ2h0KCRiaXRzID0gOCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNkaXYoJHRoaXMtPl9zdHIsIGJjcG93KCcyJywgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRiaXRzID0gOCkgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY211bCgkdGhpcy0+X3N0ciwgYmNwb3coJzInLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhYnNvbHV0ZVZhbHVlKCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICBpZiAoLTEgPT09IGJjY29tcCgkdGhpcy0+X3N0ciwgJzAnLCAwKSkgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gYmNzdWIoJzAnLCAkdGhpcy0+X3N0ciwgMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gJHRoaXMtPl9zdHI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerGmp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckdtcAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBHTVAgZXh0ZW5zaW9uIHRvIHBlcmZvcm0gb3BlcmF0aW9ucy4KICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmNsYXNzIEJpZ0ludGVnZXJHbXAgZXh0ZW5kcyBCaWdJbnRlZ2VyCnsKICAgIC8qKgogICAgICogUmVzb3VyY2UgaGFuZGxlLgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCkKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2FkZCgkdGhpcy0+X3JoLCAwKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2luaXQoJHN0ciwgMTApOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfZnJvbUludGVnZXIoJGludGVnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9yaCA9IGdtcF9pbml0KCRpbnRlZ2VyLCAxMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBnbXBfc3RydmFsKCR0aGlzLT5fcmgsIDEwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnRlZ2VyKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCB8fCAkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01JTikgPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcT3ZlcmZsb3dFeGNlcHRpb24oc3ByaW50ZignQ2FuIG5vdCByZXByZXNlbnQgJXMgYXMgaW50ZWdlci4nLCAkdGhpcykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ21wX2ludHZhbCgkdGhpcy0+X3JoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOZWdhdGl2ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9zaWduKCR0aGlzLT5fcmgpID09PSAtMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3JoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSgkbnVtYmVyKQogICAgewogICAgICAgIHJldHVybiBnbXBfY21wKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRudW1iZXIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9hZGQoJHRoaXMtPl9yaCwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VidHJhY3QoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX3N1YigkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseSgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRiKSk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1vZHVsdXMoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX21vZCgkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1Bvd2VyKCRiKQogICAgewogICAgICAgIGlmICgkYiBpbnN0YW5jZW9mIHNlbGYpIHsKICAgICAgICAgICAgLy8gZ21wX3BvdyBhY2NlcHRzIGp1c3QgYW4gaW50ZWdlcgogICAgICAgICAgICBpZiAoJGItPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1VuYWJsZSB0byByYWlzZSB0byBwb3dlciBncmVhdGVyIHRoYW4gUEhQX0lOVF9NQVguJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGIgPSBnbXBfaW50dmFsKCRiLT5fcmgpOwogICAgICAgIH0KICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfcG93KCR0aGlzLT5fcmgsICRiKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRSaWdodCgkYml0cz04KQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9kaXYoJHRoaXMtPl9yaCwgZ21wX3BvdygyLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdExlZnQoJGJpdHM9OCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsIGdtcF9wb3coMiwgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWJzb2x1dGVWYWx1ZSgpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX2FicygkdGhpcy0+X3JoKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/AlgorithmIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxDb21wb3NpdGVcQXR0cmlidXRlVHlwZUFuZFZhbHVlOwoKY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciBleHRlbmRzIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkb2JqZWN0SWRlbnRpZmllclN0cmluZywgbmV3IE51bGxPYmplY3QoKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateExtensions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcQVNOT2JqZWN0Owp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcWDUwOVxTQU5cU3ViamVjdEFsdGVybmF0aXZlTmFtZXM7CgpjbGFzcyBDZXJ0aWZpY2F0ZUV4dGVuc2lvbnMgZXh0ZW5kcyBTZXQgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRpbm5lclNlcXVlbmNlOwogICAgcHJpdmF0ZSAkZXh0ZW5zaW9ucyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmlubmVyU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR0aGlzLT5pbm5lclNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3ViamVjdEFsdGVybmF0aXZlTmFtZXMoU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgJHNhbnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmFkZEV4dGVuc2lvbihPSUQ6OkNFUlRfRVhUX1NVQkpFQ1RfQUxUX05BTUUsICRzYW5zKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZEV4dGVuc2lvbigkb2lkU3RyaW5nLCBBU05PYmplY3QgJGV4dGVuc2lvbikKICAgIHsKICAgICAgICAkc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKG5ldyBPYmplY3RJZGVudGlmaWVyKCRvaWRTdHJpbmcpKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKCRleHRlbnNpb24pOwoKICAgICAgICAkdGhpcy0+aW5uZXJTZXF1ZW5jZS0+YWRkQ2hpbGQoJHNlcXVlbmNlKTsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9uc1tdID0gJGV4dGVuc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVQsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR0bXBPZmZzZXQgPSAkb2Zmc2V0SW5kZXg7CiAgICAgICAgJGV4dGVuc2lvbnMgPSBTZXF1ZW5jZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9ucy0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKTsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGV4dGVuc2lvbnMgYXMgJGV4dGVuc2lvbikgewogICAgICAgICAgICBpZiAoJGV4dGVuc2lvbi0+Z2V0VHlwZSgpICE9IElkZW50aWZpZXI6OlNFUVVFTkNFKSB7CiAgICAgICAgICAgICAgICAvL0ZJWE1FIHdyb25nIG9mZnNldCBpbmRleAogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ291bGQgbm90IHBhcnNlIENlcnRpZmljYXRlIEV4dGVuc2lvbnM6IEV4cGVjdGVkIEFTTi4xIFNlcXVlbmNlIGJ1dCBnb3QgJy4kZXh0ZW5zaW9uLT5nZXRUeXBlTmFtZSgpLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9uLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygpOwogICAgICAgICAgICAkY2hpbGRyZW4gPSAkZXh0ZW5zaW9uLT5nZXRDaGlsZHJlbigpOwogICAgICAgICAgICBpZiAoY291bnQoJGNoaWxkcmVuKSA8IDIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBOZWVkcyBhdCBsZWFzdCB0d28gY2hpbGQgZWxlbWVudHMgcGVyIGV4dGVuc2lvbiBzZXF1ZW5jZSAob2JqZWN0IGlkZW50aWZpZXIgYW5kIG9jdGV0IHN0cmluZyknLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJG9iamVjdElkZW50aWZpZXIgKi8KICAgICAgICAgICAgJG9iamVjdElkZW50aWZpZXIgPSAkY2hpbGRyZW5bMF07CgogICAgICAgICAgICAvKiogQHZhciBPY3RldFN0cmluZyAkb2N0ZXRTdHJpbmcgKi8KICAgICAgICAgICAgJG9jdGV0U3RyaW5nID0gJGNoaWxkcmVuWzFdOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRUeXBlKCkgIT0gSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBFeHBlY3RlZCBBU04uMSBPYmplY3QgSWRlbnRpZmllciBidXQgZ290ICcuJGV4dGVuc2lvbi0+Z2V0VHlwZU5hbWUoKSwgJHRtcE9mZnNldCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9iamVjdElkZW50aWZpZXItPmdldE9iamVjdExlbmd0aCgpOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRDb250ZW50KCkgPT0gT0lEOjpDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FKSB7CiAgICAgICAgICAgICAgICAkc2FucyA9IFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzKCRzYW5zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGNhbiBub3cgb25seSBwYXJzZSBTQU5zLiBUaGVyZSBtaWdodCBiZSBtb3JlIGluIHRoZSBmdXR1cmUKICAgICAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9jdGV0U3RyaW5nLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+Z2V0QmluYXJ5KCk7IC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbnRlbnQgb2N0ZXRzIGFuZCBvYmplY3Qgc2l6ZXMgb25jZSAoanVzdCB0byBsZXQgdGhlIGVxdWFsaXR5IHVuaXQgdGVzdHMgcGFzcyA6LyApCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateSubject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXENvbXBvc2l0ZVxSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxDb21wb3NpdGVcUkROU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CgpjbGFzcyBDZXJ0aWZpY2F0ZVN1YmplY3QgZXh0ZW5kcyBTZXF1ZW5jZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbW1vbk5hbWU7CiAgICBwcml2YXRlICRlbWFpbDsKICAgIHByaXZhdGUgJG9yZ2FuaXphdGlvbjsKICAgIHByaXZhdGUgJGxvY2FsaXR5OwogICAgcHJpdmF0ZSAkc3RhdGU7CiAgICBwcml2YXRlICRjb3VudHJ5OwogICAgcHJpdmF0ZSAkb3JnYW5pemF0aW9uYWxVbml0OwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY29tbW9uTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZW1haWwKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxpdHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudHJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcmdhbml6YXRpb25hbFVuaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb21tb25OYW1lLCAkZW1haWwsICRvcmdhbml6YXRpb24sICRsb2NhbGl0eSwgJHN0YXRlLCAkY291bnRyeSwgJG9yZ2FuaXphdGlvbmFsVW5pdCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09VTlRSWV9OQU1FLCAkY291bnRyeSksCiAgICAgICAgICAgIG5ldyBSRE5TdHJpbmcoT0lEOjpTVEFURV9PUl9QUk9WSU5DRV9OQU1FLCAkc3RhdGUpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6TE9DQUxJVFlfTkFNRSwgJGxvY2FsaXR5KSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9SR0FOSVpBVElPTl9OQU1FLCAkb3JnYW5pemF0aW9uKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9VX05BTUUsICRvcmdhbml6YXRpb25hbFVuaXQpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09NTU9OX05BTUUsICRjb21tb25OYW1lKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6OlBLQ1M5X0VNQUlMLCAkZW1haWwpCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmNvbW1vbk5hbWUgPSAkY29tbW9uTmFtZTsKICAgICAgICAkdGhpcy0+ZW1haWwgPSAkZW1haWw7CiAgICAgICAgJHRoaXMtPm9yZ2FuaXphdGlvbiA9ICRvcmdhbml6YXRpb247CiAgICAgICAgJHRoaXMtPmxvY2FsaXR5ID0gJGxvY2FsaXR5OwogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdGF0ZTsKICAgICAgICAkdGhpcy0+Y291bnRyeSA9ICRjb3VudHJ5OwogICAgICAgICR0aGlzLT5vcmdhbml6YXRpb25hbFVuaXQgPSAkb3JnYW5pemF0aW9uYWxVbml0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21tb25OYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbW1vbk5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVtYWlsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVtYWlsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3JnYW5pemF0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGl0eSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sb2NhbGl0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvdW50cnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y291bnRyeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uYWxVbml0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9yZ2FuaXphdGlvbmFsVW5pdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6U0VRVUVOQ0UsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJG5hbWVzID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICRjb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkcmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA9IFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWU6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJHJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUtPmdldE9iamVjdExlbmd0aCgpOwogICAgICAgICAgICAkbmFtZXNbXSA9ICRyZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/Attributes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlRXh0ZW5zaW9uczsKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcQ29uc3RydWN0Owp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwoKY2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gMHhBMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCBTZXQgJGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRvYmplY3RJZGVudGlmaWVyKSkgewogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCRvYmplY3RJZGVudGlmaWVyKTsKICAgICAgICB9CiAgICAgICAgJGF0dHJpYnV0ZVNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAkYXR0cmlidXRlU2VxdWVuY2UtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCk7ICAvLyBsZW5ndGggYW5kIG51bWJlciBvZiBsZW5ndGggb2N0ZXRzIGlzIGNhbGN1bGF0ZWQKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGF0dHJpYnV0ZVNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgMHhBMCwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvY3RldHNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRpbml0aWFsT2Zmc2V0ID0gJG9mZnNldEluZGV4OyAvLyB1c2VkIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCBiaXRzIGhhdmUgYmVlbiByZWFkCiAgICAgICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVFVRU5DRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSAkb2JqZWN0SWRlbnRpZmllci0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICBpZiAoJG9pZFN0cmluZyA9PSBPSUQ6OlBLQ1M5X0VYVEVOU0lPTl9SRVFVRVNUKSB7CiAgICAgICAgICAgICAgICAkYXR0cmlidXRlID0gQ2VydGlmaWNhdGVFeHRlbnNpb25zOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGF0dHJpYnV0ZSA9IEFTTk9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAgICAgJG9jdGV0c1RvUmVhZCAtPSAoJG9mZnNldEluZGV4IC0gJGluaXRpYWxPZmZzZXQpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/CSR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxJbnRlZ2VyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlU3ViamVjdDsKdXNlIEZHXFg1MDlcQWxnb3JpdGhtSWRlbnRpZmllcjsKdXNlIEZHXFg1MDlcUHVibGljS2V5OwoKY2xhc3MgQ1NSIGV4dGVuZHMgU2VxdWVuY2UKewogICAgY29uc3QgQ1NSX1ZFUlNJT05fTlIgPSAwOwoKICAgIHByb3RlY3RlZCAkc3ViamVjdDsKICAgIHByb3RlY3RlZCAkcHVibGljS2V5OwogICAgcHJvdGVjdGVkICRzaWduYXR1cmU7CiAgICBwcm90ZWN0ZWQgJHNpZ25hdHVyZUFsZ29yaXRobTsKCiAgICBwcm90ZWN0ZWQgJHN0YXJ0U2VxdWVuY2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tb25OYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbWFpbAogICAgICogQHBhcmFtIHN0cmluZyAkb3JnYW5pemF0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGl0eQogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvdW50cnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbmFsVW5pdAogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZUFsZ29yaXRobQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbW1vbk5hbWUsICRlbWFpbCwgJG9yZ2FuaXphdGlvbiwgJGxvY2FsaXR5LCAkc3RhdGUsICRjb3VudHJ5LCAkb3JnYW5pemF0aW9uYWxVbml0LCAkcHVibGljS2V5LCAkc2lnbmF0dXJlID0gbnVsbCwgJHNpZ25hdHVyZUFsZ29yaXRobSA9IE9JRDo6U0hBMV9XSVRIX1JTQV9TSUdOQVRVUkUpCiAgICB7CiAgICAgICAgJHRoaXMtPnN1YmplY3QgPSBuZXcgQ2VydGlmaWNhdGVTdWJqZWN0KAogICAgICAgICAgICAkY29tbW9uTmFtZSwKICAgICAgICAgICAgJGVtYWlsLAogICAgICAgICAgICAkb3JnYW5pemF0aW9uLAogICAgICAgICAgICAkbG9jYWxpdHksCiAgICAgICAgICAgICRzdGF0ZSwKICAgICAgICAgICAgJGNvdW50cnksCiAgICAgICAgICAgICRvcmdhbml6YXRpb25hbFVuaXQKICAgICAgICApOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXkgPSAkcHVibGljS2V5OwogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG0gPSAkc2lnbmF0dXJlQWxnb3JpdGhtOwoKICAgICAgICBpZiAoaXNzZXQoJHNpZ25hdHVyZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZUNTUlNlcXVlbmNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVDU1JTZXF1ZW5jZSgpCiAgICB7CiAgICAgICAgJHZlcnNpb25OciAgICAgICAgICAgID0gbmV3IEludGVnZXIoc2VsZjo6Q1NSX1ZFUlNJT05fTlIpOwogICAgICAgICRwdWJsaWNLZXkgICAgICAgICAgICA9IG5ldyBQdWJsaWNLZXkoJHRoaXMtPnB1YmxpY0tleSk7CiAgICAgICAgJHNpZ25hdHVyZSAgICAgICAgICAgID0gbmV3IEJpdFN0cmluZygkdGhpcy0+c2lnbmF0dXJlKTsKICAgICAgICAkc2lnbmF0dXJlQWxnb3JpdGhtICAgID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobSk7CgogICAgICAgICRjZXJ0UmVxdWVzdEluZm8gID0gbmV3IFNlcXVlbmNlKCR2ZXJzaW9uTnIsICR0aGlzLT5zdWJqZWN0LCAkcHVibGljS2V5KTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIHVuZGVybHlpbmcgQ29uc3RydWN0CiAgICAgICAgJHRoaXMtPnJld2luZCgpOwogICAgICAgICR0aGlzLT5jaGlsZHJlbiA9IFtdOwogICAgICAgICR0aGlzLT5hZGRDaGlsZCgkY2VydFJlcXVlc3RJbmZvKTsKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJHNpZ25hdHVyZUFsZ29yaXRobSk7CiAgICAgICAgJHRoaXMtPmFkZENoaWxkKCRzaWduYXR1cmUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVTdWJqZWN0KCkKICAgIHsKICAgICAgICAkdmVyc2lvbk5yICAgICAgICAgICAgPSBuZXcgSW50ZWdlcihzZWxmOjpDU1JfVkVSU0lPTl9OUik7CiAgICAgICAgJHB1YmxpY0tleSAgICAgICAgICAgID0gbmV3IFB1YmxpY0tleSgkdGhpcy0+cHVibGljS2V5KTsKCiAgICAgICAgJGNlcnRSZXF1ZXN0SW5mbyAgPSBuZXcgU2VxdWVuY2UoJHZlcnNpb25OciwgJHRoaXMtPnN1YmplY3QsICRwdWJsaWNLZXkpOwogICAgICAgIHJldHVybiAkY2VydFJlcXVlc3RJbmZvLT5nZXRCaW5hcnkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2lnbmF0dXJlKCRzaWduYXR1cmUsICRzaWduYXR1cmVBbGdvcml0aG0gPSBPSUQ6OlNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFKQogICAgewogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG0gPSAkc2lnbmF0dXJlQWxnb3JpdGhtOwoKICAgICAgICAkdGhpcy0+Y3JlYXRlQ1NSU2VxdWVuY2UoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgJHRtcCA9IGJhc2U2NF9lbmNvZGUoJHRoaXMtPmdldEJpbmFyeSgpKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgc3RybGVuKCR0bXApOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgoJGkgKyAyKSAlIDY1ID09IDApIHsKICAgICAgICAgICAgICAgICR0bXAgPSBzdWJzdHIoJHRtcCwgMCwgJGkgKyAxKS4iXG4iLnN1YnN0cigkdG1wLCAkaSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tJy5QSFBfRU9MOwogICAgICAgICRyZXN1bHQgLj0gJHRtcC5QSFBfRU9MOwogICAgICAgICRyZXN1bHQgLj0gJy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLSc7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Q1NSX1ZFUlNJT05fTlI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE9yZ2FuaXphdGlvbk5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3ViamVjdC0+Z2V0T3JnYW5pemF0aW9uKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldExvY2FsTmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRMb2NhbGl0eSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb3VudHJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QtPmdldENvdW50cnkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uYWxVbml0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QtPmdldE9yZ2FuaXphdGlvbmFsVW5pdCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVBbGdvcml0aG0oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlQWxnb3JpdGhtOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PrivateKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQcml2YXRlS2V5IGV4dGVuZHMgU2VxdWVuY2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZXhLZXkKICAgICAqIEBwYXJhbSBcRkdcQVNOMVxBU05PYmplY3R8c3RyaW5nICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaGV4S2V5LCAkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyA9IE9JRDo6UlNBX0VOQ1JZUFRJT04pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgKICAgICAgICAgICAgbmV3IFNlcXVlbmNlKAogICAgICAgICAgICAgICAgbmV3IE9iamVjdElkZW50aWZpZXIoJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcpLAogICAgICAgICAgICAgICAgbmV3IE51bGxPYmplY3QoKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKCRoZXhLZXkpCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQdWJsaWNLZXkgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhleEtleQogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdHxzdHJpbmcgJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRoZXhLZXksICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nID0gT0lEOjpSU0FfRU5DUllQVElPTikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0SWRlbnRpZmllcigkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyksCiAgICAgICAgICAgICAgICBuZXcgTnVsbE9iamVjdCgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBCaXRTdHJpbmcoJGhleEtleSkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/DNSName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcR2VuZXJhbFN0cmluZzsKCmNsYXNzIEROU05hbWUgZXh0ZW5kcyBHZW5lcmFsU3RyaW5nCnsKICAgIGNvbnN0IElERU5USUZJRVIgPSAweDgyOyAvLyBub3Qgc3VyZSB5ZXQgd2h5IHRoaXMgaXMgdGhlIGlkZW50aWZpZXIgdXNlZCBpbiBTQU4gZXh0ZW5zaW9ucwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZG5zTmFtZVN0cmluZykKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkbnNOYW1lU3RyaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklERU5USUZJRVI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/IPAddress.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgSVBBZGRyZXNzIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgY29uc3QgSURFTlRJRklFUiA9IDB4ODc7IC8vIG5vdCBzdXJlIHlldCB3aHkgdGhpcyBpcyB0aGUgaWRlbnRpZmllciB1c2VkIGluIFNBTiBleHRlbnNpb25zCgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlwQWRkcmVzc1N0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkaXBBZGRyZXNzU3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SURFTlRJRklFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGlwUGFydHMgPSBleHBsb2RlKCcuJywgJHRoaXMtPnZhbHVlKTsKICAgICAgICAkYmluYXJ5ICA9IGNocigkaXBQYXJ0c1swXSk7CiAgICAgICAgJGJpbmFyeSAuPSBjaHIoJGlwUGFydHNbMV0pOwogICAgICAgICRiaW5hcnkgLj0gY2hyKCRpcFBhcnRzWzJdKTsKICAgICAgICAkYmluYXJ5IC49IGNocigkaXBQYXJ0c1szXSk7CgogICAgICAgIHJldHVybiAkYmluYXJ5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBzZWxmOjpJREVOVElGSUVSLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQSBGR1xcWDUwOVxTQU5cSVBBZGRyZXNzIHNob3VsZCBoYXZlIGEgY29udGVudCBsZW5ndGggb2YgNC4gRXh0cmFjdGVkIGxlbmd0aCB3YXMgeyRjb250ZW50TGVuZ3RofSIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaXBBZGRyZXNzU3RyaW5nID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigkaXBBZGRyZXNzU3RyaW5nKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/SubjectAlternativeNames.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCi8qKgogKiBTZWUgc2VjdGlvbiA4LjMuMi4xIG9mIElUVS1UIFguNTA5LgogKi8KY2xhc3MgU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRhbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGREb21haW5OYW1lKEROU05hbWUgJGRvbWFpbk5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsdGVybmF0aXZlTmFtZXNTZXF1ZW5jZS0+YWRkQ2hpbGQoJGRvbWFpbk5hbWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJUChJUEFkZHJlc3MgJGlwKQogICAgewogICAgICAgICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmFkZENoaWxkKCRpcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRDb250ZW50KCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmdldEJpbmFyeSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpPQ1RFVFNUUklORywgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIHdpdGhpbiB0aGUgb2N0ZXQgc3RyaW5nIGFmdGVyIHRoZSBPYmplY3QgaWRlbnRpZmllciAnLk9JRDo6Q0VSVF9FWFRfU1VCSkVDVF9BTFRfTkFNRS4iIGlzIHRvbyBzaG9ydCAoeyRjb250ZW50TGVuZ3RofSBvY3RldHMpIiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlID0gJG9mZnNldEluZGV4OwogICAgICAgICRzZXF1ZW5jZSA9IFNlcXVlbmNlOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlICs9ICRzZXF1ZW5jZS0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKSArIDE7CgogICAgICAgIGlmICgkc2VxdWVuY2UtPmdldE9iamVjdExlbmd0aCgpICE9ICRjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBzdXJyb3VuZGluZyBvY3RldCBzdHJpbmcnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgLyoqIEB2YXIgXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICBmb3JlYWNoICgkc2VxdWVuY2UgYXMgJG9iamVjdCkgewogICAgICAgICAgICBpZiAoJG9iamVjdC0+Z2V0VHlwZSgpID09IEROU05hbWU6OklERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgICRkb21haW5OYW1lID0gRE5TTmFtZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldE9mU2VxdWVuY2UpOwogICAgICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkRG9tYWluTmFtZSgkZG9tYWluTmFtZSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkb2JqZWN0LT5nZXRUeXBlKCkgPT0gSVBBZGRyZXNzOjpJREVOVElGSUVSKSB7CiAgICAgICAgICAgICAgICAkaXAgPSBJUEFkZHJlc3M6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRPZlNlcXVlbmNlKTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZElQKCRpcCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDb3VsZCBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiBPbmx5IEROU05hbWUgYW5kIElQIFNBTnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRCaW5hcnkoKTsgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY29udGVudCBvY3RldHMgYW5kIG9iamVjdCBzaXplcyBvbmNlIChqdXN0IHRvIGxldCB0aGUgZXF1YWxpdHkgdW5pdCB0ZXN0cyBwYXNzIDovICkKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyLTIwMTUgRnJpZWRyaWNoIEdyb8OfZSA8ZnJpZWRyaWNoLmdyb3NzZUBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQQVNOMQo9PT09PT09CgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYWN0aW9ucy93b3JrZmxvd3MvcGhwdW5pdC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9hY3Rpb25zL3dvcmtmbG93cy9waHB1bml0LnltbCkKWyFbUEhQIDcgcmVhZHldKGh0dHA6Ly9waHA3cmVhZHkudGltZXNwbGludGVyLmNoL2Zncm9zc2UvUEhQQVNOMS9iYWRnZS5zdmcpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZmdyb3NzZS9QSFBBU04xKQpbIVtDb3ZlcmFnZSBTdGF0dXNdKGh0dHBzOi8vY292ZXJhbGxzLmlvL3JlcG9zL2Zncm9zc2UvUEhQQVNOMS9iYWRnZS5zdmc/YnJhbmNoPW1hc3RlciZzZXJ2aWNlPWdpdGh1YildKGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9mZ3Jvc3NlL1BIUEFTTjE/YnJhbmNoPW1hc3RlcikKClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9mZ3Jvc3NlL3BocGFzbjEvdi9zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2Zncm9zc2UvcGhwYXNuMS9kb3dubG9hZHMucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbTGF0ZXN0IFVuc3RhYmxlIFZlcnNpb25dKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvZmdyb3NzZS9waHBhc24xL3YvdW5zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2Zncm9zc2UvcGhwYXNuMSkKWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9mZ3Jvc3NlL3BocGFzbjEvbGljZW5zZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xKQoKLS0tCgo8aDI+PHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Tm90aWNlOiBUaGlzIGxpYnJhcnkgaXMgbm8gbG9uZ2VyIGFjdGl2ZWx5IG1haW50YWluZWQhPC9zcGFuPjwvaDI+CklmIHlvdSBhcmUgY3VycmVudGx5IHVzaW5nIFBIUEFTTjEsIHRoaXMgbWlnaHQgbm90IGJlIGFuIGltbWVkaWF0ZSBwcm9ibGVtIGZvciB5b3UsIHNpbmNlIHRoaXMgbGlicmFyeSB3YXMgYWx3YXlzIHJhdGhlciBzdGFibGUuCgpIb3dldmVyLCB5b3UgYXJlIGFkdmlzZWQgdG8gbWlncmF0ZSB0byBhbHRlcm5hdGl2ZSBwYWNrYWdlcyB0byBlbnN1cmUgdGhhdCB5b3VyIGFwcGxpY2F0aW9ucyByZW1haW4gZnVuY3Rpb25hbCBhbHNvIHdpdGggbmV3ZXIgUEhQIHZlcnNpb25zLgoKLS0tCgpBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBbQVNOLjFdWzNdIHN0cnVjdHVyZXMKdXNpbmcgdGhlIFtJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlc11bNF0uClRoaXMgZW5jb2RpbmcgaXMgdmVyeSBmcmVxdWVudGx5IHVzZWQgaW4gW1guNTA5IFBLSSBlbnZpcm9ubWVudHNdWzVdIG9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gaGV0ZXJvZ2VuZW91cyBjb21wdXRlciBzeXN0ZW1zLgoKVGhlIEFQSSBhbGxvd3MgeW91IHRvIGVuY29kZSBBU04uMSBzdHJ1Y3R1cmVzIHRvIGNyZWF0ZSBiaW5hcnkgZGF0YSBzdWNoIGFzIGNlcnRpZmljYXRlCnNpZ25pbmcgcmVxdWVzdHMgKENTUiksIFguNTA5IGNlcnRpZmljYXRlcyBvciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkwpLgpQSFBBU04xIGNhbiBhbHNvIHJlYWQgW0JFUiBlbmNvZGVkXVs2XSBiaW5hcnkgZGF0YSBpbnRvIHNlcGFyYXRlIFBIUCBvYmplY3RzIHRoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSB1c2VyIGFuZCByZWVuY29kZWQgYWZ0ZXJ3YXJkcy4KClRoZSAqKmNoYW5nZWxvZyoqIGNhbiBub3cgYmUgZm91bmQgYXQgW0NIQU5HRUxPRy5tZF0oQ0hBTkdFTE9HLm1kKS4KCiMjIERlcGVuZGVuY2llcwoKUEhQQVNOMSByZXF1aXJlcyBhdCBsZWFzdCBgUEhQIDcuMGAgYW5kIGVpdGhlciB0aGUgYGdtcGAgb3IgYGJjbWF0aGAgZXh0ZW5zaW9uLgpTdXBwb3J0IGZvciBvbGRlciBQSFAgdmVyc2lvbnMgKGkuZS4gUEhQIDUuNikgd2FzIGRyb3BwZWQgc3RhcnRpbmcgd2l0aCBgdjIuMGAuCklmIHlvdSBtdXN0IHVzZSBhbiBvdXRkYXRlZCBQSFAgdmVyc2lvbiBjb25zaWRlciB1c2luZyBbUEhQQVNOIHYxLjVdWzEzXS4KCkZvciB0aGUgbG9hZGluZyBvZiBvYmplY3QgaWRlbnRpZmllciBuYW1lcyBkaXJlY3RseSBmcm9tIHRoZSB3ZWIgW2N1cmxdWzddIGlzIHVzZWQuCgojIyBJbnN0YWxsYXRpb24KClRoZSBwcmVmZXJyZWQgd2F5IHRvIGluc3RhbGwgdGhpcyBsaWJyYXJ5IGlzIHRvIHJlbHkgb24gW0NvbXBvc2VyXVsyXToKCmBgYGJhc2gKJCBjb21wb3NlciByZXF1aXJlIGZncm9zc2UvcGhwYXNuMQpgYGAKCiMjIFVzYWdlCgojIyMgRW5jb2RpbmcgQVNOLjEgU3RydWN0dXJlcwoKUEhQQVNOMSBvZmZlcnMgeW91IGEgY2xhc3MgZm9yIGVhY2ggb2YgdGhlIGltcGxlbWVudGVkIEFTTi4xIHVuaXZlcnNhbCB0eXBlcy4KVGhlIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgcHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgc28geW91IHNob3VsZCBoYXZlIG5vIGJpZyB0cm91YmxlIGdldHRpbmcgc3RhcnRlZC4KQWxsIGRhdGEgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIFtERVIgZW5jb2RpbmddWzhdCgpgYGBwaHAKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJvb2xlYW47CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxFbnVtZXJhdGVkOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFByaW50YWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNlcXVlbmNlOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVsbE9iamVjdDsKCiRpbnRlZ2VyID0gbmV3IEludGVnZXIoMTIzNDU2KTsgICAgICAgIAokYm9vbGVhbiA9IG5ldyBCb29sZWFuKHRydWUpOwokZW51bSA9IG5ldyBFbnVtZXJhdGVkKDEpOwokaWE1U3RyaW5nID0gbmV3IElBNVN0cmluZygnSGVsbG8gd29ybGQnKTsKCiRhc25OdWxsID0gbmV3IE51bGxPYmplY3QoKTsKJG9iamVjdElkZW50aWZpZXIxID0gbmV3IE9iamVjdElkZW50aWZpZXIoJzEuMi4yNTAuMS4xNi45Jyk7CiRvYmplY3RJZGVudGlmaWVyMiA9IG5ldyBPYmplY3RJZGVudGlmaWVyKE9JRDo6UlNBX0VOQ1JZUFRJT04pOwokcHJpbnRhYmxlU3RyaW5nID0gbmV3IFByaW50YWJsZVN0cmluZygnRm9vIGJhcicpOwoKJHNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRpbnRlZ2VyLCAkYm9vbGVhbiwgJGVudW0sICRpYTVTdHJpbmcpOwokc2V0ID0gbmV3IFNldCgkc2VxdWVuY2UsICRhc25OdWxsLCAkb2JqZWN0SWRlbnRpZmllcjEsICRvYmplY3RJZGVudGlmaWVyMiwgJHByaW50YWJsZVN0cmluZyk7CgokbXlCaW5hcnkgID0gJHNlcXVlbmNlLT5nZXRCaW5hcnkoKTsKJG15QmluYXJ5IC49ICRzZXQtPmdldEJpbmFyeSgpOwoKZWNobyBiYXNlNjRfZW5jb2RlKCRteUJpbmFyeSk7CmBgYAoKCiMjIyBEZWNvZGluZyBiaW5hcnkgZGF0YQoKRGVjb2RpbmcgQkVSIGVuY29kZWQgYmluYXJ5IGRhdGEgaXMganVzdCBhcyBlYXN5IGFzIGVuY29kaW5nIGl0OgoKYGBgcGhwCnVzZSBGR1xBU04xXEFTTk9iamVjdDsKCiRiYXNlNjRTdHJpbmcgPSAuLi4KJGJpbmFyeURhdGEgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjRTdHJpbmcpOyAgICAgICAgCiRhc25PYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEpOwoKCi8vIGRvIHN0dWZmCmBgYAoKSWYgeW91IGFscmVhZHkga25vdyBleGFjdGx5IGhvdyB5b3VyIGV4cGVjdGVkIGRhdGEgc2hvdWxkIGxvb2sgbGlrZSB5b3UgY2FuIHVzZSB0aGUgYEZHXEFTTjFcVGVtcGxhdGVQYXJzZXJgOgoKYGBgcGhwCnVzZSBGR1xBU04xXFRlbXBsYXRlUGFyc2VyOwoKLy8gZmlyc3QgZGVmaW5lIHlvdXIgdGVtcGxhdGUKJHRlbXBsYXRlID0gWwogICAgSWRlbnRpZmllcjo6U0VRVUVOQ0UgPT4gWwogICAgICAgIElkZW50aWZpZXI6OlNFVCA9PiBbCiAgICAgICAgICAgIElkZW50aWZpZXI6Ok9CSkVDVF9JREVOVElGSUVSLAogICAgICAgICAgICBJZGVudGlmaWVyOjpTRVFVRU5DRSA9PiBbCiAgICAgICAgICAgICAgICBJZGVudGlmaWVyOjpJTlRFR0VSLAogICAgICAgICAgICAgICAgSWRlbnRpZmllcjo6QklUU1RSSU5HLAogICAgICAgICAgICBdCiAgICAgICAgXQogICAgXQpdOwoKLy8gaWYgeW91ciBiaW5hcnkgZGF0YSBpcyBub3QgbWF0Y2hpbmcgdGhlIHRlbXBsYXRlIHlvdSBwcm92aWRlZCB0aGlzIHdpbGwgdGhyb3cgYW4gYFxFeGNlcHRpb25gOgokcGFyc2VyID0gbmV3IFRlbXBsYXRlUGFyc2VyKCk7CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJpbmFyeSgkZGF0YSwgJHRlbXBsYXRlKTsKCi8vIHRoZXJlIGlzIGFsc28gYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBpZiB5b3UgcGFyc2UgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQ6CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJhc2U2NCgkZGF0YSwgJHRlbXBsYXRlKTsKYGBgCgpZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB5b3VyIGRhdGEgaGFzIGV4YWN0bHkgdGhlIGZvcm1hdCB5b3UgYXJlIGV4cGVjdGluZy4KCiMjIyBOYXZpZ2F0aW5nIGRlY29kZWQgZGF0YQoKQWxsIGNvbnN0cnVjdGVkIGNsYXNzZXMgKGkuZS4gYFNlcXVlbmNlYCBhbmQgYFNldGApIGNhbiBiZSBuYXZpZ2F0ZWQgYnkgYXJyYXkgYWNjZXNzIG9yIHVzaW5nIGFuIGl0ZXJhdG9yLgpZb3UgY2FuIGZpbmQgZXhhbXBsZXMKW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYmxvYi9mNjQ0MmNhZGRhOWQzNmYzNTE4YzczN2UzMmYyODMwMGE1ODhiNzc3L3Rlc3RzL0FTTjEvVW5pdmVyc2FsL1NlcXVlbmNlVGVzdC5waHAjTDE0OC0xNDgpLApbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ibG9iL2Y2NDQyY2FkZGE5ZDM2ZjM1MThjNzM3ZTMyZjI4MzAwYTU4OGI3NzcvdGVzdHMvQVNOMS9Vbml2ZXJzYWwvU2VxdWVuY2VUZXN0LnBocCNMMTIxKSBhbmQgCltoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2Jsb2IvZjY0NDJjYWRkYTlkMzZmMzUxOGM3MzdlMzJmMjgzMDBhNTg4Yjc3Ny90ZXN0cy9BU04xL1RlbXBsYXRlUGFyc2VyVGVzdC5waHAjTDQ1KS4KCgojIyMgR2l2ZSBtZSBtb3JlIGV4YW1wbGVzIQoKVG8gc2VlIHNvbWUgZXhhbXBsZSB1c2FnZSBvZiB0aGUgQVBJIGNsYXNzZXMgb3Igc29tZSBnZW5lcmF0ZWQgb3V0cHV0IGNoZWNrIG91dCB0aGUgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS4KCgojIyMgSG93IGRvIEkgY29udHJpYnV0ZT8KClRoaXMgcHJvamVjdCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBhbmQgdGh1cyBkb2VzIG5vdCBhY2NlcHQgYW55IG5ldyBjb250cmlidXRpb25zLgoKIyMjIFRoYW5rcwoKVG8gW2FsbCBjb250cmlidXRvcnNdWzFdIHNvIGZhciEKCiMjIExpY2Vuc2UKClRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgW01JVCBMaWNlbnNlXShMSUNFTlNFKS4KClsxXTogaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ncmFwaHMvY29udHJpYnV0b3JzClsyXTogaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvClszXTogaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL2FzbjEvCls0XTogaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3JlY29tbWVuZGF0aW9ucy9yZWMuYXNweD9yZWM9eC42OTAKWzVdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1guNTA5Cls2XTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjY5MCNCRVJfZW5jb2RpbmcKWzddOiBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vYm9vay5jdXJsLnBocApbOF06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWC42OTAjREVSX2VuY29kaW5nCls5XTogaHR0cHM6Ly9zdHlsZWNpLmlvClsxMF06IGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9mZ3Jvc3NlL1BIUEFTTjEKWzExXTogaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ibG9iL21hc3Rlci90ZXN0cy9BU04xL1RlbXBsYXRlUGFyc2VyVGVzdC5waHAjTDE2ClsxMl06IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZC9mb3J1bS9waHBhc24xClsxM106IGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9mZ3Jvc3NlL3BocGFzbjEjMS41LjIK]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCiMjIFs2LjEwLjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuOS4wLi4udjYuMTAuMCkgKDIwMjMtMTEtMjgpCgoKIyMjIEZlYXR1cmVzCgoqIGFsbG93IHR5cCBoZWFkZXIgb3ZlcnJpZGUgKFsjNTQ2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNTQ2KSkgKFs3OWNiMzBiXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvNzljYjMwYjcyOWEyMjkzMWIyZmJkNmI1M2YyMDYyOWE4MzAzMWJhOSkpCgojIyBbNi45LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuOC4xLi4udjYuOS4wKSAoMjAyMy0xMC0wNCkKCgojIyMgRmVhdHVyZXMKCiogYWRkIHBheWxvYWQgdG8gand0IGV4Y2VwdGlvbiAoWyM1MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MjEpKSAoWzE3NWVkZjldKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8xNzVlZGY5NThiYjYxOTIyZWMxMzViMjMzM2FjZjU2MjJmMjIzOGEyKSkKCiMjIFs2LjguMV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni44LjAuLi52Ni44LjEpICgyMDIzLTA3LTE0KQoKCiMjIyBCdWcgRml4ZXMKCiogYWNjZXB0IGZsb2F0IGNsYWltcyBidXQgcm91bmQgZG93biB0byBpZ25vcmUgdGhlbSAoWyM0OTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80OTIpKSAoWzM5MzY4NDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8zOTM2ODQyM2JlZWFhY2IzMDAyYWZhN2RjYjc1YmFlYmYyMDRmZTdlKSkKKiBkaWZmZXJlbnQgQmVmb3JlVmFsaWRFeGNlcHRpb24gbWVzc2FnZXMgZm9yIG5iZiBhbmQgaWF0IChbIzUyNl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzUyNikpIChbMGE1M2NmMl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tbWl0LzBhNTNjZjI5ODZlNDVjMmJjYmYxYTI2OWYzMTNlYmY1NmExNTRlZTQpKQoKIyMgWzYuOC4wXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21wYXJlL3Y2LjcuMC4uLnY2LjguMCkgKDIwMjMtMDYtMTQpCgoKIyMjIEZlYXR1cmVzCgoqIGFkZCBzdXBwb3J0IGZvciBQLTM4NCBjdXJ2ZSAoWyM1MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MTUpKSAoWzVkZTQzMjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC81ZGU0MzIzZjRiYWY0ZDcwYmNhODY2M2JkODc2ODJhNjljNjU2YzNkKSkKCgojIyMgQnVnIEZpeGVzCgoqIGhhbmRsZSBpbnZhbGlkIGh0dHAgcmVzcG9uc2VzIChbIzUwOF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzUwOCkpIChbOTFjMzljN10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tbWl0LzkxYzM5YzcyYjIyZmMzZTExOTFlNTc0MDg5NTUyYzFmMjA0MWM3MTgpKQoKIyMgWzYuNy4wXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21wYXJlL3Y2LjYuMC4uLnY2LjcuMCkgKDIwMjMtMDYtMTQpCgoKIyMjIEZlYXR1cmVzCgoqIGFkZCBlZDI1NTE5IHN1cHBvcnQgdG8gSldLIChwdWJsaWMga2V5cykgKFsjNDUyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDUyKSkgKFtlNTM5NzlhXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvZTUzOTc5YWJhZTkyN2RlOTE2YTc1YjlkMjM5Y2ZkYThjZTMyYmUyYSkpCgojIyBbNi42LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuNS4wLi4udjYuNi4wKSAoMjAyMy0wNi0xMykKCgojIyMgRmVhdHVyZXMKCiogYWxsb3cgZ2V0IGhlYWRlcnMgd2hlbiBkZWNvZGluZyB0b2tlbiAoWyM0NDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80NDIpKSAoW2ZiODVmNDddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC9mYjg1ZjQ3Y2ZhZWZmZGQ5NGZhZjhkZWZkZjA3MTY0YWJjZGFkNmMzKSkKCgojIyMgQnVnIEZpeGVzCgoqIG9ubHkgY2hlY2sgaWF0IGlmIG5iZiBpcyBub3QgdXNlZCAoWyM0OTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80OTMpKSAoWzM5OGNjZDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC8zOThjY2QyNWVhMTJmYTg0YjllNGYxMDg1ZDVmZjQ0OGMyMWVjNzk3KSkKCiMjIFs2LjUuMF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni40LjAuLi52Ni41LjApICgyMDIzLTA1LTEyKQoKCiMjIyBCdWcgRml4ZXMKCiogYWxsb3cgS0lEIG9mICcwJyAoWyM1MDVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy81MDUpKSAoWzlkYzQ2YTldKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC85ZGM0NmE5YzNlNTgwMTI5NDI0OWNmZDI1NTRjNTM2M2M5ZjkzMjZhKSkKCgojIyMgTWlzY2VsbGFuZW91cyBDaG9yZXMKCiogZHJvcCBzdXBwb3J0IGZvciBQSFAgNy4zIChbIzQ5NV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvaXNzdWVzLzQ5NSkpCgojIyBbNi40LjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbXBhcmUvdjYuMy4yLi4udjYuNC4wKSAoMjAyMy0wMi0wOCkKCgojIyMgRmVhdHVyZXMKCiogYWRkIHN1cHBvcnQgZm9yIFczQyBFUzI1NksgKFsjNDYyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDYyKSkgKFsyMTM5MjRmXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvMjEzOTI0ZjUxOTM2MjkxZmJiY2E5OTE1OGIxMWJkNGFlNTZjMmM5NSkpCiogaW1wcm92ZSBjYWNoaW5nIGJ5IG9ubHkgZGVjb2RpbmcgandrcyB3aGVuIG5lY2Vzc2FyeSAoWyM0ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80ODYpKSAoWzc4ZDNlZDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC83OGQzZWQxMDczNTUzZjdkMGJiZmZhNmMyMDEwMDA5YTBkNDgzZDVjKSkKCiMjIFs2LjMuMl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni4zLjEuLi52Ni4zLjIpICgyMDIyLTExLTAxKQoKCiMjIyBCdWcgRml4ZXMKCiogY2hlY2sga2lkIGJlZm9yZSB1c2luZyBhcyBhcnJheSBpbmRleCAoW2JhZDFiMDRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC9iYWQxYjA0MGQwYzczNmJiZjg2ODE0YzZiNWFlNjE0ZjUxN2NmN2JkKSkKCiMjIFs2LjMuMV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvY29tcGFyZS92Ni4zLjAuLi52Ni4zLjEpICgyMDIyLTExLTAxKQoKCiMjIyBCdWcgRml4ZXMKCiogY2FzaW5nIG9mIEdFVCBmb3IgUFNSIGNvbXBhdCAoWyM0NTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2lzc3Vlcy80NTEpKSAoWzYwYjUyYjddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2NvbW1pdC82MGI1MmI3MTk3ODc5MGVhZmNmM2I5NWNmYmQ4M2RiMDQzOWU4ZDIyKSkKKiBzdHJpbmcgaW50ZXJwb2xhdGlvbiBmb3JtYXQgZm9yIHBocCA4LjIgKFsjNDQ2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9pc3N1ZXMvNDQ2KSkgKFsyZTA3ZDhhXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9jb21taXQvMmUwN2Q4YTE1MjRkMTJiNjliMTEwYWQ2NDlmMTc0NjFkMDY4YjhmMikpCgojIyA2LjMuMCAvIDIwMjItMDctMTUKCiAtIEFkZGVkIEVTMjU2IHN1cHBvcnQgdG8gSldLIHBhcnNpbmcgKFsjMzk5XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzM5OSkpCiAtIEZpeGVkIHBvdGVudGlhbCBjYWNoaW5nIGVycm9yIGluIGBDYWNoZWRLZXlTZXRgIGJ5IGNhY2hpbmcgandrcyBhcyBzdHJpbmdzIChbIzQzNV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC80MzUpKQoKIyMgNi4yLjAgLyAyMDIyLTA1LTE0CgogLSBBZGRlZCBgQ2FjaGVkS2V5U2V0YCAoWyMzOTddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMzk3KSkKIC0gQWRkZWQgYCRkZWZhdWx0QWxnYCBwYXJhbWV0ZXIgdG8gYEpXVDo6cGFyc2VLZXlgIGFuZCBgSldUOjpwYXJzZUtleVNldGAgKFsjNDI2XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzQyNikpLgoKIyMgNi4xLjAgLyAyMDIyLTAzLTIzCgogLSBEcm9wIHN1cHBvcnQgZm9yIFBIUCA1LjMsIDUuNCwgNS41LCA1LjYsIGFuZCA3LjAKIC0gQWRkIHBhcmFtZXRlciB0eXBpbmcgYW5kIHJldHVybiB0eXBlcyB3aGVyZSBwb3NzaWJsZQoKIyMgNi4wLjAgLyAyMDIyLTAxLTI0CgogLSAqKkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5IEJyZWFraW5nIENoYW5nZXMqKjogU2VlIHRoZSBbUmVsZWFzZSBOb3Rlc10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcmVsZWFzZXMvdGFnL3Y2LjAuMCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAtIE5ldyBLZXkgb2JqZWN0IHRvIHByZXZlbnQga2V5L2FsZ29yaXRobSB0eXBlIGNvbmZ1c2lvbiAoIzM2NSkKIC0gQWRkIEpXSyBzdXBwb3J0ICgjMjczKQogLSBBZGQgRVMyNTYgc3VwcG9ydCAoIzI1NikKIC0gQWRkIEVTMzg0IHN1cHBvcnQgKCMzMjQpCiAtIEFkZCBFZDI1NTE5IHN1cHBvcnQgKCMzNDMpCgojIyA1LjAuMCAvIDIwMTctMDYtMjYKLSBTdXBwb3J0IFJTMzg0IGFuZCBSUzUxMi4KICBTZWUgWyMxMTddKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTE3KS4gVGhhbmtzIFtAam9vc3RmYWFzc2VuXShodHRwczovL2dpdGh1Yi5jb20vam9vc3RmYWFzc2VuKSEKLSBBZGQgYW4gZXhhbXBsZSBmb3IgUlMyNTYgb3BlbnNzbC4KICBTZWUgWyMxMjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTI1KS4gVGhhbmtzIFtAYWtlZW1hbl0oaHR0cHM6Ly9naXRodWIuY29tL2FrZWVtYW4pIQotIERldGVjdCBpbnZhbGlkIEJhc2U2NCBlbmNvZGluZyBpbiBzaWduYXR1cmUuCiAgU2VlIFsjMTYyXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MikuIFRoYW5rcyBbQHBzaWdub3JldF0oaHR0cHM6Ly9naXRodWIuY29tL3BzaWdub3JldCkhCi0gVXBkYXRlIGBKV1Q6OnZlcmlmeWAgdG8gaGFuZGxlIE9wZW5TU0wgZXJyb3JzLgogIFNlZSBbIzE1OV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xNTkpLiBUaGFua3MgW0Bic2hhZmZlcl0oaHR0cHM6Ly9naXRodWIuY29tL2JzaGFmZmVyKSEKLSBBZGQgYGFycmF5YCB0eXBlIGhpbnRpbmcgdG8gYGRlY29kZWAgbWV0aG9kCiAgU2VlIFsjMTAxXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzEwMSkuIFRoYW5rcyBbQGh5d2FrXShodHRwczovL2dpdGh1Yi5jb20vaHl3YWspIQotIEFkZCBhbGwgSlNPTiBlcnJvciB0eXBlcy4KICBTZWUgWyMxMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvMTEwKS4gVGhhbmtzIFtAZ2JhbGR1enppXShodHRwczovL2dpdGh1Yi5jb20vZ2JhbGR1enppKSEKLSBCdWdmaXggJ2tpZCcgbm90IGluIGdpdmVuIGtleSBsaXN0LgogIFNlZSBbIzEyOV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMjkpLiBUaGFua3MgW0BzdGFtcHljb2RlXShodHRwczovL2dpdGh1Yi5jb20vc3RhbXB5Y29kZSkhCi0gTWlzY2VsbGFuZW91cyBjbGVhbnVwLCBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IGZpeGVzLgogIFNlZSBbIzEwN10oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMDcpLCBbIzExNV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC8xMTUpLAogIFsjMTYwXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MCksIFsjMTYxXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2MSksIGFuZAogIFsjMTY1XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzE2NSkuIFRoYW5rcyBbQGFrZWVtYW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ha2VlbWFuKSwKICBbQGNoaW5lZHVmbl0oaHR0cHM6Ly9naXRodWIuY29tL2NoaW5lZHVmbiksIGFuZCBbQGJzaGFmZmVyXShodHRwczovL2dpdGh1Yi5jb20vYnNoYWZmZXIpIQoKIyMgNC4wLjAgLyAyMDE2LTA3LTE3Ci0gQWRkIHN1cHBvcnQgZm9yIGxhdGUgc3RhdGljIGJpbmRpbmcuIFNlZSBbIzg4XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzg4KSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvIFtAY2hhcHB5ODRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFwcHk4NCkhCi0gVXNlIHN0YXRpYyBgJHRpbWVzdGFtcGAgaW5zdGVhZCBvZiBgdGltZSgpYCB0byBpbXByb3ZlIHVuaXQgdGVzdGluZy4gU2VlIFsjOTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvOTMpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0Bqb3NlcGhtY2Rlcm1vdHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NlcGhtY2Rlcm1vdHQpIQotIEZpeGVzIHRvIGV4Y2VwdGlvbnMgY2xhc3Nlcy4gU2VlIFsjODFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvODEpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0BNYWtzM3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9NYWtzM3cpIQotIEZpeGVzIHRvIFBIUERvYy4gU2VlIFsjNzZdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvNzYpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8gW0Bha2VlbWFuXShodHRwczovL2dpdGh1Yi5jb20vYWtlZW1hbikhCgojIyAzLjAuMCAvIDIwMTUtMDctMjIKLSBNaW5pbXVtIFBIUCB2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBgNS4yLjBgIHRvIGA1LjMuMGAuCi0gQWRkIGBcRmlyZWJhc2VcSldUYCBuYW1lc3BhY2UuIFNlZQpbIzU5XShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzU5KSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvCltARGFzaHJvbl0oaHR0cHM6Ly9naXRodWIuY29tL0Rhc2hyb24pIQotIFJlcXVpcmUgYSBub24tZW1wdHkga2V5IHRvIGRlY29kZSBhbmQgdmVyaWZ5IGEgSldULiBTZWUKWyM2MF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QvcHVsbC82MCkgZm9yIGRldGFpbHMuIFRoYW5rcyB0bwpbQHNqb25lczYwOF0oaHR0cHM6Ly9naXRodWIuY29tL3Nqb25lczYwOCkhCi0gQ2xlYW5lciBkb2N1bWVudGF0aW9uIGJsb2NrcyBpbiB0aGUgY29kZS4gU2VlClsjNjJdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L3B1bGwvNjIpIGZvciBkZXRhaWxzLiBUaGFua3MgdG8KW0Bqb2hhbmRlcnVpanRlcl0oaHR0cHM6Ly9naXRodWIuY29tL2pvaGFuZGVydWlqdGVyKSEKCiMjIDIuMi4wIC8gMjAxNS0wNi0yMgotIEFkZCBzdXBwb3J0IGZvciBhZGRpbmcgY3VzdG9tLCBvcHRpb25hbCBKV1QgaGVhZGVycyB0byBgSldUOjplbmNvZGUoKWAuIFNlZQpbIzUzXShodHRwczovL2dpdGh1Yi5jb20vZmlyZWJhc2UvcGhwLWp3dC9wdWxsLzUzL2ZpbGVzKSBmb3IgZGV0YWlscy4gVGhhbmtzIHRvCltAbWNvY2Fyb10oaHR0cHM6Ly9naXRodWIuY29tL21jb2Nhcm8pIQoKIyMgMi4xLjAgLyAyMDE1LTA1LTIwCi0gQWRkIHN1cHBvcnQgZm9yIGFkZGluZyBhIGxlZXdheSB0byBgSldUOmRlY29kZSgpYCB0aGF0IGFjY291bnRzIGZvciBjbG9jayBza2V3CmJldHdlZW4gc2lnbmluZyBhbmQgdmVyaWZ5aW5nIGVudGl0aWVzLiBUaGFua3MgdG8gW0BsY2FicmFsXShodHRwczovL2dpdGh1Yi5jb20vbGNhYnJhbCkhCi0gQWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgYEFycmF5QWNjZXNzYCBpbnRlcmZhY2UgZm9yCmAka2V5c2AgYXJndW1lbnQgaW4gYEpXVDo6ZGVjb2RlKClgLiBUaGFua3MgdG8gW0BhenRlY2gtZGV2XShodHRwczovL2dpdGh1Yi5jb20vYXp0ZWNoLWRldikhCgojIyAyLjAuMCAvIDIwMTUtMDQtMDEKLSAqKk5vdGUqKjogSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXBkYXRlIHRvID4gdjIuMC4wIHRvIGFkZHJlc3MKICBrbm93biBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW4gcHJpb3IgdmVyc2lvbnMgd2hlbiBib3RoIHN5bW1ldHJpYyBhbmQKICBhc3ltbWV0cmljIGtleXMgYXJlIHVzZWQgdG9nZXRoZXIuCi0gVXBkYXRlIHNpZ25hdHVyZSBmb3IgYEpXVDo6ZGVjb2RlKC4uLilgIHRvIHJlcXVpcmUgYW4gYXJyYXkgb2Ygc3VwcG9ydGVkCiAgYWxnb3JpdGhtcyB0byB1c2Ugd2hlbiB2ZXJpZnlpbmcgdG9rZW4gc2lnbmF0dXJlcy4K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZmlyZWJhc2UvcGhwLWp3dCIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBzaW1wbGUgbGlicmFyeSB0byBlbmNvZGUgYW5kIGRlY29kZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaW4gUEhQLiBTaG91bGQgY29uZm9ybSB0byB0aGUgY3VycmVudCBzcGVjLiIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QiLAogICAgImtleXdvcmRzIjogWwogICAgICAgICJwaHAiLAogICAgICAgICJqd3QiCiAgICBdLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOZXVtYW4gVm9uZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJuZXVtYW4rcGVhckB0d2lsaW8uY29tIiwKICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbmFudCBOYXJheWFuYW4iLAogICAgICAgICAgICAiZW1haWwiOiAiYW5hbnRAcGhwLm5ldCIsCiAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICB9CiAgICBdLAogICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuNHx8XjguMCIKICAgIH0sCiAgICAic3VnZ2VzdCI6IHsKICAgICAgICAicGFyYWdvbmllL3NvZGl1bV9jb21wYXQiOiAiU3VwcG9ydCBFZERTQSAoRWQyNTUxOSkgc2lnbmF0dXJlcyB3aGVuIGxpYnNvZGl1bSBpcyBub3QgcHJlc2VudCIsCiAgICAgICAgImV4dC1zb2RpdW0iOiAiU3VwcG9ydCBFZERTQSAoRWQyNTUxOSkgc2lnbmF0dXJlcyIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiRmlyZWJhc2VcXEpXVFxcIjogInNyYyIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi41fHxeNy40IiwKICAgICAgICAicGhwc3BlYy9wcm9waGVjeS1waHB1bml0IjogIl4yLjAiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgInBzci9jYWNoZSI6ICJeMS4wfHxeMi4wIiwKICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBOZXVtYW4gVm9uZwoKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBvdGhlcgogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwoiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVApMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsClNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0L2FjdGlvbnMvd29ya2Zsb3dzL3Rlc3RzLnltbC9iYWRnZS5zdmcpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9maXJlYmFzZS9waHAtand0L3Yvc3RhYmxlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2ZpcmViYXNlL3BocC1qd3QpClshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9maXJlYmFzZS9waHAtand0L2Rvd25sb2FkcyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9maXJlYmFzZS9waHAtand0KQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2ZpcmViYXNlL3BocC1qd3QvbGljZW5zZSldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9maXJlYmFzZS9waHAtand0KQoKUEhQLUpXVAo9PT09PT09CkEgc2ltcGxlIGxpYnJhcnkgdG8gZW5jb2RlIGFuZCBkZWNvZGUgSlNPTiBXZWIgVG9rZW5zIChKV1QpIGluIFBIUCwgY29uZm9ybWluZyB0byBbUkZDIDc1MTldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE5KS4KCkluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0KClVzZSBjb21wb3NlciB0byBtYW5hZ2UgeW91ciBkZXBlbmRlbmNpZXMgYW5kIGRvd25sb2FkIFBIUC1KV1Q6CgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgZmlyZWJhc2UvcGhwLWp3dApgYGAKCk9wdGlvbmFsbHksIGluc3RhbGwgdGhlIGBwYXJhZ29uaWUvc29kaXVtX2NvbXBhdGAgcGFja2FnZSBmcm9tIGNvbXBvc2VyIGlmIHlvdXIKcGhwIGlzIDwgNy4yIG9yIGRvZXMgbm90IGhhdmUgbGlic29kaXVtIGluc3RhbGxlZDoKCmBgYGJhc2gKY29tcG9zZXIgcmVxdWlyZSBwYXJhZ29uaWUvc29kaXVtX2NvbXBhdApgYGAKCkV4YW1wbGUKLS0tLS0tLQpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7CnVzZSBGaXJlYmFzZVxKV1RcS2V5OwoKJGtleSA9ICdleGFtcGxlX2tleSc7CiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2h0dHA6Ly9leGFtcGxlLm9yZycsCiAgICAnYXVkJyA9PiAnaHR0cDovL2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07CgovKioKICogSU1QT1JUQU5UOgogKiBZb3UgbXVzdCBzcGVjaWZ5IHN1cHBvcnRlZCBhbGdvcml0aG1zIGZvciB5b3VyIGFwcGxpY2F0aW9uLiBTZWUKICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtam9zZS1qc29uLXdlYi1hbGdvcml0aG1zLTQwCiAqIGZvciBhIGxpc3Qgb2Ygc3BlYy1jb21wbGlhbnQgYWxnb3JpdGhtcy4KICovCiRqd3QgPSBKV1Q6OmVuY29kZSgkcGF5bG9hZCwgJGtleSwgJ0hTMjU2Jyk7CiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJGp3dCwgbmV3IEtleSgka2V5LCAnSFMyNTYnKSk7CnByaW50X3IoJGRlY29kZWQpOwoKLy8gUGFzcyBhIHN0ZENsYXNzIGluIGFzIHRoZSB0aGlyZCBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSBkZWNvZGVkIGhlYWRlciB2YWx1ZXMKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRrZXksICdIUzI1NicpLCAkaGVhZGVycyA9IG5ldyBzdGRDbGFzcygpKTsKcHJpbnRfcigkaGVhZGVycyk7CgovKgogTk9URTogVGhpcyB3aWxsIG5vdyBiZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gVG8gZ2V0CiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgeW91IHdpbGwgbmVlZCB0byBjYXN0IGl0IGFzIHN1Y2g6CiovCgokZGVjb2RlZF9hcnJheSA9IChhcnJheSkgJGRlY29kZWQ7CgovKioKICogWW91IGNhbiBhZGQgYSBsZWV3YXkgdG8gYWNjb3VudCBmb3Igd2hlbiB0aGVyZSBpcyBhIGNsb2NrIHNrZXcgdGltZXMgYmV0d2VlbgogKiB0aGUgc2lnbmluZyBhbmQgdmVyaWZ5aW5nIHNlcnZlcnMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBsZWV3YXkgc2hvdWxkCiAqIG5vdCBiZSBiaWdnZXIgdGhhbiBhIGZldyBtaW51dGVzLgogKgogKiBTb3VyY2U6IGh0dHA6Ly9zZWxmLWlzc3VlZC5pbmZvL2RvY3MvZHJhZnQtaWV0Zi1vYXV0aC1qc29uLXdlYi10b2tlbi5odG1sI25iZkRlZgogKi8KSldUOjokbGVld2F5ID0gNjA7IC8vICRsZWV3YXkgaW4gc2Vjb25kcwokZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRqd3QsIG5ldyBLZXkoJGtleSwgJ0hTMjU2JykpOwpgYGAKRXhhbXBsZSBlbmNvZGUvZGVjb2RlIGhlYWRlcnMKLS0tLS0tLQpEZWNvZGluZyB0aGUgSldUIGhlYWRlcnMgd2l0aG91dCB2ZXJpZnlpbmcgdGhlIEpXVCBmaXJzdCBpcyBOT1QgcmVjb21tZW5kZWQsIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5CnRoaXMgbGlicmFyeS4gVGhpcyBpcyBiZWNhdXNlIHdpdGhvdXQgdmVyaWZ5aW5nIHRoZSBKV1QsIHRoZSBoZWFkZXIgdmFsdWVzIGNvdWxkIGhhdmUgYmVlbiB0YW1wZXJlZCB3aXRoLgpBbnkgdmFsdWUgcHVsbGVkIGZyb20gYW4gdW52ZXJpZmllZCBoZWFkZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaWYgaXQgY291bGQgYmUgYW55IHN0cmluZyBzZW50IGluIGZyb20gYW4KYXR0YWNrZXIuICBJZiB0aGlzIGlzIHNvbWV0aGluZyB5b3Ugc3RpbGwgd2FudCB0byBkbyBpbiB5b3VyIGFwcGxpY2F0aW9uIGZvciB3aGF0ZXZlciByZWFzb24sIGl0J3MgcG9zc2libGUgdG8KZGVjb2RlIHRoZSBoZWFkZXIgdmFsdWVzIG1hbnVhbGx5IHNpbXBseSBieSBjYWxsaW5nIGBqc29uX2RlY29kZWAgYW5kIGBiYXNlNjRfZGVjb2RlYCBvbiB0aGUgSldUCmhlYWRlciBwYXJ0OgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7Cgoka2V5ID0gJ2V4YW1wbGVfa2V5JzsKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnaHR0cDovL2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdodHRwOi8vZXhhbXBsZS5jb20nLAogICAgJ2lhdCcgPT4gMTM1Njk5OTUyNCwKICAgICduYmYnID0+IDEzNTcwMDAwMDAKXTsKCiRoZWFkZXJzID0gWwogICAgJ3gtZm9yd2FyZGVkLWZvcicgPT4gJ3d3dy5nb29nbGUuY29tJwpdOwoKLy8gRW5jb2RlIGhlYWRlcnMgaW4gdGhlIEpXVCBzdHJpbmcKJGp3dCA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAka2V5LCAnSFMyNTYnLCBudWxsLCAkaGVhZGVycyk7CgovLyBEZWNvZGUgaGVhZGVycyBmcm9tIHRoZSBKV1Qgc3RyaW5nIFdJVEhPVVQgdmFsaWRhdGlvbgovLyAqKklNUE9SVEFOVCoqOiBUaGlzIG9wZXJhdGlvbiBpcyB2dWxuZXJhYmxlIHRvIGF0dGFja3MsIGFzIHRoZSBKV1QgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZC4KLy8gVGhlc2UgaGVhZGVycyBjb3VsZCBiZSBhbnkgdmFsdWUgc2VudCBieSBhbiBhdHRhY2tlci4KbGlzdCgkaGVhZGVyc0I2NCwgJHBheWxvYWRCNjQsICRzaWcpID0gZXhwbG9kZSgnLicsICRqd3QpOwokZGVjb2RlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoJGhlYWRlcnNCNjQpLCB0cnVlKTsKCnByaW50X3IoJGRlY29kZWQpOwpgYGAKRXhhbXBsZSB3aXRoIFJTMjU2IChvcGVuc3NsKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIEZpcmViYXNlXEpXVFxLZXk7CgokcHJpdmF0ZUtleSA9IDw8PEVPRAotLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCk1JSUVvd0lCQUFLQ0FRRUF1eldITk01ZithbUNqUXp0YzVRVGZKZnpDQzVKNG51VytML2FPeFo0ZjhKM0ZyZXcKTTJjL2R1ZnJubWVkc0FwYjBCeTdXaGFIbGNxQ2gvU2NBUHlKaHprUFlMYWU3YlRWcm8zaG9rMHpESVRSOEY2UwpKR0w0MkpBRVVrK0lMa1BJK0RPTk0wKzN2ems2S3ZmZTU0OHR1NGN6Q3VxVThCR1ZPbG5wNklxQkhoQXN3Tk1NCjc4cG9zLzJ6MENqUE00dGJlWHFTVFRiTmtYUmJveGpVMjl2U29wY1Q1MWtvV09naVRmM0M3bkpVb01XWkhaSTUKSHFuSWhQQUc5eXY4SEFnTms2Q01rMkNhZFZIRG80SXhqeFR6VFRxbzFTQ1NIMnBvb0psOU84YXQ2a2tSWXNyWgpXd3NLbE9GRTJMVWNlN09iblhzWWloU3RCVURvZUJRbEdHL0J3UUlEQVFBQkFvSUJBRnRHYU9xTktHd2dnbjlrCjZ5enI2R2haNld0MnJoMVhwcThYVXo1MTRVQmhQeEQ3ZEZSTHBiekNyTFZwelk4MExibVZHSjkrMXBKb3p5V2MKVktlQ2VVZE53YnFrcjI0ME9lN0dURm1HakRveFUrNS9IWC9TSllQcEM4Slo5b3FnRUE4N2l6K1dRWDloVm9QMgpvRjZFQjRja0R2WG1rOEZNd1ZaVzJsMi9rZDVtckVWYkRhWEt4aHZVRGY1MmlWRCtzR0lsVGlmN21CZ1I5OS9iCmMzcWlDbnhDTW1mWVVuVDJlaDdWdjJMaENSL0c5UzZDM1I0bEE3MXJFeWlVM0tnc0dmZzBkODIvWFdYYmVnSlcKaDNRYldOdFFMeFR1SXZMcTVhQXJ5VjNQZmFIbFBnZGdLMGZ0Nm9jVTJkZTJGYWdGa2EzbmZWRXlDN0lVc05USwpicTZuaEFFQ2dZRUE3ZC8wRFBPSWFJdGwvOEJXS3lDdUFITXNzNDdqMHdsR2JCU0hkSklpUzU1YWtNdm5BRzBNCjM5eTIyUXFmemgxYXQ5a0JGZVllRklJVTgyWkxGM3hPY0UzejZwSlo0RHl2eDRCWWRYSDc3b2RvOXVWSzlzMWwKM1QzQmxNY3FkMWh2WkxNUzdkdml5SDc5alpvNENYU0hpS3pjN3BRMllmSzVlS3hLcU9OZVh1RUNnWUVBeVhsRwp2b25hdXMvWVRiMUlCZWk5SHdhY2NuUS8xSFJuNk12ZkRqYjdKSkRJQmhOQ2xHUHQ2eFJsekJiU1o3M2MyUUVDCjZGdTloMzZLL0haMnFjTGQyYlhpTnloSVY3YjZ0VktrKzBQc29qMGRMOUViaHNEMU9zbUUxblRQeUFjOVhaYmIKT1BZeHkrZHBCQ1VBOC8xVTkrdWlGb0NhN21JYldjU1ErMzlnSHVFQ2dZQXo4MnBRZmN0MzBhSDRKaUJya05xUApuSmZScTA1VVk3MHVrNWsxdTBpa0xUUm9WUy9oSnUvZDRFMUt2NGhCTXFZQ2F2RlN3QXdudkhVbzUxbFZDci95CnhRT1ZZbHNnbndCZzJNWDQrR2ptSWtxcFNWQ0M4RDdqLzczTWFXYjc0Nk9JWVplcnZROGRiS2FoaTJIYnBzaUcKOEFIY1ZTQS9hZ3hacjM4cXZXVjU0UUtCZ0NENVRsREU4eDE4QXVUR1E5Rmp4QUFkN3VEMGtiWE56MnZVWWc5TApoRkw1dHlMM2FBQXRVclVVdzR4aGQ5SXV5c1JoVy81M2RVK0ZzRzJkWGRKdTZDeEhqbHlFcFVKbDJpWnUvajE1ClluTXpHV0hJRVg4K2VXUkRzdy8rVWp0a28vQjdUaW5HY1dQejNjWWw0RUFPaUNlRFV5WG5xbk8xYnRDRVVVNDQKREoxQkFvR0JBSnVQRDI3RXJUU1Z0SWQ5MCtNNHpGUE5pYkZQNTBLcHJWZGM4Q1IzN0JFN3I4dnVHZ05ZWG1uSQpSTG5HUDlwM3BWZ0ZDa3RPUnVZUzJKLzZ0ODRJMytBMTduRW9CNHh2aFRMZUFpbkFXL3VUUU9VbU5pY09QNEVrCjJNc0xMMmtIZ0w4YkxUbXZYVjRGWCtQWHBockRLZzFYeHpPWW4wb3R1b3FkQVFya0s0b2cKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KRU9EOwoKJHB1YmxpY0tleSA9IDw8PEVPRAotLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXV6V0hOTTVmK2FtQ2pRenRjNVFUCmZKZnpDQzVKNG51VytML2FPeFo0ZjhKM0ZyZXdNMmMvZHVmcm5tZWRzQXBiMEJ5N1doYUhsY3FDaC9TY0FQeUoKaHprUFlMYWU3YlRWcm8zaG9rMHpESVRSOEY2U0pHTDQySkFFVWsrSUxrUEkrRE9OTTArM3Z6azZLdmZlNTQ4dAp1NGN6Q3VxVThCR1ZPbG5wNklxQkhoQXN3Tk1NNzhwb3MvMnowQ2pQTTR0YmVYcVNUVGJOa1hSYm94alUyOXZTCm9wY1Q1MWtvV09naVRmM0M3bkpVb01XWkhaSTVIcW5JaFBBRzl5djhIQWdOazZDTWsyQ2FkVkhEbzRJeGp4VHoKVFRxbzFTQ1NIMnBvb0psOU84YXQ2a2tSWXNyWld3c0tsT0ZFMkxVY2U3T2JuWHNZaWhTdEJVRG9lQlFsR0cvQgp3UUlEQVFBQgotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KRU9EOwoKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnZXhhbXBsZS5vcmcnLAogICAgJ2F1ZCcgPT4gJ2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07Cgokand0ID0gSldUOjplbmNvZGUoJHBheWxvYWQsICRwcml2YXRlS2V5LCAnUlMyNTYnKTsKZWNobyAiRW5jb2RlOlxuIiAuIHByaW50X3IoJGp3dCwgdHJ1ZSkgLiAiXG4iOwoKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRwdWJsaWNLZXksICdSUzI1NicpKTsKCi8qCiBOT1RFOiBUaGlzIHdpbGwgbm93IGJlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0aXZlIGFycmF5LiBUbyBnZXQKIGFuIGFzc29jaWF0aXZlIGFycmF5LCB5b3Ugd2lsbCBuZWVkIHRvIGNhc3QgaXQgYXMgc3VjaDoKKi8KCiRkZWNvZGVkX2FycmF5ID0gKGFycmF5KSAkZGVjb2RlZDsKZWNobyAiRGVjb2RlOlxuIiAuIHByaW50X3IoJGRlY29kZWRfYXJyYXksIHRydWUpIC4gIlxuIjsKYGBgCgpFeGFtcGxlIHdpdGggYSBwYXNzcGhyYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIEZpcmViYXNlXEpXVFxLZXk7CgovLyBZb3VyIHBhc3NwaHJhc2UKJHBhc3NwaHJhc2UgPSAnW1lPVVJfUEFTU1BIUkFTRV0nOwoKLy8gWW91ciBwcml2YXRlIGtleSBmaWxlIHdpdGggcGFzc3BocmFzZQovLyBDYW4gYmUgZ2VuZXJhdGVkIHdpdGggInNzaC1rZXlnZW4gLXQgcnNhIC1tIHBlbSIKJHByaXZhdGVLZXlGaWxlID0gJy9wYXRoL3RvL2tleS13aXRoLXBhc3NwaHJhc2UucGVtJzsKCi8vIENyZWF0ZSBhIHByaXZhdGUga2V5IG9mIHR5cGUgInJlc291cmNlIgokcHJpdmF0ZUtleSA9IG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZSgKICAgIGZpbGVfZ2V0X2NvbnRlbnRzKCRwcml2YXRlS2V5RmlsZSksCiAgICAkcGFzc3BocmFzZQopOwoKJHBheWxvYWQgPSBbCiAgICAnaXNzJyA9PiAnZXhhbXBsZS5vcmcnLAogICAgJ2F1ZCcgPT4gJ2V4YW1wbGUuY29tJywKICAgICdpYXQnID0+IDEzNTY5OTk1MjQsCiAgICAnbmJmJyA9PiAxMzU3MDAwMDAwCl07Cgokand0ID0gSldUOjplbmNvZGUoJHBheWxvYWQsICRwcml2YXRlS2V5LCAnUlMyNTYnKTsKZWNobyAiRW5jb2RlOlxuIiAuIHByaW50X3IoJGp3dCwgdHJ1ZSkgLiAiXG4iOwoKLy8gR2V0IHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXksIG9yIHB1bGwgZnJvbSBmcm9tIGEgZmlsZS4KJHB1YmxpY0tleSA9IG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscygkcHJpdmF0ZUtleSlbJ2tleSddOwoKJGRlY29kZWQgPSBKV1Q6OmRlY29kZSgkand0LCBuZXcgS2V5KCRwdWJsaWNLZXksICdSUzI1NicpKTsKZWNobyAiRGVjb2RlOlxuIiAuIHByaW50X3IoKGFycmF5KSAkZGVjb2RlZCwgdHJ1ZSkgLiAiXG4iOwpgYGAKCkV4YW1wbGUgd2l0aCBFZERTQSAobGlic29kaXVtIGFuZCBFZDI1NTE5IHNpZ25hdHVyZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV1Q7CnVzZSBGaXJlYmFzZVxKV1RcS2V5OwoKLy8gUHVibGljIGFuZCBwcml2YXRlIGtleXMgYXJlIGV4cGVjdGVkIHRvIGJlIEJhc2U2NCBlbmNvZGVkLiBUaGUgbGFzdAovLyBub24tZW1wdHkgbGluZSBpcyB1c2VkIHNvIHRoYXQga2V5cyBjYW4gYmUgZ2VuZXJhdGVkIHdpdGgKLy8gc29kaXVtX2NyeXB0b19zaWduX2tleXBhaXIoKS4gVGhlIHNlY3JldCBrZXlzIGdlbmVyYXRlZCBieSBvdGhlciB0b29scyBtYXkKLy8gbmVlZCB0byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgaW5wdXQgZXhwZWN0ZWQgYnkgbGlic29kaXVtLgoKJGtleVBhaXIgPSBzb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcigpOwoKJHByaXZhdGVLZXkgPSBiYXNlNjRfZW5jb2RlKHNvZGl1bV9jcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGtleVBhaXIpKTsKCiRwdWJsaWNLZXkgPSBiYXNlNjRfZW5jb2RlKHNvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXkoJGtleVBhaXIpKTsKCiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdleGFtcGxlLmNvbScsCiAgICAnaWF0JyA9PiAxMzU2OTk5NTI0LAogICAgJ25iZicgPT4gMTM1NzAwMDAwMApdOwoKJGp3dCA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAkcHJpdmF0ZUtleSwgJ0VkRFNBJyk7CmVjaG8gIkVuY29kZTpcbiIgLiBwcmludF9yKCRqd3QsIHRydWUpIC4gIlxuIjsKCiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJGp3dCwgbmV3IEtleSgkcHVibGljS2V5LCAnRWREU0EnKSk7CmVjaG8gIkRlY29kZTpcbiIgLiBwcmludF9yKChhcnJheSkgJGRlY29kZWQsIHRydWUpIC4gIlxuIjsKYGBgYAoKRXhhbXBsZSB3aXRoIG11bHRpcGxlIGtleXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYGBgcGhwCnVzZSBGaXJlYmFzZVxKV1RcSldUOwp1c2UgRmlyZWJhc2VcSldUXEtleTsKCi8vIEV4YW1wbGUgUlNBIGtleXMgZnJvbSBwcmV2aW91cyBleGFtcGxlCi8vICRwcml2YXRlS2V5MSA9ICcuLi4nOwovLyAkcHVibGljS2V5MSA9ICcuLi4nOwoKLy8gRXhhbXBsZSBFZERTQSBrZXlzIGZyb20gcHJldmlvdXMgZXhhbXBsZQovLyAkcHJpdmF0ZUtleTIgPSAnLi4uJzsKLy8gJHB1YmxpY0tleTIgPSAnLi4uJzsKCiRwYXlsb2FkID0gWwogICAgJ2lzcycgPT4gJ2V4YW1wbGUub3JnJywKICAgICdhdWQnID0+ICdleGFtcGxlLmNvbScsCiAgICAnaWF0JyA9PiAxMzU2OTk5NTI0LAogICAgJ25iZicgPT4gMTM1NzAwMDAwMApdOwoKJGp3dDEgPSBKV1Q6OmVuY29kZSgkcGF5bG9hZCwgJHByaXZhdGVLZXkxLCAnUlMyNTYnLCAna2lkMScpOwokand0MiA9IEpXVDo6ZW5jb2RlKCRwYXlsb2FkLCAkcHJpdmF0ZUtleTIsICdFZERTQScsICdraWQyJyk7CmVjaG8gIkVuY29kZSAxOlxuIiAuIHByaW50X3IoJGp3dDEsIHRydWUpIC4gIlxuIjsKZWNobyAiRW5jb2RlIDI6XG4iIC4gcHJpbnRfcigkand0MiwgdHJ1ZSkgLiAiXG4iOwoKJGtleXMgPSBbCiAgICAna2lkMScgPT4gbmV3IEtleSgkcHVibGljS2V5MSwgJ1JTMjU2JyksCiAgICAna2lkMicgPT4gbmV3IEtleSgkcHVibGljS2V5MiwgJ0VkRFNBJyksCl07CgokZGVjb2RlZDEgPSBKV1Q6OmRlY29kZSgkand0MSwgJGtleXMpOwokZGVjb2RlZDIgPSBKV1Q6OmRlY29kZSgkand0MiwgJGtleXMpOwoKZWNobyAiRGVjb2RlIDE6XG4iIC4gcHJpbnRfcigoYXJyYXkpICRkZWNvZGVkMSwgdHJ1ZSkgLiAiXG4iOwplY2hvICJEZWNvZGUgMjpcbiIgLiBwcmludF9yKChhcnJheSkgJGRlY29kZWQyLCB0cnVlKSAuICJcbiI7CmBgYAoKVXNpbmcgSldLcwotLS0tLS0tLS0tCgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxKV0s7CnVzZSBGaXJlYmFzZVxKV1RcSldUOwoKLy8gU2V0IG9mIGtleXMuIFRoZSAia2V5cyIga2V5IGlzIHJlcXVpcmVkLiBGb3IgZXhhbXBsZSwgdGhlIEpTT04gcmVzcG9uc2UgdG8KLy8gdGhpcyBlbmRwb2ludDogaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaWFwL3ZlcmlmeS9wdWJsaWNfa2V5LWp3awokandrcyA9IFsna2V5cycgPT4gW11dOwoKLy8gSldLOjpwYXJzZUtleVNldCgkandrcykgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiAqKmtpZCoqIHRvIEZpcmViYXNlXEpXVFxLZXkKLy8gb2JqZWN0cy4gUGFzcyB0aGlzIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIEpXVDo6ZGVjb2RlLgpKV1Q6OmRlY29kZSgkcGF5bG9hZCwgSldLOjpwYXJzZUtleVNldCgkandrcykpOwpgYGAKClVzaW5nIENhY2hlZCBLZXkgU2V0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBgQ2FjaGVkS2V5U2V0YCBjbGFzcyBjYW4gYmUgdXNlZCB0byBmZXRjaCBhbmQgY2FjaGUgSldLUyAoSlNPTiBXZWIgS2V5IFNldHMpIGZyb20gYSBwdWJsaWMgVVJJLgpUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CgoxLiBUaGUgcmVzdWx0cyBhcmUgY2FjaGVkIGZvciBwZXJmb3JtYW5jZS4KMi4gSWYgYW4gdW5yZWNvZ25pemVkIGtleSBpcyByZXF1ZXN0ZWQsIHRoZSBjYWNoZSBpcyByZWZyZXNoZWQsIHRvIGFjY29tb2RhdGUgZm9yIGtleSByb3RhdGlvbi4KMy4gSWYgcmF0ZSBsaW1pdGluZyBpcyBlbmFibGVkLCB0aGUgSldLUyBVUkkgd2lsbCBub3QgbWFrZSBtb3JlIHRoYW4gMTAgcmVxdWVzdHMgYSBzZWNvbmQuCgpgYGBwaHAKdXNlIEZpcmViYXNlXEpXVFxDYWNoZWRLZXlTZXQ7CnVzZSBGaXJlYmFzZVxKV1RcSldUOwoKLy8gVGhlIFVSSSBmb3IgdGhlIEpXS1MgeW91IHdpc2ggdG8gY2FjaGUgdGhlIHJlc3VsdHMgZnJvbQokandrc1VyaSA9ICdodHRwczovL3d3dy5nc3RhdGljLmNvbS9pYXAvdmVyaWZ5L3B1YmxpY19rZXktandrJzsKCi8vIENyZWF0ZSBhbiBIVFRQIGNsaWVudCAoY2FuIGJlIGFueSBQU1ItNyBjb21wYXRpYmxlIEhUVFAgY2xpZW50KQokaHR0cENsaWVudCA9IG5ldyBHdXp6bGVIdHRwXENsaWVudCgpOwoKLy8gQ3JlYXRlIGFuIEhUVFAgcmVxdWVzdCBmYWN0b3J5IChjYW4gYmUgYW55IFBTUi0xNyBjb21wYXRpYmxlIEhUVFAgcmVxdWVzdCBmYWN0b3J5KQokaHR0cEZhY3RvcnkgPSBuZXcgR3V6emxlSHR0cFxQc3JcSHR0cEZhY3RvcnkoKTsKCi8vIENyZWF0ZSBhIGNhY2hlIGl0ZW0gcG9vbCAoY2FuIGJlIGFueSBQU1ItNiBjb21wYXRpYmxlIGNhY2hlIGl0ZW0gcG9vbCkKJGNhY2hlSXRlbVBvb2wgPSBQaHBmYXN0Y2FjaGVcQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgnZmlsZXMnKTsKCiRrZXlTZXQgPSBuZXcgQ2FjaGVkS2V5U2V0KAogICAgJGp3a3NVcmksCiAgICAkaHR0cENsaWVudCwKICAgICRodHRwRmFjdG9yeSwKICAgICRjYWNoZUl0ZW1Qb29sLAogICAgbnVsbCwgLy8gJGV4cGlyZXNBZnRlciBpbnQgc2Vjb25kcyB0byBzZXQgdGhlIEpXS1MgdG8gZXhwaXJlCiAgICB0cnVlICAvLyAkcmF0ZUxpbWl0ICAgIHRydWUgdG8gZW5hYmxlIHJhdGUgbGltaXQgb2YgMTAgUlBTIG9uIGxvb2t1cCBvZiBpbnZhbGlkIGtleXMKKTsKCiRqd3QgPSAnZXlKaGJHY2kuLi4nOyAvLyBTb21lIEpXVCBzaWduZWQgYnkgYSBrZXkgZnJvbSB0aGUgJGp3a1VyaSBhYm92ZQokZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRqd3QsICRrZXlTZXQpOwpgYGAKCk1pc2NlbGxhbmVvdXMKLS0tLS0tLS0tLS0tLQoKIyMjIyBFeGNlcHRpb24gSGFuZGxpbmcKCldoZW4gYSBjYWxsIHRvIGBKV1Q6OmRlY29kZWAgaXMgaW52YWxpZCwgaXQgd2lsbCB0aHJvdyBvbmUgb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKYGBgcGhwCnVzZSBGaXJlYmFzZVxKV1RcSldUOwp1c2UgRmlyZWJhc2VcSldUXFNpZ25hdHVyZUludmFsaWRFeGNlcHRpb247CnVzZSBGaXJlYmFzZVxKV1RcQmVmb3JlVmFsaWRFeGNlcHRpb247CnVzZSBGaXJlYmFzZVxKV1RcRXhwaXJlZEV4Y2VwdGlvbjsKdXNlIERvbWFpbkV4Y2VwdGlvbjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKCnRyeSB7CiAgICAkZGVjb2RlZCA9IEpXVDo6ZGVjb2RlKCRwYXlsb2FkLCAka2V5cyk7Cn0gY2F0Y2ggKEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQga2V5L2tleS1hcnJheSBpcyBlbXB0eSBvciBtYWxmb3JtZWQuCn0gY2F0Y2ggKERvbWFpbkV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgYWxnb3JpdGhtIGlzIHVuc3VwcG9ydGVkIE9SCiAgICAvLyBwcm92aWRlZCBrZXkgaXMgaW52YWxpZCBPUgogICAgLy8gdW5rbm93biBlcnJvciB0aHJvd24gaW4gb3BlblNTTCBvciBsaWJzb2RpdW0gT1IKICAgIC8vIGxpYnNvZGl1bSBpcyByZXF1aXJlZCBidXQgbm90IGF2YWlsYWJsZS4KfSBjYXRjaCAoU2lnbmF0dXJlSW52YWxpZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkLgp9IGNhdGNoIChCZWZvcmVWYWxpZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSAibmJmIiBjbGFpbSBPUgogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSAiaWF0IiBjbGFpbS4KfSBjYXRjaCAoRXhwaXJlZEV4Y2VwdGlvbiAkZSkgewogICAgLy8gcHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGFmdGVyICJleHAiIGNsYWltLgp9IGNhdGNoIChVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKICAgIC8vIHByb3ZpZGVkIEpXVCBpcyBtYWxmb3JtZWQgT1IKICAgIC8vIHByb3ZpZGVkIEpXVCBpcyBtaXNzaW5nIGFuIGFsZ29yaXRobSAvIHVzaW5nIGFuIHVuc3VwcG9ydGVkIGFsZ29yaXRobSBPUgogICAgLy8gcHJvdmlkZWQgSldUIGFsZ29yaXRobSBkb2VzIG5vdCBtYXRjaCBwcm92aWRlZCBrZXkgT1IKICAgIC8vIHByb3ZpZGVkIGtleSBJRCBpbiBrZXkva2V5LWFycmF5IGlzIGVtcHR5IG9yIGludmFsaWQuCn0KYGBgCgpBbGwgZXhjZXB0aW9ucyBpbiB0aGUgYEZpcmViYXNlXEpXVGAgbmFtZXNwYWNlIGV4dGVuZCBgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uYCwgYW5kIGNhbiBiZSBzaW1wbGlmaWVkCmxpa2UgdGhpczoKCmBgYHBocAp1c2UgRmlyZWJhc2VcSldUXEpXVDsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKdHJ5IHsKICAgICRkZWNvZGVkID0gSldUOjpkZWNvZGUoJHBheWxvYWQsICRrZXlzKTsKfSBjYXRjaCAoTG9naWNFeGNlcHRpb24gJGUpIHsKICAgIC8vIGVycm9ycyBoYXZpbmcgdG8gZG8gd2l0aCBlbnZpcm9ubWVudGFsIHNldHVwIG9yIG1hbGZvcm1lZCBKV1QgS2V5cwp9IGNhdGNoIChVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKICAgIC8vIGVycm9ycyBoYXZpbmcgdG8gZG8gd2l0aCBKV1Qgc2lnbmF0dXJlIGFuZCBjbGFpbXMKfQpgYGAKCiMjIyMgQ2FzdGluZyB0byBhcnJheQoKVGhlIHJldHVybiB2YWx1ZSBvZiBgSldUOjpkZWNvZGVgIGlzIHRoZSBnZW5lcmljIFBIUCBvYmplY3QgYHN0ZENsYXNzYC4gSWYgeW91J2QgbGlrZSB0byBoYW5kbGUgd2l0aCBhcnJheXMKaW5zdGVhZCwgeW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOgoKYGBgcGhwCi8vIHJldHVybiB0eXBlIGlzIHN0ZENsYXNzCiRkZWNvZGVkID0gSldUOjpkZWNvZGUoJHBheWxvYWQsICRrZXlzKTsKCi8vIGNhc3QgdG8gYXJyYXkKJGRlY29kZWQgPSBqc29uX2RlY29kZShqc29uX2VuY29kZSgkZGVjb2RlZCksIHRydWUpOwpgYGAKClRlc3RzCi0tLS0tClJ1biB0aGUgdGVzdHMgdXNpbmcgcGhwdW5pdDoKCmBgYGJhc2gKJCBwZWFyIGluc3RhbGwgUEhQVW5pdAokIHBocHVuaXQgLS1jb25maWd1cmF0aW9uIHBocHVuaXQueG1sLmRpc3QKUEhQVW5pdCAzLjcuMTAgYnkgU2ViYXN0aWFuIEJlcmdtYW5uLgouLi4uLgpUaW1lOiAwIHNlY29uZHMsIE1lbW9yeTogMi41ME1iCk9LICg1IHRlc3RzLCA1IGFzc2VydGlvbnMpCmBgYAoKTmV3IExpbmVzIGluIHByaXZhdGUga2V5cwotLS0tLQoKSWYgeW91ciBwcml2YXRlIGtleSBjb250YWlucyBgXG5gIGNoYXJhY3RlcnMsIGJlIHN1cmUgdG8gd3JhcCBpdCBpbiBkb3VibGUgcXVvdGVzIGAiImAKYW5kIG5vdCBzaW5nbGUgcXVvdGVzIGAnJ2AgaW4gb3JkZXIgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBlc2NhcGVkIGNoYXJhY3RlcnMuCgpMaWNlbnNlCi0tLS0tLS0KWzMtQ2xhdXNlIEJTRF0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/BeforeValidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBCZWZvcmVWYWxpZEV4Y2VwdGlvbiBleHRlbmRzIFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gaW1wbGVtZW50cyBKV1RFeGNlcHRpb25XaXRoUGF5bG9hZEludGVyZmFjZQp7CiAgICBwcml2YXRlIG9iamVjdCAkcGF5bG9hZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF5bG9hZChvYmplY3QgJHBheWxvYWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnBheWxvYWQgPSAkcGF5bG9hZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiBvYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBheWxvYWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/CachedKeySet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIE91dE9mQm91bmRzRXhjZXB0aW9uOwp1c2UgUHNyXENhY2hlXENhY2hlSXRlbUludGVyZmFjZTsKdXNlIFBzclxDYWNoZVxDYWNoZUl0ZW1Qb29sSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uOwoKLyoqCiAqIEBpbXBsZW1lbnRzIEFycmF5QWNjZXNzPHN0cmluZywgS2V5PgogKi8KY2xhc3MgQ2FjaGVkS2V5U2V0IGltcGxlbWVudHMgQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRqd2tzVXJpOwogICAgLyoqCiAgICAgKiBAdmFyIENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRodHRwQ2xpZW50OwogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGh0dHBGYWN0b3J5OwogICAgLyoqCiAgICAgKiBAdmFyIENhY2hlSXRlbVBvb2xJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FjaGU7CiAgICAvKioKICAgICAqIEB2YXIgP2ludAogICAgICovCiAgICBwcml2YXRlICRleHBpcmVzQWZ0ZXI7CiAgICAvKioKICAgICAqIEB2YXIgP0NhY2hlSXRlbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjYWNoZUl0ZW07CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBhcnJheTxtaXhlZD4+CiAgICAgKi8KICAgIHByaXZhdGUgJGtleVNldDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkY2FjaGVLZXk7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNhY2hlS2V5UHJlZml4ID0gJ2p3a3MnOwogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhLZXlMZW5ndGggPSA2NDsKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJHJhdGVMaW1pdDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkcmF0ZUxpbWl0Q2FjaGVLZXk7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1heENhbGxzUGVyTWludXRlID0gMTA7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGVmYXVsdEFsZzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRqd2tzVXJpLAogICAgICAgIENsaWVudEludGVyZmFjZSAkaHR0cENsaWVudCwKICAgICAgICBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkaHR0cEZhY3RvcnksCiAgICAgICAgQ2FjaGVJdGVtUG9vbEludGVyZmFjZSAkY2FjaGUsCiAgICAgICAgaW50ICRleHBpcmVzQWZ0ZXIgPSBudWxsLAogICAgICAgIGJvb2wgJHJhdGVMaW1pdCA9IGZhbHNlLAogICAgICAgIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT5qd2tzVXJpID0gJGp3a3NVcmk7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkaHR0cENsaWVudDsKICAgICAgICAkdGhpcy0+aHR0cEZhY3RvcnkgPSAkaHR0cEZhY3Rvcnk7CiAgICAgICAgJHRoaXMtPmNhY2hlID0gJGNhY2hlOwogICAgICAgICR0aGlzLT5leHBpcmVzQWZ0ZXIgPSAkZXhwaXJlc0FmdGVyOwogICAgICAgICR0aGlzLT5yYXRlTGltaXQgPSAkcmF0ZUxpbWl0OwogICAgICAgICR0aGlzLT5kZWZhdWx0QWxnID0gJGRlZmF1bHRBbGc7CiAgICAgICAgJHRoaXMtPnNldENhY2hlS2V5cygpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5SWQKICAgICAqIEByZXR1cm4gS2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJGtleUlkKTogS2V5CiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+a2V5SWRFeGlzdHMoJGtleUlkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ0tleSBJRCBub3QgZm91bmQnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEpXSzo6cGFyc2VLZXkoJHRoaXMtPmtleVNldFska2V5SWRdLCAkdGhpcy0+ZGVmYXVsdEFsZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlJZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleUlkKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+a2V5SWRFeGlzdHMoJGtleUlkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9mZnNldAogICAgICogQHBhcmFtIEtleSAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PG1peGVkPgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEp3a3NGb3JDYWNoZShzdHJpbmcgJGp3a3MpOiBhcnJheQogICAgewogICAgICAgICRqd2tzID0ganNvbl9kZWNvZGUoJGp3a3MsIHRydWUpOwoKICAgICAgICBpZiAoIWlzc2V0KCRqd2tzWydrZXlzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJyJrZXlzIiBtZW1iZXIgbXVzdCBleGlzdCBpbiB0aGUgSldLIFNldCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCRqd2tzWydrZXlzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0pXSyBTZXQgZGlkIG5vdCBjb250YWluIGFueSBrZXlzJyk7CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRqd2tzWydrZXlzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGtpZCA9IGlzc2V0KCR2WydraWQnXSkgPyAkdlsna2lkJ10gOiAkazsKICAgICAgICAgICAgJGtleXNbKHN0cmluZykgJGtpZF0gPSAkdjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5czsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGtleUlkRXhpc3RzKHN0cmluZyAka2V5SWQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5rZXlTZXQpIHsKICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+Z2V0Q2FjaGVJdGVtKCk7CiAgICAgICAgICAgIC8vIFRyeSB0byBsb2FkIGtleXMgZnJvbSBjYWNoZQogICAgICAgICAgICBpZiAoJGl0ZW0tPmlzSGl0KCkpIHsKICAgICAgICAgICAgICAgIC8vIGl0ZW0gZm91bmQhIHJldHJpZXZlIGl0CiAgICAgICAgICAgICAgICAkdGhpcy0+a2V5U2V0ID0gJGl0ZW0tPmdldCgpOwogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlZCBpdGVtIGlzIGEgc3RyaW5nLCB0aGUgSldLUyByZXNwb25zZSB3YXMgY2FjaGVkIChwcmV2aW91cyBiZWhhdmlvcikuCiAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGlzIGludG8gZXhwZWN0ZWQgZm9ybWF0IGFycmF5PGtpZCwgandrPiBpbnN0ZWFkLgogICAgICAgICAgICAgICAgaWYgKFxpc19zdHJpbmcoJHRoaXMtPmtleVNldCkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+a2V5U2V0ID0gJHRoaXMtPmZvcm1hdEp3a3NGb3JDYWNoZSgkdGhpcy0+a2V5U2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+a2V5U2V0WyRrZXlJZF0pKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+cmF0ZUxpbWl0RXhjZWVkZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmh0dHBGYWN0b3J5LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAkdGhpcy0+andrc1VyaSk7CiAgICAgICAgICAgICRqd2tzUmVzcG9uc2UgPSAkdGhpcy0+aHR0cENsaWVudC0+c2VuZFJlcXVlc3QoJHJlcXVlc3QpOwogICAgICAgICAgICBpZiAoJGp3a3NSZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpICE9PSAyMDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignSFRUUCBFcnJvcjogJWQgJXMgZm9yIFVSSSAiJXMiJywKICAgICAgICAgICAgICAgICAgICAgICAgJGp3a3NSZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAkandrc1Jlc3BvbnNlLT5nZXRSZWFzb25QaHJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmp3a3NVcmksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAkandrc1Jlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmtleVNldCA9ICR0aGlzLT5mb3JtYXRKd2tzRm9yQ2FjaGUoKHN0cmluZykgJGp3a3NSZXNwb25zZS0+Z2V0Qm9keSgpKTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmtleVNldFska2V5SWRdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5nZXRDYWNoZUl0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldCgkdGhpcy0+a2V5U2V0KTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5leHBpcmVzQWZ0ZXIpIHsKICAgICAgICAgICAgICAgICRpdGVtLT5leHBpcmVzQWZ0ZXIoJHRoaXMtPmV4cGlyZXNBZnRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNhY2hlLT5zYXZlKCRpdGVtKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmF0ZUxpbWl0RXhjZWVkZWQoKTogYm9vbAogICAgewogICAgICAgIGlmICghJHRoaXMtPnJhdGVMaW1pdCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkY2FjaGVJdGVtID0gJHRoaXMtPmNhY2hlLT5nZXRJdGVtKCR0aGlzLT5yYXRlTGltaXRDYWNoZUtleSk7CiAgICAgICAgaWYgKCEkY2FjaGVJdGVtLT5pc0hpdCgpKSB7CiAgICAgICAgICAgICRjYWNoZUl0ZW0tPmV4cGlyZXNBZnRlcigxKTsgLy8gIyBvZiBjYWxscyBhcmUgY2FjaGVkIGVhY2ggbWludXRlCiAgICAgICAgfQoKICAgICAgICAkY2FsbHNQZXJNaW51dGUgPSAoaW50KSAkY2FjaGVJdGVtLT5nZXQoKTsKICAgICAgICBpZiAoKyskY2FsbHNQZXJNaW51dGUgPiAkdGhpcy0+bWF4Q2FsbHNQZXJNaW51dGUpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRjYWNoZUl0ZW0tPnNldCgkY2FsbHNQZXJNaW51dGUpOwogICAgICAgICR0aGlzLT5jYWNoZS0+c2F2ZSgkY2FjaGVJdGVtKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDYWNoZUl0ZW0oKTogQ2FjaGVJdGVtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKFxpc19udWxsKCR0aGlzLT5jYWNoZUl0ZW0pKSB7CiAgICAgICAgICAgICR0aGlzLT5jYWNoZUl0ZW0gPSAkdGhpcy0+Y2FjaGUtPmdldEl0ZW0oJHRoaXMtPmNhY2hlS2V5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y2FjaGVJdGVtOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0Q2FjaGVLZXlzKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmp3a3NVcmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdKV0tTIFVSSSBpcyBlbXB0eScpOwogICAgICAgIH0KCiAgICAgICAgLy8gZW5zdXJlIHdlIGRvIG5vdCBoYXZlIGlsbGVnYWwgY2hhcmFjdGVycwogICAgICAgICRrZXkgPSBwcmVnX3JlcGxhY2UoJ3xbXmEtekEtWjAtOV9cLiFdfCcsICcnLCAkdGhpcy0+andrc1VyaSk7CgogICAgICAgIC8vIGFkZCBwcmVmaXgKICAgICAgICAka2V5ID0gJHRoaXMtPmNhY2hlS2V5UHJlZml4IC4gJGtleTsKCiAgICAgICAgLy8gSGFzaCBrZXlzIGlmIHRoZXkgZXhjZWVkICRtYXhLZXlMZW5ndGggb2YgNjQKICAgICAgICBpZiAoXHN0cmxlbigka2V5KSA+ICR0aGlzLT5tYXhLZXlMZW5ndGgpIHsKICAgICAgICAgICAgJGtleSA9IHN1YnN0cihoYXNoKCdzaGEyNTYnLCAka2V5KSwgMCwgJHRoaXMtPm1heEtleUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FjaGVLZXkgPSAka2V5OwoKICAgICAgICBpZiAoJHRoaXMtPnJhdGVMaW1pdCkgewogICAgICAgICAgICAvLyBhZGQgcHJlZml4CiAgICAgICAgICAgICRyYXRlTGltaXRLZXkgPSAkdGhpcy0+Y2FjaGVLZXlQcmVmaXggLiAncmF0ZWxpbWl0JyAuICRrZXk7CgogICAgICAgICAgICAvLyBIYXNoIGtleXMgaWYgdGhleSBleGNlZWQgJG1heEtleUxlbmd0aCBvZiA2NAogICAgICAgICAgICBpZiAoXHN0cmxlbigkcmF0ZUxpbWl0S2V5KSA+ICR0aGlzLT5tYXhLZXlMZW5ndGgpIHsKICAgICAgICAgICAgICAgICRyYXRlTGltaXRLZXkgPSBzdWJzdHIoaGFzaCgnc2hhMjU2JywgJHJhdGVMaW1pdEtleSksIDAsICR0aGlzLT5tYXhLZXlMZW5ndGgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+cmF0ZUxpbWl0Q2FjaGVLZXkgPSAkcmF0ZUxpbWl0S2V5OwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/ExpiredException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBFeHBpcmVkRXhjZXB0aW9uIGV4dGVuZHMgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEpXVEV4Y2VwdGlvbldpdGhQYXlsb2FkSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgb2JqZWN0ICRwYXlsb2FkOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXlsb2FkKG9iamVjdCAkcGF5bG9hZCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cGF5bG9hZCA9ICRwYXlsb2FkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXlsb2FkKCk6IG9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGF5bG9hZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgRG9tYWluRXhjZXB0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uOwoKLyoqCiAqIEpTT04gV2ViIEtleSBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gdGhpcyBzcGVjOgogKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1qb3NlLWpzb24td2ViLWtleS00MQogKgogKiBQSFAgdmVyc2lvbiA1CiAqCiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvbgogKiBAcGFja2FnZSAgQXV0aGVudGljYXRpb25fSldUCiAqIEBhdXRob3IgICBCdWkgU3kgTmd1eWVuIDxuZ3V5ZW5ic0BnbWFpbC5jb20+CiAqIEBsaWNlbnNlICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlIDMtY2xhdXNlIEJTRAogKiBAbGluayAgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL3BocC1qd3QKICovCmNsYXNzIEpXSwp7CiAgICBwcml2YXRlIGNvbnN0IE9JRCA9ICcxLjIuODQwLjEwMDQ1LjIuMSc7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfT0JKRUNUX0lERU5USUZJRVIgPSAweDA2OwogICAgcHJpdmF0ZSBjb25zdCBBU04xX1NFUVVFTkNFID0gMHgxMDsgLy8gYWxzbyBkZWZpbmVkIGluIEpXVAogICAgcHJpdmF0ZSBjb25zdCBBU04xX0JJVF9TVFJJTkcgPSAweDAzOwogICAgcHJpdmF0ZSBjb25zdCBFQ19DVVJWRVMgPSBbCiAgICAgICAgJ1AtMjU2JyA9PiAnMS4yLjg0MC4xMDA0NS4zLjEuNycsIC8vIExlbjogNjQKICAgICAgICAnc2VjcDI1NmsxJyA9PiAnMS4zLjEzMi4wLjEwJywgLy8gTGVuOiA2NAogICAgICAgICdQLTM4NCcgPT4gJzEuMy4xMzIuMC4zNCcsIC8vIExlbjogOTYKICAgICAgICAvLyAnUC01MjEnID0+ICcxLjMuMTMyLjAuMzUnLCAvLyBMZW46IDEzMiAobm90IHN1cHBvcnRlZCkKICAgIF07CgogICAgLy8gRm9yIGtleXMgd2l0aCAia3R5IiBlcXVhbCB0byAiT0tQIiAoT2N0ZXQgS2V5IFBhaXIpLCB0aGUgImNydiIgcGFyYW1ldGVyIG11c3QgY29udGFpbiB0aGUga2V5IHN1YnR5cGUuCiAgICAvLyBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdWJ0eXBlczoKICAgIHByaXZhdGUgY29uc3QgT0tQX1NVQlRZUEVTID0gWwogICAgICAgICdFZDI1NTE5JyA9PiB0cnVlLCAvLyBSRkMgODAzNwogICAgXTsKCiAgICAvKioKICAgICAqIFBhcnNlIGEgc2V0IG9mIEpXSyBrZXlzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAkandrcyBUaGUgSlNPTiBXZWIgS2V5IFNldCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkZGVmYXVsdEFsZyBUaGUgYWxnb3JpdGhtIGZvciB0aGUgS2V5IG9iamVjdCBpZiAiYWxnIiBpcyBub3Qgc2V0IGluIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OIFdlYiBLZXkgU2V0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIEtleT4gQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5IElEcyAoa2lkKSB0byBLZXkgb2JqZWN0cwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICAgICBQcm92aWRlZCBKV0sgU2V0IGlzIGVtcHR5CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIFNldCB3YXMgaW52YWxpZAogICAgICogQHRocm93cyBEb21haW5FeGNlcHRpb24gICAgICAgICAgICAgIE9wZW5TU0wgZmFpbHVyZQogICAgICoKICAgICAqIEB1c2VzIHBhcnNlS2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VLZXlTZXQoYXJyYXkgJGp3a3MsIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwpOiBhcnJheQogICAgewogICAgICAgICRrZXlzID0gW107CgogICAgICAgIGlmICghaXNzZXQoJGp3a3NbJ2tleXMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignImtleXMiIG1lbWJlciBtdXN0IGV4aXN0IGluIHRoZSBKV0sgU2V0Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGp3a3NbJ2tleXMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSldLIFNldCBkaWQgbm90IGNvbnRhaW4gYW55IGtleXMnKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRqd2tzWydrZXlzJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGtpZCA9IGlzc2V0KCR2WydraWQnXSkgPyAkdlsna2lkJ10gOiAkazsKICAgICAgICAgICAgaWYgKCRrZXkgPSBzZWxmOjpwYXJzZUtleSgkdiwgJGRlZmF1bHRBbGcpKSB7CiAgICAgICAgICAgICAgICAka2V5c1soc3RyaW5nKSAka2lkXSA9ICRrZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgwID09PSBcY291bnQoJGtleXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ05vIHN1cHBvcnRlZCBhbGdvcml0aG1zIGZvdW5kIGluIEpXSyBTZXQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5czsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGEgSldLIGtleQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGp3ayBBbiBpbmRpdmlkdWFsIEpXSwogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkZGVmYXVsdEFsZyBUaGUgYWxnb3JpdGhtIGZvciB0aGUgS2V5IG9iamVjdCBpZiAiYWxnIiBpcyBub3Qgc2V0IGluIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OIFdlYiBLZXkgU2V0CiAgICAgKgogICAgICogQHJldHVybiBLZXkgVGhlIGtleSBvYmplY3QgZm9yIHRoZSBKV0sKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIGlzIGVtcHR5CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAgICAgUHJvdmlkZWQgSldLIHdhcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiAgICAgICAgICAgICAgT3BlblNTTCBmYWlsdXJlCiAgICAgKgogICAgICogQHVzZXMgY3JlYXRlUGVtRnJvbU1vZHVsdXNBbmRFeHBvbmVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlS2V5KGFycmF5ICRqd2ssIHN0cmluZyAkZGVmYXVsdEFsZyA9IG51bGwpOiA/S2V5CiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRqd2spKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0pXSyBtdXN0IG5vdCBiZSBlbXB0eScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkandrWydrdHknXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignSldLIG11c3QgY29udGFpbiBhICJrdHkiIHBhcmFtZXRlcicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkandrWydhbGcnXSkpIHsKICAgICAgICAgICAgaWYgKFxpc19udWxsKCRkZWZhdWx0QWxnKSkgewogICAgICAgICAgICAgICAgLy8gVGhlICJhbGciIHBhcmFtZXRlciBpcyBvcHRpb25hbCBpbiBhIEtUWSwgYnV0IGFuIGFsZ29yaXRobSBpcyByZXF1aXJlZAogICAgICAgICAgICAgICAgLy8gZm9yIHBhcnNpbmcgaW4gdGhpcyBsaWJyYXJ5LiBVc2UgdGhlICRkZWZhdWx0QWxnIHBhcmFtZXRlciB3aGVuIHBhcnNpbmcgdGhlCiAgICAgICAgICAgICAgICAvLyBrZXkgc2V0IGluIG9yZGVyIHRvIHByZXZlbnQgdGhpcyBlcnJvci4KICAgICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3NTE3I3NlY3Rpb24tNC40CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdKV0sgbXVzdCBjb250YWluIGFuICJhbGciIHBhcmFtZXRlcicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRqd2tbJ2FsZyddID0gJGRlZmF1bHRBbGc7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRqd2tbJ2t0eSddKSB7CiAgICAgICAgICAgIGNhc2UgJ1JTQSc6CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRqd2tbJ2QnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdSU0EgcHJpdmF0ZSBrZXlzIGFyZSBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRqd2tbJ24nXSkgfHwgIWlzc2V0KCRqd2tbJ2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdSU0Ega2V5cyBtdXN0IGNvbnRhaW4gdmFsdWVzIGZvciBib3RoICJuIiBhbmQgImUiJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBlbSA9IHNlbGY6OmNyZWF0ZVBlbUZyb21Nb2R1bHVzQW5kRXhwb25lbnQoJGp3a1snbiddLCAkandrWydlJ10pOwogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IFxvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygkcGVtKTsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHB1YmxpY0tleSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdPcGVuU1NMIGVycm9yOiAnIC4gXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBLZXkoJHB1YmxpY0tleSwgJGp3a1snYWxnJ10pOwogICAgICAgICAgICBjYXNlICdFQyc6CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGp3a1snZCddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgaXMgYWN0dWFsbHkgYSBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0tleSBkYXRhIG11c3QgYmUgZm9yIGEgcHVibGljIGtleScpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkandrWydjcnYnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdjcnYgbm90IHNldCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoc2VsZjo6RUNfQ1VSVkVTWyRqd2tbJ2NydiddXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdVbnJlY29nbmlzZWQgb3IgdW5zdXBwb3J0ZWQgRUMgY3VydmUnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGp3a1sneCddKSB8fCBlbXB0eSgkandrWyd5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigneCBhbmQgeSBub3Qgc2V0Jyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IHNlbGY6OmNyZWF0ZVBlbUZyb21DcnZBbmRYWUNvb3JkaW5hdGVzKCRqd2tbJ2NydiddLCAkandrWyd4J10sICRqd2tbJ3knXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleSgkcHVibGljS2V5LCAkandrWydhbGcnXSk7CiAgICAgICAgICAgIGNhc2UgJ09LUCc6CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGp3a1snZCddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgaXMgYWN0dWFsbHkgYSBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0tleSBkYXRhIG11c3QgYmUgZm9yIGEgcHVibGljIGtleScpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGp3a1snY3J2J10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignY3J2IG5vdCBzZXQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoc2VsZjo6T0tQX1NVQlRZUEVTWyRqd2tbJ2NydiddXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdVbnJlY29nbmlzZWQgb3IgdW5zdXBwb3J0ZWQgT0tQIGtleSBzdWJ0eXBlJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRqd2tbJ3gnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCd4IG5vdCBzZXQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUaGlzIGxpYnJhcnkgd29ya3MgaW50ZXJuYWxseSB3aXRoIEVkRFNBIGtleXMgKEVkMjU1MTkpIGVuY29kZWQgaW4gc3RhbmRhcmQgYmFzZTY0LgogICAgICAgICAgICAgICAgJHB1YmxpY0tleSA9IEpXVDo6Y29udmVydEJhc2U2NHVybFRvQmFzZTY0KCRqd2tbJ3gnXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleSgkcHVibGljS2V5LCAkandrWydhbGcnXSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIEVDIEpXSyB2YWx1ZXMgdG8gcGVtIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICRjcnYgVGhlIEVDIGN1cnZlIChvbmx5IFAtMjU2ICYgUC0zODQgaXMgc3VwcG9ydGVkKQogICAgICogQHBhcmFtICAgc3RyaW5nICAkeCAgIFRoZSBFQyB4LWNvb3JkaW5hdGUKICAgICAqIEBwYXJhbSAgIHN0cmluZyAgJHkgICBUaGUgRUMgeS1jb29yZGluYXRlCiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVBlbUZyb21DcnZBbmRYWUNvb3JkaW5hdGVzKHN0cmluZyAkY3J2LCBzdHJpbmcgJHgsIHN0cmluZyAkeSk6IHN0cmluZwogICAgewogICAgICAgICRwZW0gPQogICAgICAgICAgICBzZWxmOjplbmNvZGVERVIoCiAgICAgICAgICAgICAgICBzZWxmOjpBU04xX1NFUVVFTkNFLAogICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKAogICAgICAgICAgICAgICAgICAgIHNlbGY6OkFTTjFfU0VRVUVOQ0UsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpBU04xX09CSkVDVF9JREVOVElGSUVSLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjplbmNvZGVPSUQoc2VsZjo6T0lEKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAuIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6QVNOMV9PQkpFQ1RfSURFTlRJRklFUiwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6ZW5jb2RlT0lEKHNlbGY6OkVDX0NVUlZFU1skY3J2XSkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIC4KICAgICAgICAgICAgICAgIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgICAgICAgICBzZWxmOjpBU04xX0JJVF9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgXGNocigweDAwKSAuIFxjaHIoMHgwNCkKICAgICAgICAgICAgICAgICAgICAuIEpXVDo6dXJsc2FmZUI2NERlY29kZSgkeCkKICAgICAgICAgICAgICAgICAgICAuIEpXVDo6dXJsc2FmZUI2NERlY29kZSgkeSkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIHNwcmludGYoCiAgICAgICAgICAgICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuJXNcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIiwKICAgICAgICAgICAgd29yZHdyYXAoYmFzZTY0X2VuY29kZSgkcGVtKSwgNjQsICJcbiIsIHRydWUpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHB1YmxpYyBrZXkgcmVwcmVzZW50ZWQgaW4gUEVNIGZvcm1hdCBmcm9tIFJTQSBtb2R1bHVzIGFuZCBleHBvbmVudCBpbmZvcm1hdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG4gVGhlIFJTQSBtb2R1bHVzIGVuY29kZWQgaW4gQmFzZTY0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlIFRoZSBSU0EgZXhwb25lbnQgZW5jb2RlZCBpbiBCYXNlNjQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgUlNBIHB1YmxpYyBrZXkgcmVwcmVzZW50ZWQgaW4gUEVNIGZvcm1hdAogICAgICoKICAgICAqIEB1c2VzIGVuY29kZUxlbmd0aAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVQZW1Gcm9tTW9kdWx1c0FuZEV4cG9uZW50KAogICAgICAgIHN0cmluZyAkbiwKICAgICAgICBzdHJpbmcgJGUKICAgICk6IHN0cmluZyB7CiAgICAgICAgJG1vZCA9IEpXVDo6dXJsc2FmZUI2NERlY29kZSgkbik7CiAgICAgICAgJGV4cCA9IEpXVDo6dXJsc2FmZUI2NERlY29kZSgkZSk7CgogICAgICAgICRtb2R1bHVzID0gXHBhY2soJ0NhKmEqJywgMiwgc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJG1vZCkpLCAkbW9kKTsKICAgICAgICAkcHVibGljRXhwb25lbnQgPSBccGFjaygnQ2EqYSonLCAyLCBzZWxmOjplbmNvZGVMZW5ndGgoXHN0cmxlbigkZXhwKSksICRleHApOwoKICAgICAgICAkcnNhUHVibGljS2V5ID0gXHBhY2soCiAgICAgICAgICAgICdDYSphKmEqJywKICAgICAgICAgICAgNDgsCiAgICAgICAgICAgIHNlbGY6OmVuY29kZUxlbmd0aChcc3RybGVuKCRtb2R1bHVzKSArIFxzdHJsZW4oJHB1YmxpY0V4cG9uZW50KSksCiAgICAgICAgICAgICRtb2R1bHVzLAogICAgICAgICAgICAkcHVibGljRXhwb25lbnQKICAgICAgICApOwoKICAgICAgICAvLyBzZXF1ZW5jZShvaWQoMS4yLjg0MC4xMTM1NDkuMS4xLjEpLCBudWxsKSkgPSByc2FFbmNyeXB0aW9uLgogICAgICAgICRyc2FPSUQgPSBccGFjaygnSConLCAnMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDEwNTAwJyk7IC8vIGhleCB2ZXJzaW9uIG9mIE1BMEdDU3FHU0liM0RRRUJBUVVBCiAgICAgICAgJHJzYVB1YmxpY0tleSA9IFxjaHIoMCkgLiAkcnNhUHVibGljS2V5OwogICAgICAgICRyc2FQdWJsaWNLZXkgPSBcY2hyKDMpIC4gc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJHJzYVB1YmxpY0tleSkpIC4gJHJzYVB1YmxpY0tleTsKCiAgICAgICAgJHJzYVB1YmxpY0tleSA9IFxwYWNrKAogICAgICAgICAgICAnQ2EqYSonLAogICAgICAgICAgICA0OCwKICAgICAgICAgICAgc2VsZjo6ZW5jb2RlTGVuZ3RoKFxzdHJsZW4oJHJzYU9JRCAuICRyc2FQdWJsaWNLZXkpKSwKICAgICAgICAgICAgJHJzYU9JRCAuICRyc2FQdWJsaWNLZXkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXHJcbiIgLgogICAgICAgICAgICBcY2h1bmtfc3BsaXQoXGJhc2U2NF9lbmNvZGUoJHJzYVB1YmxpY0tleSksIDY0KSAuCiAgICAgICAgICAgICctLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0nOwogICAgfQoKICAgIC8qKgogICAgICogREVSLWVuY29kZSB0aGUgbGVuZ3RoCiAgICAgKgogICAgICogREVSIHN1cHBvcnRzIGxlbmd0aHMgdXAgdG8gKDIqKjgpKioxMjcsIGhvd2V2ZXIsIHdlJ2xsIG9ubHkgc3VwcG9ydCBsZW5ndGhzIHVwIHRvICgyKio4KSoqNC4gIFNlZQogICAgICoge0BsaW5rIGh0dHA6Ly9pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY5MC0wMjA3LnBkZiNwPTEzIFguNjkwIHBhcmFncmFwaCA4LjEuM30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVMZW5ndGgoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJGxlbmd0aCA8PSAweDdGKSB7CiAgICAgICAgICAgIHJldHVybiBcY2hyKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgJHRlbXAgPSBcbHRyaW0oXHBhY2soJ04nLCAkbGVuZ3RoKSwgXGNocigwKSk7CgogICAgICAgIHJldHVybiBccGFjaygnQ2EqJywgMHg4MCB8IFxzdHJsZW4oJHRlbXApLCAkdGVtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGVzIGEgdmFsdWUgaW50byBhIERFUiBvYmplY3QuCiAgICAgKiBBbHNvIGRlZmluZWQgaW4gRmlyZWJhc2VcSldUXEpXVAogICAgICoKICAgICAqIEBwYXJhbSAgIGludCAgICAgJHR5cGUgREVSIHRhZwogICAgICogQHBhcmFtICAgc3RyaW5nICAkdmFsdWUgdGhlIHZhbHVlIHRvIGVuY29kZQogICAgICogQHJldHVybiAgc3RyaW5nICB0aGUgZW5jb2RlZCBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlREVSKGludCAkdHlwZSwgc3RyaW5nICR2YWx1ZSk6IHN0cmluZwogICAgewogICAgICAgICR0YWdfaGVhZGVyID0gMDsKICAgICAgICBpZiAoJHR5cGUgPT09IHNlbGY6OkFTTjFfU0VRVUVOQ0UpIHsKICAgICAgICAgICAgJHRhZ19oZWFkZXIgfD0gMHgyMDsKICAgICAgICB9CgogICAgICAgIC8vIFR5cGUKICAgICAgICAkZGVyID0gXGNocigkdGFnX2hlYWRlciB8ICR0eXBlKTsKCiAgICAgICAgLy8gTGVuZ3RoCiAgICAgICAgJGRlciAuPSBcY2hyKFxzdHJsZW4oJHZhbHVlKSk7CgogICAgICAgIHJldHVybiAkZGVyIC4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogRW5jb2RlcyBhIHN0cmluZyBpbnRvIGEgREVSLWVuY29kZWQgT0lELgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkb2lkIHRoZSBPSUQgc3RyaW5nCiAgICAgKiBAcmV0dXJuICBzdHJpbmcgdGhlIGJpbmFyeSBERVItZW5jb2RlZCBPSUQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5jb2RlT0lEKHN0cmluZyAkb2lkKTogc3RyaW5nCiAgICB7CiAgICAgICAgJG9jdGV0cyA9IGV4cGxvZGUoJy4nLCAkb2lkKTsKCiAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBvY3RldAogICAgICAgICRmaXJzdCA9IChpbnQpIGFycmF5X3NoaWZ0KCRvY3RldHMpOwogICAgICAgICRzZWNvbmQgPSAoaW50KSBhcnJheV9zaGlmdCgkb2N0ZXRzKTsKICAgICAgICAkb2lkID0gXGNocigkZmlyc3QgKiA0MCArICRzZWNvbmQpOwoKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgc3Vic2VxdWVudCBvY3RldHMKICAgICAgICBmb3JlYWNoICgkb2N0ZXRzIGFzICRvY3RldCkgewogICAgICAgICAgICBpZiAoJG9jdGV0ID09IDApIHsKICAgICAgICAgICAgICAgICRvaWQgLj0gXGNocigweDAwKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRiaW4gPSAnJzsKCiAgICAgICAgICAgIHdoaWxlICgkb2N0ZXQpIHsKICAgICAgICAgICAgICAgICRiaW4gLj0gXGNocigweDgwIHwgKCRvY3RldCAmIDB4N2YpKTsKICAgICAgICAgICAgICAgICRvY3RldCA+Pj0gNzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYmluWzBdID0gJGJpblswXSAmIFxjaHIoMHg3Zik7CgogICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGJpZyBlbmRpYW4gaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgIGlmIChwYWNrKCdWJywgNjU1MzQpID09IHBhY2soJ0wnLCA2NTUzNCkpIHsKICAgICAgICAgICAgICAgICRvaWQgLj0gc3RycmV2KCRiaW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG9pZCAuPSAkYmluOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9pZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBEYXRlVGltZTsKdXNlIERvbWFpbkV4Y2VwdGlvbjsKdXNlIEV4Y2VwdGlvbjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIE9wZW5TU0xBc3ltbWV0cmljS2V5Owp1c2UgT3BlblNTTENlcnRpZmljYXRlOwp1c2Ugc3RkQ2xhc3M7CnVzZSBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb247CgovKioKICogSlNPTiBXZWIgVG9rZW4gaW1wbGVtZW50YXRpb24sIGJhc2VkIG9uIHRoaXMgc3BlYzoKICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTkKICoKICogUEhQIHZlcnNpb24gNQogKgogKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb24KICogQHBhY2thZ2UgIEF1dGhlbnRpY2F0aW9uX0pXVAogKiBAYXV0aG9yICAgTmV1bWFuIFZvbmcgPG5ldW1hbkB0d2lsaW8uY29tPgogKiBAYXV0aG9yICAgQW5hbnQgTmFyYXlhbmFuIDxhbmFudEBwaHAubmV0PgogKiBAbGljZW5zZSAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZSAzLWNsYXVzZSBCU0QKICogQGxpbmsgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9maXJlYmFzZS9waHAtand0CiAqLwpjbGFzcyBKV1QKewogICAgcHJpdmF0ZSBjb25zdCBBU04xX0lOVEVHRVIgPSAweDAyOwogICAgcHJpdmF0ZSBjb25zdCBBU04xX1NFUVVFTkNFID0gMHgxMDsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9CSVRfU1RSSU5HID0gMHgwMzsKCiAgICAvKioKICAgICAqIFdoZW4gY2hlY2tpbmcgbmJmLCBpYXQgb3IgZXhwaXJhdGlvbiB0aW1lcywKICAgICAqIHdlIHdhbnQgdG8gcHJvdmlkZSBzb21lIGV4dHJhIGxlZXdheSB0aW1lIHRvCiAgICAgKiBhY2NvdW50IGZvciBjbG9jayBza2V3LgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGxlZXdheSA9IDA7CgogICAgLyoqCiAgICAgKiBBbGxvdyB0aGUgY3VycmVudCB0aW1lc3RhbXAgdG8gYmUgc3BlY2lmaWVkLgogICAgICogVXNlZnVsIGZvciBmaXhpbmcgYSB2YWx1ZSB3aXRoaW4gdW5pdCB0ZXN0aW5nLgogICAgICogV2lsbCBkZWZhdWx0IHRvIFBIUCB0aW1lKCkgdmFsdWUgaWYgbnVsbC4KICAgICAqCiAgICAgKiBAdmFyID9pbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkdGltZXN0YW1wID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBzdHJpbmdbXT4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkc3VwcG9ydGVkX2FsZ3MgPSBbCiAgICAgICAgJ0VTMzg0JyA9PiBbJ29wZW5zc2wnLCAnU0hBMzg0J10sCiAgICAgICAgJ0VTMjU2JyA9PiBbJ29wZW5zc2wnLCAnU0hBMjU2J10sCiAgICAgICAgJ0VTMjU2SycgPT4gWydvcGVuc3NsJywgJ1NIQTI1NiddLAogICAgICAgICdIUzI1NicgPT4gWydoYXNoX2htYWMnLCAnU0hBMjU2J10sCiAgICAgICAgJ0hTMzg0JyA9PiBbJ2hhc2hfaG1hYycsICdTSEEzODQnXSwKICAgICAgICAnSFM1MTInID0+IFsnaGFzaF9obWFjJywgJ1NIQTUxMiddLAogICAgICAgICdSUzI1NicgPT4gWydvcGVuc3NsJywgJ1NIQTI1NiddLAogICAgICAgICdSUzM4NCcgPT4gWydvcGVuc3NsJywgJ1NIQTM4NCddLAogICAgICAgICdSUzUxMicgPT4gWydvcGVuc3NsJywgJ1NIQTUxMiddLAogICAgICAgICdFZERTQScgPT4gWydzb2RpdW1fY3J5cHRvJywgJ0VkRFNBJ10sCiAgICBdOwoKICAgIC8qKgogICAgICogRGVjb2RlcyBhIEpXVCBzdHJpbmcgaW50byBhIFBIUCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgJGp3dCAgICAgICAgICAgIFRoZSBKV1QKICAgICAqIEBwYXJhbSBLZXl8QXJyYXlBY2Nlc3M8c3RyaW5nLEtleT58YXJyYXk8c3RyaW5nLEtleT4gJGtleU9yS2V5QXJyYXkgIFRoZSBLZXkgb3IgYXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5IElEcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtpZCkgdG8gS2V5IG9iamVjdHMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYWxnb3JpdGhtIHVzZWQgaXMgYXN5bW1ldHJpYywgdGhpcyBpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHB1YmxpYyBrZXkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIEtleSBvYmplY3QgY29udGFpbnMgYW4gYWxnb3JpdGhtIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcga2V5LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlICdFUzM4NCcsJ0VTMjU2JywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIUzI1NicsICdIUzM4NCcsICdIUzUxMicsICdSUzI1NicsICdSUzM4NCcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAnUlM1MTInLgogICAgICogQHBhcmFtIHN0ZENsYXNzICAgICAgICAgICAgICAgJGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFBvcHVsYXRlcyBzdGRDbGFzcyB3aXRoIGhlYWRlcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdGRDbGFzcyBUaGUgSldUJ3MgcGF5bG9hZCBhcyBhIFBIUCBvYmplY3QKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAgICAgUHJvdmlkZWQga2V5L2tleS1hcnJheSB3YXMgZW1wdHkgb3IgbWFsZm9ybWVkCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiAgICAgICAgICAgICAgUHJvdmlkZWQgSldUIGlzIG1hbGZvcm1lZAogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gICAgIFByb3ZpZGVkIEpXVCB3YXMgaW52YWxpZAogICAgICogQHRocm93cyBTaWduYXR1cmVJbnZhbGlkRXhjZXB0aW9uICAgIFByb3ZpZGVkIEpXVCB3YXMgaW52YWxpZCBiZWNhdXNlIHRoZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZAogICAgICogQHRocm93cyBCZWZvcmVWYWxpZEV4Y2VwdGlvbiAgICAgICAgIFByb3ZpZGVkIEpXVCBpcyB0cnlpbmcgdG8gYmUgdXNlZCBiZWZvcmUgaXQncyBlbGlnaWJsZSBhcyBkZWZpbmVkIGJ5ICduYmYnCiAgICAgKiBAdGhyb3dzIEJlZm9yZVZhbGlkRXhjZXB0aW9uICAgICAgICAgUHJvdmlkZWQgSldUIGlzIHRyeWluZyB0byBiZSB1c2VkIGJlZm9yZSBpdCdzIGJlZW4gY3JlYXRlZCBhcyBkZWZpbmVkIGJ5ICdpYXQnCiAgICAgKiBAdGhyb3dzIEV4cGlyZWRFeGNlcHRpb24gICAgICAgICAgICAgUHJvdmlkZWQgSldUIGhhcyBzaW5jZSBleHBpcmVkLCBhcyBkZWZpbmVkIGJ5IHRoZSAnZXhwJyBjbGFpbQogICAgICoKICAgICAqIEB1c2VzIGpzb25EZWNvZGUKICAgICAqIEB1c2VzIHVybHNhZmVCNjREZWNvZGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGUoCiAgICAgICAgc3RyaW5nICRqd3QsCiAgICAgICAgJGtleU9yS2V5QXJyYXksCiAgICAgICAgc3RkQ2xhc3MgJiRoZWFkZXJzID0gbnVsbAogICAgKTogc3RkQ2xhc3MgewogICAgICAgIC8vIFZhbGlkYXRlIEpXVAogICAgICAgICR0aW1lc3RhbXAgPSBcaXNfbnVsbChzdGF0aWM6OiR0aW1lc3RhbXApID8gXHRpbWUoKSA6IHN0YXRpYzo6JHRpbWVzdGFtcDsKCiAgICAgICAgaWYgKGVtcHR5KCRrZXlPcktleUFycmF5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdLZXkgbWF5IG5vdCBiZSBlbXB0eScpOwogICAgICAgIH0KICAgICAgICAkdGtzID0gXGV4cGxvZGUoJy4nLCAkand0KTsKICAgICAgICBpZiAoXGNvdW50KCR0a3MpICE9PSAzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1dyb25nIG51bWJlciBvZiBzZWdtZW50cycpOwogICAgICAgIH0KICAgICAgICBsaXN0KCRoZWFkYjY0LCAkYm9keWI2NCwgJGNyeXB0b2I2NCkgPSAkdGtzOwogICAgICAgICRoZWFkZXJSYXcgPSBzdGF0aWM6OnVybHNhZmVCNjREZWNvZGUoJGhlYWRiNjQpOwogICAgICAgIGlmIChudWxsID09PSAoJGhlYWRlciA9IHN0YXRpYzo6anNvbkRlY29kZSgkaGVhZGVyUmF3KSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignSW52YWxpZCBoZWFkZXIgZW5jb2RpbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRoZWFkZXJzICE9PSBudWxsKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gJGhlYWRlcjsKICAgICAgICB9CiAgICAgICAgJHBheWxvYWRSYXcgPSBzdGF0aWM6OnVybHNhZmVCNjREZWNvZGUoJGJvZHliNjQpOwogICAgICAgIGlmIChudWxsID09PSAoJHBheWxvYWQgPSBzdGF0aWM6Ompzb25EZWNvZGUoJHBheWxvYWRSYXcpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIGNsYWltcyBlbmNvZGluZycpOwogICAgICAgIH0KICAgICAgICBpZiAoXGlzX2FycmF5KCRwYXlsb2FkKSkgewogICAgICAgICAgICAvLyBwcmV2ZW50IFBIUCBGYXRhbCBFcnJvciBpbiBlZGdlLWNhc2VzIHdoZW4gcGF5bG9hZCBpcyBlbXB0eSBhcnJheQogICAgICAgICAgICAkcGF5bG9hZCA9IChvYmplY3QpICRwYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAoISRwYXlsb2FkIGluc3RhbmNlb2Ygc3RkQ2xhc3MpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignUGF5bG9hZCBtdXN0IGJlIGEgSlNPTiBvYmplY3QnKTsKICAgICAgICB9CiAgICAgICAgJHNpZyA9IHN0YXRpYzo6dXJsc2FmZUI2NERlY29kZSgkY3J5cHRvYjY0KTsKICAgICAgICBpZiAoZW1wdHkoJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdFbXB0eSBhbGdvcml0aG0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRoZWFkZXItPmFsZ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0FsZ29yaXRobSBub3Qgc3VwcG9ydGVkJyk7CiAgICAgICAgfQoKICAgICAgICAka2V5ID0gc2VsZjo6Z2V0S2V5KCRrZXlPcktleUFycmF5LCBwcm9wZXJ0eV9leGlzdHMoJGhlYWRlciwgJ2tpZCcpID8gJGhlYWRlci0+a2lkIDogbnVsbCk7CgogICAgICAgIC8vIENoZWNrIHRoZSBhbGdvcml0aG0KICAgICAgICBpZiAoIXNlbGY6OmNvbnN0YW50VGltZUVxdWFscygka2V5LT5nZXRBbGdvcml0aG0oKSwgJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICAvLyBTZWUgaXNzdWUgIzM1MQogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbmNvcnJlY3Qga2V5IGZvciB0aGlzIGFsZ29yaXRobScpOwogICAgICAgIH0KICAgICAgICBpZiAoXGluX2FycmF5KCRoZWFkZXItPmFsZywgWydFUzI1NicsICdFUzI1NksnLCAnRVMzODQnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgLy8gT3BlblNTTCBleHBlY3RzIGFuIEFTTi4xIERFUiBzZXF1ZW5jZSBmb3IgRVMyNTYvRVMyNTZLL0VTMzg0IHNpZ25hdHVyZXMKICAgICAgICAgICAgJHNpZyA9IHNlbGY6OnNpZ25hdHVyZVRvREVSKCRzaWcpOwogICAgICAgIH0KICAgICAgICBpZiAoIXNlbGY6OnZlcmlmeSgieyRoZWFkYjY0fS57JGJvZHliNjR9IiwgJHNpZywgJGtleS0+Z2V0S2V5TWF0ZXJpYWwoKSwgJGhlYWRlci0+YWxnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU2lnbmF0dXJlSW52YWxpZEV4Y2VwdGlvbignU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQnKTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIHRoZSBuYmYgaWYgaXQgaXMgZGVmaW5lZC4gVGhpcyBpcyB0aGUgdGltZSB0aGF0IHRoZQogICAgICAgIC8vIHRva2VuIGNhbiBhY3R1YWxseSBiZSB1c2VkLiBJZiBpdCdzIG5vdCB5ZXQgdGhhdCB0aW1lLCBhYm9ydC4KICAgICAgICBpZiAoaXNzZXQoJHBheWxvYWQtPm5iZikgJiYgZmxvb3IoJHBheWxvYWQtPm5iZikgPiAoJHRpbWVzdGFtcCArIHN0YXRpYzo6JGxlZXdheSkpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IEJlZm9yZVZhbGlkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0Nhbm5vdCBoYW5kbGUgdG9rZW4gd2l0aCBuYmYgcHJpb3IgdG8gJyAuIFxkYXRlKERhdGVUaW1lOjpJU084NjAxLCAoaW50KSAkcGF5bG9hZC0+bmJmKQogICAgICAgICAgICApOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayB0aGF0IHRoaXMgdG9rZW4gaGFzIGJlZW4gY3JlYXRlZCBiZWZvcmUgJ25vdycuIFRoaXMgcHJldmVudHMKICAgICAgICAvLyB1c2luZyB0b2tlbnMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgbGF0ZXIgdXNlIChhbmQgaGF2ZW4ndAogICAgICAgIC8vIGNvcnJlY3RseSB1c2VkIHRoZSBuYmYgY2xhaW0pLgogICAgICAgIGlmICghaXNzZXQoJHBheWxvYWQtPm5iZikgJiYgaXNzZXQoJHBheWxvYWQtPmlhdCkgJiYgZmxvb3IoJHBheWxvYWQtPmlhdCkgPiAoJHRpbWVzdGFtcCArIHN0YXRpYzo6JGxlZXdheSkpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IEJlZm9yZVZhbGlkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0Nhbm5vdCBoYW5kbGUgdG9rZW4gd2l0aCBpYXQgcHJpb3IgdG8gJyAuIFxkYXRlKERhdGVUaW1lOjpJU084NjAxLCAoaW50KSAkcGF5bG9hZC0+aWF0KQogICAgICAgICAgICApOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHRva2VuIGhhcyBleHBpcmVkLgogICAgICAgIGlmIChpc3NldCgkcGF5bG9hZC0+ZXhwKSAmJiAoJHRpbWVzdGFtcCAtIHN0YXRpYzo6JGxlZXdheSkgPj0gJHBheWxvYWQtPmV4cCkgewogICAgICAgICAgICAkZXggPSBuZXcgRXhwaXJlZEV4Y2VwdGlvbignRXhwaXJlZCB0b2tlbicpOwogICAgICAgICAgICAkZXgtPnNldFBheWxvYWQoJHBheWxvYWQpOwogICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHBheWxvYWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhbmQgc2lnbnMgYSBQSFAgYXJyYXkgaW50byBhIEpXVCBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAgICAgICAgICAkcGF5bG9hZCBQSFAgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlICRrZXkgVGhlIHNlY3JldCBrZXkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICRhbGcgICAgIFN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSAnRVMzODQnLCdFUzI1NicsICdFUzI1NksnLCAnSFMyNTYnLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFMzODQnLCAnSFM1MTInLCAnUlMyNTYnLCAnUlMzODQnLCBhbmQgJ1JTNTEyJwogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAka2V5SWQKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIHN0cmluZz4gJGhlYWQgICAgQW4gYXJyYXkgd2l0aCBoZWFkZXIgZWxlbWVudHMgdG8gYXR0YWNoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBzaWduZWQgSldUCiAgICAgKgogICAgICogQHVzZXMganNvbkVuY29kZQogICAgICogQHVzZXMgdXJsc2FmZUI2NEVuY29kZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgKICAgICAgICBhcnJheSAkcGF5bG9hZCwKICAgICAgICAka2V5LAogICAgICAgIHN0cmluZyAkYWxnLAogICAgICAgIHN0cmluZyAka2V5SWQgPSBudWxsLAogICAgICAgIGFycmF5ICRoZWFkID0gbnVsbAogICAgKTogc3RyaW5nIHsKICAgICAgICAkaGVhZGVyID0gWyd0eXAnID0+ICdKV1QnXTsKICAgICAgICBpZiAoaXNzZXQoJGhlYWQpICYmIFxpc19hcnJheSgkaGVhZCkpIHsKICAgICAgICAgICAgJGhlYWRlciA9IFxhcnJheV9tZXJnZSgkaGVhZGVyLCAkaGVhZCk7CiAgICAgICAgfQogICAgICAgICRoZWFkZXJbJ2FsZyddID0gJGFsZzsKICAgICAgICBpZiAoJGtleUlkICE9PSBudWxsKSB7CiAgICAgICAgICAgICRoZWFkZXJbJ2tpZCddID0gJGtleUlkOwogICAgICAgIH0KICAgICAgICAkc2VnbWVudHMgPSBbXTsKICAgICAgICAkc2VnbWVudHNbXSA9IHN0YXRpYzo6dXJsc2FmZUI2NEVuY29kZSgoc3RyaW5nKSBzdGF0aWM6Ompzb25FbmNvZGUoJGhlYWRlcikpOwogICAgICAgICRzZWdtZW50c1tdID0gc3RhdGljOjp1cmxzYWZlQjY0RW5jb2RlKChzdHJpbmcpIHN0YXRpYzo6anNvbkVuY29kZSgkcGF5bG9hZCkpOwogICAgICAgICRzaWduaW5nX2lucHV0ID0gXGltcGxvZGUoJy4nLCAkc2VnbWVudHMpOwoKICAgICAgICAkc2lnbmF0dXJlID0gc3RhdGljOjpzaWduKCRzaWduaW5nX2lucHV0LCAka2V5LCAkYWxnKTsKICAgICAgICAkc2VnbWVudHNbXSA9IHN0YXRpYzo6dXJsc2FmZUI2NEVuY29kZSgkc2lnbmF0dXJlKTsKCiAgICAgICAgcmV0dXJuIFxpbXBsb2RlKCcuJywgJHNlZ21lbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNpZ24gYSBzdHJpbmcgd2l0aCBhIGdpdmVuIGtleSBhbmQgYWxnb3JpdGhtLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZyAgVGhlIG1lc3NhZ2UgdG8gc2lnbgogICAgICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZXxPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGUgICRrZXkgIFRoZSBzZWNyZXQga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkYWxnICBTdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmUgJ0VkRFNBJywgJ0VTMzg0JywgJ0VTMjU2JywgJ0VTMjU2SycsICdIUzI1NicsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgJ0hTMzg0JywgJ0hTNTEyJywgJ1JTMjU2JywgJ1JTMzg0JywgYW5kICdSUzUxMicKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBbiBlbmNyeXB0ZWQgbWVzc2FnZQogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uIFVuc3VwcG9ydGVkIGFsZ29yaXRobSBvciBiYWQga2V5IHdhcyBzcGVjaWZpZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKAogICAgICAgIHN0cmluZyAkbXNnLAogICAgICAgICRrZXksCiAgICAgICAgc3RyaW5nICRhbGcKICAgICk6IHN0cmluZyB7CiAgICAgICAgaWYgKGVtcHR5KHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRhbGddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdBbGdvcml0aG0gbm90IHN1cHBvcnRlZCcpOwogICAgICAgIH0KICAgICAgICBsaXN0KCRmdW5jdGlvbiwgJGFsZ29yaXRobSkgPSBzdGF0aWM6OiRzdXBwb3J0ZWRfYWxnc1skYWxnXTsKICAgICAgICBzd2l0Y2ggKCRmdW5jdGlvbikgewogICAgICAgICAgICBjYXNlICdoYXNoX2htYWMnOgogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigna2V5IG11c3QgYmUgYSBzdHJpbmcgd2hlbiB1c2luZyBobWFjJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gXGhhc2hfaG1hYygkYWxnb3JpdGhtLCAkbXNnLCAka2V5LCB0cnVlKTsKICAgICAgICAgICAgY2FzZSAnb3BlbnNzbCc6CiAgICAgICAgICAgICAgICAkc2lnbmF0dXJlID0gJyc7CiAgICAgICAgICAgICAgICAkc3VjY2VzcyA9IFxvcGVuc3NsX3NpZ24oJG1zZywgJHNpZ25hdHVyZSwgJGtleSwgJGFsZ29yaXRobSk7IC8vIEBwaHBzdGFuLWlnbm9yZS1saW5lCiAgICAgICAgICAgICAgICBpZiAoISRzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignT3BlblNTTCB1bmFibGUgdG8gc2lnbiBkYXRhJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGFsZyA9PT0gJ0VTMjU2JyB8fCAkYWxnID09PSAnRVMyNTZLJykgewogICAgICAgICAgICAgICAgICAgICRzaWduYXR1cmUgPSBzZWxmOjpzaWduYXR1cmVGcm9tREVSKCRzaWduYXR1cmUsIDI1Nik7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGFsZyA9PT0gJ0VTMzg0JykgewogICAgICAgICAgICAgICAgICAgICRzaWduYXR1cmUgPSBzZWxmOjpzaWduYXR1cmVGcm9tREVSKCRzaWduYXR1cmUsIDM4NCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgY2FzZSAnc29kaXVtX2NyeXB0byc6CiAgICAgICAgICAgICAgICBpZiAoIVxmdW5jdGlvbl9leGlzdHMoJ3NvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignbGlic29kaXVtIGlzIG5vdCBhdmFpbGFibGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygka2V5KSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2tleSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgRWREU0EnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgbm9uLWVtcHR5IGxpbmUgaXMgdXNlZCBhcyB0aGUga2V5LgogICAgICAgICAgICAgICAgICAgICRsaW5lcyA9IGFycmF5X2ZpbHRlcihleHBsb2RlKCJcbiIsICRrZXkpKTsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gYmFzZTY0X2RlY29kZSgoc3RyaW5nKSBlbmQoJGxpbmVzKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJGtleSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZCgkbXNnLCAka2V5KTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgMCwgJGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignQWxnb3JpdGhtIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmeSBhIHNpZ25hdHVyZSB3aXRoIHRoZSBtZXNzYWdlLCBrZXkgYW5kIG1ldGhvZC4gTm90IGFsbCBtZXRob2RzCiAgICAgKiBhcmUgc3ltbWV0cmljLCBzbyB3ZSBtdXN0IGhhdmUgYSBzZXBhcmF0ZSB2ZXJpZnkgYW5kIHNpZ24gbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZyAgICAgICAgIFRoZSBvcmlnaW5hbCBtZXNzYWdlIChoZWFkZXIgYW5kIGJvZHkpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUgICBUaGUgb3JpZ2luYWwgc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZSAgJGtleU1hdGVyaWFsIEZvciBFZCosIEVTKiwgSFMqLCBhIHN0cmluZyBrZXkgd29ya3MuIGZvciBSUyosIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgT3BlblNTTEFzeW1tZXRyaWNLZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZyAgICAgICAgIFRoZSBhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIERvbWFpbkV4Y2VwdGlvbiBJbnZhbGlkIEFsZ29yaXRobSwgYmFkIGtleSwgb3IgT3BlblNTTCBmYWlsdXJlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBzdHJpbmcgJG1zZywKICAgICAgICBzdHJpbmcgJHNpZ25hdHVyZSwKICAgICAgICAka2V5TWF0ZXJpYWwsCiAgICAgICAgc3RyaW5nICRhbGcKICAgICk6IGJvb2wgewogICAgICAgIGlmIChlbXB0eShzdGF0aWM6OiRzdXBwb3J0ZWRfYWxnc1skYWxnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignQWxnb3JpdGhtIG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICB9CgogICAgICAgIGxpc3QoJGZ1bmN0aW9uLCAkYWxnb3JpdGhtKSA9IHN0YXRpYzo6JHN1cHBvcnRlZF9hbGdzWyRhbGddOwogICAgICAgIHN3aXRjaCAoJGZ1bmN0aW9uKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgJHN1Y2Nlc3MgPSBcb3BlbnNzbF92ZXJpZnkoJG1zZywgJHNpZ25hdHVyZSwgJGtleU1hdGVyaWFsLCAkYWxnb3JpdGhtKTsgLy8gQHBocHN0YW4taWdub3JlLWxpbmUKICAgICAgICAgICAgICAgIGlmICgkc3VjY2VzcyA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzdWNjZXNzID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZSwgLTEgb24gZXJyb3IuCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdPcGVuU1NMIGVycm9yOiAnIC4gXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNhc2UgJ3NvZGl1bV9jcnlwdG8nOgogICAgICAgICAgICAgICAgaWYgKCFcZnVuY3Rpb25fZXhpc3RzKCdzb2RpdW1fY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkJykpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdsaWJzb2RpdW0gaXMgbm90IGF2YWlsYWJsZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRrZXlNYXRlcmlhbCkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdrZXkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIEVkRFNBJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG5vbi1lbXB0eSBsaW5lIGlzIHVzZWQgYXMgdGhlIGtleS4KICAgICAgICAgICAgICAgICAgICAkbGluZXMgPSBhcnJheV9maWx0ZXIoZXhwbG9kZSgiXG4iLCAka2V5TWF0ZXJpYWwpKTsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gYmFzZTY0X2RlY29kZSgoc3RyaW5nKSBlbmQoJGxpbmVzKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJGtleSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJsZW4oJHNpZ25hdHVyZSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignU2lnbmF0dXJlIGNhbm5vdCBiZSBlbXB0eSBzdHJpbmcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1zZywgJGtleSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIDAsICRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnaGFzaF9obWFjJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygka2V5TWF0ZXJpYWwpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigna2V5IG11c3QgYmUgYSBzdHJpbmcgd2hlbiB1c2luZyBobWFjJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaGFzaCA9IFxoYXNoX2htYWMoJGFsZ29yaXRobSwgJG1zZywgJGtleU1hdGVyaWFsLCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjpjb25zdGFudFRpbWVFcXVhbHMoJGhhc2gsICRzaWduYXR1cmUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIERlY29kZSBhIEpTT04gc3RyaW5nIGludG8gYSBQSFAgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0IEpTT04gc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgZGVjb2RlZCBKU09OIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uIFByb3ZpZGVkIHN0cmluZyB3YXMgaW52YWxpZCBKU09OCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ganNvbkRlY29kZShzdHJpbmcgJGlucHV0KQogICAgewogICAgICAgICRvYmogPSBcanNvbl9kZWNvZGUoJGlucHV0LCBmYWxzZSwgNTEyLCBKU09OX0JJR0lOVF9BU19TVFJJTkcpOwoKICAgICAgICBpZiAoJGVycm5vID0gXGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgICAgIHNlbGY6OmhhbmRsZUpzb25FcnJvcigkZXJybm8pOwogICAgICAgIH0gZWxzZWlmICgkb2JqID09PSBudWxsICYmICRpbnB1dCAhPT0gJ251bGwnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oJ051bGwgcmVzdWx0IHdpdGggbm9uLW51bGwgaW5wdXQnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGUgYSBQSFAgYXJyYXkgaW50byBhIEpTT04gc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGlucHV0IEEgUEhQIGFycmF5CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgUEhQIGFycmF5CiAgICAgKgogICAgICogQHRocm93cyBEb21haW5FeGNlcHRpb24gUHJvdmlkZWQgb2JqZWN0IGNvdWxkIG5vdCBiZSBlbmNvZGVkIHRvIHZhbGlkIEpTT04KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBqc29uRW5jb2RlKGFycmF5ICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA+PSA1MDQwMCkgewogICAgICAgICAgICAkanNvbiA9IFxqc29uX2VuY29kZSgkaW5wdXQsIFxKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBQSFAgNS4zIG9ubHkKICAgICAgICAgICAgJGpzb24gPSBcanNvbl9lbmNvZGUoJGlucHV0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCRlcnJubyA9IFxqc29uX2xhc3RfZXJyb3IoKSkgewogICAgICAgICAgICBzZWxmOjpoYW5kbGVKc29uRXJyb3IoJGVycm5vKTsKICAgICAgICB9IGVsc2VpZiAoJGpzb24gPT09ICdudWxsJykgewogICAgICAgICAgICB0aHJvdyBuZXcgRG9tYWluRXhjZXB0aW9uKCdOdWxsIHJlc3VsdCB3aXRoIG5vbi1udWxsIGlucHV0Jyk7CiAgICAgICAgfQogICAgICAgIGlmICgkanNvbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERvbWFpbkV4Y2VwdGlvbignUHJvdmlkZWQgb2JqZWN0IGNvdWxkIG5vdCBiZSBlbmNvZGVkIHRvIHZhbGlkIEpTT04nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRqc29uOwogICAgfQoKICAgIC8qKgogICAgICogRGVjb2RlIGEgc3RyaW5nIHdpdGggVVJMLXNhZmUgQmFzZTY0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0IEEgQmFzZTY0IGVuY29kZWQgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBkZWNvZGVkIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGludmFsaWQgYmFzZTY0IGNoYXJhY3RlcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmxzYWZlQjY0RGVjb2RlKHN0cmluZyAkaW5wdXQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGJhc2U2NF9kZWNvZGUoc2VsZjo6Y29udmVydEJhc2U2NFVybFRvQmFzZTY0KCRpbnB1dCkpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIHN0cmluZyBpbiB0aGUgYmFzZTY0dXJsIChVUkwtc2FmZSBCYXNlNjQpIGVuY29kaW5nIHRvIHN0YW5kYXJkIGJhc2U2NC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBBIEJhc2U2NCBlbmNvZGVkIHN0cmluZyB3aXRoIFVSTC1zYWZlIGNoYXJhY3RlcnMgKC1fIGFuZCBubyBwYWRkaW5nKQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgQmFzZTY0IGVuY29kZWQgc3RyaW5nIHdpdGggc3RhbmRhcmQgY2hhcmFjdGVycyAoKy8pIGFuZCBwYWRkaW5nICg9KSwgd2hlbgogICAgICogbmVlZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQ2NDgKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb252ZXJ0QmFzZTY0VXJsVG9CYXNlNjQoc3RyaW5nICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgICRyZW1haW5kZXIgPSBcc3RybGVuKCRpbnB1dCkgJSA0OwogICAgICAgIGlmICgkcmVtYWluZGVyKSB7CiAgICAgICAgICAgICRwYWRsZW4gPSA0IC0gJHJlbWFpbmRlcjsKICAgICAgICAgICAgJGlucHV0IC49IFxzdHJfcmVwZWF0KCc9JywgJHBhZGxlbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBcc3RydHIoJGlucHV0LCAnLV8nLCAnKy8nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZSBhIHN0cmluZyB3aXRoIFVSTC1zYWZlIEJhc2U2NC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBUaGUgc3RyaW5nIHlvdSB3YW50IGVuY29kZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgYmFzZTY0IGVuY29kZSBvZiB3aGF0IHlvdSBwYXNzZWQgaW4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmxzYWZlQjY0RW5jb2RlKHN0cmluZyAkaW5wdXQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXHN0cl9yZXBsYWNlKCc9JywgJycsIFxzdHJ0cihcYmFzZTY0X2VuY29kZSgkaW5wdXQpLCAnKy8nLCAnLV8nKSk7CiAgICB9CgoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIGFuIGFsZ29yaXRobSBoYXMgYmVlbiBwcm92aWRlZCBmb3IgZWFjaCBLZXkKICAgICAqCiAgICAgKiBAcGFyYW0gS2V5fEFycmF5QWNjZXNzPHN0cmluZyxLZXk+fGFycmF5PHN0cmluZyxLZXk+ICRrZXlPcktleUFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAka2lkCiAgICAgKgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIEtleQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRLZXkoCiAgICAgICAgJGtleU9yS2V5QXJyYXksCiAgICAgICAgP3N0cmluZyAka2lkCiAgICApOiBLZXkgewogICAgICAgIGlmICgka2V5T3JLZXlBcnJheSBpbnN0YW5jZW9mIEtleSkgewogICAgICAgICAgICByZXR1cm4gJGtleU9yS2V5QXJyYXk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGtpZCkgJiYgJGtpZCAhPT0gJzAnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJyJraWQiIGVtcHR5LCB1bmFibGUgdG8gbG9va3VwIGNvcnJlY3Qga2V5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGtleU9yS2V5QXJyYXkgaW5zdGFuY2VvZiBDYWNoZWRLZXlTZXQpIHsKICAgICAgICAgICAgLy8gU2tpcCAiaXNzZXQiIGNoZWNrLCBhcyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSByZWZyZXNoIGlmIG5vdCBzZXQKICAgICAgICAgICAgcmV0dXJuICRrZXlPcktleUFycmF5WyRraWRdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgka2V5T3JLZXlBcnJheVska2lkXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignImtpZCIgaW52YWxpZCwgdW5hYmxlIHRvIGxvb2t1cCBjb3JyZWN0IGtleScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRrZXlPcktleUFycmF5WyRraWRdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbGVmdCAgVGhlIHN0cmluZyBvZiBrbm93biBsZW5ndGggdG8gY29tcGFyZSBhZ2FpbnN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyaWdodCBUaGUgdXNlci1zdXBwbGllZCBzdHJpbmcKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnN0YW50VGltZUVxdWFscyhzdHJpbmcgJGxlZnQsIHN0cmluZyAkcmlnaHQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2hhc2hfZXF1YWxzJykpIHsKICAgICAgICAgICAgcmV0dXJuIFxoYXNoX2VxdWFscygkbGVmdCwgJHJpZ2h0KTsKICAgICAgICB9CiAgICAgICAgJGxlbiA9IFxtaW4oc2VsZjo6c2FmZVN0cmxlbigkbGVmdCksIHNlbGY6OnNhZmVTdHJsZW4oJHJpZ2h0KSk7CgogICAgICAgICRzdGF0dXMgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICRpKyspIHsKICAgICAgICAgICAgJHN0YXR1cyB8PSAoXG9yZCgkbGVmdFskaV0pIF4gXG9yZCgkcmlnaHRbJGldKSk7CiAgICAgICAgfQogICAgICAgICRzdGF0dXMgfD0gKHNlbGY6OnNhZmVTdHJsZW4oJGxlZnQpIF4gc2VsZjo6c2FmZVN0cmxlbigkcmlnaHQpKTsKCiAgICAgICAgcmV0dXJuICgkc3RhdHVzID09PSAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgSlNPTiBlcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRlcnJubyBBbiBlcnJvciBudW1iZXIgZnJvbSBqc29uX2xhc3RfZXJyb3IoKQogICAgICoKICAgICAqIEB0aHJvd3MgRG9tYWluRXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZUpzb25FcnJvcihpbnQgJGVycm5vKTogdm9pZAogICAgewogICAgICAgICRtZXNzYWdlcyA9IFsKICAgICAgICAgICAgSlNPTl9FUlJPUl9ERVBUSCA9PiAnTWF4aW11bSBzdGFjayBkZXB0aCBleGNlZWRlZCcsCiAgICAgICAgICAgIEpTT05fRVJST1JfU1RBVEVfTUlTTUFUQ0ggPT4gJ0ludmFsaWQgb3IgbWFsZm9ybWVkIEpTT04nLAogICAgICAgICAgICBKU09OX0VSUk9SX0NUUkxfQ0hBUiA9PiAnVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBmb3VuZCcsCiAgICAgICAgICAgIEpTT05fRVJST1JfU1lOVEFYID0+ICdTeW50YXggZXJyb3IsIG1hbGZvcm1lZCBKU09OJywKICAgICAgICAgICAgSlNPTl9FUlJPUl9VVEY4ID0+ICdNYWxmb3JtZWQgVVRGLTggY2hhcmFjdGVycycgLy9QSFAgPj0gNS4zLjMKICAgICAgICBdOwogICAgICAgIHRocm93IG5ldyBEb21haW5FeGNlcHRpb24oCiAgICAgICAgICAgIGlzc2V0KCRtZXNzYWdlc1skZXJybm9dKQogICAgICAgICAgICA/ICRtZXNzYWdlc1skZXJybm9dCiAgICAgICAgICAgIDogJ1Vua25vd24gSlNPTiBlcnJvcjogJyAuICRlcnJubwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiBjcnlwdG9ncmFwaGljIHN0cmluZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2FmZVN0cmxlbihzdHJpbmcgJHN0cik6IGludAogICAgewogICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSkgewogICAgICAgICAgICByZXR1cm4gXG1iX3N0cmxlbigkc3RyLCAnOGJpdCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gXHN0cmxlbigkc3RyKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYW4gRUNEU0Egc2lnbmF0dXJlIHRvIGFuIEFTTi4xIERFUiBzZXF1ZW5jZQogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkc2lnIFRoZSBFQ0RTQSBzaWduYXR1cmUgdG8gY29udmVydAogICAgICogQHJldHVybiAgc3RyaW5nIFRoZSBlbmNvZGVkIERFUiBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2lnbmF0dXJlVG9ERVIoc3RyaW5nICRzaWcpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgc2lnbmF0dXJlIGludG8gci12YWx1ZSBhbmQgcy12YWx1ZQogICAgICAgICRsZW5ndGggPSBtYXgoMSwgKGludCkgKFxzdHJsZW4oJHNpZykgLyAyKSk7CiAgICAgICAgbGlzdCgkciwgJHMpID0gXHN0cl9zcGxpdCgkc2lnLCAkbGVuZ3RoKTsKCiAgICAgICAgLy8gVHJpbSBsZWFkaW5nIHplcm9zCiAgICAgICAgJHIgPSBcbHRyaW0oJHIsICJceDAwIik7CiAgICAgICAgJHMgPSBcbHRyaW0oJHMsICJceDAwIik7CgogICAgICAgIC8vIENvbnZlcnQgci12YWx1ZSBhbmQgcy12YWx1ZSBmcm9tIHVuc2lnbmVkIGJpZy1lbmRpYW4gaW50ZWdlcnMgdG8KICAgICAgICAvLyBzaWduZWQgdHdvJ3MgY29tcGxlbWVudAogICAgICAgIGlmIChcb3JkKCRyWzBdKSA+IDB4N2YpIHsKICAgICAgICAgICAgJHIgPSAiXHgwMCIgLiAkcjsKICAgICAgICB9CiAgICAgICAgaWYgKFxvcmQoJHNbMF0pID4gMHg3ZikgewogICAgICAgICAgICAkcyA9ICJceDAwIiAuICRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY29kZURFUigKICAgICAgICAgICAgc2VsZjo6QVNOMV9TRVFVRU5DRSwKICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKHNlbGY6OkFTTjFfSU5URUdFUiwgJHIpIC4KICAgICAgICAgICAgc2VsZjo6ZW5jb2RlREVSKHNlbGY6OkFTTjFfSU5URUdFUiwgJHMpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY29kZXMgYSB2YWx1ZSBpbnRvIGEgREVSIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBpbnQgICAgICR0eXBlIERFUiB0YWcKICAgICAqIEBwYXJhbSAgIHN0cmluZyAgJHZhbHVlIHRoZSB2YWx1ZSB0byBlbmNvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmcgIHRoZSBlbmNvZGVkIG9iamVjdAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVERVIoaW50ICR0eXBlLCBzdHJpbmcgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRhZ19oZWFkZXIgPSAwOwogICAgICAgIGlmICgkdHlwZSA9PT0gc2VsZjo6QVNOMV9TRVFVRU5DRSkgewogICAgICAgICAgICAkdGFnX2hlYWRlciB8PSAweDIwOwogICAgICAgIH0KCiAgICAgICAgLy8gVHlwZQogICAgICAgICRkZXIgPSBcY2hyKCR0YWdfaGVhZGVyIHwgJHR5cGUpOwoKICAgICAgICAvLyBMZW5ndGgKICAgICAgICAkZGVyIC49IFxjaHIoXHN0cmxlbigkdmFsdWUpKTsKCiAgICAgICAgcmV0dXJuICRkZXIgLiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGVzIHNpZ25hdHVyZSBmcm9tIGEgREVSIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICRkZXIgYmluYXJ5IHNpZ25hdHVyZSBpbiBERVIgZm9ybWF0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgICRrZXlTaXplIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUga2V5CiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nICB0aGUgc2lnbmF0dXJlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21ERVIoc3RyaW5nICRkZXIsIGludCAka2V5U2l6ZSk6IHN0cmluZwogICAgewogICAgICAgIC8vIE9wZW5TU0wgcmV0dXJucyB0aGUgRUNEU0Egc2lnbmF0dXJlcyBhcyBhIGJpbmFyeSBBU04uMSBERVIgU0VRVUVOQ0UKICAgICAgICBsaXN0KCRvZmZzZXQsICRfKSA9IHNlbGY6OnJlYWRERVIoJGRlcik7CiAgICAgICAgbGlzdCgkb2Zmc2V0LCAkcikgPSBzZWxmOjpyZWFkREVSKCRkZXIsICRvZmZzZXQpOwogICAgICAgIGxpc3QoJG9mZnNldCwgJHMpID0gc2VsZjo6cmVhZERFUigkZGVyLCAkb2Zmc2V0KTsKCiAgICAgICAgLy8gQ29udmVydCByLXZhbHVlIGFuZCBzLXZhbHVlIGZyb20gc2lnbmVkIHR3bydzIGNvbXBsaW1lbnQgdG8gdW5zaWduZWQKICAgICAgICAvLyBiaWctZW5kaWFuIGludGVnZXJzCiAgICAgICAgJHIgPSBcbHRyaW0oJHIsICJceDAwIik7CiAgICAgICAgJHMgPSBcbHRyaW0oJHMsICJceDAwIik7CgogICAgICAgIC8vIFBhZCBvdXQgciBhbmQgcyBzbyB0aGF0IHRoZXkgYXJlICRrZXlTaXplIGJpdHMgbG9uZwogICAgICAgICRyID0gXHN0cl9wYWQoJHIsICRrZXlTaXplIC8gOCwgIlx4MDAiLCBTVFJfUEFEX0xFRlQpOwogICAgICAgICRzID0gXHN0cl9wYWQoJHMsICRrZXlTaXplIC8gOCwgIlx4MDAiLCBTVFJfUEFEX0xFRlQpOwoKICAgICAgICByZXR1cm4gJHIgLiAkczsKICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGJpbmFyeSBERVItZW5jb2RlZCBkYXRhIGFuZCBkZWNvZGVzIGludG8gYSBzaW5nbGUgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGVyIHRoZSBiaW5hcnkgZGF0YSBpbiBERVIgZm9ybWF0CiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgdGhlIG9mZnNldCBvZiB0aGUgZGF0YSBzdHJlYW0gY29udGFpbmluZyB0aGUgb2JqZWN0CiAgICAgKiB0byBkZWNvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5e2ludCwgc3RyaW5nfG51bGx9IHRoZSBuZXcgb2Zmc2V0IGFuZCB0aGUgZGVjb2RlZCBvYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVhZERFUihzdHJpbmcgJGRlciwgaW50ICRvZmZzZXQgPSAwKTogYXJyYXkKICAgIHsKICAgICAgICAkcG9zID0gJG9mZnNldDsKICAgICAgICAkc2l6ZSA9IFxzdHJsZW4oJGRlcik7CiAgICAgICAgJGNvbnN0cnVjdGVkID0gKFxvcmQoJGRlclskcG9zXSkgPj4gNSkgJiAweDAxOwogICAgICAgICR0eXBlID0gXG9yZCgkZGVyWyRwb3MrK10pICYgMHgxZjsKCiAgICAgICAgLy8gTGVuZ3RoCiAgICAgICAgJGxlbiA9IFxvcmQoJGRlclskcG9zKytdKTsKICAgICAgICBpZiAoJGxlbiAmIDB4ODApIHsKICAgICAgICAgICAgJG4gPSAkbGVuICYgMHgxZjsKICAgICAgICAgICAgJGxlbiA9IDA7CiAgICAgICAgICAgIHdoaWxlICgkbi0tICYmICRwb3MgPCAkc2l6ZSkgewogICAgICAgICAgICAgICAgJGxlbiA9ICgkbGVuIDw8IDgpIHwgXG9yZCgkZGVyWyRwb3MrK10pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBWYWx1ZQogICAgICAgIGlmICgkdHlwZSA9PT0gc2VsZjo6QVNOMV9CSVRfU1RSSU5HKSB7CiAgICAgICAgICAgICRwb3MrKzsgLy8gU2tpcCB0aGUgZmlyc3QgY29udGVudHMgb2N0ZXQgKHBhZGRpbmcgaW5kaWNhdG9yKQogICAgICAgICAgICAkZGF0YSA9IFxzdWJzdHIoJGRlciwgJHBvcywgJGxlbiAtIDEpOwogICAgICAgICAgICAkcG9zICs9ICRsZW4gLSAxOwogICAgICAgIH0gZWxzZWlmICghJGNvbnN0cnVjdGVkKSB7CiAgICAgICAgICAgICRkYXRhID0gXHN1YnN0cigkZGVyLCAkcG9zLCAkbGVuKTsKICAgICAgICAgICAgJHBvcyArPSAkbGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkYXRhID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHBvcywgJGRhdGFdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/JWTExceptionWithPayloadInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEZpcmViYXNlXEpXVDsKCmludGVyZmFjZSBKV1RFeGNlcHRpb25XaXRoUGF5bG9hZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEdldCB0aGUgcGF5bG9hZCB0aGF0IGNhdXNlZCB0aGlzIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIG9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiBvYmplY3Q7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHBheWxvYWQgdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG9iamVjdCAkcGF5bG9hZAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXlsb2FkKG9iamVjdCAkcGF5bG9hZCk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgT3BlblNTTEFzeW1tZXRyaWNLZXk7CnVzZSBPcGVuU1NMQ2VydGlmaWNhdGU7CnVzZSBUeXBlRXJyb3I7CgpjbGFzcyBLZXkKewogICAgLyoqIEB2YXIgc3RyaW5nfHJlc291cmNlfE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZSAqLwogICAgcHJpdmF0ZSAka2V5TWF0ZXJpYWw7CiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJGFsZ29yaXRobTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlICRrZXlNYXRlcmlhbAogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAka2V5TWF0ZXJpYWwsCiAgICAgICAgc3RyaW5nICRhbGdvcml0aG0KICAgICkgewogICAgICAgIGlmICgKICAgICAgICAgICAgIVxpc19zdHJpbmcoJGtleU1hdGVyaWFsKQogICAgICAgICAgICAmJiAhJGtleU1hdGVyaWFsIGluc3RhbmNlb2YgT3BlblNTTEFzeW1tZXRyaWNLZXkKICAgICAgICAgICAgJiYgISRrZXlNYXRlcmlhbCBpbnN0YW5jZW9mIE9wZW5TU0xDZXJ0aWZpY2F0ZQogICAgICAgICAgICAmJiAhXGlzX3Jlc291cmNlKCRrZXlNYXRlcmlhbCkKICAgICAgICApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG1hdGVyaWFsIG11c3QgYmUgYSBzdHJpbmcsIHJlc291cmNlLCBvciBPcGVuU1NMQXN5bW1ldHJpY0tleScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCRrZXlNYXRlcmlhbCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignS2V5IG1hdGVyaWFsIG11c3Qgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGFsZ29yaXRobSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQWxnb3JpdGhtIG11c3Qgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUT0RPOiBSZW1vdmUgaW4gUEhQIDguMCBpbiBmYXZvciBvZiBjbGFzcyBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBwcm9tb3Rpb24KICAgICAgICAkdGhpcy0+a2V5TWF0ZXJpYWwgPSAka2V5TWF0ZXJpYWw7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobSA9ICRhbGdvcml0aG07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGFsZ29yaXRobSB2YWxpZCBmb3IgdGhpcyBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWxnb3JpdGhtOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8cmVzb3VyY2V8T3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlNYXRlcmlhbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5rZXlNYXRlcmlhbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/firebase/php-jwt/src/SignatureInvalidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGaXJlYmFzZVxKV1Q7CgpjbGFzcyBTaWduYXR1cmVJbnZhbGlkRXhjZXB0aW9uIGV4dGVuZHMgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgpQbGVhc2UgcmVmZXIgdG8gW1VQR1JBRElOR10oVVBHUkFESU5HLm1kKSBndWlkZSBmb3IgdXBncmFkaW5nIHRvIGEgbWFqb3IgdmVyc2lvbi4KCgojIyA3LjEyLjAgLSAyMDI2LTA2LTE2CgojIyMgQWRkZWQKCi0gQWRkZWQgYFJlcXVlc3RPcHRpb25zYCBjb25zdGFudHMgZm9yIGBjdXJsYCwgYHJldHJpZXNgLCBhbmQgYHN0cmVhbV9jb250ZXh0YAoKIyMjIENoYW5nZWQKCi0gQWRqdXN0ZWQgYGd1enpsZWh0dHAvcHNyN2AgdmVyc2lvbiBjb25zdHJhaW50IHRvIGBeMi4xMmAKLSBDb25zdHJhaW4gY1VSTCB0cmFuc3BvcnQgc2hhcmluZyB0byBzYWZlIGxpYmN1cmwgRE5TIGFuZCBTU0wgc2Vzc2lvbiBzdXBwb3J0Ci0gUmVzb2x2ZSBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGNVUkwgaGFuZGxlcnM7IGxpYmN1cmwgbm8gbG9uZ2VyIHJlYWRzIHRoZSBlbnZpcm9ubWVudCBpdHNlbGYKLSBJZ25vcmUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4gdGhlIGBwcm94eWAgcmVxdWVzdCBvcHRpb24gbWFrZXMgYSBkZWNpc2lvbgotIERpc2FibGUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIFdpbmRvd3MgU0FQSXMgb3RoZXIgdGhhbiBDTEkgKGh0dHBveHkgaGFyZGVuaW5nKQotIFJlZGFjdCBwcm94eSBjcmVkZW50aWFscyBmcm9tIGNVUkwgaGFuZGxlciBlcnJvciBtZXNzYWdlcywgZm9sbG93aW5nIGBQc3I3XFV0aWxzOjpyZWRhY3RVc2VySW5mbygpYAotIE5vcm1hbGl6ZSBuby1wcm94eSBkb21haW4gYW5kIElQIGxpdGVyYWwgbWF0Y2hpbmcgYWNyb3NzIHRoZSBjVVJMIGFuZCBzdHJlYW0gaGFuZGxlcnMKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgdGhlIHJlcXVlc3QtbGV2ZWwgYGhhbmRsZXJgIG9wdGlvbiwgd2hpY2ggd2lsbCBiZSBpZ25vcmVkIGluIDguMAotIERlcHJlY2F0ZWQgcmF3IGNVUkwgcmVxdWVzdCBvcHRpb25zIG91dHNpZGUgdGhlIGJ1aWx0LWluIGNVUkwgaGFuZGxlcnMnIGFsbG93LWxpc3QKLSBEZXByZWNhdGVkIHRoZSBgQ1VSTE9QVF9QUk9YWVRZUEVgIGNVUkwgcmVxdWVzdCBvcHRpb247IHNldCB0aGUgcHJveHkgdHlwZSB2aWEgYSBzY2hlbWUtcHJlZml4ZWQgcHJveHkgVVJMCi0gRGVwcmVjYXRlZCBQSFAgc3RyZWFtIGNvbnRleHQgb3B0aW9ucyBvdXRzaWRlIHRoZSBidWlsdC1pbiBzdHJlYW0gaGFuZGxlciBhbGxvdy1saXN0Ci0gRGVwcmVjYXRlZCBwYXNzaW5nIGBudGxtYCBhcyBhIGJ1aWx0LWluIGBhdXRoYCB0eXBlCi0gRGVwcmVjYXRlZCBgVXRpbHM6OmRlc2NyaWJlVHlwZSgpYAotIERlcHJlY2F0ZWQgbm9uLWZpbml0ZSBmbG9hdHMgaW4gdGhlIGBxdWVyeWAgYW5kIGBmb3JtX3BhcmFtc2Agb3B0aW9uczsgOC4wIHJlamVjdHMgdGhlbQotIERlcHJlY2F0ZWQgbm9uLXN0cmluZyBzY2FsYXIgdmFsdWVzIGluIHRoZSBgYm9keWAgb3B0aW9uOyA4LjAgcmVqZWN0cyB0aGVtCgojIyMgRml4ZWQKCi0gRml4IGNVUkwgVExTIGFuZCBIVFRQLzIgY2FwYWJpbGl0eSBkZXRlY3Rpb24gdXNpbmcgbGliY3VybCBmZWF0dXJlIGNoZWNrcwotIEZpeCBwcm94eSBgbm9gIGxpc3QgbWF0Y2hlcyBiZWluZyByZS1wcm94aWVkIHRocm91Z2ggZW52aXJvbm1lbnQtY29uZmlndXJlZCBwcm94aWVzIGJ5IGxpYmN1cmwKLSBGaXggYG5vYCBsaXN0IGFuZCBgTk9fUFJPWFlgIG1hdGNoaW5nIHRvIHN1cHBvcnQgSVAgQ0lEUiByYW5nZXMsIG1hdGNoaW5nIGxpYmN1cmwKLSBGaXggdGhlIHN0cmVhbSBoYW5kbGVyIG5vdCBhcHBseWluZyBzY2hlbWUtbGVzcyBwcm94aWVzIGFuZCB0aGVpciBjcmVkZW50aWFscwoKCiMjIDcuMTEuMiAtIDIwMjYtMDYtMTIKCiMjIyBGaXhlZAoKLSBGaXhlZCBub24tZmluaXRlIGZsb2F0IHZhbHVlcyBlbWl0dGluZyBjb2VyY2lvbiB3YXJuaW5ncyBvbiBQSFAgOC41CgoKIyMgNy4xMS4xIC0gMjAyNi0wNi0wNwoKIyMjIEZpeGVkCgotIElnbm9yZSByZXF1ZXN0LWxldmVsIGB0cmFuc3BvcnRfc2hhcmluZ2AsIG1hdGNoaW5nIG90aGVyIHVua25vd24gcmVxdWVzdCBvcHRpb25zCgoKIyMgNy4xMS4wIC0gMjAyNi0wNi0wMgoKIyMjIEFkZGVkCgotIEFkZGVkIHN1cHBvcnQgZm9yIHByb3ZpZGluZyB0aGUgYHByb3h5YCByZXF1ZXN0IG9wdGlvbidzIGBub2AgdmFsdWUgYXMgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nCi0gQWRkZWQgdGhlIGBwcm90b2NvbHNgIHJlcXVlc3Qgb3B0aW9uIHRvIHJlc3RyaWN0IGFsbG93ZWQgVVJJIHNjaGVtZXMgZm9yIHJlcXVlc3QgdHJhbnNmZXJzCi0gQWRkZWQgYGNlcnRfdHlwZWAgYW5kIGBzc2xfa2V5X3R5cGVgIHJlcXVlc3Qgb3B0aW9ucyBmb3IgVExTIGNlcnRpZmljYXRlIGFuZCBwcml2YXRlLWtleSBmaWxlIHR5cGVzCi0gQWRkZWQgUEhQIHN0cmVhbSBoYW5kbGVyIHN1cHBvcnQgZm9yIHRoZSBgc3NsX2tleWAgcmVxdWVzdCBvcHRpb24KLSBBZGRlZCB0cmFuc3BvcnQgc2hhcmluZyB2aWEgdGhlIGB0cmFuc3BvcnRfc2hhcmluZ2AgY2xpZW50IGFuZCBjVVJMIGhhbmRsZXIgb3B0aW9ucwoKIyMjIENoYW5nZWQKCi0gQWRqdXN0ZWQgYGd1enpsZWh0dHAvcHJvbWlzZXNgIHZlcnNpb24gY29uc3RyYWludCB0byBgXjIuNWAKLSBBZGp1c3RlZCBgZ3V6emxlaHR0cC9wc3I3YCB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gYF4yLjExYAotIEFsbG93ZWQgZG9tYWlubGVzcyBgU2V0Q29va2llYCBpbnN0YW5jZXMgdG8gYmUgc3RvcmVkIHdpdGhvdXQgd2lsZGNhcmQgcmVxdWVzdCBtYXRjaGluZwotIENoYW5nZWQgbm8tcHJveHkgbWF0Y2hpbmcgdG8gcmVzcGVjdCByZXF1ZXN0IHBvcnRzIGZvciBob3N0LWFuZC1wb3J0IHJ1bGVzCi0gUHJldmVudGVkIGBDdXJsTXVsdGlIYW5kbGVyYCBkZXN0cnVjdG9ycyBmcm9tIHRocm93aW5nIGR1cmluZyBjbGVhbnVwCi0gSW1wcm92ZWQgaW52YWxpZCByZXNwb25zZSBoYW5kbGluZyBhY3Jvc3MgaGFuZGxlcnMKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgbm9uLWl0ZXJhYmxlIGBQb29sYCByZXF1ZXN0IGNvbGxlY3Rpb25zLCB3aGljaCB3aWxsIGJlIHJlamVjdGVkIGluIDguMAotIERlcHJlY2F0ZWQgbm9uLXVwcGVyY2FzZSBlYXN5IHJlcXVlc3QgbWV0aG9kczsgOC4wIHByZXNlcnZlcyBtZXRob2QgY2FzaW5nCi0gRGVwcmVjYXRlZCBub24tc3RyaW5nIGBoZWFkZXJzYCByZXF1ZXN0IG9wdGlvbiB2YWx1ZXMsIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaW4gOC4wCi0gRGVwcmVjYXRlZCBlbXB0eSBgaGVhZGVyc2AgcmVxdWVzdCBvcHRpb24gdmFsdWUgYXJyYXlzLCB3aGljaCB3aWxsIGJlIHJlamVjdGVkIGluIDguMAotIERlcHJlY2F0ZWQgZW1wdHkgYW5kIG1hbGZvcm1lZCByZXF1ZXN0IHByb3RvY29sIHZlcnNpb25zLCB3aGljaCB3aWxsIGJlIHJlamVjdGVkIGluIDguMAotIERlcHJlY2F0ZWQgY29uZmxpY3RpbmcgcmF3IGNVUkwgcmVxdWVzdCBvcHRpb25zLCBpbmNsdWRpbmcgYENVUkxPUFRfU0hBUkVgLCB3aGljaCB3aWxsIGJlIHJlamVjdGVkIGluIDguMAotIERlcHJlY2F0ZWQgc2NhbGFyLWNvZXJjZWQgYGlkbl9jb252ZXJzaW9uYCByZXF1ZXN0IG9wdGlvbiB2YWx1ZXMsIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaW4gOC4wCi0gRGVwcmVjYXRlZCBpbnZhbGlkIGRvY3VtZW50ZWQgcmVxdWVzdCBvcHRpb24gdmFsdWUgdHlwZXMsIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaW4gOC4wCi0gRGVwcmVjYXRlZCBzZWxlY3RlZCByZXF1ZXN0IG9wdGlvbnMgaWdub3JlZCBieSBpbmNvbXBhdGlibGUgYnVpbHQtaW4gaGFuZGxlcnMsIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaW4gOC4wCi0gRGVwcmVjYXRlZCBgUmVxdWVzdEV4Y2VwdGlvbjo6d3JhcEV4Y2VwdGlvbigpYCwgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGluIDguMAotIERlcHJlY2F0ZWQgYFJldHJ5TWlkZGxld2FyZTo6ZXhwb25lbnRpYWxEZWxheSgpYCwgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGluIDguMAoKCiMjIDcuMTAuNiAtIDIwMjYtMDYtMDEKCiMjIyBGaXhlZAoKLSBgQ3VybE11bHRpSGFuZGxlcmAgbm93IHJlamVjdHMgdGhlIHByb21pc2Ugd2hlbiBgQ3VybEZhY3Rvcnk6OmZpbmlzaCgpYCB0aHJvd3MsIHByZXNlcnZpbmcgc2libGluZyB0cmFuc2ZlcnMKLSBgU2V0Q29va2llYCBub3cgbm9ybWFsaXplcyB1bnBhcnNlYWJsZSBgRXhwaXJlc2AgdmFsdWVzIHRvIGBudWxsYCBpbnN0ZWFkIG9mIGBmYWxzZWAKLSBGaXggc3RyZWFtIGhhbmRsZXIgZGVjb2RlZCBgZ3ppcGAvYGRlZmxhdGVgIHRydW5jYXRpb24gYnkgZHJvcHBpbmcgaW52YWxpZCBgQ29udGVudC1MZW5ndGhgCgoKIyMgNy4xMC41IC0gMjAyNi0wNS0yNwoKIyMjIEZpeGVkCgotIERlZmVyIGNVUkwgbXVsdGkgY2FuY2VsbGF0aW9uIGNsZWFudXAgdW50aWwgYWZ0ZXIgcHJvZ3Jlc3MgY2FsbGJhY2tzIHJldHVybgotIENsYXNzaWZ5IGFkZGl0aW9uYWwgc3RyZWFtIGhhbmRsZXIgY29ubmVjdGlvbiBmYWlsdXJlcyBhcyBgQ29ubmVjdEV4Y2VwdGlvbmAKCgojIyA3LjEwLjQgLSAyMDI2LTA1LTIyCgojIyMgRml4ZWQKCi0gRml4IElQdjYgbGl0ZXJhbCBtYXRjaGluZyBpbiBuby1wcm94eSBydWxlcwotIEhhbmRsZSBjVVJMIG11bHRpIGNvbXBsZXRpb24gbWVzc2FnZXMgd2l0aG91dCBoYW5kbGVzIGFmdGVyIGNhbmNlbGxlZCB0cmFuc2ZlcnMKLSBGaXggbWFnaWMgY2xpZW50IHJlcXVlc3QgbWV0aG9kcyBzdWNoIGFzIGBvcHRpb25zKClgIHRvIHVwcGVyY2FzZSBpbmZlcnJlZCBIVFRQIG1ldGhvZHMKCgojIyA3LjEwLjMgLSAyMDI2LTA1LTIwCgojIyMgRml4ZWQKCi0gRmFpbCBjbGVhcmx5IHdoZW4gYW4gSFRUUCByZXNwb25zZSBoZWFkZXIgbGluZSBpcyBpbnZhbGlkCi0gUmVtb3ZlIG1pZGRsZXdhcmUgYnkgbmFtZSB3aGVuIHRoZSBuYW1lIGlzIGFsc28gYSBjYWxsYWJsZSBzdHJpbmcKLSBUcmVhdCBlbXB0eSByZXF1ZXN0IHByb3RvY29sIHZlcnNpb25zIGFzIEhUVFAvMS4xCgoKIyMgNy4xMC4yIC0gMjAyNi0wNS0yMAoKIyMjIEZpeGVkCgotIE5vcm1hbGl6ZSBIVFRQIHZlcnNpb24gcmVxdWVzdCBvcHRpb25zIGJlZm9yZSBhcHBseWluZyB0aGVtIHRvIFBTUi03IHJlcXVlc3RzCi0gVXNlIHN0cmluZyB2YWx1ZXMgZm9yIGhlYWRlcnMgZ2VuZXJhdGVkIGJ5IHJlcXVlc3QgcHJlcGFyYXRpb24gYW5kIHJlc3BvbnNlIGRlY29kaW5nCgoKIyMgNy4xMC4xIC0gMjAyNi0wNS0xOQoKIyMjIEZpeGVkCgotIEZhaWwgY2xlYXJseSB3aGVuIGNVUkwgb3B0aW9ucyBjYW5ub3QgYmUgYXBwbGllZAotIEZhaWwgY2xlYXJseSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZSBvcHRpb24gaXMgbWFsZm9ybWVkCi0gRmFpbCBjbGVhcmx5IHdoZW4gSlNPTiBkZWNvZGUgZGVwdGggaXMgaW52YWxpZAotIEZhaWwgY2xlYXJseSB3aGVuIHNlc3Npb24gY29va2llIGRhdGEgaXMgbWFsZm9ybWVkCi0gRmFpbCBjbGVhcmx5IHdoZW4gdGhlIHN0cmVhbSBwcm9ncmVzcyBvcHRpb24gaXMgbm90IGNhbGxhYmxlCi0gUHJldmVudCByZXNwb25zZSBjcmVhdGlvbiBmYWlsdXJlcyBmcm9tIGV4cG9zaW5nIHN0YWxlIGNVUkwgcmVzcG9uc2VzCgoKIyMgNy4xMC4wIC0gMjAyNS0wOC0yMwoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIFBIUCA4LjUKCiMjIyBDaGFuZ2VkCgotIEFkanVzdGVkIGBndXp6bGVodHRwL3Byb21pc2VzYCB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gYF4yLjNgCi0gQWRqdXN0ZWQgYGd1enpsZWh0dHAvcHNyN2AgdmVyc2lvbiBjb25zdHJhaW50IHRvIGBeMi44YAoKCiMjIDcuOS4zIC0gMjAyNS0wMy0yNwoKIyMjIENoYW5nZWQKCi0gUmVtb3ZlIGV4cGxpY2l0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlciBmb3IgR0VUIHJlcXVlc3RzCi0gSW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggYmFkIHNlcnZlcnMgZm9yIGJvb2xlYW4gY29va2llIHZhbHVlcwoKCiMjIDcuOS4yIC0gMjAyNC0wNy0yNAoKIyMjIEZpeGVkCgotIEFkanVzdGVkIGhhbmRsZXIgc2VsZWN0aW9uIHRvIHVzZSBjVVJMIGlmIGl0cyB2ZXJzaW9uIGlzIDcuMjEuMiBvciBoaWdoZXIsIHJhdGhlciB0aGFuIDcuMzQuMAoKCiMjIDcuOS4xIC0gMjAyNC0wNy0xOQoKIyMjIEZpeGVkCgotIEZpeCBUTFMgMS4zIGNoZWNrIGZvciBIVFRQLzIgcmVxdWVzdHMKCgojIyA3LjkuMCAtIDIwMjQtMDctMTgKCiMjIyBDaGFuZ2VkCgotIEltcHJvdmUgcHJvdG9jb2wgdmVyc2lvbiBjaGVja3MgdG8gcHJvdmlkZSBmZWVkYmFjayBhcm91bmQgdW5zdXBwb3J0ZWQgcHJvdG9jb2xzCi0gT25seSBzZWxlY3QgdGhlIGNVUkwgaGFuZGxlciBieSBkZWZhdWx0IGlmIDcuMzQuMCBvciBoaWdoZXIgaXMgbGlua2VkCi0gSW1wcm92ZWQgYEN1cmxNdWx0aUhhbmRsZXJgIHRvIGF2b2lkIGJ1c3kgd2FpdCBpZiBwb3NzaWJsZQotIERyb3BwZWQgc3VwcG9ydCBmb3IgRU9MIGBndXp6bGVodHRwL3BzcjdgIHYxCi0gSW1wcm92ZWQgVVJJIHVzZXIgaW5mbyByZWRhY3Rpb24gaW4gZXJyb3JzCgojIyA3LjguMiAtIDIwMjQtMDctMTgKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBQSFAgOC40CgoKIyMgNy44LjEgLSAyMDIzLTEyLTAzCgojIyMgQ2hhbmdlZAoKLSBVcGRhdGVkIGxpbmtzIGluIGRvY3MgdG8gdGhlaXIgY2Fub25pY2FsIHZlcnNpb25zCi0gUmVwbGFjZWQgYGNhbGxfdXNlcl9mdW5jKmAgd2l0aCBuYXRpdmUgY2FsbHMKCgojIyA3LjguMCAtIDIwMjMtMDgtMjcKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBQSFAgOC4zCi0gQWRkZWQgYXV0b21hdGljIGNsb3Npbmcgb2YgaGFuZGxlcyBvbiBgQ3VybEZhY3RvcnlgIG9iamVjdCBkZXN0cnVjdGlvbgoKCiMjIDcuNy4xIC0gMjAyMy0wOC0yNwoKIyMjIENoYW5nZWQKCi0gUmVtb3ZlIHRoZSBuZWVkIGZvciBgQWxsb3dEeW5hbWljUHJvcGVydGllc2AgaW4gYEN1cmxNdWx0aUhhbmRsZXJgCgoKIyMgNy43LjAgLSAyMDIzLTA1LTIxCgojIyMgQWRkZWQKCi0gU3VwcG9ydCBgZ3V6emxlaHR0cC9wcm9taXNlc2AgdjIKCgojIyA3LjYuMSAtIDIwMjMtMDUtMTUKCiMjIyBGaXhlZAoKLSBGaXggYFNldENvb2tpZTo6ZnJvbVN0cmluZ2AgTWF4QWdlIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHNraXAgaW52YWxpZCBNYXhBZ2UgdmFsdWVzCgoKIyMgNy42LjAgLSAyMDIzLTA1LTE0CgojIyMgQWRkZWQKCi0gU3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgbWluaW11bSBUTFMgdmVyc2lvbiBpbiBhIHVuaWZpZWQgd2F5Ci0gQXBwbHkgb24gcmVxdWVzdCB0aGUgdmVyc2lvbiBzZXQgaW4gb3B0aW9ucyBwYXJhbWV0ZXJzCgoKIyMgNy41LjIgLSAyMDIzLTA1LTE0CgojIyMgRml4ZWQKCi0gRml4ZWQgc2V0IGNvb2tpZSBjb25zdHJ1Y3RvciB2YWxpZGF0aW9uCi0gRml4ZWQgaGFuZGxpbmcgb2YgZmlsZXMgd2l0aCBgJzAnYCBib2R5CgojIyMgQ2hhbmdlZAoKLSBDb3JyZWN0ZWQgZG9jcyBhbmQgZGVmYXVsdCBjb25uZWN0IHRpbWVvdXQgdmFsdWUgdG8gMzAwIHNlY29uZHMKCgojIyA3LjUuMSAtIDIwMjMtMDQtMTcKCiMjIyBGaXhlZAoKLSBGaXhlZCBgTk9fUFJPWFlgIHNldHRpbmdzIHNvIHRoYXQgc2V0dGluZyB0aGUgYHByb3h5YCBvcHRpb24gdG8gYG5vYCBvdmVycmlkZXMgdGhlIGVudiB2YXJpYWJsZQoKIyMjIENoYW5nZWQKCi0gQWRqdXN0ZWQgYGd1enpsZWh0dHAvcHNyN2AgdmVyc2lvbiBjb25zdHJhaW50IHRvIGBeMS45LjEgfHwgXjIuNC41YAoKCiMjIDcuNS4wIC0gMjAyMi0wOC0yOAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgUEhQIDguMgotIEFkZCByZXF1ZXN0IHRvIGRlbGF5IGNsb3N1cmUgcGFyYW1zCgoKIyMgNy40LjUgLSAyMDIyLTA2LTIwCgojIyMgRml4ZWQKCiogRml4IGNoYW5nZSBpbiBwb3J0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgY2hhbmdlIGluIG9yaWdpbgoqIEZpeCBgQ1VSTE9QVF9IVFRQQVVUSGAgb3B0aW9uIG5vdCBjbGVhcmVkIG9uIGNoYW5nZSBvZiBvcmlnaW4KCgojIyA3LjQuNCAtIDIwMjItMDYtMDkKCiMjIyBGaXhlZAoKKiBGaXggZmFpbHVyZSB0byBzdHJpcCBBdXRob3JpemF0aW9uIGhlYWRlciBvbiBIVFRQIGRvd25ncmFkZQoqIEZpeCBmYWlsdXJlIHRvIHN0cmlwIHRoZSBDb29raWUgaGVhZGVyIG9uIGNoYW5nZSBpbiBob3N0IG9yIEhUVFAgZG93bmdyYWRlCgoKIyMgNy40LjMgLSAyMDIyLTA1LTI1CgojIyMgRml4ZWQKCiogRml4IGNyb3NzLWRvbWFpbiBjb29raWUgbGVha2FnZQoKCiMjIDcuNC4yIC0gMjAyMi0wMy0yMAoKIyMjIEZpeGVkCgotIFJlbW92ZSBjdXJsIGF1dGggb24gY3Jvc3MtZG9tYWluIHJlZGlyZWN0cyB0byBhbGlnbiB3aXRoIHRoZSBBdXRob3JpemF0aW9uIEhUVFAgaGVhZGVyCi0gUmVqZWN0IG5vbi1IVFRQIHNjaGVtZXMgaW4gU3RyZWFtSGFuZGxlcgotIFNldCBhIGRlZmF1bHQgc3NsLnBlZXJfbmFtZSBjb250ZXh0IGluIFN0cmVhbUhhbmRsZXIgdG8gYWxsb3cgYGZvcmNlX2lwX3Jlc29sdmVgCgoKIyMgNy40LjEgLSAyMDIxLTEyLTA2CgojIyMgQ2hhbmdlZAoKLSBSZXBsYWNlZCBpbXBsaWNpdCBVUkkgdG8gc3RyaW5nIGNvZXJjaW9uIFsjMjk0Nl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTQ2KQotIEFsbG93IGBzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0c2AgdmVyc2lvbiAzIFsjMjk2MV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTYxKQoKIyMjIEZpeGVkCgotIE9ubHkgY2xvc2UgY3VybCBoYW5kbGUgaWYgaXQncyBkb25lIFsjMjk1MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTUwKQoKCiMjIDcuNC4wIC0gMjAyMS0xMC0xOAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgUEhQIDguMSBbIzI5MjldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkyOSksIFsjMjkzOV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTM5KQotIFN1cHBvcnQgYHBzci9sb2dgIHZlcnNpb24gMiBhbmQgMyBbIzI5NDNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjk0MykKCiMjIyBGaXhlZAoKLSBNYWtlIHN1cmUgd2UgYWx3YXlzIGNhbGwgYHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpYCBbIzI5MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkxNSkKLSBGaXggcHJvZ3Jlc3MgcGFyYW1ldGVyIHR5cGUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBjVVJMIGFuZCBzdHJlYW0gaGFuZGxlcnMgWyMyOTM2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5MzYpCi0gVGhyb3cgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgd2hlbiBhbiBpbmNvcnJlY3QgYGhlYWRlcnNgIGFycmF5IGlzIHByb3ZpZGVkIFsjMjkxNl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTE2KSwgWyMyOTQyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5NDIpCgojIyMgQ2hhbmdlZAoKLSBCZSBtb3JlIHN0cmljdCB3aXRoIHR5cGVzIFsjMjkxNF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTE0KSwgWyMyOTE3XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI5MTcpLCBbIzI5MTldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjkxOSksIFsjMjk0NV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yOTQ1KQoKCiMjIDcuMy4wIC0gMjAyMS0wMy0yMwoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIERFUiBhbmQgUDEyIGNlcnRpZmljYXRlcyBbIzI0MTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQxMykKLSBTdXBwb3J0IHRoZSBjVVJMIChodHRwOi8vKSBzY2hlbWUgZm9yIFN0cmVhbUhhbmRsZXIgcHJveGllcyBbIzI4NTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjg1MCkKLSBTdXBwb3J0IGZvciBgZ3V6emxlaHR0cC9wc3I3Ol4yLjBgIFsjMjg3OF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yODc4KQoKIyMjIEZpeGVkCgotIEhhbmRsZSBleGNlcHRpb25zIG9uIGludmFsaWQgaGVhZGVyIGNvbnNpc3RlbnRseSBiZXR3ZWVuIFBIUCB2ZXJzaW9ucyBhbmQgaGFuZGxlcnMgWyMyODcyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI4NzIpCgoKIyMgNy4yLjAgLSAyMDIwLTEwLTEwCgojIyMgQWRkZWQKCi0gU3VwcG9ydCBmb3IgUEhQIDggWyMyNzEyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI3MTIpLCBbIzI3MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjcxNSksIFsjMjc4OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNzg5KQotIFN1cHBvcnQgcGFzc2luZyBhIGJvZHkgc3VtbWFyaXplciB0byB0aGUgaHR0cCBlcnJvcnMgbWlkZGxld2FyZSBbIzI3OTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjc5NSkKCiMjIyBGaXhlZAoKLSBIYW5kbGUgZXhjZXB0aW9ucyBkdXJpbmcgcmVzcG9uc2UgY3JlYXRpb24gWyMyNTkxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1OTEpCi0gRml4IENVUkxPUFRfRU5DT0RJTkcgbm90IHRvIGJlIG92ZXJ3cml0dGVuIFsjMjU5NV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTk1KQotIE1ha2Ugc3VyZSB0aGUgUmVxdWVzdCBhbHdheXMgaGFzIGEgYm9keSBvYmplY3QgWyMyODA0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI4MDQpCgojIyMgQ2hhbmdlZAoKLSBUaGUgYFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb25gIGhhcyBhIHJlc3BvbnNlIFsjMjY2MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNjYwKQotIEF2b2lkICJmdW5jdGlvbnMiIGZyb20gZGVwZW5kZW5jaWVzIFsjMjcxMl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNzEyKQoKIyMjIERlcHJlY2F0ZWQKCi0gVXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgR1VaWkxFX0NVUkxfU0VMRUNUX1RJTUVPVVQgWyMyNzg2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI3ODYpCgoKIyMgNy4xLjEgLSAyMDIwLTA5LTMwCgojIyMgRml4ZWQKCi0gSW5jb3JyZWN0IEVPRiBkZXRlY3Rpb24gZm9yIHJlc3BvbnNlIGJvZHkgc3RyZWFtcyBvbiBXaW5kb3dzLgoKIyMjIENoYW5nZWQKCi0gV2UgZG9udCBjb25uZWN0IGN1cmwgYHNpbmtgIG9uIEhFQUQgcmVxdWVzdHMuCi0gUmVtb3ZlZCBzb21lIFBIUCA1IHdvcmthcm91bmRzCgoKIyMgNy4xLjAgLSAyMDIwLTA5LTIyCgojIyMgQWRkZWQKCi0gYEd1enpsZUh0dHBcTWVzc2FnZUZvcm1hdHRlckludGVyZmFjZWAKCiMjIyBGaXhlZAoKLSBGaXhlZCBpc3N1ZSB0aGF0IGNhdXNlZCBjb29raWVzIHdpdGggbm8gdmFsdWUgbm90IHRvIGJlIHN0b3JlZC4KLSBPbiByZWRpcmVjdHMsIHdlIGFsbG93IGFsbCBzYWZlIG1ldGhvZHMgbGlrZSBHRVQsIEhFQUQgYW5kIE9QVElPTlMuCi0gRml4ZWQgbG9nZ2luZyBvbiBlbXB0eSByZXNwb25zZXMuCi0gTWFrZSBzdXJlIE1lc3NhZ2VGb3JtYXR0ZXI6OmZvcm1hdCByZXR1cm5zIHN0cmluZwoKIyMjIERlcHJlY2F0ZWQKCi0gQWxsIGZ1bmN0aW9ucyBpbiBgR3V6emxlSHR0cGAgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHN0YXRpYyBtZXRob2RzIG9uIGBVdGlsc2AgaW5zdGVhZC4KLSBgQ2xpZW50SW50ZXJmYWNlOjpnZXRDb25maWcoKWAKLSBgQ2xpZW50OjpnZXRDb25maWcoKWAKLSBgQ2xpZW50OjpfX2NhbGwoKWAKLSBgVXRpbHM6OmRlZmF1bHRDYUJ1bmRsZSgpYAotIGBDdXJsRmFjdG9yeTo6TE9XX0NVUkxfVkVSU0lPTl9OVU1CRVJgCgoKIyMgNy4wLjEgLSAyMDIwLTA2LTI3CgoqIEZpeCBtdWx0aXBseSBkZWZpbmVkIGZ1bmN0aW9ucyBmYXRhbCBlcnJvciBbIzI2OTldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjY5OSkKCgojIyA3LjAuMCAtIDIwMjAtMDYtMjcKCk5vIGNoYW5nZXMgc2luY2UgNy4wLjAtcmMxLgoKCiMjIDcuMC4wLXJjMSAtIDIwMjAtMDYtMTUKCiMjIyBDaGFuZ2VkCgoqIFVzZSBlcnJvciBsZXZlbCBmb3IgbG9nZ2luZyBlcnJvcnMgaW4gTWlkZGxld2FyZSBbIzI2MjldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjYyOSkKKiBEaXNhYmxlZCBJRE4gc3VwcG9ydCBieSBkZWZhdWx0IGFuZCByZXF1aXJlIGV4dC1pbnRsIHRvIHVzZSBpdCBbIzI2NzVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjY3NSkKCgojIyA3LjAuMC1iZXRhMiAtIDIwMjAtMDUtMjUKCiMjIyBBZGRlZAoKKiBVc2luZyBgVXRpbHNgIGNsYXNzIGluc3RlYWQgb2YgZnVuY3Rpb25zIGluIHRoZSBgR3V6emxlSHR0cGAgbmFtZXNwYWNlLiBbIzI1NDZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU0NikKKiBgQ2xpZW50SW50ZXJmYWNlOjpNQUpPUl9WRVJTSU9OYCBbIzI1ODNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU4MykKCiMjIyBDaGFuZ2VkCgoqIEF2b2lkIHRoZSBgZ2V0ZW52YCBmdW5jdGlvbiB3aGVuIHVuc2FmZSBbIzI1MzFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjUzMSkKKiBBZGRlZCByZWFsIGNsaWVudCBtZXRob2RzIFsjMjUyOV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTI5KQoqIEF2b2lkIGZ1bmN0aW9ucyBkdWUgdG8gZ2xvYmFsIGluc3RhbGwgY29uZmxpY3RzIFsjMjU0Nl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTQ2KQoqIFVzZSBTeW1mb255IGludGwtaWRuIHBvbHlmaWxsIFsjMjU1MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNTUwKQoqIEFkZGluZyBtZXRob2RzIGZvciBIVFRQIHZlcmJzIGxpa2UgYENsaWVudDo6Z2V0KClgLCBgQ2xpZW50OjpoZWFkKClgLCBgQ2xpZW50OjpwYXRjaCgpYCBldGMgWyMyNTI5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI1MjkpCiogYENvbm5lY3RFeGNlcHRpb25gIGV4dGVuZHMgYFRyYW5zZmVyRXhjZXB0aW9uYCBbIzI1NDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjU0MSkKKiBVcGRhdGVkIHRoZSBkZWZhdWx0IFVzZXIgQWdlbnQgdG8gIkd1enpsZUh0dHAvNyIgWyMyNjU0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI2NTQpCgojIyMgRml4ZWQKCiogVmFyaW91cyBpbnRsIGljdSBpc3N1ZXMgWyMyNjI2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI2MjYpCgojIyMgUmVtb3ZlZAoKKiBQb29sIG9wdGlvbiBgcG9vbF9zaXplYCBbIzI1MjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjUyOCkKCgojIyA3LjAuMC1iZXRhMSAtIDIwMTktMTItMzAKClRoZSBkaWZmIG1pZ2h0IGxvb2sgdmVyeSBiaWcgYnV0IDk1JSBvZiBHdXp6bGUgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIHVwZ3JhZGUgd2l0aG91dCBtb2RpZmljYXRpb24uClBsZWFzZSBzZWUgW3RoZSB1cGdyYWRlIGRvY3VtZW50XShVUEdSQURJTkcubWQpIHRoYXQgZGVzY3JpYmVzIGFsbCBCQyBicmVha2luZyBjaGFuZ2VzLgoKIyMjIEFkZGVkCgoqIEltcGxlbWVudCBQU1ItMTggYW5kIGRyb3BwZWQgUEhQIDUgc3VwcG9ydCBbIzI0MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQyMSkgWyMyNDc0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NzQpCiogUEhQIDcgdHlwZXMgWyMyNDQyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NDIpIFsjMjQ0OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDQ5KSBbIzI0NjZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ2NikgWyMyNDk3XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0OTcpIFsjMjQ5OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDk5KQoqIElETiBzdXBwb3J0IGZvciByZWRpcmVjdHMgWzI0MjRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQyNCkKCiMjIyBDaGFuZ2VkCgoqIERvbnQgYWxsb3cgcGFzc2luZyBudWxsIGFzIHRoaXJkIGFyZ3VtZW50IHRvIGBCYWRSZXNwb25zZUV4Y2VwdGlvbjo6X19jb25zdHJ1Y3QoKWAgWyMyNDI3XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0MjcpCiogVXNlIFNBUEkgY29uc3RhbnQgaW5zdGVhZCBvZiBtZXRob2QgY2FsbCBbIzI0NTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ1MCkKKiBVc2UgbmF0aXZlIGZ1bmN0aW9uIGludm9jYXRpb24gWyMyNDQ0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NDQpCiogQmV0dGVyIGRlZmF1bHRzIGZvciBQSFAgaW5zdGFsbGF0aW9ucyB3aXRoIG9sZCBJQ1UgbGliIFsyNDU0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NTQpCiogQWRkZWQgdmlzaWJpbGl0eSB0byBhbGwgY29uc3RhbnRzIFsjMjQ2Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDYyKQoqIERvbnQgYWxsb3cgcGFzc2luZyBgbnVsbGAgYXMgVVJJIHRvIGBDbGllbnQ6OnJlcXVlc3QoKWAgYW5kIGBDbGllbnQ6OnJlcXVlc3RBc3luYygpYCBbIzI0NjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ2MSkKKiBXaWRlbiB0aGUgZXhjZXB0aW9uIGFyZ3VtZW50IHRvIHRocm93YWJsZSBbIzI0OTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ5NSkKCiMjIyBGaXhlZAoKKiBMb2dnaW5nIHdoZW4gUHJvbWlzZSByZWplY3RlZCB3aXRoIGEgc3RyaW5nIFsjMjMxMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMzExKQoKIyMjIFJlbW92ZWQKCiogQ2xhc3MgYFNlZWtFeGNlcHRpb25gIFsjMjE2Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTYyKQoqIGBSZXF1ZXN0RXhjZXB0aW9uOjpnZXRSZXNwb25zZUJvZHlTdW1tYXJ5KClgIFsjMjQyNV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDI1KQoqIGBDb29raWVKYXI6OmdldENvb2tpZVZhbHVlKClgIFsjMjQzM10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDMzKQoqIGB1cmlfdGVtcGxhdGUoKWAgYW5kIGBVcmlUZW1wbGF0ZWAgWyMyNDQwXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0NDApCiogUmVxdWVzdCBvcHRpb25zIGBzYXZlX3RvYCBhbmQgYGV4Y2VwdGlvbnNgIFsjMjQ2NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDY0KQoKCiMjIDYuNS4yIC0gMjAxOS0xMi0yMwoKKiBpZG5fdG9fYXNjaWkoKSBmaXggZm9yIG9sZCBQSFAgdmVyc2lvbnMgWyMyNDg5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzI0ODkpCgoKIyMgNi41LjEgLSAyMDE5LTEyLTIxCgoqIEJldHRlciBkZWZhdWx0cyBmb3IgUEhQIGluc3RhbGxhdGlvbnMgd2l0aCBvbGQgSUNVIGxpYiBbIzI0NTRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjQ1NCkKKiBJRE4gc3VwcG9ydCBmb3IgcmVkaXJlY3RzIFsjMjQyNF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yNDI0KQoKCiMjIDYuNS4wIC0gMjAxOS0xMi0wNwoKKiBJbXByb3ZlbWVudDogQWRkZWQgc3VwcG9ydCBmb3IgcmVzZXQgaW50ZXJuYWwgcXVldWUgaW4gTW9ja0hhbmRsZXIuIFsjMjE0M10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTQzKQoqIEltcHJvdmVtZW50OiBBZGRlZCBzdXBwb3J0IHRvIHBhc3MgYXJiaXRyYXJ5IG9wdGlvbnMgdG8gYGN1cmxfbXVsdGlfaW5pdGAuIFsjMjI4N10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMjg3KQoqIEZpeDogR3JhY2VmdWxseSBoYW5kbGUgcGFzc2luZyBgbnVsbGAgdG8gdGhlIGBoZWFkZXJgIG9wdGlvbi4gWyMyMTMyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIxMzIpCiogRml4OiBgUmV0cnlNaWRkbGV3YXJlYCBkaWQgbm90IGRvIGV4cG9uZW50aWFsIGRlbGF5IGJldHdlZW4gcmV0aXJlcyBkdWUgdW5pdCBtaXNtYXRjaC4gWyMyMTMyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIxMzIpCiogRml4OiBQcmV2ZW50IHVuZGVmaW5lZCBvZmZzZXQgd2hlbiB1c2luZyBhcnJheSBmb3Igc3NsX2tleSBvcHRpb25zLiBbIzIzNDhdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjM0OCkKKiBEZXByZWNhdGVkIGBDbGllbnRJbnRlcmZhY2U6OlZFUlNJT05gCgoKIyMgNi40LjEgLSAyMDE5LTEwLTIzCgoqIE5vIGBndXp6bGUucGhhcmAgd2FzIGNyZWF0ZWQgaW4gNi40LjAgZHVlIGV4cGlyZWQgQVBJIHRva2VuLiBUaGlzIHJlbGVhc2Ugd2lsbCBmaXggdGhhdAoqIEFkZGVkIGBwYXJlbnQ6Ol9fY29uc3RydWN0KClgIHRvIGBGaWxlQ29va2llSmFyYCBhbmQgYFNlc3Npb25Db29raWVKYXJgCgoKIyMgNi40LjAgLSAyMDE5LTEwLTIzCgoqIEltcHJvdmVtZW50OiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlcyB3aGVuIHVzaW5nIGN1cmwgPCA3LjIxLjIgWyMyMTA4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIxMDgpCiogRml4OiBUZXN0IGlmIHJlc3BvbnNlIGlzIHJlYWRhYmxlIGJlZm9yZSByZXR1cm5pbmcgYSBzdW1tYXJ5IGluIGBSZXF1ZXN0RXhjZXB0aW9uOjpnZXRSZXNwb25zZUJvZHlTdW1tYXJ5KClgIFsjMjA4MV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMDgxKQoqIEZpeDogQWRkIHN1cHBvcnQgZm9yIEdVWlpMRV9DVVJMX1NFTEVDVF9USU1FT1VUIGVudmlyb25tZW50IHZhcmlhYmxlIFsjMjE2MV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMTYxKQoqIEltcHJvdmVtZW50OiBBZGRlZCBgR3V6emxlSHR0cFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uYCBbIzIxNjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjE2MykKKiBJbXByb3ZlbWVudDogQWRkZWQgYEd1enpsZUh0dHBcX2N1cnJlbnRfdGltZSgpYCB0byB1c2UgYGhydGltZSgpYCBpZiB0aGF0IGZ1bmN0aW9uIGV4aXN0cy4gWyMyMjQyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIyNDIpCiogSW1wcm92ZW1lbnQ6IEFkZGVkIGN1cmwncyBgYXBwY29ubmVjdF90aW1lYCBpbiBgVHJhbnNmZXJTdGF0c2AgWyMyMjg0XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIyODQpCiogSW1wcm92ZW1lbnQ6IE1ha2UgR3V6emxlRXhjZXB0aW9uIGV4dGVuZCBUaHJvd2FibGUgd2hlcmV2ZXIgaXQncyBhdmFpbGFibGUgWyMyMjczXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIyNzMpCiogRml4OiBQcmV2ZW50IGNvbmN1cnJlbnQgd3JpdGVzIHRvIGZpbGUgd2hlbiBzYXZpbmcgYENvb2tpZUphcmAgWyMyMzM1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIzMzUpCiogSW1wcm92ZW1lbnQ6IFVwZGF0ZSBgTW9ja0hhbmRsZXJgIHNvIHdlIGNhbiB0ZXN0IHRyYW5zZmVyIHRpbWUgWyMyMzYyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIzNjIpCgoKIyMgNi4zLjMgLSAyMDE4LTA0LTIyCgoqIEZpeDogRGVmYXVsdCBoZWFkZXJzIHdoZW4gZGVjb2RlX2NvbnRlbnQgaXMgc3BlY2lmaWVkCgoKIyMgNi4zLjIgLSAyMDE4LTAzLTI2CgoqIEZpeDogUmVsZWFzZSBwcm9jZXNzCgoKIyMgNi4zLjEgLSAyMDE4LTAzLTI2CgoqIEJ1ZyBmaXg6IFBhcnNpbmcgMCBlcG9jaCBleHBpcnkgdGltZXMgaW4gY29va2llcyBbIzIwMTRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjAxNCkKKiBJbXByb3ZlbWVudDogQmV0dGVyIENvbm5lY3RFeGNlcHRpb24gZGV0ZWN0aW9uIFsjMjAxMl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMDEyKQoqIEJ1ZyBmaXg6IE1hbGZvcm1lZCBkb21haW4gdGhhdCBjb250YWlucyBhICIvIiBbIzE5OTldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTk5OSkKKiBCdWcgZml4OiBVbmRlZmluZWQgb2Zmc2V0IHdoZW4gYSBjb29raWUgaGFzIG5vIGZpcnN0IGtleS12YWx1ZSBwYWlyIFsjMTk5OF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTk4KQoqIEltcHJvdmVtZW50OiBTdXBwb3J0IFBIUFVuaXQgNiBbIzE5NTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTk1MykKKiBCdWcgZml4OiBTdXBwb3J0IGVtcHR5IGhlYWRlcnMgWyMxOTE1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5MTUpCiogQnVnIGZpeDogSWdub3JlIGNhc2UgZHVyaW5nIGhlYWRlciBtb2RpZmljYXRpb25zIFsjMTkxNl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTE2KQoKKyBNaW5vciBjb2RlIGNsZWFudXBzLCBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCBjbGFyaWZpY2F0aW9ucy4KCgojIyA2LjMuMCAtIDIwMTctMDYtMjIKCiogRmVhdHVyZTogZm9yY2UgSVAgcmVzb2x1dGlvbiAoaXB2NCBvciBpcHY2KSBbIzE2MDhdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTYwOCksIFsjMTY1OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjU5KQoqIEltcHJvdmVtZW50OiBEb24ndCBpbmNsdWRlIHN1bW1hcnkgaW4gZXhjZXB0aW9uIG1lc3NhZ2Ugd2hlbiBib2R5IGlzIGVtcHR5IFsjMTYyMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjIxKQoqIEltcHJvdmVtZW50OiBIYW5kbGUgYG9uX2hlYWRlcnNgIG9wdGlvbiBpbiBNb2NrSGFuZGxlciBbIzE1ODBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTU4MCkKKiBJbXByb3ZlbWVudDogQWRkZWQgU1VTRSBMaW51eCBDQSBwYXRoIFsjMTYwOV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzE2MDkpCiogSW1wcm92ZW1lbnQ6IFVzZSBjbGFzcyByZWZlcmVuY2UgZm9yIGdldHRpbmcgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGluc3RlYWQgb2YgdXNpbmcgaGFyZGNvZGVkIHN0cmluZ3MgWyMxNjQxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2NDEpCiogRmVhdHVyZTogQWRkZWQgYHJlYWRfdGltZW91dGAgb3B0aW9uIFsjMTYxMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjExKQoqIEJ1ZyBmaXg6IFBIUCA3LnggZml4ZXMgWyMxNjg1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2ODUpLCBbIzE2ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY4NiksIFsjMTgxMV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xODExKQoqIERlcHJlY2F0aW9uOiBCYWRSZXNwb25zZUV4Y2VwdGlvbiBpbnN0YW50aWF0aW9uIHdpdGhvdXQgYSByZXNwb25zZSBbIzE2NDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY0MikKKiBGZWF0dXJlOiBBZGRlZCBOVExNIGF1dGggWyMxNTY5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE1NjkpCiogRmVhdHVyZTogVHJhY2sgcmVkaXJlY3QgSFRUUCBzdGF0dXMgY29kZXMgWyMxNzExXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE3MTEpCiogSW1wcm92ZW1lbnQ6IENoZWNrIGhhbmRsZXIgdHlwZSBkdXJpbmcgY29uc3RydWN0aW9uIFsjMTc0NV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNzQ1KQoqIEltcHJvdmVtZW50OiBBbHdheXMgaW5jbHVkZSB0aGUgQ29udGVudC1MZW5ndGggaWYgdGhlcmUncyBhIGJvZHkgWyMxNzIxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE3MjEpCiogRmVhdHVyZTogQWRkZWQgY29udmVuaWVuY2UgbWV0aG9kIHRvIGFjY2VzcyBhIGNvb2tpZSBieSBuYW1lIFsjMTMxOF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzE4KQoqIEJ1ZyBmaXg6IEZpbGwgYENVUkxPUFRfQ0FQQVRIYCBhbmQgYENVUkxPUFRfQ0FJTkZPYCBwcm9wZXJseSBbIzE2ODRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY4NCkKKiBJbXByb3ZlbWVudDogIAlVc2UgYFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcmAgZnVuY3Rpb24gaW5zdGVhZCBvZiBvYmplY3QgaW5pdCBbIzE4MjddKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTgyNykKCisgTWlub3IgY29kZSBjbGVhbnVwcywgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCgoKIyMgNi4yLjMgLSAyMDE3LTAyLTI4CgoqIEZpeCBkZXByZWNhdGlvbnMgd2l0aCBndXp6bGUvcHNyNyB2ZXJzaW9uIDEuNAoKCiMjIDYuMi4yIC0gMjAxNi0xMC0wOAoKKiBBbGxvdyB0byBwYXNzIG51bGxhYmxlIFJlc3BvbnNlIHRvIGRlbGF5IGNhbGxhYmxlCiogT25seSBhZGQgc2NoZW1lIHdoZW4gaG9zdCBpcyBwcmVzZW50CiogRml4IGRyYWluIGNhc2Ugd2hlcmUgY29udGVudC1sZW5ndGggaXMgdGhlIGxpdGVyYWwgc3RyaW5nIHplcm8KKiBPYmZ1c2NhdGUgaW4tVVJMIGNyZWRlbnRpYWxzIGluIGV4Y2VwdGlvbnMKCgojIyA2LjIuMSAtIDIwMTYtMDctMTgKCiogQWRkcmVzcyBIVFRQX1BST1hZIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIENWRS0yMDE2LTUzODU6CiAgaHR0cHM6Ly9odHRwb3h5Lm9yZy8KKiBGaXhpbmcgdGltZW91dCBidWcgd2l0aCBTdHJlYW1IYW5kbGVyOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQ4OAoqIE9ubHkgcmVhZCB1cCB0byBgQ29udGVudC1MZW5ndGhgIGluIFBIUCBTdHJlYW1IYW5kbGVyIHRvIGF2b2lkIHRpbWVvdXRzIHdoZW4KICBhIHNlcnZlciBkb2VzIG5vdCBob25vciBgQ29ubmVjdGlvbjogY2xvc2VgLgoqIElnbm9yZSBVUkkgZnJhZ21lbnQgd2hlbiBzZW5kaW5nIHJlcXVlc3RzLgoKCiMjIDYuMi4wIC0gMjAxNi0wMy0yMQoKKiBGZWF0dXJlOiBhZGRlZCBgR3V6emxlSHR0cFxqc29uX2VuY29kZWAgYW5kIGBHdXp6bGVIdHRwXGpzb25fZGVjb2RlYC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzODkKKiBCdWcgZml4OiBGaXggc2xlZXAgY2FsY3VsYXRpb24gd2hlbiB3YWl0aW5nIGZvciBkZWxheWVkIHJlcXVlc3RzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTMyNAoqIEZlYXR1cmU6IE1vcmUgZmxleGlibGUgaGlzdG9yeSBjb250YWluZXJzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM3MwoqIEJ1ZyBmaXg6IGRlZmVyIHNpbmsgc3RyZWFtIG9wZW5pbmcgaW4gU3RyZWFtSGFuZGxlci4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzNzcKKiBCdWcgZml4OiBkbyBub3QgYXR0ZW1wdCB0byBlc2NhcGUgY29va2llIHZhbHVlcy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE0MDYKKiBGZWF0dXJlOiByZXBvcnQgb3JpZ2luYWwgY29udGVudCBlbmNvZGluZyBhbmQgbGVuZ3RoIG9uIGRlY29kZWQgcmVzcG9uc2VzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQwOQoqIEJ1ZyBmaXg6IHJld2luZCBzZWVrYWJsZSByZXF1ZXN0IGJvZGllcyBiZWZvcmUgZGlzcGF0Y2hpbmcgdG8gY1VSTC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE0MjIKKiBCdWcgZml4OiBwcm92aWRlIGFuIGVtcHR5IHN0cmluZyB0byBgaHR0cF9idWlsZF9xdWVyeWAgZm9yIEhIVk0gd29ya2Fyb3VuZC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzNjcKCgojIyA2LjEuMSAtIDIwMTUtMTEtMjIKCiogQnVnIGZpeDogUHJveHk6OndyYXBTeW5jKCkgbm93IGNvcnJlY3RseSBwcm94aWVzIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvY29tbWl0LzkxMWJjYmM4YjQzNGFkY2U2NGUyMjNhNmQxZDE0ZTlhOGY2M2U0ZTQKKiBGZWF0dXJlOiBIYW5kbGVyU3RhY2sgaXMgbm93IG1vcmUgZ2VuZXJpYy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9jb21taXQvZjIxMDI5NDEzMzFjZGE1NDQ3NDVlZWRkOTdmYzhmZDQ2ZTFlZTMzZQoqIEJ1ZyBmaXg6IHNldHRpbmcgdmVyaWZ5IHRvIGZhbHNlIGluIHRoZSBTdHJlYW1IYW5kbGVyIG5vdyBkaXNhYmxlcyBwZWVyCiAgdmVyaWZpY2F0aW9uLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTI1NgoqIEZlYXR1cmU6IE1pZGRsZXdhcmUgbm93IHVzZXMgYW4gZXhjZXB0aW9uIGZhY3RvcnksIGluY2x1ZGluZyBtb3JlIGVycm9yCiAgY29udGV4dC4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjgyCiogRmVhdHVyZTogYmV0dGVyIHN1cHBvcnQgZm9yIGRpc2FibGVkIGZ1bmN0aW9ucy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyODcKKiBCdWcgZml4OiBmaXhlZCByZWdyZXNzaW9uIHdoZXJlIE1vY2tIYW5kbGVyIHdhcyBub3QgdXNpbmcgYHNpbmtgLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTI5MgoKCiMjIDYuMS4wIC0gMjAxNS0wOS0wOAoKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYG9uX3N0YXRzYCByZXF1ZXN0IG9wdGlvbiB0byBwcm92aWRlIGFjY2VzcyB0byB0cmFuc2ZlcgogIHN0YXRpc3RpY3MgZm9yIHJlcXVlc3RzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDIKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYWJpbGl0eSB0byBwZXJzaXN0IHNlc3Npb24gY29va2llcyBpbiBDb29raWVKYXJzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE5NQoqIEZlYXR1cmU6IFNvbWUgY29tcGF0aWJpbGl0eSB1cGRhdGVzIGZvciBHb29nbGUgQVBQIEVuZ2luZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIxNgoqIEZlYXR1cmU6IEFkZGVkIHN1cHBvcnQgZm9yIE5PX1BST1hZIHRvIHByZXZlbnQgdGhlIHVzZSBvZiBhIHByb3h5IGJhc2VkIG9uCiAgYSBzaW1wbGUgc2V0IG9mIHJ1bGVzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExOTcKKiBGZWF0dXJlOiBDb29raWVzIGNhbiBub3cgY29udGFpbiBzcXVhcmUgYnJhY2tldHMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjM3CiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBwYXJzaW5nIGA9YCBpbnNpZGUgb2YgcXVvdGVzIGluIENvb2tpZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjMyCiogQnVnIGZpeDogQ3Vzb3RtIGNVUkwgb3B0aW9ucyBub3cgY29ycmVjdGx5IG92ZXJyaWRlIGN1cmwgb3B0aW9ucyBvZiB0aGUKICBzYW1lIG5hbWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIyMQoqIEJ1ZyBmaXg6IENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgbm93IGFkZGVkIHdoZW4gdXNpbmcgYW4gZXhwbGljaXRseSBwcm92aWRlZAogIG11bHRpcGFydCBib2R5LiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMTgKKiBCdWcgZml4OiBOb3cgaWdub3JpbmcgU2V0LUNvb2tpZSBoZWFkZXJzIHRoYXQgaGF2ZSBubyBuYW1lLgoqIEJ1ZyBmaXg6IFJlYXNvbiBwaHJhc2UgaXMgbm8gbG9uZ2VyIGNhc3QgdG8gYW4gaW50IGluIHNvbWUgY2FzZXMgaW4gdGhlCiAgY1VSTCBoYW5kbGVyLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExODcKKiBCdWcgZml4OiBSZW1vdmUgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdoZW4gcmVkaXJlY3RpbmcgaWYgdGhlIEhvc3QKICBoZWFkZXIgY2hhbmdlcy4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjA3CiogQnVnIGZpeDogQ29va2llIHBhdGggbWF0Y2hpbmcgZml4ZXMKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTEyOQoqIEJ1ZyBmaXg6IEZpeGluZyB0aGUgY1VSTCBgYm9keV9hc19zdHJpbmdgIHNldHRpbmcKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDEKKiBCdWcgZml4OiBxdW90ZXMgYXJlIG5vIGxvbmdlciBzdHJpcHBlZCB3aGVuIHBhcnNpbmcgY29va2llcy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTE3MgoqIEJ1ZyBmaXg6IGBmb3JtX3BhcmFtc2AgYW5kIGBxdWVyeWAgbm93IGFsd2F5cyB1c2VzIHRoZSBgJmAgc2VwYXJhdG9yLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE2MwoqIEJ1ZyBmaXg6IEFkZGluZyBhIENvbnRlbnQtTGVuZ3RoIHRvIFBIUCBzdHJlYW0gd3JhcHBlciByZXF1ZXN0cyBpZiBub3Qgc2V0LgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE4OQoKCiMjIDYuMC4yIC0gMjAxNS0wNy0wNAoKKiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBjdXJsIGhhbmRsZXJzIGluIHdoaWNoIHJlZmVyZW5jZXMgdG8gY2FsbGJhY2tzCiAgd2VyZSBub3QgYmVpbmcgcmVtb3ZlZCBieSBgY3VybF9yZXNldGAuCiogQ29va2llcyBhcmUgbm93IGV4dHJhY3RlZCBwcm9wZXJseSBiZWZvcmUgcmVkaXJlY3RzLgoqIENvb2tpZXMgbm93IGFsbG93IG1vcmUgY2hhcmFjdGVyIHJhbmdlcy4KKiBEZWNvZGVkIENvbnRlbnQtRW5jb2RpbmcgcmVzcG9uc2VzIGFyZSBub3cgbW9kaWZpZWQgdG8gY29ycmVjdGx5IHJlZmxlY3QKICB0aGVpciBzdGF0ZSBpZiB0aGUgZW5jb2Rpbmcgd2FzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBieSBhIGhhbmRsZXIuIFRoaXMKICBtZWFucyB0aGF0IHRoZSBgQ29udGVudC1FbmNvZGluZ2AgaGVhZGVyIG1heSBiZSByZW1vdmVkIGFuIHRoZQogIGBDb250ZW50LUxlbmd0aGAgbW9kaWZpZWQgdG8gcmVmbGVjdCB0aGUgbWVzc2FnZSBzaXplIGFmdGVyIHJlbW92aW5nIHRoZQogIGVuY29kaW5nLgoqIEFkZGVkIGEgbW9yZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIHVzZSBgZm9ybV9wYXJhbXNgIGFuZAogIGBtdWx0aXBhcnRgIGluIHRoZSBzYW1lIHJlcXVlc3QuCiogU2V2ZXJhbCBmaXhlcyBmb3IgSEhWTSBzdXBwb3J0LgoqIEZ1bmN0aW9ucyBhcmUgbm93IGNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgdXNpbmcgYW4gYWRkaXRpb25hbCBsZXZlbCBvZgogIGluZGlyZWN0aW9uIHRvIGhlbHAgd2l0aCBnbG9iYWwgQ29tcG9zZXIgaW5zdGFsbGF0aW9ucy4KCgojIyA2LjAuMSAtIDIwMTUtMDUtMjcKCiogRml4ZWQgYSBidWcgd2l0aCBzZXJpYWxpemluZyB0aGUgYHF1ZXJ5YCByZXF1ZXN0IG9wdGlvbiB3aGVyZSB0aGUgYCZgCiAgc2VwYXJhdG9yIHdhcyBtaXNzaW5nLgoqIEFkZGVkIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UgZm9yIHdoZW4gYGJvZHlgIGlzIHByb3ZpZGVkIGFzIGFuIGFycmF5LiBQbGVhc2UKICB1c2UgYGZvcm1fcGFyYW1zYCBvciBgbXVsdGlwYXJ0YCBpbnN0ZWFkLgoqIFZhcmlvdXMgZG9jIGZpeGVzLgoKCiMjIDYuMC4wIC0gMjAxNS0wNS0yNgoKKiBTZWUgdGhlIFVQR1JBRElORy5tZCBkb2N1bWVudCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgbXVsdGlwYXJ0YCBhbmQgYGZvcm1fcGFyYW1zYCByZXF1ZXN0IG9wdGlvbnMuCiogQWRkZWQgYHN5bmNocm9ub3VzYCByZXF1ZXN0IG9wdGlvbi4KKiBBZGRlZCB0aGUgYG9uX2hlYWRlcnNgIHJlcXVlc3Qgb3B0aW9uLgoqIEZpeGVkIGBleHBlY3RgIGhhbmRsaW5nLgoqIE5vIGxvbmdlciBhZGRpbmcgZGVmYXVsdCBtaWRkbGV3YXJlcyBpbiB0aGUgY2xpZW50IGN0b3IuIFRoZXNlIG5lZWQgdG8gYmUKICBwcmVzZW50IG9uIHRoZSBwcm92aWRlZCBoYW5kbGVyIGluIG9yZGVyIHRvIHdvcmsuCiogUmVxdWVzdHMgYXJlIG5vIGxvbmdlciBpbml0aWF0ZWQgd2hlbiBzZW5kaW5nIGFzeW5jIHJlcXVlc3RzIHdpdGggdGhlCiAgQ3VybE11bHRpSGFuZGxlci4gVGhpcyBwcmV2ZW50cyB1bmV4cGVjdGVkIHJlY3Vyc2lvbiBmcm9tIHJlcXVlc3RzIGNvbXBsZXRpbmcKICB3aGlsZSB0aWNraW5nIHRoZSBjVVJMIGxvb3AuCiogUmVtb3ZlZCB0aGUgc2VtYW50aWNzIG9mIHNldHRpbmcgYGRlZmF1bHRgIHRvIGB0cnVlYC4gVGhpcyBpcyBubyBsb25nZXIKICByZXF1aXJlZCBub3cgdGhhdCB0aGUgY1VSTCBsb29wIGlzIG5vdCB0aWNrZWQgZm9yIGFzeW5jIHJlcXVlc3RzLgoqIEFkZGVkIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGxvZ2dpbmcgbWlkZGxld2FyZS4KKiBObyBsb25nZXIgYWxsb3dpbmcgc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIHdoZW4gdXNpbmcgdGhlIFN0cmVhbUhhbmRsZXIuCiogRW5zdXJpbmcgdGhhdCBgc2lua2AgaXMgdmFsaWQgaWYgc2F2aW5nIHRvIGEgZmlsZS4KKiBSZXF1ZXN0IGV4Y2VwdGlvbnMgbm93IGluY2x1ZGUgYSAiaGFuZGxlciBjb250ZXh0IiB3aGljaCBwcm92aWRlcyBoYW5kbGVyCiAgc3BlY2lmaWMgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9uc2AgdG8gYWxsb3cgcmVxdWVzdCBvcHRpb25zIHRvIGJlIGFwcGxpZWQKICB1c2luZyBjb25zdGFudHMuCiogYCRtYXhIYW5kbGVzYCBoYXMgYmVlbiByZW1vdmVkIGZyb20gQ3VybE11bHRpSGFuZGxlci4KKiBgTXVsdGlwYXJ0UG9zdEJvZHlgIGlzIG5vdyBwYXJ0IG9mIHRoZSBgZ3V6emxlaHR0cC9wc3I3YCBwYWNrYWdlLgoKCiMjIDUuMy4wIC0gMjAxNS0wNS0xOQoKKiBNb2NrIG5vdyBzdXBwb3J0cyBgc2F2ZV90b2AKKiBNYXJrZWQgYEFic3RyYWN0UmVxdWVzdEV2ZW50OjpnZXRUcmFuc2FjdGlvbigpYCBhcyBwdWJsaWMuCiogRml4ZWQgYSBidWcgaW4gd2hpY2ggbXVsdGlwbGUgaGVhZGVycyB1c2luZyBkaWZmZXJlbnQgY2FzaW5nIHdvdWxkIG92ZXJ3cml0ZQogIHByZXZpb3VzIGhlYWRlcnMgaW4gdGhlIGFzc29jaWF0aXZlIGFycmF5LgoqIEFkZGVkIGBVdGlsczo6Z2V0RGVmYXVsdEhhbmRsZXIoKWAKKiBNYXJrZWQgYEd1enpsZUh0dHBcQ2xpZW50OjpnZXREZWZhdWx0VXNlckFnZW50YCBhcyBkZXByZWNhdGVkLgoqIFVSTCBzY2hlbWUgaXMgbm93IGFsd2F5cyBsb3dlcmNhc2VkLgoKCiMjIDYuMC4wLWJldGEuMQoKKiBSZXF1aXJlcyBQSFAgPj0gNS41CiogVXBkYXRlZCB0byB1c2UgUFNSLTcKICAqIFJlcXVpcmVzIGltbXV0YWJsZSBtZXNzYWdlcywgd2hpY2ggYmFzaWNhbGx5IG1lYW5zIGFuIGV2ZW50IGJhc2VkIHN5c3RlbQogICAgb3duZWQgYnkgYSByZXF1ZXN0IGluc3RhbmNlIGlzIG5vIGxvbmdlciBwb3NzaWJsZS4KICAqIFV0aWxpemluZyB0aGUgW0d1enpsZSBQU1ItNyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcpLgogICogUmVtb3ZlZCB0aGUgZGVwZW5kZW5jeSBvbiBgZ3V6emxlaHR0cC9zdHJlYW1zYC4gVGhlc2Ugc3RyZWFtIGFic3RyYWN0aW9ucwogICAgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYGd1enpsZWh0dHAvcHNyN2AgcGFja2FnZSB1bmRlciB0aGUgYEd1enpsZUh0dHBcUHNyN2AKICAgIG5hbWVzcGFjZS4KKiBBZGRlZCBtaWRkbGV3YXJlIGFuZCBoYW5kbGVyIHN5c3RlbQogICogUmVwbGFjZWQgdGhlIEd1enpsZSBldmVudCBhbmQgc3Vic2NyaWJlciBzeXN0ZW0gd2l0aCBhIG1pZGRsZXdhcmUgc3lzdGVtLgogICogTm8gbG9uZ2VyIGRlcGVuZHMgb24gUmluZ1BIUCwgYnV0IHJhdGhlciBwbGFjZXMgdGhlIEhUVFAgaGFuZGxlcnMgZGlyZWN0bHkKICAgIGluIEd1enpsZSwgb3BlcmF0aW5nIG9uIFBTUi03IG1lc3NhZ2VzLgogICogUmV0cnkgbG9naWMgaXMgbm93IGVuY2Fwc3VsYXRlZCBpbiBgR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpyZXRyeWAsIHdoaWNoCiAgICBtZWFucyB0aGUgYGd1enpsZWh0dHAvcmV0cnktc3Vic2NyaWJlcmAgaXMgbm93IG9ic29sZXRlLgogICogTW9ja2luZyByZXNwb25zZXMgaXMgbm93IGhhbmRsZWQgdXNpbmcgYEd1enpsZUh0dHBcSGFuZGxlclxNb2NrSGFuZGxlcmAuCiogQXN5bmNocm9ub3VzIHJlc3BvbnNlcwogICogTm8gbG9uZ2VyIHN1cHBvcnRzIHRoZSBgZnV0dXJlYCByZXF1ZXN0IG9wdGlvbiB0byBzZW5kIGFuIGFzeW5jIHJlcXVlc3QuCiAgICBJbnN0ZWFkLCB1c2Ugb25lIG9mIHRoZSBgKkFzeW5jYCBtZXRob2RzIG9mIGEgY2xpZW50IChlLmcuLCBgcmVxdWVzdEFzeW5jYCwKICAgIGBnZXRBc3luY2AsIGV0Yy4pLgogICogVXRpbGl6aW5nIGBHdXp6bGVIdHRwXFByb21pc2VgIGluc3RlYWQgb2YgUmVhY3QncyBwcm9taXNlIGxpYnJhcnkgdG8gYXZvaWQKICAgIHJlY3Vyc2lvbiByZXF1aXJlZCBieSBjaGFpbmluZyBhbmQgZm9yd2FyZGluZyByZWFjdCBwcm9taXNlcy4gU2VlCiAgICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Byb21pc2VzCiAgKiBBZGRlZCBgcmVxdWVzdEFzeW5jYCBhbmQgYHNlbmRBc3luY2AgdG8gc2VuZCByZXF1ZXN0IGFzeW5jaHJvbm91c2x5LgogICogQWRkZWQgbWFnaWMgbWV0aG9kcyBmb3IgYGdldEFzeW5jKClgLCBgcG9zdEFzeW5jKClgLCBldGMuIHRvIHNlbmQgcmVxdWVzdHMKICAgIGFzeW5jaHJvbm91c2x5LgoqIFJlcXVlc3Qgb3B0aW9ucwogICogUE9TVCBhbmQgZm9ybSB1cGRhdGVzCiAgICAqIEFkZGVkIHRoZSBgZm9ybV9maWVsZHNgIGFuZCBgZm9ybV9maWxlc2AgcmVxdWVzdCBvcHRpb25zLgogICAgKiBSZW1vdmVkIHRoZSBgR3V6emxlSHR0cFxQb3N0YCBuYW1lc3BhY2UuCiAgICAqIFRoZSBgYm9keWAgcmVxdWVzdCBvcHRpb24gbm8gbG9uZ2VyIGFjY2VwdHMgYW4gYXJyYXkgZm9yIFBPU1QgcmVxdWVzdHMuCiAgKiBUaGUgYGV4Y2VwdGlvbnNgIHJlcXVlc3Qgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCiAgICBgaHR0cF9lcnJvcnNgIHJlcXVlc3Qgb3B0aW9ucy4KICAqIFRoZSBgc2F2ZV90b2AgcmVxdWVzdCBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgc2lua2AgcmVxdWVzdAogICAgb3B0aW9uLgoqIENsaWVudHMgbm8gbG9uZ2VyIGFjY2VwdCBhbiBhcnJheSBvZiBVUkkgdGVtcGxhdGUgc3RyaW5nIGFuZCB2YXJpYWJsZXMgZm9yCiAgVVJJIHZhcmlhYmxlcy4gWW91IHdpbGwgbmVlZCB0byBleHBhbmQgVVJJIHRlbXBsYXRlcyBiZWZvcmUgcGFzc2luZyB0aGVtCiAgaW50byBhIGNsaWVudCBjb25zdHJ1Y3RvciBvciByZXF1ZXN0IG1ldGhvZC4KKiBDbGllbnQgbWV0aG9kcyBgZ2V0KClgLCBgcG9zdCgpYCwgYHB1dCgpYCwgYHBhdGNoKClgLCBgb3B0aW9ucygpYCwgZXRjLiBhcmUKICBub3cgbWFnaWMgbWV0aG9kcyB0aGF0IHdpbGwgc2VuZCBzeW5jaHJvbm91cyByZXF1ZXN0cy4KKiBSZXBsYWNlZCBgVXRpbHMucGhwYCB3aXRoIHBsYWluIGZ1bmN0aW9ucyBpbiBgZnVuY3Rpb25zLnBocGAuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYC4KKiBSZW1vdmVkIGBHdXp6bGVIdHRwXEJhdGNoUmVzdWx0c2AuIEJhdGNoZWQgcG9vbCByZXN1bHRzIGFyZSBub3cgcmV0dXJuZWQgYXMKICBhbiBhcnJheS4KKiBSZW1vdmVkIGBHdXp6bGVIdHRwXFF1ZXJ5YC4gUXVlcnkgc3RyaW5nIGhhbmRsaW5nIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGFuCiAgYXNzb2NpYXRpdmUgYXJyYXkgcGFzc2VkIGludG8gdGhlIGBxdWVyeWAgcmVxdWVzdCBvcHRpb24uIFRoZSBxdWVyeSBzdHJpbmcKICBpcyBzZXJpYWxpemVkIHVzaW5nIFBIUCdzIGBodHRwX2J1aWxkX3F1ZXJ5YC4gSWYgeW91IG5lZWQgbW9yZSBjb250cm9sLCB5b3UKICBjYW4gcGFzcyB0aGUgcXVlcnkgc3RyaW5nIGluIGFzIGEgc3RyaW5nLgoqIGBHdXp6bGVIdHRwXFF1ZXJ5UGFyc2VyYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIHRoZQogIGBHdXp6bGVIdHRwXFBzcjdccGFyc2VfcXVlcnlgLgoKCiMjIDUuMi4wIC0gMjAxNS0wMS0yNwoKKiBBZGRlZCBgQXBwbGllc0hlYWRlcnNJbnRlcmZhY2VgIHRvIG1ha2UgYXBwbHlpbmcgaGVhZGVycyB0byBhIHJlcXVlc3QgYmFzZWQKICBvbiB0aGUgYm9keSBtb3JlIGdlbmVyaWMgYW5kIG5vdCBzcGVjaWZpYyB0byBgUG9zdEJvZHlJbnRlcmZhY2VgLgoqIFJlZHVjZWQgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgbmVlZGVkIHRvIHNlbmQgcmVxdWVzdHMuCiogTmVzdGVkIGZ1dHVyZXMgYXJlIG5vdyByZXNvbHZlZCBpbiB0aGUgY2xpZW50IHJhdGhlciB0aGFuIHRoZSBSZXF1ZXN0RnNtCiogRmluaXNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBSZXF1ZXN0RnNtIHJhdGhlciB0aGFuIHRoZQogIFJpbmdCcmlkZ2UuCiogQWRkZWQgYSBndWFyZCBpbiB0aGUgUG9vbCBjbGFzcyB0byBub3QgdXNlIHJlY3Vyc2lvbiBmb3IgcmVxdWVzdCByZXRyaWVzLgoKCiMjIDUuMS4wIC0gMjAxNC0xMi0xOQoKKiBQb29sIGNsYXNzIG5vIGxvbmdlciB1c2VzIHJlY3Vyc2lvbiB3aGVuIGEgcmVxdWVzdCBpcyBpbnRlcmNlcHRlZC4KKiBUaGUgc2l6ZSBvZiBhIFBvb2wgY2FuIG5vdyBiZSBkeW5hbWljYWxseSBhZGp1c3RlZCB1c2luZyBhIGNhbGxiYWNrLgogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzk0My4KKiBTZXR0aW5nIGEgcmVxdWVzdCBvcHRpb24gdG8gYG51bGxgIHdoZW4gY3JlYXRpbmcgYSByZXF1ZXN0IHdpdGggYSBjbGllbnQgd2lsbAogIGVuc3VyZSB0aGF0IHRoZSBvcHRpb24gaXMgbm90IHNldC4gVGhpcyBhbGxvd3MgeW91IHRvIG92ZXJ3cml0ZSBkZWZhdWx0CiAgcmVxdWVzdCBvcHRpb25zIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMuCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTM3LgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGxpbWl0IHdoaWNoIHByb3RvY29scyBhcmUgYWxsb3dlZCBmb3IgcmVkaXJlY3RzIGJ5CiAgc3BlY2lmeWluZyBhIGBwcm90b2NvbHNgIGFycmF5IGluIHRoZSBgYWxsb3dfcmVkaXJlY3RzYCByZXF1ZXN0IG9wdGlvbi4KKiBOZXN0ZWQgZnV0dXJlcyBkdWUgdG8gcmV0cmllcyBhcmUgbm93IHJlc29sdmVkIHdoZW4gd2FpdGluZyBmb3Igc3luY2hyb25vdXMKICByZXNwb25zZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzk0Ny4KKiBgIjAiYCBpcyBub3cgYW4gYWxsb3dlZCBVUkkgcGF0aC4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC85MzUuCiogYFF1ZXJ5YCBubyBsb25nZXIgdHlwZWhpbnRzIG9uIHRoZSBgJHF1ZXJ5YCBhcmd1bWVudCBpbiB0aGUgY29uc3RydWN0b3IsCiAgYWxsb3dpbmcgZm9yIHN0cmluZ3MgYW5kIGFycmF5cy4KKiBFeGNlcHRpb25zIHRocm93biBpbiB0aGUgYGVuZGAgZXZlbnQgYXJlIG5vdyBjb3JyZWN0bHkgd3JhcHBlZCB3aXRoIEd1enpsZQogIHNwZWNpZmljIGV4Y2VwdGlvbnMgaWYgbmVjZXNzYXJ5LgoKCiMjIDUuMC4zIC0gMjAxNC0xMS0wMwoKVGhpcyBjaGFuZ2UgdXBkYXRlcyBxdWVyeSBzdHJpbmdzIHNvIHRoYXQgdGhleSBhcmUgdHJlYXRlZCBhcyB1bi1lbmNvZGVkIHZhbHVlcwpieSBkZWZhdWx0IHdoZXJlIHRoZSB2YWx1ZSByZXByZXNlbnRzIGFuIHVuLWVuY29kZWQgdmFsdWUgdG8gc2VuZCBvdmVyIHRoZQp3aXJlLiBBIFF1ZXJ5IG9iamVjdCB0aGVuIGVuY29kZXMgdGhlIHZhbHVlIGJlZm9yZSBzZW5kaW5nIG92ZXIgdGhlIHdpcmUuIFRoaXMKbWVhbnMgdGhhdCBldmVuIHZhbHVlIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgKGUuZy4sICI6IikgYXJlIHVybCBlbmNvZGVkLiBUaGlzCm1ha2VzIHRoZSBRdWVyeSBjbGFzcyBtYXRjaCBQSFAncyBodHRwX2J1aWxkX3F1ZXJ5IGZ1bmN0aW9uLiBIb3dldmVyLCBpZiB5b3UKd2FudCB0byBzZW5kIHJlcXVlc3RzIG92ZXIgdGhlIHdpcmUgdXNpbmcgdmFsaWQgcXVlcnkgc3RyaW5nIGNoYXJhY3RlcnMgdGhhdCBkbwpub3QgbmVlZCB0byBiZSBlbmNvZGVkLCB0aGVuIHlvdSBjYW4gcHJvdmlkZSBhIHN0cmluZyB0byBVcmw6OnNldFF1ZXJ5KCkgYW5kCnBhc3MgdHJ1ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIGlzIGEgcmF3CnN0cmluZyB0aGF0IHNob3VsZCBub3QgYmUgcGFyc2VkIG9yIGVuY29kZWQgKHVubGVzcyBhIGNhbGwgdG8gZ2V0UXVlcnkoKSBpcwpzdWJzZXF1ZW50bHkgbWFkZSwgZm9yY2luZyB0aGUgcXVlcnktc3RyaW5nIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEgUXVlcnkKb2JqZWN0KS4KCgojIyA1LjAuMiAtIDIwMTQtMTAtMzAKCiogQWRkZWQgYSB0cmFpbGluZyBgXHJcbmAgdG8gbXVsdGlwYXJ0L2Zvcm0tZGF0YSBwYXlsb2Fkcy4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC84NzEKKiBBZGRlZCBhIGBHdXp6bGVIdHRwXFBvb2w6OnNlbmQoKWAgY29udmVuaWVuY2UgbWV0aG9kIHRvIG1hdGNoIHRoZSBkb2NzLgoqIFN0YXR1cyBjb2RlcyBhcmUgbm93IHJldHVybmVkIGFzIGludGVnZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODgxCiogTm8gbG9uZ2VyIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGhlYWRlcgogIHdoZW4gc2VuZGluZyBQT1NUIHJlcXVlc3RzLCBhbGxvd2luZyBmb3IgY3VzdG9taXplZCBoZWFkZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODc3CiogSW1wcm92ZWQgcGF0aCBVUkwgc2VyaWFsaXphdGlvbi4KCiAgKiBObyBsb25nZXIgZG91YmxlIHBlcmNlbnQtZW5jb2RpbmcgY2hhcmFjdGVycyBpbiB0aGUgcGF0aCBvciBxdWVyeSBzdHJpbmcgaWYKICAgIHRoZXkgYXJlIGFscmVhZHkgZW5jb2RlZC4KICAqIE5vdyBwcm9wZXJseSBlbmNvZGluZyB0aGUgc3VwcGxpZWQgcGF0aCB0byBhIFVSTCBvYmplY3QsIGluc3RlYWQgb2Ygb25seQogICAgZW5jb2RpbmcgJyAnIGFuZCAnPycuCiAgKiBOb3RlOiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgaW4gNS4wLjMgdG8gbm93IGVuY29kZSBxdWVyeSBzdHJpbmcgdmFsdWVzIGJ5CiAgICBkZWZhdWx0IHVubGVzcyB0aGUgYHJhd1N0cmluZ2AgYXJndW1lbnQgaXMgcHJvdmlkZWQgd2hlbiBzZXR0aW5nIHRoZSBxdWVyeQogICAgc3RyaW5nIG9uIGEgVVJMOiBOb3cgYWxsb3dpbmcgbWFueSBtb3JlIGNoYXJhY3RlcnMgdG8gYmUgcHJlc2VudCBpbiB0aGUKICAgIHF1ZXJ5IHN0cmluZyB3aXRob3V0IGJlaW5nIHBlcmNlbnQgZW5jb2RlZC4gU2VlCiAgICBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQQoKCiMjIDUuMC4xIC0gMjAxNC0xMC0xNgoKQnVnZml4IHJlbGVhc2UuCgoqIEZpeGVkIGFuIGlzc3VlIHdoZXJlIGNvbm5lY3Rpb24gZXJyb3JzIHN0aWxsIHJldHVybmVkIHJlc3BvbnNlIG9iamVjdCBpbgogIGVycm9yIGFuZCBlbmQgZXZlbnRzIGV2ZW50IHRob3VnaCB0aGUgcmVzcG9uc2UgaXMgdW51c2FibGUuIFRoaXMgaGFzIGJlZW4KICBjb3JyZWN0ZWQgc28gdGhhdCBhIHJlc3BvbnNlIGlzIG5vdCByZXR1cm5lZCBpbiB0aGUgYGdldFJlc3BvbnNlYCBtZXRob2Qgb2YKICB0aGVzZSBldmVudHMgaWYgdGhlIHJlc3BvbnNlIGRpZCBub3QgY29tcGxldGUuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy84NjcKKiBGaXhlZCBhbiBpc3N1ZSB3aGVyZSB0cmFuc2ZlciBzdGF0aXN0aWNzIHdlcmUgbm90IGJlaW5nIHBvcHVsYXRlZCBpbiB0aGUKICBSaW5nQnJpZGdlLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODY2CgoKIyMgNS4wLjAgLSAyMDE0LTEwLTEyCgpBZGRpbmcgc3VwcG9ydCBmb3Igbm9uLWJsb2NraW5nIHJlc3BvbnNlcyBhbmQgc29tZSBtaW5vciBBUEkgY2xlYW51cC4KCiMjIyBOZXcgRmVhdHVyZXMKCiogQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWJsb2NraW5nIHJlc3BvbnNlcyBiYXNlZCBvbiBgZ3V6emxlaHR0cC9ndXp6bGUtcmluZ2AuCiogQWRkZWQgYSBwdWJsaWMgQVBJIGZvciBjcmVhdGluZyBhIGRlZmF1bHQgSFRUUCBhZGFwdGVyLgoqIFVwZGF0ZWQgdGhlIHJlZGlyZWN0IHBsdWdpbiB0byBiZSBub24tYmxvY2tpbmcgc28gdGhhdCByZWRpcmVjdHMgYXJlIHNlbnQKICBjb25jdXJyZW50bHkuIE90aGVyIHBsdWdpbnMgbGlrZSB0aGlzIGNhbiBub3cgYmUgdXBkYXRlZCB0byBiZSBub24tYmxvY2tpbmcuCiogQWRkZWQgYSAicHJvZ3Jlc3MiIGV2ZW50IHNvIHRoYXQgeW91IGNhbiBnZXQgdXBsb2FkIGFuZCBkb3dubG9hZCBwcm9ncmVzcwogIGV2ZW50cy4KKiBBZGRlZCBgR3V6emxlSHR0cFxQb29sYCB3aGljaCBpbXBsZW1lbnRzIEZ1dHVyZUludGVyZmFjZSBhbmQgdHJhbnNmZXJzCiAgcmVxdWVzdHMgY29uY3VycmVudGx5IHVzaW5nIGEgY2FwcGVkIHBvb2wgc2l6ZSBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZS4KKiBBZGRlZCBgaGFzTGlzdGVuZXJzKClgIHRvIEVtaXR0ZXJJbnRlcmZhY2UuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNlbmRBbGxgIGFuZCBtYXJrZWQKICBgR3V6emxlSHR0cFxDbGllbnQ6OnNlbmRBbGxgIGFzIGRlcHJlY2F0ZWQgKGl0J3Mgc3RpbGwgdGhlcmUsIGp1c3Qgbm90IHRoZQogIHJlY29tbWVuZGVkIHdheSkuCgojIyMgQnJlYWtpbmcgY2hhbmdlcwoKVGhlIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhpcyByZWxlYXNlIGFyZSByZWxhdGl2ZWx5IG1pbm9yLiBUaGUgYmlnZ2VzdCB0aGluZyB0bwpsb29rIG91dCBmb3IgaXMgdGhhdCByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIG5vIGxvbmdlciBpbXBsZW1lbnQgZmx1ZW50CmludGVyZmFjZXMuCgoqIFJlbW92ZWQgdGhlIGZsdWVudCBpbnRlcmZhY2VzIChpLmUuLCBgcmV0dXJuICR0aGlzYCkgZnJvbSByZXF1ZXN0cywKICByZXNwb25zZXMsIGBHdXp6bGVIdHRwXENvbGxlY3Rpb25gLCBgR3V6emxlSHR0cFxVcmxgLAogIGBHdXp6bGVIdHRwXFF1ZXJ5YCwgYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keWAsIGFuZAogIGBHdXp6bGVIdHRwXENvb2tpZVxTZXRDb29raWVgLiBUaGlzIGJsb2cgcG9zdCBwcm92aWRlcyBhIGdvb2Qgb3V0bGluZSBvZgogIHdoeSBJIGRpZCB0aGlzOiBodHRwczovL29jcmFtaXVzLmdpdGh1Yi5pby9ibG9nL2ZsdWVudC1pbnRlcmZhY2VzLWFyZS1ldmlsLy4KICBUaGlzIGFsc28gbWFrZXMgdGhlIEd1enpsZSBtZXNzYWdlIGludGVyZmFjZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50CiAgUFNSLTcgbWVzc2FnZSBwcm9wb3NhbC4KKiBSZW1vdmVkICJmdW5jdGlvbnMucGhwIiwgc28gdGhhdCBHdXp6bGUgaXMgdHJ1bHkgUFNSLTQgY29tcGxpYW50LiBFeGNlcHQKICBmb3IgdGhlIEhUVFAgcmVxdWVzdCBmdW5jdGlvbnMgZnJvbSBmdW5jdGlvbi5waHAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm93CiAgaW1wbGVtZW50ZWQgaW4gYEd1enpsZUh0dHBcVXRpbHNgIHVzaW5nIGNhbWVsQ2FzZS4gYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgCiAgbW92ZWQgdG8gYEd1enpsZUh0dHBcVXRpbHM6Ompzb25EZWNvZGVgLiBgR3V6emxlSHR0cFxnZXRfcGF0aGAgbW92ZWQgdG8KICBgR3V6emxlSHR0cFxVdGlsczo6Z2V0UGF0aGAuIGBHdXp6bGVIdHRwXHNldF9wYXRoYCBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXFV0aWxzOjpzZXRQYXRoYC4gYEd1enpsZUh0dHBcYmF0Y2hgIHNob3VsZCBub3cgYmUKICBgR3V6emxlSHR0cFxQb29sOjpiYXRjaGAsIHdoaWNoIHJldHVybnMgYW4gYG9iamVjdFN0b3JhZ2VgLiBVc2luZyBmdW5jdGlvbnMucGhwCiAgY2F1c2VkIHByb2JsZW1zIGZvciBtYW55IHVzZXJzOiB0aGV5IGFyZW4ndCBQU1ItNCBjb21wbGlhbnQsIHJlcXVpcmUgYW4KICBleHBsaWNpdCBpbmNsdWRlLCBhbmQgbmVlZGVkIGFuIGlmLWd1YXJkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIG5vdAogIGRlY2xhcmVkIG11bHRpcGxlIHRpbWVzLgoqIFJld3JvdGUgYWRhcHRlciBsYXllci4KICAgICogUmVtb3ZpbmcgYWxsIGNsYXNzZXMgZnJvbSBgR3V6emxlSHR0cFxBZGFwdGVyYCwgdGhlc2UgYXJlIG5vdwogICAgICBpbXBsZW1lbnRlZCBhcyBjYWxsYWJsZXMgdGhhdCBhcmUgc3RvcmVkIGluIGBHdXp6bGVIdHRwXFJpbmdcQ2xpZW50YC4KICAgICogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAicGFyYWxsZWwgYWRhcHRlcnMiLiBTZW5kaW5nIHJlcXVlc3RzIHNlcmlhbGx5IG9yCiAgICAgIGNvbmN1cnJlbnRseSBpcyBub3cgaGFuZGxlZCB1c2luZyBhIHNpbmdsZSBhZGFwdGVyLgogICAgKiBNb3ZlZCBgR3V6emxlSHR0cFxBZGFwdGVyXFRyYW5zYWN0aW9uYCB0byBgR3V6emxlSHR0cFxUcmFuc2FjdGlvbmAuIFRoZQogICAgICBUcmFuc2FjdGlvbiBvYmplY3Qgbm93IGV4cG9zZXMgdGhlIHJlcXVlc3QsIHJlc3BvbnNlLCBhbmQgY2xpZW50IGFzIHB1YmxpYwogICAgICBwcm9wZXJ0aWVzLiBUaGUgZ2V0dGVycyBhbmQgc2V0dGVycyBoYXZlIGJlZW4gcmVtb3ZlZC4KKiBSZW1vdmVkIHRoZSAiaGVhZGVycyIgZXZlbnQuIFRoaXMgZXZlbnQgd2FzIG9ubHkgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUKICBib2R5IGEgcmVzcG9uc2Ugb25jZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2Ugd2VyZSBrbm93bi4gWW91IGNhbiBpbXBsZW1lbnQKICBhIHNpbWlsYXIgYmVoYXZpb3IgaW4gYSBudW1iZXIgb2Ygd2F5cy4gT25lIGV4YW1wbGUgbWlnaHQgYmUgdG8gdXNlIGEKICBGblN0cmVhbSB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIGJlaW5nIHNlbnQuIEZvciBleGFtcGxlLCB3aGVuIHRoZQogIGZpcnN0IGJ5dGUgaXMgd3JpdHRlbiwgeW91IGNvdWxkIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoZWFkZXJzIG1hdGNoIHlvdXIKICBleHBlY3RhdGlvbnMsIGFuZCBpZiBzbywgY2hhbmdlIHRoZSBhY3R1YWwgc3RyZWFtIGJvZHkgdGhhdCBpcyBiZWluZwogIHdyaXR0ZW4gdG8uCiogUmVtb3ZlZCB0aGUgYGFzQXJyYXlgIHBhcmFtZXRlciBmcm9tCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJgLiBJZiB5b3Ugd2FudCB0byBnZXQgYSBoZWFkZXIKICB2YWx1ZSBhcyBhbiBhcnJheSwgdGhlbiB1c2UgdGhlIG5ld2x5IGFkZGVkIGBnZXRIZWFkZXJBc0FycmF5KClgIG1ldGhvZCBvZgogIGBNZXNzYWdlSW50ZXJmYWNlYC4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIEd1enpsZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aAogIHRoZSBQU1ItNyBpbnRlcmZhY2VzLgoqIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlgIG5vIGxvbmdlciBhbGxvd3Mgc3ViY2xhc3NlcyB0byBhZGQKICBjdXN0b20gcmVxdWVzdCBvcHRpb25zIHVzaW5nIGRvdWJsZS1kaXNwYXRjaCAodGhpcyB3YXMgYW4gaW1wbGVtZW50YXRpb24KICBkZXRhaWwpLiBJbnN0ZWFkLCB5b3Ugc2hvdWxkIG5vdyBwcm92aWRlIGFuIGFzc29jaWF0aXZlIGFycmF5IHRvIHRoZQogIGNvbnN0cnVjdG9yIHdoaWNoIGlzIGEgbWFwcGluZyBvZiB0aGUgcmVxdWVzdCBvcHRpb24gbmFtZSBtYXBwaW5nIHRvIGEKICBmdW5jdGlvbiB0aGF0IGFwcGxpZXMgdGhlIG9wdGlvbiB2YWx1ZSB0byBhIHJlcXVlc3QuCiogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAidGhyb3dJbW1lZGlhdGVseSIgZnJvbSBleGNlcHRpb25zIGFuZCBlcnJvciBldmVudHMuCiAgVGhpcyBjb250cm9sIG1lY2hhbmlzbSB3YXMgdXNlZCB0byBzdG9wIGEgdHJhbnNmZXIgb2YgY29uY3VycmVudCByZXF1ZXN0cwogIGZyb20gY29tcGxldGluZy4gVGhpcyBjYW4gbm93IGJlIGhhbmRsZWQgYnkgdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbiBvciBieQogIGNhbmNlbGxpbmcgYSBwb29sIG9mIHJlcXVlc3RzIG9yIGVhY2ggb3V0c3RhbmRpbmcgZnV0dXJlIHJlcXVlc3QgaW5kaXZpZHVhbGx5LgoqIFVwZGF0ZWQgdG8gIkd1enpsZUh0dHBcU3RyZWFtcyIgMy4wLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpnZXRDb250ZW50cygpYCBubyBsb25nZXIgYWNjZXB0cyBhCiAgICAgIGBtYXhMZW5gIHBhcmFtZXRlci4gVGhpcyB1cGRhdGUgbWFrZXMgdGhlIEd1enpsZSBzdHJlYW1zIHByb2plY3QKICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBTUi03IHByb3Bvc2FsLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpfX2NvbnN0cnVjdGAsCiAgICAgIGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW06OmZhY3RvcnlgLCBhbmQKICAgICAgYEd1enpsZUh0dHBcU3RyZWFtXFV0aWxzOjpjcmVhdGVgIG5vIGxvbmdlciBhY2NlcHQgYSBzaXplIGluIHRoZSBzZWNvbmQKICAgICAgYXJndW1lbnQuIFRoZXkgbm93IGFjY2VwdCBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlCiAgICAgICJzaXplIiBrZXkgYW5kICJtZXRhZGF0YSIga2V5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tIG1ldGFkYXRhLgoKCiMjIDQuMi4yIC0gMjAxNC0wOS0wOAoKKiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBDdXJsQWRhcHRlciB3aGVuIHJldXNpbmcgY1VSTCBoYW5kbGVzLgoqIE5vIGxvbmdlciB1c2luZyBgcmVxdWVzdF9mdWxsdXJpYCBpbiBzdHJlYW0gYWRhcHRlciBwcm94aWVzLgoqIFJlbGF0aXZlIHJlZGlyZWN0cyBhcmUgbm93IGJhc2VkIG9uIHRoZSBsYXN0IHJlc3BvbnNlLCBub3QgdGhlIGZpcnN0IHJlc3BvbnNlLgoKIyMgNC4yLjEgLSAyMDE0LTA4LTE5CgoqIEVuc3VyaW5nIHRoYXQgdGhlIFN0cmVhbUFkYXB0ZXIgZG9lcyBub3QgYWx3YXlzIGFkZCBhIENvbnRlbnQtVHlwZSBoZWFkZXIKKiBBZGRpbmcgYXV0b21hdGVkIGdpdGh1YiByZWxlYXNlcyB3aXRoIGEgcGhhciBhbmQgemlwCgojIyA0LjIuMCAtIDIwMTQtMDgtMTcKCiogTm93IG1lcmdpbmcgaW4gZGVmYXVsdCBvcHRpb25zIHVzaW5nIGEgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgogIENsb3NlcyBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzY3CiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBkZWNvZGUgYENvbnRlbnQtRW5jb2RpbmdgIHJlc3BvbnNlIGJvZGllcwogIHVzaW5nIHRoZSBgZGVjb2RlX2NvbnRlbnRgIHJlcXVlc3Qgb3B0aW9uLiBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdAogIHRvIGRlY29kZSB0aGUgcmVzcG9uc2UgYm9keSBpZiBpdCBjb21lcyBvdmVyIHRoZSB3aXJlIHdpdGggYQogIGBDb250ZW50LUVuY29kaW5nYC4gU2V0IHRoaXMgdmFsdWUgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGRlY29kaW5nIHRoZQogIHJlc3BvbnNlIGNvbnRlbnQsIGFuZCBwYXNzIGEgc3RyaW5nIHRvIHByb3ZpZGUgYSByZXF1ZXN0IGBBY2NlcHQtRW5jb2RpbmdgCiAgaGVhZGVyIGFuZCB0dXJuIG9uIGF1dG9tYXRpYyByZXNwb25zZSBkZWNvZGluZy4gVGhpcyBmZWF0dXJlIG5vdyBhbGxvd3MgeW91CiAgdG8gcGFzcyBhbiBgQWNjZXB0LUVuY29kaW5nYCBoZWFkZXIgaW4gdGhlIGhlYWRlcnMgb2YgYSByZXF1ZXN0IGJ1dCBzdGlsbAogIGRpc2FibGUgYXV0b21hdGljIHJlc3BvbnNlIGRlY29kaW5nLgogIENsb3NlcyBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzY0CiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGltbWVkaWF0ZWx5IHdoZW4gdHJhbnNmZXJyaW5nCiAgcmVxdWVzdHMgaW4gcGFyYWxsZWwuIENsb3NlcyBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzYwCiogVXBkYXRpbmcgZ3V6emxlaHR0cC9zdHJlYW1zIGRlcGVuZGVuY3kgdG8gfjIuMQoqIE5vIGxvbmdlciB1dGlsaXppbmcgdGhlIG5vdyBkZXByZWNhdGVkIG5hbWVzcGFjZWQgbWV0aG9kcyBmcm9tIHRoZSBzdHJlYW0KICBwYWNrYWdlLgoKIyMgNC4xLjggLSAyMDE0LTA4LTE0CgoqIEZpeGVkIGFuIGlzc3VlIGluIHRoZSBDdXJsRmFjdG9yeSB0aGF0IGNhdXNlZCBzZXR0aW5nIHRoZSBgc3RyZWFtPWZhbHNlYAogIHJlcXVlc3Qgb3B0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbi4KICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjkKKiBUcmFuc2FjdGlvbkl0ZXJhdG9yIG5vdyBjYWxscyByZXdpbmQgb24gdGhlIGlubmVyIGl0ZXJhdG9yLgogIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC83NjUKKiBZb3UgY2FuIG5vdyBzZXQgdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlciB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAKICB3aGVuIGNyZWF0aW5nIFBPU1QgcmVxdWVzdHMgdG8gZm9yY2UgbXVsdGlwYXJ0IGJvZGllcy4KICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2OAoKIyMgNC4xLjcgLSAyMDE0LTA4LTA3CgoqIEZpeGVkIGFuIGVycm9yIGluIHRoZSBIaXN0b3J5UGx1Z2luIHRoYXQgY2F1c2VkIHRoZSBzYW1lIHJlcXVlc3QgYW5kIHJlc3BvbnNlCiAgdG8gYmUgbG9nZ2VkIG11bHRpcGxlIHRpbWVzIHdoZW4gYW4gSFRUUCBwcm90b2NvbCBlcnJvciBvY2N1cnMuCiogRW5zdXJpbmcgdGhhdCBjVVJMIGRvZXMgbm90IGFkZCBhIGRlZmF1bHQgQ29udGVudC1UeXBlIHdoZW4gbm8gQ29udGVudC1UeXBlCiAgaGFzIGJlZW4gc3VwcGxpZWQgYnkgdGhlIHVzZXIuIFRoaXMgcHJldmVudHMgdGhlIGFkYXB0ZXIgbGF5ZXIgZnJvbSBtb2RpZnlpbmcKICB0aGUgcmVxdWVzdCB0aGF0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZSBhZnRlciBhbnkgbGlzdGVuZXJzIG1heSBoYXZlIGFscmVhZHkKICBwdXQgdGhlIHJlcXVlc3QgaW4gYSBkZXNpcmVkIHN0YXRlIChlLmcuLCBzaWduZWQgdGhlIHJlcXVlc3QpLgoqIFRocm93aW5nIGFuIGV4Y2VwdGlvbiB3aGVuIHlvdSBhdHRlbXB0IHRvIHNlbmQgcmVxdWVzdHMgdGhhdCBoYXZlIHRoZQogICJzdHJlYW0iIHNldCB0byB0cnVlIGluIHBhcmFsbGVsIHVzaW5nIHRoZSBNdWx0aUFkYXB0ZXIuCiogT25seSBjYWxsaW5nIGN1cmxfbXVsdGlfc2VsZWN0IHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSBjVVJMIGhhbmRsZXMuIFRoaXMgd2FzCiAgcHJldmlvdXNseSBjaGFuZ2VkIGFuZCBjYXVzZWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGR1ZSB0byBQSFAKICBhbHdheXMgc2VsZWN0aW5nIHVudGlsIHRoZSBtYXhpbXVtIHNlbGVjdCB0aW1lb3V0LgoqIEZpeGVkIGEgYnVnIHdoZXJlIG11bHRpcGFydC9mb3JtLWRhdGEgUE9TVCBmaWVsZHMgd2VyZSBub3QgY29ycmVjdGx5CiAgYWdncmVnYXRlZCAoZS5nLiwgdmFsdWVzIHdpdGggIiYiKS4KCiMjIDQuMS42IC0gMjAxNC0wOC0wMwoKKiBBZGRlZCBoZWxwZXIgbWV0aG9kcyB0byBtYWtlIGl0IGVhc2llciB0byByZXByZXNlbnQgbWVzc2FnZXMgYXMgc3RyaW5ncywKICBpbmNsdWRpbmcgZ2V0dGluZyB0aGUgc3RhcnQgbGluZSBhbmQgZ2V0dGluZyBoZWFkZXJzIGFzIGEgc3RyaW5nLgoKIyMgNC4xLjUgLSAyMDE0LTA4LTAyCgoqIEF1dG9tYXRpY2FsbHkgcmV0cnlpbmcgY1VSTCAiQ29ubmVjdGlvbiBkaWVkLCByZXRyeWluZyBhIGZyZXNoIGNvbm5lY3QiCiAgZXJyb3JzIHdoZW4gcG9zc2libGUuCiogY1VSTCBpbXBsZW1lbnRhdGlvbiBjbGVhbnVwCiogQWxsb3dpbmcgbXVsdGlwbGUgZXZlbnQgc3Vic2NyaWJlciBsaXN0ZW5lcnMgdG8gYmUgcmVnaXN0ZXJlZCBwZXIgZXZlbnQgYnkKICBwYXNzaW5nIGFuIGFycmF5IG9mIGFycmF5cyBvZiBsaXN0ZW5lciBjb25maWd1cmF0aW9uLgoKIyMgNC4xLjQgLSAyMDE0LTA3LTIyCgoqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIG11bHRpLXBhcnQgUE9TVCByZXF1ZXN0cyB3aXRoIG1vcmUgdGhhbiBvbmUgZmllbGQgdG8KICBzZXJpYWxpemUgaW5jb3JyZWN0bHkuCiogUGF0aHMgY2FuIG5vdyBiZSBzZXQgdG8gIjAiCiogYFJlc3BvbnNlSW50ZXJmYWNlOjp4bWxgIG5vdyBhY2NlcHRzIGEgYGxpYnhtbF9vcHRpb25zYCBvcHRpb24gYW5kIGFkZGVkIGEKICBtaXNzaW5nIGRlZmF1bHQgYXJndW1lbnQgdGhhdCB3YXMgcmVxdWlyZWQgd2hlbiBwYXJzaW5nIFhNTCByZXNwb25zZSBib2RpZXMuCiogQSBgc2F2ZV90b2Agc3RyZWFtIGlzIG5vdyBjcmVhdGVkIGxhemlseSwgd2hpY2ggbWVhbnMgdGhhdCBmaWxlcyBhcmUgbm90CiAgY3JlYXRlZCBvbiBkaXNrIHVubGVzcyBhIHJlcXVlc3Qgc3VjY2VlZHMuCgojIyA0LjEuMyAtIDIwMTQtMDctMTUKCiogVmFyaW91cyBmaXhlcyB0byBtdWx0aXBhcnQvZm9ybS1kYXRhIFBPU1QgdXBsb2FkcwoqIFdyYXBwaW5nIGZ1bmN0aW9uLnBocCBpbiBhbiBpZi1zdGF0ZW1lbnQgdG8gZW5zdXJlIEd1enpsZSBjYW4gYmUgdXNlZAogIGdsb2JhbGx5IGFuZCBpbiBhIENvbXBvc2VyIGluc3RhbGwKKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIGdlbmVyYXRpbmcgYW5kIG1lcmdpbmcgaW4gZXZlbnRzIHRvIGFuIGV2ZW50IGFycmF5CiogUE9TVCBoZWFkZXJzIGFyZSBvbmx5IGFwcGxpZWQgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0IHRvIGFsbG93IHlvdSB0byBjaGFuZ2UKICB0aGUgcXVlcnkgYWdncmVnYXRvciB1c2VkIGJlZm9yZSB1cGxvYWRpbmcKKiBBZGRlZCBtdWNoIG1vcmUgcm9idXN0IHF1ZXJ5IHN0cmluZyBwYXJzaW5nCiogRml4ZWQgdmFyaW91cyBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uIGlzc3VlcyB3aXRoIFVSTHMKKiBGaXhpbmcgYW4gaXNzdWUgd2hlcmUgbXVsdGktdmFsdWVkIGhlYWRlcnMgd2VyZSBub3QgYmVpbmcgdXRpbGl6ZWQgY29ycmVjdGx5CiAgaW4gdGhlIFN0cmVhbUFkYXB0ZXIKCiMjIDQuMS4yIC0gMjAxNC0wNi0xOAoKKiBBZGRlZCBzdXBwb3J0IGZvciBzZW5kaW5nIHBheWxvYWRzIHdpdGggR0VUIHJlcXVlc3RzCgojIyA0LjEuMSAtIDIwMTQtMDYtMDgKCiogRml4ZWQgYW4gaXNzdWUgcmVsYXRlZCB0byB1c2luZyBjdXN0b20gbWVzc2FnZSBmYWN0b3J5IG9wdGlvbnMgaW4gc3ViY2xhc3NlcwoqIEZpeGVkIGFuIGlzc3VlIHdpdGggbmVzdGVkIGZvcm0gZmllbGRzIGluIGEgbXVsdGktcGFydCBQT1NUCiogRml4ZWQgYW4gaXNzdWUgd2l0aCB1c2luZyB0aGUgYGpzb25gIHJlcXVlc3Qgb3B0aW9uIGZvciBQT1NUIHJlcXVlc3RzCiogQWRkZWQgYFRvQXJyYXlJbnRlcmZhY2VgIHRvIGBHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXJgCgojIyA0LjEuMCAtIDIwMTQtMDUtMjcKCiogQWRkZWQgYSBganNvbmAgcmVxdWVzdCBvcHRpb24gdG8gZWFzaWx5IHNlcmlhbGl6ZSBKU09OIHBheWxvYWRzLgoqIEFkZGVkIGEgYEd1enpsZUh0dHBcanNvbl9kZWNvZGUoKWAgd3JhcHBlciB0byBzYWZlbHkgcGFyc2UgSlNPTi4KKiBBZGRlZCBgc2V0UG9ydCgpYCBhbmQgYGdldFBvcnQoKWAgdG8gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlYC4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBwcm92aWRlIGFuIGVtaXR0ZXIgdG8gYSBjbGllbnQgaW4gdGhlIGNsaWVudCBjb25zdHJ1Y3Rvci4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBwZXJzaXN0IGEgY29va2llIHNlc3Npb24gdXNpbmcgJF9TRVNTSU9OLgoqIEFkZGVkIGEgdHJhaXQgdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzIHRvIGFuIGl0ZXJhdG9yLgoqIFJlbW92ZWQgcmVxdWVzdCBtZXRob2QgY29uc3RhbnRzIGZyb20gUmVxdWVzdEludGVyZmFjZS4KKiBGaXhlZCB3YXJuaW5nIHdoZW4gaW52YWxpZCByZXF1ZXN0IHN0YXJ0LWxpbmVzIGFyZSByZWNlaXZlZC4KKiBVcGRhdGVkIE1lc3NhZ2VGYWN0b3J5IHRvIHdvcmsgd2l0aCBjdXN0b20gcmVxdWVzdCBvcHRpb24gbWV0aG9kcy4KKiBVcGRhdGVkIGNhY2VydCBidW5kbGUgdG8gbGF0ZXN0IGJ1aWxkLgoKNC4wLjIgKDIwMTQtMDQtMTYpCi0tLS0tLS0tLS0tLS0tLS0tLQoKKiBQcm94eSByZXF1ZXN0cyB1c2luZyB0aGUgU3RyZWFtQWRhcHRlciBub3cgcHJvcGVybHkgdXNlIHJlcXVlc3RfZnVsbHVyaSAoIzYzMikKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgc2NhbGFycyBhcyBQT1NUIGZpZWxkcyAoIzYyOCkKCiMjIDQuMC4xIC0gMjAxNC0wNC0wNAoKKiBUaGUgSFRUUCBzdGF0dXMgY29kZSBvZiBhIHJlc3BvbnNlIGlzIG5vdyBzZXQgYXMgdGhlIGV4Y2VwdGlvbiBjb2RlIG9mCiAgUmVxdWVzdEV4Y2VwdGlvbiBvYmplY3RzLgoqIDMwMyByZWRpcmVjdHMgd2lsbCBub3cgY29ycmVjdGx5IHN3aXRjaCBmcm9tIFBPU1QgdG8gR0VUIHJlcXVlc3RzLgoqIFRoZSBkZWZhdWx0IHBhcmFsbGVsIGFkYXB0ZXIgb2YgYSBjbGllbnQgbm93IGNvcnJlY3RseSB1c2VzIHRoZSBNdWx0aUFkYXB0ZXIuCiogSGFzRGF0YVRyYWl0IG5vdyBpbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgZGF0YSBhcnJheSBhcyBhbiBlbXB0eSBhcnJheSBzbwogIHRoYXQgdGhlIHRvQXJyYXkoKSBtZXRob2QgYWx3YXlzIHJldHVybnMgYW4gYXJyYXkuCgojIyA0LjAuMCAtIDIwMTQtMDMtMjkKCiogRm9yIGluZm9ybWF0aW9uIG9uIGNoYW5nZXMgYW5kIHVwZ3JhZGluZywgc2VlOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvNC54L1VQR1JBRElORy5tZCMzeC10by00MAoqIEFkZGVkIGBHdXp6bGVIdHRwXGJhdGNoKClgIGFzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHNlbmRpbmcgcmVxdWVzdHMgaW4KICBwYXJhbGxlbCB3aXRob3V0IG5lZWRpbmcgdG8gd3JpdGUgYXN5bmNocm9ub3VzIGNvZGUuCiogUmVzdHJ1Y3R1cmVkIGhvdyBldmVudHMgYXJlIGFkZGVkIHRvIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6c2VuZEFsbCgpYC4KICBZb3UgY2FuIG5vdyBwYXNzIGEgY2FsbGFibGUgb3IgYW4gYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIGVhY2gKICBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWlucyB0aGUgImZuIiwgInByaW9yaXR5IiwgYW5kICJvbmNlIiBrZXlzLgoKIyMgNC4wLjAucmMtMiAtIDIwMTQtMDMtMjUKCiogUmVtb3ZlZCBgZ2V0Q29uZmlnKClgIGFuZCBgc2V0Q29uZmlnKClgIGZyb20gY2xpZW50cyB0byBhdm9pZCBjb25mdXNpb24KICBhcm91bmQgd2hldGhlciB0aGluZ3MgbGlrZSBiYXNlX3VybCwgbWVzc2FnZV9mYWN0b3J5LCBldGMuIHNob3VsZCBiZSBhYmxlIHRvCiAgYmUgcmV0cmlldmVkIG9yIG1vZGlmaWVkLgoqIEFkZGVkIGBnZXREZWZhdWx0T3B0aW9uKClgIGFuZCBgc2V0RGVmYXVsdE9wdGlvbigpYCB0byBDbGllbnRJbnRlcmZhY2UKKiBmdW5jdGlvbnMucGhwIGZ1bmN0aW9ucyB3ZXJlIHJlbmFtZWQgdXNpbmcgc25ha2VfY2FzZSB0byBtYXRjaCBQSFAgaWRpb21zCiogQWRkZWQgc3VwcG9ydCBmb3IgYEhUVFBfUFJPWFlgLCBgSFRUUFNfUFJPWFlgLCBhbmQKICBgR1VaWkxFX0NVUkxfU0VMRUNUX1RJTUVPVVRgIGVudmlyb25tZW50IHZhcmlhYmxlcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgY3VzdG9tIGBzZW5kQWxsKClgIGV2ZW50IHByaW9yaXRpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBzdHJlYW0gY29udGV4dCBvcHRpb25zIHRvIHRoZSBzdHJlYW0KICBhZGFwdGVyLgoqIEFkZGVkIGEgZnVuY3Rpb25zLnBocCBmdW5jdGlvbiBmb3IgYGdldF9wYXRoKClgIGFuZCBgc2V0X3BhdGgoKWAKKiBDdXJsQWRhcHRlciBhbmQgTXVsdGlBZGFwdGVyIG5vdyB1c2UgYSBjYWxsYWJsZSB0byBnZW5lcmF0ZSBjdXJsIHJlc291cmNlcwoqIE1vY2tBZGFwdGVyIG5vdyBwcm9wZXJseSByZWFkcyBhIGJvZHkgYW5kIGVtaXRzIGEgYGhlYWRlcnNgIGV2ZW50CiogVXBkYXRlZCBVcmwgY2xhc3MgdG8gY2hlY2sgaWYgYSBzY2hlbWUgYW5kIGhvc3QgYXJlIHNldCBiZWZvcmUgYWRkaW5nICI6IgogIGFuZCAiLy8iLiBUaGlzIGFsbG93cyBlbXB0eSBVcmwgKGUuZy4sICIiKSB0byBiZSBzZXJpYWxpemVkIGFzICIiLgoqIFBhcnNpbmcgaW52YWxpZCBYTUwgbm8gbG9uZ2VyIGVtaXRzIHdhcm5pbmdzCiogQ3VybCBjbGFzc2VzIG5vdyBwcm9wZXJseSB0aHJvdyBBZGFwdGVyRXhjZXB0aW9ucwoqIFZhcmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucwoqIFN0cmVhbXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgZmFzdGVyIGBTdHJlYW1cY3JlYXRlKClgIGZ1bmN0aW9uCiogTWFya2VkIGRlcHJlY2F0aW9uX3Byb3h5KCkgYXMgaW50ZXJuYWwKKiBUZXN0IHNlcnZlciBpcyBub3cgYSBjb2xsZWN0aW9uIG9mIHN0YXRpYyBtZXRob2RzIG9uIGEgY2xhc3MKCiMjIDQuMC4wLXJjLjEgLSAyMDE0LTAzLTE1CgoqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9ibG9iLzQueC9VUEdSQURJTkcubWQjM3gtdG8tNDAKCiMjIDMuOC4xIC0gMjAxNC0wMS0yOAoKKiBCdWc6IEFsd2F5cyB1c2luZyBHRVQgcmVxdWVzdHMgd2hlbiByZWRpcmVjdGluZyBmcm9tIGEgMzAzIHJlc3BvbnNlCiogQnVnOiBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIGlzIG5vdyBjb3JyZWN0bHkgc2V0IHRvIGZhbHNlIHdoZW4gc2V0dGluZyBgJGNlcnRpZmljYXRlQXV0aG9yaXR5YCB0byBmYWxzZSBpbgogIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFNzbFZlcmlmaWNhdGlvbigpYAoqIEJ1ZzogUmVkaXJlY3RQbHVnaW4gbm93IHVzZXMgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2Ugd2hlbiBjb21iaW5pbmcgYSBiYXNlIFVSTCB3aXRoIGEgcmVsYXRpdmUgVVJMCiogQnVnOiBUaGUgYm9keSBvZiBhIHJlcXVlc3QgY2FuIG5vdyBiZSBzZXQgdG8gYCIwImAKKiBTZW5kaW5nIFBIUCBzdHJlYW0gcmVxdWVzdHMgbm8gbG9uZ2VyIGZvcmNlcyBgSFRUUC8xLjBgCiogQWRkaW5nIG1vcmUgaW5mb3JtYXRpb24gdG8gRXhjZXB0aW9uQ29sbGVjdGlvbiBleGNlcHRpb25zIHNvIHRoYXQgdXNlcnMgaGF2ZSBtb3JlIGNvbnRleHQsIGluY2x1ZGluZyBhIHN0YWNrIHRyYWNlIG9mCiAgZWFjaCBzdWItZXhjZXB0aW9uCiogVXBkYXRlZCB0aGUgYCRyZWZgIGF0dHJpYnV0ZSBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyB0byBtZXJnZSBvdmVyIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIG9mIGEgc2NoZW1hIChyYXRoZXIgdGhhbgogIGNsb2JiZXJpbmcgZXZlcnl0aGluZykuCiogTWVyZ2luZyBVUkxzIHdpbGwgbm93IHVzZSB0aGUgcXVlcnkgc3RyaW5nIG9iamVjdCBmcm9tIHRoZSByZWxhdGl2ZSBVUkwgKHRodXMgYWxsb3dpbmcgY3VzdG9tIHF1ZXJ5IGFnZ3JlZ2F0b3JzKQoqIFF1ZXJ5IHN0cmluZ3MgYXJlIG5vdyBwYXJzZWQgaW4gYSB3YXkgdGhhdCB0aGV5IGRvIG5vIGNvbnZlcnQgZW1wdHkga2V5cyB3aXRoIG5vIHZhbHVlIHRvIGhhdmUgYSBkYW5nbGluZyBgPWAuCiAgRm9yIGV4YW1wbGUgYGZvbyZiYXI9YmF6YCBpcyBub3cgY29ycmVjdGx5IHBhcnNlZCBhbmQgcmVjb2duaXplZCBhcyBgZm9vJmJhcj1iYXpgIHJhdGhlciB0aGFuIGBmb289JmJhcj1iYXpgLgoqIE5vdyBwcm9wZXJseSBlc2NhcGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGRlbGltaXRlciB3aGVuIG1hdGNoaW5nIENvb2tpZSBkb21haW5zLgoqIE5ldHdvcmsgYWNjZXNzIGlzIG5vdyBkaXNhYmxlZCB3aGVuIGxvYWRpbmcgWE1MIGRvY3VtZW50cwoKIyMgMy44LjAgLSAyMDEzLTEyLTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhIFBPU1QgbmFtZSBmb3IgYSBmaWxlCiogSlNPTiByZXNwb25zZSBwYXJzaW5nIG5vdyBwcm9wZXJseSB3YWxrcyBhZGRpdGlvbmFsUHJvcGVydGllcwoqIGNVUkwgZXJyb3IgY29kZSAxOCBpcyBub3cgcmV0cmllZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBCYWNrb2ZmUGx1Z2luCiogRml4ZWQgYSBjVVJMIGVycm9yIHdoZW4gVVJMcyBjb250YWluIGZyYWdtZW50cwoqIEZpeGVkIGFuIGlzc3VlIGluIHRoZSBCYWNrb2ZmUGx1Z2luIHJldHJ5IGV2ZW50IHdoZXJlIGl0IHdhcyB0cnlpbmcgdG8gYWNjZXNzIGFsbCBleGNlcHRpb25zIGFzIGlmIHRoZXkgd2VyZQogIEN1cmxFeGNlcHRpb25zCiogQ1VSTE9QVF9QUk9HUkVTUyBmdW5jdGlvbiBmaXggZm9yIFBIUCA1LjUgKDY5ZmNjMWUpCiogQWRkZWQgdGhlIGFiaWxpdHkgZm9yIEd1enpsZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY1VSTCB0aGF0IGRvIG5vdCBzdXBwb3J0IGBDVVJMT1BUX1RJTUVPVVRfTVNgCiogRml4ZWQgYSBidWcgdGhhdCB3YXMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIGVtcHR5IGhlYWRlciBwYXJhbWV0ZXJzCiogVXJpVGVtcGxhdGUgbm93IGhhcyBhIGBzZXRSZWdleCgpYCBtZXRob2QgdG8gbWF0Y2ggdGhlIGRvY3MKKiBUaGUgYGRlYnVnYCByZXF1ZXN0IHBhcmFtZXRlciBub3cgY2hlY2tzIGlmIGl0IGlzIHRydXRoeSByYXRoZXIgdGhhbiBpZiBpdCBleGlzdHMKKiBTZXR0aW5nIHRoZSBgZGVidWdgIHJlcXVlc3QgcGFyYW1ldGVyIHRvIHRydWUgc2hvd3MgdmVyYm9zZSBjVVJMIG91dHB1dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBMb2dQbHVnaW4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjb21iaW5lIFVSTHMgdXNpbmcgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2UKKiBDb21tYW5kIG9iamVjdHMgY2FuIG5vdyByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3JzIGVuY291bnRlcmVkIGJ5IHRoZSBjb21tYW5kCiogVmFyaW91cyBmaXhlcyB0byBjYWNoZSByZXZhbGlkYXRpb24gKCM0MzcgYW5kIDI5Nzk3ZTUpCiogVmFyaW91cyBmaXhlcyB0byB0aGUgQXN5bmNQbHVnaW4KKiBDbGVhbmVkIHVwIGJ1aWxkIHNjcmlwdHMKCiMjIDMuNy40IC0gMjAxMy0xMC0wMgoKKiBCdWcgZml4OiAwIGlzIG5vdyBhbiBhbGxvd2VkIHZhbHVlIGluIGEgZGVzY3JpcHRpb24gcGFyYW1ldGVyIHRoYXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSAoIzQzMCkKKiBCdWcgZml4OiBTY2hlbWFGb3JtYXR0ZXIgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGVuIGZvcm1hdHRpbmcgdG8gYSBVbml4IHRpbWVzdGFtcAogIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLXBocC9pc3N1ZXMvMTQ3KQoqIEJ1ZyBmaXg6IENsZWFuZWQgdXAgYW5kIGZpeGVkIFVSTCBkb3Qgc2VnbWVudCByZW1vdmFsIHRvIHByb3Blcmx5IHJlc29sdmUgaW50ZXJuYWwgZG90cwoqIE1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IHByb3Blcmx5IHNwZWNpZmllZCBhcyA1LjMuMyAodXAgZnJvbSA1LjMuMikgKCM0MjApCiogVXBkYXRlZCB0aGUgYnVuZGxlZCBjYWNlcnQucGVtICgjNDE5KQoqIE9hdXRoUGx1Z2luIG5vdyBzdXBwb3J0cyBhZGRpbmcgYXV0aGVudGljYXRpb24gdG8gaGVhZGVycyBvciBxdWVyeSBzdHJpbmcgKCM0MjUpCgojIyAzLjcuMyAtIDIwMTMtMDktMDgKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gZ2V0IHRoZSBleGNlcHRpb24gYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC9jb21tYW5kIHdoZW4gdXNpbmcgYE11bHRpVHJhbnNmZXJFeGNlcHRpb25gIGFuZAogIGBDb21tYW5kVHJhbnNmZXJFeGNlcHRpb25gLgoqIFNldHRpbmcgYGFkZGl0aW9uYWxQYXJhbWV0ZXJzYCBvZiBhIHJlc3BvbnNlIHRvIGZhbHNlIGlzIG5vdyBob25vcmVkIHdoZW4gcGFyc2luZyByZXNwb25zZXMgd2l0aCBhIHNlcnZpY2UgZGVzY3JpcHRpb24KKiBTY2hlbWFzIGFyZSBvbmx5IGluamVjdGVkIGludG8gcmVzcG9uc2UgbW9kZWxzIHdoZW4gZXhwbGljaXRseSBjb25maWd1cmVkLgoqIE5vIGxvbmdlciBndWVzc2luZyBDb250ZW50LVR5cGUgYmFzZWQgb24gdGhlIHBhdGggb2YgYSByZXF1ZXN0LiBDb250ZW50LVR5cGUgaXMgbm93IG9ubHkgZ3Vlc3NlZCBiYXNlZCBvbiB0aGUgcGF0aCBvZgogIGFuIEVudGl0eUJvZHkuCiogQnVnIGZpeDogQ2h1bmtlZEl0ZXJhdG9yIGNhbiBub3cgcHJvcGVybHkgY2h1bmsgYSBcVHJhdmVyc2FibGUgYXMgd2VsbCBhcyBhbiBcSXRlcmF0b3IuCiogQnVnIGZpeDogRmlsdGVySXRlcmF0b3Igbm93IHJlbGllcyBvbiBgXEl0ZXJhdG9yYCBpbnN0ZWFkIG9mIGBcVHJhdmVyc2FibGVgLgoqIEJ1ZyBmaXg6IEdyYWNlZnVsbHkgaGFuZGxpbmcgbWFsZm9ybWVkIHJlc3BvbnNlcyBpbiBSZXF1ZXN0TWVkaWF0b3I6OndyaXRlUmVzcG9uc2VCb2R5KCkKKiBCdWcgZml4OiBSZXBsYWNlZCBjYWxsIHRvIGNhbkNhY2hlIHdpdGggY2FuQ2FjaGVSZXF1ZXN0IGluIHRoZSBDYWxsYmFja0NhbkNhY2hlU3RyYXRlZ3kgb2YgdGhlIENhY2hlUGx1Z2luCiogQnVnIGZpeDogVmlzaXRpbmcgWE1MIGF0dHJpYnV0ZXMgZmlyc3QgYmVmb3JlIHZpc2l0aW5nIFhNTCBjaGlsZHJlbiB3aGVuIHNlcmlhbGl6aW5nIHJlcXVlc3RzCiogQnVnIGZpeDogUHJvcGVybHkgcGFyc2luZyBoZWFkZXJzIHRoYXQgY29udGFpbiBjb21tYXMgY29udGFpbmVkIGluIHF1b3RlcwoqIEJ1ZyBmaXg6IG1pbWV0eXBlIGd1ZXNzaW5nIGJhc2VkIG9uIGEgZmlsZW5hbWUgaXMgbm93IGNhc2UtaW5zZW5zaXRpdmUKCiMjIDMuNy4yIC0gMjAxMy0wOC0wMgoKKiBCdWcgZml4OiBQcm9wZXJseSBVUkwgZW5jb2RpbmcgcGF0aHMgd2hlbiB1c2luZyB0aGUgUEhQLW9ubHkgdmVyc2lvbiBvZiB0aGUgVXJpVGVtcGxhdGUgZXhwYW5kZXIKICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzM3MQoqIEJ1ZyBmaXg6IENvb2tpZSBkb21haW5zIGFyZSBub3cgbWF0Y2hlZCBjb3JyZWN0bHkgYWNjb3JkaW5nIHRvIFJGQyA2MjY1CiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzcKKiBCdWcgZml4OiBHRVQgcGFyYW1ldGVycyBhcmUgbm93IHVzZWQgd2hlbiBjYWxjdWxhdGluZyBhbiBPQXV0aCBzaWduYXR1cmUKKiBCdWcgZml4OiBGaXhlZCBhbiBpc3N1ZSB3aXRoIGNhY2hlIHJldmFsaWRhdGlvbiB3aGVyZSB0aGUgSWYtTm9uZS1NYXRjaCBoZWFkZXIgd2FzIGJlaW5nIGRvdWJsZSBxdW90ZWQKKiBgR3V6emxlXENvbW1vblxBYnN0cmFjdEhhc0Rpc3BhdGNoZXI6OmRpc3BhdGNoKClgIG5vdyByZXR1cm5zIHRoZSBldmVudCB0aGF0IHdhcyBkaXNwYXRjaGVkCiogYEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nOjpmYWN0b3J5KClgIG5vdyBndWVzc2VzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHF1ZXJ5IGFnZ3JlZ2F0b3IgdG8gdXNlZCBiYXNlZCBvbiB0aGUgaW5wdXQuCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzkKKiBBZGRlZCBhIHdheSB0byBhZGQgY3VzdG9tIGRvbWFpbiBvYmplY3RzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyc2luZyB1c2luZyB0aGUgYG9wZXJhdGlvbi5wYXJzZV9jbGFzc2AgZXZlbnQuIFNlZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMzgwCiogY1VSTCBtdWx0aSBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb25zCgojIyAzLjcuMSAtIDIwMTMtMDctMDUKCiogQnVnIGZpeDogU2V0dGluZyBkZWZhdWx0IG9wdGlvbnMgb24gYSBjbGllbnQgbm93IHdvcmtzCiogQnVnIGZpeDogU2V0dGluZyBvcHRpb25zIG9uIEhFQUQgcmVxdWVzdHMgbm93IHdvcmtzLiBTZWUgIzM1MgoqIEJ1ZyBmaXg6IE1vdmluZyBzdHJlYW0gZmFjdG9yeSBiZWZvcmUgc2VuZCBldmVudCB0byBiZWZvcmUgYnVpbGRpbmcgdGhlIHN0cmVhbS4gU2VlICMzNTMKKiBCdWcgZml4OiBDb29raWVzIG5vIGxvbmdlciBtYXRjaCBvbiBJUCBhZGRyZXNzZXMgcGVyIFJGQyA2MjY1CiogQnVnIGZpeDogQ29ycmVjdGx5IHBhcnNpbmcgaGVhZGVyIHBhcmFtZXRlcnMgdGhhdCBhcmUgaW4gYDw+YCBhbmQgcXVvdGVzCiogQWRkZWQgYGNlcnRgIGFuZCBgc3NsX2tleWAgYXMgcmVxdWVzdCBvcHRpb25zCiogYEhvc3RgIGhlYWRlciBjYW4gbm93IGRpdmVyZ2UgZnJvbSB0aGUgaG9zdCBwYXJ0IG9mIGEgVVJMIGlmIHRoZSBoZWFkZXIgaXMgc2V0IG1hbnVhbGx5CiogYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcTG9jYXRpb25WaXNpdG9yXFJlcXVlc3RcWG1sVmlzaXRvcmAgd2FzIHJld3JpdHRlbiB0byBjaGFuZ2UgZnJvbSB1c2luZyBTaW1wbGVYTUwgdG8gWE1MV3JpdGVyCiogT0F1dGggcGFyYW1ldGVycyBhcmUgb25seSBhZGRlZCB2aWEgdGhlIHBsdWdpbiBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IHNldAoqIEV4Y2VwdGlvbnMgYXJlIG5vdyB0aHJvd24gd2hlbiBhIFVSTCBjYW5ub3QgYmUgcGFyc2VkCiogUmV0dXJuaW5nIGBmYWxzZWAgaWYgYEd1enpsZVxIdHRwXEVudGl0eUJvZHk6OmdldENvbnRlbnRNZDUoKWAgZmFpbHMKKiBOb3Qgc2V0dGluZyBhIGBDb250ZW50LU1ENWAgb24gYSBjb21tYW5kIGlmIGNhbGN1bGF0aW5nIHRoZSBDb250ZW50LU1ENSBmYWlscyB2aWEgdGhlIENvbW1hbmRDb250ZW50TWQ1UGx1Z2luCgojIyAzLjcuMCAtIDIwMTMtMDYtMTAKCiogU2VlIFVQR1JBRElORy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXBncmFkZS4KKiBSZXF1ZXN0cyBub3cgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGFuIGFycmF5IG9mICRvcHRpb25zIHdoZW4gY3JlYXRpbmcgYSByZXF1ZXN0IHRvIG1vcmUgZWFzaWx5IG1vZGlmeSBhCiAgcmVxdWVzdC4gWW91IGNhbiBwYXNzIGEgJ3JlcXVlc3Qub3B0aW9ucycgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvIGEgY2xpZW50IHRvIGFwcGx5IGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIHRvCiAgZXZlcnkgcmVxdWVzdCBjcmVhdGVkIGJ5IGEgY2xpZW50IChlLmcuIGRlZmF1bHQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgaGVhZGVycywgY3VybCBvcHRpb25zLCBldGMuKS4KKiBBZGRlZCBhIHN0YXRpYyBmYWNhZGUgY2xhc3MgdGhhdCBhbGxvd3MgeW91IHRvIHVzZSBHdXp6bGUgd2l0aCBzdGF0aWMgbWV0aG9kcyBhbmQgbW91bnQgdGhlIGNsYXNzIHRvIGBcR3V6emxlYC4KICBTZWUgYEd1enpsZVxIdHRwXFN0YXRpY0NsaWVudDo6bW91bnRgLgoqIEFkZGVkIGBjb21tYW5kLnJlcXVlc3Rfb3B0aW9uc2AgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kYCB0byBwYXNzIHJlcXVlc3Qgb3B0aW9ucyB0byByZXF1ZXN0cwogICAgICBjcmVhdGVkIGJ5IGEgY29tbWFuZCAoZS5nLiBjdXN0b20gaGVhZGVycywgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgdGltZW91dCBzZXR0aW5ncywgZXRjLikuCiogU3RyZWFtIHNpemUgaW4gYEd1enpsZVxTdHJlYW1cUGhwU3RyZWFtUmVxdWVzdEZhY3RvcnlgIHdpbGwgbm93IGJlIHNldCBpZiBDb250ZW50LUxlbmd0aCBpcyByZXR1cm5lZCBpbiB0aGUKICBoZWFkZXJzIG9mIGEgcmVzcG9uc2UKKiBBZGRlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpzZXRQYXRoKCRwYXRoLCAkdmFsdWUpYCB0byBzZXQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IHVzaW5nIGEgbmVzdGVkIGtleQogIChlLmcuIGAkY29sbGVjdGlvbi0+c2V0UGF0aCgnZm9vL2Jhei9iYXInLCAndGVzdCcpOyBlY2hvICRjb2xsZWN0aW9uWydmb28nXVsnYmFyJ11bJ2JhciddO2ApCiogU2VydmljZUJ1aWxkZXJzIG5vdyBzdXBwb3J0IHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgYXJiaXRyYXJ5IGRhdGEKKiBDYWNoZVBsdWdpbiBjYW4gbm93IHB1cmdlIGFsbCByZXNvdXJjZXMgZm9yIGEgZ2l2ZW4gVVJJCiogQ2FjaGVQbHVnaW4gY2FuIGF1dG9tYXRpY2FsbHkgcHVyZ2UgbWF0Y2hpbmcgY2FjaGVkIGl0ZW1zIHdoZW4gYSBub24taWRlbXBvdGVudCByZXF1ZXN0IGlzIHNlbnQgdG8gYSByZXNvdXJjZQoqIENhY2hlUGx1Z2luIG5vdyB1c2VzIHRoZSBWYXJ5IGhlYWRlciB0byBkZXRlcm1pbmUgaWYgYSByZXNvdXJjZSBpcyBhIGNhY2hlIGhpdAoqIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlYCBub3cgaW1wbGVtZW50cyBgXFNlcmlhbGl6YWJsZWAKKiBBZGRlZCBgR3V6emxlXENhY2hlXENhY2hlQWRhcHRlckZhY3Rvcnk6OmZyb21DYWNoZSgpYCB0byBtb3JlIGVhc2lseSBjcmVhdGUgY2FjaGUgYWRhcHRlcnMKKiBgR3V6emxlXFNlcnZpY2VcQ2xpZW50SW50ZXJmYWNlOjpleGVjdXRlKClgIG5vdyBhY2NlcHRzIGFuIGFycmF5LCBzaW5nbGUgY29tbWFuZCwgb3IgVHJhdmVyc2FibGUKKiBGaXhlZCBhIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXJcTGluazo6YWRkTGluaygpYAoqIEJldHRlciBoYW5kbGluZyBvZiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiBhIHN0cmVhbSBpbiBgR3V6emxlXFN0cmVhbVxTdHJlYW1gIHVzaW5nIGZzdGF0KCkgYW5kIGNhY2hpbmcgdGhlIHNpemUKKiBgR3V6emxlXENvbW1vblxFeGNlcHRpb25cRXhjZXB0aW9uQ29sbGVjdGlvbmAgbm93IGNyZWF0ZXMgYSBtb3JlIHJlYWRhYmxlIGV4Y2VwdGlvbiBtZXNzYWdlCiogRml4aW5nIEJDIGJyZWFrOiBBZGRlZCBiYWNrIHRoZSBNb25vbG9nTG9nQWRhcHRlciBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHRlbmRpbmcgZnJvbSBQc3JMb2cgc28gdGhhdCBvbGRlcgogIFN5bWZvbnkgdXNlcnMgY2FuIHN0aWxsIHVzZSB0aGUgb2xkIHZlcnNpb24gb2YgTW9ub2xvZy4KKiBGaXhpbmcgQkMgYnJlYWs6IEFkZGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBiYWNrIGluIGZvciBgR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2U6OmdldFRva2VuaXplZEhlYWRlcigpYC4KICBOb3cgdHJpZ2dlcmluZyBhbiBFX1VTRVJfREVQUkVDQVRFRCB3YXJuaW5nIHdoZW4gdXNlZC4gVXNlIGAkbWVzc2FnZS0+Z2V0SGVhZGVyKCktPnBhcnNlUGFyYW1zKClgLgoqIFNldmVyYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHRvIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb25gCiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlYDoKICBjcmVhdGVSZXF1ZXN0LCBoZWFkLCBkZWxldGUsIHB1dCwgcGF0Y2gsIHBvc3QsIG9wdGlvbnMsIHByZXBhcmVSZXF1ZXN0CiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U6OmNyZWF0ZVJlcXVlc3QoKWAKKiBBZGRlZCBhbiBgYXBwbHlPcHRpb25zKClgIG1ldGhvZCB0byBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlYAoqIENoYW5nZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRib2R5ID0gbnVsbClgIHRvCiAgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRvcHRpb25zID0gYXJyYXkoKSlgLiBZb3UgY2FuIHN0aWxsIHBhc3MgaW4gYQogIHJlc291cmNlLCBzdHJpbmcsIG9yIEVudGl0eUJvZHkgaW50byB0aGUgJG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGRvd25sb2FkIGxvY2F0aW9uIG9mIHRoZSByZXNwb25zZS4KKiBDaGFuZ2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246Ol9fY29uc3RydWN0KCRkYXRhKWAgdG8gbm8gbG9uZ2VyIGFjY2VwdHMgYSBudWxsIHZhbHVlIGZvciBgJGRhdGFgIGJ1dCBhCiAgZGVmYXVsdCBgYXJyYXkoKWAKKiBBZGRlZCBgR3V6emxlXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OmlzUmVwZWF0YWJsZWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldERlZmF1bHRIZWFkZXJzKCkuIFVzZQogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLiBvcgogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYC4KKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRIZWFkZXJzKCkuIFVzZSAkY2xpZW50LT5nZXRDb25maWcoKS0+Z2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnKWAuCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpleHBhbmRUZW1wbGF0ZSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0UmVxdWVzdEZhY3RvcnkoKWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldEN1cmxNdWx0aSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6Y2FuQ2FjaGVgCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpzZXRJc1JlZGlyZWN0YAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6aXNSZWRpcmVjdGAKKiBNYWRlIGBHdXp6bGVcSHR0cFxDbGllbnQ6OmV4cGFuZFRlbXBsYXRlYCBhbmQgYGdldFVyaVRlbXBsYXRlYCBwcm90ZWN0ZWQgbWV0aG9kcy4KKiBZb3UgY2FuIG5vdyBlbmFibGUgRV9VU0VSX0RFUFJFQ0FURUQgd2FybmluZ3MgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgYSBkZXByZWNhdGVkIG1ldGhvZCBieSBzZXR0aW5nCiAgYEd1enpsZVxDb21tb25cVmVyc2lvbjo6JGVtaXRXYXJuaW5nc2AgdG8gdHJ1ZS4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZXNwb25zZUJvZHlSZXBlYXRhYmxlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZQogICAgICBgJHJlcXVlc3QtPmdldFJlc3BvbnNlQm9keSgpLT5pc1JlcGVhdGFibGUoKWAgaW5zdGVhZC4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlCiAgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpjYW5DYWNoZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UKICBgR3V6emxlXFBsdWdpblxDYWNoZVxEZWZhdWx0Q2FuQ2FjaGVTdHJhdGVneS0+Y2FuQ2FjaGVSZXF1ZXN0KClgIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldElzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcQ2FjaGVcQ2FjaGVBZGFwdGVyRmFjdG9yeTo6ZmFjdG9yeSgpYCBhcyBkZXByZWNhdGVkCiogTWFya2VkICdjb21tYW5kLmhlYWRlcnMnLCAnY29tbWFuZC5yZXNwb25zZV9ib2R5JyBhbmQgJ2NvbW1hbmQub25fY29tcGxldGUnIGFzIGRlcHJlY2F0ZWQgZm9yIEFic3RyYWN0Q29tbWFuZC4KICBUaGVzZSB3aWxsIHdvcmsgdGhyb3VnaCBHdXp6bGUgNC4wCiogTWFya2VkICdyZXF1ZXN0LnBhcmFtcycgZm9yIGBHdXp6bGVcSHR0cFxDbGllbnRgIGFzIGRlcHJlY2F0ZWQuIFVzZSBbcmVxdWVzdC5vcHRpb25zXVtwYXJhbXNdLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjplbmFibGVNYWdpY01ldGhvZHMoKWAgYXMgZGVwcmVjYXRlZC4gTWFnaWMgbWV0aG9kcyBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIG9uIGEgR3V6emxlXFNlcnZpY2VcQ2xpZW50LgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpnZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPmdldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJylgLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpzZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuCiogTWFya2VkIGBHdXp6bGVcUGFyc2VyXFVybFxVcmxQYXJzZXJgIGFzIGRlcHJlY2F0ZWQuIEp1c3QgdXNlIFBIUCdzIGBwYXJzZV91cmwoKWAgYW5kIHBlcmNlbnQgZW5jb2RlIHlvdXIgVVRGLTguCiogTWFya2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdCgpYCBhcyBkZXByZWNhdGVkLgoqIE1hcmtlZCBgR3V6emxlXFBsdWdpblxDdXJsQXV0aFxDdXJsQXV0aFBsdWdpbmAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2F1dGgnLCBhcnJheSgndXNlcicsICdwYXNzJywgJ0Jhc2ljfERpZ2VzdCcpO2AKKiBDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlIGFuZCBEZWZhdWx0Q2FjaGVLZXlQcm92aWRlciBhcmUgbm8gbG9uZ2VyIHVzZWQuIEFsbCBvZiB0aGlzIGxvZ2ljIGlzIGhhbmRsZWQgaW4gYQogIENhY2hlU3RvcmFnZUludGVyZmFjZS4gVGhlc2UgdHdvIG9iamVjdHMgYW5kIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KKiBBbHdheXMgc2V0dGluZyBYLWNhY2hlIGhlYWRlcnMgb24gY2FjaGVkIHJlc3BvbnNlcwoqIERlZmF1bHQgY2FjaGUgVFRMcyBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIENhY2hlU3RvcmFnZUludGVyZmFjZSBvZiBhIENhY2hlUGx1Z2luCiogYENhY2hlU3RvcmFnZUludGVyZmFjZTo6Y2FjaGUoJGtleSwgUmVzcG9uc2UgJHJlc3BvbnNlLCAkdHRsID0gbnVsbClgIGhhcyBjaGFuZ2VkIHRvIGBjYWNoZShSZXF1ZXN0SW50ZXJmYWNlCiAgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmZldGNoKCRrZXkpYCBoYXMgY2hhbmdlZCB0byBgZmV0Y2goUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmRlbGV0ZSgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGRlbGV0ZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTtgCiogQWRkZWQgYENhY2hlU3RvcmFnZUludGVyZmFjZTo6cHVyZ2UoJHVybClgCiogYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlS2V5UHJvdmlkZXJJbnRlcmZhY2UgJGNhY2hlS2V5LCBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UgJGNhY2hlLCBDYWNoZVBsdWdpbgogICRwbHVnaW4pYCBoYXMgY2hhbmdlZCB0byBgRGVmYXVsdFJldmFsaWRhdGlvbjo6X19jb25zdHJ1Y3QoQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwKICBDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlICRjYW5DYWNoZSA9IG51bGwpYAoqIEFkZGVkIGBSZXZhbGlkYXRpb25JbnRlcmZhY2U6OnNob3VsZFJldmFsaWRhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2UgJHJlc3BvbnNlKWAKCiMjIDMuNi4wIC0gMjAxMy0wNS0yOQoKKiBTZXJ2aWNlRGVzY3JpcHRpb24gbm93IGltcGxlbWVudHMgVG9BcnJheUludGVyZmFjZQoqIEFkZGVkIGNvbW1hbmQuaGlkZGVuX3BhcmFtcyB0byBibGFja2xpc3QgY2VydGFpbiBoZWFkZXJzIGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhZGRpdGlvbmFsUGFyYW1ldGVycwoqIEd1enpsZSBjYW4gbm93IGNvcnJlY3RseSBwYXJzZSBpbmNvbXBsZXRlIFVSTHMKKiBNaXhlZCBjYXNpbmcgb2YgaGVhZGVycyBhcmUgbm93IGZvcmNlZCB0byBiZSBhIHNpbmdsZSBjb25zaXN0ZW50IGNhc2luZyBhY3Jvc3MgYWxsIHZhbHVlcyBmb3IgdGhhdCBoZWFkZXIuCiogTWVzc2FnZXMgaW50ZXJuYWxseSB1c2UgYSBIZWFkZXJDb2xsZWN0aW9uIG9iamVjdCB0byBkZWxlZ2F0ZSBoYW5kbGluZyBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciByZXNvbHV0aW9uCiogUmVtb3ZlZCB0aGUgd2hvbGUgY2hhbmdlZEhlYWRlcigpIGZ1bmN0aW9uIHN5c3RlbSBvZiBtZXNzYWdlcyBiZWNhdXNlIGFsbCBoZWFkZXIgY2hhbmdlcyBub3cgZ28gdGhyb3VnaCBhZGRIZWFkZXIoKS4KKiBTcGVjaWZpYyBoZWFkZXIgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBjcmVhdGVkIGZvciBjb21wbGV4IGhlYWRlcnMuIFdoZW4gYSBtZXNzYWdlIGNyZWF0ZXMgYSBoZWFkZXIsIGl0IHVzZXMgYQogIEhlYWRlckZhY3Rvcnkgd2hpY2ggY2FuIG1hcCBzcGVjaWZpYyBoZWFkZXJzIHRvIHNwZWNpZmljIGhlYWRlciBjbGFzc2VzLiBUaGVyZSBpcyBub3cgYSBMaW5rIGhlYWRlciBhbmQKICBDYWNoZUNvbnRyb2wgaGVhZGVyIGltcGxlbWVudGF0aW9uLgoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0VXJpVGVtcGxhdGUKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldEN1cmxNdWx0aSgpCiogUmVtb3ZlZCBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnJlY2VpdmVkUmVxdWVzdEhlYWRlcigpIGFuZCBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4KICBHdXp6bGVcSHR0cFxDdXJsXFJlcXVlc3RNZWRpYXRvcgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICRhc1N0cmluZyBwYXJhbWV0ZXIgZnJvbSBNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXIoKS4gSnVzdCBjYXN0IHRoZSBoZWFkZXIgdG8gYSBzdHJpbmcuCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJHRyeUNodW5rZWRUcmFuc2ZlciBvcHRpb24gZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2UKKiBSZW1vdmVkIHRoZSAkYXNPYmplY3RzIGFyZ3VtZW50IGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJzKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OmdldCgpLiBVc2UgZ2V0UGFyc2VyKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OnNldCgpLiBVc2UgcmVnaXN0ZXJQYXJzZXIoKS4KKiBBbGwgcmVzcG9uc2UgaGVhZGVyIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIGEgc3RyaW5nIHJhdGhlciB0aGFuIG1peGluZyBIZWFkZXIgb2JqZWN0cyBhbmQgc3RyaW5ncyBpbmNvbnNpc3RlbnRseQoqIFJlbW92ZWQgY1VSTCBibGFja2xpc3Qgc3VwcG9ydC4gVGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG5vdyB0aGF0IEV4cGVjdCwgQWNjZXB0LCBldGMuIGFyZSBtYW5hZ2VkIGJ5IEd1enpsZQogIGRpcmVjdGx5IHZpYSBpbnRlcmZhY2VzCiogUmVtb3ZlZCB0aGUgaW5qZWN0aW5nIG9mIGEgcmVxdWVzdCBvYmplY3Qgb250byBhIHJlc3BvbnNlIG9iamVjdC4gVGhlIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgYSByZXF1ZXN0IHN0aWxsIGV4aXN0CiAgYnV0IGFyZSBhIG5vLW9wIHVudGlsIHJlbW92ZWQuCiogTW9zdCBjbGFzc2VzIHRoYXQgdXNlZCB0byByZXF1aXJlIGEgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgdHlwZWhpbnQgbm93IHJlcXVlc3QgYQogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXEFycmF5Q29tbWFuZEludGVyZmFjZWAuCiogQWRkZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c3RhcnRSZXNwb25zZSgpYCB0byB0aGUgUmVxdWVzdEludGVyZmFjZSB0byBoYW5kbGUgaW5qZWN0aW5nIGEgcmVzcG9uc2UKICBvbiBhIHJlcXVlc3Qgd2hpbGUgdGhlIHJlcXVlc3QgaXMgc3RpbGwgYmVpbmcgdHJhbnNmZXJyZWQKKiBUaGUgYWJpbGl0eSB0byBjYXNlLWluc2Vuc2l0aXZlbHkgc2VhcmNoIGZvciBoZWFkZXIgdmFsdWVzCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6Omhhc0V4YWN0SGVhZGVyCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdy4gVXNlIGdldEFsbCgpCiogRGVwcmVjYXRlZCBjYWNoZSBjb250cm9sIHNwZWNpZmljIG1ldGhvZHMgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2UuIFVzZSB0aGUgQ2FjaGVDb250cm9sIGhlYWRlciBvYmplY3QKICBpbnN0ZWFkLgoqIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIG5vdyBleHRlbmRzIGZyb20gVG9BcnJheUludGVyZmFjZSBhbmQgQXJyYXlBY2Nlc3MKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjYXN0IE1vZGVsIG9iamVjdHMgdG8gYSBzdHJpbmcgdG8gdmlldyBkZWJ1ZyBpbmZvcm1hdGlvbi4KCiMjIDMuNS4wIC0gMjAxMy0wNS0xMwoKKiBCdWc6IEZpeGVkIGEgcmVncmVzc2lvbiBzbyB0aGF0IHJlcXVlc3QgcmVzcG9uc2VzIGFyZSBwYXJzZWQgb25seSBvbmNlIHBlciBvbmNvbXBsZXRlIGV2ZW50IHJhdGhlciB0aGFuIG11bHRpcGxlIHRpbWVzCiogQnVnOiBCZXR0ZXIgY2xlYW51cCBvZiBvbmUtdGltZSBldmVudHMgYWNyb3NzIHRoZSBib2FyZCAod2hlbiBhbiBldmVudCBpcyBtZWFudCB0byBmaXJlIG9uY2UsIGl0IHdpbGwgbm93IHJlbW92ZQogIGl0c2VsZiBmcm9tIHRoZSBFdmVudERpc3BhdGNoZXIpCiogQnVnOiBgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyYCBub3cgcHJvcGVybHkgd3JpdGVzICJ0b3RhbF90aW1lIiBhbmQgImNvbm5lY3RfdGltZSIgdmFsdWVzCiogQnVnOiBDbG9uaW5nIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgbm93IGNsb25lcyB0aGUgRW50aXR5Qm9keSB0b28KKiBCdWc6IEZpeGVkIGFuIHVuZGVmaW5lZCBpbmRleCBlcnJvciB3aGVuIHBhcnNpbmcgbmVzdGVkIEpTT04gcmVzcG9uc2VzIHdpdGggYSBzZW50QXMgcGFyYW1ldGVyIHRoYXQgcmVmZXJlbmNlIGEKICBub24tZXhpc3RlbnQga2V5CiogQnVnOiBBbGwgX19jYWxsKCkgbWV0aG9kIGFyZ3VtZW50cyBhcmUgbm93IHJlcXVpcmVkIChoZWxwcyB3aXRoIG1vY2tpbmcgZnJhbWV3b3JrcykKKiBEZXByZWNhdGluZyBSZXNwb25zZTo6Z2V0UmVxdWVzdCgpIGFuZCBub3cgdXNpbmcgYSBzaGFsbG93IGNsb25lIG9mIGEgcmVxdWVzdCBvYmplY3QgdG8gcmVtb3ZlIGEgY2lyY3VsYXIgcmVmZXJlbmNlCiAgdG8gaGVscCB3aXRoIHJlZmNvdW50IGJhc2VkIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiByZXNvdXJjZXMgY3JlYXRlZCBieSBzZW5kaW5nIGEgcmVxdWVzdAoqIERlcHJlY2F0aW5nIFpGMSBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzLiBUaGVzZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi4KKiBEZXByZWNhdGluZyBgUmVzcG9uc2U6OmdldFByZXZpb3VzUmVzcG9uc2UoKWAgKG1ldGhvZCBzaWduYXR1cmUgc3RpbGwgZXhpc3RzLCBidXQgaXQncyBkZXByZWNhdGVkKS4gVXNlIHRoZQogIEhpc3RvcnlQbHVnaW4gZm9yIGEgaGlzdG9yeS4KKiBBZGRlZCBhIGByZXNwb25zZUJvZHlgIGFsaWFzIGZvciB0aGUgYHJlc3BvbnNlX2JvZHlgIGxvY2F0aW9uCiogUmVmYWN0b3JlZCBpbnRlcm5hbHMgdG8gbm8gbG9uZ2VyIHJlbHkgb24gUmVzcG9uc2U6OmdldFJlcXVlc3QoKQoqIEhpc3RvcnlQbHVnaW4gY2FuIG5vdyBiZSBjYXN0IHRvIGEgc3RyaW5nCiogSGlzdG9yeVBsdWdpbiBub3cgbG9ncyB0cmFuc2FjdGlvbnMgcmF0aGVyIHRoYW4gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB0byBtb3JlIGFjY3VyYXRlbHkga2VlcCB0cmFjayBvZiB0aGUgcmVxdWVzdHMKICBhbmQgcmVzcG9uc2VzIHRoYXQgYXJlIHNlbnQgb3ZlciB0aGUgd2lyZQoqIEFkZGVkIGBnZXRFZmZlY3RpdmVVcmwoKWAgYW5kIGBnZXRSZWRpcmVjdENvdW50KClgIHRvIFJlc3BvbnNlIG9iamVjdHMKCiMjIDMuNC4zIC0gMjAxMy0wNC0zMAoKKiBCdWcgZml4OiBGaXhpbmcgYnVnIGludHJvZHVjZWQgaW4gMy40LjIgd2hlcmUgcmVkaXJlY3QgcmVzcG9uc2VzIGFyZSBkdXBsaWNhdGVkIG9uIHRoZSBmaW5hbCByZWRpcmVjdGVkIHJlc3BvbnNlCiogQWRkZWQgYSBjaGVjayB0byByZS1leHRyYWN0IHRoZSB0ZW1wIGNhY2VydCBidW5kbGUgZnJvbSB0aGUgcGhhciBiZWZvcmUgc2VuZGluZyBlYWNoIHJlcXVlc3QKCiMjIDMuNC4yIC0gMjAxMy0wNC0yOQoKKiBCdWcgZml4OiBTdHJlYW0gb2JqZWN0cyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAiYSIgYW5kICJhKyIgbW9kZXMKKiBCdWcgZml4OiBSZW1vdmluZyBgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRgIGhlYWRlciB3aGVuIGEgQ29udGVudC1MZW5ndGggaXMgcHJlc2VudAoqIEJ1ZyBmaXg6IEFzeW5jUGx1Z2luIG5vIGxvbmdlciBmb3JjZXMgSEVBRCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IERhdGVUaW1lIHRpbWV6b25lcyBhcmUgbm93IHByb3Blcmx5IGhhbmRsZWQgd2hlbiB1c2luZyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbiBzY2hlbWEgZm9ybWF0dGVyCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IHByb3Blcmx5IGhhbmRsZXMgc3RhbGUtaWYtZXJyb3IgZGlyZWN0aXZlcyB3aGVuIGEgcmVxdWVzdCB0byB0aGUgb3JpZ2luIHNlcnZlciBmYWlscwoqIFNldHRpbmcgYSByZXNwb25zZSBvbiBhIHJlcXVlc3Qgd2lsbCB3cml0ZSB0byB0aGUgY3VzdG9tIHJlcXVlc3QgYm9keSBmcm9tIHRoZSByZXNwb25zZSBib2R5IGlmIG9uZSBpcyBzcGVjaWZpZWQKKiBMb2dQbHVnaW4gbm93IHdyaXRlcyB0byBwaHA6Ly9vdXRwdXQgd2hlbiBTVERFUlIgaXMgdW5kZWZpbmVkCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IG11bHRpcGxlIFBPU1QgZmlsZXMgZm9yIHRoZSBzYW1lIGtleSBpbiBhIHNpbmdsZSBjYWxsCiogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIFBPU1RzIG5vdyB1c2UgdGhlIHV0Zi04IGNoYXJzZXQgYnkgZGVmYXVsdAoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHF1ZXVlIEN1cmxFeGNlcHRpb25zIHRvIHRoZSBNb2NrUGx1Z2luCiogQ2xlYW5lZCB1cCBob3cgbWFudWFsIHJlc3BvbnNlcyBhcmUgcXVldWVkIG9uIHJlcXVlc3RzIChyZW1vdmVkICJxdWV1ZWRfcmVzcG9uc2UiIGFuZCBub3cgdXNpbmcgcmVxdWVzdC5iZWZvcmVfc2VuZCkKKiBDb25maWd1cmF0aW9uIGxvYWRpbmcgbm93IGFsbG93cyByZW1vdGUgZmlsZXMKCiMjIDMuNC4xIC0gMjAxMy0wNC0xNgoKKiBMYXJnZSByZWZhY3RvcmluZyB0byBob3cgQ3VybE11bHRpIGhhbmRsZXMgd29yay4gVGhlcmUgaXMgbm93IGEgcHJveHkgdGhhdCBzaXRzIGluIGZyb250IG9mIGEgcG9vbCBvZiBDdXJsTXVsdGkKICBoYW5kbGVzLiBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24sIGZpeGVzIGEgY291cGxlIGJ1Z3MsIGFuZCBwcm92aWRlcyBhIHNtYWxsIHBlcmZvcm1hbmNlIGJvb3N0LgoqIEV4Y2VwdGlvbnMgYXJlIG5vdyBwcm9wZXJseSBncm91cGVkIHdoZW4gc2VuZGluZyByZXF1ZXN0cyBpbiBwYXJhbGxlbAoqIFJlZGlyZWN0cyBhcmUgbm93IHByb3Blcmx5IGFnZ3JlZ2F0ZWQgd2hlbiBhIG11bHRpIHRyYW5zYWN0aW9uIGZhaWxzCiogUmVkaXJlY3RzIG5vdyBzZXQgdGhlIHJlc3BvbnNlIG9uIHRoZSBvcmlnaW5hbCBvYmplY3QgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlCiogQnVnIGZpeDogTW9kZWwgbmFtZXMgYXJlIG5vdyBwcm9wZXJseSBzZXQgZXZlbiB3aGVuIHVzaW5nICRyZWZzCiogQWRkZWQgc3VwcG9ydCBmb3IgUEhQIDUuNSdzIEN1cmxGaWxlIHRvIHByZXZlbnQgd2FybmluZ3Mgd2l0aCB0aGUgZGVwcmVjYXRlZCBAIHN5bnRheAoqIEFkZGVkIHN1cHBvcnQgZm9yIG9hdXRoX2NhbGxiYWNrIGluIE9BdXRoIHNpZ25hdHVyZXMKKiBBZGRlZCBzdXBwb3J0IGZvciBvYXV0aF92ZXJpZmllciBpbiBPQXV0aCBzaWduYXR1cmVzCiogQWRkZWQgc3VwcG9ydCB0byBhdHRlbXB0IHRvIHJldHJpZXZlIGEgY29tbWFuZCBmaXJzdCBsaXRlcmFsbHksIHRoZW4gdWNmaXJzdCwgdGhlIHdpdGggaW5mbGVjdGlvbgoKIyMgMy40LjAgLSAyMDEzLTA0LTExCgoqIEJ1ZyBmaXg6IFVSTHMgYXJlIG5vdyByZXNvbHZlZCBjb3JyZWN0bHkgYmFzZWQgb24gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4yLiAjMjg5CiogQnVnIGZpeDogQWJzb2x1dGUgVVJMcyB3aXRoIGEgcGF0aCBpbiBhIHNlcnZpY2UgZGVzY3JpcHRpb24gd2lsbCBub3cgcHJvcGVybHkgb3ZlcnJpZGUgdGhlIGJhc2UgVVJMLiAjMjg5CiogQnVnIGZpeDogUGFyc2luZyBhIHF1ZXJ5IHN0cmluZyB3aXRoIGEgc2luZ2xlIFBIUCBhcnJheSB2YWx1ZSB3aWxsIG5vdyByZXN1bHQgaW4gYW4gYXJyYXkuICMyNjMKKiBCdWcgZml4OiBCZXR0ZXIgbm9ybWFsaXphdGlvbiBvZiB0aGUgVXNlci1BZ2VudCBoZWFkZXIgdG8gcHJldmVudCBkdXBsaWNhdGUgaGVhZGVycy4gIzI2NC4KKiBCdWcgZml4OiBBZGRlZCBgbnVtYmVyYCB0eXBlIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zLgoqIEJ1ZyBmaXg6IGVtcHR5IHBhcmFtZXRlcnMgYXJlIHJlbW92ZWQgZnJvbSBhbiBPQXV0aCBzaWduYXR1cmUKKiBCdWcgZml4OiBSZXZhbGlkYXRpbmcgYSBjYWNoZSBlbnRyeSBwcmVmZXJzIHRoZSBMYXN0LU1vZGlmaWVkIG92ZXIgdGhlIERhdGUgaGVhZGVyCiogQnVnIGZpeDogRml4ZWQgImFycmF5IHRvIHN0cmluZyIgZXJyb3Igd2hlbiB2YWxpZGF0aW5nIGEgdW5pb24gb2YgdHlwZXMgaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uCiogQnVnIGZpeDogUmVtb3ZlZCBjb2RlIHRoYXQgYXR0ZW1wdGVkIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBhIHN0cmVhbSB3aGVuIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtCiogQnVnIGZpeDogTm90IGluY2x1ZGluZyBhbiBgb2F1dGhfdG9rZW5gIGlmIHRoZSB2YWx1ZSBpcyBudWxsIGluIHRoZSBPYXV0aFBsdWdpbi4KKiBCdWcgZml4OiBOb3cgY29ycmVjdGx5IGFnZ3JlZ2F0aW5nIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgYW5kIGZhaWxlZCByZXF1ZXN0cyBpbiBDdXJsTXVsdGkgd2hlbiBhIHJlZGlyZWN0IG9jY3Vycy4KKiBUaGUgbmV3IGRlZmF1bHQgQ1VSTE9QVF9USU1FT1VUIHNldHRpbmcgaGFzIGJlZW4gaW5jcmVhc2VkIHRvIDE1MCBzZWNvbmRzIHNvIHRoYXQgR3V6emxlIHdvcmtzIG9uIHBvb3IgY29ubmVjdGlvbnMuCiogQWRkZWQgYSBmZWF0dXJlIHRvIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Q6OnNldEJvZHkoKSB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIENvbnRlbnQtVHlwZSBvZiB0aGUgcmVxdWVzdCBpZgogIHRoZSBDb250ZW50LVR5cGUgY2FuIGJlIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGVudGl0eSBib2R5IG9yIHRoZSBwYXRoIG9mIHRoZSByZXF1ZXN0LgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIG92ZXJ3cml0ZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluIGEgY2xpZW50IHdoZW4gZ3JhYmJpbmcgYSB0aHJvd2F3YXkgY2xpZW50IGZyb20gYSBidWlsZGVyLgoqIEFkZGVkIHN1cHBvcnQgZm9yIGEgUFNSLTMgTG9nQWRhcHRlci4KKiBBZGRlZCBhIGBjb21tYW5kLmFmdGVyX3ByZXBhcmVgIGV2ZW50CiogQWRkZWQgYG9hdXRoX2NhbGxiYWNrYCBwYXJhbWV0ZXIgdG8gdGhlIE9hdXRoUGx1Z2luCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGEgY3VzdG9tIHN0cmVhbSBjbGFzcyB3aGVuIHVzaW5nIGEgc3RyZWFtIGZhY3RvcnkKKiBBZGRlZCBhIENhY2hpbmdFbnRpdHlCb2R5IGRlY29yYXRvcgoqIEFkZGVkIHN1cHBvcnQgZm9yIGBhZGRpdGlvbmFsUGFyYW1ldGVyc2AgaW4gc2VydmljZSBkZXNjcmlwdGlvbnMgdG8gZGVmaW5lIGhvdyBjdXN0b20gcGFyYW1ldGVycyBhcmUgc2VyaWFsaXplZC4KKiBUaGUgYnVuZGxlZCBTU0wgY2VydGlmaWNhdGUgaXMgbm93IHByb3ZpZGVkIGluIHRoZSBwaGFyIGZpbGUgYW5kIGV4dHJhY3RlZCB3aGVuIHJ1bm5pbmcgR3V6emxlIGZyb20gYSBwaGFyLgoqIFlvdSBjYW4gbm93IHNlbmQgYW55IEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgd2l0aCBQT1NUIGZpZWxkcyBvciBQT1NUIGZpbGVzIGFuZCBjVVJMIHdpbGwgaGFuZGxlIGNyZWF0aW5nIGJvZGllcwoqIFBPU1QgcmVxdWVzdHMgdXNpbmcgYSBjdXN0b20gZW50aXR5IGJvZHkgYXJlIG5vdyB0cmVhdGVkIGV4YWN0bHkgbGlrZSBQVVQgcmVxdWVzdHMgYnV0IHdpdGggYSBjdXN0b20gY1VSTCBtZXRob2QuIFRoaXMKICBtZWFucyB0aGF0IHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBQT1NUIHJlcXVlc3RzIHdpdGggY3VzdG9tIGJvZGllcyB3aWxsIG5vdCBiZSB0aGUgc2FtZSBhcyBQT1NUIHJlcXVlc3RzIHRoYXQgdXNlCiAgUE9TVCBmaWVsZHMgb3IgZmlsZXMgKHRoZSBsYXR0ZXIgaXMgb25seSB1c2VkIHdoZW4gZW11bGF0aW5nIGEgZm9ybSBQT1NUIGluIHRoZSBicm93c2VyKS4KKiBMb3RzIG9mIGNsZWFudXAgdG8gQ3VybEhhbmRsZTo6ZmFjdG9yeSBhbmQgUmVxdWVzdEZhY3Rvcnk6OmNyZWF0ZVJlcXVlc3QKCiMjIDMuMy4xIC0gMjAxMy0wMy0xMAoKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjcmVhdGUgUEhQIHN0cmVhbWluZyByZXNwb25zZXMgZnJvbSBIVFRQIHJlcXVlc3RzCiogQnVnIGZpeDogUnVubmluZyBhbnkgZmlsdGVycyB3aGVuIHBhcnNpbmcgcmVzcG9uc2UgaGVhZGVycyB3aXRoIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogQnVnIGZpeDogT2F1dGhQbHVnaW4gZml4ZXMgdG8gYWxsb3cgZm9yIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IHNpZ25pbmcsIGFuZCBzb3J0aW5nIHBhcmFtZXRlcnMgYmVmb3JlIHNpZ25pbmcKKiBCdWcgZml4OiBSZW1vdmVkIHRoZSBhZGRpbmcgb2YgZGVmYXVsdCBlbXB0eSBhcnJheXMgYW5kIGZhbHNlIEJvb2xlYW5zIHRvIHJlc3BvbnNlcyBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IGFjcm9zcwogIHJlc3BvbnNlIGxvY2F0aW9uIHZpc2l0b3JzLgoqIEJ1ZyBmaXg6IFJlbW92ZWQgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKKiBSZXF1ZXN0RmFjdG9yeTo6Y3JlYXRlKCkgbm93IHVzZXMgdGhlIGtleSBvZiBhIFBPU1QgZmlsZSB3aGVuIHNldHRpbmcgdGhlIFBPU1QgZmlsZSBuYW1lCiogQWRkZWQgeG1sQWxsb3dFbXB0eSB0byBzZXJpYWxpemUgYW4gWE1MIGJvZHkgZXZlbiBpZiBubyBYTUwgc3BlY2lmaWMgcGFyYW1ldGVycyBhcmUgc2V0CgojIyAzLjMuMCAtIDIwMTMtMDMtMDMKCiogQSBsYXJnZSBudW1iZXIgb2YgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBoYXZlIGJlZW4gbWFkZQoqIEJ1ZyBmaXg6IEFkZGVkICd3YicgYXMgYSB2YWxpZCB3cml0ZSBtb2RlIGZvciBzdHJlYW1zCiogQnVnIGZpeDogYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6Ompzb24oKWAgbm93IGFsbG93cyBzY2FsYXIgdmFsdWVzIHRvIGJlIHJldHVybmVkCiogQnVnIGZpeDogRml4ZWQgYnVnIGluIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlYCB3aGVyZSB3cmFwcGluZyBxdW90ZXMgd2VyZSBzdHJpcHBlZCBmcm9tIGBnZXRFdGFnKClgCiogQkM6IFJlbW92ZWQgYEd1enpsZVxIdHRwXFV0aWxzYCBjbGFzcwoqIEJDOiBTZXR0aW5nIGEgc2VydmljZSBkZXNjcmlwdGlvbiBvbiBhIGNsaWVudCB3aWxsIG5vIGxvbmdlciBtb2RpZnkgdGhlIGNsaWVudCdzIGNvbW1hbmQgZmFjdG9yaWVzLgoqIEJDOiBFbWl0dGluZyBJTyBldmVudHMgZnJvbSBhIFJlcXVlc3RNZWRpYXRvciBpcyBub3cgYSBwYXJhbWV0ZXIgdGhhdCBtdXN0IGJlIHNldCBpbiBhIHJlcXVlc3QncyBjdXJsIG9wdGlvbnMgdXNpbmcKICB0aGUgJ2VtaXRfaW8nIGtleS4gVGhpcyB3YXMgcHJldmlvdXNseSBzZXQgdW5kZXIgYSByZXF1ZXN0J3MgcGFyYW1ldGVycyB1c2luZyAnY3VybC5lbWl0X2lvJwoqIEJDOiBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFdyYXBwZXIoKWAgYW5kIGBHdXp6bGVcU3RyZWFtXFN0cmVhbTo6Z2V0U3RlYW1UeXBlKClgIGFyZSBubyBsb25nZXIgY29udmVydGVkIHRvCiAgbG93ZXJjYXNlCiogT3BlcmF0aW9uIHBhcmFtZXRlciBvYmplY3RzIGFyZSBub3cgbGF6eSBsb2FkZWQgaW50ZXJuYWxseQoqIEFkZGVkIEVycm9yUmVzcG9uc2VQbHVnaW4gdGhhdCBjYW4gdGhyb3cgZXJyb3JzIGZvciByZXNwb25zZXMgZGVmaW5lZCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIG9wZXJhdGlvbnMnIGVycm9yUmVzcG9uc2VzCiogQWRkZWQgc3VwcG9ydCBmb3IgaW5zdGFudGlhdGluZyByZXNwb25zZVR5cGU9Y2xhc3MgcmVzcG9uc2VDbGFzcyBjbGFzc2VzLiBDbGFzc2VzIG11c3QgaW1wbGVtZW50CiAgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcUmVzcG9uc2VDbGFzc0ludGVyZmFjZWAKKiBBZGRlZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsUHJvcGVydGllcyBmb3IgdG9wLWxldmVsIHBhcmFtZXRlcnMgaW4gcmVzcG9uc2VUeXBlPW1vZGVsIHJlc3BvbnNlQ2xhc3Nlcy4gVGhlc2UKICBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYWxzbyBzdXBwb3J0IGxvY2F0aW9ucyBhbmQgY2FuIGJlIHVzZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZXMgd2hlcmUgdGhlIG91dGVybW9zdCBwYXJ0IG9mIHRoZQogIEpTT04gaXMgYW4gYXJyYXkKKiBBZGRlZCBzdXBwb3J0IGZvciBuZXN0ZWQgcmVuYW1pbmcgb2YgSlNPTiBtb2RlbHMgKHJlbmFtZSBzZW50QXMgdG8gbmFtZSkKKiBDYWNoZVBsdWdpbgogICAgKiBBZGRlZCBzdXBwb3J0IGZvciBzdGFsZS1pZi1lcnJvciBzbyB0aGF0IHRoZSBDYWNoZVBsdWdpbiBjYW4gbm93IHNlcnZlIHN0YWxlIGNvbnRlbnQgZnJvbSB0aGUgY2FjaGUgb24gZXJyb3IKICAgICogRGVidWcgaGVhZGVycyBjYW4gbm93IGFkZGVkIHRvIGNhY2hlZCByZXNwb25zZSBpbiB0aGUgQ2FjaGVQbHVnaW4KCiMjIDMuMi4wIC0gMjAxMy0wMi0xNAoKKiBDdXJsTXVsdGkgaXMgbm8gbG9uZ2VyIHJldXNlZCBnbG9iYWxseS4gQSBuZXcgbXVsdGkgb2JqZWN0IGlzIGNyZWF0ZWQgcGVyLWNsaWVudC4gVGhpcyBoZWxwcyB0byBpc29sYXRlIGNsaWVudHMuCiogVVJMcyB3aXRoIG5vIHBhdGggbm8gbG9uZ2VyIGNvbnRhaW4gYSAiLyIgYnkgZGVmYXVsdAoqIEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nIGRvZXMgbm8gbG9uZ2VyIG1hbmFnZXMgdGhlIGxlYWRpbmcgIj8iLiBUaGlzIGlzIG5vdyBoYW5kbGVkIGluIEd1enpsZVxIdHRwXFVybC4KKiBCYWRSZXNwb25zZUV4Y2VwdGlvbiBubyBsb25nZXIgaW5jbHVkZXMgdGhlIGZ1bGwgcmVxdWVzdCBhbmQgcmVzcG9uc2UgbWVzc2FnZQoqIEFkZGluZyBzZXREYXRhKCkgdG8gR3V6emxlXFNlcnZpY2VcRGVzY3JpcHRpb25cU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlCiogQWRkaW5nIGdldFJlc3BvbnNlQm9keSgpIHRvIEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZQoqIFZhcmlvdXMgdXBkYXRlcyB0byBjbGFzc2VzIHRvIHVzZSBTZXJ2aWNlRGVzY3JpcHRpb25JbnRlcmZhY2UgdHlwZSBoaW50cyByYXRoZXIgdGhhbiBTZXJ2aWNlRGVzY3JpcHRpb24KKiBIZWFkZXIgdmFsdWVzIGNhbiBub3cgYmUgbm9ybWFsaXplZCBpbnRvIGRpc3RpbmN0IHZhbHVlcyB3aGVuIG11bHRpcGxlIGhlYWRlcnMgYXJlIGNvbWJpbmVkIHdpdGggYSBjb21tYSBzZXBhcmF0ZWQgbGlzdAoqIHhtbEVuY29kaW5nIGNhbiBub3cgYmUgY3VzdG9taXplZCBmb3IgdGhlIFhNTCBkZWNsYXJhdGlvbiBvZiBhIFhNTCBzZXJ2aWNlIGRlc2NyaXB0aW9uIG9wZXJhdGlvbgoqIEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nIG5vdyB1c2VzIEd1enpsZVxIdHRwXFF1ZXJ5QWdncmVnYXRvclxRdWVyeUFnZ3JlZ2F0b3JJbnRlcmZhY2Ugb2JqZWN0cyB0byBhZGQgY3VzdG9tIHZhbHVlCiAgYWdncmVnYXRpb24gYW5kIG5vIGxvbmdlciB1c2VzIGNhbGxiYWNrcwoqIFRoZSBVUkwgZW5jb2RpbmcgaW1wbGVtZW50YXRpb24gb2YgR3V6emxlXEh0dHBcUXVlcnlTdHJpbmcgY2FuIG5vdyBiZSBjdXN0b21pemVkCiogQnVnIGZpeDogRmlsdGVycyB3ZXJlIG5vdCBhbHdheXMgaW52b2tlZCBmb3IgYXJyYXkgc2VydmljZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXJzCiogQnVnIGZpeDogUmVkaXJlY3RzIG5vdyB1c2UgYSB0YXJnZXQgcmVzcG9uc2UgYm9keSByYXRoZXIgdGhhbiBhIHRlbXBvcmFyeSByZXNwb25zZSBib2R5CiogQnVnIGZpeDogVGhlIGRlZmF1bHQgZXhwb25lbnRpYWwgYmFja29mZiBCYWNrb2ZmUGx1Z2luIHdhcyBub3QgZ2l2aW5nIHdoZW4gdGhlIHJlcXVlc3QgdGhyZXNob2xkIHdhcyBleGNlZWRlZAoqIEJ1ZyBmaXg6IEd1enpsZSBub3cgdGFrZXMgdGhlIGZpcnN0IGZvdW5kIHZhbHVlIHdoZW4gZ3JhYmJpbmcgQ2FjaGUtQ29udHJvbCBkaXJlY3RpdmVzCgojIyAzLjEuMiAtIDIwMTMtMDEtMjcKCiogUmVmYWN0b3JlZCBob3cgb3BlcmF0aW9uIHJlc3BvbnNlcyBhcmUgcGFyc2VkLiBWaXNpdG9ycyBub3cgaW5jbHVkZSBhIGJlZm9yZSgpIG1ldGhvZCByZXNwb25zaWJsZSBmb3IgcGFyc2luZyB0aGUKICByZXNwb25zZSBib2R5LiBGb3IgZXhhbXBsZSwgdGhlIFhtbFZpc2l0b3Igbm93IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlIGludG8gYW4gYXJyYXkgaW4gdGhlIGJlZm9yZSgpIG1ldGhvZC4KKiBGaXhlZCBhbiBpc3N1ZSB3aGVyZSBjVVJMIHdvdWxkIG5vdCBhdXRvbWF0aWNhbGx5IGRlY29tcHJlc3MgcmVzcG9uc2VzIHdoZW4gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIgd2FzIHNlbnQKKiBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIGlzIG5ldmVyIHNldCB0byAxIGJlY2F1c2UgaXQgaXMgZGVwcmVjYXRlZCAoc2VlIDVlMGZmMmVmMjBmODM5ZTE5ZDFlZWIyOThmOTBiYTM1OTg3ODQ0NDQpCiogRml4ZWQgYSBidWcgd2hlcmUgcmVkaXJlY3QgcmVzcG9uc2VzIHdlcmUgbm90IGNoYWluZWQgY29ycmVjdGx5IHVzaW5nIGdldFByZXZpb3VzUmVzcG9uc2UoKQoqIFNldHRpbmcgZGVmYXVsdCBoZWFkZXJzIG9uIGEgY2xpZW50IGFmdGVyIHNldHRpbmcgdGhlIHVzZXItYWdlbnQgd2lsbCBub3QgZXJhc2UgdGhlIHVzZXItYWdlbnQgc2V0dGluZwoKIyMgMy4xLjEgLSAyMDEzLTAxLTIwCgoqIEFkZGluZyB3aWxkY2FyZCBzdXBwb3J0IHRvIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6Z2V0UGF0aCgpCiogQWRkaW5nIGFsaWFzIHN1cHBvcnQgdG8gU2VydmljZUJ1aWxkZXIgY29uZmlncwoqIEFkZGluZyBHdXp6bGVcU2VydmljZVxSZXNvdXJjZVxDb21wb3NpdGVSZXNvdXJjZUl0ZXJhdG9yRmFjdG9yeSBhbmQgY2xlYW5pbmcgdXAgZmFjdG9yeSBpbnRlcmZhY2UKCiMjIDMuMS4wIC0gMjAxMy0wMS0xMgoKKiBCQzogQ3VybEV4Y2VwdGlvbiBub3cgZXh0ZW5kcyBmcm9tIFJlcXVlc3RFeGNlcHRpb24gcmF0aGVyIHRoYW4gQmFkUmVzcG9uc2VFeGNlcHRpb24KKiBCQzogUmVuYW1lZCBHdXp6bGVcUGx1Z2luXENhY2hlXENhbkNhY2hlU3RyYXRlZ3lJbnRlcmZhY2U6OmNhbkNhY2hlKCkgdG8gY2FuQ2FjaGVSZXF1ZXN0KCkgYW5kIGFkZGVkIENhbkNhY2hlUmVzcG9uc2UoKQoqIEFkZGVkIGdldERhdGEgdG8gU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlCiogQWRkZWQgY29udGV4dCBhcnJheSB0byBSZXF1ZXN0SW50ZXJmYWNlOjpzZXRTdGF0ZSgpCiogQnVnOiBSZW1vdmluZyBoYXJkIGRlcGVuZGVuY3kgb24gdGhlIEJhY2tvZmZQbHVnaW4gZnJvbSBHdXp6bGVcSHR0cAoqIEJ1ZzogQWRkaW5nIHJlcXVpcmVkIGNvbnRlbnQtdHlwZSB3aGVuIEpTT04gcmVxdWVzdCB2aXNpdG9yIGFkZHMgSlNPTiB0byBhIGNvbW1hbmQKKiBCdWc6IEZpeGluZyB0aGUgc2VyaWFsaXphdGlvbiBvZiBhIHNlcnZpY2UgZGVzY3JpcHRpb24gd2l0aCBjdXN0b20gZGF0YQoqIE1hZGUgaXQgZWFzaWVyIHRvIGRlYWwgd2l0aCBleGNlcHRpb25zIHRocm93biB3aGVuIHRyYW5zZmVycmluZyBjb21tYW5kcyBvciByZXF1ZXN0cyBpbiBwYXJhbGxlbCBieSBwcm92aWRpbmcKICBhbiBhcnJheSBvZiBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgcmVzcG9uc2VzCiogTW92ZWQgZ2V0UGF0aCBmcm9tIEd1enpsZVxTZXJ2aWNlXFJlc291cmNlXE1vZGVsIHRvIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbgoqIEFkZGVkIEd1enpsZVxIdHRwXElvRW1pdHRpbmdFbnRpdHlCb2R5CiogTW92ZWQgY29tbWFuZCBmaWx0cmF0aW9uIGZyb20gdmFsaWRhdG9ycyB0byBsb2NhdGlvbiB2aXNpdG9ycwoqIEFkZGVkIGBleHRlbmRzYCBhdHRyaWJ1dGVzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyYW1ldGVycwoqIEFkZGVkIGdldE1vZGVscyB0byBTZXJ2aWNlRGVzY3JpcHRpb25JbnRlcmZhY2UKCiMjIDMuMC43IC0gMjAxMi0xMi0xOQoKKiBGaXhpbmcgcGhhciBkZXRlY3Rpb24gd2hlbiBmb3JjaW5nIGEgY2FjZXJ0IHRvIHN5c3RlbSBpZiBudWxsIG9yIHRydWUKKiBBbGxvd2luZyBmaWxlbmFtZSB0byBiZSBwYXNzZWQgdG8gYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6c2V0UmVzcG9uc2VCb2R5KClgCiogQ2xlYW5pbmcgdXAgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0YCBtZXRob2QKKiBBZGRpbmcgYSByZXNwb25zZV9ib2R5IGxvY2F0aW9uIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zCgojIyAzLjAuNiAtIDIwMTItMTItMDkKCiogQ3VybE11bHRpIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwoqIEFkZGluZyBzZXRFcnJvclJlc3BvbnNlcygpIHRvIE9wZXJhdGlvbgoqIGNvbXBvc2VyLmpzb24gdHdlYWtzCgojIyAzLjAuNSAtIDIwMTItMTEtMTgKCiogQnVnOiBGaXhpbmcgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGJ1ZyBjYXVzZWQgZnJvbSByZXZhbGlkYXRpbmcgd2l0aCB0aGUgQ2FjaGVQbHVnaW4KKiBCdWc6IFJlc3BvbnNlIGJvZHkgY2FuIG5vdyBiZSBhIHN0cmluZyBjb250YWluaW5nICIwIgoqIEJ1ZzogVXNpbmcgR3V6emxlIGluc2lkZSBvZiBhIHBoYXIgdXNlcyBzeXN0ZW0gYnkgZGVmYXVsdCBidXQgbm93IGFsbG93cyBmb3IgYSBjdXN0b20gY2FjZXJ0CiogQnVnOiBRdWVyeVN0cmluZzo6ZnJvbVN0cmluZyBub3cgcHJvcGVybHkgcGFyc2VzIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgY29udGFpbiBlcXVhbCBzaWducwoqIEFkZGVkIHN1cHBvcnQgZm9yIFhNTCBhdHRyaWJ1dGVzIGluIHNlcnZpY2UgZGVzY3JpcHRpb24gcmVzcG9uc2VzCiogRGVmYXVsdFJlcXVlc3RTZXJpYWxpemVyIG5vdyBzdXBwb3J0cyBhcnJheSBVUkkgcGFyYW1ldGVyIHZhbHVlcyBmb3IgVVJJIHRlbXBsYXRlIGV4cGFuc2lvbgoqIEFkZGVkIGJldHRlciBtaW1ldHlwZSBndWVzc2luZyB0byByZXF1ZXN0cyBhbmQgcG9zdCBmaWxlcwoKIyMgMy4wLjQgLSAyMDEyLTExLTExCgoqIEJ1ZzogRml4ZWQgYSBidWcgd2hlbiBhZGRpbmcgbXVsdGlwbGUgY29va2llcyB0byBhIHJlcXVlc3QgdG8gdXNlIHRoZSBjb3JyZWN0IGdsdWUgdmFsdWUKKiBCdWc6IENvb2tpZXMgY2FuIG5vdyBiZSBhZGRlZCB0aGF0IGhhdmUgYSBuYW1lLCBkb21haW4sIG9yIHZhbHVlIHNldCB0byAiMCIKKiBCdWc6IFVzaW5nIHRoZSBzeXN0ZW0gY2FjZXJ0IGJ1bmRsZSB3aGVuIHVzaW5nIHRoZSBQaGFyCiogQWRkZWQganNvbiBhbmQgeG1sIG1ldGhvZHMgdG8gUmVzcG9uc2UgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcGFyc2UgSlNPTiBhbmQgWE1MIHJlc3BvbnNlIGRhdGEgaW50byBkYXRhIHN0cnVjdHVyZXMKKiBFbmhhbmNlZCBjb29raWUgamFyIGRlLWR1cGxpY2F0aW9uCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gZW5hYmxlIHN0cmljdCBjb29raWUgamFycyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgd2hlbiBpbnZhbGlkIGNvb2tpZXMgYXJlIGFkZGVkCiogQWRkZWQgc2V0U3RyZWFtIHRvIFN0cmVhbUludGVyZmFjZSB0byBhY3R1YWxseSBtYWtlIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBjdXN0b20gcmV3aW5kIGJlaGF2aW9yIGZvciBlbnRpdHkgYm9kaWVzCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGFueSBzb3J0IG9mIGhhc2ggZm9yIGEgc3RyZWFtIHJhdGhlciB0aGFuIGp1c3QgYW4gTUQ1IGhhc2gKCiMjIDMuMC4zIC0gMjAxMi0xMS0wNAoKKiBJbXBsZW1lbnRpbmcgcmVkaXJlY3RzIGluIFBIUCByYXRoZXIgdGhhbiBjVVJMCiogQWRkZWQgUEVDTCBVUkkgdGVtcGxhdGUgZXh0ZW5zaW9uIGFuZCB1c2luZyBhcyBkZWZhdWx0IHBhcnNlciBpZiBhdmFpbGFibGUKKiBCdWc6IEZpeGVkIENvbnRlbnQtTGVuZ3RoIHBhcnNpbmcgb2YgUmVzcG9uc2UgZmFjdG9yeQoqIEFkZGluZyByZXdpbmQoKSBtZXRob2QgdG8gZW50aXR5IGJvZGllcyBhbmQgc3RyZWFtcy4gQWxsb3dzIGZvciBjdXN0b20gcmV3aW5kaW5nIG9mIG5vbi1yZXBlYXRhYmxlIHN0cmVhbXMuCiogQWRkaW5nIFRvQXJyYXlJbnRlcmZhY2UgdGhyb3VnaG91dCBsaWJyYXJ5CiogRml4aW5nIE9hdXRoUGx1Z2luIHRvIGNyZWF0ZSB1bmlxdWUgbm9uY2UgdmFsdWVzIHBlciByZXF1ZXN0CgojIyAzLjAuMiAtIDIwMTItMTAtMjUKCiogTWFnaWMgbWV0aG9kcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGNsaWVudHMKKiBNYWdpYyBtZXRob2RzIHJldHVybiB0aGUgcmVzdWx0IG9mIGEgY29tbWFuZAoqIFNlcnZpY2UgY2xpZW50cyBubyBsb25nZXIgcmVxdWlyZSBhIGJhc2VfdXJsIG9wdGlvbiBpbiB0aGUgZmFjdG9yeQoqIEJ1ZzogRml4ZWQgYW4gaXNzdWUgd2l0aCBVUkkgdGVtcGxhdGVzIHdoZXJlIG51bGwgdGVtcGxhdGUgdmFyaWFibGVzIHdlcmUgYmVpbmcgZXhwYW5kZWQKCiMjIDMuMC4xIC0gMjAxMi0xMC0yMgoKKiBNb2RlbHMgY2FuIG5vdyBiZSB1c2VkIGxpa2UgcmVndWxhciBjb2xsZWN0aW9uIG9iamVjdHMgYnkgY2FsbGluZyBmaWx0ZXIsIG1hcCwgZXRjLgoqIE1vZGVscyBubyBsb25nZXIgcmVxdWlyZSBhIFBhcmFtZXRlciBzdHJ1Y3R1cmUgb3IgaW5pdGlhbCBkYXRhIGluIHRoZSBjb25zdHJ1Y3RvcgoqIEFkZGVkIGEgY3VzdG9tIEFwcGVuZEl0ZXJhdG9yIHRvIGdldCBhcm91bmQgYSBQSFAgYnVnIHdpdGggdGhlIGBcQXBwZW5kSXRlcmF0b3JgCgojIyAzLjAuMCAtIDIwMTItMTAtMTUKCiogUmV3cm90ZSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGZvcm1hdCB0byBiZSBiYXNlZCBvbiBTd2FnZ2VyCiAgICAqIE5vdyBiYXNlZCBvbiBKU09OIHNjaGVtYQogICAgKiBBZGRlZCBuZXN0ZWQgaW5wdXQgc3RydWN0dXJlcyBhbmQgbmVzdGVkIHJlc3BvbnNlIG1vZGVscwogICAgKiBTdXBwb3J0IGZvciBKU09OIGFuZCBYTUwgaW5wdXQgYW5kIG91dHB1dCBtb2RlbHMKICAgICogUmVuYW1lZCBgY29tbWFuZHNgIHRvIGBvcGVyYXRpb25zYAogICAgKiBSZW1vdmVkIGRvdCBjbGFzcyBub3RhdGlvbgogICAgKiBSZW1vdmVkIGN1c3RvbSB0eXBlcwoqIEJyb2tlIHRoZSBwcm9qZWN0IGludG8gc21hbGxlciB0b3AtbGV2ZWwgbmFtZXNwYWNlcyB0byBiZSBtb3JlIGNvbXBvbmVudCBmcmllbmRseQoqIFJlbW92ZWQgc3VwcG9ydCBmb3IgWE1MIGNvbmZpZ3MgYW5kIGRlc2NyaXB0aW9ucy4gVXNlIGFycmF5cyBvciBKU09OIGZpbGVzLgoqIFJlbW92ZWQgdGhlIFZhbGlkYXRpb24gY29tcG9uZW50IGFuZCBJbnNwZWN0b3IKKiBNb3ZlZCBhbGwgY29va2llIGNvZGUgdG8gR3V6emxlXFBsdWdpblxDb29raWUKKiBNYWdpYyBtZXRob2RzIG9uIGEgR3V6emxlXFNlcnZpY2VcQ2xpZW50IG5vdyByZXR1cm4gdGhlIGNvbW1hbmQgdW4tZXhlY3V0ZWQuCiogQ2FsbGluZyBnZXRSZXN1bHQoKSBvciBnZXRSZXNwb25zZSgpIG9uIGEgY29tbWFuZCB3aWxsIGxhemlseSBleGVjdXRlIHRoZSBjb21tYW5kIGlmIG5lZWRlZC4KKiBOb3cgc2hpcHBpbmcgd2l0aCBjVVJMJ3MgQ0EgY2VydHMgYW5kIHVzaW5nIGl0IGJ5IGRlZmF1bHQKKiBBZGRlZCBwcmV2aW91c1Jlc3BvbnNlKCkgbWV0aG9kIHRvIHJlc3BvbnNlIG9iamVjdHMKKiBObyBsb25nZXIgc2VuZGluZyBBY2NlcHQgYW5kIEFjY2VwdC1FbmNvZGluZyBoZWFkZXJzIG9uIGV2ZXJ5IHJlcXVlc3QKKiBPbmx5IHNlbmRpbmcgYW4gRXhwZWN0IGhlYWRlciBieSBkZWZhdWx0IHdoZW4gYSBwYXlsb2FkIGlzIGdyZWF0ZXIgdGhhbiAxTUIKKiBBZGRlZC9tb3ZlZCBjbGllbnQgb3B0aW9uczoKICAgICogY3VybC5ibGFja2xpc3QgdG8gY3VybC5vcHRpb24uYmxhY2tsaXN0CiAgICAqIEFkZGVkIHNzbC5jZXJ0aWZpY2F0ZV9hdXRob3JpdHkKKiBBZGRlZCBhIEd1enpsZVxJdGVyYXRvciBjb21wb25lbnQKKiBNb3ZlZCBwbHVnaW5zIGZyb20gR3V6emxlXEh0dHBcUGx1Z2luIHRvIEd1enpsZVxQbHVnaW4KKiBBZGRlZCBhIG1vcmUgcm9idXN0IGJhY2tvZmYgcmV0cnkgc3RyYXRlZ3kgKHJlcGxhY2VkIHRoZSBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4pCiogQWRkZWQgYSBtb3JlIHJvYnVzdCBjYWNoaW5nIHBsdWdpbgoqIEFkZGVkIHNldEJvZHkgdG8gcmVzcG9uc2Ugb2JqZWN0cwoqIFVwZGF0aW5nIExvZ1BsdWdpbiB0byB1c2UgYSBtb3JlIGZsZXhpYmxlIE1lc3NhZ2VGb3JtYXR0ZXIKKiBBZGRlZCBhIGNvbXBsZXRlbHkgcmV2YW1wZWQgYnVpbGQgcHJvY2VzcwoqIENsZWFuaW5nIHVwIENvbGxlY3Rpb24gY2xhc3MgYW5kIHJlbW92aW5nIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhlIGdldCBtZXRob2QKKiBGaXhlZCBaRjIgY2FjaGUgYWRhcHRlcnMKCiMjIDIuOC44IC0gMjAxMi0xMC0xNQoKKiBCdWc6IEZpeGVkIGEgY29va2llIGlzc3VlIHRoYXQgY2F1c2VkIGRvdCBwcmVmaXhlZCBkb21haW5zIHRvIG5vdCBtYXRjaCB3aGVyZSBwb3B1bGFyIGJyb3dzZXJzIGRpZAoKIyMgMi44LjcgLSAyMDEyLTA5LTMwCgoqIEJ1ZzogRml4ZWQgY29uZmlnIGZpbGUgYWxpYXNlcyBmb3IgSlNPTiBpbmNsdWRlcwoqIEJ1ZzogRml4ZWQgY29va2llIGJ1ZyBvbiBhIHJlcXVlc3Qgb2JqZWN0IGJ5IHVzaW5nIENvb2tpZVBhcnNlciB0byBwYXJzZSBjb29raWVzIG9uIHJlcXVlc3RzCiogQnVnOiBSZW1vdmluZyB0aGUgcGF0aCB0byBhIGZpbGUgd2hlbiBzZW5kaW5nIGEgQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIgb24gYSBQT1NUIHVwbG9hZAoqIEJ1ZzogSGFyZGVuaW5nIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHBhcnNpbmcgdG8gYWNjb3VudCBmb3IgbWlzc2luZyBwYXJ0cwoqIEJ1ZzogRml4ZWQgUEVBUiBwYWNrYWdpbmcKKiBCdWc6IEZpeGVkIFJlcXVlc3Q6OmdldEluZm8KKiBCdWc6IEZpeGVkIGNhc2VzIHdoZXJlIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSByZXR1cm4gY29kZXMgd2VyZSBjYXVzaW5nIGN1cmwgdHJhbnNhY3Rpb25zIHRvIGZhaWwKKiBBZGRpbmcgdGhlIGFiaWxpdHkgZm9yIHRoZSBuYW1lc3BhY2UgSXRlcmF0b3IgZmFjdG9yeSB0byBsb29rIGluIG11bHRpcGxlIGRpcmVjdG9yaWVzCiogQWRkZWQgbW9yZSBnZXR0ZXJzL3NldHRlcnMvcmVtb3ZlcnMgZnJvbSBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHJlbW92ZSBQT1NUIGZpZWxkcyBmcm9tIE9BdXRoIHNpZ25hdHVyZXMKKiBPQXV0aCBwbHVnaW4gbm93IHN1cHBvcnRzIDItbGVnZ2VkIE9BdXRoCgojIyAyLjguNiAtIDIwMTItMDktMDUKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IGFuZCBidWlsZCBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoqIEFkZGVkIHRoZSB1c2Ugb2YgdmlzaXRvcnMgdG8gYXBwbHkgcGFyYW1ldGVycyB0byBsb2NhdGlvbnMgaW4gc2VydmljZSBkZXNjcmlwdGlvbnMgdXNpbmcgdGhlIGR5bmFtaWMgY29tbWFuZAoqIEFkZGVkIGEgYGpzb25gIHBhcmFtZXRlciBsb2NhdGlvbgoqIE5vdyBhbGxvd2luZyBkb3Qgbm90YXRpb24gZm9yIGNsYXNzZXMgaW4gdGhlIENhY2hlQWRhcHRlckZhY3RvcnkKKiBVc2luZyB0aGUgdW5pb24gb2YgdHdvIGFycmF5cyByYXRoZXIgdGhhbiBhbiBhcnJheV9tZXJnZSB3aGVuIGV4dGVuZGluZyBzZXJ2aWNlIGJ1aWxkZXIgc2VydmljZXMgYW5kIHNlcnZpY2UgcGFyYW1zCiogRW5zdXJpbmcgdGhhdCBhIHNlcnZpY2UgaXMgYSBzdHJpbmcgYmVmb3JlIGRvaW5nIHN0cnBvcygpIGNoZWNrcyBvbiBpdCB3aGVuIHN1YnN0aXR1dGluZyBzZXJ2aWNlcyBmb3IgcmVmZXJlbmNlcwogIGluIHNlcnZpY2UgYnVpbGRlciBjb25maWcgZmlsZXMuCiogU2VydmljZXMgZGVmaW5lZCBpbiB0d28gZGlmZmVyZW50IGNvbmZpZyBmaWxlcyB0aGF0IGluY2x1ZGUgb25lIGFub3RoZXIgd2lsbCBieSBkZWZhdWx0IHJlcGxhY2UgdGhlIHByZXZpb3VzbHkKICBkZWZpbmVkIHNlcnZpY2UsIGJ1dCB5b3UgY2FuIG5vdyBjcmVhdGUgc2VydmljZXMgdGhhdCBleHRlbmQgdGhlbXNlbHZlcyBhbmQgbWVyZ2UgdGhlaXIgc2V0dGluZ3Mgb3ZlciB0aGUgcHJldmlvdXMKKiBUaGUgSnNvbkxvYWRlciBub3cgc3VwcG9ydHMgYWxpYXNpbmcgZmlsZW5hbWVzIHdpdGggZGlmZmVyZW50IGZpbGVuYW1lcy4gVGhpcyBhbGxvd3MgeW91IHRvIGFsaWFzIHNvbWV0aGluZyBsaWtlCiAgJ19kZWZhdWx0JyB3aXRoIGEgZGVmYXVsdCBKU09OIGNvbmZpZ3VyYXRpb24gZmlsZS4KCiMjIDIuOC41IC0gMjAxMi0wOC0yOQoKKiBCdWc6IFN1cHByZXNzZWQgZW1wdHkgYXJyYXlzIGZyb20gVVJJIHRlbXBsYXRlcwoqIEJ1ZzogQWRkZWQgdGhlIG1pc3NpbmcgJG9wdGlvbnMgYXJndW1lbnQgZnJvbSBTZXJ2aWNlRGVzY3JpcHRpb246OmZhY3RvcnkgdG8gZW5hYmxlIGNhY2hpbmcKKiBBZGRlZCBzdXBwb3J0IGZvciBIVFRQIHJlc3BvbnNlcyB0aGF0IGRvIG5vdCBjb250YWluIGEgcmVhc29uIHBocmFzZSBpbiB0aGUgc3RhcnQtbGluZQoqIEFic3RyYWN0Q29tbWFuZCBjb21tYW5kcyBhcmUgbm93IGludm9rYWJsZQoqIEFkZGVkIGEgd2F5IHRvIGdldCB0aGUgZGF0YSB1c2VkIHdoZW4gc2lnbmluZyBhbiBPYXV0aCByZXF1ZXN0IGJlZm9yZSBhIHJlcXVlc3QgaXMgc2VudAoKIyMgMi44LjQgLSAyMDEyLTA4LTE1CgoqIEJ1ZzogQ3VzdG9tIGRlbGF5IHRpbWUgY2FsY3VsYXRpb25zIGFyZSBubyBsb25nZXIgaWdub3JlZCBpbiB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gdHJhbnNmZXIgZW50aXR5IGJvZGllcyBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBzdHJlYW1lZC4gVGhpcyBnZXRzIGFyb3VuZCBjdXJsIGVycm9yIDY1LiBTZXQgYGJvZHlfYXNfc3RyaW5nYCBpbiBhIHJlcXVlc3QncyBjdXJsIG9wdGlvbnMgdG8gZW5hYmxlLgoqIEFkZGVkIGEgU3RyZWFtSW50ZXJmYWNlLCBFbnRpdHlCb2R5SW50ZXJmYWNlLCBhbmQgYWRkZWQgZnRlbGwoKSB0byBHdXp6bGVcQ29tbW9uXFN0cmVhbQoqIEFkZGVkIGFuIEFic3RyYWN0RW50aXR5Qm9keURlY29yYXRvciBhbmQgYSBSZWFkTGltaXRFbnRpdHlCb2R5IGRlY29yYXRvciB0byB0cmFuc2ZlciBvbmx5IGEgc3Vic2V0IG9mIGEgZGVjb3JhdGVkIHN0cmVhbQoqIFN0cmVhbSBhbmQgRW50aXR5Qm9keSBvYmplY3RzIHdpbGwgbm93IHJldHVybiB0aGUgZmlsZSBwb3NpdGlvbiB0byB0aGUgcHJldmlvdXMgcG9zaXRpb24gYWZ0ZXIgYSByZWFkIHJlcXVpcmVkIG9wZXJhdGlvbiAoZS5nLiBnZXRDb250ZW50TWQ1KCkpCiogQWRkZWQgYWRkaXRpb25hbCByZXNwb25zZSBzdGF0dXMgY29kZXMKKiBSZW1vdmVkIFNTTCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkZWZhdWx0IFVzZXItQWdlbnQgaGVhZGVyCiogREVMRVRFIHJlcXVlc3RzIGNhbiBub3cgc2VuZCBhbiBlbnRpdHkgYm9keQoqIEFkZGVkIGFuIEV2ZW50RGlzcGF0Y2hlciB0byB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luIGFuZCBhZGRlZCBhbiBFeHBvbmVudGlhbEJhY2tvZmZMb2dnZXIgdG8gbG9nIGJhY2tvZmYgcmV0cmllcwoqIEFkZGVkIHRoZSBhYmlsaXR5IG9mIHRoZSBNb2NrUGx1Z2luIHRvIGNvbnN1bWUgbW9ja2VkIHJlcXVlc3QgYm9kaWVzCiogTG9nUGx1Z2luIG5vdyBleHBvc2VzIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG9iamVjdHMgaW4gdGhlIGV4dHJhcyBhcnJheQoKIyMgMi44LjMgLSAyMDEyLTA3LTMwCgoqIEJ1ZzogRml4ZWQgYSBjYXNlIHdoZXJlIGVtcHR5IFBPU1QgcmVxdWVzdHMgd2VyZSBzZW50IGFzIEdFVCByZXF1ZXN0cwoqIEJ1ZzogRml4ZWQgYSBidWcgaW4gRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luIHRoYXQgY2F1c2VkIGZhdGFsIGVycm9ycyB3aGVuIHJldHJ5aW5nIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3QgdGhhdCBkb2VzIG5vdCBoYXZlIGEgYm9keQoqIEJ1ZzogU2V0dGluZyB0aGUgcmVzcG9uc2UgYm9keSBvZiBhIHJlcXVlc3QgdG8gbnVsbCBhZnRlciBjb21wbGV0aW5nIGEgcmVxdWVzdCwgbm90IHdoZW4gc2V0dGluZyB0aGUgc3RhdGUgb2YgYSByZXF1ZXN0IHRvIG5ldwoqIEFkZGVkIG11bHRpcGxlIGluaGVyaXRhbmNlIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gY29tbWFuZHMKKiBBZGRlZCBhbiBBcGlDb21tYW5kSW50ZXJmYWNlIGFuZCBhZGRlZCBgZ2V0UGFyYW1OYW1lcygpYCBhbmQgYGhhc1BhcmFtKClgCiogUmVtb3ZlZCB0aGUgZGVmYXVsdCAybWIgc2l6ZSBjdXRvZmYgZnJvbSB0aGUgTWQ1VmFsaWRhdG9yUGx1Z2luIHNvIHRoYXQgaXQgbm93IGRlZmF1bHRzIHRvIHZhbGlkYXRpbmcgZXZlcnl0aGluZwoqIENoYW5nZWQgQ3VybE11bHRpOjpwZXJmb3JtIHRvIHBhc3MgYSBzbWFsbGVyIHRpbWVvdXQgdG8gQ3VybE11bHRpOjpleGVjdXRlSGFuZGxlcwoKIyMgMi44LjIgLSAyMDEyLTA3LTI0CgoqIEJ1ZzogUXVlcnkgc3RyaW5nIHZhbHVlcyBzZXQgdG8gMCBhcmUgbm8gbG9uZ2VyIGRyb3BwZWQgZnJvbSB0aGUgcXVlcnkgc3RyaW5nCiogQnVnOiBBIENvbGxlY3Rpb24gb2JqZWN0IGlzIG5vIGxvbmdlciBjcmVhdGVkIGVhY2ggdGltZSBhIGNhbGwgaXMgbWFkZSB0byBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxBYnN0cmFjdENvbW1hbmQ6OmdldFJlcXVlc3RIZWFkZXJzKClgCiogQnVnOiBgK2AgaXMgbm93IHRyZWF0ZWQgYXMgYW4gZW5jb2RlZCBzcGFjZSB3aGVuIHBhcnNpbmcgcXVlcnkgc3RyaW5ncwoqIFF1ZXJ5U3RyaW5nIGFuZCBDb2xsZWN0aW9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwoqIEFsbG93aW5nIGRvdCBub3RhdGlvbiBmb3IgY2xhc3MgcGF0aHMgaW4gZmlsdGVycyBhdHRyaWJ1dGUgb2YgYSBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoKIyMgMi44LjEgLSAyMDEyLTA3LTE2CgoqIExvb3NlbmluZyBFdmVudCBEaXNwYXRjaGVyIGRlcGVuZGVuY3kKKiBQT1NUIHJlZGlyZWN0cyBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgdXNpbmcgQ1VSTE9QVF9QT1NUUkVESVIKCiMjIDIuOC4wIC0gMjAxMi0wNy0xNQoKKiBCQzogR3V6emxlXEh0dHBcUXVlcnkKICAgICogUXVlcnkgc3RyaW5ncyB3aXRoIGVtcHR5IHZhcmlhYmxlcyB3aWxsIGFsd2F5cyBzaG93IGFuIGVxdWFsIHNpZ24gdW5sZXNzIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gUXVlcnlTdHJpbmc6OkJMQU5LIChlLmcuID9hY2w9IHZzID9hY2wpCiAgICAqIENoYW5nZWQgaXNFbmNvZGluZ1ZhbHVlcygpIGFuZCBpc0VuY29kaW5nRmllbGRzKCkgdG8gaXNVcmxFbmNvZGluZygpCiAgICAqIENoYW5nZWQgc2V0RW5jb2RlVmFsdWVzKGJvb2wpIGFuZCBzZXRFbmNvZGVGaWVsZHMoYm9vbCkgdG8gdXNlVXJsRW5jb2RpbmcoYm9vbCkKICAgICogQ2hhbmdlZCB0aGUgYWdncmVnYXRpb24gZnVuY3Rpb25zIG9mIFF1ZXJ5U3RyaW5nIHRvIGJlIHN0YXRpYyBtZXRob2RzCiAgICAqIENhbiBub3cgdXNlIGZyb21TdHJpbmcoKSB3aXRoIHF1ZXJ5c3RyaW5ncyB0aGF0IGhhdmUgYSBsZWFkaW5nID8KKiBjVVJMIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgaW4gc2VydmljZSBkZXNjcmlwdGlvbnMgdXNpbmcgYGN1cmwuYCBwcmVmaXhlZCBwYXJhbWV0ZXJzCiogQ29udGVudC1MZW5ndGggaXMgc2V0IHRvIDAgYmVmb3JlIGVtaXR0aW5nIHRoZSByZXF1ZXN0LmJlZm9yZV9zZW5kIGV2ZW50IHdoZW4gc2VuZGluZyBhbiBlbXB0eSByZXF1ZXN0IGJvZHkKKiBDb29raWVzIGFyZSBubyBsb25nZXIgVVJMIGRlY29kZWQgYnkgZGVmYXVsdAoqIEJ1ZzogVVJJIHRlbXBsYXRlIHZhcmlhYmxlcyBzZXQgdG8gbnVsbCBhcmUgbm8gbG9uZ2VyIGV4cGFuZGVkCgojIyAyLjcuMiAtIDIwMTItMDctMDIKCiogQkM6IE1vdmluZyB0aGluZ3MgdG8gZ2V0IHJlYWR5IGZvciBzdWJ0cmVlIHNwbGl0cy4gTW92aW5nIEluZmxlY3Rpb24gaW50byBDb21tb24uIE1vdmluZyBHdXp6bGVcSHR0cFxQYXJzZXIgdG8gR3V6emxlXFBhcnNlci4KKiBCQzogUmVtb3ZpbmcgR3V6emxlXENvbW1vblxCYXRjaFxCYXRjaDo6Y291bnQoKSBhbmQgcmVwbGFjaW5nIGl0IHdpdGggaXNFbXB0eSgpCiogQ2FjaGVQbHVnaW4gbm93IGFsbG93cyBmb3IgYSBjdXN0b20gcmVxdWVzdCBwYXJhbWV0ZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSByZXF1ZXN0IGNhbiBiZSBjYWNoZWQKKiBCdWcgZml4OiBDYWNoZVBsdWdpbiBub3cgb25seSBjYWNoZXMgR0VUIGFuZCBIRUFEIHJlcXVlc3RzIGJ5IGRlZmF1bHQKKiBCdWcgZml4OiBVc2luZyBoZWFkZXIgZ2x1ZSB3aGVuIHRyYW5zZmVycmluZyBoZWFkZXJzIG92ZXIgdGhlIHdpcmUKKiBBbGxvd2luZyBkZWVwbHkgbmVzdGVkIGFycmF5cyBmb3IgY29tcG9zaXRlIHZhcmlhYmxlcyBpbiBVUkkgdGVtcGxhdGVzCiogQmF0Y2ggZGl2aXNvcnMgY2FuIG5vdyByZXR1cm4gaXRlcmF0b3JzIG9yIGFycmF5cwoKIyMgMi43LjEgLSAyMDEyLTA2LTI2CgoqIE1pbm9yIHBhdGNoIHRvIHVwZGF0ZSB2ZXJzaW9uIG51bWJlciBpbiBVQSBzdHJpbmcKKiBVcGRhdGluZyBidWlsZCBwcm9jZXNzCgojIyAyLjcuMCAtIDIwMTItMDYtMjUKCiogQkM6IEluZmxlY3Rpb24gY2xhc3NlcyBtb3ZlZCB0byBHdXp6bGVcSW5mbGVjdGlvbi4gTm8gbG9uZ2VyIHN0YXRpYyBtZXRob2RzLiBDYW4gbm93IGluamVjdCBjdXN0b20gaW5mbGVjdG9ycyBpbnRvIGNsYXNzZXMuCiogQkM6IFJlbW92ZWQgbWFnaWMgc2V0WCBtZXRob2RzIGZyb20gY29tbWFuZHMKKiBCQzogTWFnaWMgbWV0aG9kcyBtYXBwZWQgdG8gc2VydmljZSBkZXNjcmlwdGlvbiBjb21tYW5kcyBhcmUgbm93IGluZmxlY3RlZCBpbiB0aGUgY29tbWFuZCBmYWN0b3J5IHJhdGhlciB0aGFuIHRoZSBjbGllbnQgX19jYWxsKCkgbWV0aG9kCiogVmVyYm9zZSBjVVJMIG9wdGlvbnMgYXJlIG5vIGxvbmdlciBlbmFibGVkIGJ5IGRlZmF1bHQuIFNldCBjdXJsLmRlYnVnIHRvIHRydWUgb24gYSBjbGllbnQgdG8gZW5hYmxlLgoqIEJ1ZzogTm93IGFsbG93aW5nIGNvbG9ucyBpbiBhIHJlc3BvbnNlIHN0YXJ0LWxpbmUgKGUuZy4gSFRUUC8xLjEgNTAzIFNlcnZpY2UgVW5hdmFpbGFibGU6IEJhY2stZW5kIHNlcnZlciBpcyBhdCBjYXBhY2l0eSkKKiBHdXp6bGVcU2VydmljZVxSZXNvdXJjZVxSZXNvdXJjZUl0ZXJhdG9yQXBwbHlCYXRjaGVkIG5vdyBpbnRlcm5hbGx5IHVzZXMgdGhlIEd1enpsZVxDb21tb25cQmF0Y2ggbmFtZXNwYWNlCiogQWRkZWQgR3V6emxlXFNlcnZpY2VcUGx1Z2luIG5hbWVzcGFjZSBhbmQgYSBQbHVnaW5Db2xsZWN0aW9uUGx1Z2luCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IFBPU1QgZmllbGRzIGFuZCBmaWxlcyBpbiBhIHNlcnZpY2UgZGVzY3JpcHRpb24KKiBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5OjpmYWN0b3J5KCkgbm93IGFjY2VwdHMgb2JqZWN0cyB3aXRoIGEgX190b1N0cmluZygpIG1ldGhvZAoqIEFkZGluZyBhIGNvbW1hbmQuYmVmb3JlX3ByZXBhcmUgZXZlbnQgdG8gY2xpZW50cwoqIEFkZGVkIEJhdGNoQ2xvc3VyZVRyYW5zZmVyIGFuZCBCYXRjaENsb3N1cmVEaXZpc29yCiogQmF0Y2hUcmFuc2ZlckV4Y2VwdGlvbiBub3cgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGUgYmF0Y2ggZGl2aXNvciBhbmQgdHJhbnNmZXIgc3RyYXRlZ2llcwoqIEZpeGVkIHNvbWUgdGVzdHMgc28gdGhhdCB0aGV5IHBhc3MgbW9yZSByZWxpYWJseQoqIEFkZGVkIEd1enpsZVxDb21tb25cTG9nXEFycmF5TG9nQWRhcHRlcgoKIyMgMi42LjYgLSAyMDEyLTA2LTEwCgoqIEJDOiBSZW1vdmluZyBHdXp6bGVcSHR0cFxQbHVnaW5cQmF0Y2hRdWV1ZVBsdWdpbgoqIEJDOiBSZW1vdmluZyBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRTZXQKKiBBZGRpbmcgZ2VuZXJpYyBiYXRjaGluZyBzeXN0ZW0gKHJlcGxhY2VzIHRoZSBiYXRjaCBxdWV1ZSBwbHVnaW4gYW5kIGNvbW1hbmQgc2V0KQoqIFVwZGF0aW5nIFpGIGNhY2hlIGFuZCBsb2cgYWRhcHRlcnMgYW5kIG5vdyB1c2luZyBaRidzIGNvbXBvc2VyIHJlcG9zaXRvcnkKKiBCdWc6IFNldHRpbmcgdGhlIG5hbWUgb2YgZWFjaCBBcGlQYXJhbSB3aGVuIGNyZWF0aW5nIHRocm91Z2ggYW4gQXBpQ29tbWFuZAoqIEFkZGluZyByZXN1bHRfdHlwZSwgcmVzdWx0X2RvYywgZGVwcmVjYXRlZCwgYW5kIGRvY191cmwgdG8gc2VydmljZSBkZXNjcmlwdGlvbnMKKiBCdWc6IENoYW5nZWQgdGhlIGRlZmF1bHQgY29va2llIGhlYWRlciBjYXNpbmcgYmFjayB0byAnQ29va2llJwoKIyMgMi42LjUgLSAyMDEyLTA2LTAzCgoqIEJDOiBSZW5hbWluZyBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmdldFJlc291cmNlVXJpKCkgdG8gZ2V0UmVzb3VyY2UoKQoqIEJDOiBSZW1vdmluZyB1bnVzZWQgQVVUSF9CQVNJQyBhbmQgQVVUSF9ESUdFU1QgY29uc3RhbnRzIGZyb20KKiBCQzogR3V6emxlXEh0dHBcQ29va2llIGlzIG5vdyB1c2VkIHRvIG1hbmFnZSBTZXQtQ29va2llIGRhdGEsIG5vdCBDb29raWUgZGF0YQoqIEJDOiBSZW5hbWluZyBtZXRob2RzIGluIHRoZSBDb29raWVKYXJJbnRlcmZhY2UKKiBNb3ZpbmcgYWxtb3N0IGFsbCBjb29raWUgbG9naWMgb3V0IG9mIHRoZSBDb29raWVQbHVnaW4gYW5kIGludG8gdGhlIENvb2tpZSBvciBDb29raWVKYXIgaW1wbGVtZW50YXRpb25zCiogTWFraW5nIHRoZSBkZWZhdWx0IGdsdWUgZm9yIEhUVFAgaGVhZGVycyAnOycgaW5zdGVhZCBvZiAnLCcKKiBBZGRpbmcgYSByZW1vdmVWYWx1ZSB0byBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlcgoqIEFkZGluZyBnZXRDb29raWVzKCkgdG8gcmVxdWVzdCBpbnRlcmZhY2UuCiogTWFraW5nIGl0IGVhc2llciB0byBhZGQgZXZlbnQgc3Vic2NyaWJlcnMgdG8gSGFzRGlzcGF0Y2hlckludGVyZmFjZSBjbGFzc2VzLiBDYW4gbm93IGRpcmVjdGx5IGNhbGwgYWRkU3Vic2NyaWJlcigpCgojIyAyLjYuNCAtIDIwMTItMDUtMzAKCiogQkM6IENsZWFuaW5nIHVwIGhvdyBQT1NUIGZpbGVzIGFyZSBzdG9yZWQgaW4gRW50aXR5RW5jbG9zaW5nUmVxdWVzdCBvYmplY3RzLiBBZGRpbmcgUG9zdEZpbGUgY2xhc3MuCiogQkM6IE1vdmluZyBBcGlDb21tYW5kIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgSW5zcGVjdG9yIGFuZCBvbiB0byB0aGUgQXBpQ29tbWFuZAoqIEJ1ZzogRml4aW5nIG1hZ2ljIG1ldGhvZCBjb21tYW5kIGNhbGxzIG9uIGNsaWVudHMKKiBCdWc6IEVtYWlsIGNvbnN0cmFpbnQgb25seSB2YWxpZGF0ZXMgc3RyaW5ncwoqIEJ1ZzogQWdncmVnYXRlIFBPU1QgZmllbGRzIHdoZW4gUE9TVCBmaWxlcyBhcmUgcHJlc2VudCBpbiBjdXJsIGhhbmRsZQoqIEJ1ZzogRml4aW5nIGRlZmF1bHQgVXNlci1BZ2VudCBoZWFkZXIKKiBCdWc6IE9ubHkgYXBwZW5kaW5nIG9yIHByZXBlbmRpbmcgcGFyYW1ldGVycyBpbiBjb21tYW5kcyBpZiB0aGV5IGFyZSBzcGVjaWZpZWQKKiBCdWc6IE5vdCByZXF1aXJpbmcgcmVzcG9uc2UgcmVhc29uIHBocmFzZXMgb3Igc3RhdHVzIGNvZGVzIHRvIG1hdGNoIGEgcHJlZGVmaW5lZCBsaXN0IG9mIGNvZGVzCiogQWxsb3dpbmcgdGhlIHVzZSBvZiBkb3Qgbm90YXRpb24gZm9yIGNsYXNzIG5hbWVzcGFjZXMgd2hlbiB1c2luZyBpbnN0YW5jZV9vZiBjb25zdHJhaW50CiogQWRkZWQgYW55X21hdGNoIHZhbGlkYXRpb24gY29uc3RyYWludAoqIEFkZGVkIGFuIEFzeW5jUGx1Z2luCiogUGFzc2luZyByZXF1ZXN0IG9iamVjdCB0byB0aGUgY2FsY3VsYXRlV2FpdCBtZXRob2Qgb2YgdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbgoqIEFsbG93aW5nIHRoZSByZXN1bHQgb2YgYSBjb21tYW5kIG9iamVjdCB0byBiZSBjaGFuZ2VkCiogUGFyc2luZyBsb2NhdGlvbiBhbmQgdHlwZSBzdWIgdmFsdWVzIHdoZW4gaW5zdGFudGlhdGluZyBhIHNlcnZpY2UgZGVzY3JpcHRpb24gcmF0aGVyIHRoYW4gb3ZlciBhbmQgb3ZlciBhdCBydW50aW1lCgojIyAyLjYuMyAtIDIwMTItMDUtMjMKCiogW0JDXSBHdXp6bGVcQ29tbW9uXEZyb21Db25maWdJbnRlcmZhY2Ugbm8gbG9uZ2VyIHJlcXVpcmVzIGFueSBjb25maWcgb3B0aW9ucy4KKiBbQkNdIFJlZmFjdG9yaW5nIGhvdyBQT1NUIGZpbGVzIGFyZSBzdG9yZWQgb24gYW4gRW50aXR5RW5jbG9zaW5nUmVxdWVzdC4gVGhleSBhcmUgbm93IHNlcGFyYXRlIGZyb20gUE9TVCBmaWVsZHMuCiogWW91IGNhbiBub3cgdXNlIGFuIGFycmF5IG9mIGRhdGEgd2hlbiBjcmVhdGluZyBQVVQgcmVxdWVzdCBib2RpZXMgaW4gdGhlIHJlcXVlc3QgZmFjdG9yeS4KKiBSZW1vdmluZyB0aGUgcmVxdWlyZW1lbnQgdGhhdCBIVFRQUyByZXF1ZXN0cyBuZWVkZWQgYSBDYWNoZS1Db250cm9sOiBwdWJsaWMgZGlyZWN0aXZlIHRvIGJlIGNhY2hlYWJsZS4KKiBbSHR0cF0gQWRkaW5nIHN1cHBvcnQgZm9yIENvbnRlbnQtVHlwZSBpbiBtdWx0aXBhcnQgUE9TVCB1cGxvYWRzIHBlciB1cGxvYWQKKiBbSHR0cF0gQWRkZWQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIG11bHRpcGxlIGZpbGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUgKGZvb1swXSwgZm9vWzFdKQoqIEFkZGluZyBtb3JlIFBPU1QgZGF0YSBvcGVyYXRpb25zIGZvciBlYXNpZXIgbWFuaXB1bGF0aW9uIG9mIFBPU1QgZGF0YS4KKiBZb3UgY2FuIG5vdyBzZXQgZW1wdHkgUE9TVCBmaWVsZHMuCiogVGhlIGJvZHkgb2YgYSByZXF1ZXN0IGlzIG9ubHkgc2hvd24gb24gRW50aXR5RW5jbG9zaW5nUmVxdWVzdCBvYmplY3RzIHRoYXQgZG8gbm90IHVzZSBQT1NUIGZpbGVzLgoqIFNwbGl0IHRoZSBHdXp6bGVcU2VydmljZVxJbnNwZWN0b3I6OnZhbGlkYXRlQ29uZmlnIG1ldGhvZCBpbnRvIHR3byBtZXRob2RzLiBPbmUgdG8gaW5pdGlhbGl6ZSB3aGVuIGEgY29tbWFuZCBpcyBjcmVhdGVkLCBhbmQgb25lIHRvIHZhbGlkYXRlLgoqIENTIHVwZGF0ZXMKCiMjIDIuNi4yIC0gMjAxMi0wNS0xOQoKKiBbSHR0cF0gQmV0dGVyIGhhbmRsaW5nIG9mIG5lc3RlZCBzY29wZSByZXF1ZXN0cyBpbiBDdXJsTXVsdGkuICBSZXF1ZXN0cyBhcmUgbm93IGFsd2F5cyBwcmVwYXJlcyBpbiB0aGUgc2VuZCgpIG1ldGhvZCByYXRoZXIgdGhhbiB0aGUgYWRkUmVxdWVzdCgpIG1ldGhvZC4KCiMjIDIuNi4xIC0gMjAxMi0wNS0xOQoKKiBbQkNdIFJlbW92aW5nICdwYXRoJyBzdXBwb3J0IGluIHNlcnZpY2UgZGVzY3JpcHRpb25zLiAgVXNlICd1cmknLgoqIFtCQ10gR3V6emxlXFNlcnZpY2VcSW5zcGVjdG9yOjpwYXJzZURvY0Jsb2NrIGlzIG5vdyBwcm90ZWN0ZWQuIEFkZGluZyBnZXRBcGlQYXJhbXNGb3JDbGFzcygpIHdpdGggY2FjaGUuCiogW0JDXSBSZW1vdmluZyBHdXp6bGVcQ29tbW9uXE51bGxPYmplY3QuICBVc2UgaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZy9OdWxsT2JqZWN0IGlmIHlvdSBuZWVkIGl0LgoqIFtCQ10gUmVtb3ZpbmcgR3V6emxlXENvbW1vblxYbWxFbGVtZW50LgoqIEFsbCBjb21tYW5kcywgYm90aCBkeW5hbWljIGFuZCBjb25jcmV0ZSwgaGF2ZSBBcGlDb21tYW5kIG9iamVjdHMuCiogQWRkaW5nIGEgZml4IGZvciBDdXJsTXVsdGkgc28gdGhhdCBpZiBhbGwgb2YgdGhlIGNvbm5lY3Rpb25zIGVuY291bnRlciBzb21lIHNvcnQgb2YgY3VybCBlcnJvciwgdGhlbiB0aGUgbG9vcCBleGl0cy4KKiBBZGRpbmcgY2hlY2tzIHRvIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgc28gdGhhdCBlbXB0eSBQT1NUIGZpbGVzIGFuZCBmaWVsZHMgYXJlIGlnbm9yZWQuCiogTWFraW5nIHRoZSBtZXRob2Qgc2lnbmF0dXJlIG9mIEd1enpsZVxTZXJ2aWNlXEJ1aWxkZXJcU2VydmljZUJ1aWxkZXI6OmZhY3RvcnkgbW9yZSBmbGV4aWJsZS4KCiMjIDIuNi4wIC0gMjAxMi0wNS0xNQoKKiBbQkNdIE1vdmluZyBHdXp6bGVcU2VydmljZVxCdWlsZGVyIHRvIEd1enpsZVxTZXJ2aWNlXEJ1aWxkZXJcU2VydmljZUJ1aWxkZXIKKiBbQkNdIEV4ZWN1dGluZyBhIENvbW1hbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIHJhdGhlciB0aGFuIHRoZSBjb21tYW5kCiogW0JDXSBNb3ZpbmcgYWxsIEhUVFAgcGFyc2luZyBsb2dpYyB0byBHdXp6bGVcSHR0cFxQYXJzZXJzLiBBbGxvd3MgZm9yIGZhc3RlciBDIGltcGxlbWVudGF0aW9ucyBpZiBuZWVkZWQuCiogW0JDXSBDaGFuZ2luZyB0aGUgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXNwb25zZTo6c2V0UHJvdG9jb2woKSBtZXRob2QgdG8gYWNjZXB0IGEgcHJvdG9jb2wgYW5kIHZlcnNpb24gaW4gc2VwYXJhdGUgYXJncy4KKiBbQkNdIE1vdmluZyBSZXNvdXJjZUl0ZXJhdG9yKiB0byBHdXp6bGVcU2VydmljZVxSZXNvdXJjZQoqIFtCQ10gQ29tcGxldGVseSByZWZhY3RvcmVkIFJlc291cmNlSXRlcmF0b3JzIHRvIGl0ZXJhdGUgb3ZlciBhIGNsb25lZCBjb21tYW5kIG9iamVjdAoqIFtCQ10gTW92ZWQgR3V6emxlXEh0dHBcVXJpVGVtcGxhdGUgdG8gR3V6emxlXEh0dHBcUGFyc2VyXFVyaVRlbXBsYXRlXFVyaVRlbXBsYXRlCiogW0JDXSBHdXp6bGVcR3V6emxlIGlzIG5vdyBkZXByZWNhdGVkCiogTW92aW5nIEd1enpsZVxDb21tb25cR3V6emxlOjppbmplY3QgdG8gR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjppbmplY3QKKiBBZGRpbmcgR3V6emxlXFZlcnNpb24gY2xhc3MgdG8gZ2l2ZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IEd1enpsZQoqIEFkZGluZyBHdXp6bGVcSHR0cFxVdGlscyBjbGFzcyB0byBwcm92aWRlIGdldERlZmF1bHRVc2VyQWdlbnQoKSBhbmQgZ2V0SHR0cERhdGUoKQoqIEFkZGluZyBHdXp6bGVcQ3VybFxDdXJsVmVyc2lvbiB0byBtYW5hZ2UgY2FjaGluZyBjdXJsX3ZlcnNpb24oKSBkYXRhCiogU2VydmljZURlc2NyaXB0aW9uIGFuZCBTZXJ2aWNlQnVpbGRlciBhcmUgbm93IGNhY2hlYWJsZSB1c2luZyBzaW1pbGFyIGNvbmZpZ3MKKiBDaGFuZ2luZyB0aGUgZm9ybWF0IG9mIFhNTCBhbmQgSlNPTiBzZXJ2aWNlIGJ1aWxkZXIgY29uZmlncy4gIEJhY2t3YXJkcyBjb21wYXRpYmxlLgoqIENsZWFuZWQgdXAgQ29va2llIHBhcnNpbmcKKiBUcmltbWluZyB0aGUgZGVmYXVsdCBHdXp6bGUgVXNlci1BZ2VudCBoZWFkZXIKKiBBZGRpbmcgYSBzZXRPbkNvbXBsZXRlKCkgbWV0aG9kIHRvIENvbW1hbmRzIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBjb21tYW5kIGNvbXBsZXRlcwoqIEtlZXBpbmcgdHJhY2sgb2YgcmVxdWVzdHMgdGhhdCB3ZXJlIG1vY2tlZCBpbiB0aGUgTW9ja1BsdWdpbgoqIEZpeGVkIGEgY2FjaGluZyBidWcgaW4gdGhlIENhY2hlQWRhcHRlckZhY3RvcnkKKiBJbnNwZWN0b3Igb2JqZWN0cyBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIENvbW1hbmQgb2JqZWN0CiogUmVmYWN0b3JpbmcgYSBsb3Qgb2YgY29kZSBhbmQgdGVzdHMgdG8gYmUgY2FzZSBpbnNlbnNpdGl2ZSB3aGVuIGRlYWxpbmcgd2l0aCBoZWFkZXJzCiogQWRkaW5nIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyQ29tcGFyaXNvbiBmb3IgZWFzeSBjb21wYXJpc29uIG9mIEhUVFAgaGVhZGVycyB1c2luZyBhIERTTAoqIEFkZGluZyB0aGUgYWJpbGl0eSB0byBzZXQgZ2xvYmFsIG9wdGlvbiBvdmVycmlkZXMgdG8gc2VydmljZSBidWlsZGVyIGNvbmZpZ3MKKiBBZGRpbmcgdGhlIGFiaWxpdHkgdG8gaW5jbHVkZSBvdGhlciBzZXJ2aWNlIGJ1aWxkZXIgY29uZmlnIGZpbGVzIGZyb20gd2l0aGluIFhNTCBhbmQgSlNPTiBmaWxlcwoqIE1vdmluZyB0aGUgcGFyc2VRdWVyeSBtZXRob2Qgb3V0IG9mIFVybCBhbmQgb24gdG8gUXVlcnlTdHJpbmc6OmZyb21TdHJpbmcoKSBhcyBhIHN0YXRpYyBmYWN0b3J5IG1ldGhvZC4KCiMjIDIuNS4wIC0gMjAxMi0wNS0wOAoKKiBNYWpvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBbQkNdIFNpbXBsaWZ5aW5nIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbi4gIFBsZWFzZSBjaGVjayB0byBzZWUgaWYgeW91IGFyZSB1c2luZyBmZWF0dXJlcyB0aGF0IGFyZSBub3cgZGVwcmVjYXRlZC4KKiBbQkNdIFVzaW5nIGEgY3VzdG9tIHZhbGlkYXRpb24gc3lzdGVtIHRoYXQgYWxsb3dzIGEgZmx5d2VpZ2h0IGltcGxlbWVudGF0aW9uIGZvciBtdWNoIGZhc3RlciB2YWxpZGF0aW9uLiBObyBsb25nZXIgdXNpbmcgU3ltZm9ueTIgVmFsaWRhdGlvbiBjb21wb25lbnQuCiogW0JDXSBObyBsb25nZXIgc3VwcG9ydGluZyAie3sgfX0iIGZvciBpbmplY3RpbmcgaW50byBjb21tYW5kIG9yIFVyaVRlbXBsYXRlcy4gIFVzZSAie30iCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gcGFzc2VkIHBhcmFtZXRlcnMgdG8gYWxsIHJlcXVlc3RzIGNyZWF0ZWQgYnkgYSBjbGllbnQKKiBBZGRlZCBjYWxsYmFjayBmdW5jdGlvbmFsaXR5IHRvIHRoZSBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4KKiBVc2luZyBtaWNyb3RpbWUgaW4gRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luIHRvIGFsbG93IG1vcmUgZ3JhbnVsYXIgYmFja29mZiBzdHJhdGVnaWVzLgoqIFJld2luZGluZyByZXF1ZXN0IHN0cmVhbSBib2RpZXMgd2hlbiByZXRyeWluZyByZXF1ZXN0cwoqIEV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBKU09OIHJlc3BvbnNlIGJvZHkgY2Fubm90IGJlIGRlY29kZWQKKiBBZGRlZCBjb25maWd1cmFibGUgbWFnaWMgbWV0aG9kIGNhbGxzIHRvIGNsaWVudHMgYW5kIGNvbW1hbmRzLiAgVGhpcyBpcyBvZmYgYnkgZGVmYXVsdC4KKiBGaXhlZCBhIGRlZmVjdCB0aGF0IGFkZGVkIGEgaGFzaCB0byBldmVyeSBwYXJzZWQgVVJMIHBhcnQKKiBGaXhlZCBkdXBsaWNhdGUgbm9uZSBnZW5lcmF0aW9uIGZvciBPYXV0aFBsdWdpbi4KKiBFbWl0dGluZyBhbiBldmVudCBlYWNoIHRpbWUgYSBjbGllbnQgaXMgZ2VuZXJhdGVkIGJ5IGEgU2VydmljZUJ1aWxkZXIKKiBVc2luZyBhbiBBcGlQYXJhbXMgb2JqZWN0IGluc3RlYWQgb2YgYSBDb2xsZWN0aW9uIGZvciBwYXJhbWV0ZXJzIG9mIGFuIEFwaUNvbW1hbmQKKiBjYWNoZS4qIHJlcXVlc3QgcGFyYW1ldGVycyBzaG91bGQgYmUgcmVuYW1lZCB0byBwYXJhbXMuY2FjaGUuKgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBhcmJpdHJhcnkgY3VybCBvcHRpb25zIG9uIHJlcXVlc3RzIChkaXNhYmxlX3dpcmUsIHByb2dyZXNzLCBldGMuKS4gU2VlIEN1cmxIYW5kbGUuCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gZGlzYWJsZSB0eXBlIHZhbGlkYXRpb24gb2Ygc2VydmljZSBkZXNjcmlwdGlvbnMKKiBTZXJ2aWNlRGVzY3JpcHRpb25zIGFuZCBTZXJ2aWNlQnVpbGRlcnMgYXJlIG5vdyBTZXJpYWxpemFibGUK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgImZyYW1ld29yayIsCiAgICAgICAgImh0dHAiLAogICAgICAgICJyZXN0IiwKICAgICAgICAid2ViIHNlcnZpY2UiLAogICAgICAgICJjdXJsIiwKICAgICAgICAiY2xpZW50IiwKICAgICAgICAiSFRUUCBjbGllbnQiLAogICAgICAgICJQU1ItNyIsCiAgICAgICAgIlBTUi0xOCIKICAgIF0sCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiSmVyZW15IExpbmRibG9tIiwKICAgICAgICAgICAgImVtYWlsIjogImplcmVtZWFtaWFAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qZXJlbWVhbWlhIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHZW9yZ2UgTXBvbm9zIiwKICAgICAgICAgICAgImVtYWlsIjogImdtcG9ub3NAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nbXBvbm9zIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgTnlob2xtIiwKICAgICAgICAgICAgImVtYWlsIjogInRvYmlhcy5ueWhvbG1AZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9OeWhvbG0iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NhZ2lrYXphcm1hcmsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICJlbWFpbCI6ICJ3ZWJtYXN0ZXJAdHViby13b3JsZC5kZSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjIuNSIsCiAgICAgICAgImd1enpsZWh0dHAvcHNyNyI6ICJeMi4xMiIsCiAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiOiAiXjIuNSB8fCBeMy4wIiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4yNCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICJiYW1hcm5pL2NvbXBvc2VyLWJpbi1wbHVnaW4iOiAiXjEuOC4yIiwKICAgICAgICAiZ3V6emxlL2NsaWVudC1pbnRlZ3JhdGlvbi10ZXN0cyI6ICIzLjAuMiIsCiAgICAgICAgImd1enpsZWh0dHAvdGVzdC1zZXJ2ZXIiOiAiXjAuNSIsCiAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJeMS4xIiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl44LjUuNTIgfHwgXjkuNi4zNCIsCiAgICAgICAgInBzci9sb2ciOiAiXjEuMSB8fCBeMi4wIHx8IF4zLjAiCiAgICB9LAogICAgInByb3ZpZGUiOiB7CiAgICAgICAgInBzci9odHRwLWNsaWVudC1pbXBsZW1lbnRhdGlvbiI6ICIxLjAiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIlJlcXVpcmVkIGZvciBDVVJMIGhhbmRsZXIgc3VwcG9ydCIsCiAgICAgICAgImV4dC1pbnRsIjogIlJlcXVpcmVkIGZvciBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSAoSUROKSBzdXBwb3J0IiwKICAgICAgICAicHNyL2xvZyI6ICJSZXF1aXJlZCBmb3IgdXNpbmcgdGhlIExvZyBtaWRkbGV3YXJlIgogICAgfSwKICAgICJyZXBvc2l0b3JpZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgInBhY2thZ2UiOiB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJndXp6bGUvY2xpZW50LWludGVncmF0aW9uLXRlc3RzIiwKICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogInYzLjAuMiIsCiAgICAgICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4xLjcgfHwgXjIuMCIsCiAgICAgICAgICAgICAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIsCiAgICAgICAgICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIiwKICAgICAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjUuMjAgfHwgXjguNS44IHx8IF45LjMuMTEiLAogICAgICAgICAgICAgICAgICAgICJ0aDNuM3JkL2NhcnRlc2lhbi1wcm9kdWN0IjogIl4wLjMiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIkh0dHBcXENsaWVudFxcVGVzdHNcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYmluIjogWwogICAgICAgICAgICAgICAgICAgICJiaW4vaHR0cF90ZXN0X3NlcnZlciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9jb2RlbG9hZC5naXRodWIuY29tL2d1enpsZS9jbGllbnQtaW50ZWdyYXRpb24tdGVzdHMvemlwLzJjMDI1ODQ4NDE3YzExMzUwMzFmZGY5YzcyOGVlNTNkMGE3Y2VhZWUiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkd1enpsZUh0dHBcXCI6ICJzcmMvIgogICAgICAgIH0sCiAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICBdCiAgICB9LAogICAgImF1dG9sb2FkLWRldiI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJHdXp6bGVIdHRwXFxUZXN0c1xcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAiYWxsb3ctcGx1Z2lucyI6IHsKICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6IHRydWUKICAgICAgICB9LAogICAgICAgICJwcmVmZXJyZWQtaW5zdGFsbCI6ICJkaXN0IiwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAiYmluLWxpbmtzIjogdHJ1ZSwKICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTEgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTIgSmVyZW15IExpbmRibG9tIDxqZXJlbWVhbWlhQGdtYWlsLmNvbT4KQ29weXJpZ2h0IChjKSAyMDE0IEdyYWhhbSBDYW1wYmVsbCA8aGVsbG9AZ2pjYW1wYmVsbC5jby51az4KQ29weXJpZ2h0IChjKSAyMDE1IE3DoXJrIFPDoWdpLUthesOhciA8bWFyay5zYWdpa2F6YXJAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgVG9iaWFzIFNjaHVsdHplIDx3ZWJtYXN0ZXJAdHViby13b3JsZC5kZT4KQ29weXJpZ2h0IChjKSAyMDE2IFRvYmlhcyBOeWhvbG0gPHRvYmlhcy5ueWhvbG1AZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTYgR2VvcmdlIE1wb25vcyA8Z21wb25vc0BnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/package-lock.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogImd1enpsZSIsCiAgImxvY2tmaWxlVmVyc2lvbiI6IDMsCiAgInJlcXVpcmVzIjogdHJ1ZSwKICAicGFja2FnZXMiOiB7fQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IVtHdXp6bGVdKC5naXRodWIvbG9nby5wbmc/cmF3PXRydWUpCgojIEd1enpsZSwgUEhQIEhUVFAgY2xpZW50CgpbIVtMYXRlc3QgVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvcmVsZWFzZS9ndXp6bGUvZ3V6emxlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3JlbGVhc2VzKQpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2FjdGlvbnMvd29ya2Zsb3cvc3RhdHVzL2d1enpsZS9ndXp6bGUvY2kueW1sP2xhYmVsPWNpJTIwYnVpbGQmc3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9hY3Rpb25zP3F1ZXJ5PXdvcmtmbG93JTNBQ0kpClshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9wYWNrYWdpc3QvZHQvZ3V6emxlaHR0cC9ndXp6bGUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2d1enpsZWh0dHAvZ3V6emxlKQoKR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IHRoYXQgbWFrZXMgaXQgZWFzeSB0byBzZW5kIEhUVFAgcmVxdWVzdHMgYW5kCnRyaXZpYWwgdG8gaW50ZWdyYXRlIHdpdGggd2ViIHNlcnZpY2VzLgoKLSBTaW1wbGUgaW50ZXJmYWNlIGZvciBidWlsZGluZyBxdWVyeSBzdHJpbmdzLCBQT1NUIHJlcXVlc3RzLCBzdHJlYW1pbmcgbGFyZ2UKICB1cGxvYWRzLCBzdHJlYW1pbmcgbGFyZ2UgZG93bmxvYWRzLCB1c2luZyBIVFRQIGNvb2tpZXMsIHVwbG9hZGluZyBKU09OIGRhdGEsCiAgZXRjLi4uCi0gQ2FuIHNlbmQgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlcXVlc3RzIHVzaW5nIHRoZSBzYW1lIGludGVyZmFjZS4KLSBVc2VzIFBTUi03IGludGVyZmFjZXMgZm9yIHJlcXVlc3RzLCByZXNwb25zZXMsIGFuZCBzdHJlYW1zLiBUaGlzIGFsbG93cyB5b3UKICB0byB1dGlsaXplIG90aGVyIFBTUi03IGNvbXBhdGlibGUgbGlicmFyaWVzIHdpdGggR3V6emxlLgotIFN1cHBvcnRzIFBTUi0xOCBhbGxvd2luZyBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gb3RoZXIgUFNSLTE4IEhUVFAgQ2xpZW50cy4KLSBBYnN0cmFjdHMgYXdheSB0aGUgdW5kZXJseWluZyBIVFRQIHRyYW5zcG9ydCwgYWxsb3dpbmcgeW91IHRvIHdyaXRlCiAgZW52aXJvbm1lbnQgYW5kIHRyYW5zcG9ydCBhZ25vc3RpYyBjb2RlOyBpLmUuLCBubyBoYXJkIGRlcGVuZGVuY3kgb24gY1VSTCwKICBQSFAgc3RyZWFtcywgc29ja2V0cywgb3Igbm9uLWJsb2NraW5nIGV2ZW50IGxvb3BzLgotIE1pZGRsZXdhcmUgc3lzdGVtIGFsbG93cyB5b3UgdG8gYXVnbWVudCBhbmQgY29tcG9zZSBjbGllbnQgYmVoYXZpb3IuCgpgYGBwaHAKJGNsaWVudCA9IG5ldyBcR3V6emxlSHR0cFxDbGllbnQoKTsKJHJlc3BvbnNlID0gJGNsaWVudC0+cmVxdWVzdCgnR0VUJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL2d1enpsZScpOwoKZWNobyAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKTsgLy8gMjAwCmVjaG8gJHJlc3BvbnNlLT5nZXRIZWFkZXJMaW5lKCdjb250ZW50LXR5cGUnKTsgLy8gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmOCcKZWNobyAkcmVzcG9uc2UtPmdldEJvZHkoKTsgLy8gJ3siaWQiOiAxNDIwMDUzLCAibmFtZSI6ICJndXp6bGUiLCAuLi59JwoKLy8gU2VuZCBhbiBhc3luY2hyb25vdXMgcmVxdWVzdC4KJHJlcXVlc3QgPSBuZXcgXEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0KCdHRVQnLCAnaHR0cDovL2h0dHBiaW4ub3JnJyk7CiRwcm9taXNlID0gJGNsaWVudC0+c2VuZEFzeW5jKCRyZXF1ZXN0KS0+dGhlbihmdW5jdGlvbiAoJHJlc3BvbnNlKSB7CiAgICBlY2hvICdJIGNvbXBsZXRlZCEgJyAuICRyZXNwb25zZS0+Z2V0Qm9keSgpOwp9KTsKCiRwcm9taXNlLT53YWl0KCk7CmBgYAoKIyMgSGVscCBhbmQgZG9jcwoKV2UgdXNlIEdpdEh1YiBpc3N1ZXMgb25seSB0byBkaXNjdXNzIGJ1Z3MgYW5kIG5ldyBmZWF0dXJlcy4gRm9yIHN1cHBvcnQgcGxlYXNlIHJlZmVyIHRvOgoKLSBbRG9jdW1lbnRhdGlvbl0oZG9jcy9pbmRleC5tZCkKLSBbU3RhY2sgT3ZlcmZsb3ddKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zL3RhZ2dlZC9ndXp6bGUpCi0gWyNndXp6bGVdKGh0dHBzOi8vYXBwLnNsYWNrLmNvbS9jbGllbnQvVDBEMlM5SkNUL0NFNlVBQUtMNCkgY2hhbm5lbCBvbiBbUEhQLUhUVFAgU2xhY2tdKGh0dHBzOi8vc2xhY2suaHR0cGx1Zy5pby8pCi0gW0dpdHRlcl0oaHR0cHM6Ly9naXR0ZXIuaW0vZ3V6emxlL2d1enpsZSkKCgojIyBJbnN0YWxsaW5nIEd1enpsZQoKVGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnN0YWxsIEd1enpsZSBpcyB0aHJvdWdoCltDb21wb3Nlcl0oaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvKS4KCmBgYGJhc2gKY29tcG9zZXIgcmVxdWlyZSBndXp6bGVodHRwL2d1enpsZQpgYGAKCgojIyBWZXJzaW9uIEd1aWRhbmNlCgp8IFZlcnNpb24gfCBTdGF0dXMgICAgICAgICAgICAgIHwgUGFja2FnaXN0ICAgICAgICAgICB8IE5hbWVzcGFjZSAgICB8IFJlcG8gICAgICAgICAgICAgICAgfCBEb2NzICAgICAgICAgICAgICAgIHwgUFNSLTcgfCBQSFAgVmVyc2lvbiAgfAp8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAp8IDMueCAgICAgfCBFT0wgKDIwMTYtMTAtMzEpICAgIHwgYGd1enpsZS9ndXp6bGVgICAgICB8IGBHdXp6bGVgICAgICB8IFt2M11bZ3V6emxlLTMtcmVwb10gfCBbdjNdW2d1enpsZS0zLWRvY3NdIHwgTm8gICAgfCA+PTUuMy4zLDw3LjAgfAp8IDQueCAgICAgfCBFT0wgKDIwMTYtMTAtMzEpICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2NF1bZ3V6emxlLTQtcmVwb10gfCBOL0EgICAgICAgICAgICAgICAgIHwgTm8gICAgfCA+PTUuNCw8Ny4wICAgfAp8IDUueCAgICAgfCBFT0wgKDIwMTktMTAtMzEpICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2NV1bZ3V6emxlLTUtcmVwb10gfCBbdjVdW2d1enpsZS01LWRvY3NdIHwgTm8gICAgfCA+PTUuNCw8Ny40ICAgfAp8IDYueCAgICAgfCBFT0wgKDIwMjMtMTAtMzEpICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2Nl1bZ3V6emxlLTYtcmVwb10gfCBbdjZdW2d1enpsZS02LWRvY3NdIHwgWWVzICAgfCA+PTUuNSw8OC4wICAgfAp8IDcueCAgICAgfCBMYXRlc3QgICAgICAgICAgICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2N11bZ3V6emxlLTctcmVwb10gfCBbdjddW2d1enpsZS03LWRvY3NdIHwgWWVzICAgfCA+PTcuMi41LDw4LjYgfAoKW2d1enpsZS0zLXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZTMKW2d1enpsZS00LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzQueApbZ3V6emxlLTUtcmVwb106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNS4zCltndXp6bGUtNi1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvdHJlZS82LjUKW2d1enpsZS03LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzcuMTIKW2d1enpsZS0zLWRvY3NdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZTMvdHJlZS9tYXN0ZXIvZG9jcwpbZ3V6emxlLTUtZG9jc106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNS4zL2RvY3MKW2d1enpsZS02LWRvY3NdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzYuNS9kb2NzCltndXp6bGUtNy1kb2NzXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvYmxvYi83LjEyL2RvY3MvaW5kZXgubWQKCgojIyBTZWN1cml0eQoKSWYgeW91IGRpc2NvdmVyIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhpcyBwYWNrYWdlLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbCB0byBzZWN1cml0eUB0aWRlbGlmdC5jb20uIEFsbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBiZSBwcm9tcHRseSBhZGRyZXNzZWQuIFBsZWFzZSBkbyBub3QgZGlzY2xvc2Ugc2VjdXJpdHktcmVsYXRlZCBpc3N1ZXMgcHVibGljbHkgdW50aWwgYSBmaXggaGFzIGJlZW4gYW5ub3VuY2VkLiBQbGVhc2Ugc2VlIFtTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3NlY3VyaXR5L3BvbGljeSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgojIyBMaWNlbnNlCgpHdXp6bGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMaWNlbnNlIEZpbGVdKExJQ0VOU0UpIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKIyMgRm9yIEVudGVycHJpc2UKCkF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBUaWRlbGlmdCBTdWJzY3JpcHRpb24KClRoZSBtYWludGFpbmVycyBvZiBHdXp6bGUgYW5kIHRob3VzYW5kcyBvZiBvdGhlciBwYWNrYWdlcyBhcmUgd29ya2luZyB3aXRoIFRpZGVsaWZ0IHRvIGRlbGl2ZXIgY29tbWVyY2lhbCBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBmb3IgdGhlIG9wZW4gc291cmNlIGRlcGVuZGVuY2llcyB5b3UgdXNlIHRvIGJ1aWxkIHlvdXIgYXBwbGljYXRpb25zLiBTYXZlIHRpbWUsIHJlZHVjZSByaXNrLCBhbmQgaW1wcm92ZSBjb2RlIGhlYWx0aCwgd2hpbGUgcGF5aW5nIHRoZSBtYWludGFpbmVycyBvZiB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIHlvdSB1c2UuIFtMZWFybiBtb3JlLl0oaHR0cHM6Ly90aWRlbGlmdC5jb20vc3Vic2NyaXB0aW9uL3BrZy9wYWNrYWdpc3QtZ3V6emxlaHR0cC1ndXp6bGU/dXRtX3NvdXJjZT1wYWNrYWdpc3QtZ3V6emxlaHR0cC1ndXp6bGUmdXRtX21lZGl1bT1yZWZlcnJhbCZ1dG1fY2FtcGFpZ249ZW50ZXJwcmlzZSZ1dG1fdGVybT1yZXBvKQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/BodySummarizer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKCmZpbmFsIGNsYXNzIEJvZHlTdW1tYXJpemVyIGltcGxlbWVudHMgQm9keVN1bW1hcml6ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHRydW5jYXRlQXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJHRydW5jYXRlQXQgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT50cnVuY2F0ZUF0ID0gJHRydW5jYXRlQXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3VtbWFyaXplZCBtZXNzYWdlIGJvZHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdW1tYXJpemUoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRydW5jYXRlQXQgPT09IG51bGwKICAgICAgICAgICAgPyBQc3I3XE1lc3NhZ2U6OmJvZHlTdW1tYXJ5KCRtZXNzYWdlKQogICAgICAgICAgICA6IFBzcjdcTWVzc2FnZTo6Ym9keVN1bW1hcnkoJG1lc3NhZ2UsICR0aGlzLT50cnVuY2F0ZUF0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKCmludGVyZmFjZSBCb2R5U3VtbWFyaXplckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdW1tYXJpemVkIG1lc3NhZ2UgYm9keS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1bW1hcml6ZShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKTogP3N0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Client.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphcjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclxDdXJsU2hhcmVIYW5kbGVTdGF0ZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBAZmluYWwKICovCmNsYXNzIENsaWVudCBpbXBsZW1lbnRzIENsaWVudEludGVyZmFjZSwgXFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2UKewogICAgdXNlIENsaWVudFRyYWl0OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheSBEZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucwogICAgICovCiAgICBwcml2YXRlICRjb25maWc7CgogICAgLyoqCiAgICAgKiBDbGllbnRzIGFjY2VwdCBhbiBhcnJheSBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEhlcmUncyBhbiBleGFtcGxlIG9mIGNyZWF0aW5nIGEgY2xpZW50IHVzaW5nIGEgYmFzZV91cmkgYW5kIGFuIGFycmF5IG9mCiAgICAgKiBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseSB0byBlYWNoIHJlcXVlc3Q6CiAgICAgKgogICAgICogICAgICRjbGllbnQgPSBuZXcgQ2xpZW50KFsKICAgICAqICAgICAgICAgJ2Jhc2VfdXJpJyAgICAgICAgPT4gJ2h0dHA6Ly93d3cuZm9vLmNvbS8xLjAvJywKICAgICAqICAgICAgICAgJ3RpbWVvdXQnICAgICAgICAgPT4gMCwKICAgICAqICAgICAgICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gZmFsc2UsCiAgICAgKiAgICAgICAgICdwcm94eScgICAgICAgICAgID0+ICcxOTIuMTY4LjE2LjE6MTAnCiAgICAgKiAgICAgXSk7CiAgICAgKgogICAgICogQ2xpZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBoYW5kbGVyOiAoY2FsbGFibGUpIEZ1bmN0aW9uIHRoYXQgdHJhbnNmZXJzIEhUVFAgcmVxdWVzdHMgb3ZlciB0aGUKICAgICAqICAgd2lyZS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgUHNyN1xIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZQogICAgICogICBhbmQgYXJyYXkgb2YgdHJhbnNmZXIgb3B0aW9ucywgYW5kIG11c3QgcmV0dXJuIGEKICAgICAqICAgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhCiAgICAgKiAgIFBzcjdcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlIG9uIHN1Y2Nlc3MuCiAgICAgKiAgIElmIG5vIGhhbmRsZXIgaXMgcHJvdmlkZWQsIGEgZGVmYXVsdCBoYW5kbGVyIHdpbGwgYmUgY3JlYXRlZAogICAgICogICB0aGF0IGVuYWJsZXMgYWxsIG9mIHRoZSByZXF1ZXN0IG9wdGlvbnMgYmVsb3cgYnkgYXR0YWNoaW5nIGFsbCBvZiB0aGUKICAgICAqICAgZGVmYXVsdCBtaWRkbGV3YXJlIHRvIHRoZSBoYW5kbGVyLgogICAgICogLSBiYXNlX3VyaTogKHN0cmluZ3xVcmlJbnRlcmZhY2UpIEJhc2UgVVJJIG9mIHRoZSBjbGllbnQgdGhhdCBpcyBtZXJnZWQKICAgICAqICAgaW50byByZWxhdGl2ZSBVUklzLiBDYW4gYmUgYSBzdHJpbmcgb3IgaW5zdGFuY2Ugb2YgVXJpSW50ZXJmYWNlLgogICAgICogLSB0cmFuc3BvcnRfc2hhcmluZzogKHN0cmluZ3xudWxsKSBUcmFuc3BvcnQgc2hhcmluZyBtb2RlIGZvciB0aGUKICAgICAqICAgZGVmYXVsdCBoYW5kbGVyLiBBY2NlcHRzIFRyYW5zcG9ydFNoYXJpbmc6Oiogb3IgbnVsbC4gRGVmYXVsdHMgdG8gbnVsbC4KICAgICAqIC0gKio6IGFueSByZXF1ZXN0IG9wdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY29uZmlnIENsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgogICAgICoKICAgICAqIEBzZWUgUmVxdWVzdE9wdGlvbnMgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcmVxdWVzdCBvcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGNvbmZpZyA9IFtdKQogICAgewogICAgICAgICR0cmFuc3BvcnRTaGFyaW5nID0gXGFycmF5X2tleV9leGlzdHMoJ3RyYW5zcG9ydF9zaGFyaW5nJywgJGNvbmZpZykgPyAkY29uZmlnWyd0cmFuc3BvcnRfc2hhcmluZyddIDogbnVsbDsKICAgICAgICAkdHJhbnNwb3J0U2hhcmluZ01vZGUgPSBDdXJsU2hhcmVIYW5kbGVTdGF0ZTo6bm9ybWFsaXplTW9kZSgkdHJhbnNwb3J0U2hhcmluZywgJ3RyYW5zcG9ydF9zaGFyaW5nJyk7CiAgICAgICAgdW5zZXQoJGNvbmZpZ1sndHJhbnNwb3J0X3NoYXJpbmcnXSk7CgogICAgICAgIGlmICghaXNzZXQoJGNvbmZpZ1snaGFuZGxlciddKSkgewogICAgICAgICAgICAkY29uZmlnWydoYW5kbGVyJ10gPSAkdHJhbnNwb3J0U2hhcmluZ01vZGUgPT09IFRyYW5zcG9ydFNoYXJpbmc6Ok5PTkUKICAgICAgICAgICAgICAgID8gSGFuZGxlclN0YWNrOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgOiBIYW5kbGVyU3RhY2s6OmNyZWF0ZShVdGlsczo6Y2hvb3NlSGFuZGxlcihbJ3RyYW5zcG9ydF9zaGFyaW5nJyA9PiAkdHJhbnNwb3J0U2hhcmluZ01vZGVdKSk7CiAgICAgICAgfSBlbHNlaWYgKCFcaXNfY2FsbGFibGUoJGNvbmZpZ1snaGFuZGxlciddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoYW5kbGVyIG11c3QgYmUgYSBjYWxsYWJsZScpOwogICAgICAgIH0gZWxzZWlmICgkdHJhbnNwb3J0U2hhcmluZ01vZGUgPT09IFRyYW5zcG9ydFNoYXJpbmc6OkhBTkRMRVJfUkVRVUlSRSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgInRyYW5zcG9ydF9zaGFyaW5nIiBjbGllbnQgb3B0aW9uIGNhbiBvbmx5IHJlcXVpcmUgc2hhcmluZyB3aGVuIEd1enpsZSBjcmVhdGVzIHRoZSBkZWZhdWx0IGhhbmRsZXIuIENvbmZpZ3VyZSB0aGUgInRyYW5zcG9ydF9zaGFyaW5nIiBvcHRpb24gb24gQ3VybEhhbmRsZXIgb3IgQ3VybE11bHRpSGFuZGxlciB3aGVuIHByb3ZpZGluZyBhIGN1c3RvbSBjVVJMIGhhbmRsZXIuJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDb252ZXJ0IHRoZSBiYXNlX3VyaSB0byBhIFVyaUludGVyZmFjZQogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydiYXNlX3VyaSddKSkgewogICAgICAgICAgICAkY29uZmlnWydiYXNlX3VyaSddID0gUHNyN1xVdGlsczo6dXJpRm9yKCRjb25maWdbJ2Jhc2VfdXJpJ10pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNvbmZpZ3VyZURlZmF1bHRzKCRjb25maWcpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhcmdzCiAgICAgKgogICAgICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlfFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgQ2xpZW50OjpfX2NhbGwgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kLCAkYXJncykKICAgIHsKICAgICAgICBpZiAoXGNvdW50KCRhcmdzKSA8IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignTWFnaWMgcmVxdWVzdCBtZXRob2RzIHJlcXVpcmUgYSBVUkkgYW5kIG9wdGlvbmFsIG9wdGlvbnMgYXJyYXknKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkYXJnc1swXTsKICAgICAgICAkb3B0cyA9ICRhcmdzWzFdID8/IFtdOwoKICAgICAgICAkaXNBc3luYyA9IFxzdWJzdHIoJG1ldGhvZCwgLTUpID09PSAnQXN5bmMnOwogICAgICAgICRtZXRob2QgPSAkaXNBc3luYyA/IFxzdWJzdHIoJG1ldGhvZCwgMCwgLTUpIDogJG1ldGhvZDsKICAgICAgICAkbWV0aG9kID0gXHN0cnRvdXBwZXIoJG1ldGhvZCk7CgogICAgICAgIHJldHVybiAkaXNBc3luYwogICAgICAgICAgICA/ICR0aGlzLT5yZXF1ZXN0QXN5bmMoJG1ldGhvZCwgJHVyaSwgJG9wdHMpCiAgICAgICAgICAgIDogJHRoaXMtPnJlcXVlc3QoJG1ldGhvZCwgJHVyaSwgJG9wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogQXN5bmNocm9ub3VzbHkgc2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseSB0byB0aGUgZ2l2ZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB0byB0aGUgdHJhbnNmZXIuIFNlZSB7QHNlZSBSZXF1ZXN0T3B0aW9uc30uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kQXN5bmMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAvLyBNZXJnZSB0aGUgYmFzZSBVUkkgaW50byB0aGUgcmVxdWVzdCBVUkkgaWYgbmVlZGVkLgogICAgICAgICRvcHRpb25zID0gJHRoaXMtPnByZXBhcmVEZWZhdWx0cygkb3B0aW9ucyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dHJhbnNmZXIoCiAgICAgICAgICAgICRyZXF1ZXN0LT53aXRoVXJpKCR0aGlzLT5idWlsZFVyaSgkcmVxdWVzdC0+Z2V0VXJpKCksICRvcHRpb25zKSwgJHJlcXVlc3QtPmhhc0hlYWRlcignSG9zdCcpKSwKICAgICAgICAgICAgJG9wdGlvbnMKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseSB0byB0aGUgZ2l2ZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB0byB0aGUgdHJhbnNmZXIuIFNlZSB7QHNlZSBSZXF1ZXN0T3B0aW9uc30uCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSA9IHRydWU7CgogICAgICAgIHJldHVybiAkdGhpcy0+c2VuZEFzeW5jKCRyZXF1ZXN0LCAkb3B0aW9ucyktPndhaXQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBIdHRwQ2xpZW50IFBTUiAoUFNSLTE4KSBzcGVjaWZ5IHRoaXMgbWV0aG9kLgogICAgICoKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpBTExPV19SRURJUkVDVFNdID0gZmFsc2U7CiAgICAgICAgJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OkhUVFBfRVJST1JTXSA9IGZhbHNlOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnNlbmRBc3luYygkcmVxdWVzdCwgJG9wdGlvbnMpLT53YWl0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLiBVc2UgYW4gYXJyYXkgdG8gcHJvdmlkZSBhIFVSTAogICAgICogdGVtcGxhdGUgYW5kIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIHVzZSBpbiB0aGUgVVJMIHRlbXBsYXRlIGV4cGFuc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuIFNlZSB7QHNlZSBSZXF1ZXN0T3B0aW9uc30uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXF1ZXN0QXN5bmMoc3RyaW5nICRtZXRob2QsICR1cmkgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbm9ybWFsaXplZE1ldGhvZCA9IFxzdHJ0b3VwcGVyKCRtZXRob2QpOwogICAgICAgIGlmICgkbWV0aG9kICE9PSAkbm9ybWFsaXplZE1ldGhvZCkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICAgICAnNy4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyBhIG5vbi11cHBlcmNhc2UgSFRUUCBtZXRob2QgdG8gQ2xpZW50OjpyZXF1ZXN0QXN5bmMoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL2d1enpsZSA4LjAgd2lsbCBwcmVzZXJ2ZSBIVFRQIG1ldGhvZCBjYXNpbmcuIFBhc3MgYW4gdXBwZXJjYXNlIG1ldGhvZCBleHBsaWNpdGx5IGlmIHVwcGVyY2FzZSBpcyByZXF1aXJlZC4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRtZXRob2QgPSAkbm9ybWFsaXplZE1ldGhvZDsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zID0gJHRoaXMtPnByZXBhcmVEZWZhdWx0cygkb3B0aW9ucyk7CiAgICAgICAgLy8gUmVtb3ZlIHJlcXVlc3QgbW9kaWZ5aW5nIHBhcmFtZXRlciBiZWNhdXNlIGl0IGNhbiBiZSBkb25lIHVwLWZyb250LgogICAgICAgICRoZWFkZXJzID0gJG9wdGlvbnNbJ2hlYWRlcnMnXSA/PyBbXTsKICAgICAgICAkZHJvcHBlZEhlYWRlck5hbWVzID0gc2VsZjo6Y2FzdERlcHJlY2F0ZWRIZWFkZXJPcHRpb25WYWx1ZXMoJGhlYWRlcnMpOwogICAgICAgIGlmICgkZHJvcHBlZEhlYWRlck5hbWVzICE9PSBbXSAmJiBpc3NldCgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKCRkcm9wcGVkSGVhZGVyTmFtZXMsICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgfQogICAgICAgICRib2R5ID0gJG9wdGlvbnNbJ2JvZHknXSA/PyBudWxsOwogICAgICAgICR2ZXJzaW9uID0gc2VsZjo6bm9ybWFsaXplUHJvdG9jb2xWZXJzaW9uKCRvcHRpb25zWyd2ZXJzaW9uJ10gPz8gJzEuMScpOwogICAgICAgIC8vIE1lcmdlIHRoZSBVUkkgaW50byB0aGUgYmFzZSBVUkkuCiAgICAgICAgJHVyaSA9ICR0aGlzLT5idWlsZFVyaShQc3I3XFV0aWxzOjp1cmlGb3IoJHVyaSksICRvcHRpb25zKTsKICAgICAgICBpZiAoXGlzX2FycmF5KCRib2R5KSkgewogICAgICAgICAgICB0aHJvdyAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICB9CiAgICAgICAgJGJvZHkgPSBzZWxmOjpjcmVhdGVCb2R5U3RyZWFtKCRib2R5KTsKICAgICAgICAkcmVxdWVzdCA9IG5ldyBQc3I3XFJlcXVlc3QoJG1ldGhvZCwgJHVyaSwgJGhlYWRlcnMsICRib2R5LCAkdmVyc2lvbik7CiAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcHRpb24gc28gdGhhdCB0aGV5IGFyZSBub3QgZG91Ymx5LWFwcGxpZWQuCiAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSwgJG9wdGlvbnNbJ2JvZHknXSwgJG9wdGlvbnNbJ3ZlcnNpb24nXSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dHJhbnNmZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZC4KICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LiBTZWUge0BzZWUgUmVxdWVzdE9wdGlvbnN9LgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXF1ZXN0KHN0cmluZyAkbWV0aG9kLCAkdXJpID0gJycsIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgICRub3JtYWxpemVkTWV0aG9kID0gXHN0cnRvdXBwZXIoJG1ldGhvZCk7CiAgICAgICAgaWYgKCRtZXRob2QgIT09ICRub3JtYWxpemVkTWV0aG9kKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvZ3V6emxlJywKICAgICAgICAgICAgICAgICc3LjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nIGEgbm9uLXVwcGVyY2FzZSBIVFRQIG1ldGhvZCB0byBDbGllbnQ6OnJlcXVlc3QoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL2d1enpsZSA4LjAgd2lsbCBwcmVzZXJ2ZSBIVFRQIG1ldGhvZCBjYXNpbmcuIFBhc3MgYW4gdXBwZXJjYXNlIG1ldGhvZCBleHBsaWNpdGx5IGlmIHVwcGVyY2FzZSBpcyByZXF1aXJlZC4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRtZXRob2QgPSAkbm9ybWFsaXplZE1ldGhvZDsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RBc3luYygkbWV0aG9kLCAkdXJpLCAkb3B0aW9ucyktPndhaXQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGNsaWVudCBjb25maWd1cmF0aW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBUaGVzZSBvcHRpb25zIGluY2x1ZGUgZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgb2YgdGhlIGNsaWVudCwgYSAiaGFuZGxlciIKICAgICAqIChpZiB1dGlsaXplZCBieSB0aGUgY29uY3JldGUgY2xpZW50KSwgYW5kIGEgImJhc2VfdXJpIiBpZiB1dGlsaXplZCBieQogICAgICogdGhlIGNvbmNyZXRlIGNsaWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG9wdGlvbiBUaGUgY29uZmlnIG9wdGlvbiB0byByZXRyaWV2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoP3N0cmluZyAkb3B0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJG9wdGlvbiA9PT0gbnVsbAogICAgICAgICAgICA/ICR0aGlzLT5jb25maWcKICAgICAgICAgICAgOiAoJHRoaXMtPmNvbmZpZ1skb3B0aW9uXSA/PyBudWxsKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkVXJpKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkY29uZmlnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2Jhc2VfdXJpJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSBQc3I3XFVyaVJlc29sdmVyOjpyZXNvbHZlKFBzcjdcVXRpbHM6OnVyaUZvcigkY29uZmlnWydiYXNlX3VyaSddKSwgJHVyaSk7CiAgICAgICAgfQoKICAgICAgICAkaWRuT3B0aW9ucyA9IFV0aWxzOjpub3JtYWxpemVJZG5Db252ZXJzaW9uT3B0aW9uKCRjb25maWdbJ2lkbl9jb252ZXJzaW9uJ10gPz8gbnVsbCk7CiAgICAgICAgaWYgKCRpZG5PcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICR1cmkgPSBVdGlsczo6aWRuVXJpQ29udmVydCgkdXJpLCAkaWRuT3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICcnICYmICR1cmktPmdldEhvc3QoKSAhPT0gJycgPyAkdXJpLT53aXRoU2NoZW1lKCdodHRwJykgOiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciBhIGNsaWVudC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb25maWd1cmVEZWZhdWx0cyhhcnJheSAkY29uZmlnKTogdm9pZAogICAgewogICAgICAgICRkZWZhdWx0cyA9IFsKICAgICAgICAgICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gUmVkaXJlY3RNaWRkbGV3YXJlOjokZGVmYXVsdFNldHRpbmdzLAogICAgICAgICAgICAnaHR0cF9lcnJvcnMnID0+IHRydWUsCiAgICAgICAgICAgICdkZWNvZGVfY29udGVudCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3ZlcmlmeScgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2Nvb2tpZXMnID0+IGZhbHNlLAogICAgICAgICAgICAnaWRuX2NvbnZlcnNpb24nID0+IGZhbHNlLAogICAgICAgICAgICAncHJvdG9jb2xzJyA9PiBbJ2h0dHAnLCAnaHR0cHMnXSwKICAgICAgICBdOwoKICAgICAgICAvLyBVc2UgdGhlIHN0YW5kYXJkIExpbnV4IEhUVFBfUFJPWFkgYW5kIEhUVFBTX1BST1hZIGlmIHNldC4KCiAgICAgICAgLy8gV2UgY2FuIG9ubHkgdHJ1c3QgdGhlIEhUVFBfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gYSBDTEkKICAgICAgICAvLyBwcm9jZXNzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IFBIUCBoYXMgbm8gcmVsaWFibGUgbWVjaGFuaXNtIHRvCiAgICAgICAgLy8gZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggIkhUVFBfIi4KICAgICAgICBpZiAoXFBIUF9TQVBJID09PSAnY2xpJyAmJiAoJHByb3h5ID0gVXRpbHM6OmdldGVudignSFRUUF9QUk9YWScpKSkgewogICAgICAgICAgICAkZGVmYXVsdHNbJ3Byb3h5J11bJ2h0dHAnXSA9ICRwcm94eTsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJveHkgPSBVdGlsczo6Z2V0ZW52KCdIVFRQU19QUk9YWScpKSB7CiAgICAgICAgICAgICRkZWZhdWx0c1sncHJveHknXVsnaHR0cHMnXSA9ICRwcm94eTsKICAgICAgICB9CgogICAgICAgIGlmICgkbm9Qcm94eSA9IFV0aWxzOjpnZXRlbnYoJ05PX1BST1hZJykpIHsKICAgICAgICAgICAgJGNsZWFuZWROb1Byb3h5ID0gXHN0cl9yZXBsYWNlKCcgJywgJycsICRub1Byb3h5KTsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydubyddID0gXGV4cGxvZGUoJywnLCAkY2xlYW5lZE5vUHJveHkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNvbmZpZyA9ICRjb25maWcgKyAkZGVmYXVsdHM7CgogICAgICAgIGlmICghZW1wdHkoJGNvbmZpZ1snY29va2llcyddKSAmJiAkY29uZmlnWydjb29raWVzJ10gPT09IHRydWUpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbmZpZ1snY29va2llcyddID0gbmV3IENvb2tpZUphcigpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBkZWZhdWx0IHVzZXItYWdlbnQgaGVhZGVyLgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddKSkgewogICAgICAgICAgICAkdGhpcy0+Y29uZmlnWydoZWFkZXJzJ10gPSBbJ1VzZXItQWdlbnQnID0+IFV0aWxzOjpkZWZhdWx0VXNlckFnZW50KCldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFkZCB0aGUgVXNlci1BZ2VudCBoZWFkZXIgaWYgb25lIHdhcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgICRoYXNVc2VyQWdlbnQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yZWFjaCAoXGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddKSBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKFxzdHJ0b2xvd2VyKChzdHJpbmcpICRuYW1lKSA9PT0gJ3VzZXItYWdlbnQnKSB7CiAgICAgICAgICAgICAgICAgICAgJGhhc1VzZXJBZ2VudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJGhhc1VzZXJBZ2VudCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddWydVc2VyLUFnZW50J10gPSBVdGlsczo6ZGVmYXVsdFVzZXJBZ2VudCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX2FycmF5KCR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkFib3V0SW52YWxpZEhlYWRlck9wdGlvblR5cGVzKCR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSk7CiAgICAgICAgICAgIHNlbGY6OmNhc3REZXByZWNhdGVkSGVhZGVyT3B0aW9uVmFsdWVzKCR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTWVyZ2VzIGRlZmF1bHQgb3B0aW9ucyBpbnRvIHRoZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgT3B0aW9ucyB0byBtb2RpZnkgYnkgcmVmZXJlbmNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRzKGFycmF5ICRvcHRpb25zKTogYXJyYXkKICAgIHsKICAgICAgICBzZWxmOjp3YXJuQWJvdXRSZXF1ZXN0TGV2ZWxIYW5kbGVyKCRvcHRpb25zKTsKCiAgICAgICAgJGRlZmF1bHRzID0gJHRoaXMtPmNvbmZpZzsKCiAgICAgICAgaWYgKCFlbXB0eSgkZGVmYXVsdHNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgLy8gRGVmYXVsdCBoZWFkZXJzIGFyZSBvbmx5IGFkZGVkIGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgogICAgICAgICAgICAkZGVmYXVsdHNbJ19jb25kaXRpb25hbCddID0gJGRlZmF1bHRzWydoZWFkZXJzJ107CiAgICAgICAgICAgIHVuc2V0KCRkZWZhdWx0c1snaGVhZGVycyddKTsKICAgICAgICB9CgogICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGhlYWRlcnMgaXMgcmVxdWlyZWQgYXMgdGhleSBhcmUgYWRkZWQgYXMKICAgICAgICAvLyBjb25kaXRpb25hbCBoZWFkZXJzIGFuZCBhcyBoZWFkZXJzIHBhc3NlZCB0byBhIHJlcXVlc3QgY3Rvci4KICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ2hlYWRlcnMnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgLy8gQWxsb3dzIGRlZmF1bHQgaGVhZGVycyB0byBiZSB1bnNldC4KICAgICAgICAgICAgaWYgKCRvcHRpb25zWydoZWFkZXJzJ10gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRkZWZhdWx0c1snX2NvbmRpdGlvbmFsJ10gPSBbXTsKICAgICAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pOwogICAgICAgICAgICB9IGVsc2VpZiAoIVxpc19hcnJheSgkb3B0aW9uc1snaGVhZGVycyddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaGVhZGVycyBtdXN0IGJlIGFuIGFycmF5Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNoYWxsb3cgbWVyZ2UgZGVmYXVsdHMgdW5kZXJuZWF0aCBvcHRpb25zLgogICAgICAgICRyZXN1bHQgPSAkb3B0aW9ucyArICRkZWZhdWx0czsKCiAgICAgICAgLy8gUmVtb3ZlIG51bGwgdmFsdWVzLgogICAgICAgIGZvcmVhY2ggKCRyZXN1bHQgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCR2ID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkcmVzdWx0WyRrXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNlbGY6Ondhcm5BYm91dEludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZXMoJHJlc3VsdCk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5BYm91dFJlcXVlc3RMZXZlbEhhbmRsZXIoYXJyYXkgJG9wdGlvbnMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygnaGFuZGxlcicsICRvcHRpb25zKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgJ2d1enpsZWh0dHAvZ3V6emxlJywKICAgICAgICAgICAgJzcuMTInLAogICAgICAgICAgICAnUGFzc2luZyB0aGUgImhhbmRsZXIiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIGlnbm9yZSByZXF1ZXN0LWxldmVsIGhhbmRsZXJzLiBDb25maWd1cmUgdGhlIGhhbmRsZXIgd2hlbiBjcmVhdGluZyB0aGUgQ2xpZW50LCBvciB1c2UgYSBzZXBhcmF0ZSBDbGllbnQgaW5zdGFuY2UgZm9yIHJlcXVlc3RzIHRoYXQgbmVlZCBhIGRpZmZlcmVudCBoYW5kbGVyLicKICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5BYm91dEludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZXMoYXJyYXkgJG9wdGlvbnMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydoYW5kbGVyJ10pICYmICFcaXNfY2FsbGFibGUoJG9wdGlvbnNbJ2hhbmRsZXInXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgnaGFuZGxlcicsICdjYWxsYWJsZScsICRvcHRpb25zWydoYW5kbGVyJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSkgJiYgXGlzX2FycmF5KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkFib3V0SW52YWxpZEFsbG93UmVkaXJlY3RzT3B0aW9uVHlwZXMoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYXV0aCddKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuQWJvdXRJbnZhbGlkQXV0aE9wdGlvblR5cGVzKCRvcHRpb25zWydhdXRoJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydib2R5J10pICYmIFxpc19hcnJheSgkb3B0aW9uc1snYm9keSddKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCdib2R5JywgJ3Jlc291cmNlfHN0cmluZ3xudWxsfGludHxmbG9hdHxib29sfFN0cmVhbUludGVyZmFjZXwoY2FsbGFibGUmb2JqZWN0KXxcSXRlcmF0b3J8XFN0cmluZ2FibGUnLCAkb3B0aW9uc1snYm9keSddKTsKICAgICAgICB9CgogICAgICAgIHNlbGY6Ondhcm5BYm91dEludmFsaWRUbHNGaWxlT3B0aW9uVHlwZXMoJG9wdGlvbnMsICdjZXJ0Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdFN0cmluZygkb3B0aW9ucywgJ2NlcnRfdHlwZScpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3ROdW1iZXIoJG9wdGlvbnMsICdjb25uZWN0X3RpbWVvdXQnKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90SW50KCRvcHRpb25zLCAnY3J5cHRvX21ldGhvZCcpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RCb29sT3JSZXNvdXJjZSgkb3B0aW9ucywgJ2RlYnVnJyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEJvb2xPclN0cmluZygkb3B0aW9ucywgJ2RlY29kZV9jb250ZW50Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdE51bWJlcigkb3B0aW9ucywgJ2RlbGF5Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEJvb2xPckludCgkb3B0aW9ucywgJ2V4cGVjdCcpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Zvcm1fcGFyYW1zJ10pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5BYm91dEludmFsaWRGb3JtUGFyYW1UeXBlcygkb3B0aW9uc1snZm9ybV9wYXJhbXMnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgJiYgIVxpc19zdHJpbmcoJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgnZm9yY2VfaXBfcmVzb2x2ZScsICdzdHJpbmcnLCAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snaGVhZGVycyddKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuQWJvdXRJbnZhbGlkSGVhZGVyT3B0aW9uVHlwZXMoJG9wdGlvbnNbJ2hlYWRlcnMnXSk7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90Qm9vbCgkb3B0aW9ucywgJ2h0dHBfZXJyb3JzJyk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5BYm91dEludmFsaWRNdWx0aXBhcnRPcHRpb25UeXBlcygkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdENhbGxhYmxlKCRvcHRpb25zLCAnb25faGVhZGVycycpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RDYWxsYWJsZSgkb3B0aW9ucywgJ29uX3N0YXRzJyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdENhbGxhYmxlKCRvcHRpb25zLCAncHJvZ3Jlc3MnKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90U3RyaW5nQXJyYXkoJG9wdGlvbnMsICdwcm90b2NvbHMnLCB0cnVlKTsKICAgICAgICBzZWxmOjp3YXJuQWJvdXRJbnZhbGlkUHJveHlPcHRpb25UeXBlcygkb3B0aW9ucyk7CgogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3ROdW1iZXIoJG9wdGlvbnMsICdyZWFkX3RpbWVvdXQnKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90SW50KCRvcHRpb25zLCAncmV0cmllcycpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3NpbmsnXSkgJiYgIVxpc19ib29sKCRvcHRpb25zWydzaW5rJ10pICYmICFcaXNfcmVzb3VyY2UoJG9wdGlvbnNbJ3NpbmsnXSkgJiYgIVxpc19zdHJpbmcoJG9wdGlvbnNbJ3NpbmsnXSkgJiYgISRvcHRpb25zWydzaW5rJ10gaW5zdGFuY2VvZiBTdHJlYW1JbnRlcmZhY2UpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgnc2luaycsICdyZXNvdXJjZXxzdHJpbmd8U3RyZWFtSW50ZXJmYWNlJywgJG9wdGlvbnNbJ3NpbmsnXSk7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjp3YXJuQWJvdXRJbnZhbGlkVGxzRmlsZU9wdGlvblR5cGVzKCRvcHRpb25zLCAnc3NsX2tleScpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RTdHJpbmcoJG9wdGlvbnMsICdzc2xfa2V5X3R5cGUnKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90Qm9vbCgkb3B0aW9ucywgJ3N0cmVhbScpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RBcnJheSgkb3B0aW9ucywgJ3N0cmVhbV9jb250ZXh0JywgJ2FycmF5PGFycmF5LWtleSwgbWl4ZWQ+Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEJvb2woJG9wdGlvbnMsICdzeW5jaHJvbm91cycpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3ROdW1iZXIoJG9wdGlvbnMsICd0aW1lb3V0Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEJvb2xPclN0cmluZygkb3B0aW9ucywgJ3ZlcmlmeScpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RTdHJpbmdPck51bWJlcigkb3B0aW9ucywgJ3ZlcnNpb24nKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90QXJyYXkoJG9wdGlvbnMsICdjdXJsJywgJ2FycmF5PGludHxzdHJpbmcsIG1peGVkPicpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvb2tpZXMnXSkgJiYgJG9wdGlvbnNbJ2Nvb2tpZXMnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCdjb29raWVzJywgJ2ZhbHNlfENvb2tpZUphckludGVyZmFjZScsICRvcHRpb25zWydjb29raWVzJ10pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB3YXJuQWJvdXRJbnZhbGlkQWxsb3dSZWRpcmVjdHNPcHRpb25UeXBlcyhhcnJheSAkYWxsb3dSZWRpcmVjdHMpOiB2b2lkCiAgICB7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEludCgkYWxsb3dSZWRpcmVjdHMsICdtYXgnLCAnYWxsb3dfcmVkaXJlY3RzLm1heCcpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RCb29sKCRhbGxvd1JlZGlyZWN0cywgJ3N0cmljdCcsICdhbGxvd19yZWRpcmVjdHMuc3RyaWN0Jyk7CiAgICAgICAgc2VsZjo6d2FybklmUHJlc2VudEFuZE5vdEJvb2woJGFsbG93UmVkaXJlY3RzLCAncmVmZXJlcicsICdhbGxvd19yZWRpcmVjdHMucmVmZXJlcicpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RTdHJpbmdBcnJheSgkYWxsb3dSZWRpcmVjdHMsICdwcm90b2NvbHMnLCB0cnVlLCAnYWxsb3dfcmVkaXJlY3RzLnByb3RvY29scycpOwogICAgICAgIHNlbGY6Ondhcm5JZlByZXNlbnRBbmROb3RDYWxsYWJsZSgkYWxsb3dSZWRpcmVjdHMsICdvbl9yZWRpcmVjdCcsICdhbGxvd19yZWRpcmVjdHMub25fcmVkaXJlY3QnKTsKICAgICAgICBzZWxmOjp3YXJuSWZQcmVzZW50QW5kTm90Qm9vbCgkYWxsb3dSZWRpcmVjdHMsICd0cmFja19yZWRpcmVjdHMnLCAnYWxsb3dfcmVkaXJlY3RzLnRyYWNrX3JlZGlyZWN0cycpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRhdXRoCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5BYm91dEludmFsaWRBdXRoT3B0aW9uVHlwZXMoJGF1dGgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRhdXRoID09PSBmYWxzZSB8fCBcaXNfc3RyaW5nKCRhdXRoKSB8fCAkYXV0aCA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGF1dGgpKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJ2F1dGgnLCAnYXJyYXl7MDogc3RyaW5nLCAxOiBzdHJpbmcsIDI/OiBzdHJpbmd8bnVsbH18c3RyaW5nfGZhbHNlfG51bGwnLCAkYXV0aCk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKDAsICRhdXRoKSB8fCAhXGlzX3N0cmluZygkYXV0aFswXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgnYXV0aC4wJywgJ3N0cmluZycsICRhdXRoWzBdID8/IG51bGwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygxLCAkYXV0aCkgfHwgIVxpc19zdHJpbmcoJGF1dGhbMV0pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJ2F1dGguMScsICdzdHJpbmcnLCAkYXV0aFsxXSA/PyBudWxsKTsKICAgICAgICB9CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygyLCAkYXV0aCkgJiYgJGF1dGhbMl0gIT09IG51bGwgJiYgIVxpc19zdHJpbmcoJGF1dGhbMl0pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJ2F1dGguMicsICdzdHJpbmd8bnVsbCcsICRhdXRoWzJdKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5BYm91dEludmFsaWRGb3JtUGFyYW1UeXBlcygkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCdmb3JtX3BhcmFtcycsICdhcnJheTxhcnJheS1rZXksIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxudWxsfGFycmF5PicsICR2YWx1ZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBzZWxmOjp3YXJuQWJvdXRJbnZhbGlkRm9ybVBhcmFtQXJyYXkoJHZhbHVlLCAnZm9ybV9wYXJhbXMnKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB3YXJuQWJvdXRJbnZhbGlkRm9ybVBhcmFtQXJyYXkoYXJyYXkgJHZhbHVlcywgc3RyaW5nICRwYXRoKTogYm9vbAogICAgewogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkaXRlbSkgewogICAgICAgICAgICAkaXRlbVBhdGggPSAkcGF0aC4nLicuKHN0cmluZykgJGtleTsKICAgICAgICAgICAgaWYgKFxpc19hcnJheSgkaXRlbSkpIHsKICAgICAgICAgICAgICAgIGlmICghc2VsZjo6d2FybkFib3V0SW52YWxpZEZvcm1QYXJhbUFycmF5KCRpdGVtLCAkaXRlbVBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGl0ZW0gIT09IG51bGwgJiYgIVxpc19zY2FsYXIoJGl0ZW0pKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRpdGVtUGF0aCwgJ3N0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxudWxsfGFycmF5JywgJGl0ZW0pOwoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGhlYWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybkFib3V0SW52YWxpZEhlYWRlck9wdGlvblR5cGVzKCRoZWFkZXJzKTogdm9pZAogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCRoZWFkZXJzKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCdoZWFkZXJzJywgJ2FycmF5PGFycmF5LWtleSwgc3RyaW5nfG5vbi1lbXB0eS1hcnJheTxhcnJheS1rZXksIHN0cmluZz4+fG51bGwnLCAkaGVhZGVycyk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHBhdGggPSAnaGVhZGVycy4nLihzdHJpbmcpICRuYW1lOwogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIGlmICgkdmFsdWUgPT09IFtdKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkcGF0aCwgJ3N0cmluZ3xub24tZW1wdHktYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+JywgJHZhbHVlKTsKCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICRpbmRleCA9PiAkaXRlbSkgewogICAgICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkaXRlbSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkcGF0aC4nLicuKHN0cmluZykgJGluZGV4LCAnc3RyaW5nJywgJGl0ZW0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICghXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRwYXRoLCAnc3RyaW5nfG5vbi1lbXB0eS1hcnJheTxhcnJheS1rZXksIHN0cmluZz4nLCAkdmFsdWUpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRtdWx0aXBhcnQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybkFib3V0SW52YWxpZE11bHRpcGFydE9wdGlvblR5cGVzKCRtdWx0aXBhcnQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJG11bHRpcGFydCkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgnbXVsdGlwYXJ0JywgJ2FycmF5PGFycmF5LWtleSwgYXJyYXl7bmFtZTogc3RyaW5nfGludCwgY29udGVudHM6IG1peGVkLCBoZWFkZXJzPzogYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+LCBmaWxlbmFtZT86IHN0cmluZ30+JywgJG11bHRpcGFydCk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkbXVsdGlwYXJ0IGFzICRpbmRleCA9PiAkcGFydCkgewogICAgICAgICAgICAkcGF0aCA9ICdtdWx0aXBhcnQuJy4oc3RyaW5nKSAkaW5kZXg7CiAgICAgICAgICAgIGlmICghXGlzX2FycmF5KCRwYXJ0KSkgewogICAgICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkcGF0aCwgJ2FycmF5e25hbWU6IHN0cmluZ3xpbnQsIGNvbnRlbnRzOiBtaXhlZCwgaGVhZGVycz86IGFycmF5PGFycmF5LWtleSwgc3RyaW5nPiwgZmlsZW5hbWU/OiBzdHJpbmd9JywgJHBhcnQpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygnbmFtZScsICRwYXJ0KSB8fCAoIVxpc19zdHJpbmcoJHBhcnRbJ25hbWUnXSkgJiYgIVxpc19pbnQoJHBhcnRbJ25hbWUnXSkpKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRwYXRoLicubmFtZScsICdzdHJpbmd8aW50JywgJHBhcnRbJ25hbWUnXSA/PyBudWxsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygnY29udGVudHMnLCAkcGFydCkpIHsKICAgICAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJHBhdGgsICdhcnJheXtuYW1lOiBzdHJpbmd8aW50LCBjb250ZW50czogbWl4ZWQsIGhlYWRlcnM/OiBhcnJheTxhcnJheS1rZXksIHN0cmluZz4sIGZpbGVuYW1lPzogc3RyaW5nfScsICRwYXJ0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdoZWFkZXJzJywgJHBhcnQpKSB7CiAgICAgICAgICAgICAgICBpZiAoIVxpc19hcnJheSgkcGFydFsnaGVhZGVycyddKSkgewogICAgICAgICAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJHBhdGguJy5oZWFkZXJzJywgJ2FycmF5PGFycmF5LWtleSwgc3RyaW5nPicsICRwYXJ0WydoZWFkZXJzJ10pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFydFsnaGVhZGVycyddIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkcGF0aC4nLmhlYWRlcnMuJy4oc3RyaW5nKSAkbmFtZSwgJ3N0cmluZycsICR2YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdmaWxlbmFtZScsICRwYXJ0KSAmJiAhXGlzX3N0cmluZygkcGFydFsnZmlsZW5hbWUnXSkpIHsKICAgICAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJHBhdGguJy5maWxlbmFtZScsICdzdHJpbmcnLCAkcGFydFsnZmlsZW5hbWUnXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybkFib3V0SW52YWxpZFByb3h5T3B0aW9uVHlwZXMoYXJyYXkgJG9wdGlvbnMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncHJveHknXSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRvcHRpb25zWydwcm94eSddKSAmJiAhXGlzX2FycmF5KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCdwcm94eScsICdzdHJpbmd8YXJyYXl7aHR0cD86IHN0cmluZ3xudWxsLCBodHRwcz86IHN0cmluZ3xudWxsLCBubz86IHN0cmluZ3xhcnJheTxhcnJheS1rZXksIHN0cmluZz58bnVsbH0nLCAkb3B0aW9uc1sncHJveHknXSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19hcnJheSgkb3B0aW9uc1sncHJveHknXSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoWydodHRwJywgJ2h0dHBzJ10gYXMgJHNjaGVtZSkgewogICAgICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJHNjaGVtZSwgJG9wdGlvbnNbJ3Byb3h5J10pICYmICRvcHRpb25zWydwcm94eSddWyRzY2hlbWVdICE9PSBudWxsICYmICFcaXNfc3RyaW5nKCRvcHRpb25zWydwcm94eSddWyRzY2hlbWVdKSkgewogICAgICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgncHJveHkuJy4kc2NoZW1lLCAnc3RyaW5nfG51bGwnLCAkb3B0aW9uc1sncHJveHknXVskc2NoZW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJ25vJywgJG9wdGlvbnNbJ3Byb3h5J10pIHx8ICRvcHRpb25zWydwcm94eSddWydubyddID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChcaXNfc3RyaW5nKCRvcHRpb25zWydwcm94eSddWydubyddKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19hcnJheSgkb3B0aW9uc1sncHJveHknXVsnbm8nXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgncHJveHkubm8nLCAnc3RyaW5nfGFycmF5PGFycmF5LWtleSwgc3RyaW5nPnxudWxsJywgJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10pOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10gYXMgJGluZGV4ID0+ICRub1Byb3h5KSB7CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkbm9Qcm94eSkpIHsKICAgICAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJ3Byb3h5Lm5vLicuKHN0cmluZykgJGluZGV4LCAnc3RyaW5nJywgJG5vUHJveHkpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB3YXJuQWJvdXRJbnZhbGlkVGxzRmlsZU9wdGlvblR5cGVzKGFycmF5ICRvcHRpb25zLCBzdHJpbmcgJG9wdGlvbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWyRvcHRpb25dKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX3N0cmluZygkb3B0aW9uc1skb3B0aW9uXSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJG9wdGlvbnNbJG9wdGlvbl0pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJG9wdGlvbiwgJ3N0cmluZ3xhcnJheXswOiBzdHJpbmcsIDE/OiBzdHJpbmd9JywgJG9wdGlvbnNbJG9wdGlvbl0pOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygwLCAkb3B0aW9uc1skb3B0aW9uXSkgfHwgIVxpc19zdHJpbmcoJG9wdGlvbnNbJG9wdGlvbl1bMF0pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJG9wdGlvbi4nLjAnLCAnc3RyaW5nJywgJG9wdGlvbnNbJG9wdGlvbl1bMF0gPz8gbnVsbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoMSwgJG9wdGlvbnNbJG9wdGlvbl0pICYmICRvcHRpb25zWyRvcHRpb25dWzFdICE9PSBudWxsICYmICFcaXNfc3RyaW5nKCRvcHRpb25zWyRvcHRpb25dWzFdKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRvcHRpb24uJy4xJywgJ3N0cmluZ3xudWxsJywgJG9wdGlvbnNbJG9wdGlvbl1bMV0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB3YXJuSWZQcmVzZW50QW5kTm90QXJyYXkoYXJyYXkgJG9wdGlvbnMsIHN0cmluZyAkb3B0aW9uLCBzdHJpbmcgJGV4cGVjdGVkKTogdm9pZAogICAgewogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkb3B0aW9ucykgJiYgIVxpc19hcnJheSgkb3B0aW9uc1skb3B0aW9uXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkb3B0aW9uLCAkZXhwZWN0ZWQsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdEJvb2woYXJyYXkgJG9wdGlvbnMsIHN0cmluZyAkb3B0aW9uLCA/c3RyaW5nICRwYXRoID0gbnVsbCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJG9wdGlvbnMpICYmICFcaXNfYm9vbCgkb3B0aW9uc1skb3B0aW9uXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkcGF0aCA/PyAkb3B0aW9uLCAnYm9vbCcsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdEJvb2xPckludChhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24pOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRvcHRpb24sICRvcHRpb25zKSAmJiAhXGlzX2Jvb2woJG9wdGlvbnNbJG9wdGlvbl0pICYmICFcaXNfaW50KCRvcHRpb25zWyRvcHRpb25dKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRvcHRpb24sICdib29sfGludCcsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdEJvb2xPclJlc291cmNlKGFycmF5ICRvcHRpb25zLCBzdHJpbmcgJG9wdGlvbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJG9wdGlvbnMpICYmICFcaXNfYm9vbCgkb3B0aW9uc1skb3B0aW9uXSkgJiYgIVxpc19yZXNvdXJjZSgkb3B0aW9uc1skb3B0aW9uXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkb3B0aW9uLCAnYm9vbHxyZXNvdXJjZScsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdEJvb2xPclN0cmluZyhhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24pOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRvcHRpb24sICRvcHRpb25zKSAmJiAhXGlzX2Jvb2woJG9wdGlvbnNbJG9wdGlvbl0pICYmICFcaXNfc3RyaW5nKCRvcHRpb25zWyRvcHRpb25dKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRvcHRpb24sICdib29sfHN0cmluZycsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdENhbGxhYmxlKGFycmF5ICRvcHRpb25zLCBzdHJpbmcgJG9wdGlvbiwgP3N0cmluZyAkcGF0aCA9IG51bGwpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRvcHRpb24sICRvcHRpb25zKSAmJiAhXGlzX2NhbGxhYmxlKCRvcHRpb25zWyRvcHRpb25dKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRwYXRoID8/ICRvcHRpb24sICdjYWxsYWJsZScsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdEludChhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24sID9zdHJpbmcgJHBhdGggPSBudWxsKTogdm9pZAogICAgewogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkb3B0aW9ucykgJiYgIVxpc19pbnQoJG9wdGlvbnNbJG9wdGlvbl0pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5JbnZhbGlkUmVxdWVzdE9wdGlvblR5cGUoJHBhdGggPz8gJG9wdGlvbiwgJ2ludCcsICRvcHRpb25zWyRvcHRpb25dKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybklmUHJlc2VudEFuZE5vdE51bWJlcihhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24pOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRvcHRpb24sICRvcHRpb25zKSAmJiAhXGlzX2ludCgkb3B0aW9uc1skb3B0aW9uXSkgJiYgIVxpc19mbG9hdCgkb3B0aW9uc1skb3B0aW9uXSkpIHsKICAgICAgICAgICAgc2VsZjo6d2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZSgkb3B0aW9uLCAnaW50fGZsb2F0JywgJG9wdGlvbnNbJG9wdGlvbl0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB3YXJuSWZQcmVzZW50QW5kTm90U3RyaW5nKGFycmF5ICRvcHRpb25zLCBzdHJpbmcgJG9wdGlvbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJG9wdGlvbnMpICYmICFcaXNfc3RyaW5nKCRvcHRpb25zWyRvcHRpb25dKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRvcHRpb24sICdzdHJpbmcnLCAkb3B0aW9uc1skb3B0aW9uXSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5JZlByZXNlbnRBbmROb3RTdHJpbmdBcnJheShhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24sIGJvb2wgJG5vbkVtcHR5LCA/c3RyaW5nICRwYXRoID0gbnVsbCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCRvcHRpb24sICRvcHRpb25zKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkcGF0aCA9ICRwYXRoID8/ICRvcHRpb247CiAgICAgICAgJGV4cGVjdGVkID0gKCRub25FbXB0eSA/ICdub24tZW1wdHktJyA6ICcnKS4nYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+JzsKCiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJG9wdGlvbnNbJG9wdGlvbl0pIHx8ICgkbm9uRW1wdHkgJiYgJG9wdGlvbnNbJG9wdGlvbl0gPT09IFtdKSkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRwYXRoLCAkZXhwZWN0ZWQsICRvcHRpb25zWyRvcHRpb25dKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRvcHRpb25zWyRvcHRpb25dIGFzICRpbmRleCA9PiAkaXRlbSkgewogICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGl0ZW0pKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRwYXRoLicuJy4oc3RyaW5nKSAkaW5kZXgsICdzdHJpbmcnLCAkaXRlbSk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdhcm5JZlByZXNlbnRBbmROb3RTdHJpbmdPck51bWJlcihhcnJheSAkb3B0aW9ucywgc3RyaW5nICRvcHRpb24pOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKAogICAgICAgICAgICBcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkb3B0aW9ucykKICAgICAgICAgICAgJiYgIVxpc19zdHJpbmcoJG9wdGlvbnNbJG9wdGlvbl0pCiAgICAgICAgICAgICYmICFcaXNfaW50KCRvcHRpb25zWyRvcHRpb25dKQogICAgICAgICAgICAmJiAhXGlzX2Zsb2F0KCRvcHRpb25zWyRvcHRpb25dKQogICAgICAgICkgewogICAgICAgICAgICBzZWxmOjp3YXJuSW52YWxpZFJlcXVlc3RPcHRpb25UeXBlKCRvcHRpb24sICdzdHJpbmd8aW50fGZsb2F0JywgJG9wdGlvbnNbJG9wdGlvbl0pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2FybkludmFsaWRSZXF1ZXN0T3B0aW9uVHlwZShzdHJpbmcgJG9wdGlvbiwgc3RyaW5nICRleHBlY3RlZCwgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAnZ3V6emxlaHR0cC9ndXp6bGUnLAogICAgICAgICAgICAnNy4xMScsCiAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIHJlcXVlc3Qgb3B0aW9uICIlcyIgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHJlcXVpcmVzICVzLicsCiAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkdmFsdWUpLAogICAgICAgICAgICAkb3B0aW9uLAogICAgICAgICAgICAkZXhwZWN0ZWQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogVHJhbnNmZXJzIHRoZSBnaXZlbiByZXF1ZXN0IGFuZCBhcHBsaWVzIHJlcXVlc3Qgb3B0aW9ucy4KICAgICAqCiAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXF1ZXN0IGlzIG5vdCBtb2RpZmllZCBhbmQgdGhlIHJlcXVlc3Qgb3B0aW9ucyBhcmUgdXNlZAogICAgICogYXMtaXMgd2l0aG91dCBtZXJnaW5nIGluIGRlZmF1bHQgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgU2VlIHtAc2VlIFJlcXVlc3RPcHRpb25zfS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0cmFuc2ZlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5hcHBseU9wdGlvbnMoJHJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgJHByb3RvY29sVmVyc2lvbiA9ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAgICAgaWYgKCcnID09PSAkcHJvdG9jb2xWZXJzaW9uKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjExJywgJ1NlbmRpbmcgYSByZXF1ZXN0IHdpdGggYW4gZW1wdHkgcHJvdG9jb2wgdmVyc2lvbiBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL2d1enpsZSA4LjAgd2lsbCByZWplY3QgZW1wdHkgcHJvdG9jb2wgdmVyc2lvbnMuJyk7CgogICAgICAgICAgICAkcmVxdWVzdCA9IFBzcjdcVXRpbHM6Om1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsIFsndmVyc2lvbicgPT4gJzEuMSddKTsKICAgICAgICB9IGVsc2VpZiAoIXNlbGY6OmlzUHJvdG9jb2xWZXJzaW9uVmFsaWQoJHByb3RvY29sVmVyc2lvbikpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuMTEnLCAnU2VuZGluZyBhIHJlcXVlc3Qgd2l0aCBhIG1hbGZvcm1lZCBwcm90b2NvbCB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBtYWxmb3JtZWQgcHJvdG9jb2wgdmVyc2lvbnMuJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBIYW5kbGVyU3RhY2sgJGhhbmRsZXIgKi8KICAgICAgICAkaGFuZGxlciA9ICRvcHRpb25zWydoYW5kbGVyJ107CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cHJvbWlzZUZvcigkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBhcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYSByZXF1ZXN0LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG1vZGlmeSA9IFsKICAgICAgICAgICAgJ3NldF9oZWFkZXJzJyA9PiBbXSwKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgaWYgKGFycmF5X2tleXMoJG9wdGlvbnNbJ2hlYWRlcnMnXSkgPT09IHJhbmdlKDAsIGNvdW50KCRvcHRpb25zWydoZWFkZXJzJ10pIC0gMSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBoZWFkZXJzIGFycmF5IG11c3QgaGF2ZSBoZWFkZXIgbmFtZSBhcyBrZXlzLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRoZWFkZXJzID0gJG9wdGlvbnNbJ2hlYWRlcnMnXTsKICAgICAgICAgICAgJGRyb3BwZWRIZWFkZXJOYW1lcyA9IHNlbGY6OmNhc3REZXByZWNhdGVkSGVhZGVyT3B0aW9uVmFsdWVzKCRoZWFkZXJzKTsKICAgICAgICAgICAgaWYgKCRkcm9wcGVkSGVhZGVyTmFtZXMgIT09IFtdICYmIGlzc2V0KCRvcHRpb25zWydfY29uZGl0aW9uYWwnXSkpIHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKCRkcm9wcGVkSGVhZGVyTmFtZXMsICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXSA9ICRoZWFkZXJzOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snaGVhZGVycyddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZm9ybV9wYXJhbXMnXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydtdWx0aXBhcnQnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1lvdSBjYW5ub3QgdXNlICcKICAgICAgICAgICAgICAgICAgICAuJ2Zvcm1fcGFyYW1zIGFuZCBtdWx0aXBhcnQgYXQgdGhlIHNhbWUgdGltZS4gVXNlIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgLidmb3JtX3BhcmFtcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gc2VuZCBhcHBsaWNhdGlvbi8nCiAgICAgICAgICAgICAgICAgICAgLid4LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdHMsIGFuZCB0aGUgbXVsdGlwYXJ0ICcKICAgICAgICAgICAgICAgICAgICAuJ29wdGlvbiB0byBzZW5kIG11bHRpcGFydC9mb3JtLWRhdGEgcmVxdWVzdHMuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9wdGlvbnNbJ2JvZHknXSA9IFxodHRwX2J1aWxkX3F1ZXJ5KHNlbGY6Om5vcm1hbGl6ZU5vbkZpbml0ZUZsb2F0cygkb3B0aW9uc1snZm9ybV9wYXJhbXMnXSwgJ2Zvcm1fcGFyYW1zJyksICcnLCAnJicpOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snZm9ybV9wYXJhbXMnXSk7CiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKFsnQ29udGVudC1UeXBlJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXVsnQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBuZXcgUHNyN1xNdWx0aXBhcnRTdHJlYW0oJG9wdGlvbnNbJ211bHRpcGFydCddKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ211bHRpcGFydCddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snanNvbiddKSkgewogICAgICAgICAgICAkb3B0aW9uc1snYm9keSddID0gVXRpbHM6Ompzb25FbmNvZGUoJG9wdGlvbnNbJ2pzb24nXSk7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydqc29uJ10pOwogICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBoZWFkZXIgaW4gZGlmZmVyZW50IGNhc2UgYW5kIHNldCB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gPSBQc3I3XFV0aWxzOjpjYXNlbGVzc1JlbW92ZShbJ0NvbnRlbnQtVHlwZSddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ11bJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSkKICAgICAgICAgICAgJiYgJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10gIT09IHRydWUKICAgICAgICApIHsKICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddID0gUHNyN1xVdGlsczo6Y2FzZWxlc3NSZW1vdmUoWydBY2NlcHQtRW5jb2RpbmcnXSwgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddKTsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnQWNjZXB0LUVuY29kaW5nJ10gPSAoc3RyaW5nKSAkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYm9keSddKSkgewogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCRvcHRpb25zWydib2R5J10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kaWZ5Wydib2R5J10gPSBzZWxmOjpjcmVhdGVCb2R5U3RyZWFtKCRvcHRpb25zWydib2R5J10pOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snYm9keSddKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ2F1dGgnXSkgJiYgXGlzX2FycmF5KCRvcHRpb25zWydhdXRoJ10pKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRvcHRpb25zWydhdXRoJ107CiAgICAgICAgICAgICR0eXBlID0gaXNzZXQoJHZhbHVlWzJdKSA/IFxzdHJ0b2xvd2VyKCR2YWx1ZVsyXSkgOiAnYmFzaWMnOwogICAgICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICdiYXNpYyc6CiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddID0gUHNyN1xVdGlsczo6Y2FzZWxlc3NSZW1vdmUoWydBdXRob3JpemF0aW9uJ10sICRtb2RpZnlbJ3NldF9oZWFkZXJzJ10pOwogICAgICAgICAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0F1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnCiAgICAgICAgICAgICAgICAgICAgICAgIC5cYmFzZTY0X2VuY29kZSgiJHZhbHVlWzBdOiR2YWx1ZVsxXSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZGlnZXN0JzoKICAgICAgICAgICAgICAgICAgICAvLyBAdG9kbzogRG8gbm90IHJlbHkgb24gY3VybAogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bXENVUkxPUFRfSFRUUEFVVEhdID0gXENVUkxBVVRIX0RJR0VTVDsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snY3VybCddW1xDVVJMT1BUX1VTRVJQV0RdID0gIiR2YWx1ZVswXTokdmFsdWVbMV0iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbnRsbSc6CiAgICAgICAgICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICc3LjEyJywKICAgICAgICAgICAgICAgICAgICAgICAgJ1Bhc3NpbmcgIm50bG0iIGFzIHRoZSBidWlsdC1pbiBhdXRoIHR5cGUgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHdpbGwgbm8gbG9uZ2VyIGFwcGx5IE5UTE0gdGhyb3VnaCB0aGUgImF1dGgiIHJlcXVlc3Qgb3B0aW9uLiBDb25maWd1cmUgTlRMTSB3aXRoIGNVUkwgSFRUUCBhdXRoZW50aWNhdGlvbiBvcHRpb25zIGluc3RlYWQuJwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9IVFRQQVVUSF0gPSBcQ1VSTEFVVEhfTlRMTTsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snY3VybCddW1xDVVJMT1BUX1VTRVJQV0RdID0gIiR2YWx1ZVswXTokdmFsdWVbMV0iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3F1ZXJ5J10pKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRvcHRpb25zWydxdWVyeSddOwogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IFxodHRwX2J1aWxkX3F1ZXJ5KHNlbGY6Om5vcm1hbGl6ZU5vbkZpbml0ZUZsb2F0cygkdmFsdWUsICdxdWVyeScpLCAnJywgJyYnLCBcUEhQX1FVRVJZX1JGQzM5ODYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1vZGlmeVsncXVlcnknXSA9ICR2YWx1ZTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ3F1ZXJ5J10pOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgc2luayBpcyBub3QgYW4gaW52YWxpZCB2YWx1ZS4KICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3NpbmsnXSkpIHsKICAgICAgICAgICAgLy8gVE9ETzogQWRkIG1vcmUgc2luayB2YWxpZGF0aW9uPwogICAgICAgICAgICBpZiAoXGlzX2Jvb2woJG9wdGlvbnNbJ3NpbmsnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ3NpbmsgbXVzdCBub3QgYmUgYSBib29sZWFuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndmVyc2lvbiddKSkgewogICAgICAgICAgICAkbW9kaWZ5Wyd2ZXJzaW9uJ10gPSBzZWxmOjpub3JtYWxpemVQcm90b2NvbFZlcnNpb24oJG9wdGlvbnNbJ3ZlcnNpb24nXSk7CiAgICAgICAgfQoKICAgICAgICAkcmVxdWVzdCA9IFBzcjdcVXRpbHM6Om1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0Qm9keSgpIGluc3RhbmNlb2YgUHNyN1xNdWx0aXBhcnRTdHJlYW0pIHsKICAgICAgICAgICAgLy8gVXNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGlmIGEgQ29udGVudC1UeXBlIGlzIG5vdCBzZXQuCiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlKFsnQ29udGVudC1UeXBlJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JwogICAgICAgICAgICAgICAgLiRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldEJvdW5kYXJ5KCk7CiAgICAgICAgfQoKICAgICAgICAvLyBNZXJnZSBpbiBjb25kaXRpb25hbCBoZWFkZXJzIGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pKSB7CiAgICAgICAgICAgIC8vIEJ1aWxkIHVwIHRoZSBjaGFuZ2VzIHNvIGl0J3MgaW4gYSBzaW5nbGUgY2xvbmUgb2YgdGhlIG1lc3NhZ2UuCiAgICAgICAgICAgICRtb2RpZnkgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNbJ19jb25kaXRpb25hbCddIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICAkbmFtZSA9IChzdHJpbmcpICRrOwogICAgICAgICAgICAgICAgaWYgKCEkcmVxdWVzdC0+aGFzSGVhZGVyKCRuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJG5hbWVdID0gJHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlcXVlc3QgPSBQc3I3XFV0aWxzOjptb2RpZnlSZXF1ZXN0KCRyZXF1ZXN0LCAkbW9kaWZ5KTsKICAgICAgICAgICAgLy8gRG9uJ3QgcGFzcyB0aGlzIGludGVybmFsIHZhbHVlIGFsb25nIHRvIG1pZGRsZXdhcmUvaGFuZGxlcnMuCiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8YXJyYXkta2V5LCBtaXhlZD4gJGhlYWRlcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYXN0RGVwcmVjYXRlZEhlYWRlck9wdGlvblZhbHVlcyhhcnJheSAmJGhlYWRlcnMpOiBhcnJheQogICAgewogICAgICAgICRkcm9wcGVkSGVhZGVyTmFtZXMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChcaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZSA9PT0gW10pIHsKICAgICAgICAgICAgICAgICAgICAkZHJvcHBlZEhlYWRlck5hbWVzW10gPSAoc3RyaW5nKSAkbmFtZTsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbmFtZV0pOwoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJGluZGV4ID0+ICRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRpdGVtID09PSBudWxsIHx8ICghXGlzX3N0cmluZygkaXRlbSkgJiYgXGlzX3NjYWxhcigkaXRlbSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcaXNfZmxvYXQoJGl0ZW0pICYmICFcaXNfZmluaXRlKCRpdGVtKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSBcaXNfbmFuKCRpdGVtKSA/ICdOQU4nIDogKCRpdGVtID4gMCA/ICdJTkYnIDogJy1JTkYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVbJGluZGV4XSA9IChzdHJpbmcpICRpdGVtOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkaGVhZGVyc1skbmFtZV0gPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwgfHwgKCFcaXNfc3RyaW5nKCR2YWx1ZSkgJiYgXGlzX3NjYWxhcigkdmFsdWUpKSkgewogICAgICAgICAgICAgICAgaWYgKFxpc19mbG9hdCgkdmFsdWUpICYmICFcaXNfZmluaXRlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBcaXNfbmFuKCR2YWx1ZSkgPyAnTkFOJyA6ICgkdmFsdWUgPiAwID8gJ0lORicgOiAnLUlORicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGhlYWRlcnNbJG5hbWVdID0gKHN0cmluZykgJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRyb3BwZWRIZWFkZXJOYW1lczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkYm9keQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVCb2R5U3RyZWFtKCRib2R5KTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCRib2R5IGluc3RhbmNlb2YgU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiAkYm9keTsKICAgICAgICB9CgogICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJGJvZHkpIHx8ICRib2R5ID09PSBudWxsIHx8IFxpc19zdHJpbmcoJGJvZHkpIHx8ICRib2R5IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIHJldHVybiBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJGJvZHkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19zY2FsYXIoJGJvZHkpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjEyJywgJ1Bhc3NpbmcgYSBub24tc3RyaW5nIHNjYWxhciB0byB0aGUgImJvZHkiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBub24tc3RyaW5nIHNjYWxhciBib2RpZXMuJyk7CgogICAgICAgICAgICByZXR1cm4gUHNyN1xVdGlsczo6c3RyZWFtRm9yKHNlbGY6OnN0cmluZ2lmeVNjYWxhcigkYm9keSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19vYmplY3QoJGJvZHkpICYmIFxtZXRob2RfZXhpc3RzKCRib2R5LCAnX190b1N0cmluZycpKSB7CiAgICAgICAgICAgIHJldHVybiBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoKHN0cmluZykgJGJvZHkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19jYWxsYWJsZSgkYm9keSkpIHsKICAgICAgICAgICAgcmV0dXJuIFBzcjdcVXRpbHM6OnN0cmVhbUZvcigkYm9keSk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKAogICAgICAgICAgICAnUGFzc2luZyAlcyB0byByZXF1ZXN0IG9wdGlvbiAiYm9keSIgaXMgaW52YWxpZDsgZXhwZWN0ZWQgcmVzb3VyY2V8c3RyaW5nfG51bGx8aW50fGZsb2F0fGJvb2x8U3RyZWFtSW50ZXJmYWNlfGNhbGxhYmxlJm9iamVjdHxJdGVyYXRvcnxTdHJpbmdhYmxlLicsCiAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkYm9keSkKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sfGZsb2F0fGludHxzdHJpbmcgJHZhbHVlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHN0cmluZ2lmeVNjYWxhcigkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBOb3JtYWxpemUgbm9uLWZpbml0ZSBmbG9hdHMgdG8gZG9kZ2UgUEhQIDguNSdzIChzdHJpbmcpIE5BTgogICAgICAgIC8vIGNvZXJjaW9uIHdhcm5pbmcgd2hpbGUgdGhlIHZhbHVlIGlzIHN0aWxsIGFjY2VwdGVkLgogICAgICAgIGlmIChcaXNfZmxvYXQoJHZhbHVlKSAmJiAhXGlzX2Zpbml0ZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IFxpc19uYW4oJHZhbHVlKSA/ICdOQU4nIDogKCR2YWx1ZSA+IDAgPyAnSU5GJyA6ICctSU5GJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgbm9uLWZpbml0ZSBmbG9hdHMgaW4gdGhlIGFycmF5IHRvIHRoZSBzdHJpbmdzIFBIUCBjb2VyY2VzCiAgICAgKiB0aGVtIHRvLCBhcyBpbXBsaWNpdCBjb2VyY2lvbiBvZiBOQU4gZW1pdHMgYSB3YXJuaW5nIG9uIFBIUCA4LjUuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZU5vbkZpbml0ZUZsb2F0cyhhcnJheSAkdmFsdWVzLCBzdHJpbmcgJG9wdGlvbik6IGFycmF5CiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJGtleV0gPSBzZWxmOjpub3JtYWxpemVOb25GaW5pdGVGbG9hdHMoJHZhbHVlLCAkb3B0aW9uKTsKICAgICAgICAgICAgfSBlbHNlaWYgKFxpc19mbG9hdCgkdmFsdWUpICYmICFcaXNfZmluaXRlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjEyJywgJ1Bhc3NpbmcgYSBub24tZmluaXRlIGZsb2F0IGluIHRoZSAiJXMiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBub24tZmluaXRlIGZsb2F0cy4nLCAkb3B0aW9uKTsKCiAgICAgICAgICAgICAgICAkdmFsdWVzWyRrZXldID0gXGlzX25hbigkdmFsdWUpID8gJ05BTicgOiAoJHZhbHVlID4gMCA/ICdJTkYnIDogJy1JTkYnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludHxmbG9hdCAkdmVyc2lvbgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVQcm90b2NvbFZlcnNpb24oJHZlcnNpb24pOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJycgPT09ICR2ZXJzaW9uKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjExJywgJ1Bhc3NpbmcgYW4gZW1wdHkgInZlcnNpb24iIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBlbXB0eSBwcm90b2NvbCB2ZXJzaW9ucy4nKTsKCiAgICAgICAgICAgIHJldHVybiAnMS4xJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcaXNfZmxvYXQoJHZlcnNpb24pID8gXG51bWJlcl9mb3JtYXQoJHZlcnNpb24sIDEsICcuJywgJycpIDogKHN0cmluZykgJHZlcnNpb247CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNQcm90b2NvbFZlcnNpb25WYWxpZChzdHJpbmcgJHZlcnNpb24pOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDEgPT09IFxwcmVnX21hdGNoKCcvXlxkKyg/OlwuXGQrKT8kL0QnLCAkdmVyc2lvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIHdpdGggcHJlLXNldCBtZXNzYWdlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludmFsaWRCb2R5KCk6IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgewogICAgICAgIHJldHVybiBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYXNzaW5nIGluIHRoZSAiYm9keSIgcmVxdWVzdCAnCiAgICAgICAgICAgIC4nb3B0aW9uIGFzIGFuIGFycmF5IHRvIHNlbmQgYSByZXF1ZXN0IGlzIG5vdCBzdXBwb3J0ZWQuICcKICAgICAgICAgICAgLidQbGVhc2UgdXNlIHRoZSAiZm9ybV9wYXJhbXMiIHJlcXVlc3Qgb3B0aW9uIHRvIHNlbmQgYSAnCiAgICAgICAgICAgIC4nYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHJlcXVlc3QsIG9yIHRoZSAibXVsdGlwYXJ0IiAnCiAgICAgICAgICAgIC4ncmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhIG11bHRpcGFydC9mb3JtLWRhdGEgcmVxdWVzdC4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/ClientInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIENsaWVudCBpbnRlcmZhY2UgZm9yIHNlbmRpbmcgSFRUUCByZXF1ZXN0cy4KICovCmludGVyZmFjZSBDbGllbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBUaGUgR3V6emxlIG1ham9yIHZlcnNpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQUpPUl9WRVJTSU9OID0gNzsKCiAgICAvKioKICAgICAqIFNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91c2x5IHNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFzeW5jKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuZCBzZW5kIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kLgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYyhzdHJpbmcgJG1ldGhvZCwgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBHZXQgYSBjbGllbnQgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgKgogICAgICogVGhlc2Ugb3B0aW9ucyBpbmNsdWRlIGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIG9mIHRoZSBjbGllbnQsIGEgImhhbmRsZXIiCiAgICAgKiAoaWYgdXRpbGl6ZWQgYnkgdGhlIGNvbmNyZXRlIGNsaWVudCksIGFuZCBhICJiYXNlX3VyaSIgaWYgdXRpbGl6ZWQgYnkKICAgICAqIHRoZSBjb25jcmV0ZSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRvcHRpb24gVGhlIGNvbmZpZyBvcHRpb24gdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICoKICAgICAqIEBkZXByZWNhdGVkIENsaWVudEludGVyZmFjZTo6Z2V0Q29uZmlnIHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoP3N0cmluZyAkb3B0aW9uID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/ClientTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEd1enpsZUV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIENsaWVudCBpbnRlcmZhY2UgZm9yIHNlbmRpbmcgSFRUUCByZXF1ZXN0cy4KICovCnRyYWl0IENsaWVudFRyYWl0CnsKICAgIC8qKgogICAgICogQ3JlYXRlIGFuZCBzZW5kIGFuIEhUVFAgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kLgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIEdFVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ0dFVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIEhFQUQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoZWFkKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdCgnSEVBRCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBVVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ1BVVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBPU1QgcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICoKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3N0KCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdCgnUE9TVCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIFBBVENIIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0Y2goJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0KCdQQVRDSCcsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBIVFRQIERFTEVURSByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKgogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QoJ0RFTEVURScsICR1cmksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYyhzdHJpbmcgJG1ldGhvZCwgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgR0VUIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdHRVQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgSEVBRCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGVhZEFzeW5jKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0QXN5bmMoJ0hFQUQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUFVUIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXRBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdQVVQnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUE9TVCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkgICAgIFVSSSBvYmplY3Qgb3Igc3RyaW5nLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zdEFzeW5jKCR1cmksIGFycmF5ICRvcHRpb25zID0gW10pOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0QXN5bmMoJ1BPU1QnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgUEFUQ0ggcmVxdWVzdC4KICAgICAqCiAgICAgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCB0byBvdmVycmlkZSB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQsIG9yIGEKICAgICAqIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudC4gVGhlIFVSTCBjYW4KICAgICAqIGNvbnRhaW4gdGhlIHF1ZXJ5IHN0cmluZyBhcyB3ZWxsLiBVc2UgYW4gYXJyYXkgdG8gcHJvdmlkZSBhIFVSTAogICAgICogdGVtcGxhdGUgYW5kIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIHVzZSBpbiB0aGUgVVJMIHRlbXBsYXRlIGV4cGFuc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhdGNoQXN5bmMoJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RBc3luYygnUEFUQ0gnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gYXN5bmNocm9ub3VzIEhUVFAgREVMRVRFIHJlcXVlc3QuCiAgICAgKgogICAgICogVXNlIGFuIGFic29sdXRlIHBhdGggdG8gb3ZlcnJpZGUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LCBvciBhCiAgICAgKiByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZSBjbGllbnQuIFRoZSBVUkwgY2FuCiAgICAgKiBjb250YWluIHRoZSBxdWVyeSBzdHJpbmcgYXMgd2VsbC4gVXNlIGFuIGFycmF5IHRvIHByb3ZpZGUgYSBVUkwKICAgICAqIHRlbXBsYXRlIGFuZCBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byB1c2UgaW4gdGhlIFVSTCB0ZW1wbGF0ZSBleHBhbnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSAgICAgVVJJIG9iamVjdCBvciBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVBc3luYygkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCdERUxFVEUnLCAkdXJpLCAkb3B0aW9ucyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIENvb2tpZSBqYXIgdGhhdCBzdG9yZXMgY29va2llcyBhcyBhbiBhcnJheQogKi8KY2xhc3MgQ29va2llSmFyIGltcGxlbWVudHMgQ29va2llSmFySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBTZXRDb29raWVbXSBMb2FkZWQgY29va2llIGRhdGEKICAgICAqLwogICAgcHJpdmF0ZSAkY29va2llcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmljdE1vZGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAgJHN0cmljdE1vZGUgIFNldCB0byB0cnVlIHRvIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBpbnZhbGlkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZXMgYXJlIGFkZGVkIHRvIHRoZSBjb29raWUgamFyLgogICAgICogQHBhcmFtIGFycmF5ICRjb29raWVBcnJheSBBcnJheSBvZiBTZXRDb29raWUgb2JqZWN0cyBvciBhIGhhc2ggb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgU2V0Q29va2llCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChib29sICRzdHJpY3RNb2RlID0gZmFsc2UsIGFycmF5ICRjb29raWVBcnJheSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zdHJpY3RNb2RlID0gJHN0cmljdE1vZGU7CgogICAgICAgIGZvcmVhY2ggKCRjb29raWVBcnJheSBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICghJGNvb2tpZSBpbnN0YW5jZW9mIFNldENvb2tpZSkgewogICAgICAgICAgICAgICAgJGNvb2tpZSA9IG5ldyBTZXRDb29raWUoJGNvb2tpZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnNldENvb2tpZSgkY29va2llKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgQ29va2llIGphciBmcm9tIGFuIGFzc29jaWF0aXZlIGFycmF5IGFuZCBkb21haW4uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAkY29va2llcyBDb29raWVzIHRvIGNyZWF0ZSB0aGUgamFyIGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRvbWFpbiAgRG9tYWluIHRvIHNldCB0aGUgY29va2llcyB0bwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21BcnJheShhcnJheSAkY29va2llcywgc3RyaW5nICRkb21haW4pOiBzZWxmCiAgICB7CiAgICAgICAgJGNvb2tpZUphciA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRjb29raWVKYXItPnNldENvb2tpZShuZXcgU2V0Q29va2llKFsKICAgICAgICAgICAgICAgICdEb21haW4nID0+ICRkb21haW4sCiAgICAgICAgICAgICAgICAnTmFtZScgPT4gJG5hbWUsCiAgICAgICAgICAgICAgICAnVmFsdWUnID0+ICR2YWx1ZSwKICAgICAgICAgICAgICAgICdEaXNjYXJkJyA9PiB0cnVlLAogICAgICAgICAgICBdKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvb2tpZUphcjsKICAgIH0KCiAgICAvKioKICAgICAqIEV2YWx1YXRlIGlmIHRoaXMgY29va2llIHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gc3RvcmFnZQogICAgICogdGhhdCBzdXJ2aXZlcyBiZXR3ZWVuIHJlcXVlc3RzLgogICAgICoKICAgICAqIEBwYXJhbSBTZXRDb29raWUgJGNvb2tpZSAgICAgICAgICAgICAgQmVpbmcgZXZhbHVhdGVkLgogICAgICogQHBhcmFtIGJvb2wgICAgICAkYWxsb3dTZXNzaW9uQ29va2llcyBJZiB3ZSBzaG91bGQgcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaG91bGRQZXJzaXN0KFNldENvb2tpZSAkY29va2llLCBib29sICRhbGxvd1Nlc3Npb25Db29raWVzID0gZmFsc2UpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCRjb29raWUtPmdldEV4cGlyZXMoKSB8fCAkYWxsb3dTZXNzaW9uQ29va2llcykgewogICAgICAgICAgICBpZiAoISRjb29raWUtPmdldERpc2NhcmQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBjb29raWUgYmFzZWQgb24gdGhlIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIGNvb2tpZSBuYW1lIHRvIHNlYXJjaCBmb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIFNldENvb2tpZXxudWxsIGNvb2tpZSB0aGF0IHdhcyBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llQnlOYW1lKHN0cmluZyAkbmFtZSk6ID9TZXRDb29raWUKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICgkY29va2llLT5nZXROYW1lKCkgIT09IG51bGwgJiYgXHN0cmNhc2VjbXAoJGNvb2tpZS0+Z2V0TmFtZSgpLCAkbmFtZSkgPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkY29va2llOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBcYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpOiBhcnJheSB7CiAgICAgICAgICAgIHJldHVybiAkY29va2llLT50b0FycmF5KCk7CiAgICAgICAgfSwgJHRoaXMtPmdldEl0ZXJhdG9yKCktPmdldEFycmF5Q29weSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoP3N0cmluZyAkZG9tYWluID0gbnVsbCwgP3N0cmluZyAkcGF0aCA9IG51bGwsID9zdHJpbmcgJG5hbWUgPSBudWxsKTogdm9pZAogICAgewogICAgICAgIGlmICgkZG9tYWluID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5jb29raWVzID0gW107CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCEkcGF0aCkgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFxhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpIHVzZSAoJGRvbWFpbik6IGJvb2wgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkY29va2llLT5nZXREb21haW4oKSA9PT0gbnVsbCB8fCAhJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkZG9tYWluKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2VpZiAoISRuYW1lKSB7CiAgICAgICAgICAgICR0aGlzLT5jb29raWVzID0gXGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgdXNlICgkcGF0aCwgJGRvbWFpbik6IGJvb2wgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPmdldERvbWFpbigpICE9PSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFxhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpIHVzZSAoJHBhdGgsICRkb21haW4sICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoJGNvb2tpZS0+Z2V0RG9tYWluKCkgIT09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGNvb2tpZS0+Z2V0TmFtZSgpID09ICRuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyU2Vzc2lvbkNvb2tpZXMoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5jb29raWVzID0gXGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMsCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoU2V0Q29va2llICRjb29raWUpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAhJGNvb2tpZS0+Z2V0RGlzY2FyZCgpICYmICRjb29raWUtPmdldEV4cGlyZXMoKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENvb2tpZShTZXRDb29raWUgJGNvb2tpZSk6IGJvb2wKICAgIHsKICAgICAgICAvLyBJZiB0aGUgbmFtZSBzdHJpbmcgaXMgZW1wdHkgKGJ1dCBub3QgMCksIGlnbm9yZSB0aGUgc2V0LWNvb2tpZQogICAgICAgIC8vIHN0cmluZyBlbnRpcmVseS4KICAgICAgICAkbmFtZSA9ICRjb29raWUtPmdldE5hbWUoKTsKICAgICAgICBpZiAoISRuYW1lICYmICRuYW1lICE9PSAnMCcpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gT25seSBhbGxvdyBjb29raWVzIHdpdGggc2V0IGFuZCB2YWxpZCBkb21haW4sIG5hbWUsIHZhbHVlCiAgICAgICAgJHJlc3VsdCA9ICRjb29raWUtPnZhbGlkYXRlKCk7CiAgICAgICAgaWYgKCRyZXN1bHQgIT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5zdHJpY3RNb2RlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgY29va2llOiAnLiRyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5yZW1vdmVDb29raWVJZkVtcHR5KCRjb29raWUpOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVzb2x2ZSBjb25mbGljdHMgd2l0aCBwcmV2aW91c2x5IHNldCBjb29raWVzCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNvb2tpZXMgYXMgJGkgPT4gJGMpIHsKICAgICAgICAgICAgLy8gVHdvIGNvb2tpZXMgYXJlIGlkZW50aWNhbCwgd2hlbiB0aGVpciBwYXRoLCBhbmQgZG9tYWluIGFyZQogICAgICAgICAgICAvLyBpZGVudGljYWwuCiAgICAgICAgICAgIGlmICgkYy0+Z2V0UGF0aCgpICE9ICRjb29raWUtPmdldFBhdGgoKQogICAgICAgICAgICAgICAgfHwgJGMtPmdldERvbWFpbigpICE9ICRjb29raWUtPmdldERvbWFpbigpCiAgICAgICAgICAgICAgICB8fCAkYy0+Z2V0TmFtZSgpICE9ICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGUgcHJldmlvdXNseSBzZXQgY29va2llIGlzIGEgZGlzY2FyZCBjb29raWUgYW5kIHRoaXMgb25lIGlzCiAgICAgICAgICAgIC8vIG5vdCBzbyBhbGxvdyB0aGUgbmV3IGNvb2tpZSB0byBiZSBzZXQKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGMtPmdldERpc2NhcmQoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGNvb2tpZSdzIGV4cGlyYXRpb24gaXMgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUsIHRoZW4KICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIGNvb2tpZQogICAgICAgICAgICBpZiAoJGNvb2tpZS0+Z2V0RXhwaXJlcygpID4gJGMtPmdldEV4cGlyZXMoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIGJldHRlciBjaGFuZ2UgaXQKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldFZhbHVlKCkgIT09ICRjLT5nZXRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+Y29va2llc1skaV0pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRoZSBjb29raWUgZXhpc3RzLCBzbyBubyBuZWVkIHRvIGNvbnRpbnVlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb29raWVzW10gPSAkY29va2llOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIFxjb3VudCgkdGhpcy0+Y29va2llcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxBcnJheUl0ZXJhdG9yPGludCwgU2V0Q29va2llPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogXEFycmF5SXRlcmF0b3IKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKFxhcnJheV92YWx1ZXMoJHRoaXMtPmNvb2tpZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdENvb2tpZXMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKTogdm9pZAogICAgewogICAgICAgIGlmICgkY29va2llSGVhZGVyID0gJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ1NldC1Db29raWUnKSkgewogICAgICAgICAgICBmb3JlYWNoICgkY29va2llSGVhZGVyIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICRzYyA9IFNldENvb2tpZTo6ZnJvbVN0cmluZygkY29va2llKTsKICAgICAgICAgICAgICAgIGlmICghJHNjLT5nZXREb21haW4oKSkgewogICAgICAgICAgICAgICAgICAgICRzYy0+c2V0RG9tYWluKCRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgwICE9PSBcc3RycG9zKCRzYy0+Z2V0UGF0aCgpLCAnLycpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNjLT5zZXRQYXRoKCR0aGlzLT5nZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoJHJlcXVlc3QpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghJHNjLT5tYXRjaGVzRG9tYWluKCRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTm90ZTogQXQgdGhpcyBwb2ludCBgJHNjLT5nZXREb21haW4oKWAgYmVpbmcgYSBwdWJsaWMgc3VmZml4IHNob3VsZAogICAgICAgICAgICAgICAgLy8gYmUgcmVqZWN0ZWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHB1bGwgaW4gdGhlIGZ1bGwgUFNMIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRzYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyBjb29raWUgcGF0aCBmb2xsb3dpbmcgUkZDIDYyNjUgc2VjdGlvbiA1LjEuNAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4xLjQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IHN0cmluZwogICAgewogICAgICAgICR1cmlQYXRoID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRQYXRoKCk7CiAgICAgICAgaWYgKCcnID09PSAkdXJpUGF0aCkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoMCAhPT0gXHN0cnBvcygkdXJpUGF0aCwgJy8nKSkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoJy8nID09PSAkdXJpUGF0aCkgewogICAgICAgICAgICByZXR1cm4gJy8nOwogICAgICAgIH0KICAgICAgICAkbGFzdFNsYXNoUG9zID0gXHN0cnJwb3MoJHVyaVBhdGgsICcvJyk7CiAgICAgICAgaWYgKDAgPT09ICRsYXN0U2xhc2hQb3MgfHwgZmFsc2UgPT09ICRsYXN0U2xhc2hQb3MpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3Vic3RyKCR1cmlQYXRoLCAwLCAkbGFzdFNsYXNoUG9zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgICR2YWx1ZXMgPSBbXTsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICAkcGF0aCA9ICR1cmktPmdldFBhdGgoKSA/OiAnLyc7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldERvbWFpbigpICE9PSBudWxsCiAgICAgICAgICAgICAgICAmJiAkY29va2llLT5tYXRjaGVzUGF0aCgkcGF0aCkKICAgICAgICAgICAgICAgICYmICRjb29raWUtPm1hdGNoZXNEb21haW4oJGhvc3QpCiAgICAgICAgICAgICAgICAmJiAhJGNvb2tpZS0+aXNFeHBpcmVkKCkKICAgICAgICAgICAgICAgICYmICghJGNvb2tpZS0+Z2V0U2VjdXJlKCkgfHwgJHNjaGVtZSA9PT0gJ2h0dHBzJykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzW10gPSAkY29va2llLT5nZXROYW1lKCkuJz0nCiAgICAgICAgICAgICAgICAgICAgLiRjb29raWUtPmdldFZhbHVlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWVzCiAgICAgICAgICAgID8gJHJlcXVlc3QtPndpdGhIZWFkZXIoJ0Nvb2tpZScsIFxpbXBsb2RlKCc7ICcsICR2YWx1ZXMpKQogICAgICAgICAgICA6ICRyZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogSWYgYSBjb29raWUgYWxyZWFkeSBleGlzdHMgYW5kIHRoZSBzZXJ2ZXIgYXNrcyB0byBzZXQgaXQgYWdhaW4gd2l0aCBhCiAgICAgKiBudWxsIHZhbHVlLCB0aGUgY29va2llIG11c3QgYmUgZGVsZXRlZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVDb29raWVJZkVtcHR5KFNldENvb2tpZSAkY29va2llKTogdm9pZAogICAgewogICAgICAgICRjb29raWVWYWx1ZSA9ICRjb29raWUtPmdldFZhbHVlKCk7CiAgICAgICAgaWYgKCgkY29va2llVmFsdWUgPT09IG51bGwgfHwgJGNvb2tpZVZhbHVlID09PSAnJykgJiYgJGNvb2tpZS0+Z2V0RG9tYWluKCkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPmNsZWFyKAogICAgICAgICAgICAgICAgJGNvb2tpZS0+Z2V0RG9tYWluKCksCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXRQYXRoKCksCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXROYW1lKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIFN0b3JlcyBIVFRQIGNvb2tpZXMuCiAqCiAqIEl0IGV4dHJhY3RzIGNvb2tpZXMgZnJvbSBIVFRQIHJlcXVlc3RzLCBhbmQgcmV0dXJucyB0aGVtIGluIEhUVFAgcmVzcG9uc2VzLgogKiBDb29raWVKYXJJbnRlcmZhY2UgaW5zdGFuY2VzIGF1dG9tYXRpY2FsbHkgZXhwaXJlIGNvbnRhaW5lZCBjb29raWVzIHdoZW4KICogbmVjZXNzYXJ5LiBTdWJjbGFzc2VzIGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nCiAqIGNvb2tpZXMgZnJvbSBhIGZpbGUsIGRhdGFiYXNlLCBldGMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Nvb2tpZWxpYi5odG1sIEluc3BpcmF0aW9uCiAqCiAqIEBleHRlbmRzIFxJdGVyYXRvckFnZ3JlZ2F0ZTxTZXRDb29raWU+CiAqLwppbnRlcmZhY2UgQ29va2llSmFySW50ZXJmYWNlIGV4dGVuZHMgXENvdW50YWJsZSwgXEl0ZXJhdG9yQWdncmVnYXRlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgcmVxdWVzdCB3aXRoIGFkZGVkIGNvb2tpZSBoZWFkZXJzLgogICAgICoKICAgICAqIElmIG5vIG1hdGNoaW5nIGNvb2tpZXMgYXJlIGZvdW5kIGluIHRoZSBjb29raWUgamFyLCB0aGVuIG5vIENvb2tpZQogICAgICogaGVhZGVyIGlzIGFkZGVkIHRvIHRoZSByZXF1ZXN0IGFuZCB0aGUgc2FtZSByZXF1ZXN0IGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3Qgb2JqZWN0IHRvIG1vZGlmeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UgcmV0dXJucyB0aGUgbW9kaWZpZWQgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhDb29raWVIZWFkZXIoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IFJlcXVlc3RJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGNvb2tpZXMgZnJvbSBhbiBIVFRQIHJlc3BvbnNlIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBDb29raWVKYXIuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICBSZXF1ZXN0IHRoYXQgd2FzIHNlbnQKICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgUmVzcG9uc2UgdGhhdCB3YXMgcmVjZWl2ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4dHJhY3RDb29raWVzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY29va2llIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEBwYXJhbSBTZXRDb29raWUgJGNvb2tpZSBDb29raWUgdG8gc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb29raWUoU2V0Q29va2llICRjb29raWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmVtb3ZlIGNvb2tpZXMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKgogICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBlbXB0eSB0aGUgd2hvbGUgY29va2llIGphci4KICAgICAqIElmIGdpdmVuIGEgJGRvbWFpbiBhcmd1bWVudCBvbmx5IGNvb2tpZXMgYmVsb25naW5nIHRvIHRoYXQgZG9tYWluIHdpbGwKICAgICAqIGJlIHJlbW92ZWQuIElmIGdpdmVuIGEgJGRvbWFpbiBhbmQgJHBhdGggYXJndW1lbnQsIGNvb2tpZXMgYmVsb25naW5nIHRvCiAgICAgKiB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aGluIHRoYXQgZG9tYWluIGFyZSByZW1vdmVkLiBJZiBnaXZlbiBhbGwgdGhyZWUKICAgICAqIGFyZ3VtZW50cywgdGhlbiB0aGUgY29va2llIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLCBwYXRoIGFuZCBkb21haW4gaXMKICAgICAqIHJlbW92ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRkb21haW4gQ2xlYXJzIGNvb2tpZXMgbWF0Y2hpbmcgYSBkb21haW4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGF0aCAgIENsZWFycyBjb29raWVzIG1hdGNoaW5nIGEgZG9tYWluIGFuZCBwYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWUgICBDbGVhcnMgY29va2llcyBtYXRjaGluZyBhIGRvbWFpbiwgcGF0aCwgYW5kIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyKD9zdHJpbmcgJGRvbWFpbiA9IG51bGwsID9zdHJpbmcgJHBhdGggPSBudWxsLCA/c3RyaW5nICRuYW1lID0gbnVsbCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBEaXNjYXJkIGFsbCBzZXNzaW9ucyBjb29raWVzLgogICAgICoKICAgICAqIFJlbW92ZXMgY29va2llcyB0aGF0IGRvbid0IGhhdmUgYW4gZXhwaXJlIGZpZWxkIG9yIGEgaGF2ZSBhIGRpc2NhcmQKICAgICAqIGZpZWxkIHNldCB0byB0cnVlLiBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBhZ2VudCBzaHV0cyBkb3duIGFjY29yZGluZwogICAgICogdG8gUkZDIDI5NjUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclNlc3Npb25Db29raWVzKCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgY29va2llIGphciB0byBhbiBhcnJheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCnVzZSBHdXp6bGVIdHRwXFV0aWxzOwoKLyoqCiAqIFBlcnNpc3RzIG5vbi1zZXNzaW9uIGNvb2tpZXMgdXNpbmcgYSBKU09OIGZvcm1hdHRlZCBmaWxlCiAqLwpjbGFzcyBGaWxlQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgZmlsZW5hbWUKICAgICAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgQ29udHJvbCB3aGV0aGVyIHRvIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBGaWxlQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZUZpbGUgICAgICAgICAgRmlsZSB0byBzdG9yZSB0aGUgY29va2llIGRhdGEKICAgICAqIEBwYXJhbSBib29sICAgJHN0b3JlU2Vzc2lvbkNvb2tpZXMgU2V0IHRvIHRydWUgdG8gc3RvcmUgc2Vzc2lvbiBjb29raWVzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkY29va2llRmlsZSwgYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyA9IGZhbHNlKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSAkY29va2llRmlsZTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwoKICAgICAgICBpZiAoXGZpbGVfZXhpc3RzKCRjb29raWVGaWxlKSkgewogICAgICAgICAgICAkdGhpcy0+bG9hZCgkY29va2llRmlsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIGZpbGUgd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgkdGhpcy0+ZmlsZW5hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIGNvb2tpZXMgdG8gYSBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGUgdG8gc2F2ZQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKICAgIHsKICAgICAgICAkanNvbiA9IFtdOwogICAgICAgIC8qKiBAdmFyIFNldENvb2tpZSAkY29va2llICovCiAgICAgICAgZm9yZWFjaCAoJHRoaXMgYXMgJGNvb2tpZSkgewogICAgICAgICAgICBpZiAoQ29va2llSmFyOjpzaG91bGRQZXJzaXN0KCRjb29raWUsICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzKSkgewogICAgICAgICAgICAgICAgJGpzb25bXSA9ICRjb29raWUtPnRvQXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGpzb25TdHIgPSBVdGlsczo6anNvbkVuY29kZSgkanNvbik7CiAgICAgICAgaWYgKGZhbHNlID09PSBcZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCAkanNvblN0ciwgXExPQ0tfRVgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIHNhdmUgZmlsZSB7JGZpbGVuYW1lfSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExvYWQgY29va2llcyBmcm9tIGEgSlNPTiBmb3JtYXR0ZWQgZmlsZS4KICAgICAqCiAgICAgKiBPbGQgY29va2llcyBhcmUga2VwdCB1bmxlc3Mgb3ZlcndyaXR0ZW4gYnkgbmV3bHkgbG9hZGVkIG9uZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgQ29va2llIGZpbGUgdG8gbG9hZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZmlsZW5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJGpzb24gPSBcZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRqc29uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvYWQgZmlsZSB7JGZpbGVuYW1lfSIpOwogICAgICAgIH0KICAgICAgICBpZiAoJGpzb24gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gVXRpbHM6Ompzb25EZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgIGlmIChcaXNfYXJyYXkoJGRhdGEpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRDb29raWUobmV3IFNldENvb2tpZSgkY29va2llKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoXGlzX3NjYWxhcigkZGF0YSkgJiYgIWVtcHR5KCRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgY29va2llIGZpbGU6IHskZmlsZW5hbWV9Iik7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCi8qKgogKiBQZXJzaXN0cyBjb29raWVzIGluIHRoZSBjbGllbnQgc2Vzc2lvbgogKi8KY2xhc3MgU2Vzc2lvbkNvb2tpZUphciBleHRlbmRzIENvb2tpZUphcgp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nIHNlc3Npb24ga2V5CiAgICAgKi8KICAgIHByaXZhdGUgJHNlc3Npb25LZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgQ29udHJvbCB3aGV0aGVyIHRvIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBTZXNzaW9uQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlc3Npb25LZXkgICAgICAgICAgU2Vzc2lvbiBrZXkgbmFtZSB0byBzdG9yZSB0aGUgY29va2llCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaW4gc2Vzc2lvbgogICAgICogQHBhcmFtIGJvb2wgICAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHNlc3Npb25LZXksIGJvb2wgJHN0b3JlU2Vzc2lvbkNvb2tpZXMgPSBmYWxzZSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAgICAgJHRoaXMtPnNlc3Npb25LZXkgPSAkc2Vzc2lvbktleTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwogICAgICAgICR0aGlzLT5sb2FkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlcyBjb29raWVzIHRvIHNlc3Npb24gd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBjb29raWVzIHRvIHRoZSBjbGllbnQgc2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJGpzb24gPSBbXTsKICAgICAgICAvKiogQHZhciBTZXRDb29raWUgJGNvb2tpZSAqLwogICAgICAgIGZvcmVhY2ggKCR0aGlzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKENvb2tpZUphcjo6c2hvdWxkUGVyc2lzdCgkY29va2llLCAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcykpIHsKICAgICAgICAgICAgICAgICRqc29uW10gPSAkY29va2llLT50b0FycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRqc29uID0gXGpzb25fZW5jb2RlKCRqc29uKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRqc29uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGVuY29kZSBjb29raWUgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgJF9TRVNTSU9OWyR0aGlzLT5zZXNzaW9uS2V5XSA9ICRqc29uOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGNsaWVudCBzZXNzaW9uIGludG8gdGhlIGRhdGEgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWQoKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyR0aGlzLT5zZXNzaW9uS2V5XSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGpzb24gPSAkX1NFU1NJT05bJHRoaXMtPnNlc3Npb25LZXldOwogICAgICAgIGlmICghXGlzX3N0cmluZygkanNvbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGNvb2tpZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7CiAgICAgICAgaWYgKFxpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGNvb2tpZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgY29va2llIGRhdGEnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKG5ldyBTZXRDb29raWUoJGNvb2tpZSkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKFxpc19zY2FsYXIoJGRhdGEpICYmIFxzdHJsZW4oKHN0cmluZykgJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb29raWUgZGF0YScpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXENvb2tpZTsKCi8qKgogKiBTZXQtQ29va2llIG9iamVjdAogKi8KY2xhc3MgU2V0Q29va2llCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVmYXVsdHMgPSBbCiAgICAgICAgJ05hbWUnID0+IG51bGwsCiAgICAgICAgJ1ZhbHVlJyA9PiBudWxsLAogICAgICAgICdEb21haW4nID0+IG51bGwsCiAgICAgICAgJ1BhdGgnID0+ICcvJywKICAgICAgICAnTWF4LUFnZScgPT4gbnVsbCwKICAgICAgICAnRXhwaXJlcycgPT4gbnVsbCwKICAgICAgICAnU2VjdXJlJyA9PiBmYWxzZSwKICAgICAgICAnRGlzY2FyZCcgPT4gZmFsc2UsCiAgICAgICAgJ0h0dHBPbmx5JyA9PiBmYWxzZSwKICAgIF07CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5IENvb2tpZSBkYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgU2V0Q29va2llIG9iamVjdCBmcm9tIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBTZXQtQ29va2llIGhlYWRlciBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkY29va2llKTogc2VsZgogICAgewogICAgICAgIC8vIENyZWF0ZSB0aGUgZGVmYXVsdCByZXR1cm4gYXJyYXkKICAgICAgICAkZGF0YSA9IHNlbGY6OiRkZWZhdWx0czsKICAgICAgICAvLyBFeHBsb2RlIHRoZSBjb29raWUgc3RyaW5nIHVzaW5nIGEgc2VyaWVzIG9mIHNlbWljb2xvbnMKICAgICAgICAkcGllY2VzID0gXGFycmF5X2ZpbHRlcihcYXJyYXlfbWFwKCd0cmltJywgXGV4cGxvZGUoJzsnLCAkY29va2llKSkpOwogICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBjb29raWUgKGZpcnN0IGt2cCkgbXVzdCBleGlzdCBhbmQgaW5jbHVkZSBhbiBlcXVhbCBzaWduLgogICAgICAgIGlmICghaXNzZXQoJHBpZWNlc1swXSkgfHwgXHN0cnBvcygkcGllY2VzWzBdLCAnPScpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBjb29raWUgcGllY2VzIGludG8gdGhlIHBhcnNlZCBkYXRhIGFycmF5CiAgICAgICAgZm9yZWFjaCAoJHBpZWNlcyBhcyAkcGFydCkgewogICAgICAgICAgICAkY29va2llUGFydHMgPSBcZXhwbG9kZSgnPScsICRwYXJ0LCAyKTsKICAgICAgICAgICAgJGtleSA9IFx0cmltKCRjb29raWVQYXJ0c1swXSk7CiAgICAgICAgICAgICR2YWx1ZSA9IGlzc2V0KCRjb29raWVQYXJ0c1sxXSkKICAgICAgICAgICAgICAgID8gXHRyaW0oJGNvb2tpZVBhcnRzWzFdLCAiIFxuXHJcdFwwXHgwQiIpCiAgICAgICAgICAgICAgICA6IHRydWU7CgogICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBub24tY29va2llcyB3aGVuIGNvb2tpZXMgaGF2ZSBiZWVuIGZvdW5kCiAgICAgICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ05hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRkYXRhWydOYW1lJ10gPSAka2V5OwogICAgICAgICAgICAgICAgJGRhdGFbJ1ZhbHVlJ10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIChcYXJyYXlfa2V5cyhzZWxmOjokZGVmYXVsdHMpIGFzICRzZWFyY2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVxzdHJjYXNlY21wKCRzZWFyY2gsICRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2VhcmNoID09PSAnTWF4LUFnZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVskc2VhcmNoXSA9IChpbnQpICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRzZWFyY2ggPT09ICdTZWN1cmUnIHx8ICRzZWFyY2ggPT09ICdEaXNjYXJkJyB8fCAkc2VhcmNoID09PSAnSHR0cE9ubHknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJHNlYXJjaF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJHNlYXJjaF0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YSBBcnJheSBvZiBjb29raWUgZGF0YSBwcm92aWRlZCBieSBhIENvb2tpZSBwYXJzZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkYXRhID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSBzZWxmOjokZGVmYXVsdHM7CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnTmFtZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TmFtZSgkZGF0YVsnTmFtZSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnVmFsdWUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFZhbHVlKCRkYXRhWydWYWx1ZSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnRG9tYWluJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXREb21haW4oJGRhdGFbJ0RvbWFpbiddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnUGF0aCddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0UGF0aCgkZGF0YVsnUGF0aCddKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkZGF0YVsnTWF4LUFnZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TWF4QWdlKCRkYXRhWydNYXgtQWdlJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydFeHBpcmVzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCRkYXRhWydFeHBpcmVzJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydTZWN1cmUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFNlY3VyZSgkZGF0YVsnU2VjdXJlJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydEaXNjYXJkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXREaXNjYXJkKCRkYXRhWydEaXNjYXJkJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWydIdHRwT25seSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0SHR0cE9ubHkoJGRhdGFbJ0h0dHBPbmx5J10pOwogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgdmFsdWVzIHRoYXQgZG9uJ3QgaGF2ZSBleHRyYSB2YWxpZGF0aW9uIGxvZ2ljCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfZGlmZihhcnJheV9rZXlzKCRkYXRhKSwgYXJyYXlfa2V5cyhzZWxmOjokZGVmYXVsdHMpKSBhcyAka2V5KSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhWyRrZXldID0gJGRhdGFbJGtleV07CiAgICAgICAgfQoKICAgICAgICAvLyBFeHRyYWN0IHRoZSBFeHBpcmVzIHZhbHVlIGFuZCB0dXJuIGl0IGludG8gYSBVTklYIHRpbWVzdGFtcCBpZiBuZWVkZWQKICAgICAgICBpZiAoISR0aGlzLT5nZXRFeHBpcmVzKCkgJiYgJHRoaXMtPmdldE1heEFnZSgpKSB7CiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgRXhwaXJlcyBkYXRlCiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKFx0aW1lKCkgKyAkdGhpcy0+Z2V0TWF4QWdlKCkpOwogICAgICAgIH0gZWxzZWlmIChudWxsICE9PSAoJGV4cGlyZXMgPSAkdGhpcy0+Z2V0RXhwaXJlcygpKSAmJiAhXGlzX251bWVyaWMoJGV4cGlyZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCRleHBpcmVzKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRzdHIgPSAkdGhpcy0+ZGF0YVsnTmFtZSddLic9Jy4oJHRoaXMtPmRhdGFbJ1ZhbHVlJ10gPz8gJycpLic7ICc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCRrICE9PSAnTmFtZScgJiYgJGsgIT09ICdWYWx1ZScgJiYgJHYgIT09IG51bGwgJiYgJHYgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdFeHBpcmVzJykgewogICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJ0V4cGlyZXM9Jy5cZ21kYXRlKCdELCBkIE0gWSBIOmk6cyBcR1xNXFQnLCAkdikuJzsgJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAoJHYgPT09IHRydWUgPyAkayA6ICJ7JGt9PXskdn0iKS4nOyAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHJ0cmltKCRzdHIsICc7ICcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb29raWUgbmFtZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydOYW1lJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvb2tpZSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ29va2llIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoJG5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJG5hbWUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjQnLCAnTm90IHBhc3NpbmcgYSBzdHJpbmcgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiA4LjAuJywgX19DTEFTU19fLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbJ05hbWUnXSA9IChzdHJpbmcpICRuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb29raWUgdmFsdWUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnVmFsdWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgY29va2llIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIENvb2tpZSB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWUoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIHN0cmluZyB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnVmFsdWUnXSA9IChzdHJpbmcpICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZG9tYWluLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERvbWFpbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydEb21haW4nXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZG9tYWluIG9mIHRoZSBjb29raWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRkb21haW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERvbWFpbigkZG9tYWluKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRkb21haW4pICYmIG51bGwgIT09ICRkb21haW4pIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIHN0cmluZyBvciBudWxsIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydEb21haW4nXSA9IG51bGwgPT09ICRkb21haW4gPyBudWxsIDogKHN0cmluZykgJGRvbWFpbjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcGF0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydQYXRoJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHBhdGggb2YgdGhlIGNvb2tpZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggb2YgdGhlIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aCgkcGF0aCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkcGF0aCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhIHN0cmluZyB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnUGF0aCddID0gKHN0cmluZykgJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIGxpZmV0aW1lIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXhBZ2UoKQogICAgewogICAgICAgIHJldHVybiBudWxsID09PSAkdGhpcy0+ZGF0YVsnTWF4LUFnZSddID8gbnVsbCA6IChpbnQpICR0aGlzLT5kYXRhWydNYXgtQWdlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1heC1hZ2Ugb2YgdGhlIGNvb2tpZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJG1heEFnZSBNYXggYWdlIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4QWdlKCRtYXhBZ2UpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19pbnQoJG1heEFnZSkgJiYgbnVsbCAhPT0gJG1heEFnZSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGFuIGludCBvciBudWxsIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydNYXgtQWdlJ10gPSAkbWF4QWdlID09PSBudWxsID8gbnVsbCA6IChpbnQpICRtYXhBZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgVU5JWCB0aW1lc3RhbXAgd2hlbiB0aGUgY29va2llIEV4cGlyZXMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8aW50fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4cGlyZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRXhwaXJlcyddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB1bml4IHRpbWVzdGFtcCBmb3Igd2hpY2ggdGhlIGNvb2tpZSB3aWxsIGV4cGlyZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZ3xudWxsICR0aW1lc3RhbXAgVW5peCB0aW1lc3RhbXAgb3IgYW55IEVuZ2xpc2ggdGV4dHVhbCBkYXRldGltZSBkZXNjcmlwdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4cGlyZXMoJHRpbWVzdGFtcCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzX2ludCgkdGltZXN0YW1wKSAmJiAhaXNfc3RyaW5nKCR0aW1lc3RhbXApICYmIG51bGwgIT09ICR0aW1lc3RhbXApIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuNCcsICdOb3QgcGFzc2luZyBhbiBpbnQsIHN0cmluZyBvciBudWxsIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSAkdGltZXN0YW1wKSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhWydFeHBpcmVzJ10gPSBudWxsOwogICAgICAgIH0gZWxzZWlmIChcaXNfbnVtZXJpYygkdGltZXN0YW1wKSkgewogICAgICAgICAgICAkdGhpcy0+ZGF0YVsnRXhwaXJlcyddID0gKGludCkgJHRpbWVzdGFtcDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTdG9yZSB1bnBhcnNlYWJsZSBkYXRlcyBhcyBzZXNzaW9uIGNvb2tpZXMsIG5vdCBhcyBleHBpcmVkIGNvb2tpZXMuCiAgICAgICAgICAgICRleHBpcmVzID0gXHN0cnRvdGltZSgoc3RyaW5nKSAkdGltZXN0YW1wKTsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJ0V4cGlyZXMnXSA9ICRleHBpcmVzID09PSBmYWxzZSA/IG51bGwgOiAkZXhwaXJlczsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlY3VyZSBjb29raWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN1cmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnU2VjdXJlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciBvciBub3QgdGhlIGNvb2tpZSBpcyBzZWN1cmUuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNlY3VyZSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiBzZWN1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlY3VyZSgkc2VjdXJlKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfYm9vbCgkc2VjdXJlKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGEgYm9vbCB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnU2VjdXJlJ10gPSAoYm9vbCkgJHNlY3VyZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgc2Vzc2lvbiBjb29raWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc2NhcmQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSBzZXNzaW9uIGNvb2tpZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGlzY2FyZCBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiB0aGlzIGlzIGEgc2Vzc2lvbiBjb29raWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERpc2NhcmQoJGRpc2NhcmQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19ib29sKCRkaXNjYXJkKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGEgYm9vbCB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddID0gKGJvb2wpICRkaXNjYXJkOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYW4gSFRUUCBvbmx5IGNvb2tpZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEh0dHBPbmx5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0h0dHBPbmx5J107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhbiBIVFRQIG9ubHkgY29va2llLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRodHRwT25seSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiB0aGlzIGlzIEhUVFAgb25seQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cE9ubHkoJGh0dHBPbmx5KTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfYm9vbCgkaHR0cE9ubHkpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjQnLCAnTm90IHBhc3NpbmcgYSBib29sIHRvICVzOjolcygpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgaW4gOC4wLicsIF9fQ0xBU1NfXywgX19GVU5DVElPTl9fKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWydIdHRwT25seSddID0gKGJvb2wpICRodHRwT25seTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgbWF0Y2hlcyBhIHBhdGggdmFsdWUuCiAgICAgKgogICAgICogQSByZXF1ZXN0LXBhdGggcGF0aC1tYXRjaGVzIGEgZ2l2ZW4gY29va2llLXBhdGggaWYgYXQgbGVhc3Qgb25lIG9mCiAgICAgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZHM6CiAgICAgKgogICAgICogLSBUaGUgY29va2llLXBhdGggYW5kIHRoZSByZXF1ZXN0LXBhdGggYXJlIGlkZW50aWNhbC4KICAgICAqIC0gVGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0LXBhdGgsIGFuZCB0aGUgbGFzdAogICAgICogICBjaGFyYWN0ZXIgb2YgdGhlIGNvb2tpZS1wYXRoIGlzICV4MkYgKCIvIikuCiAgICAgKiAtIFRoZSBjb29raWUtcGF0aCBpcyBhIHByZWZpeCBvZiB0aGUgcmVxdWVzdC1wYXRoLCBhbmQgdGhlIGZpcnN0CiAgICAgKiAgIGNoYXJhY3RlciBvZiB0aGUgcmVxdWVzdC1wYXRoIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjb29raWUtCiAgICAgKiAgIHBhdGggaXMgYSAleDJGICgiLyIpIGNoYXJhY3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXF1ZXN0UGF0aCBQYXRoIHRvIGNoZWNrIGFnYWluc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXNQYXRoKHN0cmluZyAkcmVxdWVzdFBhdGgpOiBib29sCiAgICB7CiAgICAgICAgJGNvb2tpZVBhdGggPSAkdGhpcy0+Z2V0UGF0aCgpOwoKICAgICAgICAvLyBNYXRjaCBvbiBleGFjdCBtYXRjaGVzIG9yIHdoZW4gcGF0aCBpcyB0aGUgZGVmYXVsdCBlbXB0eSAiLyIKICAgICAgICBpZiAoJGNvb2tpZVBhdGggPT09ICcvJyB8fCAkY29va2llUGF0aCA9PSAkcmVxdWVzdFBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY29va2llLXBhdGggaXMgYSBwcmVmaXggb2YgdGhlIHJlcXVlc3QgcGF0aC4KICAgICAgICBpZiAoMCAhPT0gXHN0cnBvcygkcmVxdWVzdFBhdGgsICRjb29raWVQYXRoKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBNYXRjaCBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvb2tpZS1wYXRoIGlzICIvIgogICAgICAgIGlmIChcc3Vic3RyKCRjb29raWVQYXRoLCAtMSwgMSkgPT09ICcvJykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IGluY2x1ZGVkIGluIGNvb2tpZSBwYXRoIGlzICIvIgogICAgICAgIHJldHVybiBcc3Vic3RyKCRyZXF1ZXN0UGF0aCwgXHN0cmxlbigkY29va2llUGF0aCksIDEpID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIG1hdGNoZXMgYSBkb21haW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluIERvbWFpbiB0byBjaGVjayBhZ2FpbnN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXRjaGVzRG9tYWluKHN0cmluZyAkZG9tYWluKTogYm9vbAogICAgewogICAgICAgICRjb29raWVEb21haW4gPSAkdGhpcy0+Z2V0RG9tYWluKCk7CiAgICAgICAgaWYgKG51bGwgPT09ICRjb29raWVEb21haW4pIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgJy4nIGFzIHBlciBzcGVjIGluIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjI2NSNzZWN0aW9uLTUuMi4zCiAgICAgICAgJGNvb2tpZURvbWFpbiA9IFxsdHJpbShcc3RydG9sb3dlcigkY29va2llRG9tYWluKSwgJy4nKTsKCiAgICAgICAgJGRvbWFpbiA9IFxzdHJ0b2xvd2VyKCRkb21haW4pOwoKICAgICAgICAvLyBEb21haW4gbm90IHNldCBvciBleGFjdCBtYXRjaC4KICAgICAgICBpZiAoJycgPT09ICRjb29raWVEb21haW4gfHwgJGRvbWFpbiA9PT0gJGNvb2tpZURvbWFpbikgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoaW5nIHRoZSBzdWJkb21haW4gYWNjb3JkaW5nIHRvIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjI2NSNzZWN0aW9uLTUuMS4zCiAgICAgICAgaWYgKFxmaWx0ZXJfdmFyKCRkb21haW4sIFxGSUxURVJfVkFMSURBVEVfSVApKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoYm9vbCkgXHByZWdfbWF0Y2goJy9cLicuXHByZWdfcXVvdGUoJGNvb2tpZURvbWFpbiwgJy8nKS4nJC8nLCAkZG9tYWluKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgaXMgZXhwaXJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRXhwaXJlZCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRFeHBpcmVzKCkgIT09IG51bGwgJiYgXHRpbWUoKSA+ICR0aGlzLT5nZXRFeHBpcmVzKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIGlzIHZhbGlkIGFjY29yZGluZyB0byBSRkMgNjI2NS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8c3RyaW5nIFJldHVybnMgdHJ1ZSBpZiB2YWxpZCBvciBhbiBlcnJvciBtZXNzYWdlIGlmIGludmFsaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKCkKICAgIHsKICAgICAgICAkbmFtZSA9ICR0aGlzLT5nZXROYW1lKCk7CiAgICAgICAgaWYgKCRuYW1lID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSc7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBhbnkgb2YgdGhlIGludmFsaWQgY2hhcmFjdGVycyBhcmUgcHJlc2VudCBpbiB0aGUgY29va2llIG5hbWUKICAgICAgICBpZiAoXHByZWdfbWF0Y2goCiAgICAgICAgICAgICcvW1x4MDAtXHgyMFx4MjJceDI4LVx4MjlceDJjXHgyZlx4M2EtXHg0MFx4NWNceDdiXHg3ZFx4N2ZdLycsCiAgICAgICAgICAgICRuYW1lCiAgICAgICAgKSkgewogICAgICAgICAgICByZXR1cm4gJ0Nvb2tpZSBuYW1lIG11c3Qgbm90IGNvbnRhaW4gaW52YWxpZCBjaGFyYWN0ZXJzOiBBU0NJSSAnCiAgICAgICAgICAgICAgICAuJ0NvbnRyb2wgY2hhcmFjdGVycyAoMC0zMTsxMjcpLCBzcGFjZSwgdGFiIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgLidmb2xsb3dpbmcgY2hhcmFjdGVyczogKCk8PkAsOzpcIi8/PXt9JzsKICAgICAgICB9CgogICAgICAgIC8vIFZhbHVlIG11c3Qgbm90IGJlIG51bGwuIDAgYW5kIGVtcHR5IHN0cmluZyBhcmUgdmFsaWQuIEVtcHR5IHN0cmluZ3MKICAgICAgICAvLyBhcmUgdGVjaG5pY2FsbHkgYWdhaW5zdCBSRkMgNjI2NSwgYnV0IGtub3duIHRvIGhhcHBlbiBpbiB0aGUgd2lsZC4KICAgICAgICAkdmFsdWUgPSAkdGhpcy0+Z2V0VmFsdWUoKTsKICAgICAgICBpZiAoJHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAnVGhlIGNvb2tpZSB2YWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSc7CiAgICAgICAgfQoKICAgICAgICAvLyBEb21haW5zIG11c3Qgbm90IGJlIGVtcHR5LCBidXQgbWF5IGJlIG9taXR0ZWQuICIwIiBpcyBub3QgYSB2YWxpZAogICAgICAgIC8vIGludGVybmV0IGRvbWFpbiwgYnV0IG1heSBiZSB1c2VkIGFzIHNlcnZlciBuYW1lIGluIGEgcHJpdmF0ZSBuZXR3b3JrLgogICAgICAgICRkb21haW4gPSAkdGhpcy0+Z2V0RG9tYWluKCk7CiAgICAgICAgaWYgKCRkb21haW4gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAnVGhlIGNvb2tpZSBkb21haW4gbXVzdCBub3QgYmUgZW1wdHknOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGFuIEhUVFAgZXJyb3Igb2NjdXJzICg0eHggb3IgNXh4IGVycm9yKQogKi8KY2xhc3MgQmFkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBSZXF1ZXN0RXhjZXB0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsCiAgICAgICAgP1xUaHJvd2FibGUgJHByZXZpb3VzID0gbnVsbCwKICAgICAgICBhcnJheSAkaGFuZGxlckNvbnRleHQgPSBbXQogICAgKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJHJlcXVlc3QsICRyZXNwb25zZSwgJHByZXZpb3VzLCAkaGFuZGxlckNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3VycmVudCBleGNlcHRpb24gYW5kIHRoZSBvbmVzIHRoYXQgZXh0ZW5kIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSByZXNwb25zZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Jlc3BvbnNlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gbmFycm93cyB0aGUgcmV0dXJuIHR5cGUgZnJvbSB0aGUgcGFyZW50IGNsYXNzIGFuZCBkb2VzIG5vdCBhbGxvdyBpdCB0byBiZSBudWxsYWJsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLyoqIEB2YXIgUmVzcG9uc2VJbnRlcmZhY2UgKi8KICAgICAgICByZXR1cm4gcGFyZW50OjpnZXRSZXNwb25zZSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCi8qKgogKiBFeGNlcHRpb24gd2hlbiBhIGNsaWVudCBlcnJvciBpcyBlbmNvdW50ZXJlZCAoNHh4IGNvZGVzKQogKi8KY2xhc3MgQ2xpZW50RXhjZXB0aW9uIGV4dGVuZHMgQmFkUmVzcG9uc2VFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxDbGllbnRcTmV0d29ya0V4Y2VwdGlvbkludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4KICovCmNsYXNzIENvbm5lY3RFeGNlcHRpb24gZXh0ZW5kcyBUcmFuc2ZlckV4Y2VwdGlvbiBpbXBsZW1lbnRzIE5ldHdvcmtFeGNlcHRpb25JbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkaGFuZGxlckNvbnRleHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIHN0cmluZyAkbWVzc2FnZSwKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgID9cVGhyb3dhYmxlICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10KICAgICkgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsIDAsICRwcmV2aW91cyk7CiAgICAgICAgJHRoaXMtPnJlcXVlc3QgPSAkcmVxdWVzdDsKICAgICAgICAkdGhpcy0+aGFuZGxlckNvbnRleHQgPSAkaGFuZGxlckNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGZyb20gdGhlIHVuZGVybHlpbmcgaGFuZGxlci4KICAgICAqCiAgICAgKiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHdoaWNoIGhhbmRsZXIgeW91IGFyZQogICAgICogdXNpbmcuIEl0IG1heSBhbHNvIGJlIGp1c3QgYW4gZW1wdHkgYXJyYXkuIFJlbHlpbmcgb24gdGhpcyBkYXRhIHdpbGwKICAgICAqIGNvdXBsZSB5b3UgdG8gYSBzcGVjaWZpYyBoYW5kbGVyLCBidXQgY2FuIGdpdmUgbW9yZSBkZWJ1ZyBpbmZvcm1hdGlvbgogICAgICogd2hlbiBuZWVkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyQ29udGV4dCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFuZGxlckNvbnRleHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBQc3JcSHR0cFxDbGllbnRcQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlOwoKaW50ZXJmYWNlIEd1enpsZUV4Y2VwdGlvbiBleHRlbmRzIENsaWVudEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCnVzZSBHdXp6bGVIdHRwXEJvZHlTdW1tYXJpemVyOwp1c2UgR3V6emxlSHR0cFxCb2R5U3VtbWFyaXplckludGVyZmFjZTsKdXNlIFBzclxIdHRwXENsaWVudFxSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBIVFRQIFJlcXVlc3QgZXhjZXB0aW9uCiAqLwpjbGFzcyBSZXF1ZXN0RXhjZXB0aW9uIGV4dGVuZHMgVHJhbnNmZXJFeGNlcHRpb24gaW1wbGVtZW50cyBSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0SW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJlcXVlc3Q7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGhhbmRsZXJDb250ZXh0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICA/XFRocm93YWJsZSAkcHJldmlvdXMgPSBudWxsLAogICAgICAgIGFycmF5ICRoYW5kbGVyQ29udGV4dCA9IFtdCiAgICApIHsKICAgICAgICAvLyBTZXQgdGhlIGNvZGUgb2YgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzcG9uc2UgaXMgc2V0IGFuZCBub3QgZnV0dXJlLgogICAgICAgICRjb2RlID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAwOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwogICAgICAgICR0aGlzLT5yZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICAgICAgJHRoaXMtPnJlc3BvbnNlID0gJHJlc3BvbnNlOwogICAgICAgICR0aGlzLT5oYW5kbGVyQ29udGV4dCA9ICRoYW5kbGVyQ29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIFdyYXAgbm9uLVJlcXVlc3RFeGNlcHRpb25zIHdpdGggYSBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgc2luY2UgNy4xMS4gQ3JlYXRlIGEgUmVxdWVzdEV4Y2VwdGlvbiBkaXJlY3RseSBpbnN0ZWFkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBFeGNlcHRpb24oUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgXFRocm93YWJsZSAkZSk6IFJlcXVlc3RFeGNlcHRpb24KICAgIHsKICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy4xMScsICclczo6d3JhcEV4Y2VwdGlvbigpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LjAuIENyZWF0ZSBhICVzIGRpcmVjdGx5IGluc3RlYWQuJywgc2VsZjo6Y2xhc3MsIHNlbGY6OmNsYXNzKTsKCiAgICAgICAgcmV0dXJuICRlIGluc3RhbmNlb2YgUmVxdWVzdEV4Y2VwdGlvbiA/ICRlIDogbmV3IFJlcXVlc3RFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgJHJlcXVlc3QsIG51bGwsICRlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBleGNlcHRpb24gd2l0aCBhIG5vcm1hbGl6ZWQgZXJyb3IgbWVzc2FnZQogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICAgICAgICAgICAgICRyZXF1ZXN0ICAgICAgICBSZXF1ZXN0IHNlbnQKICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAgICAgICAgICAgICRyZXNwb25zZSAgICAgICBSZXNwb25zZSByZWNlaXZlZAogICAgICogQHBhcmFtIFxUaHJvd2FibGV8bnVsbCAgICAgICAgICAgICAgJHByZXZpb3VzICAgICAgIFByZXZpb3VzIGV4Y2VwdGlvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgJGhhbmRsZXJDb250ZXh0IE9wdGlvbmFsIGhhbmRsZXIgY29udGV4dAogICAgICogQHBhcmFtIEJvZHlTdW1tYXJpemVySW50ZXJmYWNlfG51bGwgJGJvZHlTdW1tYXJpemVyIE9wdGlvbmFsIGJvZHkgc3VtbWFyaXplcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgID9SZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgID9cVGhyb3dhYmxlICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10sCiAgICAgICAgP0JvZHlTdW1tYXJpemVySW50ZXJmYWNlICRib2R5U3VtbWFyaXplciA9IG51bGwKICAgICk6IHNlbGYgewogICAgICAgIGlmICghJHJlc3BvbnNlKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgICAgICdFcnJvciBjb21wbGV0aW5nIHJlcXVlc3QnLAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgJHByZXZpb3VzLAogICAgICAgICAgICAgICAgJGhhbmRsZXJDb250ZXh0CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkbGV2ZWwgPSAoaW50KSBcZmxvb3IoJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgLyAxMDApOwogICAgICAgIGlmICgkbGV2ZWwgPT09IDQpIHsKICAgICAgICAgICAgJGxhYmVsID0gJ0NsaWVudCBlcnJvcic7CiAgICAgICAgICAgICRjbGFzc05hbWUgPSBDbGllbnRFeGNlcHRpb246OmNsYXNzOwogICAgICAgIH0gZWxzZWlmICgkbGV2ZWwgPT09IDUpIHsKICAgICAgICAgICAgJGxhYmVsID0gJ1NlcnZlciBlcnJvcic7CiAgICAgICAgICAgICRjbGFzc05hbWUgPSBTZXJ2ZXJFeGNlcHRpb246OmNsYXNzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdVbnN1Y2Nlc3NmdWwgcmVxdWVzdCc7CiAgICAgICAgICAgICRjbGFzc05hbWUgPSBfX0NMQVNTX187CiAgICAgICAgfQoKICAgICAgICAkdXJpID0gXEd1enpsZUh0dHBcUHNyN1xVdGlsczo6cmVkYWN0VXNlckluZm8oJHJlcXVlc3QtPmdldFVyaSgpKTsKCiAgICAgICAgLy8gQ2xpZW50IEVycm9yOiBgR0VUIC9gIHJlc3VsdGVkIGluIGEgYDQwNCBOb3QgRm91bmRgIHJlc3BvbnNlOgogICAgICAgIC8vIDxodG1sPiAuLi4gKHRydW5jYXRlZCkKICAgICAgICAkbWVzc2FnZSA9IFxzcHJpbnRmKAogICAgICAgICAgICAnJXM6IGAlcyAlc2AgcmVzdWx0ZWQgaW4gYSBgJXMgJXNgIHJlc3BvbnNlJywKICAgICAgICAgICAgJGxhYmVsLAogICAgICAgICAgICAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICR1cmktPl9fdG9TdHJpbmcoKSwKICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCksCiAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0UmVhc29uUGhyYXNlKCkKICAgICAgICApOwoKICAgICAgICAkc3VtbWFyeSA9ICgkYm9keVN1bW1hcml6ZXIgPz8gbmV3IEJvZHlTdW1tYXJpemVyKCkpLT5zdW1tYXJpemUoJHJlc3BvbnNlKTsKCiAgICAgICAgaWYgKCRzdW1tYXJ5ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICI6XG57JHN1bW1hcnl9XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyAkY2xhc3NOYW1lKCRtZXNzYWdlLCAkcmVxdWVzdCwgJHJlc3BvbnNlLCAkcHJldmlvdXMsICRoYW5kbGVyQ29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBhc3NvY2lhdGVkIHJlc3BvbnNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNwb25zZSgpOiA/UmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Jlc3BvbnNlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlICE9PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGZyb20gdGhlIHVuZGVybHlpbmcgaGFuZGxlci4KICAgICAqCiAgICAgKiBUaGUgY29udGVudHMgb2YgdGhpcyBhcnJheSB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHdoaWNoIGhhbmRsZXIgeW91IGFyZQogICAgICogdXNpbmcuIEl0IG1heSBhbHNvIGJlIGp1c3QgYW4gZW1wdHkgYXJyYXkuIFJlbHlpbmcgb24gdGhpcyBkYXRhIHdpbGwKICAgICAqIGNvdXBsZSB5b3UgdG8gYSBzcGVjaWZpYyBoYW5kbGVyLCBidXQgY2FuIGdpdmUgbW9yZSBkZWJ1ZyBpbmZvcm1hdGlvbgogICAgICogd2hlbiBuZWVkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyQ29udGV4dCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFuZGxlckNvbnRleHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCi8qKgogKiBFeGNlcHRpb24gd2hlbiBhIHNlcnZlciBlcnJvciBpcyBlbmNvdW50ZXJlZCAoNXh4IGNvZGVzKQogKi8KY2xhc3MgU2VydmVyRXhjZXB0aW9uIGV4dGVuZHMgQmFkUmVzcG9uc2VFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmNsYXNzIFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24gZXh0ZW5kcyBSZXF1ZXN0RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEV4Y2VwdGlvbjsKCmNsYXNzIFRyYW5zZmVyRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKLyoqCiAqIERlYnVnIGZ1bmN0aW9uIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHByb3ZpZGVkIHZhbHVlIHR5cGUgYW5kIGNsYXNzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGlucHV0IEFueSB0eXBlIG9mIHZhcmlhYmxlIHRvIGRlc2NyaWJlIHRoZSB0eXBlIG9mLiBUaGlzCiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG1pc3NlcyBhIHR5cGVoaW50IGJlY2F1c2Ugb2YgdGhhdC4KICoKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSBhbmQKICogICAgICAgICAgICAgICAgaWYgYSBjbGFzcyBpcyBwcm92aWRlZCwgdGhlIGNsYXNzIG5hbWUuCiAqCiAqIEBkZXByZWNhdGVkIGRlc2NyaWJlX3R5cGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIGdldF9kZWJ1Z190eXBlKCkgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGRlc2NyaWJlX3R5cGUoJGlucHV0KTogc3RyaW5nCnsKICAgIHJldHVybiBVdGlsczo6ZGVzY3JpYmVUeXBlKCRpbnB1dCk7Cn0KCi8qKgogKiBQYXJzZXMgYW4gYXJyYXkgb2YgaGVhZGVyIGxpbmVzIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaGVhZGVycy4KICoKICogQHBhcmFtIGl0ZXJhYmxlICRsaW5lcyBIZWFkZXIgbGluZXMgYXJyYXkgb2Ygc3RyaW5ncyBpbiB0aGUgZm9sbG93aW5nCiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAiTmFtZTogVmFsdWUiCiAqCiAqIEBkZXByZWNhdGVkIGhlYWRlcnNfZnJvbV9saW5lcyB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLiBVc2UgVXRpbHM6OmhlYWRlcnNGcm9tTGluZXMgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGhlYWRlcnNfZnJvbV9saW5lcyhpdGVyYWJsZSAkbGluZXMpOiBhcnJheQp7CiAgICByZXR1cm4gVXRpbHM6OmhlYWRlcnNGcm9tTGluZXMoJGxpbmVzKTsKfQoKLyoqCiAqIFJldHVybnMgYSBkZWJ1ZyBzdHJlYW0gYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIE9wdGlvbmFsIHZhbHVlCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UKICoKICogQGRlcHJlY2F0ZWQgZGVidWdfcmVzb3VyY2Ugd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpkZWJ1Z1Jlc291cmNlIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBkZWJ1Z19yZXNvdXJjZSgkdmFsdWUgPSBudWxsKQp7CiAgICByZXR1cm4gVXRpbHM6OmRlYnVnUmVzb3VyY2UoJHZhbHVlKTsKfQoKLyoqCiAqIENob29zZXMgYW5kIGNyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgdG8gdXNlIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4KICoKICogVGhlIHJldHVybmVkIGhhbmRsZXIgaXMgbm90IHdyYXBwZWQgYnkgYW55IGRlZmF1bHQgbWlkZGxld2FyZXMuCiAqCiAqIEByZXR1cm4gY2FsbGFibGUoXFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgUmV0dXJucyB0aGUgYmVzdCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc3lzdGVtLgogKgogKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIG5vIHZpYWJsZSBIYW5kbGVyIGlzIGF2YWlsYWJsZS4KICoKICogQGRlcHJlY2F0ZWQgY2hvb3NlX2hhbmRsZXIgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpjaG9vc2VIYW5kbGVyIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBjaG9vc2VfaGFuZGxlcigpOiBjYWxsYWJsZQp7CiAgICByZXR1cm4gVXRpbHM6OmNob29zZUhhbmRsZXIoKTsKfQoKLyoqCiAqIEdldCB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZyB0byB1c2Ugd2l0aCBHdXp6bGUuCiAqCiAqIEBkZXByZWNhdGVkIGRlZmF1bHRfdXNlcl9hZ2VudCB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLiBVc2UgVXRpbHM6OmRlZmF1bHRVc2VyQWdlbnQgaW5zdGVhZC4KICovCmZ1bmN0aW9uIGRlZmF1bHRfdXNlcl9hZ2VudCgpOiBzdHJpbmcKewogICAgcmV0dXJuIFV0aWxzOjpkZWZhdWx0VXNlckFnZW50KCk7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNhY2VydCBidW5kbGUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4KICoKICogRmlyc3QsIHRoZSBvcGVuc3NsLmNhZmlsZSBhbmQgY3VybC5jYWluZm8gcGhwLmluaSBzZXR0aW5ncyBhcmUgY2hlY2tlZC4KICogSWYgdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBjb21tb24gbG9jYXRpb25zIGZvcgogKiBidW5kbGVzIGZvdW5kIG9uIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgRnJlZUJTRCwgT1MgWAogKiBhbmQgV2luZG93cyBhcmUgY2hlY2tlZC4gSWYgYW55IG9mIHRoZXNlIGZpbGUgbG9jYXRpb25zIGFyZSBmb3VuZCBvbgogKiBkaXNrLCB0aGV5IHdpbGwgYmUgdXRpbGl6ZWQuCiAqCiAqIE5vdGU6IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCiAqCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgbm8gYnVuZGxlIGNhbiBiZSBmb3VuZC4KICoKICogQGRlcHJlY2F0ZWQgZGVmYXVsdF9jYV9idW5kbGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgbmVlZGVkIGluIFBIUCA1LjYrLgogKi8KZnVuY3Rpb24gZGVmYXVsdF9jYV9idW5kbGUoKTogc3RyaW5nCnsKICAgIHJldHVybiBVdGlsczo6ZGVmYXVsdENhQnVuZGxlKCk7Cn0KCi8qKgogKiBDcmVhdGVzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgdG8gdGhlIGFjdHVhbAogKiBoZWFkZXIgY2FzaW5nLgogKgogKiBAZGVwcmVjYXRlZCBub3JtYWxpemVfaGVhZGVyX2tleXMgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpub3JtYWxpemVIZWFkZXJLZXlzIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBub3JtYWxpemVfaGVhZGVyX2tleXMoYXJyYXkgJGhlYWRlcnMpOiBhcnJheQp7CiAgICByZXR1cm4gVXRpbHM6Om5vcm1hbGl6ZUhlYWRlcktleXMoJGhlYWRlcnMpOwp9CgovKioKICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBob3N0IG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICoKICogVGhpcyBtZXRob2Qgd2lsbCBzdHJpcCBhIHBvcnQgZnJvbSB0aGUgaG9zdCBpZiBpdCBpcyBwcmVzZW50LiBFYWNoIHBhdHRlcm4KICogY2FuIGJlIG1hdGNoZWQgd2l0aCBhbiBleGFjdCBtYXRjaCAoZS5nLiwgImZvby5jb20iID09ICJmb28uY29tIikgb3IgYQogKiBwYXJ0aWFsIG1hdGNoOiAoZS5nLiwgImZvby5jb20iID09ICJiYXouZm9vLmNvbSIgYW5kICIuZm9vLmNvbSIgPT0KICogImJhei5mb28uY29tIiwgYnV0ICIuZm9vLmNvbSIgIT0gImZvby5jb20iKS4KICoKICogQXJlYXMgYXJlIG1hdGNoZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKICogMS4gIioiICh3aXRob3V0IHF1b3RlcykgYWx3YXlzIG1hdGNoZXMgYW55IGhvc3RzLgogKiAyLiBBbiBleGFjdCBtYXRjaC4KICogMy4gVGhlIGFyZWEgc3RhcnRzIHdpdGggIi4iIGFuZCB0aGUgYXJlYSBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBob3N0LiBlLmcuCiAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogKgogKiBAcGFyYW0gc3RyaW5nICAgJGhvc3QgICAgICAgICBIb3N0IHRvIGNoZWNrIGFnYWluc3QgdGhlIHBhdHRlcm5zLgogKiBAcGFyYW0gc3RyaW5nW10gJG5vUHJveHlBcnJheSBBbiBhcnJheSBvZiBob3N0IHBhdHRlcm5zLgogKgogKiBAdGhyb3dzIEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICoKICogQGRlcHJlY2F0ZWQgaXNfaG9zdF9pbl9ub3Byb3h5IHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuIFVzZSBVdGlsczo6aXNIb3N0SW5Ob1Byb3h5IGluc3RlYWQuCiAqLwpmdW5jdGlvbiBpc19ob3N0X2luX25vcHJveHkoc3RyaW5nICRob3N0LCBhcnJheSAkbm9Qcm94eUFycmF5KTogYm9vbAp7CiAgICByZXR1cm4gVXRpbHM6OmlzSG9zdEluTm9Qcm94eSgkaG9zdCwgJG5vUHJveHlBcnJheSk7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBqc29uX2RlY29kZSB0aGF0IHRocm93cyB3aGVuIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtIHN0cmluZyAkanNvbiAgICBKU09OIGRhdGEgdG8gcGFyc2UKICogQHBhcmFtIGJvb2wgICAkYXNzb2MgICBXaGVuIHRydWUsIHJldHVybmVkIG9iamVjdHMgd2lsbCBiZSBjb252ZXJ0ZWQKICogICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFzc29jaWF0aXZlIGFycmF5cy4KICogQHBhcmFtIGludCAgICAkZGVwdGggICBVc2VyIHNwZWNpZmllZCByZWN1cnNpb24gZGVwdGguCiAqIEBwYXJhbSBpbnQgICAgJG9wdGlvbnMgQml0bWFzayBvZiBKU09OIGRlY29kZSBvcHRpb25zLgogKgogKiBAcmV0dXJuIG9iamVjdHxhcnJheXxzdHJpbmd8aW50fGZsb2F0fGJvb2x8bnVsbAogKgogKiBAdGhyb3dzIEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEpTT04gY2Fubm90IGJlIGRlY29kZWQuCiAqCiAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uanNvbi1kZWNvZGUucGhwCiAqIEBkZXByZWNhdGVkIGpzb25fZGVjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBndXp6bGVodHRwL2d1enpsZTo4LjAuIFVzZSBVdGlsczo6anNvbkRlY29kZSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24ganNvbl9kZWNvZGUoc3RyaW5nICRqc29uLCBib29sICRhc3NvYyA9IGZhbHNlLCBpbnQgJGRlcHRoID0gNTEyLCBpbnQgJG9wdGlvbnMgPSAwKQp7CiAgICByZXR1cm4gVXRpbHM6Ompzb25EZWNvZGUoJGpzb24sICRhc3NvYywgJGRlcHRoLCAkb3B0aW9ucyk7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBKU09OIGVuY29kaW5nIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVGhlIHZhbHVlIGJlaW5nIGVuY29kZWQKICogQHBhcmFtIGludCAgICRvcHRpb25zIEpTT04gZW5jb2RlIG9wdGlvbiBiaXRtYXNrCiAqIEBwYXJhbSBpbnQgICAkZGVwdGggICBTZXQgdGhlIG1heGltdW0gZGVwdGguIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCiAqCiAqIEB0aHJvd3MgRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZW5jb2RlZC4KICoKICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5qc29uLWVuY29kZS5waHAKICogQGRlcHJlY2F0ZWQganNvbl9lbmNvZGUgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIFV0aWxzOjpqc29uRW5jb2RlIGluc3RlYWQuCiAqLwpmdW5jdGlvbiBqc29uX2VuY29kZSgkdmFsdWUsIGludCAkb3B0aW9ucyA9IDAsIGludCAkZGVwdGggPSA1MTIpOiBzdHJpbmcKewogICAgcmV0dXJuIFV0aWxzOjpqc29uRW5jb2RlKCR2YWx1ZSwgJG9wdGlvbnMsICRkZXB0aCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions_include.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghXGZ1bmN0aW9uX2V4aXN0cygnR3V6emxlSHR0cFxkZXNjcmliZV90eXBlJykpIHsKICAgIHJlcXVpcmUgX19ESVJfXy4nL2Z1bmN0aW9ucy5waHAnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBHdXp6bGVIdHRwXFBzcjdcTGF6eU9wZW5TdHJlYW07CnVzZSBHdXp6bGVIdHRwXFBzcjdcVXJpOwp1c2UgR3V6emxlSHR0cFxUcmFuc2ZlclN0YXRzOwp1c2UgR3V6emxlSHR0cFxUcmFuc3BvcnRTaGFyaW5nOwp1c2UgR3V6emxlSHR0cFxVdGlsczsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIENyZWF0ZXMgY3VybCByZXNvdXJjZXMgZnJvbSBhIHJlcXVlc3QKICoKICogQGZpbmFsCiAqLwpjbGFzcyBDdXJsRmFjdG9yeSBpbXBsZW1lbnRzIEN1cmxGYWN0b3J5SW50ZXJmYWNlCnsKICAgIHB1YmxpYyBjb25zdCBDVVJMX1ZFUlNJT05fU1RSID0gJ2N1cmxfdmVyc2lvbic7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgTE9XX0NVUkxfVkVSU0lPTl9OVU1CRVIgPSAnNy4yMS4yJzsKCiAgICAvKioKICAgICAqIEB2YXIgcmVzb3VyY2VbXXxcQ3VybEhhbmRsZVtdCiAgICAgKi8KICAgIHByaXZhdGUgJGhhbmRsZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFRvdGFsIG51bWJlciBvZiBpZGxlIGhhbmRsZXMgdG8ga2VlcCBpbiBjYWNoZQogICAgICovCiAgICBwcml2YXRlICRtYXhIYW5kbGVzOwoKICAgIC8qKgogICAgICogQHZhciByZXNvdXJjZXxcQ3VybFNoYXJlSGFuZGxlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkc2hhcmVIYW5kbGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRzaGFyZU1vZGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXhIYW5kbGVzICBNYXhpbXVtIG51bWJlciBvZiBpZGxlIGhhbmRsZXMuCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8XEN1cmxTaGFyZUhhbmRsZXxudWxsICRzaGFyZUhhbmRsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRtYXhIYW5kbGVzLCBzdHJpbmcgJHNoYXJlTW9kZSA9IFRyYW5zcG9ydFNoYXJpbmc6Ok5PTkUsICRzaGFyZUhhbmRsZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm1heEhhbmRsZXMgPSAkbWF4SGFuZGxlczsKICAgICAgICAkdGhpcy0+c2hhcmVNb2RlID0gQ3VybFNoYXJlSGFuZGxlU3RhdGU6Om5vcm1hbGl6ZU1vZGUoJHNoYXJlTW9kZSwgJ3RyYW5zcG9ydF9zaGFyaW5nJyk7CgogICAgICAgIGlmICgkdGhpcy0+c2hhcmVNb2RlID09PSBUcmFuc3BvcnRTaGFyaW5nOjpOT05FICYmICRzaGFyZUhhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQSBjVVJMIHNoYXJlIGhhbmRsZSBjYW5ub3QgYmUgcHJvdmlkZWQgd2hlbiB0cmFuc3BvcnQgc2hhcmluZyBpcyBkaXNhYmxlZC4nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+c2hhcmVNb2RlICE9PSBUcmFuc3BvcnRTaGFyaW5nOjpOT05FICYmICRzaGFyZUhhbmRsZSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQSBjVVJMIHNoYXJlIGhhbmRsZSBpcyByZXF1aXJlZCB3aGVuIHRyYW5zcG9ydCBzaGFyaW5nIGlzIGVuYWJsZWQuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNoYXJlSGFuZGxlICE9PSBudWxsICYmICFzZWxmOjppc0N1cmxTaGFyZUhhbmRsZSgkc2hhcmVIYW5kbGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdBIGNVUkwgc2hhcmUgaGFuZGxlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgQ3VybFNoYXJlSGFuZGxlIG9yIGEgY3VybF9zaGFyZSByZXNvdXJjZS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zaGFyZUhhbmRsZSA9ICRzaGFyZUhhbmRsZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNDdXJsU2hhcmVIYW5kbGUoJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICByZXR1cm4gXGlzX3Jlc291cmNlKCR2YWx1ZSkgJiYgXGdldF9yZXNvdXJjZV90eXBlKCR2YWx1ZSkgPT09ICdjdXJsX3NoYXJlJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWUgaW5zdGFuY2VvZiBcQ3VybFNoYXJlSGFuZGxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBFYXN5SGFuZGxlCiAgICB7CiAgICAgICAgJHByb3RvY29sVmVyc2lvbiA9ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAgICAgaWYgKCcnID09PSAkcHJvdG9jb2xWZXJzaW9uKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjExJywgJ1NlbmRpbmcgYSByZXF1ZXN0IHdpdGggYW4gZW1wdHkgcHJvdG9jb2wgdmVyc2lvbiBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL2d1enpsZSA4LjAgd2lsbCByZWplY3QgZW1wdHkgcHJvdG9jb2wgdmVyc2lvbnMuJyk7CgogICAgICAgICAgICAkcHJvdG9jb2xWZXJzaW9uID0gJzEuMSc7CiAgICAgICAgICAgICRyZXF1ZXN0ID0gUHNyN1xVdGlsczo6bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgWyd2ZXJzaW9uJyA9PiAkcHJvdG9jb2xWZXJzaW9uXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJzInID09PSAkcHJvdG9jb2xWZXJzaW9uIHx8ICcyLjAnID09PSAkcHJvdG9jb2xWZXJzaW9uKSB7CiAgICAgICAgICAgIGlmICghQ3VybFZlcnNpb246OnN1cHBvcnRzSHR0cDIoKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3RFeGNlcHRpb24oJ0hUVFAvMiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNVUkwgaGFuZGxlciwgaG93ZXZlciBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgSFRUUC8yIHN1cHBvcnQuJywgJHJlcXVlc3QpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCcxLjAnICE9PSAkcHJvdG9jb2xWZXJzaW9uICYmICcxLjEnICE9PSAkcHJvdG9jb2xWZXJzaW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0RXhjZXB0aW9uKHNwcmludGYoJ0hUVFAvJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY1VSTCBoYW5kbGVyLicsICRwcm90b2NvbFZlcnNpb24pLCAkcmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ19ib2R5X2FzX3N0cmluZyddID0gJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2N1cmwnXVsnYm9keV9hc19zdHJpbmcnXSk7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjp0cmlnZ2VyVW5zdXBwb3J0ZWRSZXF1ZXN0T3B0aW9uRGVwcmVjYXRpb25zKCRvcHRpb25zKTsKICAgICAgICAkdGhpcy0+cmVqZWN0UmVxdWVzdExldmVsU2hhcmVDb25mbGljdCgkb3B0aW9ucyk7CiAgICAgICAgc2VsZjo6dHJpZ2dlclVuc3VwcG9ydGVkQ3VybE9wdGlvbkRlcHJlY2F0aW9ucygkb3B0aW9ucyk7CiAgICAgICAgc2VsZjo6dHJpZ2dlckNvbmZsaWN0aW5nQ3VybE9wdGlvbkRlcHJlY2F0aW9ucygkb3B0aW9ucyk7CgogICAgICAgICRlYXN5ID0gbmV3IEVhc3lIYW5kbGUoKTsKICAgICAgICAkZWFzeS0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICRlYXN5LT5vcHRpb25zID0gJG9wdGlvbnM7CiAgICAgICAgJGNvbmYgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbmYoJGVhc3kpOwogICAgICAgICR0aGlzLT5hcHBseU1ldGhvZCgkZWFzeSwgJGNvbmYpOwogICAgICAgICR0aGlzLT5hcHBseUhhbmRsZXJPcHRpb25zKCRlYXN5LCAkY29uZik7CiAgICAgICAgJHRoaXMtPmFwcGx5SGVhZGVycygkZWFzeSwgJGNvbmYpOwogICAgICAgIHVuc2V0KCRjb25mWydfaGVhZGVycyddKTsKCiAgICAgICAgLy8gQWRkIGhhbmRsZXIgb3B0aW9ucyBmcm9tIHRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY3VybCddKSkgewogICAgICAgICAgICAkY29uZiA9IFxhcnJheV9yZXBsYWNlKCRjb25mLCAkb3B0aW9uc1snY3VybCddKTsKICAgICAgICB9CgogICAgICAgICRlYXN5LT5lZmZlY3RpdmVQcm94eSA9IHNlbGY6OmdldEVmZmVjdGl2ZVByb3h5KCRjb25mKTsKCiAgICAgICAgJGNvbmZbXENVUkxPUFRfSEVBREVSRlVOQ1RJT05dID0gJHRoaXMtPmNyZWF0ZUhlYWRlckZuKCRlYXN5KTsKICAgICAgICBpZiAoJHRoaXMtPnNoYXJlSGFuZGxlICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmICghXGRlZmluZWQoJ0NVUkxPUFRfU0hBUkUnKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBjb25maWd1cmVkIGNVUkwgc2hhcmUgaGFuZGxlIHJlcXVpcmVzIENVUkxPUFRfU0hBUkUsIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBpbnN0YWxsZWQgUEhQIGNVUkwgZXh0ZW5zaW9uLicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY29uZlsoaW50KSBcY29uc3RhbnQoJ0NVUkxPUFRfU0hBUkUnKV0gPSAkdGhpcy0+c2hhcmVIYW5kbGU7CiAgICAgICAgfQoKICAgICAgICAkaGFuZGxlID0gJHRoaXMtPmhhbmRsZXMgPyBcYXJyYXlfcG9wKCR0aGlzLT5oYW5kbGVzKSA6IFxjdXJsX2luaXQoKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRoYW5kbGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW4gbm90IGluaXRpYWxpemUgY1VSTCBoYW5kbGUuJyk7CiAgICAgICAgfQogICAgICAgICRlYXN5LT5oYW5kbGUgPSAkaGFuZGxlOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+YXBwbHlDdXJsT3B0aW9ucygkaGFuZGxlLCAkY29uZik7CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCAmJiBcaXNfcmVzb3VyY2UoJGhhbmRsZSkpIHsKICAgICAgICAgICAgICAgIFxjdXJsX2Nsb3NlKCRoYW5kbGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuc2V0KCRlYXN5LT5oYW5kbGUpOwoKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVhc3k7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8XEN1cmxIYW5kbGUgICAgICRoYW5kbGUKICAgICAqIEBwYXJhbSBhcnJheTxpbnR8c3RyaW5nLCBtaXhlZD4gJGNvbmYKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseUN1cmxPcHRpb25zKCRoYW5kbGUsIGFycmF5ICRjb25mKTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKCRjb25mIGFzICRvcHRpb24gPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghXGlzX2ludCgkb3B0aW9uKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgY1VSTCBvcHRpb24gJXMuJywKICAgICAgICAgICAgICAgICAgICBzZWxmOjpmb3JtYXRDdXJsT3B0aW9uKCRvcHRpb24pCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRzdWNjZXNzID0gY3VybF9zZXRvcHQoJGhhbmRsZSwgJG9wdGlvbiwgJHZhbHVlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgXHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gc2V0IGNVUkwgb3B0aW9uICVzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmZvcm1hdEN1cmxPcHRpb24oJG9wdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICRlLT5nZXRNZXNzYWdlKCkKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgJGUKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gc2V0IGNVUkwgb3B0aW9uICVzLicsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6Zm9ybWF0Q3VybE9wdGlvbigkb3B0aW9uKQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWplY3RSZXF1ZXN0TGV2ZWxTaGFyZUNvbmZsaWN0KGFycmF5ICRvcHRpb25zKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+c2hhcmVIYW5kbGUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAhXGRlZmluZWQoJ0NVUkxPUFRfU0hBUkUnKQogICAgICAgICAgICB8fCAhaXNzZXQoJG9wdGlvbnNbJ2N1cmwnXSkKICAgICAgICAgICAgfHwgIVxpc19hcnJheSgkb3B0aW9uc1snY3VybCddKQogICAgICAgICAgICB8fCAhXGFycmF5X2tleV9leGlzdHMoKGludCkgXGNvbnN0YW50KCdDVVJMT1BUX1NIQVJFJyksICRvcHRpb25zWydjdXJsJ10pCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgcmVxdWVzdC1sZXZlbCBDVVJMT1BUX1NIQVJFIGNVUkwgb3B0aW9uIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGNvbmZpZ3VyZWQgdHJhbnNwb3J0IHNoYXJpbmcuJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkb3B0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdEN1cmxPcHRpb24oJG9wdGlvbik6IHN0cmluZwogICAgewogICAgICAgIGlmICghXGlzX2ludCgkb3B0aW9uKSkgewogICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJyIlcyInLCAkb3B0aW9uKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyAkbmFtZXMgPSBudWxsOwoKICAgICAgICBpZiAobnVsbCA9PT0gJG5hbWVzKSB7CiAgICAgICAgICAgICRuYW1lcyA9IFtdOwogICAgICAgICAgICBmb3JlYWNoIChcZ2V0X2RlZmluZWRfY29uc3RhbnRzKHRydWUpWydjdXJsJ10gPz8gW10gYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAoXGlzX2ludCgkdmFsdWUpICYmIFxzdHJwb3MoJG5hbWUsICdDVVJMT1BUXycpID09PSAwICYmICFpc3NldCgkbmFtZXNbJHZhbHVlXSkpIHsKICAgICAgICAgICAgICAgICAgICAkbmFtZXNbJHZhbHVlXSA9ICRuYW1lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG5hbWVzWyRvcHRpb25dKSkgewogICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJyVzICglZCknLCAkbmFtZXNbJG9wdGlvbl0sICRvcHRpb24pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICRvcHRpb247CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdHJpZ2dlckNvbmZsaWN0aW5nQ3VybE9wdGlvbkRlcHJlY2F0aW9ucyhhcnJheSAkb3B0aW9ucyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydjdXJsJ10pIHx8ICFcaXNfYXJyYXkoJG9wdGlvbnNbJ2N1cmwnXSkgfHwgJG9wdGlvbnNbJ2N1cmwnXSA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGNvbmZsaWN0aW5nT3B0aW9ucyA9IHNlbGY6OmNvbmZsaWN0aW5nQ3VybE9wdGlvbnMoKTsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNbJ2N1cmwnXSBhcyAkb3B0aW9uID0+ICRfKSB7CiAgICAgICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJGNvbmZsaWN0aW5nT3B0aW9ucykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbmFtZSA9IHNlbGY6OmZvcm1hdEN1cmxPcHRpb24oJG9wdGlvbik7CiAgICAgICAgICAgICRyZXBsYWNlbWVudCA9ICRjb25mbGljdGluZ09wdGlvbnNbJG9wdGlvbl07CiAgICAgICAgICAgIGlmICgkcmVwbGFjZW1lbnQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICAgICAgICAgJzcuMTEnLAogICAgICAgICAgICAgICAgICAgIFxzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyBpbiB0aGUgImN1cmwiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCB0aGlzIG9wdGlvbiBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIEd1enpsZS1tYW5hZ2VkIHJlcXVlc3QgaGFuZGxpbmcuIFVzZSAlcyBpbnN0ZWFkLicsCiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAkcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICAgICAnNy4xMScsCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyBpbiB0aGUgImN1cmwiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCB0aGlzIG9wdGlvbiBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIEd1enpsZS1tYW5hZ2VkIGNVUkwgaW50ZXJuYWxzLicsCiAgICAgICAgICAgICAgICAgICAgJG5hbWUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdHJpZ2dlclVuc3VwcG9ydGVkQ3VybE9wdGlvbkRlcHJlY2F0aW9ucyhhcnJheSAkb3B0aW9ucyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydjdXJsJ10pIHx8ICFcaXNfYXJyYXkoJG9wdGlvbnNbJ2N1cmwnXSkgfHwgJG9wdGlvbnNbJ2N1cmwnXSA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHN1cHBvcnRlZE9wdGlvbnMgPSBzZWxmOjpzdXBwb3J0ZWRDdXJsT3B0aW9ucygpOwogICAgICAgICRjb25mbGljdGluZ09wdGlvbnMgPSBzZWxmOjpjb25mbGljdGluZ0N1cmxPcHRpb25zKCk7CgogICAgICAgIGZvcmVhY2ggKCRvcHRpb25zWydjdXJsJ10gYXMgJG9wdGlvbiA9PiAkXykgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhXGlzX2ludCgkb3B0aW9uKQogICAgICAgICAgICAgICAgfHwgXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJHN1cHBvcnRlZE9wdGlvbnMpCiAgICAgICAgICAgICAgICB8fCBcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkY29uZmxpY3RpbmdPcHRpb25zKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICAgICAnNy4xMicsCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyBpbiB0aGUgImN1cmwiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCByYXcgY1VSTCBvcHRpb25zIG91dHNpZGUgdGhlIGJ1aWx0LWluIGNVUkwgaGFuZGxlcnNcJyBhbGxvdy1saXN0LicsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6Zm9ybWF0Q3VybE9wdGlvbigkb3B0aW9uKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB0cmlnZ2VyVW5zdXBwb3J0ZWRSZXF1ZXN0T3B0aW9uRGVwcmVjYXRpb25zKGFycmF5ICRvcHRpb25zKTogdm9pZAogICAgewogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygnc3RyZWFtX2NvbnRleHQnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuMTEnLCAnUGFzc2luZyB0aGUgInN0cmVhbV9jb250ZXh0IiByZXF1ZXN0IG9wdGlvbiB0byBhIGNVUkwgaGFuZGxlciBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL2d1enpsZSA4LjAgd2lsbCByZWplY3QgdGhpcyBvcHRpb24gYmVjYXVzZSBjVVJMIGhhbmRsZXJzIGlnbm9yZSBQSFAgc3RyZWFtIGNvbnRleHQgb3B0aW9ucy4nKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgc3RyaW5nfG51bGw+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNvbmZsaWN0aW5nQ3VybE9wdGlvbnMoKTogYXJyYXkKICAgIHsKICAgICAgICBzdGF0aWMgJG9wdGlvbnMgPSBudWxsOwoKICAgICAgICBpZiAoJG9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgIH0KCiAgICAgICAgJG9wdGlvbnMgPSBbXTsKCiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9TSEFSRScsICd0aGUgInRyYW5zcG9ydF9zaGFyaW5nIiBjbGllbnQgb3B0aW9uIG9yIGNVUkwgaGFuZGxlciBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1VSTCcsICd0aGUgcmVxdWVzdCBVUkknKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1BPUlQnLCAndGhlIHJlcXVlc3QgVVJJJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DVVNUT01SRVFVRVNUJywgJ3RoZSByZXF1ZXN0IG1ldGhvZCcpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSFRUUEdFVCcsICd0aGUgcmVxdWVzdCBtZXRob2QnKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1BPU1QnLCAndGhlIHJlcXVlc3QgbWV0aG9kIGFuZCBib2R5Jyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9QVVQnLCAndGhlIHJlcXVlc3QgbWV0aG9kIGFuZCBib2R5Jyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9OT0JPRFknLCAndGhlIHJlcXVlc3QgbWV0aG9kJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9VUExPQUQnLCAndGhlIHJlcXVlc3QgYm9keScpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUE9TVEZJRUxEUycsICd0aGUgcmVxdWVzdCBib2R5Jyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9SRUFERlVOQ1RJT04nLCAndGhlIHJlcXVlc3QgYm9keScpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUkVBRERBVEEnLCAndGhlIHJlcXVlc3QgYm9keScpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSU5GSUxFJywgJ3RoZSByZXF1ZXN0IGJvZHknKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0lORklMRVNJWkUnLCAndGhlIHJlcXVlc3QgYm9keScpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSU5GSUxFU0laRV9MQVJHRScsICd0aGUgcmVxdWVzdCBib2R5Jyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9IVFRQSEVBREVSJywgJ3RoZSByZXF1ZXN0IGhlYWRlcnMnKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1VTRVJBR0VOVCcsICd0aGUgcmVxdWVzdCBoZWFkZXJzJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9SRUZFUkVSJywgJ3RoZSByZXF1ZXN0IGhlYWRlcnMnKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0hFQURFUkZVTkNUSU9OJywgJ3RoZSAib25faGVhZGVycyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1dSSVRFRlVOQ1RJT04nLCAndGhlICJzaW5rIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfRklMRScsICd0aGUgInNpbmsiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9USU1FT1VUJywgJ3RoZSAidGltZW91dCIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1RJTUVPVVRfTVMnLCAndGhlICJ0aW1lb3V0IiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfQ09OTkVDVFRJTUVPVVQnLCAndGhlICJjb25uZWN0X3RpbWVvdXQiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUycsICd0aGUgImNvbm5lY3RfdGltZW91dCIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX05PU0lHTkFMJywgJ3RoZSAidGltZW91dCIgb3IgImNvbm5lY3RfdGltZW91dCIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX05PUFJPR1JFU1MnLCAndGhlICJwcm9ncmVzcyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04nLCAndGhlICJwcm9ncmVzcyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04nLCAndGhlICJwcm9ncmVzcyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1ZFUkJPU0UnLCAndGhlICJkZWJ1ZyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1NUREVSUicsICd0aGUgImRlYnVnIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUFJPWFknLCAndGhlICJwcm94eSIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX05PUFJPWFknLCAndGhlICJwcm94eSIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OJywgJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfTUFYUkVESVJTJywgJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUE9TVFJFRElSJywgJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTJywgJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTX1NUUicsICd0aGUgImFsbG93X3JlZGlyZWN0cyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1BST1RPQ09MUycsICd0aGUgInByb3RvY29scyIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1BST1RPQ09MU19TVFInLCAndGhlICJwcm90b2NvbHMiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9IVFRQX1ZFUlNJT04nLCAndGhlIHJlcXVlc3QgcHJvdG9jb2wgdmVyc2lvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSVBSRVNPTFZFJywgJ3RoZSAiZm9yY2VfaXBfcmVzb2x2ZSIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1NTTF9WRVJJRllQRUVSJywgJ3RoZSAidmVyaWZ5IiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfU1NMX1ZFUklGWUhPU1QnLCAndGhlICJ2ZXJpZnkiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DQUlORk8nLCAndGhlICJ2ZXJpZnkiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DQVBBVEgnLCAndGhlICJ2ZXJpZnkiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9TU0xWRVJTSU9OJywgJ3RoZSAiY3J5cHRvX21ldGhvZCIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1NTTENFUlQnLCAndGhlICJjZXJ0IiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfU1NMQ0VSVFBBU1NXRCcsICd0aGUgImNlcnQiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9TU0xDRVJUVFlQRScsICd0aGUgImNlcnRfdHlwZSIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1NTTEtFWScsICd0aGUgInNzbF9rZXkiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9TU0xLRVlQQVNTV0QnLCAndGhlICJzc2xfa2V5IiByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfS0VZUEFTU1dEJywgJ3RoZSAic3NsX2tleSIgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1NTTEtFWVRZUEUnLCAndGhlICJzc2xfa2V5X3R5cGUiIHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DT09LSUUnLCAndGhlICJDb29raWUiIHJlcXVlc3QgaGVhZGVyIG9yIEd1enpsZSBjb29raWUgbWlkZGxld2FyZScpOwogICAgICAgIHNlbGY6OmFkZENvbmZsaWN0aW5nQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfQ09PS0lFRklMRScsICdHdXp6bGUgY29va2llIG1pZGRsZXdhcmUnKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0NPT0tJRUpBUicsICdHdXp6bGUgY29va2llIG1pZGRsZXdhcmUnKTsKICAgICAgICBzZWxmOjphZGRDb25mbGljdGluZ0N1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0NPT0tJRUxJU1QnLCAnR3V6emxlIGNvb2tpZSBtaWRkbGV3YXJlJyk7CiAgICAgICAgc2VsZjo6YWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9DT09LSUVTRVNTSU9OJywgJ0d1enpsZSBjb29raWUgbWlkZGxld2FyZScpOwoKICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgdHJ1ZT4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQ3VybE9wdGlvbnMoKTogYXJyYXkKICAgIHsKICAgICAgICBzdGF0aWMgJG9wdGlvbnMgPSBudWxsOwoKICAgICAgICBpZiAoJG9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgIH0KCiAgICAgICAgJG9wdGlvbnMgPSBbXTsKCiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfQUREUkVTU19TQ09QRScpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0NPTk5FQ1RfVE8nKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCcpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0ROU19JTlRFUkZBQ0UnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9ETlNfTE9DQUxfSVA0Jyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfRE5TX0xPQ0FMX0lQNicpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0ROU19TRVJWRVJTJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfRE5TX1NIVUZGTEVfQUREUkVTU0VTJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfRU5DT0RJTkcnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9GT1JCSURfUkVVU0UnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9GUkVTSF9DT05ORUNUJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUycpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX0hUVFBBVVRIJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSU5URVJGQUNFJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfTE9DQUxQT1JUJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfTE9DQUxQT1JUUkFOR0UnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9MT1dfU1BFRURfVElNRScpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX01BWEFHRV9DT05OJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfTUFYQ09OTkVDVFMnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9NQVhMSUZFVElNRV9DT05OJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfSFRUUFBST1hZVFVOTkVMJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfUFJPWFlIRUFERVInKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9QUk9YWVVTRVJQV0QnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9SRVNPTFZFJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfU1NMX0NJUEhFUl9MSVNUJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfU1NMX0VDX0NVUlZFUycpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1RDUF9GQVNUT1BFTicpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1RDUF9LRUVQQUxJVkUnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9UQ1BfS0VFUElETEUnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9UQ1BfS0VFUElOVFZMJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfVENQX0tFRVBDTlQnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9UQ1BfTk9ERUxBWScpOwogICAgICAgIHNlbGY6OmFkZFN1cHBvcnRlZEN1cmxPcHRpb24oJG9wdGlvbnMsICdDVVJMT1BUX1RMUzEzX0NJUEhFUlMnKTsKICAgICAgICBzZWxmOjphZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKCRvcHRpb25zLCAnQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRIJyk7CiAgICAgICAgc2VsZjo6YWRkU3VwcG9ydGVkQ3VybE9wdGlvbigkb3B0aW9ucywgJ0NVUkxPUFRfVVNFUlBXRCcpOwoKICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LCB0cnVlPiAkb3B0aW9ucwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhZGRTdXBwb3J0ZWRDdXJsT3B0aW9uKGFycmF5ICYkb3B0aW9ucywgc3RyaW5nICRjb25zdGFudCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxkZWZpbmVkKCRjb25zdGFudCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gXGNvbnN0YW50KCRjb25zdGFudCk7CiAgICAgICAgaWYgKFxpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICAkb3B0aW9uc1skdmFsdWVdID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LCBzdHJpbmd8bnVsbD4gJG9wdGlvbnMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gYWRkQ29uZmxpY3RpbmdDdXJsT3B0aW9uKGFycmF5ICYkb3B0aW9ucywgc3RyaW5nICRjb25zdGFudCwgP3N0cmluZyAkcmVwbGFjZW1lbnQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcZGVmaW5lZCgkY29uc3RhbnQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9IFxjb25zdGFudCgkY29uc3RhbnQpOwogICAgICAgIGlmIChcaXNfaW50KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJHZhbHVlXSA9ICRyZXBsYWNlbWVudDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk6IHZvaWQKICAgIHsKICAgICAgICAkcmVzb3VyY2UgPSAkZWFzeS0+aGFuZGxlOwogICAgICAgIHVuc2V0KCRlYXN5LT5oYW5kbGUpOwoKICAgICAgICBpZiAoXGNvdW50KCR0aGlzLT5oYW5kbGVzKSA+PSAkdGhpcy0+bWF4SGFuZGxlcykgewogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICAgICAgXGN1cmxfY2xvc2UoJHJlc291cmNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGhvbGQgb250byByZWZlcmVuY2VzCiAgICAgICAgICAgIC8vIGFuZCBhcmUgbm90IGNsZWFuZWQgdXAgYnkgY3VybF9yZXNldC4gVXNpbmcgY3VybF9zZXRvcHRfYXJyYXkKICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24sIHNvIHJlbW92aW5nIGVhY2ggb25lCiAgICAgICAgICAgIC8vIGluZGl2aWR1YWxseS4KICAgICAgICAgICAgXGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgXENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBcY3VybF9zZXRvcHQoJHJlc291cmNlLCBcQ1VSTE9QVF9SRUFERlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBcY3VybF9zZXRvcHQoJHJlc291cmNlLCBcQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgXGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgXENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgbnVsbCk7CiAgICAgICAgICAgIFxjdXJsX3Jlc2V0KCRyZXNvdXJjZSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzW10gPSAkcmVzb3VyY2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGxldGVzIGEgY1VSTCB0cmFuc2FjdGlvbiwgZWl0aGVyIHJldHVybmluZyBhIHJlc3BvbnNlIHByb21pc2Ugb3IgYQogICAgICogcmVqZWN0ZWQgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRoYW5kbGVyCiAgICAgKiBAcGFyYW0gQ3VybEZhY3RvcnlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmYWN0b3J5IERpY3RhdGVzIGhvdyB0aGUgaGFuZGxlIGlzIHJlbGVhc2VkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluaXNoKGNhbGxhYmxlICRoYW5kbGVyLCBFYXN5SGFuZGxlICRlYXN5LCBDdXJsRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJGVhc3ktPm9wdGlvbnNbJ29uX3N0YXRzJ10pKSB7CiAgICAgICAgICAgIHNlbGY6Omludm9rZVN0YXRzKCRlYXN5KTsKICAgICAgICB9CgogICAgICAgIGlmICghJGVhc3ktPnJlc3BvbnNlIHx8ICRlYXN5LT5lcnJubykgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6ZmluaXNoRXJyb3IoJGhhbmRsZXIsICRlYXN5LCAkZmFjdG9yeSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHByZXNlbnQgYW5kIHRoZXJlIGlzIG5vIGVycm9yLgogICAgICAgICRmYWN0b3J5LT5yZWxlYXNlKCRlYXN5KTsKCiAgICAgICAgLy8gUmV3aW5kIHRoZSBib2R5IG9mIHRoZSByZXNwb25zZSBpZiBwb3NzaWJsZS4KICAgICAgICAkYm9keSA9ICRlYXN5LT5yZXNwb25zZS0+Z2V0Qm9keSgpOwogICAgICAgIGlmICgkYm9keS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkZWFzeS0+cmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGludm9rZVN0YXRzKEVhc3lIYW5kbGUgJGVhc3kpOiB2b2lkCiAgICB7CiAgICAgICAgJGN1cmxTdGF0cyA9IFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGN1cmxTdGF0c1snYXBwY29ubmVjdF90aW1lJ10gPSBcY3VybF9nZXRpbmZvKCRlYXN5LT5oYW5kbGUsIFxDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUpOwogICAgICAgICRzdGF0cyA9IG5ldyBUcmFuc2ZlclN0YXRzKAogICAgICAgICAgICAkZWFzeS0+cmVxdWVzdCwKICAgICAgICAgICAgJGVhc3ktPnJlc3BvbnNlLAogICAgICAgICAgICAkY3VybFN0YXRzWyd0b3RhbF90aW1lJ10sCiAgICAgICAgICAgICRlYXN5LT5lcnJubywKICAgICAgICAgICAgJGN1cmxTdGF0cwogICAgICAgICk7CiAgICAgICAgKCRlYXN5LT5vcHRpb25zWydvbl9zdGF0cyddKSgkc3RhdHMpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkaGFuZGxlcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2hFcnJvcihjYWxsYWJsZSAkaGFuZGxlciwgRWFzeUhhbmRsZSAkZWFzeSwgQ3VybEZhY3RvcnlJbnRlcmZhY2UgJGZhY3RvcnkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLy8gR2V0IGVycm9yIGluZm9ybWF0aW9uIGFuZCByZWxlYXNlIHRoZSBoYW5kbGUgdG8gdGhlIGZhY3RvcnkuCiAgICAgICAgJGN0eCA9IFsKICAgICAgICAgICAgJ2Vycm5vJyA9PiAkZWFzeS0+ZXJybm8sCiAgICAgICAgICAgICdlcnJvcicgPT4gXGN1cmxfZXJyb3IoJGVhc3ktPmhhbmRsZSksCiAgICAgICAgICAgICdhcHBjb25uZWN0X3RpbWUnID0+IFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSwgXENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRSksCiAgICAgICAgXSArIFxjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGN0eFtzZWxmOjpDVVJMX1ZFUlNJT05fU1RSXSA9IEN1cmxWZXJzaW9uOjpnZXRWZXJzaW9uKCkgPz8gJyc7CiAgICAgICAgJGZhY3RvcnktPnJlbGVhc2UoJGVhc3kpOwoKICAgICAgICAvLyBSZXRyeSB3aGVuIG5vdGhpbmcgaXMgcHJlc2VudCBvciB3aGVuIGN1cmwgZmFpbGVkIHRvIHJld2luZC4KICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ19lcnJfbWVzc2FnZSddKSAmJiAoISRlYXN5LT5lcnJubyB8fCAkZWFzeS0+ZXJybm8gPT0gNjUpKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpyZXRyeUZhaWxlZFJld2luZCgkaGFuZGxlciwgJGVhc3ksICRjdHgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUmVqZWN0aW9uKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICRjdHgpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgc3RhdGljICRjb25uZWN0aW9uRXJyb3JzID0gWwogICAgICAgICAgICBcQ1VSTEVfT1BFUkFUSU9OX1RJTUVPVVRFRCA9PiB0cnVlLAogICAgICAgICAgICBcQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QgPT4gdHJ1ZSwKICAgICAgICAgICAgXENVUkxFX0NPVUxETlRfQ09OTkVDVCA9PiB0cnVlLAogICAgICAgICAgICBcQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IgPT4gdHJ1ZSwKICAgICAgICAgICAgXENVUkxFX0dPVF9OT1RISU5HID0+IHRydWUsCiAgICAgICAgXTsKCiAgICAgICAgaWYgKCRlYXN5LT5jcmVhdGVSZXNwb25zZUV4Y2VwdGlvbikgewogICAgICAgICAgICByZXR1cm4gUFxDcmVhdGU6OnJlamVjdGlvbkZvcigKICAgICAgICAgICAgICAgIG5ldyBSZXF1ZXN0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJlc3BvbnNlJywKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5jcmVhdGVSZXNwb25zZUV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAkY3R4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gd2FzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgb25IZWFkZXJzIGV2ZW50LCB0aGVuCiAgICAgICAgLy8gcmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZSB0aGF0IHdyYXBzIHRoYXQgZXhjZXB0aW9uLgogICAgICAgIGlmICgkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKAogICAgICAgICAgICAgICAgbmV3IFJlcXVlc3RFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5yZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICRlYXN5LT5yZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICRjdHgKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCk7CgogICAgICAgICRzYW5pdGl6ZWRFcnJvciA9IHNlbGY6OnNhbml0aXplQ3VybEVycm9yKCRjdHhbJ2Vycm9yJ10gPz8gJycsICR1cmksICRlYXN5LT5lZmZlY3RpdmVQcm94eSk7CgogICAgICAgICRtZXNzYWdlID0gXHNwcmludGYoCiAgICAgICAgICAgICdjVVJMIGVycm9yICVzOiAlcyAoJXMpJywKICAgICAgICAgICAgJGN0eFsnZXJybm8nXSwKICAgICAgICAgICAgJHNhbml0aXplZEVycm9yLAogICAgICAgICAgICAnc2VlIGh0dHBzOi8vY3VybC5zZS9saWJjdXJsL2MvbGliY3VybC1lcnJvcnMuaHRtbCcKICAgICAgICApOwoKICAgICAgICBpZiAoJycgIT09ICRzYW5pdGl6ZWRFcnJvcikgewogICAgICAgICAgICAkcmVkYWN0ZWRVcmlTdHJpbmcgPSBQc3I3XFV0aWxzOjpyZWRhY3RVc2VySW5mbygkdXJpKS0+X190b1N0cmluZygpOwogICAgICAgICAgICBpZiAoJHJlZGFjdGVkVXJpU3RyaW5nICE9PSAnJyAmJiBmYWxzZSA9PT0gXHN0cnBvcygkc2FuaXRpemVkRXJyb3IsICRyZWRhY3RlZFVyaVN0cmluZykpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlIC49IFxzcHJpbnRmKCcgZm9yICVzJywgJHJlZGFjdGVkVXJpU3RyaW5nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ3JlYXRlIGEgY29ubmVjdGlvbiBleGNlcHRpb24gaWYgaXQgd2FzIGEgc3BlY2lmaWMgZXJyb3IgY29kZS4KICAgICAgICAkZXJyb3IgPSBpc3NldCgkY29ubmVjdGlvbkVycm9yc1skZWFzeS0+ZXJybm9dKQogICAgICAgICAgICA/IG5ldyBDb25uZWN0RXhjZXB0aW9uKCRtZXNzYWdlLCAkZWFzeS0+cmVxdWVzdCwgbnVsbCwgJGN0eCkKICAgICAgICAgICAgOiBuZXcgUmVxdWVzdEV4Y2VwdGlvbigkbWVzc2FnZSwgJGVhc3ktPnJlcXVlc3QsICRlYXN5LT5yZXNwb25zZSwgbnVsbCwgJGN0eCk7CgogICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRlcnJvcik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2FuaXRpemVDdXJsRXJyb3Ioc3RyaW5nICRlcnJvciwgVXJpSW50ZXJmYWNlICR1cmksID9zdHJpbmcgJHByb3h5ID0gbnVsbCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnJyA9PT0gJGVycm9yKSB7CiAgICAgICAgICAgIHJldHVybiAkZXJyb3I7CiAgICAgICAgfQoKICAgICAgICAkZXJyb3IgPSBzZWxmOjpyZWRhY3RQcm94eVVzZXJJbmZvKCRlcnJvciwgJHByb3h5KTsKCiAgICAgICAgJGJhc2VVcmkgPSAkdXJpLT53aXRoUXVlcnkoJycpLT53aXRoRnJhZ21lbnQoJycpOwogICAgICAgICRiYXNlVXJpU3RyaW5nID0gJGJhc2VVcmktPl9fdG9TdHJpbmcoKTsKCiAgICAgICAgaWYgKCcnID09PSAkYmFzZVVyaVN0cmluZykgewogICAgICAgICAgICByZXR1cm4gJGVycm9yOwogICAgICAgIH0KCiAgICAgICAgJHJlZGFjdGVkVXJpU3RyaW5nID0gUHNyN1xVdGlsczo6cmVkYWN0VXNlckluZm8oJGJhc2VVcmkpLT5fX3RvU3RyaW5nKCk7CgogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgkYmFzZVVyaVN0cmluZywgJHJlZGFjdGVkVXJpU3RyaW5nLCAkZXJyb3IpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlZGFjdFByb3h5VXNlckluZm8oc3RyaW5nICRlcnJvciwgP3N0cmluZyAkcHJveHkpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHByb3h5ID09PSBudWxsIHx8ICRwcm94eSA9PT0gJycgfHwgXHN0cnBvcygkcHJveHksICdAJykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAkZXJyb3I7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZXJyb3IgbWVzc2FnZSBlbWJlZHMgdGhlIHByb3h5IHN0cmluZyBleGFjdGx5IGFzIGNvbmZpZ3VyZWQsCiAgICAgICAgLy8gc28gdGhlIHVzZXJpbmZvIG5lZWRsZSBpcyBleHRyYWN0ZWQgd2l0aCBwYXJzZV91cmwoKTogUHNyN1xVcmkKICAgICAgICAvLyBub3JtYWxpemVzIHRoZSBjb21wb25lbnRzLCB3aGljaCBjb3VsZCBtYWtlIHRoZSByZXBsYWNlbWVudCBtaXNzLgogICAgICAgICRwcm94eUZvclBhcnNpbmcgPSBcc3RycG9zKCRwcm94eSwgJzovLycpID09PSBmYWxzZSA/ICdodHRwOi8vJy4kcHJveHkgOiAkcHJveHk7CiAgICAgICAgJHByb3h5UGFydHMgPSBccGFyc2VfdXJsKCRwcm94eUZvclBhcnNpbmcpOwoKICAgICAgICBpZiAoIVxpc19hcnJheSgkcHJveHlQYXJ0cykpIHsKICAgICAgICAgICAgLy8gUHJveHkgc3RyaW5ncyB0aGF0IGRlZmVhdCBwYXJzZV91cmwoKSBhcmUgZXhhY3RseSB0aGUgb25lcwogICAgICAgICAgICAvLyBsaWJjdXJsIGVtYmVkcyB2ZXJiYXRpbSBpbiBlcnJvciB0ZXh0IHN1Y2ggYXMgIlVuc3VwcG9ydGVkCiAgICAgICAgICAgIC8vIHByb3h5IHN5bnRheCBpbiAnLi4uJyI6IHJlZGFjdCBldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0ICdAJwogICAgICAgICAgICAvLyBvZiB0aGUgYXV0aG9yaXR5IGFzIGEgc2FmZS1zaWRlIGZhbGxiYWNrLgogICAgICAgICAgICAkYXV0aG9yaXR5ID0gXHN1YnN0cigkcHJveHlGb3JQYXJzaW5nLCBcc3RycG9zKCRwcm94eUZvclBhcnNpbmcsICc6Ly8nKSArIDMpOwogICAgICAgICAgICAkYXRQb3NpdGlvbiA9IFxzdHJycG9zKCRhdXRob3JpdHksICdAJyk7CgogICAgICAgICAgICBpZiAoJGF0UG9zaXRpb24gPT09IGZhbHNlIHx8ICRhdFBvc2l0aW9uID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGVycm9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gXHN0cl9yZXBsYWNlKFxzdWJzdHIoJGF1dGhvcml0eSwgMCwgJGF0UG9zaXRpb24pLidAJywgJyoqKkAnLCAkZXJyb3IpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkcHJveHlQYXJ0c1sndXNlciddKSAmJiAhaXNzZXQoJHByb3h5UGFydHNbJ3Bhc3MnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRlcnJvcjsKICAgICAgICB9CgogICAgICAgICR1c2VySW5mbyA9ICRwcm94eVBhcnRzWyd1c2VyJ10gPz8gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRwcm94eVBhcnRzWydwYXNzJ10pKSB7CiAgICAgICAgICAgICR1c2VySW5mbyAuPSAnOicuJHByb3h5UGFydHNbJ3Bhc3MnXTsKICAgICAgICB9CgogICAgICAgIGlmICgkdXNlckluZm8gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkZXJyb3I7CiAgICAgICAgfQoKICAgICAgICAkcmVkYWN0ZWRVc2VySW5mbyA9ICcqKionOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkcHJveHlVcmkgPSBuZXcgVXJpKCRwcm94eUZvclBhcnNpbmcpOwogICAgICAgICAgICAkcmVkYWN0ZWRVc2VySW5mbyA9IFBzcjdcVXRpbHM6OnJlZGFjdFVzZXJJbmZvKCRwcm94eVVyaSktPmdldFVzZXJJbmZvKCk7CgogICAgICAgICAgICBpZiAoJHJlZGFjdGVkVXNlckluZm8gPT09ICRwcm94eVVyaS0+Z2V0VXNlckluZm8oKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gVW5wYXJzZWFibGUgYXMgYSBVUkk6IGZhbGwgYmFjayB0byByZWRhY3RpbmcgdGhlIHdob2xlIHVzZXJpbmZvLgogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxzdHJfcmVwbGFjZSgkdXNlckluZm8uJ0AnLCAkcmVkYWN0ZWRVc2VySW5mby4nQCcsICRlcnJvcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+ICRjb25mCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldEVmZmVjdGl2ZVByb3h5KGFycmF5ICRjb25mKTogP3N0cmluZwogICAgewogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoXENVUkxPUFRfUFJPWFksICRjb25mKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRwcm94eSA9ICRjb25mW1xDVVJMT1BUX1BST1hZXTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHByb3h5KSAmJiAkcHJveHkgIT09ICcnID8gJHByb3h5IDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmYoRWFzeUhhbmRsZSAkZWFzeSk6IGFycmF5CiAgICB7CiAgICAgICAgJGNvbmYgPSBbCiAgICAgICAgICAgICdfaGVhZGVycycgPT4gJGVhc3ktPnJlcXVlc3QtPmdldEhlYWRlcnMoKSwKICAgICAgICAgICAgXENVUkxPUFRfQ1VTVE9NUkVRVUVTVCA9PiAkZWFzeS0+cmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgIFxDVVJMT1BUX1VSTCA9PiAoc3RyaW5nKSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCktPndpdGhGcmFnbWVudCgnJyksCiAgICAgICAgICAgIFxDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IGZhbHNlLAogICAgICAgICAgICBcQ1VSTE9QVF9IRUFERVIgPT4gZmFsc2UsCiAgICAgICAgICAgIFxDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUID0+IDMwMCwKICAgICAgICBdOwoKICAgICAgICAkcHJvdG9jb2xzID0gVXRpbHM6Om5vcm1hbGl6ZVByb3RvY29scygkZWFzeS0+b3B0aW9uc1sncHJvdG9jb2xzJ10gPz8gWydodHRwJywgJ2h0dHBzJ10pOwogICAgICAgICRzY2hlbWUgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpOwogICAgICAgIGlmICghXGluX2FycmF5KCRzY2hlbWUsICRwcm90b2NvbHMsIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgc2NoZW1lICIlcyIgaXMgbm90IGFsbG93ZWQgYnkgdGhlIHByb3RvY29scyByZXF1ZXN0IG9wdGlvbi4nLCAkc2NoZW1lKSwgJGVhc3ktPnJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxkZWZpbmVkKCdDVVJMT1BUX1BST1RPQ09MUycpKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1BST1RPQ09MU10gPSBzZWxmOjpjdXJsUHJvdG9jb2xNYXNrKCRwcm90b2NvbHMpOwogICAgICAgIH0KCiAgICAgICAgJHZlcnNpb24gPSAkZWFzeS0+cmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CgogICAgICAgIGlmICgnMicgPT09ICR2ZXJzaW9uIHx8ICcyLjAnID09PSAkdmVyc2lvbikgewogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQX1ZFUlNJT05dID0gXENVUkxfSFRUUF9WRVJTSU9OXzJfMDsKICAgICAgICB9IGVsc2VpZiAoJzEuMScgPT09ICR2ZXJzaW9uKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBfVkVSU0lPTl0gPSBcQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBfVkVSU0lPTl0gPSBcQ1VSTF9IVFRQX1ZFUlNJT05fMV8wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb25mOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRwcm90b2NvbHMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3VybFByb3RvY29sTWFzayhhcnJheSAkcHJvdG9jb2xzKTogaW50CiAgICB7CiAgICAgICAgJG1hc2sgPSAwOwoKICAgICAgICBpZiAoXGluX2FycmF5KCdodHRwJywgJHByb3RvY29scywgdHJ1ZSkpIHsKICAgICAgICAgICAgJG1hc2sgfD0gXENVUkxQUk9UT19IVFRQOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpbl9hcnJheSgnaHR0cHMnLCAkcHJvdG9jb2xzLCB0cnVlKSkgewogICAgICAgICAgICAkbWFzayB8PSBcQ1VSTFBST1RPX0hUVFBTOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtYXNrOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR0eXBlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVRsc0ZpbGVUeXBlKHN0cmluZyAkb3B0aW9uLCAkdHlwZSk6IHN0cmluZwogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkdHlwZSkgfHwgJHR5cGUgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCclcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICRvcHRpb24pKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcc3RydG91cHBlcigkdHlwZSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2hvdWxkVmFsaWRhdGVTc2xLZXlGaWxlKD9zdHJpbmcgJHR5cGUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0eXBlICE9PSAnRU5HJyAmJiAkdHlwZSAhPT0gJ1BST1YnOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlNZXRob2QoRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJiRjb25mKTogdm9pZAogICAgewogICAgICAgICRib2R5ID0gJGVhc3ktPnJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gbnVsbCB8fCAkc2l6ZSA+IDApIHsKICAgICAgICAgICAgJHRoaXMtPmFwcGx5Qm9keSgkZWFzeS0+cmVxdWVzdCwgJGVhc3ktPm9wdGlvbnMsICRjb25mKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRtZXRob2QgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0TWV0aG9kKCk7CiAgICAgICAgaWYgKCRtZXRob2QgPT09ICdQVVQnIHx8ICRtZXRob2QgPT09ICdQT1NUJykgewogICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjIKICAgICAgICAgICAgaWYgKCEkZWFzeS0+cmVxdWVzdC0+aGFzSGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gJ0NvbnRlbnQtTGVuZ3RoOiAwJzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkbWV0aG9kID09PSAnSEVBRCcpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfTk9CT0RZXSA9IHRydWU7CiAgICAgICAgICAgIHVuc2V0KAogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfV1JJVEVGVU5DVElPTl0sCiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9SRUFERlVOQ1RJT05dLAogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfRklMRV0sCiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9JTkZJTEVdCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlCb2R5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zLCBhcnJheSAmJGNvbmYpOiB2b2lkCiAgICB7CiAgICAgICAgJHNpemUgPSAkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb250ZW50LUxlbmd0aCcpCiAgICAgICAgICAgID8gKGludCkgJHJlcXVlc3QtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgOiBudWxsOwoKICAgICAgICAvLyBTZW5kIHRoZSBib2R5IGFzIGEgc3RyaW5nIGlmIHRoZSBzaXplIGlzIGxlc3MgdGhhbiAxTUIgT1IgaWYgdGhlCiAgICAgICAgLy8gW2N1cmxdW2JvZHlfYXNfc3RyaW5nXSByZXF1ZXN0IHZhbHVlIGlzIHNldC4KICAgICAgICBpZiAoKCRzaXplICE9PSBudWxsICYmICRzaXplIDwgMTAwMDAwMCkgfHwgIWVtcHR5KCRvcHRpb25zWydfYm9keV9hc19zdHJpbmcnXSkpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUE9TVEZJRUxEU10gPSAoc3RyaW5nKSAkcmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICAgICAvLyBEb24ndCBkdXBsaWNhdGUgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcgogICAgICAgICAgICAkdGhpcy0+cmVtb3ZlSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICRjb25mKTsKICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnLCAkY29uZik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfVVBMT0FEXSA9IHRydWU7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSU5GSUxFU0laRV0gPSAkc2l6ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5yZW1vdmVIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgJGNvbmYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRib2R5ID0gJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgaWYgKCRib2R5LT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9SRUFERlVOQ1RJT05dID0gc3RhdGljIGZ1bmN0aW9uICgkY2gsICRmZCwgJGxlbmd0aCkgdXNlICgkYm9keSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRib2R5LT5yZWFkKCRsZW5ndGgpOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIEV4cGVjdCBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHByZXZlbnQgY3VybCBmcm9tIGFkZGluZyBpdAogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignRXhwZWN0JykpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdFeHBlY3Q6JzsKICAgICAgICB9CgogICAgICAgIC8vIGNVUkwgc29tZXRpbWVzIGFkZHMgYSBjb250ZW50LXR5cGUgYnkgZGVmYXVsdC4gUHJldmVudCB0aGlzLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdDb250ZW50LVR5cGU6JzsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseUhlYWRlcnMoRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJiRjb25mKTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKCRjb25mWydfaGVhZGVycyddIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKICAgICAgICAgICAgICAgIGlmICgkdmFsdWUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY1VSTCByZXF1aXJlcyBhIHNwZWNpYWwgZm9ybWF0IGZvciBlbXB0eSBoZWFkZXJzLgogICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTg4MiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAiJG5hbWU7IjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICIkbmFtZTogJHZhbHVlIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBBY2NlcHQgaGVhZGVyIGlmIG9uZSB3YXMgbm90IHNldAogICAgICAgIGlmICghJGVhc3ktPnJlcXVlc3QtPmhhc0hlYWRlcignQWNjZXB0JykpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdBY2NlcHQ6JzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYSBoZWFkZXIgZnJvbSB0aGUgb3B0aW9ucyBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIHRvIHJlbW92ZQogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zIHRvIG1vZGlmeQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlbW92ZUhlYWRlcihzdHJpbmcgJG5hbWUsIGFycmF5ICYkb3B0aW9ucyk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoIChcYXJyYXlfa2V5cygkb3B0aW9uc1snX2hlYWRlcnMnXSkgYXMgJGtleSkgewogICAgICAgICAgICBpZiAoIVxzdHJjYXNlY21wKChzdHJpbmcpICRrZXksICRuYW1lKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ19oZWFkZXJzJ11bJGtleV0pOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5SGFuZGxlck9wdGlvbnMoRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJiRjb25mKTogdm9pZAogICAgewogICAgICAgICRvcHRpb25zID0gJGVhc3ktPm9wdGlvbnM7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJpZnknXSkpIHsKICAgICAgICAgICAgaWYgKCRvcHRpb25zWyd2ZXJpZnknXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRjb25mW1xDVVJMT1BUX0NBSU5GT10pOwogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMX1ZFUklGWUhPU1RdID0gMDsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTF9WRVJJRllQRUVSXSA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMX1ZFUklGWUhPU1RdID0gMjsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTF9WRVJJRllQRUVSXSA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAoXGlzX3N0cmluZygkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGZpbGUvZm9sZGVyL2xpbmsgcGF0aCBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBleGlzdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIVxmaWxlX2V4aXN0cygkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJTU0wgQ0EgYnVuZGxlIG5vdCBmb3VuZDogeyRvcHRpb25zWyd2ZXJpZnknXX0iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhIGRpcmVjdG9yeSBvciBhIGxpbmsgdG8gYSBkaXJlY3RvcnkgdXNlIENVUkxPUFRfQ0FQQVRILgogICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCwgaXQncyBwcm9iYWJseSBhIGZpbGUsIG9yIGEgbGluayB0byBhIGZpbGUsIHNvIHVzZSBDVVJMT1BUX0NBSU5GTy4KICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgIFxpc19kaXIoJG9wdGlvbnNbJ3ZlcmlmeSddKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcaXNfbGluaygkb3B0aW9uc1sndmVyaWZ5J10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJHZlcmlmeUxpbmsgPSBccmVhZGxpbmsoJG9wdGlvbnNbJ3ZlcmlmeSddKSkgIT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcaXNfZGlyKCR2ZXJpZnlMaW5rKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0NBUEFUSF0gPSAkb3B0aW9uc1sndmVyaWZ5J107CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfQ0FJTkZPXSA9ICRvcHRpb25zWyd2ZXJpZnknXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9FTkNPRElOR10pICYmICFlbXB0eSgkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSkpIHsKICAgICAgICAgICAgJGFjY2VwdCA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKCdBY2NlcHQtRW5jb2RpbmcnKTsKICAgICAgICAgICAgaWYgKCRhY2NlcHQpIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0VOQ09ESU5HXSA9ICRhY2NlcHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGVuYWJsZXMgYWxsIGF2YWlsYWJsZSBkZWNvZGVycyBhbmQgaW1wbGljaXRseQogICAgICAgICAgICAgICAgLy8gc2V0cyBhIG1hdGNoaW5nICdBY2NlcHQtRW5jb2RpbmcnIGhlYWRlci4KICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0VOQ09ESU5HXSA9ICcnOwogICAgICAgICAgICAgICAgLy8gQnV0IGFzIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgZW5jb2RpbmcgcHJlZmVyZW5jZSwKICAgICAgICAgICAgICAgIC8vIGxldCdzIGxlYXZlIGl0IHVwIHRvIHNlcnZlciBieSBwcmV2ZW50aW5nIGN1cmwgZnJvbSBzZW5kaW5nCiAgICAgICAgICAgICAgICAvLyB0aGUgaGVhZGVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzICdBY2NlcHQtRW5jb2Rpbmc6IConLgogICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAjZmllbGQuYWNjZXB0LWVuY29kaW5nCiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gJ0FjY2VwdC1FbmNvZGluZzonOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydzaW5rJ10pKSB7CiAgICAgICAgICAgIC8vIFVzZSBhIGRlZmF1bHQgdGVtcCBzdHJlYW0gaWYgbm8gc2luayB3YXMgc2V0LgogICAgICAgICAgICAkb3B0aW9uc1snc2luayddID0gUHNyN1xVdGlsczo6dHJ5Rm9wZW4oJ3BocDovL3RlbXAnLCAndysnKTsKICAgICAgICB9CiAgICAgICAgJHNpbmsgPSAkb3B0aW9uc1snc2luayddOwogICAgICAgIGlmICghXGlzX3N0cmluZygkc2luaykpIHsKICAgICAgICAgICAgJHNpbmsgPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJHNpbmspOwogICAgICAgIH0gZWxzZWlmICghXGlzX2RpcihcZGlybmFtZSgkc2luaykpKSB7CiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBmYWlsaW5nIGluIGN1cmwuCiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihcc3ByaW50ZignRGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0IGZvciBzaW5rIHZhbHVlIG9mICVzJywgXGRpcm5hbWUoJHNpbmspLCAkc2luaykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaW5rID0gbmV3IExhenlPcGVuU3RyZWFtKCRzaW5rLCAndysnKTsKICAgICAgICB9CiAgICAgICAgJGVhc3ktPnNpbmsgPSAkc2luazsKICAgICAgICAkY29uZltcQ1VSTE9QVF9XUklURUZVTkNUSU9OXSA9IHN0YXRpYyBmdW5jdGlvbiAoJGNoLCAkd3JpdGUpIHVzZSAoJHNpbmspOiBpbnQgewogICAgICAgICAgICByZXR1cm4gJHNpbmstPndyaXRlKCR3cml0ZSk7CiAgICAgICAgfTsKCiAgICAgICAgJHRpbWVvdXRSZXF1aXJlc05vU2lnbmFsID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd0aW1lb3V0J10pKSB7CiAgICAgICAgICAgICR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCB8PSAkb3B0aW9uc1sndGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfVElNRU9VVF9NU10gPSAkb3B0aW9uc1sndGltZW91dCddICogMTAwMDsKICAgICAgICB9CgogICAgICAgIC8vIENVUkwgZGVmYXVsdCB2YWx1ZSBpcyBDVVJMX0lQUkVTT0xWRV9XSEFURVZFUgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSkgewogICAgICAgICAgICBpZiAoJ3Y0JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfSVBSRVNPTFZFXSA9IFxDVVJMX0lQUkVTT0xWRV9WNDsKICAgICAgICAgICAgfSBlbHNlaWYgKCd2NicgPT09ICRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX0lQUkVTT0xWRV0gPSBcQ1VSTF9JUFJFU09MVkVfVjY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY29ubmVjdF90aW1lb3V0J10pKSB7CiAgICAgICAgICAgICR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCB8PSAkb3B0aW9uc1snY29ubmVjdF90aW1lb3V0J10gPCAxOwogICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NU10gPSAkb3B0aW9uc1snY29ubmVjdF90aW1lb3V0J10gKiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCAmJiBcc3RydG91cHBlcihcc3Vic3RyKFxQSFBfT1MsIDAsIDMpKSAhPT0gJ1dJTicpIHsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfTk9TSUdOQUxdID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIEFsd2F5cyBwaW4gQ1VSTE9QVF9QUk9YWSAoYW5kIENVUkxPUFRfTk9QUk9YWSB3aGVuIGF2YWlsYWJsZSkgc28KICAgICAgICAvLyB0aGF0IGxpYmN1cmwgbmV2ZXIgZmFsbHMgYmFjayB0byByZWFkaW5nIHByb3h5IGVudmlyb25tZW50CiAgICAgICAgLy8gdmFyaWFibGVzIGl0c2VsZi4gV2hlbiB0aGUgcHJveHkgcmVxdWVzdCBvcHRpb24gbWFrZXMgbm8gZGVjaXNpb24sCiAgICAgICAgLy8gdGhlIGVudmlyb25tZW50IGlzIHJlc29sdmVkIGhlcmUgd2l0aCBsaWJjdXJsJ3Mgb3duIHNlbWFudGljcy4KICAgICAgICAkcHJveHlDb25mID0gbnVsbDsKICAgICAgICAkbm9Qcm94eUNvbmYgPSAnJzsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Byb3h5J10pKSB7CiAgICAgICAgICAgIGlmICghXGlzX2FycmF5KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICAgICAgJHByb3h5Q29uZiA9ICRvcHRpb25zWydwcm94eSddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHNjaGVtZSA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Byb3h5J11bJHNjaGVtZV0pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICBpc3NldCgkb3B0aW9uc1sncHJveHknXVsnbm8nXSkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHM6OmlzVXJpSW5Ob1Byb3h5KCRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKSwgJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10pCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcm94eUNvbmYgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJG5vUHJveHlDb25mID0gJyonOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcm94eUNvbmYgPSAkb3B0aW9uc1sncHJveHknXVskc2NoZW1lXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkcHJveHlDb25mID09PSBudWxsKSB7CiAgICAgICAgICAgICRwcm94eUNvbmYgPSBQcm94eUVudmlyb25tZW50OjpnZXRQcm94eUZvclNjaGVtZSgkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpKTsKICAgICAgICAgICAgaWYgKCRwcm94eUNvbmYgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRwcm94eUNvbmYgPSAnJzsKICAgICAgICAgICAgfSBlbHNlaWYgKAogICAgICAgICAgICAgICAgKCRub1Byb3h5ID0gUHJveHlFbnZpcm9ubWVudDo6Z2V0Tm9Qcm94eSgpKSAhPT0gbnVsbAogICAgICAgICAgICAgICAgJiYgVXRpbHM6OmlzVXJpSW5Ob1Byb3h5KCRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKSwgUHJveHlFbnZpcm9ubWVudDo6c3BsaXROb1Byb3h5KCRub1Byb3h5KSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgZW52aXJvbm1lbnQgbm9fcHJveHkgbGlzdCBpcyB0b2tlbml6ZWQgdGhlIHdheSBsaWJjdXJsCiAgICAgICAgICAgICAgICAvLyB0b2tlbml6ZXMgaXQgYW5kIG1hdGNoZWQgaGVyZSB3aXRoIHRoZSBzYW1lIHJ1bGVzIGFzIHRoZQogICAgICAgICAgICAgICAgLy8gcHJveHkgb3B0aW9uJ3MgIm5vIiBsaXN0LCBzbyBiZWhhdmlvciBkb2VzIG5vdCBkZXBlbmQgb24KICAgICAgICAgICAgICAgIC8vIHRoZSBpbnN0YWxsZWQgbGliY3VybCdzIG1hdGNoZXIuCiAgICAgICAgICAgICAgICAkcHJveHlDb25mID0gJyc7CiAgICAgICAgICAgICAgICAkbm9Qcm94eUNvbmYgPSAnKic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRjb25mW1xDVVJMT1BUX1BST1hZXSA9ICRwcm94eUNvbmY7CiAgICAgICAgaWYgKFxkZWZpbmVkKCdDVVJMT1BUX05PUFJPWFknKSkgewogICAgICAgICAgICAkY29uZlsoaW50KSBcY29uc3RhbnQoJ0NVUkxPUFRfTk9QUk9YWScpXSA9ICRub1Byb3h5Q29uZjsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY3J5cHRvX21ldGhvZCddKSkgewogICAgICAgICAgICAkcHJvdG9jb2xWZXJzaW9uID0gJGVhc3ktPnJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwoKICAgICAgICAgICAgLy8gSWYgSFRUUC8yLCB1cGdyYWRlIFRMUyAxLjAgYW5kIDEuMSB0byAxLjIKICAgICAgICAgICAgaWYgKCcyJyA9PT0gJHByb3RvY29sVmVyc2lvbiB8fCAnMi4wJyA9PT0gJHByb3RvY29sVmVyc2lvbikgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8wX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXQogICAgICAgICAgICAgICAgICAgIHx8IFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8xX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXQogICAgICAgICAgICAgICAgICAgIHx8IFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8yX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMVkVSU0lPTl0gPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoZGVmaW5lZCgnU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfM19DTElFTlQnKSAmJiBcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfM19DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIUN1cmxWZXJzaW9uOjpzdXBwb3J0c1RsczEzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY3J5cHRvX21ldGhvZCByZXF1ZXN0IG9wdGlvbjogVExTIDEuMyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgdmVyc2lvbiBvZiBjVVJMJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiB1bmtub3duIHZlcnNpb24gcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKFxTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8wX0NMSUVOVCA9PT0gJG9wdGlvbnNbJ2NyeXB0b19tZXRob2QnXSkgewogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMVkVSU0lPTl0gPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA7CiAgICAgICAgICAgIH0gZWxzZWlmIChcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMV9DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOwogICAgICAgICAgICB9IGVsc2VpZiAoXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzJfQ0xJRU5UID09PSAkb3B0aW9uc1snY3J5cHRvX21ldGhvZCddKSB7CiAgICAgICAgICAgICAgICBpZiAoIUN1cmxWZXJzaW9uOjpzdXBwb3J0c1RsczEyKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiBUTFMgMS4yIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciB2ZXJzaW9uIG9mIGNVUkwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTFZFUlNJT05dID0gXENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOwogICAgICAgICAgICB9IGVsc2VpZiAoZGVmaW5lZCgnU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfM19DTElFTlQnKSAmJiBcU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfM19DTElFTlQgPT09ICRvcHRpb25zWydjcnlwdG9fbWV0aG9kJ10pIHsKICAgICAgICAgICAgICAgIGlmICghQ3VybFZlcnNpb246OnN1cHBvcnRzVGxzMTMoKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGNyeXB0b19tZXRob2QgcmVxdWVzdCBvcHRpb246IFRMUyAxLjMgbm90IHN1cHBvcnRlZCBieSB5b3VyIHZlcnNpb24gb2YgY1VSTCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMVkVSU0lPTl0gPSBcQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiB1bmtub3duIHZlcnNpb24gcHJvdmlkZWQnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGNlcnRUeXBlID0gbnVsbDsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2NlcnRfdHlwZSddKSkgewogICAgICAgICAgICAkY2VydFR5cGUgPSBzZWxmOjpub3JtYWxpemVUbHNGaWxlVHlwZSgnY2VydF90eXBlJywgJG9wdGlvbnNbJ2NlcnRfdHlwZSddKTsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMQ0VSVFRZUEVdID0gJGNlcnRUeXBlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydjZXJ0J10pKSB7CiAgICAgICAgICAgICRjZXJ0ID0gJG9wdGlvbnNbJ2NlcnQnXTsKICAgICAgICAgICAgaWYgKFxpc19hcnJheSgkY2VydCkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGNlcnRbMF0pIHx8ICFcaXNfc3RyaW5nKCRjZXJ0WzBdKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGNlcnQgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY2VydFsxXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGNlcnRbMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGNlcnQgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMQ0VSVFBBU1NXRF0gPSAkY2VydFsxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjZXJ0ID0gJGNlcnRbMF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRjZXJ0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY2VydCByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghXGZpbGVfZXhpc3RzKCRjZXJ0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlNTTCBjZXJ0aWZpY2F0ZSBub3QgZm91bmQ6IHskY2VydH0iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBPcGVuU1NMICh2ZXJzaW9ucyAwLjkuMyBhbmQgbGF0ZXIpIGFsc28gc3VwcG9ydCAiUDEyIiBmb3IgUEtDUyMxMi1lbmNvZGVkIGZpbGVzLgogICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9jdXJsLnNlL2xpYmN1cmwvYy9DVVJMT1BUX1NTTENFUlRUWVBFLmh0bWwKICAgICAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCRjZXJ0LCBcUEFUSElORk9fRVhURU5TSU9OKTsKICAgICAgICAgICAgaWYgKCRjZXJ0VHlwZSA9PT0gbnVsbCAmJiBwcmVnX21hdGNoKCcjXihkZXJ8cDEyKSQjaScsICRleHQpKSB7CiAgICAgICAgICAgICAgICAkY29uZltcQ1VSTE9QVF9TU0xDRVJUVFlQRV0gPSBzdHJ0b3VwcGVyKCRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NTTENFUlRdID0gJGNlcnQ7CiAgICAgICAgfQoKICAgICAgICAkc3NsS2V5VHlwZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzc2xfa2V5X3R5cGUnXSkpIHsKICAgICAgICAgICAgJHNzbEtleVR5cGUgPSBzZWxmOjpub3JtYWxpemVUbHNGaWxlVHlwZSgnc3NsX2tleV90eXBlJywgJG9wdGlvbnNbJ3NzbF9rZXlfdHlwZSddKTsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMS0VZVFlQRV0gPSAkc3NsS2V5VHlwZTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc3NsX2tleSddKSkgewogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCRvcHRpb25zWydzc2xfa2V5J10pKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydzc2xfa2V5J11bMF0pIHx8ICFcaXNfc3RyaW5nKCRvcHRpb25zWydzc2xfa2V5J11bMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc3NsX2tleSByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzc2xfa2V5J11bMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRvcHRpb25zWydzc2xfa2V5J11bMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHNzbF9rZXkgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMS0VZUEFTU1dEXSA9ICRvcHRpb25zWydzc2xfa2V5J11bMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc3NsS2V5ID0gJG9wdGlvbnNbJ3NzbF9rZXknXVswXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNzbEtleSA9ICRzc2xLZXkgPz8gJG9wdGlvbnNbJ3NzbF9rZXknXTsKCiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkc3NsS2V5KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc3NsX2tleSByZXF1ZXN0IG9wdGlvbicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2VsZjo6c2hvdWxkVmFsaWRhdGVTc2xLZXlGaWxlKCRzc2xLZXlUeXBlKSAmJiAhXGZpbGVfZXhpc3RzKCRzc2xLZXkpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiU1NMIHByaXZhdGUga2V5IG5vdCBmb3VuZDogeyRzc2xLZXl9Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfU1NMS0VZXSA9ICRzc2xLZXk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3Byb2dyZXNzJ10pKSB7CiAgICAgICAgICAgICRwcm9ncmVzcyA9ICRvcHRpb25zWydwcm9ncmVzcyddOwogICAgICAgICAgICBpZiAoIVxpc19jYWxsYWJsZSgkcHJvZ3Jlc3MpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncHJvZ3Jlc3MgY2xpZW50IG9wdGlvbiBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfTk9QUk9HUkVTU10gPSBmYWxzZTsKICAgICAgICAgICAgJGNvbmZbXENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTl0gPSBzdGF0aWMgZnVuY3Rpb24gKCRyZXNvdXJjZSwgaW50ICRkb3dubG9hZFNpemUsIGludCAkZG93bmxvYWRlZCwgaW50ICR1cGxvYWRTaXplLCBpbnQgJHVwbG9hZGVkKSB1c2UgKCRwcm9ncmVzcykgewogICAgICAgICAgICAgICAgJHByb2dyZXNzKCRkb3dubG9hZFNpemUsICRkb3dubG9hZGVkLCAkdXBsb2FkU2l6ZSwgJHVwbG9hZGVkKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ2RlYnVnJ10pKSB7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1NUREVSUl0gPSBVdGlsczo6ZGVidWdSZXNvdXJjZSgkb3B0aW9uc1snZGVidWcnXSk7CiAgICAgICAgICAgICRjb25mW1xDVVJMT1BUX1ZFUkJPU0VdID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhIHJlc3BvbnNlIHdhcyBzZXQgb24gYSB0cmFuc2FjdGlvbi4gSWYgb25lCiAgICAgKiB3YXMgbm90IHNldCwgdGhlbiB0aGUgcmVxdWVzdCBpcyByZXRyaWVkIGlmIHBvc3NpYmxlLiBUaGlzIGVycm9yCiAgICAgKiB0eXBpY2FsbHkgbWVhbnMgeW91IGFyZSBzZW5kaW5nIGEgcGF5bG9hZCwgY3VybCBlbmNvdW50ZXJlZCBhCiAgICAgKiAiQ29ubmVjdGlvbiBkaWVkLCByZXRyeWluZyBhIGZyZXNoIGNvbm5lY3QiIGVycm9yLCB0cmllZCB0byByZXdpbmQgdGhlCiAgICAgKiBzdHJlYW0sIGFuZCB0aGVuIGVuY291bnRlcmVkIGEgIm5lY2Vzc2FyeSBkYXRhIHJld2luZCB3YXNuJ3QgcG9zc2libGUiCiAgICAgKiBlcnJvciwgY2F1c2luZyB0aGUgcmVxdWVzdCB0byBiZSBzZW50IHRocm91Z2ggY3VybF9tdWx0aV9pbmZvX3JlYWQoKQogICAgICogd2l0aG91dCBhbiBlcnJvciBzdGF0dXMuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkaGFuZGxlcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZXRyeUZhaWxlZFJld2luZChjYWxsYWJsZSAkaGFuZGxlciwgRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJGN0eCk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyBPbmx5IHJld2luZCBpZiB0aGUgYm9keSBoYXMgYmVlbiByZWFkIGZyb20uCiAgICAgICAgICAgICRib2R5ID0gJGVhc3ktPnJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgaWYgKCRib2R5LT50ZWxsKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcUnVudGltZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkY3R4WydlcnJvciddID0gJ1RoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseSBmYWlsZWQgd2l0aG91dCAnCiAgICAgICAgICAgICAgICAuJ3Byb3ZpZGluZyBhbiBlcnJvci4gVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVuIHJldHJpZWQsICcKICAgICAgICAgICAgICAgIC4nYnV0IGF0dGVtcHRpbmcgdG8gcmV3aW5kIHRoZSByZXF1ZXN0IGJvZHkgZmFpbGVkLiAnCiAgICAgICAgICAgICAgICAuJ0V4Y2VwdGlvbjogJy4kZTsKCiAgICAgICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVSZWplY3Rpb24oJGVhc3ksICRjdHgpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0cnkgbm8gbW9yZSB0aGFuIDMgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4KICAgICAgICBpZiAoIWlzc2V0KCRlYXN5LT5vcHRpb25zWydfY3VybF9yZXRyaWVzJ10pKSB7CiAgICAgICAgICAgICRlYXN5LT5vcHRpb25zWydfY3VybF9yZXRyaWVzJ10gPSAxOwogICAgICAgIH0gZWxzZWlmICgkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddID09IDIpIHsKICAgICAgICAgICAgJGN0eFsnZXJyb3InXSA9ICdUaGUgY1VSTCByZXF1ZXN0IHdhcyByZXRyaWVkIDMgdGltZXMgJwogICAgICAgICAgICAgICAgLidhbmQgZGlkIG5vdCBzdWNjZWVkLiBUaGUgbW9zdCBsaWtlbHkgcmVhc29uIGZvciB0aGUgZmFpbHVyZSAnCiAgICAgICAgICAgICAgICAuJ2lzIHRoYXQgY1VSTCB3YXMgdW5hYmxlIHRvIHJld2luZCB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCAnCiAgICAgICAgICAgICAgICAuJ2FuZCBzdWJzZXF1ZW50IHJldHJpZXMgcmVzdWx0ZWQgaW4gdGhlIHNhbWUgZXJyb3IuIFR1cm4gb24gJwogICAgICAgICAgICAgICAgLid0aGUgZGVidWcgb3B0aW9uIHRvIHNlZSB3aGF0IHdlbnQgd3JvbmcuIFNlZSAnCiAgICAgICAgICAgICAgICAuJ2h0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NDcyMDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uJzsKCiAgICAgICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVSZWplY3Rpb24oJGVhc3ksICRjdHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICsrJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGFuZGxlcigkZWFzeS0+cmVxdWVzdCwgJGVhc3ktPm9wdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlSGVhZGVyRm4oRWFzeUhhbmRsZSAkZWFzeSk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRlYXN5LT5vcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICRvbkhlYWRlcnMgPSAkZWFzeS0+b3B0aW9uc1snb25faGVhZGVycyddOwoKICAgICAgICAgICAgaWYgKCFcaXNfY2FsbGFibGUoJG9uSGVhZGVycykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvbkhlYWRlcnMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoJGNoLCAkaCkgdXNlICgKICAgICAgICAgICAgJG9uSGVhZGVycywKICAgICAgICAgICAgJGVhc3ksCiAgICAgICAgICAgICYkc3RhcnRpbmdSZXNwb25zZQogICAgICAgICkgewogICAgICAgICAgICAkdmFsdWUgPSBcdHJpbSgkaCk7CiAgICAgICAgICAgIGlmICgkdmFsdWUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICAkc3RhcnRpbmdSZXNwb25zZSA9IHRydWU7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRlYXN5LT5jcmVhdGVSZXNwb25zZSgpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICAgICAgICAgICRlYXN5LT5yZXNwb25zZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgJGVhc3ktPmNyZWF0ZVJlc3BvbnNlRXhjZXB0aW9uID0gJGU7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkb25IZWFkZXJzICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9uSGVhZGVycygkZWFzeS0+cmVzcG9uc2UpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBleGNlcHRpb24gd2l0aCB0aGUgaGFuZGxlIGFuZCB0cmlnZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgY3VybCBoZWFkZXIgd3JpdGUgZXJyb3IgYnkgcmV0dXJuaW5nIDAuCiAgICAgICAgICAgICAgICAgICAgICAgICRlYXN5LT5vbkhlYWRlcnNFeGNlcHRpb24gPSAkZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkc3RhcnRpbmdSZXNwb25zZSkgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICRlYXN5LT5oZWFkZXJzID0gWyR2YWx1ZV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZWFzeS0+aGVhZGVyc1tdID0gJHZhbHVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gXHN0cmxlbigkaCk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmhhbmRsZXMgYXMgJGlkID0+ICRoYW5kbGUpIHsKICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKICAgICAgICAgICAgICAgIFxjdXJsX2Nsb3NlKCRoYW5kbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1bnNldCgkdGhpcy0+aGFuZGxlc1skaWRdKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKaW50ZXJmYWNlIEN1cmxGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGNVUkwgaGFuZGxlIHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zIFRyYW5zZmVyIG9wdGlvbnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIHdoZW4gYW4gb3B0aW9uIGNhbm5vdCBiZSBhcHBsaWVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBFYXN5SGFuZGxlOwoKICAgIC8qKgogICAgICogUmVsZWFzZSBhbiBlYXN5IGhhbmRsZSwgYWxsb3dpbmcgaXQgdG8gYmUgcmV1c2VkIG9yIGNsb3NlZC4KICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgY2FsbCB1bnNldCBvbiB0aGUgZWFzeSBoYW5kbGUncyAiaGFuZGxlIiBwcm9wZXJ0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFRyYW5zcG9ydFNoYXJpbmc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBjVVJMIGVhc3kgaGFuZGxlcyBhcyBhIHRyYW5zcG9ydCBsYXllci4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybEhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgImNsaWVudCIga2V5IG9mIHRoZSByZXF1ZXN0LgogKgogKiBAZmluYWwKICovCmNsYXNzIEN1cmxIYW5kbGVyCnsKICAgIC8qKgogICAgICogQHZhciBDdXJsRmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRmYWN0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBDdXJsU2hhcmVIYW5kbGVTdGF0ZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHNoYXJlSGFuZGxlU3RhdGU7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBoYW5kbGVfZmFjdG9yeTogT3B0aW9uYWwgY3VybCBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIGNVUkwgaGFuZGxlcy4KICAgICAqIC0gdHJhbnNwb3J0X3NoYXJpbmc6IE9wdGlvbmFsIHRyYW5zcG9ydCBzaGFyaW5nIG1vZGUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5e2hhbmRsZV9mYWN0b3J5PzogP0N1cmxGYWN0b3J5SW50ZXJmYWNlLCB0cmFuc3BvcnRfc2hhcmluZz86IG1peGVkfSAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBoYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIEN1cmxTaGFyZUhhbmRsZVN0YXRlOjphc3NlcnROb1JlcXVpcmVkU2hhcmluZ0N1c3RvbUZhY3RvcnlDb25mbGljdCgkb3B0aW9ucywgJ0N1cmxIYW5kbGVyJyk7CiAgICAgICAgJHRyYW5zcG9ydFNoYXJpbmcgPSAkb3B0aW9uc1sndHJhbnNwb3J0X3NoYXJpbmcnXSA/PyBudWxsOwogICAgICAgICRzaGFyaW5nTW9kZSA9IEN1cmxTaGFyZUhhbmRsZVN0YXRlOjpub3JtYWxpemVNb2RlKCR0cmFuc3BvcnRTaGFyaW5nLCAndHJhbnNwb3J0X3NoYXJpbmcnKTsKCiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdoYW5kbGVfZmFjdG9yeScsICRvcHRpb25zKSAmJiAkb3B0aW9uc1snaGFuZGxlX2ZhY3RvcnknXSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c2hhcmVIYW5kbGVTdGF0ZSA9IG51bGw7CiAgICAgICAgICAgICR0aGlzLT5mYWN0b3J5ID0gJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J107CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2hhcmVIYW5kbGVTdGF0ZSA9ICRzaGFyaW5nTW9kZSAhPT0gVHJhbnNwb3J0U2hhcmluZzo6Tk9ORQogICAgICAgICAgICA/IEN1cmxTaGFyZUhhbmRsZVN0YXRlOjpmcm9tT3B0aW9uKCR0cmFuc3BvcnRTaGFyaW5nKQogICAgICAgICAgICA6IG51bGw7CgogICAgICAgICR0aGlzLT5mYWN0b3J5ID0gJHRoaXMtPnNoYXJlSGFuZGxlU3RhdGUgIT09IG51bGwKICAgICAgICAgICAgPyBuZXcgQ3VybEZhY3RvcnkoMywgJHRoaXMtPnNoYXJlSGFuZGxlU3RhdGUtPm1vZGUsICR0aGlzLT5zaGFyZUhhbmRsZVN0YXRlLT5oYW5kbGUpCiAgICAgICAgICAgIDogbmV3IEN1cmxGYWN0b3J5KDMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIFx1c2xlZXAoJG9wdGlvbnNbJ2RlbGF5J10gKiAxMDAwKTsKICAgICAgICB9CgogICAgICAgICRlYXN5ID0gJHRoaXMtPmZhY3RvcnktPmNyZWF0ZSgkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIFxjdXJsX2V4ZWMoJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGVhc3ktPmVycm5vID0gXGN1cmxfZXJybm8oJGVhc3ktPmhhbmRsZSk7CgogICAgICAgIHJldHVybiBDdXJsRmFjdG9yeTo6ZmluaXNoKCR0aGlzLCAkZWFzeSwgJHRoaXMtPmZhY3RvcnkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgQ2xvc3VyZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcVHJhbnNwb3J0U2hhcmluZzsKdXNlIEd1enpsZUh0dHBcVXRpbHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogUmV0dXJucyBhbiBhc3luY2hyb25vdXMgcmVzcG9uc2UgdXNpbmcgY3VybF9tdWx0aV8qIGZ1bmN0aW9ucy4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybE11bHRpSGFuZGxlciwgY3VzdG9tIGN1cmwgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGFzIGFuCiAqIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1cmwgb3B0aW9uIGNvbnN0YW50cyBtYXBwaW5nIHRvIHZhbHVlcyBpbiB0aGUKICogKipjdXJsKioga2V5IG9mIHRoZSBwcm92aWRlZCByZXF1ZXN0IG9wdGlvbnMuCiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgQ3VybE11bHRpSGFuZGxlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQ3VybEZhY3RvcnlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkZmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgQ3VybFNoYXJlSGFuZGxlU3RhdGV8bnVsbAogICAgICovCiAgICBwcml2YXRlICRzaGFyZUhhbmRsZVN0YXRlOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkc2VsZWN0VGltZW91dDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFdpbGwgYmUgaGlnaGVyIHRoYW4gMCB3aGVuIGBjdXJsX211bHRpX2V4ZWNgIGlzIHN0aWxsIHJ1bm5pbmcuCiAgICAgKi8KICAgIHByaXZhdGUgJGFjdGl2ZSA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5IFJlcXVlc3QgZW50cnkgaGFuZGxlcywgaW5kZXhlZCBieSBoYW5kbGUgaWQgaW4gYGFkZFJlcXVlc3RgLgogICAgICoKICAgICAqIEBzZWUgQ3VybE11bHRpSGFuZGxlcjo6YWRkUmVxdWVzdAogICAgICovCiAgICBwcml2YXRlICRoYW5kbGVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PGludCwgZmxvYXQ+IEFuIGFycmF5IG9mIGRlbGF5IHRpbWVzLCBpbmRleGVkIGJ5IGhhbmRsZSBpZCBpbiBgYWRkUmVxdWVzdGAuCiAgICAgKgogICAgICogQHNlZSBDdXJsTXVsdGlIYW5kbGVyOjphZGRSZXF1ZXN0CiAgICAgKi8KICAgIHByaXZhdGUgJGRlbGF5cyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxtaXhlZD4gQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgQ1VSTE1PUFRfKiBvcHRpb25zIGFuZCBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgY3VybF9tdWx0aV9zZXRvcHQoKQogICAgICovCiAgICBwcml2YXRlICRvcHRpb25zID0gW107CgogICAgLyoqIEB2YXIgcmVzb3VyY2V8XEN1cmxNdWx0aUhhbmRsZSAqLwogICAgcHJpdmF0ZSAkX21oOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGV4ZWN1dGluZ011bHRpID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PGludCwgRWFzeUhhbmRsZT4KICAgICAqLwogICAgcHJpdmF0ZSAkZGVmZXJyZWRDYW5jZWxzID0gW107CgogICAgLyoqCiAgICAgKiBUaGlzIGhhbmRsZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBoYW5kbGVfZmFjdG9yeTogQW4gb3B0aW9uYWwgZmFjdG9yeSAgdXNlZCB0byBjcmVhdGUgY3VybCBoYW5kbGVzCiAgICAgKiAtIHRyYW5zcG9ydF9zaGFyaW5nOiBPcHRpb25hbCB0cmFuc3BvcnQgc2hhcmluZyBtb2RlLgogICAgICogLSBzZWxlY3RfdGltZW91dDogT3B0aW9uYWwgdGltZW91dCAoaW4gc2Vjb25kcykgdG8gYmxvY2sgYmVmb3JlIHRpbWluZwogICAgICogICBvdXQgd2hpbGUgc2VsZWN0aW5nIGN1cmwgaGFuZGxlcy4gRGVmYXVsdHMgdG8gMSBzZWNvbmQuCiAgICAgKiAtIG9wdGlvbnM6IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIENVUkxNT1BUXyogb3B0aW9ucyBhbmQKICAgICAqICAgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIGN1cmxfbXVsdGlfc2V0b3B0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgQ3VybFNoYXJlSGFuZGxlU3RhdGU6OmFzc2VydE5vUmVxdWlyZWRTaGFyaW5nQ3VzdG9tRmFjdG9yeUNvbmZsaWN0KCRvcHRpb25zLCAnQ3VybE11bHRpSGFuZGxlcicpOwogICAgICAgICR0cmFuc3BvcnRTaGFyaW5nID0gJG9wdGlvbnNbJ3RyYW5zcG9ydF9zaGFyaW5nJ10gPz8gbnVsbDsKICAgICAgICAkc2hhcmluZ01vZGUgPSBDdXJsU2hhcmVIYW5kbGVTdGF0ZTo6bm9ybWFsaXplTW9kZSgkdHJhbnNwb3J0U2hhcmluZywgJ3RyYW5zcG9ydF9zaGFyaW5nJyk7CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygnaGFuZGxlX2ZhY3RvcnknLCAkb3B0aW9ucykgJiYgJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10gIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPnNoYXJlSGFuZGxlU3RhdGUgPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+ZmFjdG9yeSA9ICRvcHRpb25zWydoYW5kbGVfZmFjdG9yeSddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zaGFyZUhhbmRsZVN0YXRlID0gJHNoYXJpbmdNb2RlICE9PSBUcmFuc3BvcnRTaGFyaW5nOjpOT05FCiAgICAgICAgICAgICAgICA/IEN1cmxTaGFyZUhhbmRsZVN0YXRlOjpmcm9tT3B0aW9uKCR0cmFuc3BvcnRTaGFyaW5nKQogICAgICAgICAgICAgICAgOiBudWxsOwoKICAgICAgICAgICAgJHRoaXMtPmZhY3RvcnkgPSAkdGhpcy0+c2hhcmVIYW5kbGVTdGF0ZSAhPT0gbnVsbAogICAgICAgICAgICAgICAgPyBuZXcgQ3VybEZhY3RvcnkoNTAsICR0aGlzLT5zaGFyZUhhbmRsZVN0YXRlLT5tb2RlLCAkdGhpcy0+c2hhcmVIYW5kbGVTdGF0ZS0+aGFuZGxlKQogICAgICAgICAgICAgICAgOiBuZXcgQ3VybEZhY3RvcnkoNTApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzZWxlY3RfdGltZW91dCddKSkgewogICAgICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9ICRvcHRpb25zWydzZWxlY3RfdGltZW91dCddOwogICAgICAgIH0gZWxzZWlmICgkc2VsZWN0VGltZW91dCA9IFV0aWxzOjpnZXRlbnYoJ0dVWlpMRV9DVVJMX1NFTEVDVF9USU1FT1VUJykpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuMicsICdUaGUgR1VaWkxFX0NVUkxfU0VMRUNUX1RJTUVPVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSAic2VsZWN0X3RpbWVvdXQiIG9wdGlvbiBpbnN0ZWFkLicpOwogICAgICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9IChpbnQpICRzZWxlY3RUaW1lb3V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zZWxlY3RUaW1lb3V0ID0gMTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5vcHRpb25zID0gJG9wdGlvbnNbJ29wdGlvbnMnXSA/PyBbXTsKCiAgICAgICAgLy8gdW5zZXR0aW5nIHRoZSBwcm9wZXJ0eSBmb3JjZXMgdGhlIGZpcnN0IGFjY2VzcyB0byBnbyB0aHJvdWdoCiAgICAgICAgLy8gX19nZXQoKS4KICAgICAgICB1bnNldCgkdGhpcy0+X21oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlfFxDdXJsTXVsdGlIYW5kbGUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIHdoZW4gYW5vdGhlciBmaWVsZCBhcyBgX21oYCB3aWxsIGJlIGdvdHRlbgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiAgICAgICB3aGVuIGN1cmwgY2FuIG5vdCBpbml0aWFsaXplIGEgbXVsdGkgaGFuZGxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICBpZiAoJG5hbWUgIT09ICdfbWgnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigiQ2FuIG5vdCBnZXQgb3RoZXIgcHJvcGVydHkgYXMgJ19taCcuIik7CiAgICAgICAgfQoKICAgICAgICAkbXVsdGlIYW5kbGUgPSBcY3VybF9tdWx0aV9pbml0KCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJG11bHRpSGFuZGxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2FuIG5vdCBpbml0aWFsaXplIGN1cmwgbXVsdGkgaGFuZGxlLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9taCA9ICRtdWx0aUhhbmRsZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPm9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgLy8gQSB3YXJuaW5nIGlzIHJhaXNlZCBpbiBjYXNlIG9mIGEgd3Jvbmcgb3B0aW9uLgogICAgICAgICAgICBjdXJsX211bHRpX3NldG9wdCgkdGhpcy0+X21oLCAkb3B0aW9uLCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbWg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgXGN1cmxfbXVsdGlfY2xvc2UoJHRoaXMtPl9taCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICBlcnJvcl9sb2coJ1tNQVNdICcgLiAkZS0+Z2V0TWVzc2FnZSgpKTsKICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+X21oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGVhc3kgPSAkdGhpcy0+ZmFjdG9yeS0+Y3JlYXRlKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgJGlkID0gKGludCkgJGVhc3ktPmhhbmRsZTsKCiAgICAgICAgJHByb21pc2UgPSBuZXcgUHJvbWlzZSgKICAgICAgICAgICAgWyR0aGlzLCAnZXhlY3V0ZSddLAogICAgICAgICAgICBmdW5jdGlvbiAoKSB1c2UgKCRpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jYW5jZWwoJGlkKTsKICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgICR0aGlzLT5hZGRSZXF1ZXN0KFsnZWFzeScgPT4gJGVhc3ksICdkZWZlcnJlZCcgPT4gJHByb21pc2VdKTsKCiAgICAgICAgcmV0dXJuICRwcm9taXNlOwogICAgfQoKICAgIC8qKgogICAgICogVGlja3MgdGhlIGN1cmwgZXZlbnQgbG9vcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpY2soKTogdm9pZAogICAgewogICAgICAgIC8vIEFkZCBhbnkgZGVsYXllZCBoYW5kbGVzIGlmIG5lZWRlZC4KICAgICAgICBpZiAoJHRoaXMtPmRlbGF5cykgewogICAgICAgICAgICAkY3VycmVudFRpbWUgPSBVdGlsczo6Y3VycmVudFRpbWUoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlbGF5cyBhcyAkaWQgPT4gJGRlbGF5KSB7CiAgICAgICAgICAgICAgICBpZiAoJGN1cnJlbnRUaW1lID49ICRkZWxheSkgewogICAgICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5kZWxheXNbJGlkXSk7CiAgICAgICAgICAgICAgICAgICAgXGN1cmxfbXVsdGlfYWRkX2hhbmRsZSgKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9taCwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmhhbmRsZXNbJGlkXVsnZWFzeSddLT5oYW5kbGUKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSdW4gY3VybF9tdWx0aV9leGVjIGluIHRoZSBxdWV1ZSB0byBlbmFibGUgb3RoZXIgYXN5bmMgdGFza3MgdG8gcnVuCiAgICAgICAgUFxVdGlsczo6cXVldWUoKS0+YWRkKENsb3N1cmU6OmZyb21DYWxsYWJsZShbJHRoaXMsICd0aWNrSW5RdWV1ZSddKSk7CgogICAgICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgdGFzayBxdWV1ZSB3aGljaCBtYXkgYWRkIGFkZGl0aW9uYWwgcmVxdWVzdHMuCiAgICAgICAgUFxVdGlsczo6cXVldWUoKS0+cnVuKCk7CgogICAgICAgIGlmICgkdGhpcy0+YWN0aXZlICYmIFxjdXJsX211bHRpX3NlbGVjdCgkdGhpcy0+X21oLCAkdGhpcy0+c2VsZWN0VGltZW91dCkgPT09IC0xKSB7CiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSB1c2xlZXAgaWYgYSBzZWxlY3QgcmV0dXJucyAtMS4KICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTYxMTQxCiAgICAgICAgICAgIFx1c2xlZXAoMjUwKTsKICAgICAgICB9CgogICAgICAgIGRvIHsKICAgICAgICAgICAgJHRoaXMtPmV4ZWN1dGluZ011bHRpID0gdHJ1ZTsKCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkZXhlYyA9IFxjdXJsX211bHRpX2V4ZWMoJHRoaXMtPl9taCwgJHRoaXMtPmFjdGl2ZSk7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZXhlY3V0aW5nTXVsdGkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICR0aGlzLT5jbGVhbnVwRGVmZXJyZWRDYW5jZWxzKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFByZXZlbnQgYnVzeSBsb29waW5nIGZvciBzbG93IEhUVFAgcmVxdWVzdHMuCiAgICAgICAgICAgIGlmICgkZXhlYyA9PT0gXENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgewogICAgICAgICAgICAgICAgXGN1cmxfbXVsdGlfc2VsZWN0KCR0aGlzLT5fbWgsICR0aGlzLT5zZWxlY3RUaW1lb3V0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKCRleGVjID09PSBcQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKTsKCiAgICAgICAgJHRoaXMtPnByb2Nlc3NNZXNzYWdlcygpOwogICAgfQoKICAgIC8qKgogICAgICogUnVucyBcY3VybF9tdWx0aV9leGVjKCkgaW5zaWRlIHRoZSBldmVudCBsb29wLCB0byBwcmV2ZW50IGJ1c3kgbG9vcGluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRpY2tJblF1ZXVlKCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+ZXhlY3V0aW5nTXVsdGkgPSB0cnVlOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkZXhlYyA9IFxjdXJsX211bHRpX2V4ZWMoJHRoaXMtPl9taCwgJHRoaXMtPmFjdGl2ZSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgJHRoaXMtPmV4ZWN1dGluZ011bHRpID0gZmFsc2U7CiAgICAgICAgICAgICR0aGlzLT5jbGVhbnVwRGVmZXJyZWRDYW5jZWxzKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4ZWMgPT09IFxDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKICAgICAgICAgICAgXGN1cmxfbXVsdGlfc2VsZWN0KCR0aGlzLT5fbWgsIDApOwogICAgICAgICAgICBQXFV0aWxzOjpxdWV1ZSgpLT5hZGQoQ2xvc3VyZTo6ZnJvbUNhbGxhYmxlKFskdGhpcywgJ3RpY2tJblF1ZXVlJ10pKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW5zIHVudGlsIGFsbCBvdXRzdGFuZGluZyBjb25uZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKTogdm9pZAogICAgewogICAgICAgICRxdWV1ZSA9IFBcVXRpbHM6OnF1ZXVlKCk7CgogICAgICAgIHdoaWxlICgkdGhpcy0+aGFuZGxlcyB8fCAhJHF1ZXVlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRyYW5zZmVycywgdGhlbiBzbGVlcCBmb3IgdGhlIG5leHQgZGVsYXkKICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWN0aXZlICYmICR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgICAgIFx1c2xlZXAoJHRoaXMtPnRpbWVUb05leHQoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnRpY2soKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRSZXF1ZXN0KGFycmF5ICRlbnRyeSk6IHZvaWQKICAgIHsKICAgICAgICAkZWFzeSA9ICRlbnRyeVsnZWFzeSddOwogICAgICAgICRpZCA9IChpbnQpICRlYXN5LT5oYW5kbGU7CiAgICAgICAgJHRoaXMtPmhhbmRsZXNbJGlkXSA9ICRlbnRyeTsKICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIFxjdXJsX211bHRpX2FkZF9oYW5kbGUoJHRoaXMtPl9taCwgJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmRlbGF5c1skaWRdID0gVXRpbHM6OmN1cnJlbnRUaW1lKCkgKyAoJGVhc3ktPm9wdGlvbnNbJ2RlbGF5J10gLyAxMDAwKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYW5jZWxzIGEgaGFuZGxlIGZyb20gc2VuZGluZyBhbmQgcmVtb3ZlcyByZWZlcmVuY2VzIHRvIGl0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGlkIEhhbmRsZSBJRCB0byBjYW5jZWwgYW5kIHJlbW92ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhbmNlbCgkaWQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFpc19pbnQoJGlkKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy40JywgJ05vdCBwYXNzaW5nIGFuIGludCB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDYW5ub3QgY2FuY2VsIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZC4KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5oYW5kbGVzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRlYXN5ID0gJHRoaXMtPmhhbmRsZXNbJGlkXVsnZWFzeSddOwogICAgICAgIHVuc2V0KCR0aGlzLT5kZWxheXNbJGlkXSwgJHRoaXMtPmhhbmRsZXNbJGlkXSk7CgogICAgICAgIGlmICgkdGhpcy0+ZXhlY3V0aW5nTXVsdGkpIHsKICAgICAgICAgICAgJHRoaXMtPmRlZmVycmVkQ2FuY2Vsc1skaWRdID0gJGVhc3k7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jbGVhbnVwQ2FuY2VsbGVkSGFuZGxlKCRlYXN5KTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbGVhbnVwRGVmZXJyZWRDYW5jZWxzKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmRlZmVycmVkQ2FuY2VscyA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+ZGVmZXJyZWRDYW5jZWxzOwogICAgICAgICR0aGlzLT5kZWZlcnJlZENhbmNlbHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGVudHJpZXMgYXMgJGVhc3kpIHsKICAgICAgICAgICAgJHRoaXMtPmNsZWFudXBDYW5jZWxsZWRIYW5kbGUoJGVhc3kpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNsZWFudXBDYW5jZWxsZWRIYW5kbGUoRWFzeUhhbmRsZSAkZWFzeSk6IHZvaWQKICAgIHsKICAgICAgICAkaGFuZGxlID0gJGVhc3ktPmhhbmRsZTsKICAgICAgICBcY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCR0aGlzLT5fbWgsICRoYW5kbGUpOwoKICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICBcY3VybF9jbG9zZSgkaGFuZGxlKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZXMoKTogdm9pZAogICAgewogICAgICAgIHdoaWxlICgkZG9uZSA9IFxjdXJsX211bHRpX2luZm9fcmVhZCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICBpZiAoJGRvbmVbJ21zZyddICE9PSBcQ1VSTE1TR19ET05FKSB7CiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIG5vdCBkb25lLCB0aGVuIGl0IHdvdWxkIGJlIHByZW1hdHVyZSB0byByZW1vdmUgdGhlIGhhbmRsZS4gcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMjg5MiNpc3N1ZWNvbW1lbnQtOTQ1MTUwMjE2CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzc2V0KCRkb25lWydoYW5kbGUnXSkpIHsKICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgUEhQIGlzc3VlIHdoZXJlIGNhbmNlbGxlZCB0cmFuc2ZlcnMgbWF5IG9taXQgdGhlIGhhbmRsZS4KICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIG9uY2Ugd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgUEhQIHZlcnNpb25zIGJlZm9yZSB0aGUgZml4IGluCiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGhwL3BocC1zcmMvcHVsbC8xNjMwMi4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpZCA9IChpbnQpICRkb25lWydoYW5kbGUnXTsKICAgICAgICAgICAgXGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgkdGhpcy0+X21oLCAkZG9uZVsnaGFuZGxlJ10pOwoKICAgICAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+aGFuZGxlc1skaWRdKSkgewogICAgICAgICAgICAgICAgLy8gUHJvYmFibHkgd2FzIGNhbmNlbGxlZC4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZW50cnkgPSAkdGhpcy0+aGFuZGxlc1skaWRdOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+aGFuZGxlc1skaWRdLCAkdGhpcy0+ZGVsYXlzWyRpZF0pOwogICAgICAgICAgICAkZW50cnlbJ2Vhc3knXS0+ZXJybm8gPSAkZG9uZVsncmVzdWx0J107CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IEN1cmxGYWN0b3J5OjpmaW5pc2goJHRoaXMsICRlbnRyeVsnZWFzeSddLCAkdGhpcy0+ZmFjdG9yeSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICRlbnRyeVsnZGVmZXJyZWQnXS0+cmVqZWN0KCRlKTsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudHJ5WydkZWZlcnJlZCddLT5yZXNvbHZlKCRyZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRpbWVUb05leHQoKTogaW50CiAgICB7CiAgICAgICAgJGN1cnJlbnRUaW1lID0gVXRpbHM6OmN1cnJlbnRUaW1lKCk7CiAgICAgICAgJG5leHRUaW1lID0gXFBIUF9JTlRfTUFYOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWxheXMgYXMgJHRpbWUpIHsKICAgICAgICAgICAgaWYgKCR0aW1lIDwgJG5leHRUaW1lKSB7CiAgICAgICAgICAgICAgICAkbmV4dFRpbWUgPSAkdGltZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgoaW50KSBcbWF4KDAsICRuZXh0VGltZSAtICRjdXJyZW50VGltZSkpICogMTAwMDAwMDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlShareHandleState.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxUcmFuc3BvcnRTaGFyaW5nOwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgQ3VybFNoYXJlSGFuZGxlU3RhdGUKewogICAgLyoqCiAgICAgKiBAdmFyIHJlc291cmNlfFxDdXJsU2hhcmVIYW5kbGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgJGhhbmRsZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbW9kZTsKCiAgICAvKioKICAgICAqIEBwYXJhbSByZXNvdXJjZXxcQ3VybFNoYXJlSGFuZGxlfG51bGwgJGhhbmRsZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkbW9kZSwgJGhhbmRsZSkKICAgIHsKICAgICAgICAkdGhpcy0+bW9kZSA9ICRtb2RlOwogICAgICAgICR0aGlzLT5oYW5kbGUgPSAkaGFuZGxlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRzaGFyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbU9wdGlvbigkc2hhcmluZyk6ID9zZWxmCiAgICB7CiAgICAgICAgaWYgKCRzaGFyaW5nIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJHNoYXJpbmc7CiAgICAgICAgfQoKICAgICAgICAkbW9kZSA9IHNlbGY6Om5vcm1hbGl6ZU1vZGUoJHNoYXJpbmcsICd0cmFuc3BvcnRfc2hhcmluZycpOwogICAgICAgIGlmICgkbW9kZSA9PT0gVHJhbnNwb3J0U2hhcmluZzo6Tk9ORSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICgkbW9kZSA9PT0gVHJhbnNwb3J0U2hhcmluZzo6SEFORExFUl9QUkVGRVIpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUhhbmRsZXJTaGFyZU9yTnVsbCgkbW9kZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlSGFuZGxlclNoYXJlKCRtb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkc2hhcmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZU1vZGUoJHNoYXJpbmcsIHN0cmluZyAkb3B0aW9uKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRzaGFyaW5nIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJHNoYXJpbmctPm1vZGU7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNoYXJpbmcgPT09IG51bGwgfHwgJHNoYXJpbmcgPT09IFRyYW5zcG9ydFNoYXJpbmc6Ok5PTkUpIHsKICAgICAgICAgICAgcmV0dXJuIFRyYW5zcG9ydFNoYXJpbmc6Ok5PTkU7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNoYXJpbmcgPT09IFRyYW5zcG9ydFNoYXJpbmc6OkhBTkRMRVJfUFJFRkVSIHx8ICRzaGFyaW5nID09PSBUcmFuc3BvcnRTaGFyaW5nOjpIQU5ETEVSX1JFUVVJUkUpIHsKICAgICAgICAgICAgcmV0dXJuICRzaGFyaW5nOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoCiAgICAgICAgICAgICdUaGUgIiVzIiBvcHRpb24gbXVzdCBiZSBudWxsIG9yIGEgR3V6emxlSHR0cFxcVHJhbnNwb3J0U2hhcmluZzo6KiBjb25zdGFudDsgcmVjZWl2ZWQgJXMuJywKICAgICAgICAgICAgJG9wdGlvbiwKICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRzaGFyaW5nKQogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXNzZXJ0Tm9SZXF1aXJlZFNoYXJpbmdDdXN0b21GYWN0b3J5Q29uZmxpY3QoYXJyYXkgJG9wdGlvbnMsIHN0cmluZyAkaGFuZGxlck5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygnaGFuZGxlX2ZhY3RvcnknLCAkb3B0aW9ucykgfHwgJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10gPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJG1vZGUgPSBzZWxmOjpub3JtYWxpemVNb2RlKCRvcHRpb25zWyd0cmFuc3BvcnRfc2hhcmluZyddID8/IG51bGwsICd0cmFuc3BvcnRfc2hhcmluZycpOwogICAgICAgIGlmICgkbW9kZSAhPT0gVHJhbnNwb3J0U2hhcmluZzo6SEFORExFUl9SRVFVSVJFKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKAogICAgICAgICAgICAnVGhlICJ0cmFuc3BvcnRfc2hhcmluZyIgJXMgb3B0aW9uIGNhbm5vdCByZXF1aXJlIHNoYXJpbmcgd2l0aCBhIGN1c3RvbSAiaGFuZGxlX2ZhY3RvcnkiIGJlY2F1c2UgR3V6emxlIGNhbm5vdCBlbnN1cmUgdGhhdCB0aGUgY3VzdG9tIGZhY3RvcnkgYXBwbGllcyBDVVJMT1BUX1NIQVJFLicsCiAgICAgICAgICAgICRoYW5kbGVyTmFtZQogICAgICAgICkpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZXJTaGFyZU9yTnVsbChzdHJpbmcgJG1vZGUpOiA/c2VsZgogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVIYW5kbGVyU2hhcmUoJG1vZGUpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZXJTaGFyZShzdHJpbmcgJG1vZGUpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCFcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3NoYXJlX2luaXQnKSB8fCAhXGZ1bmN0aW9uX2V4aXN0cygnY3VybF9zaGFyZV9zZXRvcHQnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlICJ0cmFuc3BvcnRfc2hhcmluZyIgb3B0aW9uIHJlcXVpcmVzIGNVUkwgc2hhcmUgc3VwcG9ydC4nKTsKICAgICAgICB9CgogICAgICAgIHNlbGY6OnJlcXVpcmVDdXJsQ29uc3RhbnQoJ0NVUkxPUFRfU0hBUkUnKTsKICAgICAgICAkc2hhcmVPcHRpb24gPSBzZWxmOjpyZXF1aXJlQ3VybENvbnN0YW50KCdDVVJMU0hPUFRfU0hBUkUnKTsKICAgICAgICAkbG9ja3MgPSBzZWxmOjpoYW5kbGVyTG9ja3MoJG1vZGUpOwogICAgICAgICRoYW5kbGUgPSBjdXJsX3NoYXJlX2luaXQoKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yZWFjaCAoJGxvY2tzIGFzICRsb2NrKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRzdWNjZXNzID0gY3VybF9zaGFyZV9zZXRvcHQoJGhhbmRsZSwgJHNoYXJlT3B0aW9uLCAkbG9jayk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb25maWd1cmUgY1VSTCBzaGFyZSBoYW5kbGU6ICcuJGUtPmdldE1lc3NhZ2UoKSwgMCwgJGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVW5hYmxlIHRvIGNvbmZpZ3VyZSBjVVJMIHNoYXJlIGhhbmRsZSB3aXRoIGxvY2sgZGF0YSAlZC4nLCAkbG9jaykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICBzZWxmOjpjbG9zZUhhbmRsZXJTaGFyZUhhbmRsZU9uUGhwNygkaGFuZGxlKTsKCiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRtb2RlLCAkaGFuZGxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50W10KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGFuZGxlckxvY2tzKHN0cmluZyAkbW9kZSk6IGFycmF5CiAgICB7CiAgICAgICAgQ3VybFZlcnNpb246OmVuc3VyZUhhbmRsZXJTaGFyaW5nU3VwcG9ydGVkKCk7CgogICAgICAgIGlmICgkbW9kZSA9PT0gVHJhbnNwb3J0U2hhcmluZzo6SEFORExFUl9SRVFVSVJFKSB7CiAgICAgICAgICAgIEN1cmxWZXJzaW9uOjplbnN1cmVTc2xTZXNzaW9uU2hhcmluZ1N1cHBvcnRlZCgpOwogICAgICAgIH0KCiAgICAgICAgJGxvY2tzID0gWwogICAgICAgICAgICBzZWxmOjpyZXF1aXJlQ3VybENvbnN0YW50KCdDVVJMX0xPQ0tfREFUQV9ETlMnKSwKICAgICAgICBdOwoKICAgICAgICBpZiAoQ3VybFZlcnNpb246OnN1cHBvcnRzU3NsU2Vzc2lvblNoYXJpbmcoKSkgewogICAgICAgICAgICAkbG9ja3NbXSA9IHNlbGY6OnJlcXVpcmVDdXJsQ29uc3RhbnQoJ0NVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxvY2tzOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlcXVpcmVDdXJsQ29uc3RhbnQoc3RyaW5nICRjb25zdGFudCk6IGludAogICAgewogICAgICAgIGlmICghXGRlZmluZWQoJGNvbnN0YW50KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgInRyYW5zcG9ydF9zaGFyaW5nIiBvcHRpb24gcmVxdWlyZXMgJXMsIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBpbnN0YWxsZWQgUEhQIGNVUkwgZXh0ZW5zaW9uLicsCiAgICAgICAgICAgICAgICAkY29uc3RhbnQKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWUgPSBcY29uc3RhbnQoJGNvbnN0YW50KTsKICAgICAgICBpZiAoIVxpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGNVUkwgY29uc3RhbnQgJXMgbXVzdCByZXNvbHZlIHRvIGFuIGludGVnZXIuJywgJGNvbnN0YW50KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlfFxDdXJsU2hhcmVIYW5kbGUgJGhhbmRsZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjbG9zZUhhbmRsZXJTaGFyZUhhbmRsZU9uUGhwNygkaGFuZGxlKTogdm9pZAogICAgewogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCAmJiBcaXNfcmVzb3VyY2UoJGhhbmRsZSkpIHsKICAgICAgICAgICAgY3VybF9zaGFyZV9jbG9zZSgkaGFuZGxlKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlVersion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7CgovKioKICogQGludGVybmFsCiAqLwpmaW5hbCBjbGFzcyBDdXJsVmVyc2lvbgp7CiAgICBwcml2YXRlIGNvbnN0IE1JTl9WRVJTSU9OID0gJzcuMjEuMic7CgogICAgcHJpdmF0ZSBjb25zdCBUTFNfMTJfVkVSU0lPTiA9ICc3LjM0LjAnOwoKICAgIHByaXZhdGUgY29uc3QgVExTXzEzX1ZFUlNJT04gPSAnNy41Mi4wJzsKCiAgICBwcml2YXRlIGNvbnN0IEhBTkRMRVJfU0hBUklOR19WRVJTSU9OID0gJzcuMzUuMCc7CgogICAgcHJpdmF0ZSBjb25zdCBTU0xfU0VTU0lPTl9TSEFSSU5HX1ZFUlNJT04gPSAnOC42LjAnOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheXt2ZXJzaW9uOiBzdHJpbmcsIGZlYXR1cmVzOiBpbnR9fGZhbHNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHZlcnNpb25JbmZvOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHNDdXJsSGFuZGxlcigpOiBib29sCiAgICB7CiAgICAgICAgJHZlcnNpb24gPSBzZWxmOjpnZXRWZXJzaW9uKCk7CgogICAgICAgIHJldHVybiAkdmVyc2lvbiAhPT0gbnVsbCAmJiBcdmVyc2lvbl9jb21wYXJlKCR2ZXJzaW9uLCBzZWxmOjpNSU5fVkVSU0lPTiwgJz49Jyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0c1RsczEyKCk6IGJvb2wKICAgIHsKICAgICAgICAkdmVyc2lvbiA9IHNlbGY6OmdldFZlcnNpb24oKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OnN1cHBvcnRzU3NsKCkKICAgICAgICAgICAgJiYgXGRlZmluZWQoJ0NVUkxfU1NMVkVSU0lPTl9UTFN2MV8yJykKICAgICAgICAgICAgJiYgJHZlcnNpb24gIT09IG51bGwKICAgICAgICAgICAgJiYgXHZlcnNpb25fY29tcGFyZSgkdmVyc2lvbiwgc2VsZjo6VExTXzEyX1ZFUlNJT04sICc+PScpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHNUbHMxMygpOiBib29sCiAgICB7CiAgICAgICAgJHZlcnNpb24gPSBzZWxmOjpnZXRWZXJzaW9uKCk7CgogICAgICAgIHJldHVybiBzZWxmOjpzdXBwb3J0c1NzbCgpCiAgICAgICAgICAgICYmIFxkZWZpbmVkKCdDVVJMX1NTTFZFUlNJT05fVExTdjFfMycpCiAgICAgICAgICAgICYmICR2ZXJzaW9uICE9PSBudWxsCiAgICAgICAgICAgICYmIFx2ZXJzaW9uX2NvbXBhcmUoJHZlcnNpb24sIHNlbGY6OlRMU18xM19WRVJTSU9OLCAnPj0nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRzSHR0cDIoKTogYm9vbAogICAgewogICAgICAgICR2ZXJzaW9uSW5mbyA9IHNlbGY6OmdldFZlcnNpb25JbmZvKCk7CgogICAgICAgIHJldHVybiBzZWxmOjpzdXBwb3J0c1RsczEyKCkKICAgICAgICAgICAgJiYgXGRlZmluZWQoJ0NVUkxfVkVSU0lPTl9IVFRQMicpCiAgICAgICAgICAgICYmICR2ZXJzaW9uSW5mbyAhPT0gbnVsbAogICAgICAgICAgICAmJiAwICE9PSAoXENVUkxfVkVSU0lPTl9IVFRQMiAmICR2ZXJzaW9uSW5mb1snZmVhdHVyZXMnXSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0c0hhbmRsZXJTaGFyaW5nKCk6IGJvb2wKICAgIHsKICAgICAgICAkdmVyc2lvbiA9IHNlbGY6OmdldFZlcnNpb24oKTsKCiAgICAgICAgcmV0dXJuICR2ZXJzaW9uICE9PSBudWxsICYmIFx2ZXJzaW9uX2NvbXBhcmUoJHZlcnNpb24sIHNlbGY6OkhBTkRMRVJfU0hBUklOR19WRVJTSU9OLCAnPj0nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuc3VyZUhhbmRsZXJTaGFyaW5nU3VwcG9ydGVkKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIXNlbGY6OnN1cHBvcnRzSGFuZGxlclNoYXJpbmcoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZigKICAgICAgICAgICAgICAgICdUaGUgInRyYW5zcG9ydF9zaGFyaW5nIiBvcHRpb24gcmVxdWlyZXMgbGliY3VybCAlcyBvciBoaWdoZXIgZm9yIGNVUkwgc2hhcmUgaGFuZGxlcy4nLAogICAgICAgICAgICAgICAgc2VsZjo6SEFORExFUl9TSEFSSU5HX1ZFUlNJT04KICAgICAgICAgICAgKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHNTc2xTZXNzaW9uU2hhcmluZygpOiBib29sCiAgICB7CiAgICAgICAgJHZlcnNpb24gPSBzZWxmOjpnZXRWZXJzaW9uKCk7CgogICAgICAgIHJldHVybiBzZWxmOjpzdXBwb3J0c1NzbCgpCiAgICAgICAgICAgICYmICR2ZXJzaW9uICE9PSBudWxsCiAgICAgICAgICAgICYmIFx2ZXJzaW9uX2NvbXBhcmUoJHZlcnNpb24sIHNlbGY6OlNTTF9TRVNTSU9OX1NIQVJJTkdfVkVSU0lPTiwgJz49Jyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVTc2xTZXNzaW9uU2hhcmluZ1N1cHBvcnRlZCgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFzZWxmOjpzdXBwb3J0c1NzbFNlc3Npb25TaGFyaW5nKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoCiAgICAgICAgICAgICAgICAnVGhlICJ0cmFuc3BvcnRfc2hhcmluZyIgb3B0aW9uIHJlcXVpcmVzIGxpYmN1cmwgJXMgb3IgaGlnaGVyIHdpdGggU1NMIHN1cHBvcnQgZm9yIFNTTCBzZXNzaW9uIHNoYXJpbmcuJywKICAgICAgICAgICAgICAgIHNlbGY6OlNTTF9TRVNTSU9OX1NIQVJJTkdfVkVSU0lPTgogICAgICAgICAgICApKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHNTc2woKTogYm9vbAogICAgewogICAgICAgICR2ZXJzaW9uSW5mbyA9IHNlbGY6OmdldFZlcnNpb25JbmZvKCk7CgogICAgICAgIHJldHVybiBcZGVmaW5lZCgnQ1VSTF9WRVJTSU9OX1NTTCcpCiAgICAgICAgICAgICYmICR2ZXJzaW9uSW5mbyAhPT0gbnVsbAogICAgICAgICAgICAmJiAwICE9PSAoXENVUkxfVkVSU0lPTl9TU0wgJiAkdmVyc2lvbkluZm9bJ2ZlYXR1cmVzJ10pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJHZlcnNpb25JbmZvID0gc2VsZjo6Z2V0VmVyc2lvbkluZm8oKTsKCiAgICAgICAgcmV0dXJuICR2ZXJzaW9uSW5mbyA9PT0gbnVsbCA/IG51bGwgOiAkdmVyc2lvbkluZm9bJ3ZlcnNpb24nXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7dmVyc2lvbjogc3RyaW5nLCBmZWF0dXJlczogaW50fXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25JbmZvKCk6ID9hcnJheQogICAgewogICAgICAgIGlmIChzZWxmOjokdmVyc2lvbkluZm8gPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKCFcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkgewogICAgICAgICAgICAgICAgc2VsZjo6JHZlcnNpb25JbmZvID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmVyc2lvbkluZm8gPSBcY3VybF92ZXJzaW9uKCk7CiAgICAgICAgICAgICAgICBzZWxmOjokdmVyc2lvbkluZm8gPSBcaXNfYXJyYXkoJHZlcnNpb25JbmZvKQogICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KCR2ZXJzaW9uSW5mb1sndmVyc2lvbiddLCAkdmVyc2lvbkluZm9bJ2ZlYXR1cmVzJ10pCiAgICAgICAgICAgICAgICAgICAgJiYgXGlzX3N0cmluZygkdmVyc2lvbkluZm9bJ3ZlcnNpb24nXSkKICAgICAgICAgICAgICAgICAgICAmJiBcaXNfaW50KCR2ZXJzaW9uSW5mb1snZmVhdHVyZXMnXSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbicgPT4gJHZlcnNpb25JbmZvWyd2ZXJzaW9uJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmVhdHVyZXMnID0+ICR2ZXJzaW9uSW5mb1snZmVhdHVyZXMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JHZlcnNpb25JbmZvID09PSBmYWxzZSA/IG51bGwgOiBzZWxmOjokdmVyc2lvbkluZm87CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQc3I3XFJlc3BvbnNlOwp1c2UgR3V6emxlSHR0cFxVdGlsczsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgY1VSTCBlYXN5IGhhbmRsZSBhbmQgdGhlIGRhdGEgaXQgcG9wdWxhdGVzLgogKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEVhc3lIYW5kbGUKewogICAgLyoqCiAgICAgKiBAdmFyIHJlc291cmNlfFxDdXJsSGFuZGxlIGNVUkwgcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljICRoYW5kbGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZSBXaGVyZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4KICAgICAqLwogICAgcHVibGljICRzaW5rOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheSBSZWNlaXZlZCBIVFRQIGhlYWRlcnMgc28gZmFyCiAgICAgKi8KICAgIHB1YmxpYyAkaGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBSZXNwb25zZUludGVyZmFjZXxudWxsIFJlY2VpdmVkIHJlc3BvbnNlIChpZiBhbnkpCiAgICAgKi8KICAgIHB1YmxpYyAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UgUmVxdWVzdCBiZWluZyBzZW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgUmVxdWVzdCBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyAkb3B0aW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgY1VSTCBlcnJvciBudW1iZXIgKGlmIGFueSkKICAgICAqLwogICAgcHVibGljICRlcnJubyA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsIEVmZmVjdGl2ZSBDVVJMT1BUX1BST1hZIHZhbHVlIHRoZSBoYW5kbGUgd2FzIGNyZWF0ZWQgd2l0aCAoaWYgYW55KQogICAgICovCiAgICBwdWJsaWMgJGVmZmVjdGl2ZVByb3h5OwoKICAgIC8qKgogICAgICogQHZhciBcVGhyb3dhYmxlfG51bGwgRXhjZXB0aW9uIGR1cmluZyBvbl9oZWFkZXJzIChpZiBhbnkpCiAgICAgKi8KICAgIHB1YmxpYyAkb25IZWFkZXJzRXhjZXB0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBcVGhyb3dhYmxlfG51bGwgRXhjZXB0aW9uIGR1cmluZyBjcmVhdGVSZXNwb25zZSAoaWYgYW55KQogICAgICovCiAgICBwdWJsaWMgJGNyZWF0ZVJlc3BvbnNlRXhjZXB0aW9uOwoKICAgIC8qKgogICAgICogQXR0YWNoIGEgcmVzcG9uc2UgdG8gdGhlIGVhc3kgaGFuZGxlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBoZWFkZXJzLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgbm8gaGVhZGVycyBoYXZlIGJlZW4gcmVjZWl2ZWQgb3IgdGhlIGZpcnN0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciBsaW5lIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc3BvbnNlID0gbnVsbDsKCiAgICAgICAgWyR2ZXIsICRzdGF0dXMsICRyZWFzb24sICRoZWFkZXJzXSA9IEhlYWRlclByb2Nlc3Nvcjo6cGFyc2VIZWFkZXJzKCR0aGlzLT5oZWFkZXJzKTsKCiAgICAgICAgJG5vcm1hbGl6ZWRLZXlzID0gVXRpbHM6Om5vcm1hbGl6ZUhlYWRlcktleXMoJGhlYWRlcnMpOwoKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydkZWNvZGVfY29udGVudCddKSAmJiBpc3NldCgkbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkpIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWVuY29kaW5nJ10gPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV07CiAgICAgICAgICAgIHVuc2V0KCRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddXSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ10pKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtbGVuZ3RoJ10gPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dOwoKICAgICAgICAgICAgICAgICRib2R5TGVuZ3RoID0gKGludCkgJHRoaXMtPnNpbmstPmdldFNpemUoKTsKICAgICAgICAgICAgICAgIGlmICgkYm9keUxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0gPSBbKHN0cmluZykgJGJvZHlMZW5ndGhdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQXR0YWNoIGEgcmVzcG9uc2UgdG8gdGhlIGVhc3kgaGFuZGxlIHdpdGggdGhlIHBhcnNlZCBoZWFkZXJzLgogICAgICAgICR0aGlzLT5yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgJHN0YXR1cywKICAgICAgICAgICAgJGhlYWRlcnMsCiAgICAgICAgICAgICR0aGlzLT5zaW5rLAogICAgICAgICAgICAkdmVyLAogICAgICAgICAgICAkcmVhc29uCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICAkbXNnID0gJG5hbWUgPT09ICdoYW5kbGUnID8gJ1RoZSBFYXN5SGFuZGxlIGhhcyBiZWVuIHJlbGVhc2VkJyA6ICdJbnZhbGlkIHByb3BlcnR5OiAnLiRuYW1lOwogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbXNnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxVdGlsczsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEhlYWRlclByb2Nlc3Nvcgp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEhUVFAgdmVyc2lvbiwgc3RhdHVzIGNvZGUsIHJlYXNvbiBwaHJhc2UsIGFuZCBoZWFkZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkaGVhZGVycwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmcsIDE6aW50LCAyOj9zdHJpbmcsIDM6YXJyYXl9CiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhhcnJheSAkaGVhZGVycyk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCRoZWFkZXJzID09PSBbXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0V4cGVjdGVkIGEgbm9uLWVtcHR5IGFycmF5IG9mIGhlYWRlciBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICAkaGVhZGVycyA9IHNlbGY6OmdldExhc3RIZWFkZXJCbG9jayhcYXJyYXlfdmFsdWVzKCRoZWFkZXJzKSk7CgogICAgICAgICRzdGF0dXNMaW5lID0gXGFycmF5X3NoaWZ0KCRoZWFkZXJzKTsKICAgICAgICBpZiAoJHN0YXR1c0xpbmUgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdFeHBlY3RlZCBhIG5vbi1lbXB0eSBhcnJheSBvZiBoZWFkZXIgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnRzID0gXGV4cGxvZGUoJyAnLCAkc3RhdHVzTGluZSwgMyk7CiAgICAgICAgJHZlcnNpb24gPSBcZXhwbG9kZSgnLycsICRwYXJ0c1swXSlbMV0gPz8gbnVsbDsKCiAgICAgICAgaWYgKCR2ZXJzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSFRUUCB2ZXJzaW9uIG1pc3NpbmcgZnJvbSBoZWFkZXIgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgJHN0YXR1cyA9ICRwYXJ0c1sxXSA/PyBudWxsOwoKICAgICAgICBpZiAoJHN0YXR1cyA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0hUVFAgc3RhdHVzIGNvZGUgbWlzc2luZyBmcm9tIGhlYWRlciBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxwcmVnX21hdGNoKCcvXlxkezN9JC8nLCAkc3RhdHVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0hUVFAgc3RhdHVzIGNvZGUgaXMgaW52YWxpZCcpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgewogICAgICAgICAgICBpZiAoXHN0cnBvcygkaGVhZGVyLCAnOicpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdIVFRQIGhlYWRlciBsaW5lIGlzIGludmFsaWQnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskdmVyc2lvbiwgKGludCkgJHN0YXR1cywgJHBhcnRzWzJdID8/IG51bGwsIFV0aWxzOjpoZWFkZXJzRnJvbUxpbmVzKCRoZWFkZXJzKV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LWxpc3Q8c3RyaW5nPiAkaGVhZGVycwogICAgICoKICAgICAqIEByZXR1cm4gbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldExhc3RIZWFkZXJCbG9jayhhcnJheSAkaGVhZGVycyk6IGFycmF5CiAgICB7CiAgICAgICAgJGxhc3RTdGF0dXNMaW5lID0gMDsKCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGluZGV4ID0+ICRsaW5lKSB7CiAgICAgICAgICAgIGlmIChccHJlZ19tYXRjaCgnL15IVFRQXC9cUytccysvaScsICRsaW5lKSkgewogICAgICAgICAgICAgICAgJGxhc3RTdGF0dXNMaW5lID0gJGluZGV4OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGFycmF5X3NsaWNlKCRoZWFkZXJzLCAkbGFzdFN0YXR1c0xpbmUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclN0YWNrOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlIGFzIFA7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcVHJhbnNmZXJTdGF0czsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBIYW5kbGVyIHRoYXQgcmV0dXJucyByZXNwb25zZXMgb3IgdGhyb3cgZXhjZXB0aW9ucyBmcm9tIGEgcXVldWUuCiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgTW9ja0hhbmRsZXIgaW1wbGVtZW50cyBcQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRxdWV1ZSA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0SW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGFzdFJlcXVlc3Q7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGxhc3RPcHRpb25zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGNhbGxhYmxlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkb25GdWxmaWxsZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGNhbGxhYmxlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkb25SZWplY3RlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgTW9ja0hhbmRsZXIgdGhhdCB1c2VzIHRoZSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgbGlzdCBvZgogICAgICogbWlkZGxld2FyZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fG51bGwgICAgJHF1ZXVlICAgICAgIEFycmF5IG9mIHJlc3BvbnNlcywgY2FsbGFibGVzLCBvciBleGNlcHRpb25zLgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJG9uRnVsZmlsbGVkIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZnVsZmlsbGVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJG9uUmVqZWN0ZWQgIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlV2l0aE1pZGRsZXdhcmUoP2FycmF5ICRxdWV1ZSA9IG51bGwsID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLCA/Y2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsKTogSGFuZGxlclN0YWNrCiAgICB7CiAgICAgICAgcmV0dXJuIEhhbmRsZXJTdGFjazo6Y3JlYXRlKG5ldyBzZWxmKCRxdWV1ZSwgJG9uRnVsZmlsbGVkLCAkb25SZWplY3RlZCkpOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIHBhc3NlZCBpbiB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5IG9mCiAgICAgKiB7QHNlZSBSZXNwb25zZUludGVyZmFjZX0gb2JqZWN0cywgRXhjZXB0aW9ucywKICAgICAqIGNhbGxhYmxlcywgb3IgUHJvbWlzZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGludCwgbWl4ZWQ+fG51bGwgJHF1ZXVlICAgICAgIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgYXBwZW5kIGZ1bmN0aW9uLCBhcyBhbiBpbmRleGVkIGFycmF5LgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgICAgICAgICAgJG9uRnVsZmlsbGVkIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZnVsZmlsbGVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgICAgICAgICAgJG9uUmVqZWN0ZWQgIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/YXJyYXkgJHF1ZXVlID0gbnVsbCwgP2NhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJG9uRnVsZmlsbGVkOwogICAgICAgICR0aGlzLT5vblJlamVjdGVkID0gJG9uUmVqZWN0ZWQ7CgogICAgICAgIGlmICgkcXVldWUpIHsKICAgICAgICAgICAgLy8gYXJyYXlfdmFsdWVzIGluY2x1ZGVkIGZvciBCQwogICAgICAgICAgICAkdGhpcy0+YXBwZW5kKC4uLmFycmF5X3ZhbHVlcygkcXVldWUpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIGlmICghJHRoaXMtPnF1ZXVlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ01vY2sgcXVldWUgaXMgZW1wdHknKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZGVsYXknXSkgJiYgXGlzX251bWVyaWMoJG9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIFx1c2xlZXAoKGludCkgJG9wdGlvbnNbJ2RlbGF5J10gKiAxMDAwKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5sYXN0UmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5sYXN0T3B0aW9ucyA9ICRvcHRpb25zOwogICAgICAgICRyZXNwb25zZSA9IFxhcnJheV9zaGlmdCgkdGhpcy0+cXVldWUpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgaWYgKCFcaXNfY2FsbGFibGUoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSgkcmVzcG9uc2UpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFJlcXVlc3RFeGNlcHRpb24oJG1zZywgJHJlcXVlc3QsICRyZXNwb25zZSwgJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX2NhbGxhYmxlKCRyZXNwb25zZSkpIHsKICAgICAgICAgICAgJHJlc3BvbnNlID0gJHJlc3BvbnNlKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSAkcmVzcG9uc2UgaW5zdGFuY2VvZiBcVGhyb3dhYmxlCiAgICAgICAgICAgID8gUFxDcmVhdGU6OnJlamVjdGlvbkZvcigkcmVzcG9uc2UpCiAgICAgICAgICAgIDogUFxDcmVhdGU6OnByb21pc2VGb3IoJHJlc3BvbnNlKTsKCiAgICAgICAgcmV0dXJuICRyZXNwb25zZS0+dGhlbigKICAgICAgICAgICAgZnVuY3Rpb24gKD9SZXNwb25zZUludGVyZmFjZSAkdmFsdWUpIHVzZSAoJHJlcXVlc3QsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52b2tlU3RhdHMoJHJlcXVlc3QsICRvcHRpb25zLCAkdmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+b25GdWxmaWxsZWQpKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCAmJiBpc3NldCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50cyA9IChzdHJpbmcpICR2YWx1ZS0+Z2V0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKFxpc19yZXNvdXJjZSgkc2luaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgXGZ3cml0ZSgkc2luaywgJGNvbnRlbnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoXGlzX3N0cmluZygkc2luaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgXGZpbGVfcHV0X2NvbnRlbnRzKCRzaW5rLCAkY29udGVudHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkc2luayBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2luay0+d3JpdGUoJGNvbnRlbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJHJlcXVlc3QsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52b2tlU3RhdHMoJHJlcXVlc3QsICRvcHRpb25zLCBudWxsLCAkcmVhc29uKTsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+b25SZWplY3RlZCkgewogICAgICAgICAgICAgICAgICAgICgkdGhpcy0+b25SZWplY3RlZCkoJHJlYXNvbik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJHJlYXNvbik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBvbmUgb3IgbW9yZSB2YXJpYWRpYyByZXF1ZXN0cywgZXhjZXB0aW9ucywgY2FsbGFibGVzLCBvciBwcm9taXNlcwogICAgICogdG8gdGhlIHF1ZXVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAuLi4kdmFsdWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoLi4uJHZhbHVlcyk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgUmVzcG9uc2VJbnRlcmZhY2UKICAgICAgICAgICAgICAgIHx8ICR2YWx1ZSBpbnN0YW5jZW9mIFxUaHJvd2FibGUKICAgICAgICAgICAgICAgIHx8ICR2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2VJbnRlcmZhY2UKICAgICAgICAgICAgICAgIHx8IFxpc19jYWxsYWJsZSgkdmFsdWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXVlW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFR5cGVFcnJvcignRXhwZWN0ZWQgYSBSZXNwb25zZSwgUHJvbWlzZSwgVGhyb3dhYmxlIG9yIGNhbGxhYmxlLiBGb3VuZCAnLlxnZXRfZGVidWdfdHlwZSgkdmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCByZWNlaXZlZCByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3QoKTogP1JlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RSZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsYXN0IHJlY2VpdmVkIHJlcXVlc3Qgb3B0aW9ucy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RPcHRpb25zKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sYXN0T3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIFxjb3VudCgkdGhpcy0+cXVldWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnF1ZXVlID0gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbiBQcm9taXNlIG9yIHJlYXNvbi4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbnZva2VTdGF0cygKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgID9SZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgICRyZWFzb24gPSBudWxsCiAgICApOiB2b2lkIHsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX3N0YXRzJ10pKSB7CiAgICAgICAgICAgICR0cmFuc2ZlclRpbWUgPSAkb3B0aW9uc1sndHJhbnNmZXJfdGltZSddID8/IDA7CiAgICAgICAgICAgICRzdGF0cyA9IG5ldyBUcmFuc2ZlclN0YXRzKCRyZXF1ZXN0LCAkcmVzcG9uc2UsICR0cmFuc2ZlclRpbWUsICRyZWFzb24pOwogICAgICAgICAgICAoJG9wdGlvbnNbJ29uX3N0YXRzJ10pKCRzdGF0cyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFJlcXVlc3RPcHRpb25zOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByb3ZpZGVzIGJhc2ljIHByb3hpZXMgZm9yIGhhbmRsZXJzLgogKgogKiBAZmluYWwKICovCmNsYXNzIFByb3h5CnsKICAgIC8qKgogICAgICogU2VuZHMgc3luY2hyb25vdXMgcmVxdWVzdHMgdG8gYSBzcGVjaWZpYyBoYW5kbGVyIHdoaWxlIHNlbmRpbmcgYWxsIG90aGVyCiAgICAgKiByZXF1ZXN0cyB0byBhbm90aGVyIGhhbmRsZXIuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkZGVmYXVsdCBIYW5kbGVyIHVzZWQgZm9yIG5vcm1hbCByZXNwb25zZXMKICAgICAqIEBwYXJhbSBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgJHN5bmMgICAgSGFuZGxlciB1c2VkIGZvciBzeW5jaHJvbm91cyByZXNwb25zZXMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UgUmV0dXJucyB0aGUgY29tcG9zZWQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cmFwU3luYyhjYWxsYWJsZSAkZGVmYXVsdCwgY2FsbGFibGUgJHN5bmMpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRkZWZhdWx0LCAkc3luYyk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSkgPyAkZGVmYXVsdCgkcmVxdWVzdCwgJG9wdGlvbnMpIDogJHN5bmMoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgc3RyZWFtaW5nIHJlcXVlc3RzIHRvIGEgc3RyZWFtaW5nIGNvbXBhdGlibGUgaGFuZGxlciB3aGlsZSBzZW5kaW5nCiAgICAgKiBhbGwgb3RoZXIgcmVxdWVzdHMgdG8gYSBkZWZhdWx0IGhhbmRsZXIuCiAgICAgKgogICAgICogVGhpcywgZm9yIGV4YW1wbGUsIGNvdWxkIGJlIHVzZWZ1bCBmb3IgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUKICAgICAqIHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9mIGN1cmwgd2hpbGUgc3RpbGwgc3VwcG9ydGluZyB0cnVlIHN0cmVhbWluZwogICAgICogdGhyb3VnaCB0aGUgU3RyZWFtSGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRkZWZhdWx0ICAgSGFuZGxlciB1c2VkIGZvciBub24tc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkc3RyZWFtaW5nIEhhbmRsZXIgdXNlZCBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlIFJldHVybnMgdGhlIGNvbXBvc2VkIGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3JhcFN0cmVhbWluZyhjYWxsYWJsZSAkZGVmYXVsdCwgY2FsbGFibGUgJHN0cmVhbWluZyk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGRlZmF1bHQsICRzdHJlYW1pbmcpOiBQcm9taXNlSW50ZXJmYWNlIHsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCRvcHRpb25zWydzdHJlYW0nXSkgPyAkZGVmYXVsdCgkcmVxdWVzdCwgJG9wdGlvbnMpIDogJHN0cmVhbWluZygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/ProxyEnvironment.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7CgovKioKICogUmVzb2x2ZXMgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBwcm9jZXNzIGVudmlyb25tZW50IHdpdGggdGhlIHNhbWUKICogc2VtYW50aWNzIGxpYmN1cmwgYXBwbGllcywgc28gdGhlIGNVUkwgaGFuZGxlcnMgY2FuIHBpbiBDVVJMT1BUX1BST1hZIGFuZAogKiBDVVJMT1BUX05PUFJPWFkgZXhwbGljaXRseSBhbmQgbGliY3VybCBuZXZlciByZWFkcyB0aGUgZW52aXJvbm1lbnQgaXRzZWxmLgogKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIFByb3h5RW52aXJvbm1lbnQKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNvbHZlcyB0aGUgcHJveHkgdG8gdXNlIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdCBzY2hlbWUuCiAgICAgKgogICAgICogVGhlIGxvb2t1cCBtaXJyb3JzIGxpYmN1cmwgZm9yIHRoZSBodHRwIGFuZCBodHRwcyBzY2hlbWVzIHRoZSBoYW5kbGVycwogICAgICogYWNjZXB0OiB0aGUgbG93ZXJjYXNlIHNjaGVtZS1zcGVjaWZpYyB2YXJpYWJsZSBmaXJzdCwgaXRzIHVwcGVyY2FzZQogICAgICogdmFyaWFudCBuZXh0IChleGNlcHQgZm9yICJodHRwIiwgd2hlcmUgdXBwZXJjYXNlIEhUVFBfUFJPWFkgaXMgbmV2ZXIKICAgICAqIHJlYWQpLCB0aGVuIGFsbF9wcm94eS9BTExfUFJPWFkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcHJveHkgdG8gdXNlOyBudWxsIHdoZW4gdGhlIGVudmlyb25tZW50CiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZXMgbm9uZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm94eUZvclNjaGVtZShzdHJpbmcgJHNjaGVtZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICAkc2NoZW1lID0gXHN0cnRvbG93ZXIoJHNjaGVtZSk7CiAgICAgICAgJGNhbmRpZGF0ZXMgPSBbJHNjaGVtZS4nX3Byb3h5J107CiAgICAgICAgaWYgKCRzY2hlbWUgIT09ICdodHRwJykgewogICAgICAgICAgICAvLyBVcHBlcmNhc2UgSFRUUF9QUk9YWSBpcyBkZWxpYmVyYXRlbHkgbmV2ZXIgY29uc3VsdGVkOiBhIENHSQogICAgICAgICAgICAvLyByZXF1ZXN0IGhlYWRlciAiUHJveHk6IiBiZWNvbWVzIEhUVFBfUFJPWFkgaW4gdGhlIGVudmlyb25tZW50LgogICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9odHRwb3h5Lm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgJGNhbmRpZGF0ZXNbXSA9IFxzdHJ0b3VwcGVyKCRzY2hlbWUpLidfUFJPWFknOwogICAgICAgIH0KICAgICAgICAkY2FuZGlkYXRlc1tdID0gJ2FsbF9wcm94eSc7CiAgICAgICAgJGNhbmRpZGF0ZXNbXSA9ICdBTExfUFJPWFknOwoKICAgICAgICBmb3JlYWNoICgkY2FuZGlkYXRlcyBhcyAkbmFtZSkgewogICAgICAgICAgICAkdmFsdWUgPSBzZWxmOjpnZXRlbnYoJG5hbWUpOwogICAgICAgICAgICBpZiAoJHZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIG5vLXByb3h5IGxpc3Q7IG51bGwgd2hlbiBub3RoaW5nIGlzIHNldC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROb1Byb3h5KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBmb3JlYWNoIChbJ25vX3Byb3h5JywgJ05PX1BST1hZJ10gYXMgJG5hbWUpIHsKICAgICAgICAgICAgJHZhbHVlID0gc2VsZjo6Z2V0ZW52KCRuYW1lKTsKICAgICAgICAgICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpdHMgYSBub19wcm94eSBlbnZpcm9ubWVudCB2YWx1ZSBpbnRvIG1hdGNoYWJsZSBlbnRyaWVzLgogICAgICoKICAgICAqIE1pcnJvcnMgbGliY3VybCdzIHRva2VuaXphdGlvbjogZW50cmllcyBtYXkgYmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyBvcgogICAgICogYmxhbmtzLCBhbmQgYSBzaW5nbGUgbGVhZGluZyBkb3QgaXMgaWdub3JlZCwgc28gIi5leGFtcGxlLmNvbSIgYnlwYXNzZXMKICAgICAqIGV4YW1wbGUuY29tIGFuZCBpdHMgc3ViZG9tYWlucyBleGFjdGx5IGFzIGEgYmFyZSBkb21haW4gZW50cnkgZG9lcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXROb1Byb3h5KHN0cmluZyAkbm9Qcm94eSk6IGFycmF5CiAgICB7CiAgICAgICAgJGVudHJpZXMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoXHByZWdfc3BsaXQoJy9bXHMsXSsvJywgJG5vUHJveHkpID86IFtdIGFzICRlbnRyeSkgewogICAgICAgICAgICBpZiAoJGVudHJ5ICE9PSAnJyAmJiAkZW50cnlbMF0gPT09ICcuJykgewogICAgICAgICAgICAgICAgJGVudHJ5ID0gXHN1YnN0cigkZW50cnksIDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGVudHJ5ICE9PSAnJykgewogICAgICAgICAgICAgICAgJGVudHJpZXNbXSA9ICRlbnRyeTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbnRyaWVzOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldGVudihzdHJpbmcgJG5hbWUpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgLy8gV2luZG93cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIHNvIHRoZQogICAgICAgIC8vIGxvd2VyY2FzZS1vbmx5IGh0dHBveHkgZGVmZW5jZSBkb2VzIG5vdCBob2xkIHRoZXJlLiBPdXRzaWRlIHRoZQogICAgICAgIC8vIENMSSBTQVBJIG9uIFdpbmRvd3MsIGVudmlyb25tZW50IHByb3hpZXMgYXJlIG5vdCByZXNvbHZlZCBhdCBhbGwKICAgICAgICAvLyAoYSBzYWZlLXNpZGUgZGl2ZXJnZW5jZSBmcm9tIGxpYmN1cmwpLgogICAgICAgIGlmIChcUEhQX09TX0ZBTUlMWSA9PT0gJ1dpbmRvd3MnICYmIFxQSFBfU0FQSSAhPT0gJ2NsaScpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBsb2NhbF9vbmx5OiB0aGUgT1MgZW52aXJvbm1lbnQgYW5kIHB1dGVudigpIG9ubHkgLSB0aGUgc2FtZQogICAgICAgIC8vIGVudmlyb24oNykgbGliY3VybCByZWFkcy4gU0FQSSByZXF1ZXN0IGVudmlyb25tZW50cyBzdWNoIGFzCiAgICAgICAgLy8gZmFzdGNnaV9wYXJhbSBvciBTZXRFbnYgYXJlIGRlbGliZXJhdGVseSBleGNsdWRlZC4KICAgICAgICAkdmFsdWUgPSBcZ2V0ZW52KCRuYW1lLCB0cnVlKTsKCiAgICAgICAgLy8gbGliY3VybCdzIEdldEVudiAobGliL2dldGVudi5jKSB0cmVhdHMgdmFyaWFibGVzIHNldCB0byBhbiBlbXB0eQogICAgICAgIC8vIHN0cmluZyBhcyB1bnNldCBvbiBldmVyeSB2ZXJzaW9uLCBzbyB0aGUgbG9va3VwIGZhbGxzIHRocm91Z2ggdG8KICAgICAgICAvLyB0aGUgbmV4dCBjYW5kaWRhdGUuCiAgICAgICAgcmV0dXJuICR2YWx1ZSA9PT0gZmFsc2UgfHwgJHZhbHVlID09PSAnJyA/IG51bGwgOiAkdmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXEhhbmRsZXI7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBHdXp6bGVIdHRwXFRyYW5zcG9ydFNoYXJpbmc7CnVzZSBHdXp6bGVIdHRwXFV0aWxzOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBQSFAncyBIVFRQIHN0cmVhbSB3cmFwcGVyLgogKgogKiBAZmluYWwKICovCmNsYXNzIFN0cmVhbUhhbmRsZXIKewogICAgcHJpdmF0ZSBjb25zdCBDT05ORUNUSU9OX0VSUk9SUyA9IFsKICAgICAgICAncGhwX25ldHdvcmtfZ2V0YWRkcmVzc2VzOicsCiAgICAgICAgJ2dldGFkZHJpbmZvJywKICAgICAgICAnZ2V0aG9zdGJ5bmFtZSBmYWlsZWQnLAogICAgICAgICdDb25uZWN0aW9uIHJlZnVzZWQnLAogICAgICAgICdObyBjb25uZWN0aW9uIGNvdWxkIGJlIG1hZGUgYmVjYXVzZSB0aGUgdGFyZ2V0IG1hY2hpbmUgYWN0aXZlbHkgcmVmdXNlZCBpdCcsCiAgICAgICAgImNvdWxkbid0IGNvbm5lY3QgdG8gaG9zdCIsIC8vIGVycm9yIG9uIEhIVk0KICAgICAgICAnY29ubmVjdGlvbiBhdHRlbXB0IGZhaWxlZCcsCiAgICAgICAgJ2Nvbm5lY3QoKSBmYWlsZWQnLAogICAgICAgICdDb25uZWN0aW9uIHRpbWVkIG91dCcsCiAgICAgICAgJ09wZXJhdGlvbiB0aW1lZCBvdXQnLAogICAgICAgICdOZXR3b3JrIGlzIHVucmVhY2hhYmxlJywKICAgICAgICAnTm8gcm91dGUgdG8gaG9zdCcsCiAgICAgICAgJ0hvc3QgaXMgdW5yZWFjaGFibGUnLAogICAgICAgICdIb3N0IGlzIGRvd24nLAogICAgICAgICdDYW5ub3QgY29ubmVjdCB0byBIVFRQUyBzZXJ2ZXIgdGhyb3VnaCBwcm94eScsCiAgICBdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRsYXN0SGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdHJhbnNwb3J0U2hhcmluZ01vZGU7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnM6CiAgICAgKgogICAgICogLSB0cmFuc3BvcnRfc2hhcmluZzogT3B0aW9uYWwgdHJhbnNwb3J0IHNoYXJpbmcgbW9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl7dHJhbnNwb3J0X3NoYXJpbmc/OiBtaXhlZH0gJG9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyB0byB1c2Ugd2l0aCB0aGUgaGFuZGxlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+dHJhbnNwb3J0U2hhcmluZ01vZGUgPSBDdXJsU2hhcmVIYW5kbGVTdGF0ZTo6bm9ybWFsaXplTW9kZSgKICAgICAgICAgICAgJG9wdGlvbnNbJ3RyYW5zcG9ydF9zaGFyaW5nJ10gPz8gbnVsbCwKICAgICAgICAgICAgJ3RyYW5zcG9ydF9zaGFyaW5nJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kcyBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBzZW5kLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgLy8gU2xlZXAgaWYgdGhlcmUgaXMgYSBkZWxheSBzcGVjaWZpZWQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydkZWxheSddKSkgewogICAgICAgICAgICBcdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkcHJvdG9jb2xWZXJzaW9uID0gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwoKICAgICAgICBpZiAoJycgPT09ICRwcm90b2NvbFZlcnNpb24pIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuMTEnLCAnU2VuZGluZyBhIHJlcXVlc3Qgd2l0aCBhbiBlbXB0eSBwcm90b2NvbCB2ZXJzaW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBlbXB0eSBwcm90b2NvbCB2ZXJzaW9ucy4nKTsKCiAgICAgICAgICAgICRwcm90b2NvbFZlcnNpb24gPSAnMS4xJzsKICAgICAgICAgICAgJHJlcXVlc3QgPSBQc3I3XFV0aWxzOjptb2RpZnlSZXF1ZXN0KCRyZXF1ZXN0LCBbJ3ZlcnNpb24nID0+ICRwcm90b2NvbFZlcnNpb25dKTsKICAgICAgICB9CgogICAgICAgIGlmICgnMS4wJyAhPT0gJHByb3RvY29sVmVyc2lvbiAmJiAnMS4xJyAhPT0gJHByb3RvY29sVmVyc2lvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihzcHJpbnRmKCdIVFRQLyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHN0cmVhbSBoYW5kbGVyLicsICRwcm90b2NvbFZlcnNpb24pLCAkcmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICAkc3RhcnRUaW1lID0gaXNzZXQoJG9wdGlvbnNbJ29uX3N0YXRzJ10pID8gVXRpbHM6OmN1cnJlbnRUaW1lKCkgOiBudWxsOwoKICAgICAgICBzZWxmOjp0cmlnZ2VyVW5zdXBwb3J0ZWRSZXF1ZXN0T3B0aW9uRGVwcmVjYXRpb25zKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRyYW5zcG9ydFNoYXJpbmdTdXBwb3J0ZWQoKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aG91dEhlYWRlcignRXhwZWN0Jyk7CgogICAgICAgICAgICAvLyBBcHBlbmQgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgYm9keSBzaXplIGlzIHplcm8gdG8gbWF0Y2gKICAgICAgICAgICAgLy8gdGhlIGJlaGF2aW9yIG9mIGBDdXJsSGFuZGxlcmAKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIDAgPT09IFxzdHJjYXNlY21wKCdQVVQnLCAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkpCiAgICAgICAgICAgICAgICAgICAgfHwgMCA9PT0gXHN0cmNhc2VjbXAoJ1BPU1QnLCAkcmVxdWVzdC0+Z2V0TWV0aG9kKCkpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAmJiAwID09PSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRTaXplKCkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRvcHRpb25zLAogICAgICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZVN0cmVhbSgkcmVxdWVzdCwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgJHN0YXJ0VGltZQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGVycm9yIHdhcyBhIG5ldHdvcmtpbmcgZXJyb3IuCiAgICAgICAgICAgIGlmIChzZWxmOjppc0Nvbm5lY3Rpb25FcnJvcigkZS0+Z2V0TWVzc2FnZSgpKSkgewogICAgICAgICAgICAgICAgJGUgPSBuZXcgQ29ubmVjdEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkcmVxdWVzdCwgJGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGUgPSAkZSBpbnN0YW5jZW9mIFJlcXVlc3RFeGNlcHRpb24gPyAkZSA6IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksICRyZXF1ZXN0LCBudWxsLCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRvcHRpb25zLCAkcmVxdWVzdCwgJHN0YXJ0VGltZSwgbnVsbCwgJGUpOwoKICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0Nvbm5lY3Rpb25FcnJvcihzdHJpbmcgJG1lc3NhZ2UpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoc2VsZjo6Q09OTkVDVElPTl9FUlJPUlMgYXMgJGNvbm5lY3Rpb25FcnJvcikgewogICAgICAgICAgICBpZiAoZmFsc2UgIT09IFxzdHJwb3MoJG1lc3NhZ2UsICRjb25uZWN0aW9uRXJyb3IpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW52b2tlU3RhdHMoCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICA/ZmxvYXQgJHN0YXJ0VGltZSwKICAgICAgICA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICA/XFRocm93YWJsZSAkZXJyb3IgPSBudWxsCiAgICApOiB2b2lkIHsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX3N0YXRzJ10pKSB7CiAgICAgICAgICAgICRzdGF0cyA9IG5ldyBUcmFuc2ZlclN0YXRzKCRyZXF1ZXN0LCAkcmVzcG9uc2UsIFV0aWxzOjpjdXJyZW50VGltZSgpIC0gJHN0YXJ0VGltZSwgJGVycm9yLCBbXSk7CiAgICAgICAgICAgICgkb3B0aW9uc1snb25fc3RhdHMnXSkoJHN0YXRzKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zLCAkc3RyZWFtLCA/ZmxvYXQgJHN0YXJ0VGltZSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkaGRycyA9ICR0aGlzLT5sYXN0SGVhZGVyczsKICAgICAgICAkdGhpcy0+bGFzdEhlYWRlcnMgPSBbXTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgWyR2ZXIsICRzdGF0dXMsICRyZWFzb24sICRoZWFkZXJzXSA9IEhlYWRlclByb2Nlc3Nvcjo6cGFyc2VIZWFkZXJzKCRoZHJzKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVqZWN0UmVzcG9uc2VDcmVhdGlvbigkb3B0aW9ucywgJHJlcXVlc3QsICRzdGFydFRpbWUsICRlKTsKICAgICAgICB9CgogICAgICAgIFskc3RyZWFtLCAkaGVhZGVyc10gPSAkdGhpcy0+Y2hlY2tEZWNvZGUoJG9wdGlvbnMsICRoZWFkZXJzLCAkc3RyZWFtKTsKICAgICAgICAkc3RyZWFtID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKCRzdHJlYW0pOwogICAgICAgICRzaW5rID0gJHN0cmVhbTsKCiAgICAgICAgaWYgKFxzdHJjYXNlY21wKCdIRUFEJywgJHJlcXVlc3QtPmdldE1ldGhvZCgpKSkgewogICAgICAgICAgICAkc2luayA9ICR0aGlzLT5jcmVhdGVTaW5rKCRzdHJlYW0sICRvcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9IG5ldyBQc3I3XFJlc3BvbnNlKCRzdGF0dXMsICRoZWFkZXJzLCAkc2luaywgJHZlciwgJHJlYXNvbik7CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlamVjdFJlc3BvbnNlQ3JlYXRpb24oJG9wdGlvbnMsICRyZXF1ZXN0LCAkc3RhcnRUaW1lLCAkZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydvbl9oZWFkZXJzJ10oJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoCiAgICAgICAgICAgICAgICAgICAgbmV3IFJlcXVlc3RFeGNlcHRpb24oJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnLCAkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIERvIG5vdCBkcmFpbiB3aGVuIHRoZSByZXF1ZXN0IGlzIGEgSEVBRCByZXF1ZXN0IGJlY2F1c2UgdGhleSBoYXZlCiAgICAgICAgLy8gbm8gYm9keS4KICAgICAgICBpZiAoJHNpbmsgIT09ICRzdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPmRyYWluKCRzdHJlYW0sICRzaW5rLCAkcmVzcG9uc2UtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtTGVuZ3RoJykpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRvcHRpb25zLCAkcmVxdWVzdCwgJHN0YXJ0VGltZSwgJHJlc3BvbnNlLCBudWxsKTsKCiAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsZWRQcm9taXNlKCRyZXNwb25zZSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWplY3RSZXNwb25zZUNyZWF0aW9uKAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgP2Zsb2F0ICRzdGFydFRpbWUsCiAgICAgICAgXFRocm93YWJsZSAkcHJldmlvdXMKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgICRyZWFzb24gPSBuZXcgUmVxdWVzdEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVzcG9uc2UnLAogICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgJHByZXZpb3VzCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmludm9rZVN0YXRzKCRvcHRpb25zLCAkcmVxdWVzdCwgJHN0YXJ0VGltZSwgbnVsbCwgJHJlYXNvbik7CgogICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRyZWFzb24pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU2luayhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgYXJyYXkgJG9wdGlvbnMpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydzdHJlYW0nXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzdHJlYW07CiAgICAgICAgfQoKICAgICAgICAkc2luayA9ICRvcHRpb25zWydzaW5rJ10gPz8gUHNyN1xVdGlsczo6dHJ5Rm9wZW4oJ3BocDovL3RlbXAnLCAncisnKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHNpbmspID8gbmV3IFBzcjdcTGF6eU9wZW5TdHJlYW0oJHNpbmssICd3KycpIDogUHNyN1xVdGlsczo6c3RyZWFtRm9yKCRzaW5rKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tEZWNvZGUoYXJyYXkgJG9wdGlvbnMsIGFycmF5ICRoZWFkZXJzLCAkc3RyZWFtKTogYXJyYXkKICAgIHsKICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGRlY29kZSByZXNwb25zZXMgd2hlbiBpbnN0cnVjdGVkLgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10pKSB7CiAgICAgICAgICAgICRub3JtYWxpemVkS2V5cyA9IFV0aWxzOjpub3JtYWxpemVIZWFkZXJLZXlzKCRoZWFkZXJzKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddKSkgewogICAgICAgICAgICAgICAgJGVuY29kaW5nID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dOwogICAgICAgICAgICAgICAgaWYgKCRlbmNvZGluZ1swXSA9PT0gJ2d6aXAnIHx8ICRlbmNvZGluZ1swXSA9PT0gJ2RlZmxhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0cmVhbSA9IG5ldyBQc3I3XEluZmxhdGVTdHJlYW0oUHNyN1xVdGlsczo6c3RyZWFtRm9yKCRzdHJlYW0pKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtZW5jb2RpbmcnXSA9ICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddXTsKCiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGNvbnRlbnQtZW5jb2RpbmcgaGVhZGVyCiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZWQgbGVuZ3RoIGNhbm5vdCBiZSBrbm93biB3aXRob3V0IGluZmxhdGluZyB0aGUKICAgICAgICAgICAgICAgICAgICAvLyBzdHJlYW0sIHNvIGtlZXAgdGhlIG9yaWdpbmFsIGxlbmd0aCBmb3IgaW5zcGVjdGlvbiBhbmQKICAgICAgICAgICAgICAgICAgICAvLyBkcm9wIHRoZSBub3ctdW5rbm93biBDb250ZW50LUxlbmd0aCBoZWFkZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWxlbmd0aCddID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRzdHJlYW0sICRoZWFkZXJzXTsKICAgIH0KCiAgICAvKioKICAgICAqIERyYWlucyB0aGUgc291cmNlIHN0cmVhbSBpbnRvIHRoZSAic2luayIgY2xpZW50IG9wdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50TGVuZ3RoIEhlYWRlciBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB0byByZWFkLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gd2hlbiB0aGUgc2luayBvcHRpb24gaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkcmFpbihTdHJlYW1JbnRlcmZhY2UgJHNvdXJjZSwgU3RyZWFtSW50ZXJmYWNlICRzaW5rLCBzdHJpbmcgJGNvbnRlbnRMZW5ndGgpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICAvLyBJZiBhIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciBpcyBwcm92aWRlZCwgdGhlbiBzdG9wIHJlYWRpbmcgb25jZQogICAgICAgIC8vIHRoYXQgbnVtYmVyIG9mIGJ5dGVzIGhhcyBiZWVuIHJlYWQuIFRoaXMgY2FuIHByZXZlbnQgaW5maW5pdGVseQogICAgICAgIC8vIHJlYWRpbmcgZnJvbSBhIHN0cmVhbSB3aGVuIGRlYWxpbmcgd2l0aCBzZXJ2ZXJzIHRoYXQgZG8gbm90IGhvbm9yCiAgICAgICAgLy8gQ29ubmVjdGlvbjogQ2xvc2UgaGVhZGVycy4KICAgICAgICBQc3I3XFV0aWxzOjpjb3B5VG9TdHJlYW0oCiAgICAgICAgICAgICRzb3VyY2UsCiAgICAgICAgICAgICRzaW5rLAogICAgICAgICAgICAoXHN0cmxlbigkY29udGVudExlbmd0aCkgPiAwICYmIChpbnQpICRjb250ZW50TGVuZ3RoID4gMCkgPyAoaW50KSAkY29udGVudExlbmd0aCA6IC0xCiAgICAgICAgKTsKCiAgICAgICAgJHNpbmstPnNlZWsoMCk7CiAgICAgICAgJHNvdXJjZS0+Y2xvc2UoKTsKCiAgICAgICAgcmV0dXJuICRzaW5rOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgcmVzb3VyY2UgYW5kIGNoZWNrIHRvIGVuc3VyZSBpdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIENhbGxhYmxlIHRoYXQgcmV0dXJucyBzdHJlYW0gcmVzb3VyY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICAkZXJyb3JzID0gW107CiAgICAgICAgXHNldF9lcnJvcl9oYW5kbGVyKHN0YXRpYyBmdW5jdGlvbiAoJF8sICRtc2csICRmaWxlLCAkbGluZSkgdXNlICgmJGVycm9ycyk6IGJvb2wgewogICAgICAgICAgICAkZXJyb3JzW10gPSBbCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1zZywKICAgICAgICAgICAgICAgICdmaWxlJyA9PiAkZmlsZSwKICAgICAgICAgICAgICAgICdsaW5lJyA9PiAkbGluZSwKICAgICAgICAgICAgXTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkcmVzb3VyY2UgPSAkY2FsbGJhY2soKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBccmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRyZXNvdXJjZSkgewogICAgICAgICAgICAkbWVzc2FnZSA9ICdFcnJvciBjcmVhdGluZyByZXNvdXJjZTogJzsKICAgICAgICAgICAgZm9yZWFjaCAoJGVycm9ycyBhcyAkZXJyKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZXJyIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgLj0gIlska2V5XSAkdmFsdWUiLlxQSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihcdHJpbSgkbWVzc2FnZSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXNvdXJjZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgc3RhdGljICRtZXRob2RzOwogICAgICAgIGlmICghJG1ldGhvZHMpIHsKICAgICAgICAgICAgJG1ldGhvZHMgPSBcYXJyYXlfZmxpcChcZ2V0X2NsYXNzX21ldGhvZHMoX19DTEFTU19fKSk7CiAgICAgICAgfQoKICAgICAgICAkc2NoZW1lID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKTsKICAgICAgICBpZiAoIVxpbl9hcnJheSgkc2NoZW1lLCBbJ2h0dHAnLCAnaHR0cHMnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFeGNlcHRpb24oXHNwcmludGYoIlRoZSBzY2hlbWUgJyVzJyBpcyBub3Qgc3VwcG9ydGVkLiIsICRzY2hlbWUpLCAkcmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICAkcHJvdG9jb2xzID0gVXRpbHM6Om5vcm1hbGl6ZVByb3RvY29scygkb3B0aW9uc1sncHJvdG9jb2xzJ10gPz8gWydodHRwJywgJ2h0dHBzJ10pOwogICAgICAgIGlmICghXGluX2FycmF5KCRzY2hlbWUsICRwcm90b2NvbHMsIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgc2NoZW1lICIlcyIgaXMgbm90IGFsbG93ZWQgYnkgdGhlIHByb3RvY29scyByZXF1ZXN0IG9wdGlvbi4nLCAkc2NoZW1lKSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgLy8gSFRUUC8xLjEgc3RyZWFtcyB1c2luZyB0aGUgUEhQIHN0cmVhbSB3cmFwcGVyIHJlcXVpcmUgYQogICAgICAgIC8vIENvbm5lY3Rpb246IGNsb3NlIGhlYWRlcgogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkgPT09ICcxLjEnCiAgICAgICAgICAgICYmICEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb25uZWN0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIFNTTCBpcyB2ZXJpZmllZCBieSBkZWZhdWx0CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWyd2ZXJpZnknXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zID0gW107CiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbnRleHQoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkgJiYgIVxpc19jYWxsYWJsZSgkb3B0aW9uc1snb25faGVhZGVycyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignb25faGVhZGVycyBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zKSkgewogICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgJG1ldGhvZCA9ICJhZGRfeyRrZXl9IjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbWV0aG9kc1skbWV0aG9kXSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eyRtZXRob2R9KCRyZXF1ZXN0LCAkY29udGV4dCwgJHZhbHVlLCAkcGFyYW1zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzdHJlYW1fY29udGV4dCddKSkgewogICAgICAgICAgICBpZiAoIVxpc19hcnJheSgkb3B0aW9uc1snc3RyZWFtX2NvbnRleHQnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdzdHJlYW1fY29udGV4dCBtdXN0IGJlIGFuIGFycmF5Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VsZjo6dHJpZ2dlckNvbmZsaWN0aW5nU3RyZWFtQ29udGV4dE9wdGlvbkRlcHJlY2F0aW9ucygkb3B0aW9uc1snc3RyZWFtX2NvbnRleHQnXSk7CiAgICAgICAgICAgIHNlbGY6OnRyaWdnZXJVbnN1cHBvcnRlZFN0cmVhbUNvbnRleHRPcHRpb25EZXByZWNhdGlvbnMoJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pOwogICAgICAgICAgICAkY29udGV4dCA9IFxhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkY29udGV4dCwgJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pOwogICAgICAgIH0KCiAgICAgICAgLy8gTWljcm9zb2Z0IE5UTE0gYXV0aGVudGljYXRpb24gb25seSBzdXBwb3J0ZWQgd2l0aCBjdXJsIGhhbmRsZXIKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2F1dGgnXVsyXSkgJiYgJ250bG0nID09PSAkb3B0aW9uc1snYXV0aCddWzJdKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdNaWNyb3NvZnQgTlRMTSBhdXRoZW50aWNhdGlvbiBvbmx5IHN1cHBvcnRlZCB3aXRoIGN1cmwgaGFuZGxlcicpOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICR0aGlzLT5yZXNvbHZlSG9zdCgkcmVxdWVzdCwgJG9wdGlvbnMpOwoKICAgICAgICAkY29udGV4dFJlc291cmNlID0gJHRoaXMtPmNyZWF0ZVJlc291cmNlKAogICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkY29udGV4dCwgJHBhcmFtcykgewogICAgICAgICAgICAgICAgcmV0dXJuIFxzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHQsICRwYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVSZXNvdXJjZSgKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgkdXJpLCAkY29udGV4dFJlc291cmNlLCAkY29udGV4dCwgJG9wdGlvbnMsICRyZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAkcmVzb3VyY2UgPSBAXGZvcGVuKChzdHJpbmcpICR1cmksICdyJywgZmFsc2UsICRjb250ZXh0UmVzb3VyY2UpOwoKICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3dpa2kucGhwLm5ldC9yZmMvZGVwcmVjYXRpb25zX3BocF84XzUjZGVwcmVjYXRlX3RoZV9odHRwX3Jlc3BvbnNlX2hlYWRlcl9wcmVkZWZpbmVkX3ZhcmlhYmxlCiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdodHRwX2dldF9sYXN0X3Jlc3BvbnNlX2hlYWRlcnMnKSkgewogICAgICAgICAgICAgICAgICAgICRodHRwX3Jlc3BvbnNlX2hlYWRlciA9IFxodHRwX2dldF9sYXN0X3Jlc3BvbnNlX2hlYWRlcnMoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+bGFzdEhlYWRlcnMgPSAkaHR0cF9yZXNwb25zZV9oZWFkZXIgPz8gW107CgogICAgICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkcmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihzcHJpbnRmKCdDb25uZWN0aW9uIHJlZnVzZWQgZm9yIFVSSSAlcycsICR1cmkpLCAkcmVxdWVzdCwgbnVsbCwgJGNvbnRleHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sncmVhZF90aW1lb3V0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlYWRUaW1lb3V0ID0gJG9wdGlvbnNbJ3JlYWRfdGltZW91dCddOwogICAgICAgICAgICAgICAgICAgICRzZWMgPSAoaW50KSAkcmVhZFRpbWVvdXQ7CiAgICAgICAgICAgICAgICAgICAgJHVzZWMgPSAoJHJlYWRUaW1lb3V0IC0gJHNlYykgKiAxMDAwMDA7CiAgICAgICAgICAgICAgICAgICAgXHN0cmVhbV9zZXRfdGltZW91dCgkcmVzb3VyY2UsICRzZWMsICR1c2VjKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc291cmNlOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVIb3N0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pICYmICFcZmlsdGVyX3ZhcigkdXJpLT5nZXRIb3N0KCksIFxGSUxURVJfVkFMSURBVEVfSVApKSB7CiAgICAgICAgICAgIGlmICgndjQnID09PSAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSB7CiAgICAgICAgICAgICAgICAkcmVjb3JkcyA9IFxkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIFxETlNfQSk7CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UgPT09ICRyZWNvcmRzIHx8ICFpc3NldCgkcmVjb3Jkc1swXVsnaXAnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihcc3ByaW50ZigiQ291bGQgbm90IHJlc29sdmUgSVB2NCBhZGRyZXNzIGZvciBob3N0ICclcyciLCAkdXJpLT5nZXRIb3N0KCkpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhIb3N0KCRyZWNvcmRzWzBdWydpcCddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJ3Y2JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJHJlY29yZHMgPSBcZG5zX2dldF9yZWNvcmQoJHVyaS0+Z2V0SG9zdCgpLCBcRE5TX0FBQUEpOwogICAgICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkcmVjb3JkcyB8fCAhaXNzZXQoJHJlY29yZHNbMF1bJ2lwdjYnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihcc3ByaW50ZigiQ291bGQgbm90IHJlc29sdmUgSVB2NiBhZGRyZXNzIGZvciBob3N0ICclcyciLCAkdXJpLT5nZXRIb3N0KCkpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhIb3N0KCdbJy4kcmVjb3Jkc1swXVsnaXB2NiddLiddJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RGVmYXVsdENvbnRleHQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk6IGFycmF5CiAgICB7CiAgICAgICAgJGhlYWRlcnMgPSAnJzsKICAgICAgICBmb3JlYWNoICgkcmVxdWVzdC0+Z2V0SGVhZGVycygpIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJHZhbCkgewogICAgICAgICAgICAgICAgJGhlYWRlcnMgLj0gIiRuYW1lOiAkdmFsXHJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRjb250ZXh0ID0gWwogICAgICAgICAgICAnaHR0cCcgPT4gWwogICAgICAgICAgICAgICAgJ21ldGhvZCcgPT4gJHJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gJGhlYWRlcnMsCiAgICAgICAgICAgICAgICAncHJvdG9jb2xfdmVyc2lvbicgPT4gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpLAogICAgICAgICAgICAgICAgJ2lnbm9yZV9lcnJvcnMnID0+IHRydWUsCiAgICAgICAgICAgICAgICAnZm9sbG93X2xvY2F0aW9uJyA9PiAwLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc3NsJyA9PiBbCiAgICAgICAgICAgICAgICAncGVlcl9uYW1lJyA9PiAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwKICAgICAgICAgICAgXSwKICAgICAgICBdOwoKICAgICAgICAkYm9keSA9IChzdHJpbmcpICRyZXF1ZXN0LT5nZXRCb2R5KCk7CgogICAgICAgIGlmICgnJyAhPT0gJGJvZHkpIHsKICAgICAgICAgICAgJGNvbnRleHRbJ2h0dHAnXVsnY29udGVudCddID0gJGJvZHk7CiAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIEhUVFAgaGFuZGxlciBmcm9tIGFkZGluZyBhIENvbnRlbnQtVHlwZSBoZWFkZXIuCiAgICAgICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgICAgICRjb250ZXh0WydodHRwJ11bJ2hlYWRlciddIC49ICJDb250ZW50LVR5cGU6XHJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRjb250ZXh0WydodHRwJ11bJ2hlYWRlciddID0gXHJ0cmltKCRjb250ZXh0WydodHRwJ11bJ2hlYWRlciddKTsKCiAgICAgICAgcmV0dXJuICRjb250ZXh0OwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHRyaWdnZXJVbnN1cHBvcnRlZFJlcXVlc3RPcHRpb25EZXByZWNhdGlvbnMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKAogICAgICAgICAgICBcYXJyYXlfa2V5X2V4aXN0cygnY3VybCcsICRvcHRpb25zKQogICAgICAgICAgICAmJiAkb3B0aW9uc1snY3VybCddICE9PSBudWxsCiAgICAgICAgICAgICYmICRvcHRpb25zWydjdXJsJ10gIT09IFtdCiAgICAgICAgICAgICYmICFzZWxmOjppc0N1cmxPcHRpb25HZW5lcmF0ZWRCeUF1dGgoJG9wdGlvbnMpCiAgICAgICAgKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjExJywgJ1Bhc3NpbmcgdGhlICJjdXJsIiByZXF1ZXN0IG9wdGlvbiB0byB0aGUgc3RyZWFtIGhhbmRsZXIgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHdpbGwgcmVqZWN0IHRoaXMgb3B0aW9uIGJlY2F1c2UgdGhlIHN0cmVhbSBoYW5kbGVyIGlnbm9yZXMgY1VSTCBvcHRpb25zLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdleHBlY3QnLCAkb3B0aW9ucykgJiYgJG9wdGlvbnNbJ2V4cGVjdCddICE9PSBmYWxzZSAmJiAkcmVxdWVzdC0+aGFzSGVhZGVyKCdFeHBlY3QnKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbignZ3V6emxlaHR0cC9ndXp6bGUnLCAnNy4xMScsICdQYXNzaW5nIHRoZSAiZXhwZWN0IiByZXF1ZXN0IG9wdGlvbiB0byB0aGUgc3RyZWFtIGhhbmRsZXIgaXMgZGVwcmVjYXRlZCB3aGVuIGl0IGFkZHMgYW4gRXhwZWN0IGhlYWRlcjsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHdpbGwgcmVqZWN0IHRoaXMgb3B0aW9uIGJlY2F1c2UgdGhlIHN0cmVhbSBoYW5kbGVyIGRvZXMgbm90IHN1cHBvcnQgRXhwZWN0OiAxMDAtQ29udGludWUuJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHRyaWdnZXJDb25mbGljdGluZ1N0cmVhbUNvbnRleHRPcHRpb25EZXByZWNhdGlvbnMoYXJyYXkgJHN0cmVhbUNvbnRleHQpOiB2b2lkCiAgICB7CiAgICAgICAgJGNvbmZsaWN0aW5nT3B0aW9ucyA9IHNlbGY6OmNvbmZsaWN0aW5nU3RyZWFtQ29udGV4dE9wdGlvbnMoKTsKCiAgICAgICAgZm9yZWFjaCAoJHN0cmVhbUNvbnRleHQgYXMgJHdyYXBwZXIgPT4gJGNvbnRleHRPcHRpb25zKSB7CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkd3JhcHBlcikgfHwgIWlzc2V0KCRjb25mbGljdGluZ09wdGlvbnNbJHdyYXBwZXJdKSB8fCAhXGlzX2FycmF5KCRjb250ZXh0T3B0aW9ucykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkY29udGV4dE9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkXykgewogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRvcHRpb24pIHx8ICFcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkY29uZmxpY3RpbmdPcHRpb25zWyR3cmFwcGVyXSkpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9ndXp6bGUnLAogICAgICAgICAgICAgICAgICAgICc3LjEyJywKICAgICAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgJ1Bhc3Npbmcgc3RyZWFtX2NvbnRleHQuJXMuJXMgaW4gdGhlICJzdHJlYW1fY29udGV4dCIgcmVxdWVzdCBvcHRpb24gaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHdpbGwgcmVqZWN0IHRoaXMgb3B0aW9uIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggR3V6emxlLW1hbmFnZWQgcmVxdWVzdCBoYW5kbGluZy4gVXNlICVzIGluc3RlYWQuJywKICAgICAgICAgICAgICAgICAgICAgICAgJHdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mbGljdGluZ09wdGlvbnNbJHdyYXBwZXJdWyRvcHRpb25dCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB0cmlnZ2VyVW5zdXBwb3J0ZWRTdHJlYW1Db250ZXh0T3B0aW9uRGVwcmVjYXRpb25zKGFycmF5ICRzdHJlYW1Db250ZXh0KTogdm9pZAogICAgewogICAgICAgICR1bnN1cHBvcnRlZE9wdGlvbnMgPSBzZWxmOjp1bnN1cHBvcnRlZFN0cmVhbUNvbnRleHRPcHRpb25zKCRzdHJlYW1Db250ZXh0KTsKICAgICAgICBpZiAoJHVuc3VwcG9ydGVkT3B0aW9ucyA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICc3LjEyJywKICAgICAgICAgICAgXHNwcmludGYoCiAgICAgICAgICAgICAgICAnUGFzc2luZyBQSFAgc3RyZWFtIGNvbnRleHQgb3B0aW9ucyBvdXRzaWRlIHRoZSBidWlsdC1pbiBzdHJlYW0gaGFuZGxlciBhbGxvdy1saXN0IHRvIHRoZSAic3RyZWFtX2NvbnRleHQiIHJlcXVlc3Qgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlamVjdCBzdHJlYW0gY29udGV4dCBvcHRpb25zIG91dHNpZGUgdGhlIGFsbG93LWxpc3QuIERlcHJlY2F0ZWQgb3B0aW9uJXM6ICVzLicsCiAgICAgICAgICAgICAgICBcY291bnQoJHVuc3VwcG9ydGVkT3B0aW9ucykgPT09IDEgPyAnJyA6ICdzJywKICAgICAgICAgICAgICAgIFxpbXBsb2RlKCcsICcsICR1bnN1cHBvcnRlZE9wdGlvbnMpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB1bnN1cHBvcnRlZFN0cmVhbUNvbnRleHRPcHRpb25zKGFycmF5ICRzdHJlYW1Db250ZXh0KTogYXJyYXkKICAgIHsKICAgICAgICAkc3VwcG9ydGVkT3B0aW9ucyA9IHNlbGY6OnN1cHBvcnRlZFN0cmVhbUNvbnRleHRPcHRpb25zKCk7CiAgICAgICAgJGNvbmZsaWN0aW5nT3B0aW9ucyA9IHNlbGY6OmNvbmZsaWN0aW5nU3RyZWFtQ29udGV4dE9wdGlvbnMoKTsKICAgICAgICAkdW5zdXBwb3J0ZWRPcHRpb25zID0gW107CgogICAgICAgIGZvcmVhY2ggKCRzdHJlYW1Db250ZXh0IGFzICR3cmFwcGVyID0+ICRjb250ZXh0T3B0aW9ucykgewogICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHdyYXBwZXIpIHx8ICFpc3NldCgkc3VwcG9ydGVkT3B0aW9uc1skd3JhcHBlcl0pKSB7CiAgICAgICAgICAgICAgICBpZiAoXGlzX2FycmF5KCRjb250ZXh0T3B0aW9ucykpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkY29udGV4dE9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkXykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoXGlzX3N0cmluZygkd3JhcHBlcikgJiYgXGlzX3N0cmluZygkb3B0aW9uKSAmJiBpc3NldCgkY29uZmxpY3RpbmdPcHRpb25zWyR3cmFwcGVyXSkgJiYgXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJGNvbmZsaWN0aW5nT3B0aW9uc1skd3JhcHBlcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHVuc3VwcG9ydGVkT3B0aW9uc1tdID0gXHNwcmludGYoJ3N0cmVhbV9jb250ZXh0LiVzLiVzJywgKHN0cmluZykgJHdyYXBwZXIsIChzdHJpbmcpICRvcHRpb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHVuc3VwcG9ydGVkT3B0aW9uc1tdID0gXHNwcmludGYoJ3N0cmVhbV9jb250ZXh0LiVzJywgKHN0cmluZykgJHdyYXBwZXIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIVxpc19hcnJheSgkY29udGV4dE9wdGlvbnMpKSB7CiAgICAgICAgICAgICAgICAkdW5zdXBwb3J0ZWRPcHRpb25zW10gPSBcc3ByaW50Zignc3RyZWFtX2NvbnRleHQuJXMnLCAkd3JhcHBlcik7CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb250ZXh0T3B0aW9ucyBhcyAkb3B0aW9uID0+ICRfKSB7CiAgICAgICAgICAgICAgICBpZiAoXGlzX3N0cmluZygkb3B0aW9uKSAmJiBpc3NldCgkY29uZmxpY3RpbmdPcHRpb25zWyR3cmFwcGVyXSkgJiYgXGFycmF5X2tleV9leGlzdHMoJG9wdGlvbiwgJGNvbmZsaWN0aW5nT3B0aW9uc1skd3JhcHBlcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRvcHRpb24pIHx8ICFcYXJyYXlfa2V5X2V4aXN0cygkb3B0aW9uLCAkc3VwcG9ydGVkT3B0aW9uc1skd3JhcHBlcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJHVuc3VwcG9ydGVkT3B0aW9uc1tdID0gXHNwcmludGYoJ3N0cmVhbV9jb250ZXh0LiVzLiVzJywgJHdyYXBwZXIsIChzdHJpbmcpICRvcHRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVuc3VwcG9ydGVkT3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBhcnJheTxzdHJpbmcsIHRydWU+PgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0ZWRTdHJlYW1Db250ZXh0T3B0aW9ucygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdodHRwJyA9PiBbCiAgICAgICAgICAgICAgICAncmVxdWVzdF9mdWxsdXJpJyA9PiB0cnVlLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc29ja2V0JyA9PiBbCiAgICAgICAgICAgICAgICAnYmluZHRvJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ3RjcF9ub2RlbGF5JyA9PiB0cnVlLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc3NsJyA9PiBbCiAgICAgICAgICAgICAgICAnU05JX2VuYWJsZWQnID0+IHRydWUsCiAgICAgICAgICAgICAgICAnY2FwdHVyZV9wZWVyX2NlcnQnID0+IHRydWUsCiAgICAgICAgICAgICAgICAnY2FwdHVyZV9wZWVyX2NlcnRfY2hhaW4nID0+IHRydWUsCiAgICAgICAgICAgICAgICAnY2lwaGVycycgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICdkaXNhYmxlX2NvbXByZXNzaW9uJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ25vX3RpY2tldCcgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICdwZWVyX2ZpbmdlcnByaW50JyA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ3NlY3VyaXR5X2xldmVsJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ3ZlcmlmeV9kZXB0aCcgPT4gdHJ1ZSwKICAgICAgICAgICAgXSwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIGFycmF5PHN0cmluZywgc3RyaW5nPj4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY29uZmxpY3RpbmdTdHJlYW1Db250ZXh0T3B0aW9ucygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdodHRwJyA9PiBbCiAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJ3RoZSByZXF1ZXN0IGJvZHknLAogICAgICAgICAgICAgICAgJ2ZvbGxvd19sb2NhdGlvbicgPT4gJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAnaGVhZGVyJyA9PiAndGhlIHJlcXVlc3QgaGVhZGVycycsCiAgICAgICAgICAgICAgICAnbWF4X3JlZGlyZWN0cycgPT4gJ3RoZSAiYWxsb3dfcmVkaXJlY3RzIiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAndGhlIHJlcXVlc3QgbWV0aG9kJywKICAgICAgICAgICAgICAgICdwcm90b2NvbF92ZXJzaW9uJyA9PiAndGhlIHJlcXVlc3QgcHJvdG9jb2wgdmVyc2lvbicsCiAgICAgICAgICAgICAgICAncHJveHknID0+ICd0aGUgInByb3h5IiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gJ3RoZSAidGltZW91dCIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc3NsJyA9PiBbCiAgICAgICAgICAgICAgICAnYWxsb3dfc2VsZl9zaWduZWQnID0+ICd0aGUgInZlcmlmeSIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICAgICAgJ2NhZmlsZScgPT4gJ3RoZSAidmVyaWZ5IiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAnY2FwYXRoJyA9PiAndGhlICJ2ZXJpZnkiIHJlcXVlc3Qgb3B0aW9uJywKICAgICAgICAgICAgICAgICdjcnlwdG9fbWV0aG9kJyA9PiAndGhlICJjcnlwdG9fbWV0aG9kIiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAnbG9jYWxfY2VydCcgPT4gJ3RoZSAiY2VydCIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICAgICAgJ2xvY2FsX3BrJyA9PiAndGhlICJzc2xfa2V5IiByZXF1ZXN0IG9wdGlvbicsCiAgICAgICAgICAgICAgICAnbWluX3Byb3RvX3ZlcnNpb24nID0+ICd0aGUgImNyeXB0b19tZXRob2QiIHJlcXVlc3Qgb3B0aW9uJywKICAgICAgICAgICAgICAgICdwYXNzcGhyYXNlJyA9PiAndGhlICJjZXJ0IiBvciAic3NsX2tleSIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICAgICAgJ3BlZXJfbmFtZScgPT4gJ3RoZSByZXF1ZXN0IFVSSScsCiAgICAgICAgICAgICAgICAndmVyaWZ5X3BlZXInID0+ICd0aGUgInZlcmlmeSIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyX25hbWUnID0+ICd0aGUgInZlcmlmeSIgcmVxdWVzdCBvcHRpb24nLAogICAgICAgICAgICBdLAogICAgICAgIF07CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRUcmFuc3BvcnRTaGFyaW5nU3VwcG9ydGVkKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnRyYW5zcG9ydFNoYXJpbmdNb2RlID09PSBUcmFuc3BvcnRTaGFyaW5nOjpIQU5ETEVSX1JFUVVJUkUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSAidHJhbnNwb3J0X3NoYXJpbmciIG9wdGlvbiByZXF1aXJlcyB0cmFuc3BvcnQgc2hhcmluZywgYnV0IHRoZSBzdHJlYW0gaGFuZGxlciBkb2VzIG5vdCBzdXBwb3J0IGl0LicpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0N1cmxPcHRpb25HZW5lcmF0ZWRCeUF1dGgoYXJyYXkgJG9wdGlvbnMpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1snY3VybCddKSB8fCAhXGlzX2FycmF5KCRvcHRpb25zWydjdXJsJ10pIHx8ICFpc3NldCgkb3B0aW9uc1snYXV0aCddWzJdKSB8fCAhXGlzX3N0cmluZygkb3B0aW9uc1snYXV0aCddWzJdKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxkZWZpbmVkKCdDVVJMT1BUX0hUVFBBVVRIJykgfHwgIVxkZWZpbmVkKCdDVVJMT1BUX1VTRVJQV0QnKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdHlwZSA9IFxzdHJ0b2xvd2VyKCRvcHRpb25zWydhdXRoJ11bMl0pOwogICAgICAgIGlmICgkdHlwZSA9PT0gJ2RpZ2VzdCcpIHsKICAgICAgICAgICAgJGh0dHBBdXRoID0gXGRlZmluZWQoJ0NVUkxBVVRIX0RJR0VTVCcpID8gXGNvbnN0YW50KCdDVVJMQVVUSF9ESUdFU1QnKSA6IG51bGw7CiAgICAgICAgfSBlbHNlaWYgKCR0eXBlID09PSAnbnRsbScpIHsKICAgICAgICAgICAgJGh0dHBBdXRoID0gXGRlZmluZWQoJ0NVUkxBVVRIX05UTE0nKSA/IFxjb25zdGFudCgnQ1VSTEFVVEhfTlRMTScpIDogbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGh0dHBBdXRoICE9PSBudWxsCiAgICAgICAgICAgICYmIFxjb3VudCgkb3B0aW9uc1snY3VybCddKSA9PT0gMgogICAgICAgICAgICAmJiBpc3NldCgkb3B0aW9uc1snY3VybCddW1xDVVJMT1BUX0hUVFBBVVRIXSwgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9VU0VSUFdEXSkKICAgICAgICAgICAgJiYgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9IVFRQQVVUSF0gPT09ICRodHRwQXV0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOiBzdHJpbmcsIDE6IHN0cmluZ3xudWxsfQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVUbHNGaWxlT3B0aW9uKHN0cmluZyAkb3B0aW9uLCAkdmFsdWUpOiBhcnJheQogICAgewogICAgICAgICRwYXNzcGhyYXNlID0gbnVsbDsKCiAgICAgICAgaWYgKFxpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHZhbHVlWzBdKSB8fCAhXGlzX3N0cmluZygkdmFsdWVbMF0pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignSW52YWxpZCAlcyByZXF1ZXN0IG9wdGlvbicsICRvcHRpb24pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJHZhbHVlWzFdKSkgewogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2YWx1ZVsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignSW52YWxpZCAlcyByZXF1ZXN0IG9wdGlvbicsICRvcHRpb24pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRwYXNzcGhyYXNlID0gJHZhbHVlWzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR2YWx1ZSA9ICR2YWx1ZVswXTsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdJbnZhbGlkICVzIHJlcXVlc3Qgb3B0aW9uJywgJG9wdGlvbikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskdmFsdWUsICRwYXNzcGhyYXNlXTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZXRUbHNQYXNzcGhyYXNlKGFycmF5ICYkb3B0aW9ucywgP3N0cmluZyAkcGFzc3BocmFzZSwgc3RyaW5nICRvcHRpb24pOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRwYXNzcGhyYXNlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc3NsJ11bJ3Bhc3NwaHJhc2UnXSkgJiYgJG9wdGlvbnNbJ3NzbCddWydwYXNzcGhyYXNlJ10gIT09ICRwYXNzcGhyYXNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdDYW5ub3QgdXNlIGRpZmZlcmVudCBwYXNzcGhyYXNlcyBmb3IgY2VydCBhbmQgc3NsX2tleSB3aXRoIHRoZSBzdHJlYW0gaGFuZGxlcjsgJXMgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgVExTIHBhc3NwaHJhc2UuJywgJG9wdGlvbikpOwogICAgICAgIH0KCiAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydwYXNzcGhyYXNlJ10gPSAkcGFzc3BocmFzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFzc2VydFN0cmVhbVRsc1R5cGUoc3RyaW5nICRvcHRpb24sICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHZhbHVlKSB8fCAkdmFsdWUgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCclcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICRvcHRpb24pKTsKICAgICAgICB9CgogICAgICAgIGlmIChcc3RydG91cHBlcigkdmFsdWUpICE9PSAnUEVNJykgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIHN0cmVhbSBoYW5kbGVyIG9ubHkgc3VwcG9ydHMgIlBFTSIgZm9yIHRoZSAlcyByZXF1ZXN0IG9wdGlvbi4nLCAkb3B0aW9uKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBhcyBwYXNzZWQgdmlhIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfcHJveHkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgICR1cmkgPSBudWxsOwoKICAgICAgICBpZiAoIVxpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICR1cmkgPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNjaGVtZSA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgICAgIGlmIChpc3NldCgkdmFsdWVbJHNjaGVtZV0pKSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgIWlzc2V0KCR2YWx1ZVsnbm8nXSkKICAgICAgICAgICAgICAgICAgICB8fCAhVXRpbHM6OmlzVXJpSW5Ob1Byb3h5KCRyZXF1ZXN0LT5nZXRVcmkoKSwgJHZhbHVlWydubyddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVyaSA9ICR2YWx1ZVskc2NoZW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEkdXJpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRwYXJzZWQgPSAkdGhpcy0+cGFyc2VfcHJveHkoJHVyaSk7CiAgICAgICAgJG9wdGlvbnNbJ2h0dHAnXVsncHJveHknXSA9ICRwYXJzZWRbJ3Byb3h5J107CgogICAgICAgIGlmICgkcGFyc2VkWydhdXRoJ10pIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1snaHR0cCddWydoZWFkZXInXSkpIHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ2hlYWRlciddID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ10gLj0gIlxyXG5Qcm94eS1BdXRob3JpemF0aW9uOiB7JHBhcnNlZFsnYXV0aCddfSI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIHRoZSBnaXZlbiBwcm94eSBVUkwgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggdGhlIGZvcm1hdCBQSFAncyBzdHJlYW0gY29udGV4dCBleHBlY3RzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlX3Byb3h5KHN0cmluZyAkdXJsKTogYXJyYXkKICAgIHsKICAgICAgICAkcGFyc2VkID0gXHBhcnNlX3VybCgkdXJsKTsKCiAgICAgICAgLy8gcGFyc2VfdXJsKCkgbWlzcmVhZHMgc2NoZW1lLWxlc3MgcHJveHkgYXV0aG9yaXRpZXMgbGlrZQogICAgICAgIC8vICJ1c2VyOnBhc3NAaG9zdCI7IHJlLXBhcnNlIG9ubHkgdGhvc2UgZm9ybXMgYXMgSFRUUC4KICAgICAgICAkc2NoZW1lTGVzc0F1dGhvcml0eSA9IFxzdHJwb3MoJHVybCwgJzovLycpID09PSBmYWxzZSAmJiBcc3RybmNtcCgkdXJsLCAnLy8nLCAyKSAhPT0gMDsKICAgICAgICBpZiAoJHNjaGVtZUxlc3NBdXRob3JpdHkpIHsKICAgICAgICAgICAgaWYgKFxpc19hcnJheSgkcGFyc2VkKSAmJiAhaXNzZXQoJHBhcnNlZFsnc2NoZW1lJ10pICYmIGlzc2V0KCRwYXJzZWRbJ2hvc3QnXSwgJHBhcnNlZFsncG9ydCddKSkgewogICAgICAgICAgICAgICAgJHBhcnNlZFsnc2NoZW1lJ10gPSAnaHR0cCc7CiAgICAgICAgICAgIH0gZWxzZWlmICgKICAgICAgICAgICAgICAgICghXGlzX2FycmF5KCRwYXJzZWQpIHx8ICFpc3NldCgkcGFyc2VkWydob3N0J10pKQogICAgICAgICAgICAgICAgJiYgKFxzdHJwb3MoJHVybCwgJ0AnKSAhPT0gZmFsc2UgfHwgXHN0cm5jbXAoJHVybCwgJ1snLCAxKSA9PT0gMCkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkcGFyc2VkID0gXHBhcnNlX3VybCgnaHR0cDovLycuJHVybCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChcaXNfYXJyYXkoJHBhcnNlZCkgJiYgaXNzZXQoJHBhcnNlZFsnc2NoZW1lJ10pICYmIFxzdHJjYXNlY21wKCRwYXJzZWRbJ3NjaGVtZSddLCAnaHR0cCcpID09PSAwKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkcGFyc2VkWydob3N0J10sICRwYXJzZWRbJ3BvcnQnXSkpIHsKICAgICAgICAgICAgICAgICR1c2VyID0gJHBhcnNlZFsndXNlciddID8/ICcnOwogICAgICAgICAgICAgICAgJHBhc3MgPSAkcGFyc2VkWydwYXNzJ10gPz8gJyc7CiAgICAgICAgICAgICAgICAkYXV0aCA9ICgkdXNlciAhPT0gJycgfHwgJHBhc3MgIT09ICcnKSA/ICdCYXNpYyAnLlxiYXNlNjRfZW5jb2RlKCJ7JHVzZXJ9OnskcGFzc30iKSA6IG51bGw7CgogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAncHJveHknID0+ICJ0Y3A6Ly97JHBhcnNlZFsnaG9zdCddfTp7JHBhcnNlZFsncG9ydCddfSIsCiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnID0+ICRhdXRoLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHByb3h5IGFzLWlzLgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdwcm94eScgPT4gJHVybCwKICAgICAgICAgICAgJ2F1dGgnID0+IG51bGwsCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3RpbWVvdXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgIGlmICgkdmFsdWUgPiAwKSB7CiAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ3RpbWVvdXQnXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9jcnlwdG9fbWV0aG9kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICYkb3B0aW9ucywgJHZhbHVlLCBhcnJheSAmJHBhcmFtcyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzBfQ0xJRU5UCiAgICAgICAgICAgIHx8ICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzFfQ0xJRU5UCiAgICAgICAgICAgIHx8ICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzJfQ0xJRU5UCiAgICAgICAgICAgIHx8IChkZWZpbmVkKCdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX0NMSUVOVCcpICYmICR2YWx1ZSA9PT0gXFNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzNfQ0xJRU5UKQogICAgICAgICkgewogICAgICAgICAgICAkb3B0aW9uc1snaHR0cCddWydjcnlwdG9fbWV0aG9kJ10gPSAkdmFsdWU7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjcnlwdG9fbWV0aG9kIHJlcXVlc3Qgb3B0aW9uOiB1bmtub3duIHZlcnNpb24gcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgYXMgcGFzc2VkIHZpYSBSZXF1ZXN0IHRyYW5zZmVyIG9wdGlvbnMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3ZlcmlmeShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWyd2ZXJpZnlfcGVlciddID0gZmFsc2U7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXJfbmFtZSddID0gZmFsc2U7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoXGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsnY2FmaWxlJ10gPSAkdmFsdWU7CiAgICAgICAgICAgIGlmICghXGZpbGVfZXhpc3RzKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiU1NMIENBIGJ1bmRsZSBub3QgZm91bmQ6ICR2YWx1ZSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCR2YWx1ZSAhPT0gdHJ1ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB2ZXJpZnkgcmVxdWVzdCBvcHRpb24nKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXInXSA9IHRydWU7CiAgICAgICAgJG9wdGlvbnNbJ3NzbCddWyd2ZXJpZnlfcGVlcl9uYW1lJ10gPSB0cnVlOwogICAgICAgICRvcHRpb25zWydzc2wnXVsnYWxsb3dfc2VsZl9zaWduZWQnXSA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBhcyBwYXNzZWQgdmlhIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfY2VydChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgWyR2YWx1ZSwgJHBhc3NwaHJhc2VdID0gc2VsZjo6bm9ybWFsaXplVGxzRmlsZU9wdGlvbignY2VydCcsICR2YWx1ZSk7CgogICAgICAgIGlmICghXGZpbGVfZXhpc3RzKCR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJTU0wgY2VydGlmaWNhdGUgbm90IGZvdW5kOiB7JHZhbHVlfSIpOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6c2V0VGxzUGFzc3BocmFzZSgkb3B0aW9ucywgJHBhc3NwaHJhc2UsICdjZXJ0Jyk7CiAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydsb2NhbF9jZXJ0J10gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9jZXJ0X3R5cGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgIHNlbGY6OmFzc2VydFN0cmVhbVRsc1R5cGUoJ2NlcnRfdHlwZScsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9zc2xfa2V5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICYkb3B0aW9ucywgJHZhbHVlLCBhcnJheSAmJHBhcmFtcyk6IHZvaWQKICAgIHsKICAgICAgICBbJHZhbHVlLCAkcGFzc3BocmFzZV0gPSBzZWxmOjpub3JtYWxpemVUbHNGaWxlT3B0aW9uKCdzc2xfa2V5JywgJHZhbHVlKTsKCiAgICAgICAgaWYgKCFcZmlsZV9leGlzdHMoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlNTTCBwcml2YXRlIGtleSBub3QgZm91bmQ6IHskdmFsdWV9Iik7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjpzZXRUbHNQYXNzcGhyYXNlKCRvcHRpb25zLCAkcGFzc3BocmFzZSwgJ3NzbF9rZXknKTsKICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ2xvY2FsX3BrJ10gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9zc2xfa2V5X3R5cGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zLCAkdmFsdWUsIGFycmF5ICYkcGFyYW1zKTogdm9pZAogICAgewogICAgICAgIHNlbGY6OmFzc2VydFN0cmVhbVRsc1R5cGUoJ3NzbF9rZXlfdHlwZScsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9wcm9ncmVzcyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfY2FsbGFibGUoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncHJvZ3Jlc3MgY2xpZW50IG9wdGlvbiBtdXN0IGJlIGNhbGxhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjphZGROb3RpZmljYXRpb24oCiAgICAgICAgICAgICRwYXJhbXMsCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJGNvZGUsICRhLCAkYiwgJGMsICR0cmFuc2ZlcnJlZCwgJHRvdGFsKSB1c2UgKCR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCRjb2RlID09IFxTVFJFQU1fTk9USUZZX1BST0dSRVNTKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVwbG9hZCBwcm9ncmVzcyBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4gVXNlIDAgZm9yIGNVUkwgY29tcGF0aWJpbGl0eToKICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2N1cmwuc2UvbGliY3VybC9jL0NVUkxPUFRfUFJPR1JFU1NGVU5DVElPTi5odG1sCiAgICAgICAgICAgICAgICAgICAgJHZhbHVlKCR0b3RhbCwgJHRyYW5zZmVycmVkLCAwLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGFzIHBhc3NlZCB2aWEgUmVxdWVzdCB0cmFuc2ZlciBvcHRpb25zLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9kZWJ1ZyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMsICR2YWx1ZSwgYXJyYXkgJiRwYXJhbXMpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRtYXAgPSBbCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX0NPTk5FQ1QgPT4gJ0NPTk5FQ1QnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9BVVRIX1JFUVVJUkVEID0+ICdBVVRIX1JFUVVJUkVEJywKICAgICAgICAgICAgXFNUUkVBTV9OT1RJRllfQVVUSF9SRVNVTFQgPT4gJ0FVVEhfUkVTVUxUJywKICAgICAgICAgICAgXFNUUkVBTV9OT1RJRllfTUlNRV9UWVBFX0lTID0+ICdNSU1FX1RZUEVfSVMnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9GSUxFX1NJWkVfSVMgPT4gJ0ZJTEVfU0laRV9JUycsCiAgICAgICAgICAgIFxTVFJFQU1fTk9USUZZX1JFRElSRUNURUQgPT4gJ1JFRElSRUNURUQnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9QUk9HUkVTUyA9PiAnUFJPR1JFU1MnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9GQUlMVVJFID0+ICdGQUlMVVJFJywKICAgICAgICAgICAgXFNUUkVBTV9OT1RJRllfQ09NUExFVEVEID0+ICdDT01QTEVURUQnLAogICAgICAgICAgICBcU1RSRUFNX05PVElGWV9SRVNPTFZFID0+ICdSRVNPTFZFJywKICAgICAgICBdOwogICAgICAgIHN0YXRpYyAkYXJncyA9IFsnc2V2ZXJpdHknLCAnbWVzc2FnZScsICdtZXNzYWdlX2NvZGUnLCAnYnl0ZXNfdHJhbnNmZXJyZWQnLCAnYnl0ZXNfbWF4J107CgogICAgICAgICR2YWx1ZSA9IFV0aWxzOjpkZWJ1Z1Jlc291cmNlKCR2YWx1ZSk7CiAgICAgICAgJGlkZW50ID0gJHJlcXVlc3QtPmdldE1ldGhvZCgpLicgJy4kcmVxdWVzdC0+Z2V0VXJpKCktPndpdGhGcmFnbWVudCgnJyk7CiAgICAgICAgc2VsZjo6YWRkTm90aWZpY2F0aW9uKAogICAgICAgICAgICAkcGFyYW1zLAogICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKGludCAkY29kZSwgLi4uJHBhc3NlZCkgdXNlICgkaWRlbnQsICR2YWx1ZSwgJG1hcCwgJGFyZ3MpOiB2b2lkIHsKICAgICAgICAgICAgICAgIFxmcHJpbnRmKCR2YWx1ZSwgJzwlcz4gWyVzXSAnLCAkaWRlbnQsICRtYXBbJGNvZGVdKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKFxhcnJheV9maWx0ZXIoJHBhc3NlZCkgYXMgJGkgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICBcZndyaXRlKCR2YWx1ZSwgJGFyZ3NbJGldLic6ICInLiR2LiciICcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXGZ3cml0ZSgkdmFsdWUsICJcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBhZGROb3RpZmljYXRpb24oYXJyYXkgJiRwYXJhbXMsIGNhbGxhYmxlICRub3RpZnkpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gV3JhcCB0aGUgZXhpc3RpbmcgZnVuY3Rpb24gaWYgbmVlZGVkLgogICAgICAgIGlmICghaXNzZXQoJHBhcmFtc1snbm90aWZpY2F0aW9uJ10pKSB7CiAgICAgICAgICAgICRwYXJhbXNbJ25vdGlmaWNhdGlvbiddID0gJG5vdGlmeTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyYW1zWydub3RpZmljYXRpb24nXSA9IHNlbGY6OmNhbGxBcnJheShbCiAgICAgICAgICAgICAgICAkcGFyYW1zWydub3RpZmljYXRpb24nXSwKICAgICAgICAgICAgICAgICRub3RpZnksCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYWxsQXJyYXkoYXJyYXkgJGZ1bmN0aW9ucyk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoLi4uJGFyZ3MpIHVzZSAoJGZ1bmN0aW9ucykgewogICAgICAgICAgICBmb3JlYWNoICgkZnVuY3Rpb25zIGFzICRmbikgewogICAgICAgICAgICAgICAgJGZuKC4uLiRhcmdzKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/HandlerStack.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBDcmVhdGVzIGEgY29tcG9zZWQgR3V6emxlIGhhbmRsZXIgZnVuY3Rpb24gYnkgc3RhY2tpbmcgbWlkZGxld2FyZXMgb24gdG9wIG9mCiAqIGFuIEhUVFAgaGFuZGxlciBmdW5jdGlvbi4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBIYW5kbGVyU3RhY2sKewogICAgLyoqCiAgICAgKiBAdmFyIChjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UpfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaGFuZGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl7KGNhbGxhYmxlKGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSk6IGNhbGxhYmxlKSwgKHN0cmluZ3xudWxsKX1bXQogICAgICovCiAgICBwcml2YXRlICRzdGFjayA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNhY2hlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHdpbGwgd3JhcCB0aGUgcHJvdmlkZWQgaGFuZGxlciBvciB1c2UgdGhlIG1vc3QKICAgICAqIGFwcHJvcHJpYXRlIGRlZmF1bHQgaGFuZGxlciBmb3IgeW91ciBzeXN0ZW0uIFRoZSByZXR1cm5lZCBIYW5kbGVyU3RhY2sgaGFzCiAgICAgKiBzdXBwb3J0IGZvciBjb29raWVzLCByZWRpcmVjdHMsIEhUVFAgZXJyb3IgZXhjZXB0aW9ucywgYW5kIHByZXBhcmluZyBhIGJvZHkKICAgICAqIGJlZm9yZSBzZW5kaW5nLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YWNrIGNhbiBiZSBwYXNzZWQgdG8gYSBjbGllbnQgaW4gdGhlICJoYW5kbGVyIgogICAgICogb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsICRoYW5kbGVyIEhUVFAgaGFuZGxlciBmdW5jdGlvbiB0byB1c2Ugd2l0aCB0aGUgc3RhY2suIElmIG5vCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGlzIHByb3ZpZGVkLCB0aGUgYmVzdCBoYW5kbGVyIGZvciB5b3VyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2lsbCBiZSB1dGlsaXplZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoP2NhbGxhYmxlICRoYW5kbGVyID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICAkc3RhY2sgPSBuZXcgc2VsZigkaGFuZGxlciA/OiBVdGlsczo6Y2hvb3NlSGFuZGxlcigpKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6aHR0cEVycm9ycygpLCAnaHR0cF9lcnJvcnMnKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6cmVkaXJlY3QoKSwgJ2FsbG93X3JlZGlyZWN0cycpOwogICAgICAgICRzdGFjay0+cHVzaChNaWRkbGV3YXJlOjpjb29raWVzKCksICdjb29raWVzJyk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6OnByZXBhcmVCb2R5KCksICdwcmVwYXJlX2JvZHknKTsKCiAgICAgICAgcmV0dXJuICRzdGFjazsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAoY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlKXxudWxsICRoYW5kbGVyIFVuZGVybHlpbmcgSFRUUCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2NhbGxhYmxlICRoYW5kbGVyID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+aGFuZGxlciA9ICRoYW5kbGVyOwogICAgfQoKICAgIC8qKgogICAgICogSW52b2tlcyB0aGUgaGFuZGxlciBzdGFjayBhcyBhIGNvbXBvc2VkIGhhbmRsZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRoYW5kbGVyID0gJHRoaXMtPnJlc29sdmUoKTsKCiAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEdW1wcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhY2suCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRkZXB0aCA9IDA7CiAgICAgICAgJHN0YWNrID0gW107CgogICAgICAgIGlmICgkdGhpcy0+aGFuZGxlciAhPT0gbnVsbCkgewogICAgICAgICAgICAkc3RhY2tbXSA9ICcwKSBIYW5kbGVyOiAnLiR0aGlzLT5kZWJ1Z0NhbGxhYmxlKCR0aGlzLT5oYW5kbGVyKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoIChcYXJyYXlfcmV2ZXJzZSgkdGhpcy0+c3RhY2spIGFzICR0dXBsZSkgewogICAgICAgICAgICArKyRkZXB0aDsKICAgICAgICAgICAgJHN0ciA9ICJ7JGRlcHRofSkgTmFtZTogJ3skdHVwbGVbMV19JywgIjsKICAgICAgICAgICAgJHN0ciAuPSAnRnVuY3Rpb246ICcuJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHR1cGxlWzBdKTsKICAgICAgICAgICAgJHJlc3VsdCA9ICI+IHskc3RyfVxueyRyZXN1bHR9IjsKICAgICAgICAgICAgJHN0YWNrW10gPSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoXGFycmF5X2tleXMoJHN0YWNrKSBhcyAkaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICI8IHskc3RhY2tbJGtdfVxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBIVFRQIGhhbmRsZXIgdGhhdCBhY3R1YWxseSByZXR1cm5zIGEgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRoYW5kbGVyIEFjY2VwdHMgYSByZXF1ZXN0IGFuZCBhcnJheSBvZiBvcHRpb25zIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgUHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhhbmRsZXIoY2FsbGFibGUgJGhhbmRsZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVpbGRlciBoYXMgYSBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzSGFuZGxlcigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyICE9PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogVW5zaGlmdCBhIG1pZGRsZXdhcmUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUgICAgICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdChjYWxsYWJsZSAkbWlkZGxld2FyZSwgP3N0cmluZyAkbmFtZSA9IG51bGwpOiB2b2lkCiAgICB7CiAgICAgICAgXGFycmF5X3Vuc2hpZnQoJHRoaXMtPnN0YWNrLCBbJG1pZGRsZXdhcmUsICRuYW1lXSk7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgbWlkZGxld2FyZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAkbmFtZSAgICAgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKGNhbGxhYmxlICRtaWRkbGV3YXJlLCBzdHJpbmcgJG5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3RhY2tbXSA9IFskbWlkZGxld2FyZSwgJG5hbWVdOwogICAgICAgICR0aGlzLT5jYWNoZWQgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEgbWlkZGxld2FyZSBiZWZvcmUgYW5vdGhlciBtaWRkbGV3YXJlIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJGZpbmROYW1lICAgTWlkZGxld2FyZSB0byBmaW5kCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoY2FsbGFibGUpOiBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAkd2l0aE5hbWUgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWZvcmUoc3RyaW5nICRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsIHN0cmluZyAkd2l0aE5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBtaWRkbGV3YXJlIGFmdGVyIGFub3RoZXIgbWlkZGxld2FyZSBieSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICRmaW5kTmFtZSAgIE1pZGRsZXdhcmUgdG8gZmluZAogICAgICogQHBhcmFtIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgJHdpdGhOYW1lICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWZ0ZXIoc3RyaW5nICRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsIHN0cmluZyAkd2l0aE5hbWUgPSAnJyk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWlkZGxld2FyZSBieSBpbnN0YW5jZSBvciBuYW1lIGZyb20gdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxzdHJpbmcgJHJlbW92ZSBNaWRkbGV3YXJlIHRvIHJlbW92ZSBieSBpbnN0YW5jZSBvciBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRyZW1vdmUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHJlbW92ZSkgJiYgIWlzX2NhbGxhYmxlKCRyZW1vdmUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKCdndXp6bGVodHRwL2d1enpsZScsICc3LjQnLCAnTm90IHBhc3NpbmcgYSBjYWxsYWJsZSBvciBzdHJpbmcgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiA4LjAuJywgX19DTEFTU19fLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CgogICAgICAgIGlmIChcaXNfc3RyaW5nKCRyZW1vdmUpKSB7CiAgICAgICAgICAgICRjb3VudCA9IFxjb3VudCgkdGhpcy0+c3RhY2spOwogICAgICAgICAgICAkdGhpcy0+c3RhY2sgPSBcYXJyYXlfdmFsdWVzKFxhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+c3RhY2ssCiAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCR0dXBsZSkgdXNlICgkcmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0dXBsZVsxXSAhPT0gJHJlbW92ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKSk7CgogICAgICAgICAgICBpZiAoJGNvdW50ICE9PSBcY291bnQoJHRoaXMtPnN0YWNrKSB8fCAhXGlzX2NhbGxhYmxlKCRyZW1vdmUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdGFjayA9IFxhcnJheV92YWx1ZXMoXGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPnN0YWNrLAogICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCR0dXBsZSkgdXNlICgkcmVtb3ZlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHR1cGxlWzBdICE9PSAkcmVtb3ZlOwogICAgICAgICAgICB9CiAgICAgICAgKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wb3NlIHRoZSBtaWRkbGV3YXJlIGFuZCBoYW5kbGVyIGludG8gYSBzaW5nbGUgY2FsbGFibGUgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoKTogY2FsbGFibGUKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNhY2hlZCA9PT0gbnVsbCkgewogICAgICAgICAgICBpZiAoKCRwcmV2ID0gJHRoaXMtPmhhbmRsZXIpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdObyBoYW5kbGVyIGhhcyBiZWVuIHNwZWNpZmllZCcpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoIChcYXJyYXlfcmV2ZXJzZSgkdGhpcy0+c3RhY2spIGFzICRmbikgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRwcmV2ICovCiAgICAgICAgICAgICAgICAkcHJldiA9ICRmblswXSgkcHJldik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5jYWNoZWQgPSAkcHJldjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y2FjaGVkOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEJ5TmFtZShzdHJpbmcgJG5hbWUpOiBpbnQKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RhY2sgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCR2WzFdID09PSAkbmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTWlkZGxld2FyZSBub3QgZm91bmQ6ICRuYW1lIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpY2VzIGEgZnVuY3Rpb24gaW50byB0aGUgbWlkZGxld2FyZSBsaXN0IGF0IGEgc3BlY2lmaWMgcG9zaXRpb24uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3BsaWNlKHN0cmluZyAkZmluZE5hbWUsIHN0cmluZyAkd2l0aE5hbWUsIGNhbGxhYmxlICRtaWRkbGV3YXJlLCBib29sICRiZWZvcmUpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICAgICAgJGlkeCA9ICR0aGlzLT5maW5kQnlOYW1lKCRmaW5kTmFtZSk7CiAgICAgICAgJHR1cGxlID0gWyRtaWRkbGV3YXJlLCAkd2l0aE5hbWVdOwoKICAgICAgICBpZiAoJGJlZm9yZSkgewogICAgICAgICAgICBpZiAoJGlkeCA9PT0gMCkgewogICAgICAgICAgICAgICAgXGFycmF5X3Vuc2hpZnQoJHRoaXMtPnN0YWNrLCAkdHVwbGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlcGxhY2VtZW50ID0gWyR0dXBsZSwgJHRoaXMtPnN0YWNrWyRpZHhdXTsKICAgICAgICAgICAgICAgIFxhcnJheV9zcGxpY2UoJHRoaXMtPnN0YWNrLCAkaWR4LCAxLCAkcmVwbGFjZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCRpZHggPT09IFxjb3VudCgkdGhpcy0+c3RhY2spIC0gMSkgewogICAgICAgICAgICAkdGhpcy0+c3RhY2tbXSA9ICR0dXBsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHRoaXMtPnN0YWNrWyRpZHhdLCAkdHVwbGVdOwogICAgICAgICAgICBcYXJyYXlfc3BsaWNlKCR0aGlzLT5zdGFjaywgJGlkeCwgMSwgJHJlcGxhY2VtZW50KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm92aWRlcyBhIGRlYnVnIHN0cmluZyBmb3IgYSBnaXZlbiBjYWxsYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGV8c3RyaW5nICRmbiBGdW5jdGlvbiB0byB3cml0ZSBhcyBhIHN0cmluZy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWJ1Z0NhbGxhYmxlKCRmbik6IHN0cmluZwogICAgewogICAgICAgIGlmIChcaXNfc3RyaW5nKCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuICJjYWxsYWJsZSh7JGZufSkiOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19hcnJheSgkZm4pKSB7CiAgICAgICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCRmblswXSkKICAgICAgICAgICAgICAgID8gImNhbGxhYmxlKHskZm5bMF19Ojp7JGZuWzFdfSkiCiAgICAgICAgICAgICAgICA6ICJjYWxsYWJsZShbJyIuXGdldF9jbGFzcygkZm5bMF0pLiInLCAneyRmblsxXX0nXSkiOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgb2JqZWN0ICRmbiAqLwogICAgICAgIHJldHVybiAnY2FsbGFibGUoJy5cc3BsX29iamVjdF9oYXNoKCRmbikuJyknOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/MessageFormatter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogRm9ybWF0cyBsb2cgbWVzc2FnZXMgdXNpbmcgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBmb3IgcmVxdWVzdHMsIHJlc3BvbnNlcywKICogYW5kIG90aGVyIHRyYW5zYWN0aW9uYWwgZGF0YS4KICoKICogVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFyZSBzdXBwb3J0ZWQ6CiAqCiAqIC0ge3JlcXVlc3R9OiAgICAgICAgRnVsbCBIVFRQIHJlcXVlc3QgbWVzc2FnZQogKiAtIHtyZXNwb25zZX06ICAgICAgIEZ1bGwgSFRUUCByZXNwb25zZSBtZXNzYWdlCiAqIC0ge3RzfTogICAgICAgICAgICAgSVNPIDg2MDEgZGF0ZSBpbiBHTVQKICogLSB7ZGF0ZV9pc29fODYwMX0gICBJU08gODYwMSBkYXRlIGluIEdNVAogKiAtIHtkYXRlX2NvbW1vbl9sb2d9IEFwYWNoZSBjb21tb24gbG9nIGRhdGUgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgdGltZXpvbmUuCiAqIC0ge2hvc3R9OiAgICAgICAgICAgSG9zdCBvZiB0aGUgcmVxdWVzdAogKiAtIHttZXRob2R9OiAgICAgICAgIE1ldGhvZCBvZiB0aGUgcmVxdWVzdAogKiAtIHt1cml9OiAgICAgICAgICAgIFVSSSBvZiB0aGUgcmVxdWVzdAogKiAtIHt2ZXJzaW9ufTogICAgICAgIFByb3RvY29sIHZlcnNpb24KICogLSB7dGFyZ2V0fTogICAgICAgICBSZXF1ZXN0IHRhcmdldCBvZiB0aGUgcmVxdWVzdCAocGF0aCArIHF1ZXJ5ICsgZnJhZ21lbnQpCiAqIC0ge2hvc3RuYW1lfTogICAgICAgSG9zdG5hbWUgb2YgdGhlIG1hY2hpbmUgdGhhdCBzZW50IHRoZSByZXF1ZXN0CiAqIC0ge2NvZGV9OiAgICAgICAgICAgU3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlIChpZiBhdmFpbGFibGUpCiAqIC0ge3BocmFzZX06ICAgICAgICAgUmVhc29uIHBocmFzZSBvZiB0aGUgcmVzcG9uc2UgIChpZiBhdmFpbGFibGUpCiAqIC0ge2Vycm9yfTogICAgICAgICAgQW55IGVycm9yIG1lc3NhZ2VzIChpZiBhdmFpbGFibGUpCiAqIC0ge3JlcV9oZWFkZXJfKn06ICAgUmVwbGFjZSBgKmAgd2l0aCB0aGUgbG93ZXJjYXNlZCBuYW1lIG9mIGEgcmVxdWVzdCBoZWFkZXIgdG8gYWRkIHRvIHRoZSBtZXNzYWdlCiAqIC0ge3Jlc19oZWFkZXJfKn06ICAgUmVwbGFjZSBgKmAgd2l0aCB0aGUgbG93ZXJjYXNlZCBuYW1lIG9mIGEgcmVzcG9uc2UgaGVhZGVyIHRvIGFkZCB0byB0aGUgbWVzc2FnZQogKiAtIHtyZXFfaGVhZGVyc306ICAgIFJlcXVlc3QgaGVhZGVycwogKiAtIHtyZXNfaGVhZGVyc306ICAgIFJlc3BvbnNlIGhlYWRlcnMKICogLSB7cmVxX2JvZHl9OiAgICAgICBSZXF1ZXN0IGJvZHkKICogLSB7cmVzX2JvZHl9OiAgICAgICBSZXNwb25zZSBib2R5CiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgTWVzc2FnZUZvcm1hdHRlciBpbXBsZW1lbnRzIE1lc3NhZ2VGb3JtYXR0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBBcGFjaGUgQ29tbW9uIExvZyBGb3JtYXQuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbG9ncy5odG1sI2NvbW1vbgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTEYgPSAne2hvc3RuYW1lfSB7cmVxX2hlYWRlcl9Vc2VyLUFnZW50fSAtIFt7ZGF0ZV9jb21tb25fbG9nfV0gInttZXRob2R9IHt0YXJnZXR9IEhUVFAve3ZlcnNpb259IiB7Y29kZX0ge3Jlc19oZWFkZXJfQ29udGVudC1MZW5ndGh9JzsKICAgIHB1YmxpYyBjb25zdCBERUJVRyA9ICI+Pj4+Pj4+Plxue3JlcXVlc3R9XG48PDw8PDw8PFxue3Jlc3BvbnNlfVxuLS0tLS0tLS1cbntlcnJvcn0iOwogICAgcHVibGljIGNvbnN0IFNIT1JUID0gJ1t7dHN9XSAie21ldGhvZH0ge3RhcmdldH0gSFRUUC97dmVyc2lvbn0iIHtjb2RlfSc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBUZW1wbGF0ZSB1c2VkIHRvIGZvcm1hdCBsb2cgbWVzc2FnZXMKICAgICAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZSBMb2cgbWVzc2FnZSB0ZW1wbGF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkdGVtcGxhdGUgPSBzZWxmOjpDTEYpCiAgICB7CiAgICAgICAgJHRoaXMtPnRlbXBsYXRlID0gJHRlbXBsYXRlID86IHNlbGY6OkNMRjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbWVzc2FnZSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXFRocm93YWJsZXxudWxsICAgICAgICAkZXJyb3IgICAgRXhjZXB0aW9uIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsID9cVGhyb3dhYmxlICRlcnJvciA9IG51bGwpOiBzdHJpbmcKICAgIHsKICAgICAgICAkY2FjaGUgPSBbXTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICAgICAgcmV0dXJuIFxwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcve1xzKihbQS1aYS16X1wtXC4wLTldKylccyp9LycsCiAgICAgICAgICAgIGZ1bmN0aW9uIChhcnJheSAkbWF0Y2hlcykgdXNlICgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZXJyb3IsICYkY2FjaGUpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY2FjaGVbJG1hdGNoZXNbMV1dKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkY2FjaGVbJG1hdGNoZXNbMV1dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJG1hdGNoZXNbMV0pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IFBzcjdcTWVzc2FnZTo6dG9TdHJpbmcoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNwb25zZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyBQc3I3XE1lc3NhZ2U6OnRvU3RyaW5nKCRyZXNwb25zZSkgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX2hlYWRlcnMnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXHRyaW0oJHJlcXVlc3QtPmdldE1ldGhvZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLicgJy4kcmVxdWVzdC0+Z2V0UmVxdWVzdFRhcmdldCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicgSFRUUC8nLiRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKS4iXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4kdGhpcy0+aGVhZGVycygkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc19oZWFkZXJzJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNwb25zZSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUC8lcyAlZCAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLiJcclxuIi4kdGhpcy0+aGVhZGVycygkcmVzcG9uc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX2JvZHknOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldEJvZHkoKS0+X190b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfYm9keSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHJlc3BvbnNlIGluc3RhbmNlb2YgUmVzcG9uc2VJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGJvZHkgPSAkcmVzcG9uc2UtPmdldEJvZHkoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICdSRVNQT05TRV9OT1RfTE9HR0VBQkxFJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPl9fdG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndHMnOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVfaXNvXzg2MDEnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGdtZGF0ZSgnYycpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlX2NvbW1vbl9sb2cnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGRhdGUoJ2QvTS9ZOkg6aTpzIE8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWV0aG9kJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRNZXRob2QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VyaSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+X190b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0YXJnZXQnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldFJlcXVlc3RUYXJnZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVxX3ZlcnNpb24nOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfdmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3QnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlcXVlc3QtPmdldEhlYWRlckxpbmUoJ0hvc3QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdG5hbWUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gXGdldGhvc3RuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BocmFzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZXJyb3IgPyAkZXJyb3ItPmdldE1lc3NhZ2UoKSA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHByZWZpeGVkIGR5bmFtaWMgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3JlcV9oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0SGVhZGVyTGluZShcc3Vic3RyKCRtYXRjaGVzWzFdLCAxMSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoXHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3Jlc19oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZShcc3Vic3RyKCRtYXRjaGVzWzFdLCAxMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY2FjaGVbJG1hdGNoZXNbMV1dID0gJHJlc3VsdDsKCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJHRoaXMtPnRlbXBsYXRlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBoZWFkZXJzIGZyb20gbWVzc2FnZSBhcyBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBoZWFkZXJzKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJG5hbWUuJzogJy5caW1wbG9kZSgnLCAnLCAkdmFsdWVzKS4iXHJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHRyaW0oJHJlc3VsdCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgppbnRlcmZhY2UgTWVzc2FnZUZvcm1hdHRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbWVzc2FnZSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXFRocm93YWJsZXxudWxsICAgICAgICAkZXJyb3IgICAgRXhjZXB0aW9uIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP1Jlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwsID9cVGhyb3dhYmxlICRlcnJvciA9IG51bGwpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Middleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXFJlcXVlc3RFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlOwoKLyoqCiAqIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhbmQgd3JhcCBoYW5kbGVycyB3aXRoIGhhbmRsZXIgbWlkZGxld2FyZS4KICovCmZpbmFsIGNsYXNzIE1pZGRsZXdhcmUKewogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYWRkcyBjb29raWVzIHRvIHJlcXVlc3RzLgogICAgICoKICAgICAqIFRoZSBvcHRpb25zIGFycmF5IG11c3QgYmUgc2V0IHRvIGEgQ29va2llSmFySW50ZXJmYWNlIGluIG9yZGVyIHRvIHVzZQogICAgICogY29va2llcy4gVGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBmb3IgeW91IGJ5IGEgY2xpZW50LgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvb2tpZXMoKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcik6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2Nvb2tpZXMnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICghJG9wdGlvbnNbJ2Nvb2tpZXMnXSBpbnN0YW5jZW9mIENvb2tpZUphckludGVyZmFjZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdjb29raWVzIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFySW50ZXJmYWNlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY29va2llSmFyID0gJG9wdGlvbnNbJ2Nvb2tpZXMnXTsKICAgICAgICAgICAgICAgICRyZXF1ZXN0ID0gJGNvb2tpZUphci0+d2l0aENvb2tpZUhlYWRlcigkcmVxdWVzdCk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucykKICAgICAgICAgICAgICAgICAgICAtPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRjb29raWVKYXIsICRyZXF1ZXN0KTogUmVzcG9uc2VJbnRlcmZhY2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvb2tpZUphci0+ZXh0cmFjdENvb2tpZXMoJHJlcXVlc3QsICRyZXNwb25zZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyBmb3IgNHh4IG9yIDV4eCByZXNwb25zZXMgd2hlbiB0aGUKICAgICAqICJodHRwX2Vycm9ycyIgcmVxdWVzdCBvcHRpb24gaXMgc2V0IHRvIHRydWUuCiAgICAgKgogICAgICogQHBhcmFtIEJvZHlTdW1tYXJpemVySW50ZXJmYWNlfG51bGwgJGJvZHlTdW1tYXJpemVyIFRoZSBib2R5IHN1bW1hcml6ZXIgdG8gdXNlIGluIGV4Y2VwdGlvbiBtZXNzYWdlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGh0dHBFcnJvcnMoP0JvZHlTdW1tYXJpemVySW50ZXJmYWNlICRib2R5U3VtbWFyaXplciA9IG51bGwpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRib2R5U3VtbWFyaXplcik6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAkYm9keVN1bW1hcml6ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snaHR0cF9lcnJvcnMnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKS0+dGhlbigKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkgdXNlICgkcmVxdWVzdCwgJGJvZHlTdW1tYXJpemVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2RlID0gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZSA8IDQwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBSZXF1ZXN0RXhjZXB0aW9uOjpjcmVhdGUoJHJlcXVlc3QsICRyZXNwb25zZSwgbnVsbCwgW10sICRib2R5U3VtbWFyaXplcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHB1c2hlcyBoaXN0b3J5IGRhdGEgdG8gYW4gQXJyYXlBY2Nlc3MgY29udGFpbmVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxcQXJyYXlBY2Nlc3M8aW50LCBhcnJheT4gJGNvbnRhaW5lciBDb250YWluZXIgdG8gaG9sZCB0aGUgaGlzdG9yeSAoYnkgcmVmZXJlbmNlKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlKGNhbGxhYmxlKTogY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IG9yIEFycmF5QWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc3RvcnkoJiRjb250YWluZXIpOiBjYWxsYWJsZQogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCRjb250YWluZXIpICYmICEkY29udGFpbmVyIGluc3RhbmNlb2YgXEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoaXN0b3J5IGNvbnRhaW5lciBtdXN0IGJlIGFuIGFycmF5IG9yIG9iamVjdCBpbXBsZW1lbnRpbmcgQXJyYXlBY2Nlc3MnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCYkY29udGFpbmVyKTogY2FsbGFibGUgewogICAgICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykgdXNlICgkaGFuZGxlciwgJiRjb250YWluZXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpLT50aGVuKAogICAgICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRyZXF1ZXN0LCAmJGNvbnRhaW5lciwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcltdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3QnID0+ICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRyZXF1ZXN0LCAmJGNvbnRhaW5lciwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcltdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3QnID0+ICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICRvcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBcQ3JlYXRlOjpyZWplY3Rpb25Gb3IoJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGludm9rZXMgYSBjYWxsYmFjayBiZWZvcmUgYW5kIGFmdGVyIHNlbmRpbmcgYSByZXF1ZXN0LgogICAgICoKICAgICAqIFRoZSBwcm92aWRlZCBsaXN0ZW5lciBjYW5ub3QgbW9kaWZ5IG9yIGFsdGVyIHRoZSByZXNwb25zZS4gSXQgc2ltcGx5CiAgICAgKiAidGFwcyIgaW50byB0aGUgY2hhaW4gdG8gYmUgbm90aWZpZWQgYmVmb3JlIHJldHVybmluZyB0aGUgcHJvbWlzZS4gVGhlCiAgICAgKiBiZWZvcmUgbGlzdGVuZXIgYWNjZXB0cyBhIHJlcXVlc3QgYW5kIG9wdGlvbnMgYXJyYXksIGFuZCB0aGUgYWZ0ZXIKICAgICAqIGxpc3RlbmVyIGFjY2VwdHMgYSByZXF1ZXN0LCBvcHRpb25zIGFycmF5LCBhbmQgcmVzcG9uc2UgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGJlZm9yZSBGdW5jdGlvbiB0byBpbnZva2UgYmVmb3JlIGZvcndhcmRpbmcgdGhlIHJlcXVlc3QuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGFmdGVyICBGdW5jdGlvbiBpbnZva2VkIGFmdGVyIGZvcndhcmRpbmcuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGFwKD9jYWxsYWJsZSAkYmVmb3JlID0gbnVsbCwgP2NhbGxhYmxlICRhZnRlciA9IG51bGwpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRiZWZvcmUsICRhZnRlcik6IGNhbGxhYmxlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRiZWZvcmUsICRhZnRlcikgewogICAgICAgICAgICAgICAgaWYgKCRiZWZvcmUpIHsKICAgICAgICAgICAgICAgICAgICAkYmVmb3JlKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKCRhZnRlcikgewogICAgICAgICAgICAgICAgICAgICRhZnRlcigkcmVxdWVzdCwgJG9wdGlvbnMsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGhhbmRsZXMgcmVxdWVzdCByZWRpcmVjdHMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVkaXJlY3QoKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcik6IFJlZGlyZWN0TWlkZGxld2FyZSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RNaWRkbGV3YXJlKCRoYW5kbGVyKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHJldHJpZXMgcmVxdWVzdHMgYmFzZWQgb24gdGhlIGJvb2xlYW4gcmVzdWx0IG9mCiAgICAgKiBpbnZva2luZyB0aGUgcHJvdmlkZWQgImRlY2lkZXIiIGZ1bmN0aW9uLgogICAgICoKICAgICAqIElmIG5vIGRlbGF5IGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBleHBvbmVudGlhbAogICAgICogYmFja29mZiB3aWxsIGJlIHV0aWxpemVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVjaWRlciBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZiByZXRyaWVzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVxdWVzdCwgW3Jlc3BvbnNlXSwgYW5kIFtleGNlcHRpb25dIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBpcyB0byBiZSByZXRyaWVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRkZWxheSAgIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyeShjYWxsYWJsZSAkZGVjaWRlciwgP2NhbGxhYmxlICRkZWxheSA9IG51bGwpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRkZWNpZGVyLCAkZGVsYXkpOiBSZXRyeU1pZGRsZXdhcmUgewogICAgICAgICAgICByZXR1cm4gbmV3IFJldHJ5TWlkZGxld2FyZSgkZGVjaWRlciwgJGhhbmRsZXIsICRkZWxheSk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCBsb2dzIHJlcXVlc3RzLCByZXNwb25zZXMsIGFuZCBlcnJvcnMgdXNpbmcgYSBtZXNzYWdlCiAgICAgKiBmb3JtYXR0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIExvZ2dlckludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9nZ2VyICAgIExvZ3MgbWVzc2FnZXMuCiAgICAgKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlckludGVyZmFjZXxNZXNzYWdlRm9ybWF0dGVyICRmb3JtYXR0ZXIgRm9ybWF0dGVyIHVzZWQgdG8gY3JlYXRlIG1lc3NhZ2Ugc3RyaW5ncy4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvZ0xldmVsICBMZXZlbCBhdCB3aGljaCB0byBsb2cgcmVxdWVzdHMuCiAgICAgKgogICAgICogQHBocHN0YW4tcGFyYW0gXFBzclxMb2dcTG9nTGV2ZWw6OiogJGxvZ0xldmVsIExldmVsIGF0IHdoaWNoIHRvIGxvZyByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2coTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIsICRmb3JtYXR0ZXIsIHN0cmluZyAkbG9nTGV2ZWwgPSAnaW5mbycpOiBjYWxsYWJsZQogICAgewogICAgICAgIC8vIFRvIGJlIGNvbXBhdGlibGUgd2l0aCBHdXp6bGUgNy4xLnggd2UgbmVlZCB0byBhbGxvdyB1c2VycyB0byBwYXNzIGEgTWVzc2FnZUZvcm1hdHRlcgogICAgICAgIGlmICghJGZvcm1hdHRlciBpbnN0YW5jZW9mIE1lc3NhZ2VGb3JtYXR0ZXIgJiYgISRmb3JtYXR0ZXIgaW5zdGFuY2VvZiBNZXNzYWdlRm9ybWF0dGVySW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oc3ByaW50ZignQXJndW1lbnQgMiB0byAlczo6bG9nKCkgbXVzdCBiZSBvZiB0eXBlICVzJywgc2VsZjo6Y2xhc3MsIE1lc3NhZ2VGb3JtYXR0ZXJJbnRlcmZhY2U6OmNsYXNzKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkbG9nZ2VyLCAkZm9ybWF0dGVyLCAkbG9nTGV2ZWwpOiBjYWxsYWJsZSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pIHVzZSAoJGhhbmRsZXIsICRsb2dnZXIsICRmb3JtYXR0ZXIsICRsb2dMZXZlbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkcmVzcG9uc2UpIHVzZSAoJGxvZ2dlciwgJHJlcXVlc3QsICRmb3JtYXR0ZXIsICRsb2dMZXZlbCk6IFJlc3BvbnNlSW50ZXJmYWNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPmxvZygkbG9nTGV2ZWwsICRtZXNzYWdlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGxvZ2dlciwgJHJlcXVlc3QsICRmb3JtYXR0ZXIpOiBQcm9taXNlSW50ZXJmYWNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gJHJlYXNvbiBpbnN0YW5jZW9mIFJlcXVlc3RFeGNlcHRpb24gPyAkcmVhc29uLT5nZXRSZXNwb25zZSgpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSwgUFxDcmVhdGU6OmV4Y2VwdGlvbkZvcigkcmVhc29uKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPmVycm9yKCRtZXNzYWdlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRyZWFzb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWlkZGxld2FyZSBhZGRzIGEgZGVmYXVsdCBjb250ZW50LXR5cGUgaWYgcG9zc2libGUsIGEgZGVmYXVsdAogICAgICogY29udGVudC1sZW5ndGggb3IgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyLCBhbmQgdGhlIGV4cGVjdCBoZWFkZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUJvZHkoKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcik6IFByZXBhcmVCb2R5TWlkZGxld2FyZSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJlcGFyZUJvZHlNaWRkbGV3YXJlKCRoYW5kbGVyKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGFwcGxpZXMgYSBtYXAgZnVuY3Rpb24gdG8gdGhlIHJlcXVlc3QgYmVmb3JlIHBhc3NpbmcgdG8KICAgICAqIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRmbiBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBSZXF1ZXN0SW50ZXJmYWNlIGFuZCByZXR1cm5zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGEgUmVxdWVzdEludGVyZmFjZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXBSZXF1ZXN0KGNhbGxhYmxlICRmbik6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYyBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGZuKTogY2FsbGFibGUgewogICAgICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykgdXNlICgkaGFuZGxlciwgJGZuKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJGZuKCRyZXF1ZXN0KSwgJG9wdGlvbnMpOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYXBwbGllcyBhIG1hcCBmdW5jdGlvbiB0byB0aGUgcmVzb2x2ZWQgcHJvbWlzZSdzCiAgICAgKiByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZuIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFJlc3BvbnNlSW50ZXJmYWNlIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgUmVzcG9uc2VJbnRlcmZhY2UuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFwUmVzcG9uc2UoY2FsbGFibGUgJGZuKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZm4pOiBjYWxsYWJsZSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAkZm4pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpLT50aGVuKCRmbik7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Pool.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEVhY2hQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzb3JJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogU2VuZHMgYW4gaXRlcmF0b3Igb2YgcmVxdWVzdHMgY29uY3VycmVudGx5IHVzaW5nIGEgY2FwcGVkIHBvb2wgc2l6ZS4KICoKICogVGhlIHBvb2wgd2lsbCByZWFkIGZyb20gYW4gaXRlcmF0b3IgdW50aWwgaXQgaXMgY2FuY2VsbGVkIG9yIHVudGlsIHRoZQogKiBpdGVyYXRvciBpcyBjb25zdW1lZC4gV2hlbiBhIHJlcXVlc3QgaXMgeWllbGRlZCwgdGhlIHJlcXVlc3QgaXMgc2VudCBhZnRlcgogKiBhcHBseWluZyB0aGUgInJlcXVlc3Rfb3B0aW9ucyIgcmVxdWVzdCBvcHRpb25zIChpZiBwcm92aWRlZCBpbiB0aGUgY3RvcikuCiAqCiAqIFdoZW4gYSBmdW5jdGlvbiBpcyB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciwgdGhlIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRoZQogKiAicmVxdWVzdF9vcHRpb25zIiBhcnJheSB0aGF0IHNob3VsZCBiZSBtZXJnZWQgb24gdG9wIG9mIGFueSBleGlzdGluZwogKiBvcHRpb25zLCBhbmQgdGhlIGZ1bmN0aW9uIE1VU1QgdGhlbiByZXR1cm4gYSB3YWl0LWFibGUgcHJvbWlzZS4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBQb29sIGltcGxlbWVudHMgUHJvbWlzb3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIEVhY2hQcm9taXNlCiAgICAgKi8KICAgIHByaXZhdGUgJGVhY2g7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ2xpZW50SW50ZXJmYWNlICRjbGllbnQgICBDbGllbnQgdXNlZCB0byBzZW5kIHRoZSByZXF1ZXN0cy4KICAgICAqIEBwYXJhbSBhcnJheXxcSXRlcmF0b3IgJHJlcXVlc3RzIFJlcXVlc3RzIG9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgdG8gc2VuZCBjb25jdXJyZW50bHkuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRjb25maWcgICBBc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNvbmN1cnJlbmN5OiAoaW50KSBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0byBzZW5kIGNvbmN1cnJlbnRseQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBvcHRpb25zOiBBcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBmdWxmaWxsZWQ6IChjYWxsYWJsZSkgRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYSByZXF1ZXN0IGNvbXBsZXRlcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcmVqZWN0ZWQ6IChjYWxsYWJsZSkgRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYSByZXF1ZXN0IGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsICRyZXF1ZXN0cywgYXJyYXkgJGNvbmZpZyA9IFtdKQogICAgewogICAgICAgIGlmICghaXNzZXQoJGNvbmZpZ1snY29uY3VycmVuY3knXSkpIHsKICAgICAgICAgICAgJGNvbmZpZ1snY29uY3VycmVuY3knXSA9IDI1OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ29wdGlvbnMnXSkpIHsKICAgICAgICAgICAgJG9wdHMgPSAkY29uZmlnWydvcHRpb25zJ107CiAgICAgICAgICAgIHVuc2V0KCRjb25maWdbJ29wdGlvbnMnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdHMgPSBbXTsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2l0ZXJhYmxlKCRyZXF1ZXN0cykpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9ndXp6bGUnLAogICAgICAgICAgICAgICAgJzcuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgYSBub24taXRlcmFibGUgcmVxdWVzdCBjb2xsZWN0aW9uIHRvICVzOjpfX2NvbnN0cnVjdCgpIG9yICVzOjpiYXRjaCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvZ3V6emxlIDguMCB3aWxsIHJlcXVpcmUgYW4gaXRlcmFibGUuJywKICAgICAgICAgICAgICAgIF9fQ0xBU1NfXywKICAgICAgICAgICAgICAgIF9fQ0xBU1NfXwogICAgICAgICAgICApOwoKICAgICAgICAgICAgJHJlcXVlc3RzID0gWyRyZXF1ZXN0c107CiAgICAgICAgfQoKICAgICAgICAkaXRlcmFibGUgPSBQXENyZWF0ZTo6aXRlckZvcigkcmVxdWVzdHMpOwogICAgICAgICRyZXF1ZXN0cyA9IHN0YXRpYyBmdW5jdGlvbiAoKSB1c2UgKCRpdGVyYWJsZSwgJGNsaWVudCwgJG9wdHMpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZXJhYmxlIGFzICRrZXkgPT4gJHJmbikgewogICAgICAgICAgICAgICAgaWYgKCRyZm4gaW5zdGFuY2VvZiBSZXF1ZXN0SW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgeWllbGQgJGtleSA9PiAkY2xpZW50LT5zZW5kQXN5bmMoJHJmbiwgJG9wdHMpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKFxpc19jYWxsYWJsZSgkcmZuKSkgewogICAgICAgICAgICAgICAgICAgIHlpZWxkICRrZXkgPT4gJHJmbigkb3B0cyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHZhbHVlIHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yIG11c3QgYmUgYSBQc3I3XEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlIG9yIGEgY2FsbGFibGUgdGhhdCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpdGggYSBQc3I3XE1lc3NhZ2VcSHR0cFxSZXNwb25zZUludGVyZmFjZSBvYmplY3QuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAkdGhpcy0+ZWFjaCA9IG5ldyBFYWNoUHJvbWlzZSgkcmVxdWVzdHMoKSwgJGNvbmZpZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgcHJvbWlzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvbWlzZSgpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lYWNoLT5wcm9taXNlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kcyBtdWx0aXBsZSByZXF1ZXN0cyBjb25jdXJyZW50bHkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgcmVzcG9uc2VzCiAgICAgKiBhbmQgZXhjZXB0aW9ucyB0aGF0IHVzZXMgdGhlIHNhbWUgb3JkZXJpbmcgYXMgdGhlIHByb3ZpZGVkIHJlcXVlc3RzLgogICAgICoKICAgICAqIElNUE9SVEFOVDogVGhpcyBtZXRob2Qga2VlcHMgZXZlcnkgcmVxdWVzdCBhbmQgcmVzcG9uc2UgaW4gbWVtb3J5LCBhbmQKICAgICAqIGFzIHN1Y2gsIGlzIE5PVCByZWNvbW1lbmRlZCB3aGVuIHNlbmRpbmcgYSBsYXJnZSBudW1iZXIgb3IgYW4KICAgICAqIGluZGV0ZXJtaW5hdGUgbnVtYmVyIG9mIHJlcXVlc3RzIGNvbmN1cnJlbnRseS4KICAgICAqCiAgICAgKiBAcGFyYW0gQ2xpZW50SW50ZXJmYWNlICRjbGllbnQgICBDbGllbnQgdXNlZCB0byBzZW5kIHRoZSByZXF1ZXN0cwogICAgICogQHBhcmFtIGFycmF5fFxJdGVyYXRvciAkcmVxdWVzdHMgUmVxdWVzdHMgdG8gc2VuZCBjb25jdXJyZW50bHkuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRvcHRpb25zICBQYXNzZXMgdGhyb3VnaCB0aGUgb3B0aW9ucyBhdmFpbGFibGUgaW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtAc2VlIFBvb2w6Ol9fY29uc3RydWN0fQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSByZXNwb25zZSBvciBhbiBleGNlcHRpb24KICAgICAqICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGUgcmVxdWVzdHMgd2VyZSBzZW50LgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgZXZlbnQgZm9ybWF0IGlzIGluY29ycmVjdC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiYXRjaChDbGllbnRJbnRlcmZhY2UgJGNsaWVudCwgJHJlcXVlc3RzLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzID0gW107CiAgICAgICAgc2VsZjo6Y21wQ2FsbGJhY2soJG9wdGlvbnMsICdmdWxmaWxsZWQnLCAkcmVzKTsKICAgICAgICBzZWxmOjpjbXBDYWxsYmFjaygkb3B0aW9ucywgJ3JlamVjdGVkJywgJHJlcyk7CiAgICAgICAgJHBvb2wgPSBuZXcgc3RhdGljKCRjbGllbnQsICRyZXF1ZXN0cywgJG9wdGlvbnMpOwogICAgICAgICRwb29sLT5wcm9taXNlKCktPndhaXQoKTsKICAgICAgICBca3NvcnQoJHJlcyk7CgogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBjYWxsYmFjayhzKQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjbXBDYWxsYmFjayhhcnJheSAmJG9wdGlvbnMsIHN0cmluZyAkbmFtZSwgYXJyYXkgJiRyZXN1bHRzKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJG5hbWVdKSkgewogICAgICAgICAgICAkb3B0aW9uc1skbmFtZV0gPSBzdGF0aWMgZnVuY3Rpb24gKCR2LCAkaykgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyRrXSA9ICR2OwogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdXJyZW50Rm4gPSAkb3B0aW9uc1skbmFtZV07CiAgICAgICAgICAgICRvcHRpb25zWyRuYW1lXSA9IHN0YXRpYyBmdW5jdGlvbiAoJHYsICRrKSB1c2UgKCYkcmVzdWx0cywgJGN1cnJlbnRGbikgewogICAgICAgICAgICAgICAgJGN1cnJlbnRGbigkdiwgJGspOwogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGtdID0gJHY7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByZXBhcmVzIHJlcXVlc3RzIHRoYXQgY29udGFpbiBhIGJvZHksIGFkZGluZyB0aGUgQ29udGVudC1MZW5ndGgsCiAqIENvbnRlbnQtVHlwZSwgYW5kIEV4cGVjdCBoZWFkZXJzLgogKgogKiBAZmluYWwKICovCmNsYXNzIFByZXBhcmVCb2R5TWlkZGxld2FyZQp7CiAgICAvKioKICAgICAqIEB2YXIgY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIG5vIGJvZHkuCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkbW9kaWZ5ID0gW107CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC10eXBlIGlmIHBvc3NpYmxlLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgaWYgKCR1cmkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRNZXRhZGF0YSgndXJpJykpIHsKICAgICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoJHVyaSkgJiYgJHR5cGUgPSBQc3I3XE1pbWVUeXBlOjpmcm9tRmlsZW5hbWUoJHVyaSkpIHsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydDb250ZW50LVR5cGUnXSA9ICR0eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgYSBkZWZhdWx0IGNvbnRlbnQtbGVuZ3RoIG9yIHRyYW5zZmVyLWVuY29kaW5nIGhlYWRlci4KICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgJiYgISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJykKICAgICAgICApIHsKICAgICAgICAgICAgJHNpemUgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnQ29udGVudC1MZW5ndGgnXSA9IChzdHJpbmcpICRzaXplOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnVHJhbnNmZXItRW5jb2RpbmcnXSA9ICdjaHVua2VkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBleHBlY3QgaGVhZGVyIGlmIG5lZWRlZC4KICAgICAgICAkdGhpcy0+YWRkRXhwZWN0SGVhZGVyKCRyZXF1ZXN0LCAkb3B0aW9ucywgJG1vZGlmeSk7CgogICAgICAgIHJldHVybiAkZm4oUHNyN1xVdGlsczo6bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgJG1vZGlmeSksICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBleHBlY3QgaGVhZGVyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRXhwZWN0SGVhZGVyKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zLCBhcnJheSAmJG1vZGlmeSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIEV4cGVjdCBoZWFkZXIgc2hvdWxkIGJlIHVzZWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc0hlYWRlcignRXhwZWN0JykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGV4cGVjdCA9ICRvcHRpb25zWydleHBlY3QnXSA/PyBudWxsOwoKICAgICAgICAvLyBSZXR1cm4gaWYgZGlzYWJsZWQgb3IgdXNpbmcgSFRUUC8xLjAKICAgICAgICBpZiAoJGV4cGVjdCA9PT0gZmFsc2UgfHwgJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpID09PSAnMS4wJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZXhwZWN0IGhlYWRlciBpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZAogICAgICAgIGlmICgkZXhwZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBCeSBkZWZhdWx0LCBzZW5kIHRoZSBleHBlY3QgaGVhZGVyIHdoZW4gdGhlIHBheWxvYWQgaXMgPiAxbWIKICAgICAgICBpZiAoJGV4cGVjdCA9PT0gbnVsbCkgewogICAgICAgICAgICAkZXhwZWN0ID0gMTA0ODU3NjsKICAgICAgICB9CgogICAgICAgIC8vIEFsd2F5cyBhZGQgaWYgdGhlIGJvZHkgY2Fubm90IGJlIHJld291bmQsIHRoZSBzaXplIGNhbm5vdCBiZQogICAgICAgIC8vIGRldGVybWluZWQsIG9yIHRoZSBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3V0b2ZmIHRocmVzaG9sZAogICAgICAgICRib2R5ID0gJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gbnVsbCB8fCAkc2l6ZSA+PSAoaW50KSAkZXhwZWN0IHx8ICEkYm9keS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cVG9vTWFueVJlZGlyZWN0c0V4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFJlcXVlc3QgcmVkaXJlY3QgbWlkZGxld2FyZS4KICoKICogQXBwbHkgdGhpcyBtaWRkbGV3YXJlIGxpa2Ugb3RoZXIgbWlkZGxld2FyZSB1c2luZwogKiB7QHNlZSBNaWRkbGV3YXJlOjpyZWRpcmVjdCgpfS4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBSZWRpcmVjdE1pZGRsZXdhcmUKewogICAgcHVibGljIGNvbnN0IEhJU1RPUllfSEVBREVSID0gJ1gtR3V6emxlLVJlZGlyZWN0LUhpc3RvcnknOwoKICAgIHB1YmxpYyBjb25zdCBTVEFUVVNfSElTVE9SWV9IRUFERVIgPSAnWC1HdXp6bGUtUmVkaXJlY3QtU3RhdHVzLUhpc3RvcnknOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0U2V0dGluZ3MgPSBbCiAgICAgICAgJ21heCcgPT4gNSwKICAgICAgICAncHJvdG9jb2xzJyA9PiBbJ2h0dHAnLCAnaHR0cHMnXSwKICAgICAgICAnc3RyaWN0JyA9PiBmYWxzZSwKICAgICAgICAncmVmZXJlcicgPT4gZmFsc2UsCiAgICAgICAgJ3RyYWNrX3JlZGlyZWN0cycgPT4gZmFsc2UsCiAgICBdOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbmV4dEhhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlICRuZXh0SGFuZGxlciBOZXh0IGhhbmRsZXIgdG8gaW52b2tlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY2FsbGFibGUgJG5leHRIYW5kbGVyKQogICAgewogICAgICAgICR0aGlzLT5uZXh0SGFuZGxlciA9ICRuZXh0SGFuZGxlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGZuID0gJHRoaXMtPm5leHRIYW5kbGVyOwoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddID09PSB0cnVlKSB7CiAgICAgICAgICAgICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSA9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfSBlbHNlaWYgKCFcaXNfYXJyYXkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignYWxsb3dfcmVkaXJlY3RzIG11c3QgYmUgdHJ1ZSwgZmFsc2UsIG9yIGFycmF5Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aCB0aGUgcHJvdmlkZWQgc2V0dGluZ3MKICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddICs9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydtYXgnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbihmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jaGVja1JlZGlyZWN0KCRyZXF1ZXN0LCAkb3B0aW9ucywgJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrUmVkaXJlY3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICBpZiAoXHN0cnBvcygoc3RyaW5nKSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwgJzMnKSAhPT0gMAogICAgICAgICAgICB8fCAhJHJlc3BvbnNlLT5oYXNIZWFkZXIoJ0xvY2F0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ndWFyZE1heCgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkb3B0aW9ucyk7CiAgICAgICAgJG5leHRSZXF1ZXN0ID0gJHRoaXMtPm1vZGlmeVJlcXVlc3QoJHJlcXVlc3QsICRvcHRpb25zLCAkcmVzcG9uc2UpOwoKICAgICAgICAvLyBJZiBhdXRob3JpemF0aW9uIGlzIGhhbmRsZWQgYnkgY3VybCwgdW5zZXQgaXQgaWYgVVJJIGlzIGNyb3NzLW9yaWdpbi4KICAgICAgICBpZiAoUHNyN1xVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luKCRyZXF1ZXN0LT5nZXRVcmkoKSwgJG5leHRSZXF1ZXN0LT5nZXRVcmkoKSkgJiYgZGVmaW5lZCgnXENVUkxPUFRfSFRUUEFVVEgnKSkgewogICAgICAgICAgICB1bnNldCgKICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bXENVUkxPUFRfSFRUUEFVVEhdLAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2N1cmwnXVtcQ1VSTE9QVF9VU0VSUFdEXQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsnb25fcmVkaXJlY3QnXSkpIHsKICAgICAgICAgICAgKCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsnb25fcmVkaXJlY3QnXSkoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZSwKICAgICAgICAgICAgICAgICRuZXh0UmVxdWVzdC0+Z2V0VXJpKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRwcm9taXNlID0gJHRoaXMoJG5leHRSZXF1ZXN0LCAkb3B0aW9ucyk7CgogICAgICAgIC8vIEFkZCBoZWFkZXJzIHRvIGJlIGFibGUgdG8gdHJhY2sgaGlzdG9yeSBvZiByZWRpcmVjdHMuCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ3RyYWNrX3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPndpdGhUcmFja2luZygKICAgICAgICAgICAgICAgICRwcm9taXNlLAogICAgICAgICAgICAgICAgKHN0cmluZykgJG5leHRSZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmFibGUgdHJhY2tpbmcgb24gcHJvbWlzZS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB3aXRoVHJhY2tpbmcoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSwgc3RyaW5nICR1cmksIGludCAkc3RhdHVzQ29kZSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCR1cmksICRzdGF0dXNDb2RlKSB7CiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYXJlIHB1c2hpbmcgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IGFzIHRoaXMKICAgICAgICAgICAgICAgIC8vIHdvdWxkIGJlIGFuIGVhcmxpZXIgcmVzcG9uc2UgdGhhbiB3aGF0IGlzIGN1cnJlbnRseSBwcmVzZW50CiAgICAgICAgICAgICAgICAvLyBpbiB0aGUgaGlzdG9yeSBoZWFkZXIuCiAgICAgICAgICAgICAgICAkaGlzdG9yeUhlYWRlciA9ICRyZXNwb25zZS0+Z2V0SGVhZGVyKHNlbGY6OkhJU1RPUllfSEVBREVSKTsKICAgICAgICAgICAgICAgICRzdGF0dXNIZWFkZXIgPSAkcmVzcG9uc2UtPmdldEhlYWRlcihzZWxmOjpTVEFUVVNfSElTVE9SWV9IRUFERVIpOwogICAgICAgICAgICAgICAgXGFycmF5X3Vuc2hpZnQoJGhpc3RvcnlIZWFkZXIsICR1cmkpOwogICAgICAgICAgICAgICAgXGFycmF5X3Vuc2hpZnQoJHN0YXR1c0hlYWRlciwgKHN0cmluZykgJHN0YXR1c0NvZGUpOwoKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2UtPndpdGhIZWFkZXIoc2VsZjo6SElTVE9SWV9IRUFERVIsICRoaXN0b3J5SGVhZGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+d2l0aEhlYWRlcihzZWxmOjpTVEFUVVNfSElTVE9SWV9IRUFERVIsICRzdGF0dXNIZWFkZXIpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGZvciB0b28gbWFueSByZWRpcmVjdHMuCiAgICAgKgogICAgICogQHRocm93cyBUb29NYW55UmVkaXJlY3RzRXhjZXB0aW9uIFRvbyBtYW55IHJlZGlyZWN0cy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBndWFyZE1heChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsIGFycmF5ICYkb3B0aW9ucyk6IHZvaWQKICAgIHsKICAgICAgICAkY3VycmVudCA9ICRvcHRpb25zWydfX3JlZGlyZWN0X2NvdW50J10KICAgICAgICAgICAgPz8gMDsKICAgICAgICAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddID0gJGN1cnJlbnQgKyAxOwogICAgICAgICRtYXggPSAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ21heCddOwoKICAgICAgICBpZiAoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSA+ICRtYXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24oIldpbGwgbm90IGZvbGxvdyBtb3JlIHRoYW4geyRtYXh9IHJlZGlyZWN0cyIsICRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZ5UmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucywgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIC8vIFJlcXVlc3QgbW9kaWZpY2F0aW9ucyB0byBhcHBseS4KICAgICAgICAkbW9kaWZ5ID0gW107CiAgICAgICAgJHByb3RvY29scyA9ICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsncHJvdG9jb2xzJ107CgogICAgICAgIC8vIFVzZSBhIEdFVCByZXF1ZXN0IGlmIHRoaXMgaXMgYW4gZW50aXR5IGVuY2xvc2luZyByZXF1ZXN0IGFuZCB3ZSBhcmUKICAgICAgICAvLyBub3QgZm9yY2luZyBSRkMgY29tcGxpYW5jZSwgYnV0IHJhdGhlciBlbXVsYXRpbmcgd2hhdCBhbGwgYnJvd3NlcnMKICAgICAgICAvLyB3b3VsZCBkby4KICAgICAgICAkc3RhdHVzQ29kZSA9ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpOwogICAgICAgIGlmICgkc3RhdHVzQ29kZSA9PSAzMDMKICAgICAgICAgICAgfHwgKCRzdGF0dXNDb2RlIDw9IDMwMiAmJiAhJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydzdHJpY3QnXSkKICAgICAgICApIHsKICAgICAgICAgICAgJHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ107CiAgICAgICAgICAgICRyZXF1ZXN0TWV0aG9kID0gJHJlcXVlc3QtPmdldE1ldGhvZCgpOwoKICAgICAgICAgICAgJG1vZGlmeVsnbWV0aG9kJ10gPSBpbl9hcnJheSgkcmVxdWVzdE1ldGhvZCwgJHNhZmVNZXRob2RzKSA/ICRyZXF1ZXN0TWV0aG9kIDogJ0dFVCc7CiAgICAgICAgICAgICRtb2RpZnlbJ2JvZHknXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9IHNlbGY6OnJlZGlyZWN0VXJpKCRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcm90b2NvbHMpOwogICAgICAgICRpZG5PcHRpb25zID0gVXRpbHM6Om5vcm1hbGl6ZUlkbkNvbnZlcnNpb25PcHRpb24oJG9wdGlvbnNbJ2lkbl9jb252ZXJzaW9uJ10gPz8gbnVsbCk7CiAgICAgICAgaWYgKCRpZG5PcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICR1cmkgPSBVdGlsczo6aWRuVXJpQ29udmVydCgkdXJpLCAkaWRuT3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkbW9kaWZ5Wyd1cmknXSA9ICR1cmk7CiAgICAgICAgUHNyN1xNZXNzYWdlOjpyZXdpbmRCb2R5KCRyZXF1ZXN0KTsKCiAgICAgICAgLy8gQWRkIHRoZSBSZWZlcmVyIGhlYWRlciBpZiBpdCBpcyB0b2xkIHRvIGRvIHNvIGFuZCBvbmx5CiAgICAgICAgLy8gYWRkIHRoZSBoZWFkZXIgaWYgd2UgYXJlIG5vdCByZWRpcmVjdGluZyBmcm9tIGh0dHBzIHRvIGh0dHAuCiAgICAgICAgaWYgKCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsncmVmZXJlciddCiAgICAgICAgICAgICYmICRtb2RpZnlbJ3VyaSddLT5nZXRTY2hlbWUoKSA9PT0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKQogICAgICAgICkgewogICAgICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpLT53aXRoVXNlckluZm8oJycpOwogICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydSZWZlcmVyJ10gPSAoc3RyaW5nKSAkdXJpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3JlbW92ZV9oZWFkZXJzJ11bXSA9ICdSZWZlcmVyJzsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBBdXRob3JpemF0aW9uIGFuZCBDb29raWUgaGVhZGVycyBpZiBVUkkgaXMgY3Jvc3Mtb3JpZ2luLgogICAgICAgIGlmIChQc3I3XFVyaUNvbXBhcmF0b3I6OmlzQ3Jvc3NPcmlnaW4oJHJlcXVlc3QtPmdldFVyaSgpLCAkbW9kaWZ5Wyd1cmknXSkpIHsKICAgICAgICAgICAgJG1vZGlmeVsncmVtb3ZlX2hlYWRlcnMnXVtdID0gJ0F1dGhvcml6YXRpb24nOwogICAgICAgICAgICAkbW9kaWZ5WydyZW1vdmVfaGVhZGVycyddW10gPSAnQ29va2llJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBQc3I3XFV0aWxzOjptb2RpZnlSZXF1ZXN0KCRyZXF1ZXN0LCAkbW9kaWZ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgYXBwcm9wcmlhdGUgVVJMIG9uIHRoZSByZXF1ZXN0IGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBoZWFkZXIuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlZGlyZWN0VXJpKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlLAogICAgICAgIGFycmF5ICRwcm90b2NvbHMKICAgICk6IFVyaUludGVyZmFjZSB7CiAgICAgICAgJGxvY2F0aW9uID0gUHNyN1xVcmlSZXNvbHZlcjo6cmVzb2x2ZSgKICAgICAgICAgICAgJHJlcXVlc3QtPmdldFVyaSgpLAogICAgICAgICAgICBuZXcgUHNyN1xVcmkoJHJlc3BvbnNlLT5nZXRIZWFkZXJMaW5lKCdMb2NhdGlvbicpKQogICAgICAgICk7CgogICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSByZWRpcmVjdCBVUkkgaXMgYWxsb3dlZCBiYXNlZCBvbiB0aGUgcHJvdG9jb2xzLgogICAgICAgIGlmICghXGluX2FycmF5KCRsb2NhdGlvbi0+Z2V0U2NoZW1lKCksICRwcm90b2NvbHMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXNwb25zZUV4Y2VwdGlvbihcc3ByaW50ZignUmVkaXJlY3QgVVJJLCAlcywgZG9lcyBub3QgdXNlIG9uZSBvZiB0aGUgYWxsb3dlZCByZWRpcmVjdCBwcm90b2NvbHM6ICVzJywgJGxvY2F0aW9uLCBcaW1wbG9kZSgnLCAnLCAkcHJvdG9jb2xzKSksICRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsb2NhdGlvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RequestOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKLyoqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgYSBsaXN0IG9mIGJ1aWx0LWluIEd1enpsZSByZXF1ZXN0IG9wdGlvbnMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvYmxvYi83LjEyL2RvY3MvcmVxdWVzdC1vcHRpb25zLm1kCiAqLwpmaW5hbCBjbGFzcyBSZXF1ZXN0T3B0aW9ucwp7CiAgICAvKioKICAgICAqIGFsbG93X3JlZGlyZWN0czogKGJvb2x8YXJyYXkpIENvbnRyb2xzIHJlZGlyZWN0IGJlaGF2aW9yLiBQYXNzIGZhbHNlCiAgICAgKiB0byBkaXNhYmxlIHJlZGlyZWN0cywgcGFzcyB0cnVlIHRvIGVuYWJsZSByZWRpcmVjdHMsIHBhc3MgYW4KICAgICAqIGFzc29jaWF0aXZlIHRvIHByb3ZpZGUgY3VzdG9tIHJlZGlyZWN0IHNldHRpbmdzLiBEZWZhdWx0cyB0byAiZmFsc2UiLgogICAgICogVGhpcyBvcHRpb24gb25seSB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBSZWRpcmVjdE1pZGRsZXdhcmUuIFdoZW4KICAgICAqIHBhc3NpbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXksIHlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZQogICAgICogcGFpcnM6CiAgICAgKgogICAgICogLSBtYXg6IChpbnQsIGRlZmF1bHQ9NSkgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCByZWRpcmVjdHMuCiAgICAgKiAtIHN0cmljdDogKGJvb2wsIGRlZmF1bHQ9ZmFsc2UpIFNldCB0byB0cnVlIHRvIHVzZSBzdHJpY3QgcmVkaXJlY3RzCiAgICAgKiAgIG1lYW5pbmcgcmVkaXJlY3QgUE9TVCByZXF1ZXN0cyB3aXRoIFBPU1QgcmVxdWVzdHMgdnMuIGRvaW5nIHdoYXQgbW9zdAogICAgICogICBicm93c2VycyBkbyB3aGljaCBpcyByZWRpcmVjdCBQT1NUIHJlcXVlc3RzIHdpdGggR0VUIHJlcXVlc3RzCiAgICAgKiAtIHJlZmVyZXI6IChib29sLCBkZWZhdWx0PWZhbHNlKSBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFJlZmVyZXIKICAgICAqICAgaGVhZGVyLgogICAgICogLSBwcm90b2NvbHM6IChub24tZW1wdHktYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+LCBkZWZhdWx0PVsnaHR0cCcsICdodHRwcyddKQogICAgICogICBBbGxvd2VkIHJlZGlyZWN0IHByb3RvY29scy4gUmVkaXJlY3QgbWF0Y2hpbmcgaXMgY2FzZS1zZW5zaXRpdmU7IHVzZQogICAgICogICAiaHR0cCIgYW5kICJodHRwcyIuCiAgICAgKiAtIG9uX3JlZGlyZWN0OiAoY2FsbGFibGUpIFBIUCBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQgd2hlbiBhIHJlZGlyZWN0CiAgICAgKiAgIGlzIGVuY291bnRlcmVkLiBUaGUgY2FsbGFibGUgaXMgaW52b2tlZCB3aXRoIHRoZSByZXF1ZXN0LCB0aGUgcmVkaXJlY3QKICAgICAqICAgcmVzcG9uc2UgdGhhdCB3YXMgcmVjZWl2ZWQsIGFuZCB0aGUgZWZmZWN0aXZlIFVSSS4gQW55IHJldHVybiB2YWx1ZQogICAgICogICBmcm9tIHRoZSBvbl9yZWRpcmVjdCBmdW5jdGlvbiBpcyBpZ25vcmVkLgogICAgICogLSB0cmFja19yZWRpcmVjdHM6IChib29sLCBkZWZhdWx0PWZhbHNlKSBUcmFjayByZWRpcmVjdGVkIFVSSSBhbmQgc3RhdHVzCiAgICAgKiAgIGhpc3RvcnkgaW4gcmVzcG9uc2UgaGVhZGVycy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFMTE9XX1JFRElSRUNUUyA9ICdhbGxvd19yZWRpcmVjdHMnOwoKICAgIC8qKgogICAgICogYXV0aDogKGFycmF5ezA6IHN0cmluZywgMTogc3RyaW5nLCAyPzogc3RyaW5nfG51bGx9fHN0cmluZ3xmYWxzZXxudWxsKQogICAgICogUGFzcyBhbiBhcnJheSBvZiBIVFRQIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgdG8gdXNlIHdpdGggdGhlIHJlcXVlc3QuCiAgICAgKiBUaGUgYXJyYXkgbXVzdCBjb250YWluIHRoZSB1c2VybmFtZSBpbiBpbmRleCBbMF0sIHRoZSBwYXNzd29yZCBpbiBpbmRleAogICAgICogWzFdLCBhbmQgeW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBidWlsdC1pbiBhdXRoZW50aWNhdGlvbiB0eXBlIGluCiAgICAgKiBpbmRleCBbMl0uIFBhc3MgZmFsc2Ugb3IgbnVsbCB0byBkaXNhYmxlIGF1dGhlbnRpY2F0aW9uIGZvciBhIHJlcXVlc3QuCiAgICAgKiBTdHJpbmcgdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCBmb3IgY3VzdG9tIGhhbmRsZXJzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVVUSCA9ICdhdXRoJzsKCiAgICAvKioKICAgICAqIGJvZHk6IChyZXNvdXJjZXxzdHJpbmd8bnVsbHxpbnR8ZmxvYXR8Ym9vbHxcUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2V8KGNhbGxhYmxlJm9iamVjdCl8XEl0ZXJhdG9yfFxTdHJpbmdhYmxlKQogICAgICogQm9keSB0byBzZW5kIGluIHRoZSByZXF1ZXN0LiBDYWxsYWJsZSBhcnJheXMgYXJlIGFycmF5cywgYW5kIGFycmF5cyBhcmUKICAgICAqIG5vdCB2YWxpZCBib2R5IHZhbHVlcyBpbiBHdXp6bGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCT0RZID0gJ2JvZHknOwoKICAgIC8qKgogICAgICogY2VydDogKHN0cmluZ3xhcnJheXswOiBzdHJpbmcsIDE/OiBzdHJpbmd8bnVsbH0pIFNldCB0byBhIHN0cmluZyB0bwogICAgICogc3BlY2lmeSB0aGUgcGF0aCB0byBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlLiBQRU0gaXMgdGhlIGRlZmF1bHQKICAgICAqIGNlcnRpZmljYXRlIGZvcm1hdC4gSWYgYSBwYXNzd29yZCBpcyByZXF1aXJlZCwgc2V0IGNlcnQgdG8gYW4gYXJyYXkKICAgICAqIGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlIHBhdGggaW4gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQgYnkKICAgICAqIHRoZSBjZXJ0aWZpY2F0ZSBwYXNzd29yZCBpbiB0aGUgc2Vjb25kIGFycmF5IGVsZW1lbnQuIEEgbnVsbCBwYXNzd29yZCBpcwogICAgICogdHJlYXRlZCB0aGUgc2FtZSBhcyBvbWl0dGluZyBpdC4gVXNlIGNlcnRfdHlwZSB0byBzcGVjaWZ5IGFub3RoZXIKICAgICAqIHN1cHBvcnRlZCBjZXJ0aWZpY2F0ZSBmb3JtYXQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDRVJUID0gJ2NlcnQnOwoKICAgIC8qKgogICAgICogY2VydF90eXBlOiAoc3RyaW5nKSBTcGVjaWZ5IHRoZSBTU0wgY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENFUlRfVFlQRSA9ICdjZXJ0X3R5cGUnOwoKICAgIC8qKgogICAgICogY29va2llczogKGZhbHNlfEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZSwgZGVmYXVsdD1mYWxzZSkKICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBjb29raWVzIGFyZSB1c2VkIGluIGEgcmVxdWVzdCBvciB3aGF0IGNvb2tpZQogICAgICogamFyIHRvIHVzZSBvciB3aGF0IGNvb2tpZXMgdG8gc2VuZC4gVGhpcyBvcHRpb24gb25seSB3b3JrcyBpZiB5b3VyCiAgICAgKiBoYW5kbGVyIGhhcyB0aGUgYGNvb2tpZWAgbWlkZGxld2FyZS4gVmFsaWQgdmFsdWVzIGFyZSBgZmFsc2VgIGFuZAogICAgICogYW4gaW5zdGFuY2Ugb2Yge0BzZWUgQ29va2llXENvb2tpZUphckludGVyZmFjZX0uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT09LSUVTID0gJ2Nvb2tpZXMnOwoKICAgIC8qKgogICAgICogY29ubmVjdF90aW1lb3V0OiAoaW50fGZsb2F0LCBkZWZhdWx0PTApIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgd2hpbGUKICAgICAqIHRyeWluZyB0byBjb25uZWN0IHRvIGEgc2VydmVyLiBVc2UgMCB0byB3YWl0IDMwMCBzZWNvbmRzICh0aGUgZGVmYXVsdAogICAgICogYmVoYXZpb3IpLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OTkVDVF9USU1FT1VUID0gJ2Nvbm5lY3RfdGltZW91dCc7CgogICAgLyoqCiAgICAgKiBjcnlwdG9fbWV0aG9kOiAoaW50KSBBIHZhbHVlIGRlc2NyaWJpbmcgdGhlIG1pbmltdW0gVExTIHByb3RvY29sCiAgICAgKiB2ZXJzaW9uIHRvIHVzZS4KICAgICAqCiAgICAgKiBUaGlzIHNldHRpbmcgbXVzdCBiZSBzZXQgdG8gb25lIG9mIHRoZQogICAgICogYGBTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFMqX0NMSUVOVGBgIGNvbnN0YW50cy4gUEhQIDcuNCBvciBoaWdoZXIgaXMKICAgICAqIHJlcXVpcmVkIGluIG9yZGVyIHRvIHVzZSBUTFMgMS4zLCBhbmQgY1VSTCA3LjM0LjAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkCiAgICAgKiBpbiBvcmRlciB0byBzcGVjaWZ5IGEgY3J5cHRvIG1ldGhvZCwgd2l0aCBjVVJMIDcuNTIuMCBvciBoaWdoZXIgYmVpbmcKICAgICAqIHJlcXVpcmVkIHRvIHVzZSBUTFMgMS4zLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ1JZUFRPX01FVEhPRCA9ICdjcnlwdG9fbWV0aG9kJzsKCiAgICAvKioKICAgICAqIGN1cmw6IChhcnJheSkgUmF3IGNVUkwgb3B0aW9ucyB0byBhcHBseSB3aGVuIHVzaW5nIGEgYnVpbHQtaW4gY1VSTCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ1VSTCA9ICdjdXJsJzsKCiAgICAvKioKICAgICAqIGRlYnVnOiAoYm9vbHxyZXNvdXJjZSkgU2V0IHRvIHRydWUgb3Igc2V0IHRvIGEgUEhQIHN0cmVhbSByZXR1cm5lZCBieQogICAgICogZm9wZW4oKSAgZW5hYmxlIGRlYnVnIG91dHB1dCB3aXRoIHRoZSBIVFRQIGhhbmRsZXIgdXNlZCB0byBzZW5kIGEKICAgICAqIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUJVRyA9ICdkZWJ1Zyc7CgogICAgLyoqCiAgICAgKiBkZWNvZGVfY29udGVudDogKGJvb2x8c3RyaW5nLCBkZWZhdWx0PXRydWUpIFNwZWNpZnkgd2hldGhlciBvciBub3QKICAgICAqIENvbnRlbnQtRW5jb2RpbmcgcmVzcG9uc2VzIChnemlwLCBkZWZsYXRlLCBldGMuKSBhcmUgYXV0b21hdGljYWxseQogICAgICogZGVjb2RlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERFQ09ERV9DT05URU5UID0gJ2RlY29kZV9jb250ZW50JzsKCiAgICAvKioKICAgICAqIGRlbGF5OiAoaW50fGZsb2F0KSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gZGVsYXkgYmVmb3JlIHNlbmRpbmcgaW4KICAgICAqIG1pbGxpc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERFTEFZID0gJ2RlbGF5JzsKCiAgICAvKioKICAgICAqIGV4cGVjdDogKGJvb2x8aW50ZWdlcikgQ29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIuCiAgICAgKgogICAgICogU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIGZvciBhbGwKICAgICAqIHJlcXVlc3RzIHRoYXQgc2VuZHMgYSBib2R5LiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIgZm9yIGFsbCByZXF1ZXN0cy4gU2V0IHRvIGEgbnVtYmVyIHNvIHRoYXQKICAgICAqIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgaW4gb3JkZXIgdG8gc2VuZAogICAgICogdGhlIEV4cGVjdCBoZWFkZXIuIFNldHRpbmcgdG8gYSBudW1iZXIgd2lsbCBzZW5kIHRoZSBFeHBlY3QgaGVhZGVyIGZvcgogICAgICogYWxsIHJlcXVlc3RzIGluIHdoaWNoIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yCiAgICAgKiB3aGVyZSB0aGUgYm9keSBpcyBub3QgcmV3aW5kYWJsZS4KICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCBHdXp6bGUgd2lsbCBhZGQgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIHdoZW4gdGhlCiAgICAgKiBzaXplIG9mIHRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBncmVhdGVyIHRoYW4gMSBNQiBhbmQgYSByZXF1ZXN0IGlzCiAgICAgKiB1c2luZyBIVFRQLzEuMS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEVYUEVDVCA9ICdleHBlY3QnOwoKICAgIC8qKgogICAgICogZm9ybV9wYXJhbXM6IChhcnJheTxhcnJheS1rZXksIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxudWxsfGFycmF5PikKICAgICAqIEFzc29jaWF0aXZlIGFycmF5IG9mIGZvcm0gZmllbGQgbmFtZXMgdG8gc2NhbGFyLCBudWxsLCBvciBuZXN0ZWQgYXJyYXkKICAgICAqIHZhbHVlcy4gU2V0cyB0aGUgQ29udGVudC1UeXBlIGhlYWRlciB0byBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQKICAgICAqIHdoZW4gbm8gQ29udGVudC1UeXBlIGhlYWRlciBpcyBhbHJlYWR5IHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGT1JNX1BBUkFNUyA9ICdmb3JtX3BhcmFtcyc7CgogICAgLyoqCiAgICAgKiBoZWFkZXJzOiAoYXJyYXk8YXJyYXkta2V5LCBzdHJpbmd8bm9uLWVtcHR5LWFycmF5PGFycmF5LWtleSwgc3RyaW5nPj58bnVsbCkKICAgICAqIEFzc29jaWF0aXZlIGFycmF5IG9mIEhUVFAgaGVhZGVycy4gRWFjaCB2YWx1ZSBNVVNUIGJlIGEgc3RyaW5nIG9yIG5vbi1lbXB0eQogICAgICogYXJyYXkgb2Ygc3RyaW5ncy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhFQURFUlMgPSAnaGVhZGVycyc7CgogICAgLyoqCiAgICAgKiBodHRwX2Vycm9yczogKGJvb2wsIGRlZmF1bHQ9dHJ1ZSkgU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgZXhjZXB0aW9ucwogICAgICogd2hlbiBhIG5vbi0gc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiBCeSBkZWZhdWx0LAogICAgICogZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBmb3IgNHh4IGFuZCA1eHggcmVzcG9uc2VzLiBUaGlzIG9wdGlvbiBvbmx5CiAgICAgKiB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBgaHR0cEVycm9yc2AgbWlkZGxld2FyZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhUVFBfRVJST1JTID0gJ2h0dHBfZXJyb3JzJzsKCiAgICAvKioKICAgICAqIGlkbl9jb252ZXJzaW9uOiAoYm9vbHxpbnR8bnVsbCwgZGVmYXVsdD1mYWxzZSkgQSBjb21iaW5hdGlvbiBvZiBJRE5BXyoKICAgICAqIGNvbnN0YW50cyBmb3IgUEhQJ3MgaWRuX3RvX2FzY2lpKCkgZnVuY3Rpb24uIFNldCB0byBmYWxzZSBvciBudWxsIHRvCiAgICAgKiBkaXNhYmxlIElETiBzdXBwb3J0LCBvciB0byB0cnVlIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCiAgICAgKiAoSUROQV9ERUZBVUxUIGNvbnN0YW50KS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETl9DT05WRVJTSU9OID0gJ2lkbl9jb252ZXJzaW9uJzsKCiAgICAvKioKICAgICAqIGpzb246IChtaXhlZCkgQWRkcyBKU09OIGRhdGEgdG8gYSByZXF1ZXN0LiBUaGUgcHJvdmlkZWQgdmFsdWUgaXMgSlNPTgogICAgICogZW5jb2RlZCBhbmQgYSBDb250ZW50LVR5cGUgaGVhZGVyIG9mIGFwcGxpY2F0aW9uL2pzb24gd2lsbCBiZSBhZGRlZCB0bwogICAgICogdGhlIHJlcXVlc3QgaWYgbm8gQ29udGVudC1UeXBlIGhlYWRlciBpcyBhbHJlYWR5IHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBKU09OID0gJ2pzb24nOwoKICAgIC8qKgogICAgICogbXVsdGlwYXJ0OiAoYXJyYXkpIEFycmF5IG9mIHBhcnQgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYSByZXF1aXJlZAogICAgICogIm5hbWUiIGtleSBtYXBwaW5nIHRvIHRoZSBzdHJpbmcgb3IgaW50ZWdlciBmb3JtIGZpZWxkIG5hbWUsIGEgcmVxdWlyZWQKICAgICAqICJjb250ZW50cyIga2V5IG1hcHBpbmcgdG8gYW55IG5vbi1hcnJheSB2YWx1ZSBhY2NlcHRlZCBieSBQU1ItNwogICAgICogVXRpbHM6OnN0cmVhbUZvcigpIG9yIGEgbmVzdGVkIGFycmF5IG9mIGZpZWxkIHZhbHVlcywgYW4gb3B0aW9uYWwKICAgICAqICJoZWFkZXJzIiBhcnJheSBvZiBzdHJpbmcgY3VzdG9tIGhlYWRlciB2YWx1ZXMsIGFuZCBhbiBvcHRpb25hbAogICAgICogImZpbGVuYW1lIiBrZXkgbWFwcGluZyB0byBhIHN0cmluZyB0byBzZW5kIGFzIHRoZSBmaWxlbmFtZSBpbiB0aGUgcGFydC4KICAgICAqICJoZWFkZXJzIiBhbmQgImZpbGVuYW1lIiBjYW5ub3QgYmUgdXNlZCB3aGVuICJjb250ZW50cyIgaXMgYW4gYXJyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNVUxUSVBBUlQgPSAnbXVsdGlwYXJ0JzsKCiAgICAvKioKICAgICAqIG9uX2hlYWRlcnM6IChjYWxsYWJsZSkgQSBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgSFRUUCBoZWFkZXJzCiAgICAgKiBvZiB0aGUgcmVzcG9uc2UgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCB0aGUgYm9keSBoYXMgbm90IHlldCBiZWd1biB0bwogICAgICogZG93bmxvYWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPTl9IRUFERVJTID0gJ29uX2hlYWRlcnMnOwoKICAgIC8qKgogICAgICogb25fc3RhdHM6IChjYWxsYWJsZSkgYWxsb3dzIHlvdSB0byBnZXQgYWNjZXNzIHRvIHRyYW5zZmVyIHN0YXRpc3RpY3Mgb2YKICAgICAqIGEgcmVxdWVzdCBhbmQgYWNjZXNzIHRoZSBsb3dlciBsZXZlbCB0cmFuc2ZlciBkZXRhaWxzIG9mIHRoZSBoYW5kbGVyCiAgICAgKiBhc3NvY2lhdGVkIHdpdGggeW91ciBjbGllbnQuIGBgb25fc3RhdHNgYCBpcyBhIGNhbGxhYmxlIHRoYXQgaXMgaW52b2tlZAogICAgICogd2hlbiBhIGhhbmRsZXIgaGFzIGZpbmlzaGVkIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZAogICAgICogd2l0aCB0cmFuc2ZlciBzdGF0aXN0aWNzIGFib3V0IHRoZSByZXF1ZXN0LCB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQsIG9yCiAgICAgKiB0aGUgZXJyb3IgZW5jb3VudGVyZWQuIEluY2x1ZGVkIGluIHRoZSBkYXRhIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgdGltZQogICAgICogdGFrZW4gdG8gc2VuZCB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9OX1NUQVRTID0gJ29uX3N0YXRzJzsKCiAgICAvKioKICAgICAqIHByb2dyZXNzOiAoY2FsbGFibGUpIERlZmluZXMgYSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0cmFuc2ZlcgogICAgICogcHJvZ3Jlc3MgaXMgbWFkZS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwb3NpdGlvbmFsCiAgICAgKiBhcmd1bWVudHM6IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgZG93bmxvYWRlZCwgdGhlCiAgICAgKiBudW1iZXIgb2YgYnl0ZXMgZG93bmxvYWRlZCBzbyBmYXIsIHRoZSBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgdG8gYmUKICAgICAqIHVwbG9hZGVkLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVwbG9hZGVkIHNvIGZhci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBST0dSRVNTID0gJ3Byb2dyZXNzJzsKCiAgICAvKioKICAgICAqIHByb3RvY29sczogKG5vbi1lbXB0eS1hcnJheTxhcnJheS1rZXksIHN0cmluZz4sIGRlZmF1bHQ9WydodHRwJywgJ2h0dHBzJ10pCiAgICAgKiBBbGxvd2VkIFVSSSBzY2hlbWVzLiBCdWlsdC1pbiBoYW5kbGVycyBhY2NlcHQgb25seSB0aGUgY2FzZS1zZW5zaXRpdmUKICAgICAqIHZhbHVlcyAiaHR0cCIgYW5kICJodHRwcyIuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9UT0NPTFMgPSAncHJvdG9jb2xzJzsKCiAgICAvKioKICAgICAqIHByb3h5OiAoc3RyaW5nfGFycmF5KSBQYXNzIGEgc3RyaW5nIHRvIHNwZWNpZnkgYW4gSFRUUCBwcm94eSwgb3IgYW4KICAgICAqIGFycmF5IHRvIHNwZWNpZnkgZGlmZmVyZW50IHByb3hpZXMgZm9yIGRpZmZlcmVudCBwcm90b2NvbHMgKHdoZXJlIHRoZQogICAgICoga2V5IGlzIHRoZSBwcm90b2NvbCBhbmQgdGhlIHZhbHVlIGlzIGEgcHJveHkgc3RyaW5nIG9yIG51bGwpLiBQcm92aWRlIGEKICAgICAqICJubyIga2V5IGFzIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgYXJyYXkgb2Ygc3RyaW5ncywgb3IgbnVsbCB0bwogICAgICogc3BlY2lmeSBob3N0cyBvciBob3N0LWFuZC1wb3J0IHBhaXJzIHRoYXQgc2hvdWxkIG5vdCBiZSBwcm94aWVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJPWFkgPSAncHJveHknOwoKICAgIC8qKgogICAgICogcXVlcnk6IChhcnJheTxhcnJheS1rZXksIG1peGVkPnxzdHJpbmcpIEFzc29jaWF0aXZlIGFycmF5IG9mIHF1ZXJ5IHN0cmluZwogICAgICogdmFsdWVzIHRvIGFkZCB0byB0aGUgcmVxdWVzdC4gVGhpcyBvcHRpb24gdXNlcyBQSFAncyBodHRwX2J1aWxkX3F1ZXJ5KCkKICAgICAqIHRvIGNyZWF0ZSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBQYXNzIGEgc3RyaW5nIHZhbHVlIGlmIHlvdSBuZWVkCiAgICAgKiBtb3JlIGNvbnRyb2wgdGhhbiB3aGF0IHRoaXMgbWV0aG9kIHByb3ZpZGVzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBRVUVSWSA9ICdxdWVyeSc7CgogICAgLyoqCiAgICAgKiBzaW5rOiAocmVzb3VyY2V8c3RyaW5nfFxQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZSkgV2hlcmUgdGhlIGRhdGEKICAgICAqIG9mIHRoZSByZXNwb25zZSBpcyB3cml0dGVuIHRvLiBEZWZhdWx0cyB0byBhIFBIUCB0ZW1wIHN0cmVhbS4gUHJvdmlkaW5nCiAgICAgKiBhIHN0cmluZyB3aWxsIHdyaXRlIGRhdGEgdG8gYSBmaWxlIGJ5IHRoZSBnaXZlbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lOSyA9ICdzaW5rJzsKCiAgICAvKioKICAgICAqIHN5bmNocm9ub3VzOiAoYm9vbCkgU2V0IHRvIHRydWUgdG8gaW5mb3JtIEhUVFAgaGFuZGxlcnMgdGhhdCB5b3UgaW50ZW5kCiAgICAgKiBvbiB3YWl0aW5nIG9uIHRoZSByZXNwb25zZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBvcHRpbWl6YXRpb25zLiBOb3RlCiAgICAgKiB0aGF0IGEgcHJvbWlzZSBpcyBzdGlsbCByZXR1cm5lZCBpZiB5b3UgYXJlIHVzaW5nIG9uZSBvZiB0aGUgYXN5bmMKICAgICAqIGNsaWVudCBtZXRob2RzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1lOQ0hST05PVVMgPSAnc3luY2hyb25vdXMnOwoKICAgIC8qKgogICAgICogc3NsX2tleTogKGFycmF5ezA6IHN0cmluZywgMT86IHN0cmluZ3xudWxsfXxzdHJpbmcpIFNwZWNpZnkgdGhlIHBhdGggdG8KICAgICAqIGEgcHJpdmF0ZSBTU0wga2V5IGZpbGUuIFBFTSBpcyB0aGUgZGVmYXVsdCBwcml2YXRlIGtleSBmb3JtYXQuIElmIGEKICAgICAqIHBhc3N3b3JkIGlzIHJlcXVpcmVkLCBzZXQgc3NsX2tleSB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBrZXkgcGF0aCBpbgogICAgICogdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQgYnkgdGhlIGtleSBwYXNzd29yZCBpbiB0aGUgc2Vjb25kCiAgICAgKiBlbGVtZW50LiBBIG51bGwgcGFzc3dvcmQgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBvbWl0dGluZyBpdC4gVXNlCiAgICAgKiBzc2xfa2V5X3R5cGUgdG8gc3BlY2lmeSBhbm90aGVyIHN1cHBvcnRlZCBrZXkgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1NMX0tFWSA9ICdzc2xfa2V5JzsKCiAgICAvKioKICAgICAqIHNzbF9rZXlfdHlwZTogKHN0cmluZykgU3BlY2lmeSB0aGUgU1NMIHByaXZhdGUga2V5IGZpbGUgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNTTF9LRVlfVFlQRSA9ICdzc2xfa2V5X3R5cGUnOwoKICAgIC8qKgogICAgICogc3RyZWFtOiAoYm9vbCkgU2V0IHRvIHRydWUgdG8gYXR0ZW1wdCB0byBzdHJlYW0gYSByZXNwb25zZSByYXRoZXIgdGhhbgogICAgICogZG93bmxvYWQgaXQgYWxsIHVwLWZyb250LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1RSRUFNID0gJ3N0cmVhbSc7CgogICAgLyoqCiAgICAgKiBzdHJlYW1fY29udGV4dDogKGFycmF5KSBQSFAgc3RyZWFtIGNvbnRleHQgb3B0aW9ucyB0byBtZXJnZSBpbnRvIHRoZQogICAgICogY29udGV4dCB1c2VkIGJ5IHRoZSBidWlsdC1pbiBzdHJlYW0gaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNUUkVBTV9DT05URVhUID0gJ3N0cmVhbV9jb250ZXh0JzsKCiAgICAvKioKICAgICAqIHZlcmlmeTogKGJvb2x8c3RyaW5nLCBkZWZhdWx0PXRydWUpIERlc2NyaWJlcyB0aGUgU1NMIGNlcnRpZmljYXRlCiAgICAgKiB2ZXJpZmljYXRpb24gYmVoYXZpb3Igb2YgYSByZXF1ZXN0LiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgU1NMCiAgICAgKiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gdXNpbmcgdGhlIHN5c3RlbSBDQSBidW5kbGUgd2hlbiBhdmFpbGFibGUKICAgICAqICh0aGUgZGVmYXVsdCkuIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAodGhpcwogICAgICogaXMgaW5zZWN1cmUhKS4gU2V0IHRvIGEgc3RyaW5nIHRvIHByb3ZpZGUgdGhlIHBhdGggdG8gYSBDQSBidW5kbGUgb24KICAgICAqIGRpc2sgdG8gZW5hYmxlIHZlcmlmaWNhdGlvbiB1c2luZyBhIGN1c3RvbSBjZXJ0aWZpY2F0ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFZFUklGWSA9ICd2ZXJpZnknOwoKICAgIC8qKgogICAgICogdGltZW91dDogKGludHxmbG9hdCwgZGVmYXVsdD0wKSBOdW1iZXIgZGVzY3JpYmluZyB0aGUgdGltZW91dCBvZiB0aGUKICAgICAqIHJlcXVlc3QgaW4gc2Vjb25kcy4gVXNlIDAgdG8gd2FpdCBpbmRlZmluaXRlbHkgKHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRJTUVPVVQgPSAndGltZW91dCc7CgogICAgLyoqCiAgICAgKiByZWFkX3RpbWVvdXQ6IChpbnR8ZmxvYXQsIGRlZmF1bHQ9ZGVmYXVsdF9zb2NrZXRfdGltZW91dCBpbmkgc2V0dGluZykKICAgICAqIE51bWJlciBkZXNjcmliaW5nIHRoZSBib2R5IHJlYWQgdGltZW91dCwgZm9yIHN0cmVhbSByZXF1ZXN0cy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFQURfVElNRU9VVCA9ICdyZWFkX3RpbWVvdXQnOwoKICAgIC8qKgogICAgICogcmV0cmllczogKGludCkgQ3VycmVudCByZXRyeSBjb3VudCB1c2VkIGJ5IHRoZSByZXRyeSBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVUUklFUyA9ICdyZXRyaWVzJzsKCiAgICAvKioKICAgICAqIHZlcnNpb246IChzdHJpbmd8aW50fGZsb2F0KSBTcGVjaWZpZXMgdGhlIEhUVFAgcHJvdG9jb2wgdmVyc2lvbiB0byBhdHRlbXB0CiAgICAgKiB0byB1c2UuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWRVJTSU9OID0gJ3ZlcnNpb24nOwoKICAgIC8qKgogICAgICogZm9yY2VfaXBfcmVzb2x2ZTogKHN0cmluZykgU2V0IHRvICJ2NCIgdG8gZm9yY2UgSVB2NCByZXNvbHV0aW9uIG9yICJ2NiIKICAgICAqIGZvciBJUHY2IHJlc29sdXRpb24gd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGT1JDRV9JUF9SRVNPTFZFID0gJ2ZvcmNlX2lwX3Jlc29sdmUnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZSBhcyBQOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIE1pZGRsZXdhcmUgdGhhdCByZXRyaWVzIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBib29sZWFuIHJlc3VsdCBvZgogKiBpbnZva2luZyB0aGUgcHJvdmlkZWQgImRlY2lkZXIiIGZ1bmN0aW9uLgogKgogKiBAZmluYWwKICovCmNsYXNzIFJldHJ5TWlkZGxld2FyZQp7CiAgICAvKioKICAgICAqIEB2YXIgY2FsbGFibGUoUmVxdWVzdEludGVyZmFjZSwgYXJyYXkpOiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZQogICAgICovCiAgICBwcml2YXRlICRkZWNpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBjYWxsYWJsZShpbnQpCiAgICAgKi8KICAgIHByaXZhdGUgJGRlbGF5OwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVjaWRlciAgICAgRnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YgcmV0cmllcywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVxdWVzdCwgW3Jlc3BvbnNlXSwgYW5kIFtleGNlcHRpb25dIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlKFJlcXVlc3RJbnRlcmZhY2UsIGFycmF5KTogUHJvbWlzZUludGVyZmFjZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqIEBwYXJhbSAoY2FsbGFibGUoaW50KTogaW50KXxudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGF5ICAgICAgIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyB0byBkZWxheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRkZWNpZGVyLCBjYWxsYWJsZSAkbmV4dEhhbmRsZXIsID9jYWxsYWJsZSAkZGVsYXkgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5kZWNpZGVyID0gJGRlY2lkZXI7CiAgICAgICAgJHRoaXMtPm5leHRIYW5kbGVyID0gJG5leHRIYW5kbGVyOwogICAgICAgICR0aGlzLT5kZWxheSA9ICRkZWxheSA/OiBzdGF0aWMgZnVuY3Rpb24gKGludCAkcmV0cmllcyk6IGludCB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAyICoqICgkcmV0cmllcyAtIDEpICogMTAwMDsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogRGVmYXVsdCBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5IGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gaW50IG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSA3LjExLCB3aWxsIGJlIHJlbW92ZWQgaW4gOC4wLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4cG9uZW50aWFsRGVsYXkoaW50ICRyZXRyaWVzKTogaW50CiAgICB7CiAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oJ2d1enpsZWh0dHAvZ3V6emxlJywgJzcuMTEnLCAnJXM6OiVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDguMC4nLCBfX0NMQVNTX18sIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiAoaW50KSAyICoqICgkcmV0cmllcyAtIDEpICogMTAwMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncmV0cmllcyddKSkgewogICAgICAgICAgICAkb3B0aW9uc1sncmV0cmllcyddID0gMDsKICAgICAgICB9CgogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbigKICAgICAgICAgICAgICAgICR0aGlzLT5vbkZ1bGZpbGxlZCgkcmVxdWVzdCwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgJHRoaXMtPm9uUmVqZWN0ZWQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBmdWxmaWxsZWQgY2xvc3VyZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG9uRnVsZmlsbGVkKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTogY2FsbGFibGUKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkcmVxdWVzdCwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCEoJHRoaXMtPmRlY2lkZXIpKAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3JldHJpZXMnXSwKICAgICAgICAgICAgICAgICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgJHZhbHVlLAogICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvUmV0cnkoJHJlcXVlc3QsICRvcHRpb25zLCAkdmFsdWUpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHJlamVjdGVkIGNsb3N1cmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBvblJlamVjdGVkKFJlcXVlc3RJbnRlcmZhY2UgJHJlcSwgYXJyYXkgJG9wdGlvbnMpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkcmVxLCAkb3B0aW9ucykgewogICAgICAgICAgICBpZiAoISgkdGhpcy0+ZGVjaWRlcikoCiAgICAgICAgICAgICAgICAkb3B0aW9uc1sncmV0cmllcyddLAogICAgICAgICAgICAgICAgJHJlcSwKICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAkcmVhc29uCiAgICAgICAgICAgICkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBQXENyZWF0ZTo6cmVqZWN0aW9uRm9yKCRyZWFzb24pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvUmV0cnkoJHJlcSwgJG9wdGlvbnMpOwogICAgICAgIH07CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb1JldHJ5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zLCA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkb3B0aW9uc1snZGVsYXknXSA9ICgkdGhpcy0+ZGVsYXkpKCsrJG9wdGlvbnNbJ3JldHJpZXMnXSwgJHJlc3BvbnNlLCAkcmVxdWVzdCk7CgogICAgICAgIHJldHVybiAkdGhpcygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/TransferStats.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXByZXNlbnRzIGRhdGEgYXQgdGhlIHBvaW50IGFmdGVyIGl0IHdhcyB0cmFuc2ZlcnJlZCBlaXRoZXIgc3VjY2Vzc2Z1bGx5CiAqIG9yIGFmdGVyIGEgbmV0d29yayBlcnJvci4KICovCmZpbmFsIGNsYXNzIFRyYW5zZmVyU3RhdHMKewogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgUmVzcG9uc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXR8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0cmFuc2ZlclRpbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGhhbmRsZXJTdGF0czsKCiAgICAvKioKICAgICAqIEB2YXIgbWl4ZWR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRoYW5kbGVyRXJyb3JEYXRhOwoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICAgICAgJHJlcXVlc3QgICAgICAgICAgUmVxdWVzdCB0aGF0IHdhcyBzZW50LgogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwgJHJlc3BvbnNlICAgICAgICAgUmVzcG9uc2UgcmVjZWl2ZWQgKGlmIGFueSkKICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICAgICAgICAgICAgICR0cmFuc2ZlclRpbWUgICAgIFRvdGFsIGhhbmRsZXIgdHJhbnNmZXIgdGltZS4KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAgICAgICRoYW5kbGVyRXJyb3JEYXRhIEhhbmRsZXIgZXJyb3IgZGF0YS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICRoYW5kbGVyU3RhdHMgICAgIEhhbmRsZXIgc3BlY2lmaWMgc3RhdHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgID9SZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgID9mbG9hdCAkdHJhbnNmZXJUaW1lID0gbnVsbCwKICAgICAgICAkaGFuZGxlckVycm9yRGF0YSA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJTdGF0cyA9IFtdCiAgICApIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+dHJhbnNmZXJUaW1lID0gJHRyYW5zZmVyVGltZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckVycm9yRGF0YSA9ICRoYW5kbGVyRXJyb3JEYXRhOwogICAgICAgICR0aGlzLT5oYW5kbGVyU3RhdHMgPSAkaGFuZGxlclN0YXRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZCAoaWYgYW55KS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCk6ID9SZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZXNwb25zZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZSAhPT0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgaGFuZGxlciBzcGVjaWZpYyBlcnJvciBkYXRhLgogICAgICoKICAgICAqIFRoaXMgbWlnaHQgYmUgYW4gZXhjZXB0aW9uLCBhIGludGVnZXIgcmVwcmVzZW50aW5nIGFuIGVycm9yIGNvZGUsIG9yCiAgICAgKiBhbnl0aGluZyBlbHNlLiBSZWx5aW5nIG9uIHRoaXMgdmFsdWUgYXNzdW1lcyB0aGF0IHlvdSBrbm93IHdoYXQgaGFuZGxlcgogICAgICogeW91IGFyZSB1c2luZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyRXJyb3JEYXRhKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhbmRsZXJFcnJvckRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGVmZmVjdGl2ZSBVUkkgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgdG8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVVcmkoKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0LT5nZXRVcmkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZXN0aW1hdGVkIHRpbWUgdGhlIHJlcXVlc3Qgd2FzIGJlaW5nIHRyYW5zZmVycmVkIGJ5IHRoZSBoYW5kbGVyLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXR8bnVsbCBUaW1lIGluIHNlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFuc2ZlclRpbWUoKTogP2Zsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc2ZlclRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgaGFuZGxlciBzcGVjaWZpYyB0cmFuc2ZlciBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlclN0YXRzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzcGVjaWZpYyBoYW5kbGVyIHN0YXRpc3RpYyBmcm9tIHRoZSBoYW5kbGVyIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdCBIYW5kbGVyIHNwZWNpZmljIHRyYW5zZmVyIHN0YXQgdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyU3RhdChzdHJpbmcgJHN0YXQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHNbJHN0YXRdID8/IG51bGw7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/TransportSharing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKZmluYWwgY2xhc3MgVHJhbnNwb3J0U2hhcmluZwp7CiAgICBwdWJsaWMgY29uc3QgTk9ORSA9ICdub25lJzsKICAgIHB1YmxpYyBjb25zdCBIQU5ETEVSX1BSRUZFUiA9ICdoYW5kbGVyX3ByZWZlcic7CiAgICBwdWJsaWMgY29uc3QgSEFORExFUl9SRVFVSVJFID0gJ2hhbmRsZXJfcmVxdWlyZSc7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclxDdXJsSGFuZGxlcjsKdXNlIEd1enpsZUh0dHBcSGFuZGxlclxDdXJsTXVsdGlIYW5kbGVyOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxTaGFyZUhhbmRsZVN0YXRlOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxWZXJzaW9uOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXFByb3h5Owp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXFN0cmVhbUhhbmRsZXI7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCmZpbmFsIGNsYXNzIFV0aWxzCnsKICAgIC8qKgogICAgICogRGVidWcgZnVuY3Rpb24gdXNlZCB0byBkZXNjcmliZSB0aGUgcHJvdmlkZWQgdmFsdWUgdHlwZSBhbmQgY2xhc3MuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRpbnB1dAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUgYW5kCiAgICAgKiAgICAgICAgICAgICAgICBpZiBhIGNsYXNzIGlzIHByb3ZpZGVkLCB0aGUgY2xhc3MgbmFtZS4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBVdGlsczo6ZGVzY3JpYmVUeXBlKCkgd2lsbCBiZSByZW1vdmVkIGluIGd1enpsZWh0dHAvZ3V6emxlOjguMC4gVXNlIGdldF9kZWJ1Z190eXBlKCkgaW5zdGVhZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZXNjcmliZVR5cGUoJGlucHV0KTogc3RyaW5nCiAgICB7CiAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICdndXp6bGVodHRwL2d1enpsZScsCiAgICAgICAgICAgICc3LjEyJywKICAgICAgICAgICAgJyVzKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDguMC4gVXNlIGdldF9kZWJ1Z190eXBlKCkgaW5zdGVhZC4nLAogICAgICAgICAgICBfX01FVEhPRF9fCiAgICAgICAgKTsKCiAgICAgICAgc3dpdGNoIChcZ2V0dHlwZSgkaW5wdXQpKSB7CiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdCgnLlxnZXRfY2xhc3MoJGlucHV0KS4nKSc7CiAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoKICAgICAgICAgICAgICAgIHJldHVybiAnYXJyYXkoJy5cY291bnQoJGlucHV0KS4nKSc7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBcb2Jfc3RhcnQoKTsKICAgICAgICAgICAgICAgIFx2YXJfZHVtcCgkaW5wdXQpOwogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IHZzIGRvdWJsZQogICAgICAgICAgICAgICAgLyoqIEB2YXIgc3RyaW5nICR2YXJEdW1wQ29udGVudCAqLwogICAgICAgICAgICAgICAgJHZhckR1bXBDb250ZW50ID0gXG9iX2dldF9jbGVhbigpOwoKICAgICAgICAgICAgICAgIHJldHVybiBcc3RyX3JlcGxhY2UoJ2RvdWJsZSgnLCAnZmxvYXQoJywgXHJ0cmltKCR2YXJEdW1wQ29udGVudCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlcyBhbiBhcnJheSBvZiBoZWFkZXIgbGluZXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBpdGVyYWJsZSAkbGluZXMgSGVhZGVyIGxpbmVzIGFycmF5IG9mIHN0cmluZ3MgaW4gdGhlIGZvbGxvd2luZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICJOYW1lOiBWYWx1ZSIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoZWFkZXJzRnJvbUxpbmVzKGl0ZXJhYmxlICRsaW5lcyk6IGFycmF5CiAgICB7CiAgICAgICAgJGhlYWRlcnMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IFxleHBsb2RlKCc6JywgJGxpbmUsIDIpOwogICAgICAgICAgICAkaGVhZGVyc1tcdHJpbSgkcGFydHNbMF0pXVtdID0gaXNzZXQoJHBhcnRzWzFdKSA/IFx0cmltKCRwYXJ0c1sxXSkgOiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlYnVnIHN0cmVhbSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmFyaWFibGUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBPcHRpb25hbCB2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1Z1Jlc291cmNlKCR2YWx1ZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKFxpc19yZXNvdXJjZSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgfQogICAgICAgIGlmIChcZGVmaW5lZCgnU1RET1VUJykpIHsKICAgICAgICAgICAgcmV0dXJuIFxTVERPVVQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gUHNyN1xVdGlsczo6dHJ5Rm9wZW4oJ3BocDovL291dHB1dCcsICd3Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaG9vc2VzIGFuZCBjcmVhdGVzIGEgZGVmYXVsdCBoYW5kbGVyIHRvIHVzZSBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIGhhbmRsZXIgaXMgbm90IHdyYXBwZWQgYnkgYW55IGRlZmF1bHQgbWlkZGxld2FyZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5e3RyYW5zcG9ydF9zaGFyaW5nPzogbWl4ZWR9ICRoYW5kbGVyT3B0aW9ucyBIYW5kbGVyIGNvbnN0cnVjdG9yIG9wdGlvbnMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZShSZXF1ZXN0SW50ZXJmYWNlLCBhcnJheSk6IFByb21pc2VcUHJvbWlzZUludGVyZmFjZSBSZXR1cm5zIHRoZSBiZXN0IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBzeXN0ZW0uCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyB2aWFibGUgSGFuZGxlciBpcyBhdmFpbGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hvb3NlSGFuZGxlcihhcnJheSAkaGFuZGxlck9wdGlvbnMgPSBbXSk6IGNhbGxhYmxlCiAgICB7CiAgICAgICAgJGhhbmRsZXIgPSBudWxsOwogICAgICAgICRzaGFyaW5nTW9kZSA9IEN1cmxTaGFyZUhhbmRsZVN0YXRlOjpub3JtYWxpemVNb2RlKCRoYW5kbGVyT3B0aW9uc1sndHJhbnNwb3J0X3NoYXJpbmcnXSA/PyBudWxsLCAndHJhbnNwb3J0X3NoYXJpbmcnKTsKICAgICAgICAkc2hhcmluZ1JlcXVlc3RlZCA9ICRzaGFyaW5nTW9kZSAhPT0gVHJhbnNwb3J0U2hhcmluZzo6Tk9ORTsKICAgICAgICAkc2hhcmluZ1JlcXVpcmVkID0gJHNoYXJpbmdNb2RlID09PSBUcmFuc3BvcnRTaGFyaW5nOjpIQU5ETEVSX1JFUVVJUkU7CiAgICAgICAgJGN1cmxIYW5kbGVyT3B0aW9ucyA9IFtdOwogICAgICAgICRjdXJsU3VwcG9ydGVkID0gXGRlZmluZWQoJ0NVUkxPUFRfQ1VTVE9NUkVRVUVTVCcpCiAgICAgICAgICAgICYmIEN1cmxWZXJzaW9uOjpzdXBwb3J0c0N1cmxIYW5kbGVyKCkKICAgICAgICAgICAgJiYgKFxmdW5jdGlvbl9leGlzdHMoJ2N1cmxfbXVsdGlfZXhlYycpIHx8IFxmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKTsKCiAgICAgICAgaWYgKCRzaGFyaW5nUmVxdWlyZWQgJiYgISRjdXJsU3VwcG9ydGVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVxdWlyZWQgdHJhbnNwb3J0IHNoYXJpbmcgcmVxdWlyZXMgdGhlIFBIUCBjVVJMIGV4dGVuc2lvbiwgY3VybF9leGVjKCkgb3IgY3VybF9tdWx0aV9leGVjKCksIGFuZCBsaWJjdXJsIDcuMjEuMiBvciBoaWdoZXIuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGN1cmxTdXBwb3J0ZWQpIHsKICAgICAgICAgICAgaWYgKCRzaGFyaW5nUmVxdWVzdGVkKSB7CiAgICAgICAgICAgICAgICAkc2hhcmVTdGF0ZSA9IEN1cmxTaGFyZUhhbmRsZVN0YXRlOjpmcm9tT3B0aW9uKCRzaGFyaW5nTW9kZSk7CiAgICAgICAgICAgICAgICBpZiAoJHNoYXJlU3RhdGUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkY3VybEhhbmRsZXJPcHRpb25zWyd0cmFuc3BvcnRfc2hhcmluZyddID0gJHNoYXJlU3RhdGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX211bHRpX2V4ZWMnKSAmJiBcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2V4ZWMnKSkgewogICAgICAgICAgICAgICAgJGhhbmRsZXIgPSBQcm94eTo6d3JhcFN5bmMobmV3IEN1cmxNdWx0aUhhbmRsZXIoJGN1cmxIYW5kbGVyT3B0aW9ucyksIG5ldyBDdXJsSGFuZGxlcigkY3VybEhhbmRsZXJPcHRpb25zKSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2V4ZWMnKSkgewogICAgICAgICAgICAgICAgJGhhbmRsZXIgPSBuZXcgQ3VybEhhbmRsZXIoJGN1cmxIYW5kbGVyT3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZWlmIChcZnVuY3Rpb25fZXhpc3RzKCdjdXJsX211bHRpX2V4ZWMnKSkgewogICAgICAgICAgICAgICAgJGhhbmRsZXIgPSBuZXcgQ3VybE11bHRpSGFuZGxlcigkY3VybEhhbmRsZXJPcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKFxpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewogICAgICAgICAgICAkc3RyZWFtSGFuZGxlciA9IG5ldyBTdHJlYW1IYW5kbGVyKFsndHJhbnNwb3J0X3NoYXJpbmcnID0+ICRzaGFyaW5nTW9kZV0pOwoKICAgICAgICAgICAgJGhhbmRsZXIgPSAkaGFuZGxlcgogICAgICAgICAgICAgICAgPyBQcm94eTo6d3JhcFN0cmVhbWluZygkaGFuZGxlciwgJHN0cmVhbUhhbmRsZXIpCiAgICAgICAgICAgICAgICA6ICRzdHJlYW1IYW5kbGVyOwogICAgICAgIH0gZWxzZWlmICghJGhhbmRsZXIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdHdXp6bGVIdHRwIHJlcXVpcmVzIGNVUkwsIHRoZSBhbGxvd191cmxfZm9wZW4gaW5pIHNldHRpbmcsIG9yIGEgY3VzdG9tIEhUVFAgaGFuZGxlci4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGFuZGxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZyB0byB1c2Ugd2l0aCBHdXp6bGUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVmYXVsdFVzZXJBZ2VudCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3ByaW50ZignR3V6emxlSHR0cC8lZCcsIENsaWVudEludGVyZmFjZTo6TUFKT1JfVkVSU0lPTik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNhY2VydCBidW5kbGUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4KICAgICAqCiAgICAgKiBGaXJzdCwgdGhlIG9wZW5zc2wuY2FmaWxlIGFuZCBjdXJsLmNhaW5mbyBwaHAuaW5pIHNldHRpbmdzIGFyZSBjaGVja2VkLgogICAgICogSWYgdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBjb21tb24gbG9jYXRpb25zIGZvcgogICAgICogYnVuZGxlcyBmb3VuZCBvbiBSZWQgSGF0LCBDZW50T1MsIEZlZG9yYSwgVWJ1bnR1LCBEZWJpYW4sIEZyZWVCU0QsIE9TIFgKICAgICAqIGFuZCBXaW5kb3dzIGFyZSBjaGVja2VkLiBJZiBhbnkgb2YgdGhlc2UgZmlsZSBsb2NhdGlvbnMgYXJlIGZvdW5kIG9uCiAgICAgKiBkaXNrLCB0aGV5IHdpbGwgYmUgdXRpbGl6ZWQuCiAgICAgKgogICAgICogTm90ZTogdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNhY2hlZCBmb3Igc3Vic2VxdWVudCBjYWxscy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIG5vIGJ1bmRsZSBjYW4gYmUgZm91bmQuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgVXRpbHM6OmRlZmF1bHRDYUJ1bmRsZSB3aWxsIGJlIHJlbW92ZWQgaW4gZ3V6emxlaHR0cC9ndXp6bGU6OC4wLiBUaGlzIG1ldGhvZCBpcyBub3QgbmVlZGVkIGluIFBIUCA1LjYrLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRDYUJ1bmRsZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBzdGF0aWMgJGNhY2hlZCA9IG51bGw7CiAgICAgICAgc3RhdGljICRjYWZpbGVzID0gWwogICAgICAgICAgICAvLyBSZWQgSGF0LCBDZW50T1MsIEZlZG9yYSAocHJvdmlkZWQgYnkgdGhlIGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICAgICAnL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQnLAogICAgICAgICAgICAvLyBVYnVudHUsIERlYmlhbiAocHJvdmlkZWQgYnkgdGhlIGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICAgICAnL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCcsCiAgICAgICAgICAgIC8vIEZyZWVCU0QgKHByb3ZpZGVkIGJ5IHRoZSBjYV9yb290X25zcyBwYWNrYWdlKQogICAgICAgICAgICAnL3Vzci9sb2NhbC9zaGFyZS9jZXJ0cy9jYS1yb290LW5zcy5jcnQnLAogICAgICAgICAgICAvLyBTTEVTIDEyIChwcm92aWRlZCBieSB0aGUgY2EtY2VydGlmaWNhdGVzIHBhY2thZ2UpCiAgICAgICAgICAgICcvdmFyL2xpYi9jYS1jZXJ0aWZpY2F0ZXMvY2EtYnVuZGxlLnBlbScsCiAgICAgICAgICAgIC8vIE9TIFggcHJvdmlkZWQgYnkgaG9tZWJyZXcgKHVzaW5nIHRoZSBkZWZhdWx0IHBhdGgpCiAgICAgICAgICAgICcvdXNyL2xvY2FsL2V0Yy9vcGVuc3NsL2NlcnQucGVtJywKICAgICAgICAgICAgLy8gR29vZ2xlIGFwcCBlbmdpbmUKICAgICAgICAgICAgJy9ldGMvY2EtY2VydGlmaWNhdGVzLmNydCcsCiAgICAgICAgICAgIC8vIFdpbmRvd3M/CiAgICAgICAgICAgICdDOlxcd2luZG93c1xcc3lzdGVtMzJcXGN1cmwtY2EtYnVuZGxlLmNydCcsCiAgICAgICAgICAgICdDOlxcd2luZG93c1xcY3VybC1jYS1idW5kbGUuY3J0JywKICAgICAgICBdOwoKICAgICAgICBpZiAoJGNhY2hlZCkgewogICAgICAgICAgICByZXR1cm4gJGNhY2hlZDsKICAgICAgICB9CgogICAgICAgIGlmICgkY2EgPSBcaW5pX2dldCgnb3BlbnNzbC5jYWZpbGUnKSkgewogICAgICAgICAgICByZXR1cm4gJGNhY2hlZCA9ICRjYTsKICAgICAgICB9CgogICAgICAgIGlmICgkY2EgPSBcaW5pX2dldCgnY3VybC5jYWluZm8nKSkgewogICAgICAgICAgICByZXR1cm4gJGNhY2hlZCA9ICRjYTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRjYWZpbGVzIGFzICRmaWxlbmFtZSkgewogICAgICAgICAgICBpZiAoXGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkY2FjaGVkID0gJGZpbGVuYW1lOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgIDw8PCBFT1QKTm8gc3lzdGVtIENBIGJ1bmRsZSBjb3VsZCBiZSBmb3VuZCBpbiBhbnkgb2YgdGhlIHRoZSBjb21tb24gc3lzdGVtIGxvY2F0aW9ucy4KUEhQIHZlcnNpb25zIGVhcmxpZXIgdGhhbiA1LjYgYXJlIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtJ3MKQ0EgYnVuZGxlIGJ5IGRlZmF1bHQuIEluIG9yZGVyIHRvIHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlcywgeW91IHdpbGwgbmVlZCB0bwpzdXBwbHkgdGhlIHBhdGggb24gZGlzayB0byBhIGNlcnRpZmljYXRlIGJ1bmRsZSB0byB0aGUgJ3ZlcmlmeScgcmVxdWVzdCBvcHRpb246Cmh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvNy4xMi9kb2NzL3JlcXVlc3Qtb3B0aW9ucy5tZCN2ZXJpZnkuIElmCnlvdSBkbyBub3QgbmVlZCBhIHNwZWNpZmljIGNlcnRpZmljYXRlIGJ1bmRsZSwgdGhlbiBNb3ppbGxhIHByb3ZpZGVzIGEgY29tbW9ubHkKdXNlZCBDQSBidW5kbGUgd2hpY2ggY2FuIGJlIGRvd25sb2FkZWQgaGVyZSAocHJvdmlkZWQgYnkgdGhlIG1haW50YWluZXIgb2YKY1VSTCk6IGh0dHBzOi8vY3VybC5zZS9jYS9jYWNlcnQucGVtLiBPbmNlIHlvdSBoYXZlIGEgQ0EgYnVuZGxlIGF2YWlsYWJsZSBvbgpkaXNrLCB5b3UgY2FuIHNldCB0aGUgJ29wZW5zc2wuY2FmaWxlJyBQSFAgaW5pIHNldHRpbmcgdG8gcG9pbnQgdG8gdGhlIHBhdGggdG8KdGhlIGZpbGUsIGFsbG93aW5nIHlvdSB0byBvbWl0IHRoZSAndmVyaWZ5JyByZXF1ZXN0IG9wdGlvbi4gU2VlCmh0dHBzOi8vY3VybC5zZS9kb2NzL3NzbGNlcnRzLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCkVPVAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGxvd2VyY2FzZSBoZWFkZXIgbmFtZXMgdG8gdGhlIGFjdHVhbAogICAgICogaGVhZGVyIGNhc2luZy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJLZXlzKGFycmF5ICRoZWFkZXJzKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoXGFycmF5X2tleXMoJGhlYWRlcnMpIGFzICRrZXkpIHsKICAgICAgICAgICAgJHJlc3VsdFtcc3RydG9sb3dlcigoc3RyaW5nKSAka2V5KV0gPSAka2V5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHByb3RvY29scwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3RvY29scygkcHJvdG9jb2xzKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoIVxpc19hcnJheSgkcHJvdG9jb2xzKSB8fCAkcHJvdG9jb2xzID09PSBbXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdwcm90b2NvbHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiAiaHR0cCIgYW5kL29yICJodHRwcyInKTsKICAgICAgICB9CgogICAgICAgICRub3JtYWxpemVkID0gW107CgogICAgICAgIGZvcmVhY2ggKCRwcm90b2NvbHMgYXMgJHByb3RvY29sKSB7CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkcHJvdG9jb2wpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdwcm90b2NvbHMgbXVzdCBjb250YWluIG9ubHkgc3RyaW5ncycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHByb3RvY29sICE9PSAnaHR0cCcgJiYgJHByb3RvY29sICE9PSAnaHR0cHMnKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdwcm90b2NvbHMgbWF5IG9ubHkgY29udGFpbiAiaHR0cCIgYW5kICJodHRwcyInKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5vcm1hbGl6ZWRbJHByb3RvY29sXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGFycmF5X2tleXMoJG5vcm1hbGl6ZWQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBob3N0IG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHN0cmlwIGEgcG9ydCBmcm9tIHRoZSBob3N0IGlmIGl0IGlzIHByZXNlbnQuIERvbWFpbgogICAgICogcGF0dGVybnMgYXJlIG1hdGNoZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiBFeGFjdCBJUCBsaXRlcmFsIHBhdHRlcm5zIGFyZQogICAgICogbWF0Y2hlZCBieSB0aGVpciBub3JtYWxpemVkIGJpbmFyeSBhZGRyZXNzLgogICAgICoKICAgICAqIEFyZWFzIGFyZSBtYXRjaGVkIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CiAgICAgKiAxLiAiKiIgKHdpdGhvdXQgcXVvdGVzKSBhbHdheXMgbWF0Y2hlcyBhbnkgaG9zdHMuCiAgICAgKiAyLiBBbiBleGFjdCBkb21haW4gb3IgSVAgbGl0ZXJhbCBtYXRjaC4KICAgICAqIDMuIEEgYmFyZSBkb21haW4gbWF0Y2hlcyBpdHNlbGYgYW5kIGl0cyBzdWJkb21haW5zLiBlLmcuICdtaXQuZWR1JyB3aWxsCiAgICAgKiAgICBtYXRjaCAnbWl0LmVkdScgYW5kICdmb28ubWl0LmVkdScuCiAgICAgKiA0LiBUaGUgYXJlYSBzdGFydHMgd2l0aCAiLiIgYW5kIHRoZSBhcmVhIGlzIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGhvc3QuIGUuZy4KICAgICAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogICAgICogNS4gSVAgQ0lEUiBlbnRyaWVzIG1hdGNoIElQIGxpdGVyYWwgaG9zdHMuIGUuZy4gJzE5Mi4xNjguMC4wLzE2JyB3aWxsCiAgICAgKiAgICBtYXRjaCAnMTkyLjE2OC4xLjEwJyBhbmQgJ2ZkMDA6Oi84JyB3aWxsIG1hdGNoICdbZmQwMDo6MV0nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkaG9zdCAgICAgICAgIEhvc3QgdG8gY2hlY2sgYWdhaW5zdCB0aGUgcGF0dGVybnMuCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJG5vUHJveHlBcnJheSBBbiBhcnJheSBvZiBob3N0IG9yIENJRFIgcGF0dGVybnMuCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0hvc3RJbk5vUHJveHkoc3RyaW5nICRob3N0LCBhcnJheSAkbm9Qcm94eUFycmF5KTogYm9vbAogICAgewogICAgICAgIGlmIChcc3RybGVuKCRob3N0KSA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFbXB0eSBob3N0IHByb3ZpZGVkJyk7CiAgICAgICAgfQoKICAgICAgICAkdGFyZ2V0ID0gc2VsZjo6cGFyc2VOb1Byb3h5SG9zdFN0cmluZygkaG9zdCk7CiAgICAgICAgaWYgKCR0YXJnZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6Om1hdGNoZXNOb1Byb3h5TGlzdCgkdGFyZ2V0LCAkbm9Qcm94eUFycmF5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgVVJJIG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICAgICAqCiAgICAgKiBNYXRjaGluZyBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIGlzSG9zdEluTm9Qcm94eSgpLCB3aXRoIHRoZQogICAgICogYWRkaXRpb24gdGhhdCBhcmVhcyBtYXkgY2FycnkgYSBwb3J0IChlLmcuICJleGFtcGxlLmNvbTo4MDgwIiBvcgogICAgICogIls6OjFdOjgwODAiKSB3aGljaCBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBVUkkgcG9ydCAob3IgdGhlIHNjaGVtZQogICAgICogZGVmYXVsdCBwb3J0IHdoZW4gdGhlIFVSSSBoYXMgbm9uZSkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRub1Byb3h5IE5vLXByb3h5IGhvc3QsIGhvc3QtYW5kLXBvcnQsIG9yIENJRFIgcGF0dGVybnMuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNVcmlJbk5vUHJveHkoVXJpSW50ZXJmYWNlICR1cmksICRub1Byb3h5KTogYm9vbAogICAgewogICAgICAgIGlmIChcaXNfc3RyaW5nKCRub1Byb3h5KSkgewogICAgICAgICAgICAkbm9Qcm94eSA9IFxleHBsb2RlKCcsJywgJG5vUHJveHkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJG5vUHJveHkpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0YXJnZXQgPSBzZWxmOjpwYXJzZU5vUHJveHlUYXJnZXQoJHVyaSk7CiAgICAgICAgaWYgKCR0YXJnZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6Om1hdGNoZXNOb1Byb3h5TGlzdCgkdGFyZ2V0LCAkbm9Qcm94eSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXl7dHlwZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBwb3J0OiBpbnR8bnVsbCwgbWF0Y2hlc1Jvb3Q6IGJvb2x9ICR0YXJnZXQKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIG1peGVkPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vUHJveHkKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbWF0Y2hlc05vUHJveHlMaXN0KGFycmF5ICR0YXJnZXQsIGFycmF5ICRub1Byb3h5KTogYm9vbAogICAgewogICAgICAgIGZvcmVhY2ggKCRub1Byb3h5IGFzICRhcmVhKSB7CiAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkYXJlYSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYXJlYSA9IFx0cmltKCRhcmVhKTsKCiAgICAgICAgICAgIC8vIEFsd2F5cyBtYXRjaCBvbiB3aWxkY2FyZHMuCiAgICAgICAgICAgIGlmICgkYXJlYSA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJ1bGUgPSBzZWxmOjpwYXJzZU5vUHJveHlSdWxlKCRhcmVhKTsKICAgICAgICAgICAgaWYgKCRydWxlICE9PSBudWxsICYmIHNlbGY6Om5vUHJveHlSdWxlTWF0Y2hlcygkdGFyZ2V0LCAkcnVsZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3R5cGU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcG9ydDogaW50fG51bGwsIG1hdGNoZXNSb290OiBib29sfXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlTm9Qcm94eVRhcmdldChVcmlJbnRlcmZhY2UgJHVyaSk6ID9hcnJheQogICAgewogICAgICAgICRob3N0ID0gJHVyaS0+Z2V0SG9zdCgpOwogICAgICAgIGlmICgkaG9zdCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6cGFyc2VOb1Byb3h5SG9zdCgkaG9zdCwgJHVyaS0+Z2V0UG9ydCgpID8/IHNlbGY6OmdldERlZmF1bHRQb3J0KCR1cmktPmdldFNjaGVtZSgpKSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3R5cGU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcG9ydDogaW50fG51bGwsIG1hdGNoZXNSb290OiBib29sfXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlTm9Qcm94eUhvc3RTdHJpbmcoc3RyaW5nICRob3N0KTogP2FycmF5CiAgICB7CiAgICAgICAgJGhvc3RBbmRQb3J0ID0gc2VsZjo6c3BsaXROb1Byb3h5SG9zdEFuZFBvcnQoJGhvc3QpOwogICAgICAgIGlmICgkaG9zdEFuZFBvcnQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBbJGhvc3RdID0gJGhvc3RBbmRQb3J0OwoKICAgICAgICByZXR1cm4gc2VsZjo6cGFyc2VOb1Byb3h5SG9zdCgkaG9zdCwgbnVsbCwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3R5cGU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcG9ydDogaW50fG51bGwsIG1hdGNoZXNSb290OiBib29sfXxhcnJheXt0eXBlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHByZWZpeDogaW50fXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlTm9Qcm94eVJ1bGUoc3RyaW5nICRhcmVhKTogP2FycmF5CiAgICB7CiAgICAgICAgJGFyZWEgPSBcdHJpbSgkYXJlYSk7CiAgICAgICAgaWYgKCRhcmVhID09PSAnJyB8fCAkYXJlYSA9PT0gJyonKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxzdHJwb3MoJGFyZWEsICcvJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpwYXJzZU5vUHJveHlDaWRyUnVsZSgkYXJlYSk7CiAgICAgICAgfQoKICAgICAgICAkbWF0Y2hlc1Jvb3QgPSB0cnVlOwogICAgICAgIGlmICgkYXJlYVswXSA9PT0gJy4nKSB7CiAgICAgICAgICAgICRtYXRjaGVzUm9vdCA9IGZhbHNlOwogICAgICAgICAgICAkYXJlYSA9IFxzdWJzdHIoJGFyZWEsIDEpOwogICAgICAgIH0KCiAgICAgICAgJGhvc3RBbmRQb3J0ID0gc2VsZjo6c3BsaXROb1Byb3h5SG9zdEFuZFBvcnQoJGFyZWEpOwogICAgICAgIGlmICgkaG9zdEFuZFBvcnQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBbJGhvc3QsICRwb3J0XSA9ICRob3N0QW5kUG9ydDsKCiAgICAgICAgaWYgKCRob3N0ID09PSAnKicpIHsKICAgICAgICAgICAgaWYgKCEkbWF0Y2hlc1Jvb3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICd3aWxkY2FyZCcsCiAgICAgICAgICAgICAgICAndmFsdWUnID0+ICcqJywKICAgICAgICAgICAgICAgICdwb3J0JyA9PiAkcG9ydCwKICAgICAgICAgICAgICAgICdtYXRjaGVzUm9vdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICRydWxlID0gc2VsZjo6cGFyc2VOb1Byb3h5SG9zdCgkaG9zdCwgJHBvcnQsICRtYXRjaGVzUm9vdCk7CiAgICAgICAgaWYgKCRydWxlICE9PSBudWxsICYmICEkbWF0Y2hlc1Jvb3QgJiYgJHJ1bGVbJ3R5cGUnXSA9PT0gJ2lwJykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcnVsZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7dHlwZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBwb3J0OiBpbnR8bnVsbCwgbWF0Y2hlc1Jvb3Q6IGJvb2x9fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcGFyc2VOb1Byb3h5SG9zdChzdHJpbmcgJGhvc3QsID9pbnQgJHBvcnQsIGJvb2wgJG1hdGNoZXNSb290KTogP2FycmF5CiAgICB7CiAgICAgICAgaWYgKCRob3N0ICE9PSAnJyAmJiAkaG9zdFswXSA9PT0gJ1snKSB7CiAgICAgICAgICAgIGlmIChcc3Vic3RyKCRob3N0LCAtMSkgIT09ICddJykgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhZGRyZXNzID0gXHN1YnN0cigkaG9zdCwgMSwgLTEpOwogICAgICAgICAgICBpZiAoIVxmaWx0ZXJfdmFyKCRhZGRyZXNzLCBcRklMVEVSX1ZBTElEQVRFX0lQLCBcRklMVEVSX0ZMQUdfSVBWNikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaG9zdCA9ICRhZGRyZXNzOwogICAgICAgIH0KCiAgICAgICAgJHBhY2tlZElwID0gc2VsZjo6cGFja0lwQWRkcmVzcygkaG9zdCk7CiAgICAgICAgaWYgKCRwYWNrZWRJcCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnaXAnLAogICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkcGFja2VkSXAsCiAgICAgICAgICAgICAgICAncG9ydCcgPT4gJHBvcnQsCiAgICAgICAgICAgICAgICAnbWF0Y2hlc1Jvb3QnID0+ICRtYXRjaGVzUm9vdCwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIGlmICgkaG9zdCA9PT0gJycgfHwgXHN0cnBvcygkaG9zdCwgJzonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBOb3JtYWxpemUgYSBzaW5nbGUgRE5TIHJvb3QgZG90IGZvciBuby1wcm94eSBkb21haW4gbWF0Y2hpbmcuCiAgICAgICAgaWYgKFxzdWJzdHIoJGhvc3QsIC0xKSA9PT0gJy4nKSB7CiAgICAgICAgICAgICRob3N0ID0gXHN1YnN0cigkaG9zdCwgMCwgLTEpOwogICAgICAgICAgICBpZiAoJGhvc3QgPT09ICcnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICdkb21haW4nLAogICAgICAgICAgICAndmFsdWUnID0+IFxzdHJ0b2xvd2VyKCRob3N0KSwKICAgICAgICAgICAgJ3BvcnQnID0+ICRwb3J0LAogICAgICAgICAgICAnbWF0Y2hlc1Jvb3QnID0+ICRtYXRjaGVzUm9vdCwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXswOiBzdHJpbmcsIDE6IGludHxudWxsfXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHNwbGl0Tm9Qcm94eUhvc3RBbmRQb3J0KHN0cmluZyAkYXJlYSk6ID9hcnJheQogICAgewogICAgICAgIGlmICgkYXJlYSAhPT0gJycgJiYgJGFyZWFbMF0gPT09ICdbJykgewogICAgICAgICAgICAkY2xvc2luZ0JyYWNrZXQgPSBcc3RycG9zKCRhcmVhLCAnXScpOwogICAgICAgICAgICBpZiAoJGNsb3NpbmdCcmFja2V0ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRob3N0ID0gXHN1YnN0cigkYXJlYSwgMCwgJGNsb3NpbmdCcmFja2V0ICsgMSk7CiAgICAgICAgICAgICR0YWlsID0gXHN1YnN0cigkYXJlYSwgJGNsb3NpbmdCcmFja2V0ICsgMSk7CiAgICAgICAgICAgIGlmICgkdGFpbCA9PT0gJycpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbJGhvc3QsIG51bGxdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRhaWxbMF0gIT09ICc6JykgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRwb3J0ID0gc2VsZjo6cGFyc2VOb1Byb3h5UG9ydChcc3Vic3RyKCR0YWlsLCAxKSk7CgogICAgICAgICAgICByZXR1cm4gJHBvcnQgPT09IG51bGwgPyBudWxsIDogWyRob3N0LCAkcG9ydF07CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6cGFja0lwQWRkcmVzcygkYXJlYSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBbJGFyZWEsIG51bGxdOwogICAgICAgIH0KCiAgICAgICAgJGNvbG9uID0gXHN0cnJwb3MoJGFyZWEsICc6Jyk7CiAgICAgICAgaWYgKCRjb2xvbiA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIFskYXJlYSwgbnVsbF07CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9IHNlbGY6OnBhcnNlTm9Qcm94eVBvcnQoXHN1YnN0cigkYXJlYSwgJGNvbG9uICsgMSkpOwogICAgICAgIGlmICgkcG9ydCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbXHN1YnN0cigkYXJlYSwgMCwgJGNvbG9uKSwgJHBvcnRdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlTm9Qcm94eVBvcnQoc3RyaW5nICRwb3J0KTogP2ludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpwYXJzZUJvdW5kZWRVbnNpZ25lZEludGVnZXIoJHBvcnQsIDY1NTM1KTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7dHlwZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IGludH18bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwYXJzZU5vUHJveHlDaWRyUnVsZShzdHJpbmcgJGFyZWEpOiA/YXJyYXkKICAgIHsKICAgICAgICAkc2xhc2ggPSBcc3RycG9zKCRhcmVhLCAnLycpOwogICAgICAgIGlmICgkc2xhc2ggPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHByZWZpeCA9IFxzdWJzdHIoJGFyZWEsICRzbGFzaCArIDEpOwoKICAgICAgICAkbmV0d29yayA9IFxzdWJzdHIoJGFyZWEsIDAsICRzbGFzaCk7CiAgICAgICAgaWYgKCRuZXR3b3JrICE9PSAnJyAmJiAkbmV0d29ya1swXSA9PT0gJ1snICYmIFxzdWJzdHIoJG5ldHdvcmssIC0xKSA9PT0gJ10nKSB7CiAgICAgICAgICAgICRuZXR3b3JrID0gXHN1YnN0cigkbmV0d29yaywgMSwgLTEpOwogICAgICAgIH0KCiAgICAgICAgJG5ldHdvcmsgPSBzZWxmOjpwYWNrSXBBZGRyZXNzKCRuZXR3b3JrKTsKICAgICAgICBpZiAoJG5ldHdvcmsgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHByZWZpeCA9IHNlbGY6OnBhcnNlQm91bmRlZFVuc2lnbmVkSW50ZWdlcigkcHJlZml4LCBcc3RybGVuKCRuZXR3b3JrKSAqIDgpOwogICAgICAgIGlmICgkcHJlZml4ID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICdjaWRyJywKICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkbmV0d29yaywKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJHByZWZpeCwKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlQm91bmRlZFVuc2lnbmVkSW50ZWdlcihzdHJpbmcgJHZhbHVlLCBpbnQgJG1heCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSAnJyB8fCAhXGN0eXBlX2RpZ2l0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkbm9ybWFsaXplZCA9IFxsdHJpbSgkdmFsdWUsICcwJyk7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSAkbm9ybWFsaXplZCA9PT0gJycgPyAnMCcgOiAkbm9ybWFsaXplZDsKICAgICAgICAkbGltaXQgPSAoc3RyaW5nKSAkbWF4OwoKICAgICAgICBpZiAoXHN0cmxlbigkbm9ybWFsaXplZCkgPiBcc3RybGVuKCRsaW1pdCkgfHwgKFxzdHJsZW4oJG5vcm1hbGl6ZWQpID09PSBcc3RybGVuKCRsaW1pdCkgJiYgXHN0cmNtcCgkbm9ybWFsaXplZCwgJGxpbWl0KSA+IDApKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChpbnQpICRub3JtYWxpemVkOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5e3R5cGU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgcG9ydDogaW50fG51bGwsIG1hdGNoZXNSb290OiBib29sfSAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0CiAgICAgKiBAcGFyYW0gYXJyYXl7dHlwZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBwb3J0PzogaW50fG51bGwsIG1hdGNoZXNSb290PzogYm9vbCwgcHJlZml4PzogaW50fG51bGx9ICRydWxlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vUHJveHlSdWxlTWF0Y2hlcyhhcnJheSAkdGFyZ2V0LCBhcnJheSAkcnVsZSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHJ1bGVbJ3R5cGUnXSA9PT0gJ3dpbGRjYXJkJykgewogICAgICAgICAgICByZXR1cm4gKCRydWxlWydwb3J0J10gPz8gbnVsbCkgPT09IG51bGwgfHwgJHJ1bGVbJ3BvcnQnXSA9PT0gJHRhcmdldFsncG9ydCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRydWxlWyd0eXBlJ10gPT09ICdjaWRyJykgewogICAgICAgICAgICBpZiAoJHRhcmdldFsndHlwZSddICE9PSAnaXAnIHx8ICFpc3NldCgkcnVsZVsncHJlZml4J10pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChcc3RybGVuKCR0YXJnZXRbJ3ZhbHVlJ10pICE9PSBcc3RybGVuKCRydWxlWyd2YWx1ZSddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc2VsZjo6aXBNYXRjaGVzUHJlZml4KCR0YXJnZXRbJ3ZhbHVlJ10sICRydWxlWyd2YWx1ZSddLCAkcnVsZVsncHJlZml4J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgkcnVsZVsncG9ydCddID8/IG51bGwpICE9PSBudWxsICYmICRydWxlWydwb3J0J10gIT09ICR0YXJnZXRbJ3BvcnQnXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJ1bGVbJ3R5cGUnXSAhPT0gJHRhcmdldFsndHlwZSddKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmICgkcnVsZVsndHlwZSddID09PSAnaXAnKSB7CiAgICAgICAgICAgIHJldHVybiAkcnVsZVsndmFsdWUnXSA9PT0gJHRhcmdldFsndmFsdWUnXTsKICAgICAgICB9CgogICAgICAgIGlmICgoJHJ1bGVbJ21hdGNoZXNSb290J10gPz8gZmFsc2UpICYmICR0YXJnZXRbJ3ZhbHVlJ10gPT09ICRydWxlWyd2YWx1ZSddKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgJHN1ZmZpeCA9ICcuJy4kcnVsZVsndmFsdWUnXTsKCiAgICAgICAgcmV0dXJuIFxzdWJzdHIoJHRhcmdldFsndmFsdWUnXSwgLVxzdHJsZW4oJHN1ZmZpeCkpID09PSAkc3VmZml4OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcGFja0lwQWRkcmVzcyhzdHJpbmcgJGlwKQogICAgewogICAgICAgIGlmICghXGZpbHRlcl92YXIoJGlwLCBcRklMVEVSX1ZBTElEQVRFX0lQKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGluZXRfcHRvbigkaXApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGlwTWF0Y2hlc1ByZWZpeChzdHJpbmcgJGFkZHJlc3MsIHN0cmluZyAkbmV0d29yaywgaW50ICRwcmVmaXgpOiBib29sCiAgICB7CiAgICAgICAgJGZ1bGxCeXRlcyA9IFxpbnRkaXYoJHByZWZpeCwgOCk7CiAgICAgICAgJHJlbWFpbmluZ0JpdHMgPSAkcHJlZml4ICUgODsKCiAgICAgICAgaWYgKCRmdWxsQnl0ZXMgPiAwICYmIFxzdWJzdHIoJGFkZHJlc3MsIDAsICRmdWxsQnl0ZXMpICE9PSBcc3Vic3RyKCRuZXR3b3JrLCAwLCAkZnVsbEJ5dGVzKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlbWFpbmluZ0JpdHMgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkbWFzayA9ICgweEZGIDw8ICg4IC0gJHJlbWFpbmluZ0JpdHMpKSAmIDB4RkY7CgogICAgICAgIHJldHVybiAoXG9yZCgkYWRkcmVzc1skZnVsbEJ5dGVzXSkgJiAkbWFzaykgPT09IChcb3JkKCRuZXR3b3JrWyRmdWxsQnl0ZXNdKSAmICRtYXNrKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXREZWZhdWx0UG9ydChzdHJpbmcgJHNjaGVtZSk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHNjaGVtZSA9PT0gJ2h0dHAnKSB7CiAgICAgICAgICAgIHJldHVybiA4MDsKICAgICAgICB9CgogICAgICAgIGlmICgkc2NoZW1lID09PSAnaHR0cHMnKSB7CiAgICAgICAgICAgIHJldHVybiA0NDM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFdyYXBwZXIgZm9yIGpzb25fZGVjb2RlIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGpzb24gICAgSlNPTiBkYXRhIHRvIHBhcnNlCiAgICAgKiBAcGFyYW0gYm9vbCAgICRhc3NvYyAgIFdoZW4gdHJ1ZSwgcmV0dXJuZWQgb2JqZWN0cyB3aWxsIGJlIGNvbnZlcnRlZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFzc29jaWF0aXZlIGFycmF5cy4KICAgICAqIEBwYXJhbSBpbnQgICAgJGRlcHRoICAgVXNlciBzcGVjaWZpZWQgcmVjdXJzaW9uIGRlcHRoLgogICAgICogQHBhcmFtIGludCAgICAkb3B0aW9ucyBCaXRtYXNrIG9mIEpTT04gZGVjb2RlIG9wdGlvbnMuCiAgICAgKgogICAgICogQHJldHVybiBvYmplY3R8YXJyYXl8c3RyaW5nfGludHxmbG9hdHxib29sfG51bGwKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZGVjb2RlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZGVjb2RlLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGpzb25EZWNvZGUoc3RyaW5nICRqc29uLCBib29sICRhc3NvYyA9IGZhbHNlLCBpbnQgJGRlcHRoID0gNTEyLCBpbnQgJG9wdGlvbnMgPSAwKQogICAgewogICAgICAgIGlmICgkZGVwdGggPCAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2pzb25fZGVjb2RlIGVycm9yOiBNYXhpbXVtIHN0YWNrIGRlcHRoIGV4Y2VlZGVkJyk7CiAgICAgICAgfQoKICAgICAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkanNvbiwgJGFzc29jLCAkZGVwdGgsICRvcHRpb25zKTsKICAgICAgICBpZiAoXEpTT05fRVJST1JfTk9ORSAhPT0gXGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2pzb25fZGVjb2RlIGVycm9yOiAnLlxqc29uX2xhc3RfZXJyb3JfbXNnKCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcHBlciBmb3IgSlNPTiBlbmNvZGluZyB0aGF0IHRocm93cyB3aGVuIGFuIGVycm9yIG9jY3Vycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVGhlIHZhbHVlIGJlaW5nIGVuY29kZWQKICAgICAqIEBwYXJhbSBpbnQgICAkb3B0aW9ucyBKU09OIGVuY29kZSBvcHRpb24gYml0bWFzawogICAgICogQHBhcmFtIGludCAgICRkZXB0aCAgIFNldCB0aGUgbWF4aW11bSBkZXB0aC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZW5jb2RlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZW5jb2RlLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGpzb25FbmNvZGUoJHZhbHVlLCBpbnQgJG9wdGlvbnMgPSAwLCBpbnQgJGRlcHRoID0gNTEyKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGpzb24gPSBcanNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucywgJGRlcHRoKTsKICAgICAgICBpZiAoXEpTT05fRVJST1JfTk9ORSAhPT0gXGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2pzb25fZW5jb2RlIGVycm9yOiAnLlxqc29uX2xhc3RfZXJyb3JfbXNnKCkpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICAgICAgcmV0dXJuICRqc29uOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcHBlciBmb3IgdGhlIGhydGltZSgpIG9yIG1pY3JvdGltZSgpIGZ1bmN0aW9ucwogICAgICogKGRlcGVuZGluZyBvbiB0aGUgUEhQIHZlcnNpb24sIG9uZSBvZiB0aGUgdHdvIGlzIHVzZWQpCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBVTklYIHRpbWVzdGFtcAogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbnRUaW1lKCk6IGZsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuIChmbG9hdCkgXGZ1bmN0aW9uX2V4aXN0cygnaHJ0aW1lJykgPyBcaHJ0aW1lKHRydWUpIC8gMWU5IDogXG1pY3JvdGltZSh0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVJZG5Db252ZXJzaW9uT3B0aW9uKCR2YWx1ZSk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSBudWxsIHx8ICR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHZhbHVlID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiBcSUROQV9ERUZBVUxUOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKChcaXNfc3RyaW5nKCR2YWx1ZSkgJiYgXGlzX251bWVyaWMoJHZhbHVlKSkgfHwgKFxpc19mbG9hdCgkdmFsdWUpICYmIFxpc19maW5pdGUoJHZhbHVlKSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9ndXp6bGUnLAogICAgICAgICAgICAgICAgJzcuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgYXMgdGhlICJpZG5fY29udmVyc2lvbiIgcmVxdWVzdCBvcHRpb24gaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9ndXp6bGUgOC4wIHdpbGwgcmVqZWN0IHZhbHVlcyB0aGF0IGFyZSBub3QgdHJ1ZSwgZmFsc2UsIG51bGwsIG9yIGFuIGludGVnZXIgSUROQV8qIGJpdG1hc2suJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkdmFsdWUpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gKGludCkgJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaWRuX2NvbnZlcnNpb24gbXVzdCBiZSB0cnVlLCBmYWxzZSwgbnVsbCwgb3IgYW4gaW50ZWdlciBJRE5BXyogYml0bWFzaycpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZG5VcmlDb252ZXJ0KFVyaUludGVyZmFjZSAkdXJpLCBpbnQgJG9wdGlvbnMgPSAwKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR1cmktPmdldEhvc3QoKSkgewogICAgICAgICAgICAkYXNjaWlIb3N0ID0gc2VsZjo6aWRuVG9Bc2NpKCR1cmktPmdldEhvc3QoKSwgJG9wdGlvbnMsICRpbmZvKTsKICAgICAgICAgICAgaWYgKCRhc2NpaUhvc3QgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JCaXRTZXQgPSAkaW5mb1snZXJyb3JzJ10gPz8gMDsKCiAgICAgICAgICAgICAgICAkZXJyb3JDb25zdGFudHMgPSBhcnJheV9maWx0ZXIoYXJyYXlfa2V5cyhnZXRfZGVmaW5lZF9jb25zdGFudHMoKSksIHN0YXRpYyBmdW5jdGlvbiAoc3RyaW5nICRuYW1lKTogYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnN0cigkbmFtZSwgMCwgMTEpID09PSAnSUROQV9FUlJPUl8nOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgJGVycm9ycyA9IFtdOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGVycm9yQ29uc3RhbnRzIGFzICRlcnJvckNvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRlcnJvckJpdFNldCAmIGNvbnN0YW50KCRlcnJvckNvbnN0YW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAkZXJyb3JDb25zdGFudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGVycm9yTWVzc2FnZSA9ICdJRE4gY29udmVyc2lvbiBmYWlsZWQnOwogICAgICAgICAgICAgICAgaWYgKCRlcnJvcnMpIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3JNZXNzYWdlIC49ICcgKGVycm9yczogJy5pbXBsb2RlKCcsICcsICRlcnJvcnMpLicpJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCRlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkdXJpLT5nZXRIb3N0KCkgIT09ICRhc2NpaUhvc3QpIHsKICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgVVJJIG9ubHkgaWYgdGhlIEFTQ0lJIHZlcnNpb24gaXMgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJGFzY2lpSG9zdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0ZW52KHN0cmluZyAkbmFtZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJG5hbWVdKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJF9TRVJWRVJbJG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgaWYgKFxQSFBfU0FQSSA9PT0gJ2NsaScgJiYgKCR2YWx1ZSA9IFxnZXRlbnYoJG5hbWUpKSAhPT0gZmFsc2UgJiYgJHZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGlkblRvQXNjaShzdHJpbmcgJGRvbWFpbiwgaW50ICRvcHRpb25zLCA/YXJyYXkgJiRpbmZvID0gW10pCiAgICB7CiAgICAgICAgaWYgKFxmdW5jdGlvbl9leGlzdHMoJ2lkbl90b19hc2NpaScpICYmIFxkZWZpbmVkKCdJTlRMX0lETkFfVkFSSUFOVF9VVFM0NicpKSB7CiAgICAgICAgICAgIHJldHVybiBcaWRuX3RvX2FzY2lpKCRkb21haW4sICRvcHRpb25zLCBcSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYsICRpbmZvKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcRXJyb3IoJ2V4dC1pZG4gb3Igc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWlkbiBub3QgbG9hZGVkIG9yIHRvbyBvbGQnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/UPGRADING.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlIFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT0KCjYuMCB0byA3LjAKLS0tLS0tLS0tLQoKSW4gb3JkZXIgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiBQSFAsIEd1enpsZSBkcm9wcGVkIHRoZSBzdXBwb3J0Cm9mIFBIUCA1LiBUaGUgbWluaW11bSBzdXBwb3J0ZWQgUEhQIHZlcnNpb24gaXMgbm93IFBIUCA3LjIuIFR5cGUgaGludHMgYW5kIHJldHVybgp0eXBlcyBmb3IgZnVuY3Rpb25zIGFuZCBtZXRob2RzIGhhdmUgYmVlbiBhZGRlZCB3aGVyZXZlciBwb3NzaWJsZS4gCgpQbGVhc2UgbWFrZSBzdXJlOgotIFlvdSBhcmUgY2FsbGluZyBhIGZ1bmN0aW9uIG9yIGEgbWV0aG9kIHdpdGggdGhlIGNvcnJlY3QgdHlwZS4KLSBJZiB5b3UgZXh0ZW5kIGEgY2xhc3Mgb2YgR3V6emxlOyB1cGRhdGUgYWxsIHNpZ25hdHVyZXMgb24gbWV0aG9kcyB5b3Ugb3ZlcnJpZGUuCgojIyMjIE90aGVyIEJhY2t3YXJkcyBDb21wYXRpYmlsaXR5IEJyZWFraW5nIENoYW5nZXMKCi0gQ2xhc3MgYEd1enpsZUh0dHBcVXJpVGVtcGxhdGVgIGlzIHJlbW92ZWQuCi0gQ2xhc3MgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFNlZWtFeGNlcHRpb25gIGlzIHJlbW92ZWQuCi0gQ2xhc3NlcyBgR3V6emxlSHR0cFxFeGNlcHRpb25cQmFkUmVzcG9uc2VFeGNlcHRpb25gLCBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ2xpZW50RXhjZXB0aW9uYCwgCiAgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFNlcnZlckV4Y2VwdGlvbmAgY2FuIG5vIGxvbmdlciBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5CiAgUmVzcG9uc2UgYXMgYXJndW1lbnQuCi0gQ2xhc3MgYEd1enpsZUh0dHBcRXhjZXB0aW9uXENvbm5lY3RFeGNlcHRpb25gIG5vdyBleHRlbmRzIGBHdXp6bGVIdHRwXEV4Y2VwdGlvblxUcmFuc2ZlckV4Y2VwdGlvbmAKICBpbnN0ZWFkIG9mIGBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uYC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2UoKWAgaXMgcmVtb3ZlZC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjo6aGFzUmVzcG9uc2UoKWAgaXMgcmVtb3ZlZC4KLSBDb25zdGFudCBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OlZFUlNJT05gIGlzIHJlbW92ZWQuIEFkZGVkIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6TUFKT1JfVkVSU0lPTmAgaW5zdGVhZC4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjo6Z2V0UmVzcG9uc2VCb2R5U3VtbWFyeWAgaXMgcmVtb3ZlZC4KICBVc2UgYFxHdXp6bGVIdHRwXFBzcjdcZ2V0X21lc3NhZ2VfYm9keV9zdW1tYXJ5YCBhcyBhbiBhbHRlcm5hdGl2ZS4KLSBGdW5jdGlvbiBgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFyOjpnZXRDb29raWVWYWx1ZWAgaXMgcmVtb3ZlZC4KLSBSZXF1ZXN0IG9wdGlvbiBgZXhjZXB0aW9uc2AgaXMgcmVtb3ZlZC4gUGxlYXNlIHVzZSBgaHR0cF9lcnJvcnNgLgotIFJlcXVlc3Qgb3B0aW9uIGBzYXZlX3RvYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBzaW5rYC4KLSBQb29sIG9wdGlvbiBgcG9vbF9zaXplYCBpcyByZW1vdmVkLiBQbGVhc2UgdXNlIGBjb25jdXJyZW5jeWAuCi0gV2Ugbm93IGxvb2sgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgYCRfU0VSVkVSYCBzdXBlciBnbG9iYWwsIGR1ZSB0byB0aHJlYWQgc2FmZXR5IGlzc3VlcyB3aXRoIGBnZXRlbnZgLiBXZSBjb250aW51ZSB0byBmYWxsYmFjayB0byBgZ2V0ZW52YCBpbiBDTEkgZW52aXJvbm1lbnRzLCBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5LgotIFRoZSBgZ2V0YCwgYGhlYWRgLCBgcHV0YCwgYHBvc3RgLCBgcGF0Y2hgLCBgZGVsZXRlYCwgYGdldEFzeW5jYCwgYGhlYWRBc3luY2AsIGBwdXRBc3luY2AsIGBwb3N0QXN5bmNgLCBgcGF0Y2hBc3luY2AsIGFuZCBgZGVsZXRlQXN5bmNgIG1ldGhvZHMgYXJlIG5vdyBpbXBsZW1lbnRlZCBhcyBnZW51aW5lIG1ldGhvZHMgb24gYEd1enpsZUh0dHBcQ2xpZW50YCwgd2l0aCBzdHJvbmcgdHlwaW5nLiBUaGUgb3JpZ2luYWwgYF9fY2FsbGAgaW1wbGVtZW50YXRpb24gcmVtYWlucyB1bmNoYW5nZWQgZm9yIG5vdywgZm9yIG1heGltdW0gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCB3b24ndCBiZSBpbnZva2VkIHVuZGVyIG5vcm1hbCBvcGVyYXRpb24uCi0gVGhlIGBsb2dgIG1pZGRsZXdhcmUgd2lsbCBsb2cgdGhlIGVycm9ycyB3aXRoIGxldmVsIGBlcnJvcmAgaW5zdGVhZCBvZiBgbm90aWNlYCAKLSBTdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyAoSUROKSBpcyBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGVuYWJsaW5nIGl0IHJlcXVpcmVzIGluc3RhbGxpbmcgZXh0LWludGwsIGxpbmtlZCBhZ2FpbnN0IGEgbW9kZXJuIHZlcnNpb24gb2YgdGhlIEMgbGlicmFyeSAoSUNVIDQuNiBvciBoaWdoZXIpLgoKIyMjIyBOYXRpdmUgRnVuY3Rpb25zIENhbGxzCgpBbGwgaW50ZXJuYWwgbmF0aXZlIGZ1bmN0aW9ucyBjYWxscyBvZiBHdXp6bGUgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGEgc2xhc2guIFRoaXMKY2hhbmdlIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIG1ldGhvZCBvdmVybG9hZGluZyBieSBvdGhlciBsaWJyYXJpZXMgb3IgYXBwbGljYXRpb25zLgpFeGFtcGxlOgoKYGBgcGhwCi8vIEJlZm9yZToKY3VybF92ZXJzaW9uKCk7CgovLyBBZnRlcjoKXGN1cmxfdmVyc2lvbigpOwpgYGAKCkZvciB0aGUgZnVsbCBkaWZmIHlvdSBjYW4gY2hlY2sgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2NvbXBhcmUvNi41LjQuLjcuMC4wKS4KCjUuMCB0byA2LjAKLS0tLS0tLS0tLQoKR3V6emxlIG5vdyB1c2VzIFtQU1ItN10oaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykgZm9yIEhUVFAgbWVzc2FnZXMuCkR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXNlIG1lc3NhZ2VzIGFyZSBpbW11dGFibGUsIHRoaXMgcHJvbXB0ZWQgYSByZWZhY3RvcmluZwpvZiBHdXp6bGUgdG8gdXNlIGEgbWlkZGxld2FyZSBiYXNlZCBzeXN0ZW0gcmF0aGVyIHRoYW4gYW4gZXZlbnQgc3lzdGVtLiBBbnkKSFRUUCBtZXNzYWdlIGludGVyYWN0aW9uIChlLmcuLCBgR3V6emxlSHR0cFxNZXNzYWdlXFJlcXVlc3RgKSBuZWVkIHRvIGJlCnVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBuZXcgaW1tdXRhYmxlIFBTUi03IHJlcXVlc3QgYW5kIHJlc3BvbnNlIG9iamVjdHMuIEFueQpldmVudCBsaXN0ZW5lcnMgb3Igc3Vic2NyaWJlcnMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIGJlY29tZSBtaWRkbGV3YXJlCmZ1bmN0aW9ucyB0aGF0IHdyYXAgaGFuZGxlcnMgKG9yIGFyZSBpbmplY3RlZCBpbnRvIGEKYEd1enpsZUh0dHBcSGFuZGxlclN0YWNrYCkuCgotIFJlbW92ZWQgYEd1enpsZUh0dHBcQmF0Y2hSZXN1bHRzYAotIFJlbW92ZWQgYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAKLSBSZW1vdmVkIGBHdXp6bGVIdHRwXEhhc0RhdGFUcmFpdGAKLSBSZW1vdmVkIGBHdXp6bGVIdHRwXFRvQXJyYXlJbnRlcmZhY2VgCi0gVGhlIGBndXp6bGVodHRwL3N0cmVhbXNgIGRlcGVuZGVuY3kgaGFzIGJlZW4gcmVtb3ZlZC4gU3RyZWFtIGZ1bmN0aW9uYWxpdHkKICBpcyBub3cgcHJlc2VudCBpbiB0aGUgYEd1enpsZUh0dHBcUHNyN2AgbmFtZXNwYWNlIHByb3ZpZGVkIGJ5IHRoZQogIGBndXp6bGVodHRwL3BzcjdgIHBhY2thZ2UuCi0gR3V6emxlIG5vIGxvbmdlciB1c2VzIFJlYWN0UEhQIHByb21pc2VzIGFuZCBub3cgdXNlcyB0aGUKICBgZ3V6emxlaHR0cC9wcm9taXNlc2AgbGlicmFyeS4gV2UgdXNlIGEgY3VzdG9tIHByb21pc2UgbGlicmFyeSBmb3IgdGhyZWUKICBzaWduaWZpY2FudCByZWFzb25zOgogIDEuIFJlYWN0IHByb21pc2VzIChhdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMpIGFyZSByZWN1cnNpdmUuIFByb21pc2UKICAgICBjaGFpbmluZyBhbmQgcHJvbWlzZSByZXNvbHV0aW9uIHdpbGwgZXZlbnR1YWxseSBibG93IHRoZSBzdGFjay4gR3V6emxlCiAgICAgcHJvbWlzZXMgYXJlIG5vdCByZWN1cnNpdmUgYXMgdGhleSB1c2UgYSBzb3J0IG9mIHRyYW1wb2xpbmluZyB0ZWNobmlxdWUuCiAgICAgTm90ZTogdGhlcmUgaGFzIGJlZW4gbW92ZW1lbnQgaW4gdGhlIFJlYWN0IHByb2plY3QgdG8gbW9kaWZ5IHByb21pc2VzIHRvCiAgICAgbm8gbG9uZ2VyIHV0aWxpemUgcmVjdXJzaW9uLgogIDIuIEd1enpsZSBuZWVkcyB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9ub3VzbHkgYmxvY2sgb24gYSBwcm9taXNlIHRvCiAgICAgd2FpdCBmb3IgYSByZXN1bHQuIEd1enpsZSBwcm9taXNlcyBhbGxvd3MgdGhpcyBmdW5jdGlvbmFsaXR5IChhbmQgZG9lcwogICAgIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgcmVjdXJzaW9uKS4KICAzLiBCZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byB3YWl0IG9uIGEgcmVzdWx0LCBkb2luZyBzbyB1c2luZyBSZWFjdAogICAgIHByb21pc2VzIHJlcXVpcmVzIHdyYXBwaW5nIHJlYWN0IHByb21pc2VzIHdpdGggUmluZ1BIUCBmdXR1cmVzLiBUaGlzCiAgICAgb3ZlcmhlYWQgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgcmVkdWNpbmcgc3RhY2sgc2l6ZXMsIHJlZHVjaW5nIGNvbXBsZXhpdHksCiAgICAgYW5kIGltcHJvdmluZyBwZXJmb3JtYW5jZS4KLSBgR3V6emxlSHR0cFxNaW1ldHlwZXNgIGhhcyBiZWVuIG1vdmVkIHRvIGEgZnVuY3Rpb24gaW4KICBgR3V6emxlSHR0cFxQc3I3XG1pbWV0eXBlX2Zyb21fZXh0ZW5zaW9uYCBhbmQKICBgR3V6emxlSHR0cFxQc3I3XG1pbWV0eXBlX2Zyb21fZmlsZW5hbWVgLgotIGBHdXp6bGVIdHRwXFF1ZXJ5YCBhbmQgYEd1enpsZUh0dHBcUXVlcnlQYXJzZXJgIGhhdmUgYmVlbiByZW1vdmVkLiBRdWVyeQogIHN0cmluZ3MgbXVzdCBub3cgYmUgcGFzc2VkIGludG8gcmVxdWVzdCBvYmplY3RzIGFzIHN0cmluZ3MsIG9yIHByb3ZpZGVkIHRvCiAgdGhlIGBxdWVyeWAgcmVxdWVzdCBvcHRpb24gd2hlbiBjcmVhdGluZyByZXF1ZXN0cyB3aXRoIGNsaWVudHMuIFRoZSBgcXVlcnlgCiAgb3B0aW9uIHVzZXMgUEhQJ3MgYGh0dHBfYnVpbGRfcXVlcnlgIHRvIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBzdHJpbmcuIElmIHlvdQogIG5lZWQgYSBkaWZmZXJlbnQgc2VyaWFsaXphdGlvbiB0ZWNobmlxdWUsIHlvdSB3aWxsIG5lZWQgdG8gcGFzcyB0aGUgcXVlcnkKICBzdHJpbmcgaW4gYXMgYSBzdHJpbmcuIFRoZXJlIGFyZSBhIGNvdXBsZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgd2lsbCBtYWtlCiAgd29ya2luZyB3aXRoIHF1ZXJ5IHN0cmluZ3MgZWFzaWVyOiBgR3V6emxlSHR0cFxQc3I3XHBhcnNlX3F1ZXJ5YCBhbmQKICBgR3V6emxlSHR0cFxQc3I3XGJ1aWxkX3F1ZXJ5YC4KLSBHdXp6bGUgbm8gbG9uZ2VyIGhhcyBhIGRlcGVuZGVuY3kgb24gUmluZ1BIUC4gRHVlIHRvIHRoZSB1c2Ugb2YgYSBtaWRkbGV3YXJlCiAgc3lzdGVtIGJhc2VkIG9uIFBTUi03LCB1c2luZyBSaW5nUEhQIGFuZCBpdCdzIG1pZGRsZXdhcmUgc3lzdGVtIGFzIHdlbGwgYWRkcwogIG1vcmUgY29tcGxleGl0eSB0aGFuIHRoZSBiZW5lZml0cyBpdCBwcm92aWRlcy4gQWxsIEhUVFAgaGFuZGxlcnMgdGhhdCB3ZXJlCiAgcHJlc2VudCBpbiBSaW5nUEhQIGhhdmUgYmVlbiBtb2RpZmllZCB0byB3b3JrIGRpcmVjdGx5IHdpdGggUFNSLTcgbWVzc2FnZXMKICBhbmQgcGxhY2VkIGluIHRoZSBgR3V6emxlSHR0cFxIYW5kbGVyYCBuYW1lc3BhY2UuIFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzCiAgY29tcGxleGl0eSBpbiBHdXp6bGUsIHJlbW92ZXMgYSBkZXBlbmRlbmN5LCBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2UuIFJpbmdQSFAKICB3aWxsIGJlIG1haW50YWluZWQgZm9yIEd1enpsZSA1IHN1cHBvcnQsIGJ1dCB3aWxsIG5vIGxvbmdlciBiZSBhIHBhcnQgb2YKICBHdXp6bGUgNi4KLSBBcyBHdXp6bGUgbm93IHVzZXMgYSBtaWRkbGV3YXJlIGJhc2VkIHN5c3RlbXMgdGhlIGV2ZW50IHN5c3RlbSBhbmQgUmluZ1BIUAogIGludGVncmF0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIE5vdGU6IHdoaWxlIHRoZSBldmVudCBzeXN0ZW0gaGFzIGJlZW4gcmVtb3ZlZCwKICBpdCBpcyBwb3NzaWJsZSB0byBhZGQgeW91ciBvd24gdHlwZSBvZiBldmVudCBzeXN0ZW0gdGhhdCBpcyBwb3dlcmVkIGJ5IHRoZQogIG1pZGRsZXdhcmUgc3lzdGVtLgogIC0gUmVtb3ZlZCB0aGUgYEV2ZW50YCBuYW1lc3BhY2UuCiAgLSBSZW1vdmVkIHRoZSBgU3Vic2NyaWJlcmAgbmFtZXNwYWNlLgogIC0gUmVtb3ZlZCBgVHJhbnNhY3Rpb25gIGNsYXNzCiAgLSBSZW1vdmVkIGBSZXF1ZXN0RnNtYAogIC0gUmVtb3ZlZCBgUmluZ0JyaWRnZWAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcQ29va2llYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXE1pZGRsZXdhcmU6OmNvb2tpZXNgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEh0dHBFcnJvcmAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpodHRwRXJyb3JgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEhpc3RvcnlgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6aGlzdG9yeWAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTW9ja2AgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxIYW5kbGVyXE1vY2tIYW5kbGVyYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxQcmVwYXJlYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXFByZXBhcmVCb2R5TWlkZGxld2FyZWAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcUmVkaXJlY3RgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcUmVkaXJlY3RNaWRkbGV3YXJlYAotIEd1enpsZSBub3cgdXNlcyBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIChpbXBsZW1lbnRzIGluCiAgYEd1enpsZUh0dHBcUHNyN1xVcmlgKSBmb3IgVVJJIHN1cHBvcnQuIGBHdXp6bGVIdHRwXFVybGAgaXMgbm93IGdvbmUuCi0gU3RhdGljIGZ1bmN0aW9ucyBpbiBgR3V6emxlSHR0cFxVdGlsc2AgaGF2ZSBiZWVuIG1vdmVkIHRvIG5hbWVzcGFjZWQKICBmdW5jdGlvbnMgdW5kZXIgdGhlIGBHdXp6bGVIdHRwYCBuYW1lc3BhY2UuIFRoaXMgcmVxdWlyZXMgZWl0aGVyIGEgQ29tcG9zZXIKICBiYXNlZCBhdXRvbG9hZGVyIG9yIHlvdSB0byBpbmNsdWRlIGZ1bmN0aW9ucy5waHAuCi0gYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXREZWZhdWx0T3B0aW9uYCBoYXMgYmVlbiByZW5hbWVkIHRvCiAgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXRDb25maWdgLgotIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6c2V0RGVmYXVsdE9wdGlvbmAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBUaGUgYGpzb25gIGFuZCBgeG1sYCBtZXRob2RzIG9mIHJlc3BvbnNlIG9iamVjdHMgaGFzIGJlZW4gcmVtb3ZlZC4gV2l0aCB0aGUKICBtaWdyYXRpb24gdG8gc3RyaWN0bHkgYWRoZXJpbmcgdG8gUFNSLTcgYXMgdGhlIGludGVyZmFjZSBmb3IgR3V6emxlIG1lc3NhZ2VzLAogIGFkZGluZyBtZXRob2RzIHRvIG1lc3NhZ2UgaW50ZXJmYWNlcyB3b3VsZCBhY3R1YWxseSByZXF1aXJlIEd1enpsZSBtZXNzYWdlcwogIHRvIGV4dGVuZCBmcm9tIFBTUi03IG1lc3NhZ2VzIHJhdGhlciB0aGVuIHdvcmsgd2l0aCB0aGVtIGRpcmVjdGx5LgoKIyMgTWlncmF0aW5nIHRvIG1pZGRsZXdhcmUKClRoZSBjaGFuZ2UgdG8gUFNSLTcgdW5mb3J0dW5hdGVseSByZXF1aXJlZCBzaWduaWZpY2FudCByZWZhY3RvcmluZyB0byBHdXp6bGUKZHVlIHRvIHRoZSBmYWN0IHRoYXQgUFNSLTcgbWVzc2FnZXMgYXJlIGltbXV0YWJsZS4gR3V6emxlIDUgcmVsaWVkIG9uIGFuIGV2ZW50CnN5c3RlbSBmcm9tIHBsdWdpbnMuIFRoZSBldmVudCBzeXN0ZW0gcmVsaWVkIG9uIG11dGFiaWxpdHkgb2YgSFRUUCBtZXNzYWdlcyBhbmQKc2lkZSBlZmZlY3RzIGluIG9yZGVyIHRvIHdvcmsuIFdpdGggaW1tdXRhYmxlIG1lc3NhZ2VzLCB5b3UgaGF2ZSB0byBjaGFuZ2UgeW91cgp3b3JrZmxvdyB0byBiZWNvbWUgbW9yZSBhYm91dCBlaXRoZXIgcmV0dXJuaW5nIGEgdmFsdWUgKGUuZy4sIGZ1bmN0aW9uYWwKbWlkZGxld2FyZXMpIG9yIHNldHRpbmcgYSB2YWx1ZSBvbiBhbiBvYmplY3QuIEd1enpsZSB2NiBoYXMgY2hvc2VuIHRoZQpmdW5jdGlvbmFsIG1pZGRsZXdhcmUgYXBwcm9hY2guCgpJbnN0ZWFkIG9mIHVzaW5nIHRoZSBldmVudCBzeXN0ZW0gdG8gbGlzdGVuIGZvciB0aGluZ3MgbGlrZSB0aGUgYGJlZm9yZWAgZXZlbnQsCnlvdSBub3cgY3JlYXRlIGEgc3RhY2sgYmFzZWQgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IGludGVyY2VwdHMgYSByZXF1ZXN0IG9uCnRoZSB3YXkgaW4gYW5kIHRoZSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBvbiB0aGUgd2F5IG91dC4gVGhpcyBpcyBhIG11Y2gKc2ltcGxlciBhbmQgbW9yZSBwcmVkaWN0YWJsZSBhcHByb2FjaCB0aGFuIHRoZSBldmVudCBzeXN0ZW0gYW5kIHdvcmtzIG5pY2VseQp3aXRoIFBTUi03IG1pZGRsZXdhcmUuIER1ZSB0byB0aGUgdXNlIG9mIHByb21pc2VzLCB0aGUgbWlkZGxld2FyZSBzeXN0ZW0gaXMKYWxzbyBhc3luY2hyb25vdXMuCgp2NToKCmBgYHBocAp1c2UgR3V6emxlSHR0cFxFdmVudFxCZWZvcmVFdmVudDsKJGNsaWVudCA9IG5ldyBHdXp6bGVIdHRwXENsaWVudCgpOwovLyBHZXQgdGhlIGVtaXR0ZXIgYW5kIGxpc3RlbiB0byB0aGUgYmVmb3JlIGV2ZW50LgokY2xpZW50LT5nZXRFbWl0dGVyKCktPm9uKCdiZWZvcmUnLCBmdW5jdGlvbiAoQmVmb3JlRXZlbnQgJGUpIHsKICAgIC8vIEd1enpsZSB2NSBldmVudHMgcmVsaWVkIG9uIG11dGF0aW9uCiAgICAkZS0+Z2V0UmVxdWVzdCgpLT5zZXRIZWFkZXIoJ1gtRm9vJywgJ0JhcicpOwp9KTsKYGBgCgp2NjoKCkluIHY2LCB5b3UgY2FuIG1vZGlmeSB0aGUgcmVxdWVzdCBiZWZvcmUgaXQgaXMgc2VudCB1c2luZyB0aGUgYG1hcFJlcXVlc3RgCm1pZGRsZXdhcmUuIFRoZSBpZGlvbWF0aWMgd2F5IGluIHY2IHRvIG1vZGlmeSB0aGUgcmVxdWVzdC9yZXNwb25zZSBsaWZlY3ljbGUgaXMKdG8gc2V0dXAgYSBoYW5kbGVyIG1pZGRsZXdhcmUgc3RhY2sgdXAgZnJvbnQgYW5kIGluamVjdCB0aGUgaGFuZGxlciBpbnRvIGEKY2xpZW50LgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXE1pZGRsZXdhcmU7Ci8vIENyZWF0ZSBhIGhhbmRsZXIgc3RhY2sgdGhhdCBoYXMgYWxsIG9mIHRoZSBkZWZhdWx0IG1pZGRsZXdhcmVzIGF0dGFjaGVkCiRoYW5kbGVyID0gR3V6emxlSHR0cFxIYW5kbGVyU3RhY2s6OmNyZWF0ZSgpOwovLyBQdXNoIHRoZSBoYW5kbGVyIG9udG8gdGhlIGhhbmRsZXIgc3RhY2sKJGhhbmRsZXItPnB1c2goTWlkZGxld2FyZTo6bWFwUmVxdWVzdChmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCkgewogICAgLy8gTm90aWNlIHRoYXQgd2UgaGF2ZSB0byByZXR1cm4gYSByZXF1ZXN0IG9iamVjdAogICAgcmV0dXJuICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdYLUZvbycsICdCYXInKTsKfSkpOwovLyBJbmplY3QgdGhlIGhhbmRsZXIgaW50byB0aGUgY2xpZW50CiRjbGllbnQgPSBuZXcgR3V6emxlSHR0cFxDbGllbnQoWydoYW5kbGVyJyA9PiAkaGFuZGxlcl0pOwpgYGAKCiMjIFBPU1QgUmVxdWVzdHMKClRoaXMgdmVyc2lvbiBhZGRlZCB0aGUgW2Bmb3JtX3BhcmFtc2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvNi41L2RvY3MvcmVxdWVzdC1vcHRpb25zLnJzdCNmb3JtX3BhcmFtcykKYW5kIGBtdWx0aXBhcnRgIHJlcXVlc3Qgb3B0aW9ucy4gYGZvcm1fcGFyYW1zYCBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZgpzdHJpbmdzIG9yIGFycmF5IG9mIHN0cmluZ3MgYW5kIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuCmBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIFBPU1QgcmVxdWVzdC4gVGhlCltgbXVsdGlwYXJ0YF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvYmxvYi82LjUvZG9jcy9yZXF1ZXN0LW9wdGlvbnMucnN0I211bHRpcGFydCkKb3B0aW9uIGlzIG5vdyB1c2VkIHRvIHNlbmQgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIFBPU1QgcmVxdWVzdC4KCmBHdXp6bGVIdHRwXFBvc3RcUG9zdEZpbGVgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYG11bHRpcGFydGAgb3B0aW9uIHRvIGFkZApQT1NUIGZpbGVzIHRvIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSByZXF1ZXN0LgoKVGhlIGBib2R5YCBvcHRpb24gbm8gbG9uZ2VyIGFjY2VwdHMgYW4gYXJyYXkgdG8gc2VuZCBQT1NUIHJlcXVlc3RzLiBQbGVhc2UgdXNlCmBtdWx0aXBhcnRgIG9yIGBmb3JtX3BhcmFtc2AgaW5zdGVhZC4KClRoZSBgYmFzZV91cmxgIG9wdGlvbiBoYXMgYmVlbiByZW5hbWVkIHRvIGBiYXNlX3VyaWAuCgo0LnggdG8gNS4wCi0tLS0tLS0tLS0KCiMjIFJld3JpdHRlbiBBZGFwdGVyIExheWVyCgpHdXp6bGUgbm93IHVzZXMgW1JpbmdQSFBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvUmluZ1BIUCkgdG8gc2VuZApIVFRQIHJlcXVlc3RzLiBUaGUgYGFkYXB0ZXJgIG9wdGlvbiBpbiBhIGBHdXp6bGVIdHRwXENsaWVudGAgY29uc3RydWN0b3IKaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgaXQgaGFzIG5vdyBiZWVuIHJlbmFtZWQgdG8gYGhhbmRsZXJgLiBJbnN0ZWFkIG9mCnBhc3NpbmcgYSBgR3V6emxlSHR0cFxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2VgLCB5b3UgbXVzdCBub3cgcGFzcyBhIFBIUApgY2FsbGFibGVgIHRoYXQgZm9sbG93cyB0aGUgUmluZ1BIUCBzcGVjaWZpY2F0aW9uLgoKIyMgUmVtb3ZlZCBGbHVlbnQgSW50ZXJmYWNlcwoKW0ZsdWVudCBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZF0oaHR0cHM6Ly9vY3JhbWl1cy5naXRodWIuaW8vYmxvZy9mbHVlbnQtaW50ZXJmYWNlcy1hcmUtZXZpbC8pCmZyb20gdGhlIGZvbGxvd2luZyBjbGFzc2VzOgoKLSBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYAotIGBHdXp6bGVIdHRwXFVybGAKLSBgR3V6emxlSHR0cFxRdWVyeWAKLSBgR3V6emxlSHR0cFxQb3N0XFBvc3RCb2R5YAotIGBHdXp6bGVIdHRwXENvb2tpZVxTZXRDb29raWVgCgojIyBSZW1vdmVkIGZ1bmN0aW9ucy5waHAKClJlbW92ZWQgImZ1bmN0aW9ucy5waHAiLCBzbyB0aGF0IEd1enpsZSBpcyB0cnVseSBQU1ItNCBjb21wbGlhbnQuIFRoZSBmb2xsb3dpbmcKZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGFzIHJlcGxhY2VtZW50cy4KCi0gYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgIC0+IGBHdXp6bGVIdHRwXFV0aWxzOjpqc29uRGVjb2RlYAotIGBHdXp6bGVIdHRwXGdldF9wYXRoYCAtPiBgR3V6emxlSHR0cFxVdGlsczo6Z2V0UGF0aGAKLSBgR3V6emxlSHR0cFxVdGlsczo6c2V0UGF0aGAgLT4gYEd1enpsZUh0dHBcc2V0X3BhdGhgCi0gYEd1enpsZUh0dHBcUG9vbDo6YmF0Y2hgIC0+IGBHdXp6bGVIdHRwXGJhdGNoYC4gVGhpcyBmdW5jdGlvbiBpcywgaG93ZXZlciwKICBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHVzaW5nIGBHdXp6bGVIdHRwXFBvb2w6OmJhdGNoKClgLgoKVGhlICJwcm9jZWR1cmFsIiBnbG9iYWwgY2xpZW50IGhhcyBiZWVuIHJlbW92ZWQgd2l0aCBubyByZXBsYWNlbWVudCAoZS5nLiwKYEd1enpsZUh0dHBcZ2V0KClgLCBgR3V6emxlSHR0cFxwb3N0KClgLCBldGMuKS4gVXNlIGEgYEd1enpsZUh0dHBcQ2xpZW50YApvYmplY3QgYXMgYSByZXBsYWNlbWVudC4KCiMjIGB0aHJvd0ltbWVkaWF0ZWx5YCBoYXMgYmVlbiByZW1vdmVkCgpUaGUgY29uY2VwdCBvZiAidGhyb3dJbW1lZGlhdGVseSIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGV4Y2VwdGlvbnMgYW5kIGVycm9yCmV2ZW50cy4gVGhpcyBjb250cm9sIG1lY2hhbmlzbSB3YXMgdXNlZCB0byBzdG9wIGEgdHJhbnNmZXIgb2YgY29uY3VycmVudApyZXF1ZXN0cyBmcm9tIGNvbXBsZXRpbmcuIFRoaXMgY2FuIG5vdyBiZSBoYW5kbGVkIGJ5IHRocm93aW5nIHRoZSBleGNlcHRpb24gb3IKYnkgY2FuY2VsbGluZyBhIHBvb2wgb2YgcmVxdWVzdHMgb3IgZWFjaCBvdXRzdGFuZGluZyBmdXR1cmUgcmVxdWVzdAppbmRpdmlkdWFsbHkuCgojIyBoZWFkZXJzIGV2ZW50IGhhcyBiZWVuIHJlbW92ZWQKClJlbW92ZWQgdGhlICJoZWFkZXJzIiBldmVudC4gVGhpcyBldmVudCB3YXMgb25seSB1c2VmdWwgZm9yIGNoYW5naW5nIHRoZQpib2R5IGEgcmVzcG9uc2Ugb25jZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2Ugd2VyZSBrbm93bi4gWW91IGNhbiBpbXBsZW1lbnQKYSBzaW1pbGFyIGJlaGF2aW9yIGluIGEgbnVtYmVyIG9mIHdheXMuIE9uZSBleGFtcGxlIG1pZ2h0IGJlIHRvIHVzZSBhCkZuU3RyZWFtIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgdHJhbnNhY3Rpb24gYmVpbmcgc2VudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlCmZpcnN0IGJ5dGUgaXMgd3JpdHRlbiwgeW91IGNvdWxkIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoZWFkZXJzIG1hdGNoIHlvdXIKZXhwZWN0YXRpb25zLCBhbmQgaWYgc28sIGNoYW5nZSB0aGUgYWN0dWFsIHN0cmVhbSBib2R5IHRoYXQgaXMgYmVpbmcKd3JpdHRlbiB0by4KCiMjIFVwZGF0ZXMgdG8gSFRUUCBNZXNzYWdlcwoKUmVtb3ZlZCB0aGUgYGFzQXJyYXlgIHBhcmFtZXRlciBmcm9tCmBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyYC4gSWYgeW91IHdhbnQgdG8gZ2V0IGEgaGVhZGVyCnZhbHVlIGFzIGFuIGFycmF5LCB0aGVuIHVzZSB0aGUgbmV3bHkgYWRkZWQgYGdldEhlYWRlckFzQXJyYXkoKWAgbWV0aG9kIG9mCmBNZXNzYWdlSW50ZXJmYWNlYC4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIEd1enpsZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aAp0aGUgUFNSLTcgaW50ZXJmYWNlcy4KCjMueCB0byA0LjAKLS0tLS0tLS0tLQoKIyMgT3ZlcmFyY2hpbmcgY2hhbmdlczoKCi0gTm93IHJlcXVpcmVzIFBIUCA1LjQgb3IgZ3JlYXRlci4KLSBObyBsb25nZXIgcmVxdWlyZXMgY1VSTCB0byBzZW5kIHJlcXVlc3RzLgotIEd1enpsZSBubyBsb25nZXIgd3JhcHMgZXZlcnkgZXhjZXB0aW9uIGl0IHRocm93cy4gT25seSBleGNlcHRpb25zIHRoYXQgYXJlCiAgcmVjb3ZlcmFibGUgYXJlIG5vdyB3cmFwcGVkIGJ5IEd1enpsZS4KLSBWYXJpb3VzIG5hbWVzcGFjZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZC4KLSBObyBsb25nZXIgcmVxdWlyaW5nIHRoZSBTeW1mb255IEV2ZW50RGlzcGF0Y2hlci4gQSBjdXN0b20gZXZlbnQgZGlzcGF0Y2hlcgogIGJhc2VkIG9uIHRoZSBTeW1mb255IEV2ZW50RGlzcGF0Y2hlciBpcwogIG5vdyB1dGlsaXplZCBpbiBgR3V6emxlSHR0cFxFdmVudFxFbWl0dGVySW50ZXJmYWNlYCAocmVzdWx0aW5nIGluIHNpZ25pZmljYW50CiAgc3BlZWQgYW5kIGZ1bmN0aW9uYWxpdHkgaW1wcm92ZW1lbnRzKS4KCkNoYW5nZXMgcGVyIEd1enpsZSAzLnggbmFtZXNwYWNlIGFyZSBkZXNjcmliZWQgYmVsb3cuCgojIyBCYXRjaAoKVGhlIGBHdXp6bGVcQmF0Y2hgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIGJlc3QgbGVmdCB0bwp0aGlyZC1wYXJ0aWVzIHRvIGltcGxlbWVudCBvbiB0b3Agb2YgR3V6emxlJ3MgY29yZSBIVFRQIGxpYnJhcnkuCgojIyBDYWNoZQoKVGhlIGBHdXp6bGVcQ2FjaGVgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiAoVG9kbzogTm8gc3VpdGFibGUgcmVwbGFjZW1lbnQKaGFzIGJlZW4gaW1wbGVtZW50ZWQgeWV0LCBidXQgaG9waW5nIHRvIHV0aWxpemUgYSBQU1IgY2FjaGUgaW50ZXJmYWNlKS4KCiMjIENvbW1vbgoKLSBSZW1vdmVkIGFsbCBvZiB0aGUgd3JhcHBlZCBleGNlcHRpb25zLiBJdCdzIGJldHRlciB0byB1c2UgdGhlIHN0YW5kYXJkIFBIUAogIGxpYnJhcnkgZm9yIHVucmVjb3ZlcmFibGUgZXhjZXB0aW9ucy4KLSBgRnJvbUNvbmZpZ0ludGVyZmFjZWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlXENvbW1vblxWZXJzaW9uYCBoYXMgYmVlbiByZW1vdmVkLiBUaGUgVkVSU0lPTiBjb25zdGFudCBjYW4gYmUgZm91bmQKICBhdCBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OlZFUlNJT05gLgoKIyMjIENvbGxlY3Rpb24KCi0gYGdldEFsbGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGB0b0FycmF5YCB0byBjb252ZXJ0IGEgY29sbGVjdGlvbiB0byBhbiBhcnJheS4KLSBgaW5qZWN0YCBoYXMgYmVlbiByZW1vdmVkLgotIGBrZXlTZWFyY2hgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYGdldFBhdGhgIG5vIGxvbmdlciBzdXBwb3J0cyB3aWxkY2FyZCBleHByZXNzaW9ucy4gVXNlIHNvbWV0aGluZyBiZXR0ZXIgbGlrZQogIEpNRVNQYXRoIGZvciB0aGlzLgotIGBzZXRQYXRoYCBub3cgc3VwcG9ydHMgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGFycmF5IHZpYSB0aGUgYFtdYCBub3RhdGlvbi4KCiMjIyBFdmVudHMKCkd1enpsZSBubyBsb25nZXIgcmVxdWlyZXMgU3ltZm9ueSdzIEV2ZW50RGlzcGF0Y2hlciBjb21wb25lbnQuIEd1enpsZSBub3cgdXNlcwpgR3V6emxlSHR0cFxFdmVudFxFbWl0dGVyYC4KCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXJJbnRlcmZhY2VgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlckludGVyZmFjZWAuCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXJgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlcmAuCi0gYFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudGAgaXMgcmVwbGFjZWQgYnkKICBgR3V6emxlSHR0cFxFdmVudFxFdmVudGAsIGFuZCBHdXp6bGUgbm93IGhhcyBhbiBFdmVudEludGVyZmFjZSBpbgogIGBHdXp6bGVIdHRwXEV2ZW50XEV2ZW50SW50ZXJmYWNlYC4KLSBgQWJzdHJhY3RIYXNEaXNwYXRjaGVyYCBoYXMgbW92ZWQgdG8gYSB0cmFpdCwgYEhhc0VtaXR0ZXJUcmFpdGAsIGFuZAogIGBIYXNEaXNwYXRjaGVySW50ZXJmYWNlYCBoYXMgbW92ZWQgdG8gYEhhc0VtaXR0ZXJJbnRlcmZhY2VgLiBSZXRyaWV2aW5nIHRoZQogIGV2ZW50IGVtaXR0ZXIgb2YgYSByZXF1ZXN0LCBjbGllbnQsIGV0Yy4gbm93IHVzZXMgdGhlIGBnZXRFbWl0dGVyYCBtZXRob2QKICByYXRoZXIgdGhhbiB0aGUgYGdldERpc3BhdGNoZXJgIG1ldGhvZC4KCiMjIyMgRW1pdHRlcgoKLSBVc2UgdGhlIGBvbmNlKClgIG1ldGhvZCB0byBhZGQgYSBsaXN0ZW5lciB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBpdHNlbGYKICB0aGUgZmlyc3QgdGltZSBpdCBpcyBpbnZva2VkLgotIFVzZSB0aGUgYGxpc3RlbmVycygpYCBtZXRob2QgdG8gcmV0cmlldmUgYSBsaXN0IG9mIGV2ZW50IGxpc3RlbmVycyByYXRoZXIgdGhhbgogIHRoZSBgZ2V0TGlzdGVuZXJzKClgIG1ldGhvZC4KLSBVc2UgYGVtaXQoKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goKWAgdG8gZW1pdCBhbiBldmVudCBmcm9tIGFuIGVtaXR0ZXIuCi0gVXNlIGBhdHRhY2goKWAgaW5zdGVhZCBvZiBgYWRkU3Vic2NyaWJlcigpYCBhbmQgYGRldGFjaCgpYCBpbnN0ZWFkIG9mCiAgYHJlbW92ZVN1YnNjcmliZXIoKWAuCgpgYGBwaHAKJG1vY2sgPSBuZXcgTW9jaygpOwovLyAzLngKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5hZGRTdWJzY3JpYmVyKCRtb2NrKTsKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5yZW1vdmVTdWJzY3JpYmVyKCRtb2NrKTsKLy8gNC54CiRyZXF1ZXN0LT5nZXRFbWl0dGVyKCktPmF0dGFjaCgkbW9jayk7CiRyZXF1ZXN0LT5nZXRFbWl0dGVyKCktPmRldGFjaCgkbW9jayk7CmBgYAoKVXNlIHRoZSBgb24oKWAgbWV0aG9kIHRvIGFkZCBhIGxpc3RlbmVyIHJhdGhlciB0aGFuIHRoZSBgYWRkTGlzdGVuZXIoKWAgbWV0aG9kLgoKYGBgcGhwCi8vIDMueAokcmVxdWVzdC0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmFkZExpc3RlbmVyKCdmb28nLCBmdW5jdGlvbiAoRXZlbnQgJGV2ZW50KSB7IC8qIC4uLiAqLyB9ICk7Ci8vIDQueAokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5vbignZm9vJywgZnVuY3Rpb24gKEV2ZW50ICRldmVudCwgJG5hbWUpIHsgLyogLi4uICovIH0gKTsKYGBgCgojIyBIdHRwCgojIyMgR2VuZXJhbCBjaGFuZ2VzCgotIFRoZSBjYWNlcnQucGVtIGNlcnRpZmljYXRlIGhhcyBiZWVuIG1vdmVkIHRvIGBzcmMvY2FjZXJ0LnBlbWAuCi0gQWRkZWQgdGhlIGNvbmNlcHQgb2YgYWRhcHRlcnMgdGhhdCBhcmUgdXNlZCB0byB0cmFuc2ZlciByZXF1ZXN0cyBvdmVyIHRoZQogIHdpcmUuCi0gU2ltcGxpZmllZCB0aGUgZXZlbnQgc3lzdGVtLgotIFNlbmRpbmcgcmVxdWVzdHMgaW4gcGFyYWxsZWwgaXMgc3RpbGwgcG9zc2libGUsIGJ1dCBiYXRjaGluZyBpcyBubyBsb25nZXIgYQogIGNvbmNlcHQgb2YgdGhlIEhUVFAgbGF5ZXIuIEluc3RlYWQsIHlvdSBtdXN0IHVzZSB0aGUgYGNvbXBsZXRlYCBhbmQgYGVycm9yYAogIGV2ZW50cyB0byBhc3luY2hyb25vdXNseSBtYW5hZ2UgcGFyYWxsZWwgcmVxdWVzdCB0cmFuc2ZlcnMuCi0gYEd1enpsZVxIdHRwXFVybGAgaGFzIG1vdmVkIHRvIGBHdXp6bGVIdHRwXFVybGAuCi0gYEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nYCBoYXMgbW92ZWQgdG8gYEd1enpsZUh0dHBcUXVlcnlgLgotIFF1ZXJ5QWdncmVnYXRvcnMgaGF2ZSBiZWVuIHJld3JpdHRlbiBzbyB0aGF0IHRoZXkgYXJlIHNpbXBseSBjYWxsYWJsZQogIGZ1bmN0aW9ucy4KLSBgR3V6emxlSHR0cFxTdGF0aWNDbGllbnRgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGluCiAgYGZ1bmN0aW9ucy5waHBgIGZvciBhbiBlYXN5IHRvIHVzZSBzdGF0aWMgY2xpZW50IGluc3RhbmNlLgotIEV4Y2VwdGlvbnMgaW4gYEd1enpsZUh0dHBcRXhjZXB0aW9uYCBoYXZlIGJlZW4gdXBkYXRlZCB0byBhbGwgZXh0ZW5kIGZyb20KICBgR3V6emxlSHR0cFxFeGNlcHRpb25cVHJhbnNmZXJFeGNlcHRpb25gLgoKIyMjIENsaWVudAoKQ2FsbGluZyBtZXRob2RzIGxpa2UgYGdldCgpYCwgYHBvc3QoKWAsIGBoZWFkKClgLCBldGMuIG5vIGxvbmdlciBjcmVhdGUgYW5kCnJldHVybiBhIHJlcXVlc3QsIGJ1dCByYXRoZXIgY3JlYXRlcyBhIHJlcXVlc3QsIHNlbmRzIHRoZSByZXF1ZXN0LCBhbmQgcmV0dXJucwp0aGUgcmVzcG9uc2UuCgpgYGBwaHAKLy8gMy4wCiRyZXF1ZXN0ID0gJGNsaWVudC0+Z2V0KCcvJyk7CiRyZXNwb25zZSA9ICRyZXF1ZXN0LT5zZW5kKCk7CgovLyA0LjAKJHJlc3BvbnNlID0gJGNsaWVudC0+Z2V0KCcvJyk7CgovLyBvciwgdG8gbWlycm9yIHRoZSBwcmV2aW91cyBiZWhhdmlvcgokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJyk7CiRyZXNwb25zZSA9ICRjbGllbnQtPnNlbmQoJHJlcXVlc3QpOwpgYGAKCmBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZWAgaGFzIGNoYW5nZWQuCgotIFRoZSBgc2VuZGAgbWV0aG9kIG5vIGxvbmdlciBhY2NlcHRzIG1vcmUgdGhhbiBvbmUgcmVxdWVzdC4gVXNlIGBzZW5kQWxsYCB0bwogIHNlbmQgbXVsdGlwbGUgcmVxdWVzdHMgaW4gcGFyYWxsZWwuCi0gYHNldFVzZXJBZ2VudCgpYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9uIGluc3RlYWQuIFlvdQogIGNvdWxkLCBmb3IgZXhhbXBsZSwgZG8gc29tZXRoaW5nIGxpa2U6CiAgYCRjbGllbnQtPnNldENvbmZpZygnZGVmYXVsdHMvaGVhZGVycy9Vc2VyLUFnZW50JywgJ0Zvby9CYXIgJyAuICRjbGllbnQ6OmdldERlZmF1bHRVc2VyQWdlbnQoKSlgLgotIGBzZXRTc2xWZXJpZmljYXRpb24oKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIGluc3RlYWQsCiAgbGlrZSBgJGNsaWVudC0+c2V0Q29uZmlnKCdkZWZhdWx0cy92ZXJpZnknLCB0cnVlKWAuCgpgR3V6emxlSHR0cFxDbGllbnRgIGhhcyBjaGFuZ2VkLgoKLSBUaGUgY29uc3RydWN0b3Igbm93IGFjY2VwdHMgb25seSBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gWW91IGNhbiBpbmNsdWRlIGEKICBgYmFzZV91cmxgIHN0cmluZyBvciBhcnJheSB0byB1c2UgYSBVUkkgdGVtcGxhdGUgYXMgdGhlIGJhc2UgVVJMIG9mIGEgY2xpZW50LgogIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgYGRlZmF1bHRzYCBrZXkgdGhhdCBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBkZWZhdWx0CiAgcmVxdWVzdCBvcHRpb25zLiBZb3UgY2FuIHBhc3MgYW4gYGFkYXB0ZXJgIHRvIHVzZSBhIGN1c3RvbSBhZGFwdGVyLAogIGBiYXRjaF9hZGFwdGVyYCB0byB1c2UgYSBjdXN0b20gYWRhcHRlciBmb3Igc2VuZGluZyByZXF1ZXN0cyBpbiBwYXJhbGxlbCwgb3IKICBhIGBtZXNzYWdlX2ZhY3RvcnlgIHRvIGNoYW5nZSB0aGUgZmFjdG9yeSB1c2VkIHRvIGNyZWF0ZSBIVFRQIHJlcXVlc3RzIGFuZAogIHJlc3BvbnNlcy4KLSBUaGUgY2xpZW50IG5vIGxvbmdlciBlbWl0cyBhIGBjbGllbnQuY3JlYXRlX3JlcXVlc3RgIGV2ZW50LgotIENyZWF0aW5nIHJlcXVlc3RzIHdpdGggYSBjbGllbnQgbm8gbG9uZ2VyIGF1dG9tYXRpY2FsbHkgdXRpbGl6ZSBhIFVSSQogIHRlbXBsYXRlLiBZb3UgbXVzdCBwYXNzIGFuIGFycmF5IGludG8gYSBjcmVhdGlvbmFsIG1ldGhvZCAoZS5nLiwKICBgY3JlYXRlUmVxdWVzdGAsIGBnZXRgLCBgcHV0YCwgZXRjLikgaW4gb3JkZXIgdG8gZXhwYW5kIGEgVVJJIHRlbXBsYXRlLgoKIyMjIE1lc3NhZ2VzCgpNZXNzYWdlcyBubyBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIHRvIHRoZWlyIGNvdW50ZXJwYXJ0cyAoaS5lLiwgYSByZXF1ZXN0IG5vCmxvbmdlciBoYXMgYSByZWZlcmVuY2UgdG8gaXQncyByZXNwb25zZSwgYW5kIGEgcmVzcG9uc2Ugbm8gbG9nZXIgaGFzIGEKcmVmZXJlbmNlIHRvIGl0cyByZXF1ZXN0KS4gVGhpcyBhc3NvY2lhdGlvbiBpcyBub3cgbWFuYWdlZCB0aHJvdWdoIGEKYEd1enpsZUh0dHBcQWRhcHRlclxUcmFuc2FjdGlvbkludGVyZmFjZWAgb2JqZWN0LiBZb3UgY2FuIGdldCByZWZlcmVuY2VzIHRvCnRoZXNlIHRyYW5zYWN0aW9uIG9iamVjdHMgdXNpbmcgcmVxdWVzdCBldmVudHMgdGhhdCBhcmUgZW1pdHRlZCBvdmVyIHRoZQpsaWZlY3ljbGUgb2YgYSByZXF1ZXN0LgoKIyMjIyBSZXF1ZXN0cyB3aXRoIGEgYm9keQoKLSBgR3V6emxlSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RgIGFuZAogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcRW50aXR5RW5jbG9zaW5nUmVxdWVzdEludGVyZmFjZWAgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZQogIHNlcGFyYXRpb24gYmV0d2VlbiByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gYSBib2R5IGFuZCByZXF1ZXN0cyB0aGF0IGRvIG5vdAogIGNvbnRhaW4gYSBib2R5IGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBub3cgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlYAogIGhhbmRsZXMgYm90aCB1c2UgY2FzZXMuCi0gQW55IG1ldGhvZCB0aGF0IHByZXZpb3VzbHkgYWNjZXB0cyBhIGBHdXp6bGVIdHRwXFJlc3BvbnNlYCBvYmplY3Qgbm93IGFjY2VwdCBhCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZWAuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZWAgaGFzIGJlZW4gcmVuYW1lZCB0bwogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlJbnRlcmZhY2VgLiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNyZWF0ZQogIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhbmQgaXMgaW1wbGVtZW50ZWQgaW4KICBgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VGYWN0b3J5YC4KLSBQT1NUIGZpZWxkIGFuZCBmaWxlIG1ldGhvZHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QuIFlvdQogIG11c3Qgbm93IHVzZSB0aGUgbWV0aG9kcyBtYWRlIGF2YWlsYWJsZSB0byBgR3V6emxlSHR0cFxQb3N0XFBvc3RCb2R5SW50ZXJmYWNlYAogIHRvIGNvbnRyb2wgdGhlIGZvcm1hdCBvZiBhIFBPU1QgYm9keS4gUmVxdWVzdHMgdGhhdCBhcmUgY3JlYXRlZCB1c2luZyBhCiAgc3RhbmRhcmQgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlRmFjdG9yeUludGVyZmFjZWAgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZQogIGEgYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keWAgYm9keSBpZiB0aGUgYm9keSB3YXMgcGFzc2VkIGFzIGFuIGFycmF5IG9yIGlmCiAgdGhlIG1ldGhvZCBpcyBQT1NUIGFuZCBubyBib2R5IGlzIHByb3ZpZGVkLgoKYGBgcGhwCiRyZXF1ZXN0ID0gJGNsaWVudC0+Y3JlYXRlUmVxdWVzdCgnUE9TVCcsICcvJyk7CiRyZXF1ZXN0LT5nZXRCb2R5KCktPnNldEZpZWxkKCdmb28nLCAnYmFyJyk7CiRyZXF1ZXN0LT5nZXRCb2R5KCktPmFkZEZpbGUobmV3IFBvc3RGaWxlKCdmaWxlX2tleScsIGZvcGVuKCcvcGF0aC90by9jb250ZW50JywgJ3InKSkpOwpgYGAKCiMjIyMgSGVhZGVycwoKLSBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlcmAgaGFzIGJlZW4gcmVtb3ZlZC4gSGVhZGVyIHZhbHVlcyBhcmUgbm93IHNpbXBseQogIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mIHZhbHVlcyBvciBhcyBhIHN0cmluZy4gSGVhZGVyIHZhbHVlcyBhcmUgcmV0dXJuZWQKICBhcyBhIHN0cmluZyBieSBkZWZhdWx0IHdoZW4gcmV0cmlldmluZyBhIGhlYWRlciB2YWx1ZSBmcm9tIGEgbWVzc2FnZS4gWW91IGNhbgogIHBhc3MgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYHRydWVgIHRvIHJldHJpZXZlIGEgaGVhZGVyIHZhbHVlIGFzIGFuIGFycmF5CiAgb2Ygc3RyaW5ncyBpbnN0ZWFkIG9mIGEgc2luZ2xlIGNvbmNhdGVuYXRlZCBzdHJpbmcuCi0gYEd1enpsZUh0dHBcUG9zdEZpbGVgIGFuZCBgR3V6emxlSHR0cFxQb3N0RmlsZUludGVyZmFjZWAgaGF2ZSBiZWVuIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcUG9zdGAuIFRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIHNpbXBsaWZpZWQgYW5kIG5vdyBhbGxvd3MgdGhlCiAgYWRkaXRpb24gb2YgYXJiaXRyYXJ5IGhlYWRlcnMuCi0gQ3VzdG9tIGhlYWRlcnMgbGlrZSBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlclxMaW5rYCBoYXZlIGJlZW4gcmVtb3ZlZC4gTW9zdAogIG9mIHRoZSBjdXN0b20gaGVhZGVycyBhcmUgbm93IGhhbmRsZWQgc2VwYXJhdGVseSBpbiBzcGVjaWZpYwogIHN1YnNjcmliZXJzL3BsdWdpbnMsIGFuZCBgR3V6emxlSHR0cFxNZXNzYWdlXEhlYWRlclZhbHVlczo6cGFyc2VQYXJhbXMoKWAgaGFzCiAgYmVlbiB1cGRhdGVkIHRvIHByb3Blcmx5IGhhbmRsZSBoZWFkZXJzIHRoYXQgY29udGFpbiBwYXJhbWV0ZXJzIChsaWtlIHRoZQogIGBMaW5rYCBoZWFkZXIpLgoKIyMjIyBSZXNwb25zZXMKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0SW5mbygpYCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpzZXRJbmZvKClgIGhhdmUgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGV2ZW50CiAgc3lzdGVtIHRvIHJldHJpZXZlIHRoaXMgdHlwZSBvZiBpbmZvcm1hdGlvbi4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpnZXRSYXdIZWFkZXJzKClgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0TWVzc2FnZSgpYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmNhbGN1bGF0ZUFnZSgpYCBhbmQgb3RoZXIgY2FjaGUgc3BlY2lmaWMKICBtZXRob2RzIGhhdmUgbW92ZWQgdG8gdGhlIENhY2hlU3Vic2NyaWJlci4KLSBIZWFkZXIgc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBnZXRDb250ZW50TWQ1KClgIGhhdmUgYmVlbiByZW1vdmVkLgogIEp1c3QgdXNlIGBnZXRIZWFkZXIoJ0NvbnRlbnQtTUQ1JylgIGluc3RlYWQuCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6c2V0UmVxdWVzdCgpYCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpnZXRSZXF1ZXN0KClgIGhhdmUgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGV2ZW50CiAgc3lzdGVtIHRvIHdvcmsgd2l0aCByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIGFzIGEgdHJhbnNhY3Rpb24uCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmVkaXJlY3RDb3VudCgpYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlCiAgUmVkaXJlY3Qgc3Vic2NyaWJlciBpbnN0ZWFkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmlzU3VjY2Vzc2Z1bCgpYCBhbmQgb3RoZXIgcmVsYXRlZCBtZXRob2RzIGhhdmUKICBiZWVuIHJlbW92ZWQuIFVzZSBgZ2V0U3RhdHVzQ29kZSgpYCBpbnN0ZWFkLgoKIyMjIyBTdHJlYW1pbmcgcmVzcG9uc2VzCgpTdHJlYW1pbmcgcmVxdWVzdHMgY2FuIG5vdyBiZSBjcmVhdGVkIGJ5IGEgY2xpZW50IGRpcmVjdGx5LCByZXR1cm5pbmcgYQpgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlYCBvYmplY3QgdGhhdCBjb250YWlucyBhIGJvZHkgc3RyZWFtCnJlZmVyZW5jaW5nIGFuIG9wZW4gUEhQIEhUVFAgc3RyZWFtLgoKYGBgcGhwCi8vIDMuMAp1c2UgR3V6emxlXFN0cmVhbVxQaHBTdHJlYW1SZXF1ZXN0RmFjdG9yeTsKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJy8nKTsKJGZhY3RvcnkgPSBuZXcgUGhwU3RyZWFtUmVxdWVzdEZhY3RvcnkoKTsKJHN0cmVhbSA9ICRmYWN0b3J5LT5mcm9tUmVxdWVzdCgkcmVxdWVzdCk7CiRkYXRhID0gJHN0cmVhbS0+cmVhZCgxMDI0KTsKCi8vIDQuMAokcmVzcG9uc2UgPSAkY2xpZW50LT5nZXQoJy8nLCBbJ3N0cmVhbScgPT4gdHJ1ZV0pOwovLyBSZWFkIHNvbWUgZGF0YSBvZmYgb2YgdGhlIHN0cmVhbSBpbiB0aGUgcmVzcG9uc2UgYm9keQokZGF0YSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5yZWFkKDEwMjQpOwpgYGAKCiMjIyMgUmVkaXJlY3RzCgpUaGUgYGNvbmZpZ3VyZVJlZGlyZWN0cygpYCBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZiBhCmBhbGxvd19yZWRpcmVjdHNgIHJlcXVlc3Qgb3B0aW9uLgoKYGBgcGhwCi8vIFN0YW5kYXJkIHJlZGlyZWN0cyB3aXRoIGEgZGVmYXVsdCBvZiBhIG1heCBvZiA1IHJlZGlyZWN0cwokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJywgWydhbGxvd19yZWRpcmVjdHMnID0+IHRydWVdKTsKCi8vIFN0cmljdCByZWRpcmVjdHMgd2l0aCBhIGN1c3RvbSBudW1iZXIgb2YgcmVkaXJlY3RzCiRyZXF1ZXN0ID0gJGNsaWVudC0+Y3JlYXRlUmVxdWVzdCgnR0VUJywgJy8nLCBbCiAgICAnYWxsb3dfcmVkaXJlY3RzJyA9PiBbJ21heCcgPT4gNSwgJ3N0cmljdCcgPT4gdHJ1ZV0KXSk7CmBgYAoKIyMjIyBFbnRpdHlCb2R5CgpFbnRpdHlCb2R5IGludGVyZmFjZXMgYW5kIGNsYXNzZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgbW92ZWQgdG8KYEd1enpsZUh0dHBcU3RyZWFtYC4gQWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgdGhhdCBvbmNlIHJlcXVpcmVkCmBHdXp6bGVIdHRwXEVudGl0eUJvZHlJbnRlcmZhY2VgIG5vdyByZXF1aXJlCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2VgLiBDcmVhdGluZyBhIG5ldyBib2R5IGZvciBhIHJlcXVlc3Qgbm8KbG9uZ2VyIHVzZXMgYEd1enpsZUh0dHBcRW50aXR5Qm9keTo6ZmFjdG9yeWAgYnV0IG5vdyB1c2VzCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW06OmZhY3RvcnlgIG9yIGV2ZW4gYmV0dGVyOgpgR3V6emxlSHR0cFxTdHJlYW1cY3JlYXRlKClgLgoKLSBgR3V6emxlXEh0dHBcRW50aXR5Qm9keUludGVyZmFjZWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2VgCi0gYEd1enpsZVxIdHRwXEVudGl0eUJvZHlgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtYAotIGBHdXp6bGVcSHR0cFxDYWNoaW5nRW50aXR5Qm9keWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxDYWNoaW5nU3RyZWFtYAotIGBHdXp6bGVcSHR0cFxSZWFkTGltaXRFbnRpdHlCb2R5YCBpcyBub3cgYEd1enpsZUh0dHBcU3RyZWFtXExpbWl0U3RyZWFtYAotIGBHdXp6bGVcSHR0cFxJb0VtaXR0eWluRW50aXR5Qm9keWAgaGFzIGJlZW4gcmVtb3ZlZC4KCiMjIyMgUmVxdWVzdCBsaWZlY3ljbGUgZXZlbnRzCgpSZXF1ZXN0cyBwcmV2aW91c2x5IHN1Ym1pdHRlZCBhIGxhcmdlIG51bWJlciBvZiByZXF1ZXN0cy4gVGhlIG51bWJlciBvZiBldmVudHMKZW1pdHRlZCBvdmVyIHRoZSBsaWZlY3ljbGUgb2YgYSByZXF1ZXN0IGhhcyBiZWVuIHNpZ25pZmljYW50bHkgcmVkdWNlZCB0byBtYWtlCml0IGVhc2llciB0byB1bmRlcnN0YW5kIGhvdyB0byBleHRlbmQgdGhlIGJlaGF2aW9yIG9mIGEgcmVxdWVzdC4gQWxsIGV2ZW50cwplbWl0dGVkIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdCBub3cgZW1pdCBhIGN1c3RvbQpgR3V6emxlSHR0cFxFdmVudFxFdmVudEludGVyZmFjZWAgb2JqZWN0IHRoYXQgY29udGFpbnMgY29udGV4dCBwcm92aWRpbmcKbWV0aG9kcyBhbmQgYSB3YXkgaW4gd2hpY2ggdG8gbW9kaWZ5IHRoZSB0cmFuc2FjdGlvbiBhdCB0aGF0IHNwZWNpZmljIHBvaW50IGluCnRpbWUgKGUuZy4sIGludGVyY2VwdCB0aGUgcmVxdWVzdCBhbmQgc2V0IGEgcmVzcG9uc2Ugb24gdGhlIHRyYW5zYWN0aW9uKS4KCi0gYHJlcXVlc3QuYmVmb3JlX3NlbmRgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlZm9yZWAgYW5kIG5vdyBlbWl0cyBhCiAgYEd1enpsZUh0dHBcRXZlbnRcQmVmb3JlRXZlbnRgCi0gYHJlcXVlc3QuY29tcGxldGVgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbXBsZXRlYCBhbmQgbm93IGVtaXRzIGEKICBgR3V6emxlSHR0cFxFdmVudFxDb21wbGV0ZUV2ZW50YC4KLSBgcmVxdWVzdC5zZW50YCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGNvbXBsZXRlYC4KLSBgcmVxdWVzdC5zdWNjZXNzYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGNvbXBsZXRlYC4KLSBgZXJyb3JgIGlzIG5vdyBhbiBldmVudCB0aGF0IGVtaXRzIGEgYEd1enpsZUh0dHBcRXZlbnRcRXJyb3JFdmVudGAuCi0gYHJlcXVlc3QuZXhjZXB0aW9uYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYGVycm9yYC4KLSBgcmVxdWVzdC5yZWNlaXZlLnN0YXR1c19saW5lYCBoYXMgYmVlbiByZW1vdmVkLgotIGBjdXJsLmNhbGxiYWNrLnByb2dyZXNzYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBjdXN0b20gYFN0cmVhbUludGVyZmFjZWAgdG8KICBtYWludGFpbiBhIHN0YXR1cyB1cGRhdGUuCi0gYGN1cmwuY2FsbGJhY2sud3JpdGVgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhIGN1c3RvbSBgU3RyZWFtSW50ZXJmYWNlYCB0bwogIGludGVyY2VwdCB3cml0ZXMuCi0gYGN1cmwuY2FsbGJhY2sucmVhZGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgY3VzdG9tIGBTdHJlYW1JbnRlcmZhY2VgIHRvCiAgaW50ZXJjZXB0IHJlYWRzLgoKYGhlYWRlcnNgIGlzIGEgbmV3IGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmVzcG9uc2UgaGVhZGVycyBvZiBhCnJlcXVlc3QgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UgaXMgZG93bmxvYWRlZC4gVGhpcwpldmVudCBlbWl0cyBhIGBHdXp6bGVIdHRwXEV2ZW50XEhlYWRlcnNFdmVudGAuCgpZb3UgY2FuIGludGVyY2VwdCBhIHJlcXVlc3QgYW5kIGluamVjdCBhIHJlc3BvbnNlIHVzaW5nIHRoZSBgaW50ZXJjZXB0KClgIGV2ZW50Cm9mIGEgYEd1enpsZUh0dHBcRXZlbnRcQmVmb3JlRXZlbnRgLCBgR3V6emxlSHR0cFxFdmVudFxDb21wbGV0ZUV2ZW50YCwgYW5kCmBHdXp6bGVIdHRwXEV2ZW50XEVycm9yRXZlbnRgIGV2ZW50LgoKIyMgSW5mbGVjdGlvbgoKVGhlIGBHdXp6bGVcSW5mbGVjdGlvbmAgbmFtZXNwYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgaXMgbm90IGEgY29yZSBjb25jZXJuCm9mIEd1enpsZS4KCiMjIEl0ZXJhdG9yCgpUaGUgYEd1enpsZVxJdGVyYXRvcmAgbmFtZXNwYWNlIGhhcyBiZWVuIHJlbW92ZWQuCgotIGBHdXp6bGVcSXRlcmF0b3JcQXBwZW5kSXRlcmF0b3JgLCBgR3V6emxlXEl0ZXJhdG9yXENodW5rZWRJdGVyYXRvcmAsIGFuZAogIGBHdXp6bGVcSXRlcmF0b3JcTWV0aG9kUHJveHlJdGVyYXRvcmAgYXJlIG5pY2UsIGJ1dCBub3QgYSBjb3JlIHJlcXVpcmVtZW50IG9mCiAgR3V6emxlIGl0c2VsZi4KLSBgR3V6emxlXEl0ZXJhdG9yXEZpbHRlckl0ZXJhdG9yYCBpcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgYW4gZXF1aXZhbGVudAogIGNsYXNzIGlzIHNoaXBwZWQgd2l0aCBQSFAgNS40LgotIGBHdXp6bGVcSXRlcmF0b3JcTWFwSXRlcmF0b3JgIGlzIG5vdCByZWFsbHkgbmVlZGVkIHdoZW4gdXNpbmcgUEhQIDUuNSBiZWNhdXNlCiAgaXQncyBlYXNpZXIgdG8ganVzdCB3cmFwIGFuIGl0ZXJhdG9yIGluIGEgZ2VuZXJhdG9yIHRoYXQgbWFwcyB2YWx1ZXMuCgpGb3IgYSByZXBsYWNlbWVudCBvZiB0aGVzZSBpdGVyYXRvcnMsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmlraWMvaXRlcgoKIyMgTG9nCgpUaGUgTG9nUGx1Z2luIGhhcyBtb3ZlZCB0byBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2xvZy1zdWJzY3JpYmVyLiBUaGUKYEd1enpsZVxMb2dgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBHdXp6bGUgbm93IHJlbGllcyBvbgpgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2VgIGZvciBhbGwgbG9nZ2luZy4gVGhlIE1lc3NhZ2VGb3JtYXR0ZXIgY2xhc3MgaGFzIGJlZW4KbW92ZWQgdG8gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxMb2dcRm9ybWF0dGVyYC4KCiMjIFBhcnNlcgoKVGhlIGBHdXp6bGVcUGFyc2VyYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyB3YXMgcHJldmlvdXNseSB1c2VkIHRvCm1ha2UgaXQgcG9zc2libGUgdG8gcGx1ZyBpbiBjdXN0b20gcGFyc2VycyBmb3IgY29va2llcywgbWVzc2FnZXMsIFVSSQp0ZW1wbGF0ZXMsIGFuZCBVUkxzOyBob3dldmVyLCB0aGlzIGxldmVsIG9mIGNvbXBsZXhpdHkgaXMgbm90IG5lZWRlZCBpbiBHdXp6bGUKc28gaXQgaGFzIGJlZW4gcmVtb3ZlZC4KCi0gQ29va2llOiBDb29raWUgcGFyc2luZyBsb2dpYyBoYXMgYmVlbiBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXENvb2tpZVxTZXRDb29raWU6OmZyb21TdHJpbmdgLgotIE1lc3NhZ2U6IE1lc3NhZ2UgcGFyc2luZyBsb2dpYyBmb3IgYm90aCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGhhcyBiZWVuIG1vdmVkCiAgdG8gYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlRmFjdG9yeTo6ZnJvbU1lc3NhZ2VgLiBNZXNzYWdlIHBhcnNpbmcgaXMgb25seQogIHVzZWQgaW4gZGVidWdnaW5nIG9yIGRlc2VyaWFsaXppbmcgbWVzc2FnZXMsIHNvIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IKICBHdXp6bGUgYXMgYSBsaWJyYXJ5IHRvIGFkZCB0aGlzIGxldmVsIG9mIGNvbXBsZXhpdHkgdG8gcGFyc2luZyBtZXNzYWdlcy4KLSBVcmlUZW1wbGF0ZTogVVJJIHRlbXBsYXRlIHBhcnNpbmcgaGFzIGJlZW4gbW92ZWQgdG8KICBgR3V6emxlSHR0cFxVcmlUZW1wbGF0ZWAuIFRoZSBHdXp6bGUgbGlicmFyeSB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBQRUNMCiAgVVJJIHRlbXBsYXRlIGxpYnJhcnkgaWYgaXQgaXMgaW5zdGFsbGVkLgotIFVybDogVVJMIHBhcnNpbmcgaXMgbm93IHBlcmZvcm1lZCBpbiBgR3V6emxlSHR0cFxVcmw6OmZyb21TdHJpbmdgIChwcmV2aW91c2x5CiAgaXQgd2FzIGBHdXp6bGVcSHR0cFxVcmw6OmZhY3RvcnkoKWApLiBJZiBjdXN0b20gVVJMIHBhcnNpbmcgaXMgbmVjZXNzYXJ5LAogIHRoZW4gZGV2ZWxvcGVycyBhcmUgZnJlZSB0byBzdWJjbGFzcyBgR3V6emxlSHR0cFxVcmxgLgoKIyMgUGx1Z2luCgpUaGUgYEd1enpsZVxQbHVnaW5gIG5hbWVzcGFjZSBoYXMgYmVlbiByZW5hbWVkIHRvIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJgLgpTZXZlcmFsIHBsdWdpbnMgYXJlIHNoaXBwaW5nIHdpdGggdGhlIGNvcmUgR3V6emxlIGxpYnJhcnkgdW5kZXIgdGhpcyBuYW1lc3BhY2UuCgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcQ29va2llYDogUmVwbGFjZXMgdGhlIG9sZCBDb29raWVQbHVnaW4uIENvb2tpZSBqYXIKICBjb2RlIGhhcyBtb3ZlZCB0byBgR3V6emxlSHR0cFxDb29raWVgLgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcSGlzdG9yeWA6IFJlcGxhY2VzIHRoZSBvbGQgSGlzdG9yeVBsdWdpbi4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEh0dHBFcnJvcmA6IFRocm93cyBlcnJvcnMgd2hlbiBhIGJhZCBIVFRQIHJlc3BvbnNlIGlzCiAgcmVjZWl2ZWQuCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrYDogUmVwbGFjZXMgdGhlIG9sZCBNb2NrUGx1Z2luLgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcUHJlcGFyZWA6IFByZXBhcmVzIHRoZSBib2R5IG9mIGEgcmVxdWVzdCBqdXN0IGJlZm9yZQogIHNlbmRpbmcuIFRoaXMgc3Vic2NyaWJlciBpcyBhdHRhY2hlZCB0byBhbGwgcmVxdWVzdHMgYnkgZGVmYXVsdC4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFJlZGlyZWN0YDogUmVwbGFjZXMgdGhlIFJlZGlyZWN0UGx1Z2luLgoKVGhlIGZvbGxvd2luZyBwbHVnaW5zIGhhdmUgYmVlbiByZW1vdmVkICh0aGlyZC1wYXJ0aWVzIGFyZSBmcmVlIHRvIHJlLWltcGxlbWVudAp0aGVzZSBpZiBuZWVkZWQpOgoKLSBgR3V6emxlSHR0cFxQbHVnaW5cQXN5bmNgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYEd1enpsZUh0dHBcUGx1Z2luXEN1cmxBdXRoYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXFBsdWdpblxFcnJvclJlc3BvbnNlXEVycm9yUmVzcG9uc2VQbHVnaW5gIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMKICBmdW5jdGlvbmFsaXR5IHNob3VsZCBpbnN0ZWFkIGJlIGltcGxlbWVudGVkIHdpdGggZXZlbnQgbGlzdGVuZXJzIHRoYXQgb2NjdXIKICBhZnRlciBub3JtYWwgcmVzcG9uc2UgcGFyc2luZyBvY2N1cnMgaW4gdGhlIGd1enpsZS9jb21tYW5kIHBhY2thZ2UuCgpUaGUgZm9sbG93aW5nIHBsdWdpbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIEd1enpsZSBwYWNrYWdlLCBidXQgYXJlIHByb3ZpZGVkCmluIHNlcGFyYXRlIHJlcG9zaXRvcmllczoKCi0gYEd1enpsZVxIdHRwXFBsdWdpblxCYWNrb2ZmUGx1Z2luYCBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYmUgbXVjaCBzaW1wbGVyCiAgdG8gYnVpbGQgY3VzdG9tIHJldHJ5IHBvbGljaWVzIHVzaW5nIHNpbXBsZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gdmFyaW91cwogIGNoYWluZWQgY2xhc3Nlcy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3JldHJ5LXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXENhY2hlXENhY2hlUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2NhY2hlLXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXExvZ1xMb2dQbHVnaW5gIGhhcyBtb3ZlZCB0bwogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvbG9nLXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXE1kNVxNZDVQbHVnaW5gIGhhcyBtb3ZlZCB0bwogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvbWVzc2FnZS1pbnRlZ3JpdHktc3Vic2NyaWJlcgotIGBHdXp6bGVcSHR0cFxQbHVnaW5cTW9ja1xNb2NrUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXE1vY2tTdWJzY3JpYmVyYC4KLSBgR3V6emxlXEh0dHBcUGx1Z2luXE9hdXRoXE9hdXRoUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL29hdXRoLXN1YnNjcmliZXIKCiMjIFNlcnZpY2UKClRoZSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGxheWVyIG9mIEd1enpsZSBoYXMgbW92ZWQgaW50byB0d28gc2VwYXJhdGUgcGFja2FnZXM6CgotIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvY29tbWFuZCBQcm92aWRlcyBhIGhpZ2ggbGV2ZWwgYWJzdHJhY3Rpb24gb3ZlciB3ZWIKICBzZXJ2aWNlcyBieSByZXByZXNlbnRpbmcgd2ViIHNlcnZpY2Ugb3BlcmF0aW9ucyB1c2luZyBjb21tYW5kcy4KLSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS1zZXJ2aWNlcyBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZgogIGd1enpsZS9jb21tYW5kIHRoYXQgcHJvdmlkZXMgcmVxdWVzdCBzZXJpYWxpemF0aW9uIGFuZCByZXNwb25zZSBwYXJzaW5nIHVzaW5nCiAgR3V6emxlIHNlcnZpY2UgZGVzY3JpcHRpb25zLgoKIyMgU3RyZWFtCgpTdHJlYW0gaGF2ZSBtb3ZlZCB0byBhIHNlcGFyYXRlIHBhY2thZ2UgYXZhaWxhYmxlIGF0Cmh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvc3RyZWFtcy4KCmBHdXp6bGVcU3RyZWFtXFN0cmVhbUludGVyZmFjZWAgaGFzIGJlZW4gZ2l2ZW4gYSBsYXJnZSB1cGRhdGUgdG8gY2xlYW5seSB0YWtlCm9uIHRoZSByZXNwb25zaWJpbGl0aWVzIG9mIGBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5YCBhbmQKYEd1enpsZVxIdHRwXEVudGl0eUJvZHlJbnRlcmZhY2VgIG5vdyB0aGF0IHRoZXkgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZSBudW1iZXIKb2YgbWV0aG9kcyBpbXBsZW1lbnRlZCBieSB0aGUgYFN0cmVhbUludGVyZmFjZWAgaGFzIGJlZW4gZHJhc3RpY2FsbHkgcmVkdWNlZCB0bwphbGxvdyBkZXZlbG9wZXJzIHRvIG1vcmUgZWFzaWx5IGV4dGVuZCBhbmQgZGVjb3JhdGUgc3RyZWFtIGJlaGF2aW9yLgoKIyMgUmVtb3ZlZCBtZXRob2RzIGZyb20gU3RyZWFtSW50ZXJmYWNlCgotIGBnZXRTdHJlYW1gIGFuZCBgc2V0U3RyZWFtYCBoYXZlIGJlZW4gcmVtb3ZlZCB0byBiZXR0ZXIgZW5jYXBzdWxhdGUgc3RyZWFtcy4KLSBgZ2V0TWV0YWRhdGFgIGFuZCBgc2V0TWV0YWRhdGFgIGhhdmUgYmVlbiByZW1vdmVkIGluIGZhdm9yIG9mCiAgYEd1enpsZUh0dHBcU3RyZWFtXE1ldGFkYXRhU3RyZWFtSW50ZXJmYWNlYC4KLSBgZ2V0V3JhcHBlcmAsIGBnZXRXcmFwcGVyRGF0YWAsIGBnZXRTdHJlYW1UeXBlYCwgYW5kIGBnZXRVcmlgIGhhdmUgYWxsIGJlZW4KICByZW1vdmVkLiBUaGlzIGRhdGEgaXMgYWNjZXNzaWJsZSB3aGVuCiAgdXNpbmcgc3RyZWFtcyB0aGF0IGltcGxlbWVudCBgR3V6emxlSHR0cFxTdHJlYW1cTWV0YWRhdGFTdHJlYW1JbnRlcmZhY2VgLgotIGByZXdpbmRgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBgc2VlaygwKWAgZm9yIGEgc2ltaWxhciBiZWhhdmlvci4KCiMjIFJlbmFtZWQgbWV0aG9kcwoKLSBgZGV0YWNoU3RyZWFtYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZXRhY2hgLgotIGBmZW9mYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBlb2ZgLgotIGBmdGVsbGAgaGFzIGJlZW4gcmVuYW1lZCB0byBgdGVsbGAuCi0gYHJlYWRMaW5lYCBoYXMgbW92ZWQgZnJvbSBhbiBpbnN0YW5jZSBtZXRob2QgdG8gYSBzdGF0aWMgY2xhc3MgbWV0aG9kIG9mCiAgYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbWAuCgojIyBNZXRhZGF0YSBzdHJlYW1zCgpgR3V6emxlSHR0cFxTdHJlYW1cTWV0YWRhdGFTdHJlYW1JbnRlcmZhY2VgIGhhcyBiZWVuIGFkZGVkIHRvIGRlbm90ZSBzdHJlYW1zCnRoYXQgY29udGFpbiBhZGRpdGlvbmFsIG1ldGFkYXRhIGFjY2Vzc2libGUgdmlhIGBnZXRNZXRhZGF0YSgpYC4KYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbUludGVyZmFjZTo6Z2V0TWV0YWRhdGFgIGFuZApgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpzZXRNZXRhZGF0YWAgaGF2ZSBiZWVuIHJlbW92ZWQuCgojIyBTdHJlYW1SZXF1ZXN0RmFjdG9yeQoKVGhlIGVudGlyZSBjb25jZXB0IG9mIHRoZSBTdHJlYW1SZXF1ZXN0RmFjdG9yeSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgd2F5IHRoaXMKd2FzIHVzZWQgaW4gR3V6emxlIDMgYnJva2UgdGhlIGFjdHVhbCBpbnRlcmZhY2Ugb2Ygc2VuZGluZyBzdHJlYW1pbmcgcmVxdWVzdHMKKGluc3RlYWQgb2YgZ2V0dGluZyBiYWNrIGEgUmVzcG9uc2UsIHlvdSBnb3QgYSBTdHJlYW1JbnRlcmZhY2UpLiBTdHJlYW1pbmcKUEhQIHJlcXVlc3RzIGFyZSBub3cgaW1wbGVtZW50ZWQgdGhyb3VnaCB0aGUgYEd1enpsZUh0dHBcQWRhcHRlclxTdHJlYW1BZGFwdGVyYC4KCjMuNiB0byAzLjcKLS0tLS0tLS0tLQoKIyMjIERlcHJlY2F0aW9ucwoKLSBZb3UgY2FuIG5vdyBlbmFibGUgRV9VU0VSX0RFUFJFQ0FURUQgd2FybmluZ3MgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgYW55IGRlcHJlY2F0ZWQgbWV0aG9kcy46CgpgYGBwaHAKXEd1enpsZVxDb21tb25cVmVyc2lvbjo6JGVtaXRXYXJuaW5ncyA9IHRydWU7CmBgYAoKVGhlIGZvbGxvd2luZyBBUElzIGFuZCBvcHRpb25zIGhhdmUgYmVlbiBtYXJrZWQgYXMgZGVwcmVjYXRlZDoKCi0gTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVzcG9uc2VCb2R5UmVwZWF0YWJsZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UgYCRyZXF1ZXN0LT5nZXRSZXNwb25zZUJvZHkoKS0+aXNSZXBlYXRhYmxlKClgIGluc3RlYWQuCi0gTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmNhbkNhY2hlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgR3V6emxlXFBsdWdpblxDYWNoZVxEZWZhdWx0Q2FuQ2FjaGVTdHJhdGVneS0+Y2FuQ2FjaGVSZXF1ZXN0KClgIGluc3RlYWQuCi0gTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmNhbkNhY2hlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgR3V6emxlXFBsdWdpblxDYWNoZVxEZWZhdWx0Q2FuQ2FjaGVTdHJhdGVneS0+Y2FuQ2FjaGVSZXF1ZXN0KClgIGluc3RlYWQuCi0gTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldElzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCi0gTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCi0gTWFya2VkIGBHdXp6bGVcQ2FjaGVcQ2FjaGVBZGFwdGVyRmFjdG9yeTo6ZmFjdG9yeSgpYCBhcyBkZXByZWNhdGVkCi0gTWFya2VkIGBHdXp6bGVcU2VydmljZVxDbGllbnQ6OmVuYWJsZU1hZ2ljTWV0aG9kcygpYCBhcyBkZXByZWNhdGVkLiBNYWdpYyBtZXRob2RzIGNhbiBubyBsb25nZXIgYmUgZGlzYWJsZWQgb24gYSBHdXp6bGVcU2VydmljZVxDbGllbnQuCi0gTWFya2VkIGBHdXp6bGVcUGFyc2VyXFVybFxVcmxQYXJzZXJgIGFzIGRlcHJlY2F0ZWQuIEp1c3QgdXNlIFBIUCdzIGBwYXJzZV91cmwoKWAgYW5kIHBlcmNlbnQgZW5jb2RlIHlvdXIgVVRGLTguCi0gTWFya2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdCgpYCBhcyBkZXByZWNhdGVkLgotIE1hcmtlZCBgR3V6emxlXFBsdWdpblxDdXJsQXV0aFxDdXJsQXV0aFBsdWdpbmAgYXMgZGVwcmVjYXRlZC4gVXNlCiAgYCRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvYXV0aCcsIGFycmF5KCd1c2VyJywgJ3Bhc3MnLCAnQmFzaWN8RGlnZXN0fE5UTE18QW55JykpO2Agb3IKICBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbignYXV0aCcsIGFycmF5KCd1c2VyJywgJ3Bhc3MnLCAnQmFzaWN8RGlnZXN0fE5UTE18QW55JykpO2AKCjMuNyBpbnRyb2R1Y2VzIGByZXF1ZXN0Lm9wdGlvbnNgIGFzIGEgcGFyYW1ldGVyIGZvciBhIGNsaWVudCBjb25maWd1cmF0aW9uIGFuZCBhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0byBhbGwgY3JlYXRpb25hbApyZXF1ZXN0IG1ldGhvZHMuIFdoZW4gcGFpcmVkIHdpdGggYSBjbGllbnQncyBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVzZSBvcHRpb25zIGFsbG93IHlvdSB0byBzcGVjaWZ5IGRlZmF1bHQgc2V0dGluZ3MKZm9yIHZhcmlvdXMgYXNwZWN0cyBvZiBhIHJlcXVlc3QuIEJlY2F1c2UgdGhlc2Ugb3B0aW9ucyBtYWtlIG90aGVyIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWR1bmRhbnQsIHNldmVyYWwKY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBtZXRob2RzIG9mIGEgY2xpZW50IGFuZCBBYnN0cmFjdENvbW1hbmQgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuCgotIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpnZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgYCRjbGllbnQtPmdldERlZmF1bHRPcHRpb24oJ2hlYWRlcnMnKWAuCi0gTWFya2VkIGBHdXp6bGVcU2VydmljZVxDbGllbnQ6OnNldERlZmF1bHRIZWFkZXJzKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbignaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLgotIE1hcmtlZCAncmVxdWVzdC5wYXJhbXMnIGZvciBgR3V6emxlXEh0dHBcQ2xpZW50YCBhcyBkZXByZWNhdGVkLiBVc2UgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ3BhcmFtcy97cGFyYW1fbmFtZX0nLCAndmFsdWUnKWAKLSBNYXJrZWQgJ2NvbW1hbmQuaGVhZGVycycsICdjb21tYW5kLnJlc3BvbnNlX2JvZHknIGFuZCAnY29tbWFuZC5vbl9jb21wbGV0ZScgYXMgZGVwcmVjYXRlZCBmb3IgQWJzdHJhY3RDb21tYW5kLiBUaGVzZSB3aWxsIHdvcmsgdGhyb3VnaCBHdXp6bGUgNC4wCgogICAgICAgICRjb21tYW5kID0gJGNsaWVudC0+Z2V0Q29tbWFuZCgnZm9vJywgYXJyYXkoCiAgICAgICAgICAgICdjb21tYW5kLmhlYWRlcnMnID0+IGFycmF5KCdUZXN0JyA9PiAnMTIzJyksCiAgICAgICAgICAgICdjb21tYW5kLnJlc3BvbnNlX2JvZHknID0+ICcvcGF0aC90by9maWxlJwogICAgICAgICkpOwoKICAgICAgICAvLyBTaG91bGQgYmUgY2hhbmdlZCB0bzoKCiAgICAgICAgJGNvbW1hbmQgPSAkY2xpZW50LT5nZXRDb21tYW5kKCdmb28nLCBhcnJheSgKICAgICAgICAgICAgJ2NvbW1hbmQucmVxdWVzdF9vcHRpb25zJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICdoZWFkZXJzJyA9PiBhcnJheSgnVGVzdCcgPT4gJzEyMycpLAogICAgICAgICAgICAgICAgJ3NhdmVfYXMnID0+ICcvcGF0aC90by9maWxlJwogICAgICAgICAgICApCiAgICAgICAgKSk7CgojIyMgSW50ZXJmYWNlIGNoYW5nZXMKCkFkZGl0aW9ucyBhbmQgY2hhbmdlcyAoeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgYW55IGltcGxlbWVudGF0aW9ucyBvciBzdWJjbGFzc2VzIHlvdSBtYXkgaGF2ZSBjcmVhdGVkKToKCi0gQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlYDoKICBjcmVhdGVSZXF1ZXN0LCBoZWFkLCBkZWxldGUsIHB1dCwgcGF0Y2gsIHBvc3QsIG9wdGlvbnMsIHByZXBhcmVSZXF1ZXN0Ci0gQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U6OmNyZWF0ZVJlcXVlc3QoKWAKLSBBZGRlZCBhbiBgYXBwbHlPcHRpb25zKClgIG1ldGhvZCB0byBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlYAotIENoYW5nZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRib2R5ID0gbnVsbClgIHRvCiAgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRvcHRpb25zID0gYXJyYXkoKSlgLiBZb3UgY2FuIHN0aWxsIHBhc3MgaW4gYQogIHJlc291cmNlLCBzdHJpbmcsIG9yIEVudGl0eUJvZHkgaW50byB0aGUgJG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGRvd25sb2FkIGxvY2F0aW9uIG9mIHRoZSByZXNwb25zZS4KLSBDaGFuZ2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246Ol9fY29uc3RydWN0KCRkYXRhKWAgdG8gbm8gbG9uZ2VyIGFjY2VwdHMgYSBudWxsIHZhbHVlIGZvciBgJGRhdGFgIGJ1dCBhCiAgZGVmYXVsdCBgYXJyYXkoKWAKLSBBZGRlZCBgR3V6emxlXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OmlzUmVwZWF0YWJsZWAKLSBNYWRlIGBHdXp6bGVcSHR0cFxDbGllbnQ6OmV4cGFuZFRlbXBsYXRlYCBhbmQgYGdldFVyaVRlbXBsYXRlYCBwcm90ZWN0ZWQgbWV0aG9kcy4KClRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3ZXJlIHJlbW92ZWQgZnJvbSBpbnRlcmZhY2VzLiBBbGwgb2YgdGhlc2UgbWV0aG9kcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIHRoZSBjb25jcmV0ZSBjbGFzc2VzCnRoYXQgaW1wbGVtZW50IHRoZW0sIGJ1dCB5b3Ugc2hvdWxkIHVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlIGFsdGVybmF0aXZlIG1ldGhvZHM6CgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0RGVmYXVsdEhlYWRlcnMoKS4gVXNlCiAgYCRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLiBvcgogIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnLCBhcnJheSgnaGVhZGVyX25hbWUnID0+ICd2YWx1ZScpKWAgb3IKICBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbignaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLiBvcgogIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzJywgYXJyYXkoJ2hlYWRlcl9uYW1lJyA9PiAndmFsdWUnKSlgLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0RGVmYXVsdEhlYWRlcnMoKS4gVXNlIGAkY2xpZW50LT5nZXRDb25maWcoKS0+Z2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnKWAuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpleHBhbmRUZW1wbGF0ZSgpYC4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXRSZXF1ZXN0RmFjdG9yeSgpYC4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXRDdXJsTXVsdGkoKWAuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmNhbkNhY2hlYC4gVXNlIHRoZSBDYWNoZVBsdWdpbi4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OnNldElzUmVkaXJlY3RgLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4uCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjppc1JlZGlyZWN0YC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luLgoKIyMjIENhY2hlIHBsdWdpbiBicmVha2luZyBjaGFuZ2VzCgotIENhY2hlS2V5UHJvdmlkZXJJbnRlcmZhY2UgYW5kIERlZmF1bHRDYWNoZUtleVByb3ZpZGVyIGFyZSBubyBsb25nZXIgdXNlZC4gQWxsIG9mIHRoaXMgbG9naWMgaXMgaGFuZGxlZCBpbiBhCiAgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlLiBUaGVzZSB0d28gb2JqZWN0cyBhbmQgaW50ZXJmYWNlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLgotIEFsd2F5cyBzZXR0aW5nIFgtY2FjaGUgaGVhZGVycyBvbiBjYWNoZWQgcmVzcG9uc2VzCi0gRGVmYXVsdCBjYWNoZSBUVExzIGFyZSBub3cgaGFuZGxlZCBieSB0aGUgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlIG9mIGEgQ2FjaGVQbHVnaW4KLSBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpjYWNoZSgka2V5LCBSZXNwb25zZSAkcmVzcG9uc2UsICR0dGwgPSBudWxsKWAgaGFzIGNoYW5nZWQgdG8gYGNhY2hlKFJlcXVlc3RJbnRlcmZhY2UKICAkcmVxdWVzdCwgUmVzcG9uc2UgJHJlc3BvbnNlKTtgCi0gYENhY2hlU3RvcmFnZUludGVyZmFjZTo6ZmV0Y2goJGtleSlgIGhhcyBjaGFuZ2VkIHRvIGBmZXRjaChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTtgCi0gYENhY2hlU3RvcmFnZUludGVyZmFjZTo6ZGVsZXRlKCRrZXkpYCBoYXMgY2hhbmdlZCB0byBgZGVsZXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpO2AKLSBBZGRlZCBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpwdXJnZSgkdXJsKWAKLSBgRGVmYXVsdFJldmFsaWRhdGlvbjo6X19jb25zdHJ1Y3QoQ2FjaGVLZXlQcm92aWRlckludGVyZmFjZSAkY2FjaGVLZXksIENhY2hlU3RvcmFnZUludGVyZmFjZSAkY2FjaGUsIENhY2hlUGx1Z2luCiAgJHBsdWdpbilgIGhhcyBjaGFuZ2VkIHRvIGBEZWZhdWx0UmV2YWxpZGF0aW9uOjpfX2NvbnN0cnVjdChDYWNoZVN0b3JhZ2VJbnRlcmZhY2UgJGNhY2hlLAogIENhbkNhY2hlU3RyYXRlZ3lJbnRlcmZhY2UgJGNhbkNhY2hlID0gbnVsbClgCi0gQWRkZWQgYFJldmFsaWRhdGlvbkludGVyZmFjZTo6c2hvdWxkUmV2YWxpZGF0ZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBSZXNwb25zZSAkcmVzcG9uc2UpYAoKMy41IHRvIDMuNgotLS0tLS0tLS0tCgoqIE1peGVkIGNhc2luZyBvZiBoZWFkZXJzIGFyZSBub3cgZm9yY2VkIHRvIGJlIGEgc2luZ2xlIGNvbnNpc3RlbnQgY2FzaW5nIGFjcm9zcyBhbGwgdmFsdWVzIGZvciB0aGF0IGhlYWRlci4KKiBNZXNzYWdlcyBpbnRlcm5hbGx5IHVzZSBhIEhlYWRlckNvbGxlY3Rpb24gb2JqZWN0IHRvIGRlbGVnYXRlIGhhbmRsaW5nIGNhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIHJlc29sdXRpb24KKiBSZW1vdmVkIHRoZSB3aG9sZSBjaGFuZ2VkSGVhZGVyKCkgZnVuY3Rpb24gc3lzdGVtIG9mIG1lc3NhZ2VzIGJlY2F1c2UgYWxsIGhlYWRlciBjaGFuZ2VzIG5vdyBnbyB0aHJvdWdoIGFkZEhlYWRlcigpLgogIEZvciBleGFtcGxlLCBzZXRIZWFkZXIoKSBmaXJzdCByZW1vdmVzIHRoZSBoZWFkZXIgdXNpbmcgdW5zZXQgb24gYSBIZWFkZXJDb2xsZWN0aW9uIGFuZCB0aGVuIGNhbGxzIGFkZEhlYWRlcigpLgogIEtlZXBpbmcgdGhlIEhvc3QgaGVhZGVyIGFuZCBVUkwgaG9zdCBpbiBzeW5jIGlzIG5vdyBoYW5kbGVkIGJ5IG92ZXJyaWRpbmcgdGhlIGFkZEhlYWRlciBtZXRob2QgaW4gUmVxdWVzdC4KKiBTcGVjaWZpYyBoZWFkZXIgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBjcmVhdGVkIGZvciBjb21wbGV4IGhlYWRlcnMuIFdoZW4gYSBtZXNzYWdlIGNyZWF0ZXMgYSBoZWFkZXIsIGl0IHVzZXMgYQogIEhlYWRlckZhY3Rvcnkgd2hpY2ggY2FuIG1hcCBzcGVjaWZpYyBoZWFkZXJzIHRvIHNwZWNpZmljIGhlYWRlciBjbGFzc2VzLiBUaGVyZSBpcyBub3cgYSBMaW5rIGhlYWRlciBhbmQKICBDYWNoZUNvbnRyb2wgaGVhZGVyIGltcGxlbWVudGF0aW9uLgoqIE1vdmVkIGdldExpbmtzKCkgZnJvbSBSZXNwb25zZSB0byBqdXN0IGJlIHVzZWQgb24gYSBMaW5rIGhlYWRlciBvYmplY3QuCgpJZiB5b3UgcHJldmlvdXNseSByZWxpZWQgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdygpLCB0aGVuIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgdGhlCkhlYWRlckludGVyZmFjZSAoZS5nLiB0b0FycmF5KCksIGdldEFsbCgpLCBldGMuKS4KCiMjIyBJbnRlcmZhY2UgY2hhbmdlcwoKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFVyaVRlbXBsYXRlCiogUmVtb3ZlZCBmcm9tIGludGVyZmFjZTogR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXRDdXJsTXVsdGkoKQoqIFJlbW92ZWQgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpyZWNlaXZlZFJlcXVlc3RIZWFkZXIoKSBhbmQgaW1wbGVtZW50ZWQgdGhpcyBmdW5jdGlvbmFsaXR5IGluCiAgR3V6emxlXEh0dHBcQ3VybFxSZXF1ZXN0TWVkaWF0b3IKKiBSZW1vdmVkIHRoZSBvcHRpb25hbCAkYXNTdHJpbmcgcGFyYW1ldGVyIGZyb20gTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyKCkuIEp1c3QgY2FzdCB0aGUgaGVhZGVyIHRvIGEgc3RyaW5nLgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICR0cnlDaHVua2VkVHJhbnNmZXIgb3B0aW9uIGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0SW50ZXJmYWNlCiogUmVtb3ZlZCB0aGUgJGFzT2JqZWN0cyBhcmd1bWVudCBmcm9tIEd1enpsZVxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVycygpCgojIyMgUmVtb3ZlZCBkZXByZWNhdGVkIGZ1bmN0aW9ucwoKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OmdldCgpLiBVc2UgZ2V0UGFyc2VyKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OnNldCgpLiBVc2UgcmVnaXN0ZXJQYXJzZXIoKS4KCiMjIyBEZXByZWNhdGlvbnMKCiogVGhlIGFiaWxpdHkgdG8gY2FzZS1pbnNlbnNpdGl2ZWx5IHNlYXJjaCBmb3IgaGVhZGVyIHZhbHVlcwoqIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyOjpoYXNFeGFjdEhlYWRlcgoqIEd1enpsZVxIdHRwXE1lc3NhZ2VcSGVhZGVyOjpyYXcuIFVzZSBnZXRBbGwoKQoqIERlcHJlY2F0ZWQgY2FjaGUgY29udHJvbCBzcGVjaWZpYyBtZXRob2RzIG9uIEd1enpsZVxIdHRwXE1lc3NhZ2VcQWJzdHJhY3RNZXNzYWdlLiBVc2UgdGhlIENhY2hlQ29udHJvbCBoZWFkZXIgb2JqZWN0CiAgaW5zdGVhZC4KCiMjIyBPdGhlciBjaGFuZ2VzCgoqIEFsbCByZXNwb25zZSBoZWFkZXIgaGVscGVyIGZ1bmN0aW9ucyByZXR1cm4gYSBzdHJpbmcgcmF0aGVyIHRoYW4gbWl4aW5nIEhlYWRlciBvYmplY3RzIGFuZCBzdHJpbmdzIGluY29uc2lzdGVudGx5CiogUmVtb3ZlZCBjVVJMIGJsYWNrbGlzdCBzdXBwb3J0LiBUaGlzIGlzIG5vIGxvbmdlciBuZWNlc3Nhcnkgbm93IHRoYXQgRXhwZWN0LCBBY2NlcHQsIGV0Yy4gYXJlIG1hbmFnZWQgYnkgR3V6emxlCiAgZGlyZWN0bHkgdmlhIGludGVyZmFjZXMKKiBSZW1vdmVkIHRoZSBpbmplY3Rpbmcgb2YgYSByZXF1ZXN0IG9iamVjdCBvbnRvIGEgcmVzcG9uc2Ugb2JqZWN0LiBUaGUgbWV0aG9kcyB0byBnZXQgYW5kIHNldCBhIHJlcXVlc3Qgc3RpbGwgZXhpc3QKICBidXQgYXJlIGEgbm8tb3AgdW50aWwgcmVtb3ZlZC4KKiBNb3N0IGNsYXNzZXMgdGhhdCB1c2VkIHRvIHJlcXVpcmUgYSBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kSW50ZXJmYWNlYCB0eXBlaGludCBub3cgcmVxdWVzdCBhCiAgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQXJyYXlDb21tYW5kSW50ZXJmYWNlYC4KKiBBZGRlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpzdGFydFJlc3BvbnNlKClgIHRvIHRoZSBSZXF1ZXN0SW50ZXJmYWNlIHRvIGhhbmRsZSBpbmplY3RpbmcgYSByZXNwb25zZQogIG9uIGEgcmVxdWVzdCB3aGlsZSB0aGUgcmVxdWVzdCBpcyBzdGlsbCBiZWluZyB0cmFuc2ZlcnJlZAoqIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIG5vdyBleHRlbmRzIGZyb20gVG9BcnJheUludGVyZmFjZSBhbmQgQXJyYXlBY2Nlc3MKCjMuMyB0byAzLjQKLS0tLS0tLS0tLQoKQmFzZSBVUkxzIG9mIGEgY2xpZW50IG5vdyBmb2xsb3cgdGhlIHJ1bGVzIG9mIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4yIHdoZW4gbWVyZ2luZyBVUkxzLgoKMy4yIHRvIDMuMwotLS0tLS0tLS0tCgojIyMgUmVzcG9uc2U6OmdldEV0YWcoKSBxdW90ZSBzdHJpcHBpbmcgcmVtb3ZlZAoKYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldEV0YWcoKWAgbm8gbG9uZ2VyIHN0cmlwcyBxdW90ZXMgYXJvdW5kIHRoZSBFVGFnIHJlc3BvbnNlIGhlYWRlcgoKIyMjIFJlbW92ZWQgYEd1enpsZVxIdHRwXFV0aWxzYAoKVGhlIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3Mgd2FzIHJlbW92ZWQuIFRoaXMgY2xhc3Mgd2FzIG9ubHkgdXNlZCBmb3IgdGVzdGluZy4KCiMjIyBTdHJlYW0gd3JhcHBlciBhbmQgdHlwZQoKYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0cmVhbVR5cGUoKWAgYXJlIG5vIGxvbmdlciBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgoKIyMjIGN1cmwuZW1pdF9pbyBiZWNhbWUgZW1pdF9pbwoKRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nIHRoZQonZW1pdF9pbycga2V5LiBUaGlzIHdhcyBwcmV2aW91c2x5IHNldCB1bmRlciBhIHJlcXVlc3QncyBwYXJhbWV0ZXJzIHVzaW5nICdjdXJsLmVtaXRfaW8nCgozLjEgdG8gMy4yCi0tLS0tLS0tLS0KCiMjIyBDdXJsTXVsdGkgaXMgbm8gbG9uZ2VyIHJldXNlZCBnbG9iYWxseQoKQmVmb3JlIDMuMiwgdGhlIHNhbWUgQ3VybE11bHRpIG9iamVjdCB3YXMgcmV1c2VkIGdsb2JhbGx5IGZvciBlYWNoIGNsaWVudC4gVGhpcyBjYW4gY2F1c2UgaXNzdWUgd2hlcmUgcGx1Z2lucyBhZGRlZAp0byBhIHNpbmdsZSBjbGllbnQgY2FuIHBvbGx1dGUgcmVxdWVzdHMgZGlzcGF0Y2hlZCBmcm9tIG90aGVyIGNsaWVudHMuCgpJZiB5b3Ugc3RpbGwgd2lzaCB0byByZXVzZSB0aGUgc2FtZSBDdXJsTXVsdGkgb2JqZWN0IHdpdGggZWFjaCBjbGllbnQsIHRoZW4geW91IGNhbiBhZGQgYSBsaXN0ZW5lciB0byB0aGUKU2VydmljZUJ1aWxkZXIncyBgc2VydmljZV9idWlsZGVyLmNyZWF0ZV9jbGllbnRgIGV2ZW50IHRvIGluamVjdCBhIGN1c3RvbSBDdXJsTXVsdGkgb2JqZWN0IGludG8gZWFjaCBjbGllbnQgYXMgaXQgaXMKY3JlYXRlZC4KCmBgYHBocAokbXVsdGkgPSBuZXcgR3V6emxlXEh0dHBcQ3VybFxDdXJsTXVsdGkoKTsKJGJ1aWxkZXIgPSBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5KCcvcGF0aC90by9jb25maWcuanNvbicpOwokYnVpbGRlci0+YWRkTGlzdGVuZXIoJ3NlcnZpY2VfYnVpbGRlci5jcmVhdGVfY2xpZW50JywgZnVuY3Rpb24gKCRldmVudCkgdXNlICgkbXVsdGkpIHsKICAgICRldmVudFsnY2xpZW50J10tPnNldEN1cmxNdWx0aSgkbXVsdGkpOwp9Cn0pOwpgYGAKCiMjIyBObyBkZWZhdWx0IHBhdGgKClVSTHMgbm8gbG9uZ2VyIGhhdmUgYSBkZWZhdWx0IHBhdGggdmFsdWUgb2YgJy8nIGlmIG5vIHBhdGggd2FzIHNwZWNpZmllZC4KCkJlZm9yZToKCmBgYHBocAokcmVxdWVzdCA9ICRjbGllbnQtPmdldCgnaHR0cDovL3d3dy5mb28uY29tJyk7CmVjaG8gJHJlcXVlc3QtPmdldFVybCgpOwovLyA+PiBodHRwOi8vd3d3LmZvby5jb20vCmBgYAoKQWZ0ZXI6CgpgYGBwaHAKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJ2h0dHA6Ly93d3cuZm9vLmNvbScpOwplY2hvICRyZXF1ZXN0LT5nZXRVcmwoKTsKLy8gPj4gaHR0cDovL3d3dy5mb28uY29tCmBgYAoKIyMjIExlc3MgdmVyYm9zZSBCYWRSZXNwb25zZUV4Y2VwdGlvbgoKVGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGZvciBgR3V6emxlXEh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uYCBubyBsb25nZXIgY29udGFpbnMgdGhlIGZ1bGwgSFRUUCByZXF1ZXN0IGFuZApyZXNwb25zZSBpbmZvcm1hdGlvbi4gWW91IGNhbiwgaG93ZXZlciwgZ2V0IGFjY2VzcyB0byB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0IGJ5IGNhbGxpbmcgYGdldFJlcXVlc3QoKWAgb3IKYGdldFJlc3BvbnNlKClgIG9uIHRoZSBleGNlcHRpb24gb2JqZWN0LgoKIyMjIFF1ZXJ5IHBhcmFtZXRlciBhZ2dyZWdhdGlvbgoKTXVsdGktdmFsdWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5vIGxvbmdlciBhZ2dyZWdhdGVkIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24uIGBHdXp6bGVcSHR0cFxRdWVyeWAgbm93IGhhcyBhCnNldEFnZ3JlZ2F0b3IoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYEd1enpsZVxIdHRwXFF1ZXJ5QWdncmVnYXRvclxRdWVyeUFnZ3JlZ2F0b3JJbnRlcmZhY2VgIG9iamVjdC4gVGhpcyBvYmplY3QgaXMKcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBhZ2dyZWdhdGlvbiBvZiBtdWx0aS12YWx1ZWQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcyBpbnRvIGEgZmxhdHRlbmVkIGhhc2guCgoyLjggdG8gMy54Ci0tLS0tLS0tLS0KCiMjIyBHdXp6bGVcU2VydmljZVxJbnNwZWN0b3IKCkNoYW5nZSBgXEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6ZnJvbUNvbmZpZ2AgdG8gYFxHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmZyb21Db25maWdgCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxTZXJ2aWNlXEluc3BlY3RvcjsKCmNsYXNzIFlvdXJDbGllbnQgZXh0ZW5kcyBcR3V6emxlXFNlcnZpY2VcQ2xpZW50CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFjdG9yeSgkY29uZmlnID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkZGVmYXVsdCA9IGFycmF5KCk7CiAgICAgICAgJHJlcXVpcmVkID0gYXJyYXkoJ2Jhc2VfdXJsJywgJ3VzZXJuYW1lJywgJ2FwaV9rZXknKTsKICAgICAgICAkY29uZmlnID0gSW5zcGVjdG9yOjpmcm9tQ29uZmlnKCRjb25maWcsICRkZWZhdWx0LCAkcmVxdWlyZWQpOwoKICAgICAgICAkY2xpZW50ID0gbmV3IHNlbGYoCiAgICAgICAgICAgICRjb25maWctPmdldCgnYmFzZV91cmwnKSwKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCd1c2VybmFtZScpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ2FwaV9rZXknKQogICAgICAgICk7CiAgICAgICAgJGNsaWVudC0+c2V0Q29uZmlnKCRjb25maWcpOwoKICAgICAgICAkY2xpZW50LT5zZXREZXNjcmlwdGlvbihTZXJ2aWNlRGVzY3JpcHRpb246OmZhY3RvcnkoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xpZW50Lmpzb24nKSk7CgogICAgICAgIHJldHVybiAkY2xpZW50OwogICAgfQpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb247CgpjbGFzcyBZb3VyQ2xpZW50IGV4dGVuZHMgXEd1enpsZVxTZXJ2aWNlXENsaWVudAp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhY3RvcnkoJGNvbmZpZyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGRlZmF1bHQgPSBhcnJheSgpOwogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCdiYXNlX3VybCcsICd1c2VybmFtZScsICdhcGlfa2V5Jyk7CiAgICAgICAgJGNvbmZpZyA9IENvbGxlY3Rpb246OmZyb21Db25maWcoJGNvbmZpZywgJGRlZmF1bHQsICRyZXF1aXJlZCk7CgogICAgICAgICRjbGllbnQgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCdiYXNlX3VybCcpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ3VzZXJuYW1lJyksCiAgICAgICAgICAgICRjb25maWctPmdldCgnYXBpX2tleScpCiAgICAgICAgKTsKICAgICAgICAkY2xpZW50LT5zZXRDb25maWcoJGNvbmZpZyk7CgogICAgICAgICRjbGllbnQtPnNldERlc2NyaXB0aW9uKFNlcnZpY2VEZXNjcmlwdGlvbjo6ZmFjdG9yeShfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGllbnQuanNvbicpKTsKCiAgICAgICAgcmV0dXJuICRjbGllbnQ7CiAgICB9CmBgYAoKIyMjIENvbnZlcnQgWE1MIFNlcnZpY2UgRGVzY3JpcHRpb25zIHRvIEpTT04KCioqQmVmb3JlKioKCmBgYHhtbAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8Y2xpZW50PgogICAgPGNvbW1hbmRzPgogICAgICAgIDwhLS0gR3JvdXBzIC0tPgogICAgICAgIDxjb21tYW5kIG5hbWU9Imxpc3RfZ3JvdXBzIiBtZXRob2Q9IkdFVCIgdXJpPSJncm91cHMuanNvbiI+CiAgICAgICAgICAgIDxkb2M+R2V0IGEgbGlzdCBvZiBncm91cHM8L2RvYz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0ic2VhcmNoX2dyb3VwcyIgbWV0aG9kPSJHRVQiIHVyaT0nc2VhcmNoLmpzb24/cXVlcnk9Int7cXVlcnl9fSB0eXBlOmdyb3VwIic+CiAgICAgICAgICAgIDxkb2M+VXNlcyBhIHNlYXJjaCBxdWVyeSB0byBnZXQgYSBsaXN0IG9mIGdyb3VwczwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0icXVlcnkiIHR5cGU9InN0cmluZyIgcmVxdWlyZWQ9InRydWUiIC8+CiAgICAgICAgPC9jb21tYW5kPgogICAgICAgIDxjb21tYW5kIG5hbWU9ImNyZWF0ZV9ncm91cCIgbWV0aG9kPSJQT1NUIiB1cmk9Imdyb3Vwcy5qc29uIj4KICAgICAgICAgICAgPGRvYz5DcmVhdGUgYSBncm91cDwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGF0YSIgdHlwZT0iYXJyYXkiIGxvY2F0aW9uPSJib2R5IiBmaWx0ZXJzPSJqc29uX2VuY29kZSIgZG9jPSJHcm91cCBKU09OIi8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb250ZW50LVR5cGUiIGxvY2F0aW9uPSJoZWFkZXIiIHN0YXRpYz0iYXBwbGljYXRpb24vanNvbiIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJkZWxldGVfZ3JvdXAiIG1ldGhvZD0iREVMRVRFIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxkb2M+RGVsZXRlIGEgZ3JvdXAgYnkgSUQ8L2RvYz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImlkIiB0eXBlPSJpbnRlZ2VyIiByZXF1aXJlZD0idHJ1ZSIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJnZXRfZ3JvdXAiIG1ldGhvZD0iR0VUIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0idXBkYXRlX2dyb3VwIiBtZXRob2Q9IlBVVCIgdXJpPSJncm91cHMve3tpZH19Lmpzb24iPgogICAgICAgICAgICA8ZG9jPlVwZGF0ZSBhIGdyb3VwPC9kb2M+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRhdGEiIHR5cGU9ImFycmF5IiBsb2NhdGlvbj0iYm9keSIgZmlsdGVycz0ianNvbl9lbmNvZGUiIGRvYz0iR3JvdXAgSlNPTiIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udGVudC1UeXBlIiBsb2NhdGlvbj0iaGVhZGVyIiBzdGF0aWM9ImFwcGxpY2F0aW9uL2pzb24iLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICA8L2NvbW1hbmRzPgo8L2NsaWVudD4KYGBgCgoqKkFmdGVyKioKCmBgYGpzb24KewogICAgIm5hbWUiOiAgICAgICAiWmVuZGVzayBSRVNUIEFQSSB2MiIsCiAgICAiYXBpVmVyc2lvbiI6ICIyMDEyLTEyLTMxIiwKICAgICJkZXNjcmlwdGlvbiI6IlByb3ZpZGVzIGFjY2VzcyB0byBaZW5kZXNrIHZpZXdzLCBncm91cHMsIHRpY2tldHMsIHRpY2tldCBmaWVsZHMsIGFuZCB1c2VycyIsCiAgICAib3BlcmF0aW9ucyI6IHsKICAgICAgICAibGlzdF9ncm91cHMiOiAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzLmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkdldCBhIGxpc3Qgb2YgZ3JvdXBzIgogICAgICAgIH0sCiAgICAgICAgInNlYXJjaF9ncm91cHMiOnsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJHRVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgInNlYXJjaC5qc29uP3F1ZXJ5PVwie3F1ZXJ5fSB0eXBlOmdyb3VwXCIiLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVzZXMgYSBzZWFyY2ggcXVlcnkgdG8gZ2V0IGEgbGlzdCBvZiBncm91cHMiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgInF1ZXJ5Ijp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJaZW5kZXNrIFNlYXJjaCBRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNyZWF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQT1NUIiwKICAgICAgICAgICAgInVyaSI6ICAgICAgICJncm91cHMuanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiQ3JlYXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZGVsZXRlX2dyb3VwIjogewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkRFTEVURSIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiRGVsZXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImlkIjp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCB0byBkZWxldGUgYnkgSUQiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZ2V0X2dyb3VwIjogICAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiR2V0IGEgdGlja2V0IiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ewogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ICAgInVyaSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgdG8gZ2V0IGJ5IElEIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInVwZGF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQVVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy97aWR9Lmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVwZGF0ZSBhIGdyb3VwIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJ1cmkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6Ikdyb3VwIHRvIHVwZGF0ZSBieSBJRCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQp9CmBgYAoKIyMjIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbgoKQ29tbWFuZHMgYXJlIG5vdyBjYWxsZWQgT3BlcmF0aW9ucwoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcU2VydmljZVxEZXNjcmlwdGlvblxTZXJ2aWNlRGVzY3JpcHRpb247Cgokc2QgPSBuZXcgU2VydmljZURlc2NyaXB0aW9uKCk7CiRzZC0+Z2V0Q29tbWFuZHMoKTsgICAgIC8vIEByZXR1cm5zIEFwaUNvbW1hbmRJbnRlcmZhY2VbXQokc2QtPmhhc0NvbW1hbmQoJG5hbWUpOwokc2QtPmdldENvbW1hbmQoJG5hbWUpOyAvLyBAcmV0dXJucyBBcGlDb21tYW5kSW50ZXJmYWNlfG51bGwKJHNkLT5hZGRDb21tYW5kKCRjb21tYW5kKTsgLy8gQHBhcmFtIEFwaUNvbW1hbmRJbnRlcmZhY2UgJGNvbW1hbmQKYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXFNlcnZpY2VcRGVzY3JpcHRpb25cU2VydmljZURlc2NyaXB0aW9uOwoKJHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbigpOwokc2QtPmdldE9wZXJhdGlvbnMoKTsgICAgICAgICAgIC8vIEByZXR1cm5zIE9wZXJhdGlvbkludGVyZmFjZVtdCiRzZC0+aGFzT3BlcmF0aW9uKCRuYW1lKTsKJHNkLT5nZXRPcGVyYXRpb24oJG5hbWUpOyAgICAgICAvLyBAcmV0dXJucyBPcGVyYXRpb25JbnRlcmZhY2V8bnVsbAokc2QtPmFkZE9wZXJhdGlvbigkb3BlcmF0aW9uKTsgIC8vIEBwYXJhbSBPcGVyYXRpb25JbnRlcmZhY2UgJG9wZXJhdGlvbgpgYGAKCiMjIyBHdXp6bGVcQ29tbW9uXEluZmxlY3Rpb25cSW5mbGVjdG9yCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcSW5mbGVjdGlvblxJbmZsZWN0b3JgCgojIyMgR3V6emxlXEh0dHBcUGx1Z2luCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcUGx1Z2luYC4gTWFueSBvdGhlciBjaGFuZ2VzIG9jY3VyIHdpdGhpbiB0aGlzIG5hbWVzcGFjZSBhbmQgYXJlIGRldGFpbGVkIGluIHRoZWlyIG93biBzZWN0aW9ucyBiZWxvdy4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cTG9nUGx1Z2luIGFuZCBHdXp6bGVcQ29tbW9uXExvZwoKTm93IGBHdXp6bGVcUGx1Z2luXExvZ1xMb2dQbHVnaW5gIGFuZCBgR3V6emxlXExvZ2AgcmVzcGVjdGl2ZWx5LgoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXExvZ1xDbG9zdXJlTG9nQWRhcHRlcjsKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxMb2dQbHVnaW47CgovKiogQHZhciBcR3V6emxlXEh0dHBcQ2xpZW50ICovCiRjbGllbnQ7CgovLyAkdmVyYm9zaXR5IGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyBkZXNpcmVkIG1lc3NhZ2UgdmVyYm9zaXR5IGxldmVsCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJHZlcmJvc2l0eSA9IExvZ1BsdWdpbjo6TE9HX1ZFUkJPU0UpOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcTG9nXENsb3N1cmVMb2dBZGFwdGVyOwp1c2UgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyOwp1c2UgR3V6emxlXFBsdWdpblxMb2dcTG9nUGx1Z2luOwoKLyoqIEB2YXIgXEd1enpsZVxIdHRwXENsaWVudCAqLwokY2xpZW50OwoKLy8gJGZvcm1hdCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGRlc2lyZWQgbWVzc2FnZSBmb3JtYXQgLS0gQHNlZSBNZXNzYWdlRm9ybWF0dGVyCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJGZvcm1hdCA9IE1lc3NhZ2VGb3JtYXR0ZXI6OkRFQlVHX0ZPUk1BVCk7CmBgYAoKIyMjIEd1enpsZVxIdHRwXFBsdWdpblxDdXJsQXV0aFBsdWdpbgoKTm93IGBHdXp6bGVcUGx1Z2luXEN1cmxBdXRoXEN1cmxBdXRoUGx1Z2luYC4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCgpOb3cgYEd1enpsZVxQbHVnaW5cQmFja29mZlxCYWNrb2ZmUGx1Z2luYCwgYW5kIG90aGVyIGNoYW5nZXMuCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW47CgokYmFja29mZlBsdWdpbiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4oJG1heFJldHJpZXMsIGFycmF5X21lcmdlKAogICAgICAgIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbjo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKCiRjbGllbnQtPmFkZFN1YnNjcmliZXIoJGJhY2tvZmZQbHVnaW4pOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcUGx1Z2luXEJhY2tvZmZcQmFja29mZlBsdWdpbjsKdXNlIEd1enpsZVxQbHVnaW5cQmFja29mZlxIdHRwQmFja29mZlN0cmF0ZWd5OwoKLy8gVXNlIGNvbnZlbmllbnQgZmFjdG9yeSBtZXRob2QgaW5zdGVhZCAtLSBzZWUgaW1wbGVtZW50YXRpb24gZm9yIGlkZWFzIG9mIHdoYXQKLy8geW91IGNhbiBkbyB3aXRoIGNoYWluaW5nIGJhY2tvZmYgc3RyYXRlZ2llcwokYmFja29mZlBsdWdpbiA9IEJhY2tvZmZQbHVnaW46OmdldEV4cG9uZW50aWFsQmFja29mZigkbWF4UmV0cmllcywgYXJyYXlfbWVyZ2UoCiAgICAgICAgSHR0cEJhY2tvZmZTdHJhdGVneTo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKJGNsaWVudC0+YWRkU3Vic2NyaWJlcigkYmFja29mZlBsdWdpbik7CmBgYAoKIyMjIEtub3duIElzc3VlcwoKIyMjIyBbQlVHXSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIGJlaGF2aW9yIGNoYW5nZWQgdW5pbnRlbnRpb25hbGx5LgoKKFNlZSAjMjE3KSAoRml4ZWQgaW4gMDlkYWViOGM2NjZmYjQ0NDk5YTA2NDZkNjU1YThhZTM2NDU2NTc1ZSkKCkluIHZlcnNpb24gMi44IHNldHRpbmcgdGhlIGBBY2NlcHQtRW5jb2RpbmdgIGhlYWRlciB3b3VsZCBzZXQgdGhlIENVUkxPUFRfRU5DT0RJTkcgb3B0aW9uLCB3aGljaCBwZXJtaXR0ZWQgY1VSTCB0bwpwcm9wZXJseSBoYW5kbGUgZ3ppcC9kZWZsYXRlIGNvbXByZXNzZWQgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4gSW4gdmVyc2lvbnMgYWZmZWN0ZWQgYnkgdGhpcyBidWcgdGhpcyBkb2VzIG5vdCBoYXBwZW4uClNlZSBpc3N1ZSAjMjE3IGZvciBhIHdvcmthcm91bmQsIG9yIHVzZSBhIHZlcnNpb24gY29udGFpbmluZyB0aGUgZml4Lgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDSEFOR0VMT0cKCgojIyAyLjUuMCAtIDIwMjYtMDYtMDIKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgcGFzc2luZyBub24taXRlcmFibGUgaW5wdXRzIHRvIHByb21pc2UgY29sbGVjdGlvbiBoZWxwZXJzIGFuZCBgRWFjaFByb21pc2VgCgoKIyMgMi40LjEgLSAyMDI2LTA1LTIwCgojIyMgRml4ZWQKCi0gRml4ZWQgY2FuY2VsbGluZyBzZXR0bGVkIGNvcm91dGluZXMgd2hlbiBubyBjdXJyZW50IHByb21pc2UgcmVtYWlucwoKCiMjIDIuNC4wIC0gMjAyNi0wNS0yMAoKIyMjIENoYW5nZWQKCi0gRW1wdHkgYEVhY2hQcm9taXNlYCBpbnN0YW5jZXMgbm93IHJlc29sdmUgd2hlbiB0aGUgdGFzayBxdWV1ZSBydW5zIHdpdGhvdXQgYHdhaXQoKWAKCgojIyAyLjMuMSAtIDIwMjYtMDUtMTkKCiMjIyBGaXhlZAoKLSBGaXhlZCBgVXRpbHM6Omluc3BlY3QoKWAgcmV0dXJuaW5nIHRoZSBpbnRlcm5hbCByZWFzb24gYXJyYXkgaW5zdGVhZCBvZiB0aGUgYEFnZ3JlZ2F0ZUV4Y2VwdGlvbmAKCgojIyAyLjMuMCAtIDIwMjUtMDgtMjIKCiMjIyBBZGRlZAoKLSBQSFAgOC41IHN1cHBvcnQKCgojIyAyLjIuMCAtIDIwMjUtMDMtMjcKCiMjIyBGaXhlZAoKLSBSZXZlcnQgIkFsbG93IGFuIGVtcHR5IEVhY2hQcm9taXNlIHRvIGJlIHJlc29sdmVkIGJ5IHJ1bm5pbmcgdGhlIHF1ZXVlIgoKCiMjIDIuMS4wIC0gMjAyNS0wMy0yNwoKIyMjIEFkZGVkCgotIEFsbG93IGFuIGVtcHR5IEVhY2hQcm9taXNlIHRvIGJlIHJlc29sdmVkIGJ5IHJ1bm5pbmcgdGhlIHF1ZXVlCgoKIyMgMi4wLjQgLSAyMDI0LTEwLTE3CgojIyMgRml4ZWQKCi0gT25jZSBzZXR0bGVkLCBkb24ndCBhbGxvdyBmdXJ0aGVyIHJlamVjdGlvbiBvZiBhZGRpdGlvbmFsIHByb21pc2VzCgoKIyMgMi4wLjMgLSAyMDI0LTA3LTE4CgojIyMgQ2hhbmdlZAoKLSBQSFAgOC40IHN1cHBvcnQKCgojIyAyLjAuMiAtIDIwMjMtMTItMDMKCiMjIyBDaGFuZ2VkCgotIFJlcGxhY2VkIGBjYWxsX3VzZXJfZnVuYypgIHdpdGggbmF0aXZlIGNhbGxzCgoKIyMgMi4wLjEgLSAyMDIzLTA4LTAzCgojIyMgQ2hhbmdlZAoKLSBQSFAgOC4zIHN1cHBvcnQKCgojIyAyLjAuMCAtIDIwMjMtMDUtMjEKCiMjIyBBZGRlZAoKLSBBZGRlZCBQSFAgNyB0eXBlIGhpbnRzCgojIyMgQ2hhbmdlZAoKLSBBbGwgcHJldmlvdXNseSBub24tZmluYWwgbm9uLWV4Y2VwdGlvbiBjbGFzc2VzIGhhdmUgYmVlbiBtYXJrZWQgYXMgc29mdC1maW5hbAoKIyMjIFJlbW92ZWQKCi0gRHJvcHBlZCBQSFAgPCA3LjIgc3VwcG9ydAotIEFsbCBmdW5jdGlvbnMgaW4gdGhlIGBHdXp6bGVIdHRwXFByb21pc2VgIG5hbWVzcGFjZQoKCiMjIDEuNS4zIC0gMjAyMy0wNS0yMQoKIyMjIENoYW5nZWQKCi0gUmVtb3ZlZCByZW1haW5pbmcgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMKCgojIyAxLjUuMiAtIDIwMjItMDgtMDcKCiMjIyBDaGFuZ2VkCgotIE9mZmljaWFsbHkgc3VwcG9ydCBQSFAgOC4yCgoKIyMgMS41LjEgLSAyMDIxLTEwLTIyCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ICJDYWxsIGhhbmRsZXIgd2hlbiB3YWl0aW5nIG9uIGZ1bGZpbGxlZC9yZWplY3RlZCBQcm9taXNlIgotIEZpeCBwb29sIG1lbW9yeSBsZWFrIHdoZW4gZW1wdHkgYXJyYXkgb2YgcHJvbWlzZXMgcHJvdmlkZWQKCgojIyAxLjUuMCAtIDIwMjEtMTAtMDcKCiMjIyBDaGFuZ2VkCgotIENhbGwgaGFuZGxlciB3aGVuIHdhaXRpbmcgb24gZnVsZmlsbGVkL3JlamVjdGVkIFByb21pc2UKLSBPZmZpY2lhbGx5IHN1cHBvcnQgUEhQIDguMQoKIyMjIEZpeGVkCgotIEZpeCBtYW51YWxseSBzZXR0bGUgcHJvbWlzZXMgZ2VuZXJhdGVkIHdpdGggYFV0aWxzOjp0YXNrYAoKCiMjIDEuNC4xIC0gMjAyMS0wMi0xOAoKIyMjIEZpeGVkCgotIEZpeGVkIGBlYWNoX2xpbWl0YCBza2lwcGluZyBwcm9taXNlcyBhbmQgZmFpbGluZwoKCiMjIDEuNC4wIC0gMjAyMC0wOS0zMAoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIFBIUCA4Ci0gT3B0aW9uYWwgYCRyZWN1cnNpdmVgIGZsYWcgdG8gYGFsbGAKLSBSZXBsYWNlZCBmdW5jdGlvbnMgYnkgc3RhdGljIG1ldGhvZHMKCiMjIyBGaXhlZAoKLSBGaXggZW1wdHkgYGVhY2hgIHByb2Nlc3NpbmcKLSBGaXggcHJvbWlzZSBoYW5kbGluZyBmb3IgSXRlcmF0b3JzIG9mIG5vbi11bmlxdWUga2V5cwotIEZpeGVkIGBtZXRob2RfZXhpc3RzYCBjcmFzaGVzIG9uIFBIUCA4Ci0gTWVtb3J5IGxlYWsgb24gZXhjZXB0aW9ucwoKCiMjIDEuMy4xIC0gMjAxNi0xMi0yMAoKIyMjIEZpeGVkCgotIGB3YWl0KClgIGZvcmVpZ24gcHJvbWlzZSBjb21wYXRpYmlsaXR5CgoKIyMgMS4zLjAgLSAyMDE2LTExLTE4CgojIyMgQWRkZWQKCi0gQWRkcyBzdXBwb3J0IGZvciBjdXN0b20gdGFzayBxdWV1ZXMuCgojIyMgRml4ZWQKCi0gRml4ZWQgY29yb3V0aW5lIHByb21pc2UgbWVtb3J5IGxlYWsuCgoKIyMgMS4yLjAgLSAyMDE2LTA1LTE4CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGUgdG8gbm93IGNhdGNoIGBcVGhyb3dhYmxlYCBvbiBQSFAgNysKCgojIyAxLjEuMCAtIDIwMTYtMDMtMDcKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZSBFYWNoUHJvbWlzZSB0byBwcmV2ZW50IHJlY3VycmluZyBvbiBhIGl0ZXJhdG9yIHdoZW4gYWR2YW5jaW5nLCBhcyB0aGlzCiAgY291bGQgdHJpZ2dlciBmYXRhbCBnZW5lcmF0b3IgZXJyb3JzLgotIFVwZGF0ZSBQcm9taXNlIHRvIGFsbG93IHJlY3Vyc2l2ZSB3YWl0aW5nIHdpdGhvdXQgdW53cmFwcGluZyBleGNlcHRpb25zLgoKCiMjIDEuMC4zIC0gMjAxNS0xMC0xNQoKIyMjIENoYW5nZWQKCi0gVXBkYXRlIEVhY2hQcm9taXNlIHRvIGltbWVkaWF0ZWx5IHJlc29sdmUgd2hlbiB0aGUgdW5kZXJseWluZyBwcm9taXNlIGl0ZXJhdG9yCiAgaXMgZW1wdHkuIFByZXZpb3VzbHksIHN1Y2ggYSBwcm9taXNlIHdvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGl0cyBgd2FpdGAKICBmdW5jdGlvbiB3YXMgY2FsbGVkLgoKCiMjIDEuMC4yIC0gMjAxNS0wNS0xNQoKIyMjIENoYW5nZWQKCi0gQ29uZGl0aW9uYWxseSByZXF1aXJlIGZ1bmN0aW9ucy5waHAuCgoKIyMgMS4wLjEgLSAyMDE1LTA2LTI0CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGluZyBFYWNoUHJvbWlzZSB0byBjYWxsIG5leHQgb24gdGhlIHVuZGVybHlpbmcgcHJvbWlzZSBpdGVyYXRvciBhcyBsYXRlCiAgYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgZ2VuZXJhdG9ycyB0aGF0IGdlbmVyYXRlIG5ldyByZXF1ZXN0cyBiYXNlZCBvbgogIGNhbGxiYWNrcyBhcmUgbm90IGl0ZXJhdGVkIHVudGlsIGFmdGVyIGNhbGxiYWNrcyBhcmUgaW52b2tlZC4KCgojIyAxLjAuMCAtIDIwMTUtMDUtMTIKCi0gSW5pdGlhbCByZWxlYXNlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAicHJvbWlzZSIKICAgIF0sCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkdyYWhhbSBDYW1wYmVsbCIsCiAgICAgICAgICAgICJlbWFpbCI6ICJoZWxsb0BnamNhbXBiZWxsLmNvLnVrIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9HcmFoYW1DYW1wYmVsbCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIE55aG9sbSIsCiAgICAgICAgICAgICJlbWFpbCI6ICJ0b2JpYXMubnlob2xtQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTnlob2xtIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAiZW1haWwiOiAid2VibWFzdGVyQHR1Ym8td29ybGQuZGUiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlvbiIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICJeNy4yLjUgfHwgXjguMCIsCiAgICAgICAgInN5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzIjogIl4yLjUgfHwgXjMuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS41MiB8fCBeOS42LjM0IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQcm9taXNlXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgImF1dG9sb2FkLWRldiI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQcm9taXNlXFxUZXN0c1xcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAiYWxsb3ctcGx1Z2lucyI6IHsKICAgICAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6IHRydWUKICAgICAgICB9LAogICAgICAgICJwcmVmZXJyZWQtaW5zdGFsbCI6ICJkaXN0IiwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJhbWFybmktYmluIjogewogICAgICAgICAgICAiYmluLWxpbmtzIjogdHJ1ZSwKICAgICAgICAgICAgImZvcndhcmQtY29tbWFuZCI6IGZhbHNlCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgR3JhaGFtIENhbXBiZWxsIDxoZWxsb0BnamNhbXBiZWxsLmNvLnVrPgpDb3B5cmlnaHQgKGMpIDIwMTcgVG9iaWFzIFNjaHVsdHplIDx3ZWJtYXN0ZXJAdHViby13b3JsZC5kZT4KQ29weXJpZ2h0IChjKSAyMDIwIFRvYmlhcyBOeWhvbG0gPHRvYmlhcy5ueWhvbG1AZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBHdXp6bGUgUHJvbWlzZXMKCltQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwcm9taXNlCmNoYWluaW5nIGFuZCByZXNvbHV0aW9uIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nCndoaWxlIGtlZXBpbmcgdGhlIHN0YWNrIHNpemUgY29uc3RhbnQuIFJlYWQgW3RoaXMgYmxvZyBwb3N0XShodHRwczovL2Jsb2cuZG9tZW5pYy5tZS95b3VyZS1taXNzaW5nLXRoZS1wb2ludC1vZi1wcm9taXNlcy8pCmZvciBhIGdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIHByb21pc2VzLgoKLSBbRmVhdHVyZXNdKCNmZWF0dXJlcykKLSBbUXVpY2sgc3RhcnRdKCNxdWljay1zdGFydCkKLSBbU3luY2hyb25vdXMgd2FpdF0oI3N5bmNocm9ub3VzLXdhaXQpCi0gW0NhbmNlbGxhdGlvbl0oI2NhbmNlbGxhdGlvbikKLSBbQVBJXSgjYXBpKQogIC0gW1Byb21pc2VdKCNwcm9taXNlKQogIC0gW0Z1bGZpbGxlZFByb21pc2VdKCNmdWxmaWxsZWRwcm9taXNlKQogIC0gW1JlamVjdGVkUHJvbWlzZV0oI3JlamVjdGVkcHJvbWlzZSkKLSBbUHJvbWlzZSBpbnRlcm9wXSgjcHJvbWlzZS1pbnRlcm9wKQotIFtJbXBsZW1lbnRhdGlvbiBub3Rlc10oI2ltcGxlbWVudGF0aW9uLW5vdGVzKQoKCiMjIEZlYXR1cmVzCgotIFtQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uLgotIFByb21pc2UgcmVzb2x1dGlvbiBhbmQgY2hhaW5pbmcgaXMgaGFuZGxlZCBpdGVyYXRpdmVseSwgYWxsb3dpbmcgZm9yCiAgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nLgotIFByb21pc2VzIGhhdmUgYSBzeW5jaHJvbm91cyBgd2FpdGAgbWV0aG9kLgotIFByb21pc2VzIGNhbiBiZSBjYW5jZWxsZWQuCi0gV29ya3Mgd2l0aCBhbnkgb2JqZWN0IHRoYXQgaGFzIGEgYHRoZW5gIGZ1bmN0aW9uLgotIEMjIHN0eWxlIGFzeW5jL2F3YWl0IGNvcm91dGluZSBwcm9taXNlcyB1c2luZwogIGBHdXp6bGVIdHRwXFByb21pc2VcQ29yb3V0aW5lOjpvZigpYC4KCgojIyBJbnN0YWxsYXRpb24KCmBgYHNoZWxsCmNvbXBvc2VyIHJlcXVpcmUgZ3V6emxlaHR0cC9wcm9taXNlcwpgYGAKCgojIyBWZXJzaW9uIEd1aWRhbmNlCgp8IFZlcnNpb24gfCBTdGF0dXMgICAgICAgICAgICAgIHwgUEhQIFZlcnNpb24gIHwKfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CnwgMS54ICAgICB8IFNlY3VyaXR5IGZpeGVzIG9ubHkgfCA+PTUuNSw8OC4zICAgfAp8IDIueCAgICAgfCBMYXRlc3QgICAgICAgICAgICAgIHwgPj03LjIuNSw8OC42IHwKCgojIyBRdWljayBTdGFydAoKQSAqcHJvbWlzZSogcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZQpwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaApyZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24Kd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCgojIyMgQ2FsbGJhY2tzCgpDYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYHRoZW5gIG1ldGhvZCBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwKYCRvbkZ1bGZpbGxlZGAgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgYCRvblJlamVjdGVkYCBmdW5jdGlvbi4KCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+dGhlbigKICAgIC8vICRvbkZ1bGZpbGxlZAogICAgZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgIGVjaG8gJ1RoZSBwcm9taXNlIHdhcyBmdWxmaWxsZWQuJzsKICAgIH0sCiAgICAvLyAkb25SZWplY3RlZAogICAgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgICAgICBlY2hvICdUaGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuJzsKICAgIH0KKTsKYGBgCgoqUmVzb2x2aW5nKiBhIHByb21pc2UgbWVhbnMgdGhhdCB5b3UgZWl0aGVyIGZ1bGZpbGwgYSBwcm9taXNlIHdpdGggYSAqdmFsdWUqIG9yCnJlamVjdCBhIHByb21pc2Ugd2l0aCBhICpyZWFzb24qLiBSZXNvbHZpbmcgYSBwcm9taXNlIHRyaWdnZXJzIGNhbGxiYWNrcwpyZWdpc3RlcmVkIHdpdGggdGhlIHByb21pc2UncyBgdGhlbmAgbWV0aG9kLiBUaGVzZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZApvbmx5IG9uY2UgYW5kIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCgojIyMgUmVzb2x2aW5nIGEgUHJvbWlzZQoKUHJvbWlzZXMgYXJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgYHJlc29sdmUoJHZhbHVlKWAgbWV0aG9kLiBSZXNvbHZpbmcgYSBwcm9taXNlCndpdGggYW55IHZhbHVlIG90aGVyIHRoYW4gYSBgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZWAgd2lsbCB0cmlnZ2VyCmFsbCBvZiB0aGUgb25GdWxmaWxsZWQgY2FsbGJhY2tzIChyZXNvbHZpbmcgYSBwcm9taXNlIHdpdGggYSByZWplY3RlZCBwcm9taXNlCndpbGwgcmVqZWN0IHRoZSBwcm9taXNlIGFuZCB0cmlnZ2VyIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcykuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAvLyBSZXR1cm4gYSB2YWx1ZSBhbmQgZG9uJ3QgYnJlYWsgdGhlIGNoYWluCiAgICAgICAgcmV0dXJuICJIZWxsbywgIiAuICR2YWx1ZTsKICAgIH0pCiAgICAvLyBUaGlzIHRoZW4gaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHRoZW4gYW5kIHJlY2VpdmVzIHRoZSB2YWx1ZQogICAgLy8gcmV0dXJuZWQgZnJvbSB0aGUgZmlyc3QgdGhlbi4KICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgZWNobyAkdmFsdWU7CiAgICB9KTsKCi8vIFJlc29sdmluZyB0aGUgcHJvbWlzZSB0cmlnZ2VycyB0aGUgJG9uRnVsZmlsbGVkIGNhbGxiYWNrcyBhbmQgb3V0cHV0cwovLyAiSGVsbG8sIHJlYWRlci4iCiRwcm9taXNlLT5yZXNvbHZlKCdyZWFkZXIuJyk7CmBgYAoKIyMjIFByb21pc2UgRm9yd2FyZGluZwoKUHJvbWlzZXMgY2FuIGJlIGNoYWluZWQgb25lIGFmdGVyIHRoZSBvdGhlci4gRWFjaCB0aGVuIGluIHRoZSBjaGFpbiBpcyBhIG5ldwpwcm9taXNlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGEgcHJvbWlzZSBpcyB3aGF0J3MgZm9yd2FyZGVkIHRvIHRoZSBuZXh0CnByb21pc2UgaW4gdGhlIGNoYWluLiBSZXR1cm5pbmcgYSBwcm9taXNlIGluIGEgYHRoZW5gIGNhbGxiYWNrIHdpbGwgY2F1c2UgdGhlCnN1YnNlcXVlbnQgcHJvbWlzZXMgaW4gdGhlIGNoYWluIHRvIG9ubHkgYmUgZnVsZmlsbGVkIHdoZW4gdGhlIHJldHVybmVkIHByb21pc2UKaGFzIGJlZW4gZnVsZmlsbGVkLiBUaGUgbmV4dCBwcm9taXNlIGluIHRoZSBjaGFpbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUKcmVzb2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2UuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokbmV4dFByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwoKJHByb21pc2UKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRuZXh0UHJvbWlzZSkgewogICAgICAgIGVjaG8gJHZhbHVlOwogICAgICAgIHJldHVybiAkbmV4dFByb21pc2U7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICR2YWx1ZTsKICAgIH0pOwoKLy8gVHJpZ2dlcnMgdGhlIGZpcnN0IGNhbGxiYWNrIGFuZCBvdXRwdXRzICJBIgokcHJvbWlzZS0+cmVzb2x2ZSgnQScpOwovLyBUcmlnZ2VycyB0aGUgc2Vjb25kIGNhbGxiYWNrIGFuZCBvdXRwdXRzICJCIgokbmV4dFByb21pc2UtPnJlc29sdmUoJ0InKTsKYGBgCgojIyMgUHJvbWlzZSBSZWplY3Rpb24KCldoZW4gYSBwcm9taXNlIGlzIHJlamVjdGVkLCB0aGUgYCRvblJlamVjdGVkYCBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aCB0aGUKcmVqZWN0aW9uIHJlYXNvbi4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKG51bGwsIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICBlY2hvICRyZWFzb247Cn0pOwoKJHByb21pc2UtPnJlamVjdCgnRXJyb3IhJyk7Ci8vIE91dHB1dHMgIkVycm9yISIKYGBgCgojIyMgUmVqZWN0aW9uIEZvcndhcmRpbmcKCklmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gYW4gYCRvblJlamVjdGVkYCBjYWxsYmFjaywgc3Vic2VxdWVudApgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIHRoZSB0aHJvd24gZXhjZXB0aW9uIGFzIHRoZSByZWFzb24uCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkcmVhc29uKTsKfSktPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIGFzc2VydCgkcmVhc29uLT5nZXRNZXNzYWdlKCkgPT09ICdFcnJvciEnKTsKfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKYGBgCgpZb3UgY2FuIGFsc28gZm9yd2FyZCBhIHJlamVjdGlvbiBkb3duIHRoZSBwcm9taXNlIGNoYWluIGJ5IHJldHVybmluZyBhCmBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlYCBpbiBlaXRoZXIgYW4gYCRvbkZ1bGZpbGxlZGAgb3IKYCRvblJlamVjdGVkYCBjYWxsYmFjay4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgcmV0dXJuIG5ldyBSZWplY3RlZFByb21pc2UoJHJlYXNvbik7Cn0pLT50aGVuKG51bGwsIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICBhc3NlcnQoJHJlYXNvbiA9PT0gJ0Vycm9yIScpOwp9KTsKCiRwcm9taXNlLT5yZWplY3QoJ0Vycm9yIScpOwpgYGAKCklmIGFuIGV4Y2VwdGlvbiBpcyBub3QgdGhyb3duIGluIGEgYCRvblJlamVjdGVkYCBjYWxsYmFjayBhbmQgdGhlIGNhbGxiYWNrCmRvZXMgbm90IHJldHVybiBhIHJlamVjdGVkIHByb21pc2UsIGRvd25zdHJlYW0gYCRvbkZ1bGZpbGxlZGAgY2FsbGJhY2tzIGFyZQppbnZva2VkIHVzaW5nIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UKICAgIC0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgICAgIHJldHVybiAiSXQncyBvayI7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBhc3NlcnQoJHZhbHVlID09PSAiSXQncyBvayIpOwogICAgfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKYGBgCgoKIyMgU3luY2hyb25vdXMgV2FpdAoKWW91IGNhbiBzeW5jaHJvbm91c2x5IGZvcmNlIHByb21pc2VzIHRvIGNvbXBsZXRlIHVzaW5nIGEgcHJvbWlzZSdzIGB3YWl0YAptZXRob2QuIFdoZW4gY3JlYXRpbmcgYSBwcm9taXNlLCB5b3UgY2FuIHByb3ZpZGUgYSB3YWl0IGZ1bmN0aW9uIHRoYXQgaXMgdXNlZAp0byBzeW5jaHJvbm91c2x5IGZvcmNlIGEgcHJvbWlzZSB0byBjb21wbGV0ZS4gV2hlbiBhIHdhaXQgZnVuY3Rpb24gaXMgaW52b2tlZAppdCBpcyBleHBlY3RlZCB0byBkZWxpdmVyIGEgdmFsdWUgdG8gdGhlIHByb21pc2Ugb3IgcmVqZWN0IHRoZSBwcm9taXNlLiBJZiB0aGUKd2FpdCBmdW5jdGlvbiBkb2VzIG5vdCBkZWxpdmVyIGEgdmFsdWUsIHRoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93bi4gVGhlIHdhaXQKZnVuY3Rpb24gcHJvdmlkZWQgdG8gYSBwcm9taXNlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2hlbiB0aGUgYHdhaXRgIGZ1bmN0aW9uCm9mIHRoZSBwcm9taXNlIGlzIGNhbGxlZC4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uICgpIHVzZSAoJiRwcm9taXNlKSB7CiAgICAkcHJvbWlzZS0+cmVzb2x2ZSgnZm9vJyk7Cn0pOwoKLy8gQ2FsbGluZyB3YWl0IHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcHJvbWlzZS4KZWNobyAkcHJvbWlzZS0+d2FpdCgpOyAvLyBvdXRwdXRzICJmb28iCmBgYAoKSWYgYSB0aHJvd2FibGUgaXMgZW5jb3VudGVyZWQgd2hpbGUgaW52b2tpbmcgdGhlIHdhaXQgZnVuY3Rpb24gb2YgYSBwcm9taXNlLAp0aGUgcHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIHRoZSB0aHJvd2FibGUgYW5kIHRoZSB0aHJvd2FibGUgaXMgdGhyb3duLgoKYGBgcGhwCiRwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKCkgdXNlICgmJHByb21pc2UpIHsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ2ZvbycpOwp9KTsKCiRwcm9taXNlLT53YWl0KCk7IC8vIHRocm93cyB0aGUgZXhjZXB0aW9uLgpgYGAKCkNhbGxpbmcgYHdhaXRgIG9uIGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuIGZ1bGZpbGxlZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YWl0CmZ1bmN0aW9uLiBJdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHByZXZpb3VzbHkgcmVzb2x2ZWQgdmFsdWUuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB7IGRpZSgndGhpcyBpcyBub3QgY2FsbGVkIScpOyB9KTsKJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwplY2hvICRwcm9taXNlLT53YWl0KCk7IC8vIG91dHB1dHMgImZvbyIKYGBgCgpDYWxsaW5nIGB3YWl0YCBvbiBhIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZCB3aWxsIHRocm93LiBJZiB0aGUgcmVqZWN0aW9uCnJlYXNvbiBpcyBhbiBpbnN0YW5jZSBvZiBgXFRocm93YWJsZWAgdGhlIHJlYXNvbiBpcyB0aHJvd24uCk90aGVyd2lzZSwgYSBgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGlvbkV4Y2VwdGlvbmAgaXMgdGhyb3duIGFuZCB0aGUgcmVhc29uCmNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBgZ2V0UmVhc29uYCBtZXRob2Qgb2YgdGhlIGV4Y2VwdGlvbi4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT5yZWplY3QoJ2ZvbycpOwokcHJvbWlzZS0+d2FpdCgpOwpgYGAKCj4gUEhQIEZhdGFsIGVycm9yOiAgVW5jYXVnaHQgZXhjZXB0aW9uICdHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0aW9uRXhjZXB0aW9uJyB3aXRoIG1lc3NhZ2UgJ1RoZSBwcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIHZhbHVlOiBmb28nCgojIyMgVW53cmFwcGluZyBhIFByb21pc2UKCldoZW4gc3luY2hyb25vdXNseSB3YWl0aW5nIG9uIGEgcHJvbWlzZSwgeW91IGFyZSBqb2luaW5nIHRoZSBzdGF0ZSBvZiB0aGUKcHJvbWlzZSBpbnRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIGV4ZWN1dGlvbiAoaS5lLiwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUKcHJvbWlzZSBpZiBpdCB3YXMgZnVsZmlsbGVkIG9yIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdCB3YXMgcmVqZWN0ZWQpLiBUaGlzIGlzCmNhbGxlZCAidW53cmFwcGluZyIgdGhlIHByb21pc2UuIFdhaXRpbmcgb24gYSBwcm9taXNlIHdpbGwgYnkgZGVmYXVsdCB1bndyYXAKdGhlIHByb21pc2Ugc3RhdGUuCgpZb3UgY2FuIGZvcmNlIGEgcHJvbWlzZSB0byByZXNvbHZlIGFuZCAqbm90KiB1bndyYXAgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlCmJ5IHBhc3NpbmcgYGZhbHNlYCB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGB3YWl0YCBmdW5jdGlvbjoKCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT5yZWplY3QoJ2ZvbycpOwovLyBUaGlzIHdpbGwgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4gSXQgc2ltcGx5IGVuc3VyZXMgdGhlIHByb21pc2UgaGFzCi8vIGJlZW4gcmVzb2x2ZWQuCiRwcm9taXNlLT53YWl0KGZhbHNlKTsKYGBgCgpXaGVuIHVud3JhcHBpbmcgYSBwcm9taXNlLCB0aGUgcmVzb2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2Ugd2lsbCBiZSB3YWl0ZWQKdXBvbiB1bnRpbCB0aGUgdW53cmFwcGVkIHZhbHVlIGlzIG5vdCBhIHByb21pc2UuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgcmVzb2x2ZQpwcm9taXNlIEEgd2l0aCBhIHByb21pc2UgQiBhbmQgdW53cmFwIHByb21pc2UgQSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZQp3YWl0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIHZhbHVlIGRlbGl2ZXJlZCB0byBwcm9taXNlIEIuCgoqKk5vdGUqKjogd2hlbiB5b3UgZG8gbm90IHVud3JhcCB0aGUgcHJvbWlzZSwgbm8gdmFsdWUgaXMgcmV0dXJuZWQuCgoKIyMgQ2FuY2VsbGF0aW9uCgpZb3UgY2FuIGNhbmNlbCBhIHByb21pc2UgdGhhdCBoYXMgbm90IHlldCBiZWVuIGZ1bGZpbGxlZCB1c2luZyB0aGUgYGNhbmNlbCgpYAptZXRob2Qgb2YgYSBwcm9taXNlLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwKY2FuY2VsIGZ1bmN0aW9uIHRoYXQgd2hlbiBpbnZva2VkIGNhbmNlbHMgdGhlIGFjdGlvbiBvZiBjb21wdXRpbmcgYSByZXNvbHV0aW9uCm9mIHRoZSBwcm9taXNlLgoKCiMjIEFQSQoKIyMjIFByb21pc2UKCldoZW4gY3JlYXRpbmcgYSBwcm9taXNlIG9iamVjdCwgeW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIGAkd2FpdEZuYCBhbmQKYCRjYW5jZWxGbmAuIGAkd2FpdEZuYCBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgaXMKZXhwZWN0ZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gYCRjYW5jZWxGbmAgaXMgYSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cwp0aGF0IGlzIGV4cGVjdGVkIHRvIGNhbmNlbCB0aGUgY29tcHV0YXRpb24gb2YgYSBwcm9taXNlLiBJdCBpcyBpbnZva2VkIHdoZW4gdGhlCmBjYW5jZWwoKWAgbWV0aG9kIG9mIGEgcHJvbWlzZSBpcyBjYWxsZWQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgKICAgIGZ1bmN0aW9uICgpIHVzZSAoJiRwcm9taXNlKSB7CiAgICAgICAgJHByb21pc2UtPnJlc29sdmUoJ3dhaXRlZCcpOwogICAgfSwKICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcgdGhhdCB3aWxsIGNhbmNlbCB0aGUgcHJvbWlzZSBjb21wdXRhdGlvbiAoZS5nLiwgY2xvc2UKICAgICAgICAvLyBhIHNvY2tldCwgY2FuY2VsIGEgZGF0YWJhc2UgcXVlcnksIGV0Yy4uLikKICAgIH0KKTsKCmFzc2VydCgnd2FpdGVkJyA9PT0gJHByb21pc2UtPndhaXQoKSk7CmBgYAoKQSBwcm9taXNlIGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CgotIGB0aGVuKD9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLCA/Y2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsKSA6IFByb21pc2VJbnRlcmZhY2VgCgogIEFwcGVuZHMgZnVsZmlsbG1lbnQgYW5kIHJlamVjdGlvbiBoYW5kbGVycyB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMgYSBuZXcKICBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsZWQgaGFuZGxlci4gSWYgYSBoYW5kbGVyIGlzCiAgb21pdHRlZCwgdGhlIG9yaWdpbmFsIGZ1bGZpbGxtZW50IHZhbHVlIG9yIHJlamVjdGlvbiByZWFzb24gaXMgZm9yd2FyZGVkLgoKLSBgb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKSA6IFByb21pc2VJbnRlcmZhY2VgCiAgCiAgQXBwZW5kcyBhIHJlamVjdGlvbiBoYW5kbGVyIGNhbGxiYWNrIHRvIHRoZSBwcm9taXNlLCBhbmQgcmV0dXJucyBhIG5ldyBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBpZiBpdCBpcyBjYWxsZWQsIG9yIHRvIGl0cyBvcmlnaW5hbCBmdWxmaWxsbWVudCB2YWx1ZSBpZiB0aGUgcHJvbWlzZSBpcyBpbnN0ZWFkIGZ1bGZpbGxlZC4KCi0gYHdhaXQoJHVud3JhcCA9IHRydWUpIDogbWl4ZWRgCgogIFN5bmNocm9ub3VzbHkgd2FpdHMgb24gdGhlIHByb21pc2UgdG8gY29tcGxldGUuCiAgCiAgYCR1bndyYXBgIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBvZiB0aGUgcHJvbWlzZSBpcyByZXR1cm5lZCBmb3IgYQogIGZ1bGZpbGxlZCBwcm9taXNlIG9yIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQuCgotIGBjYW5jZWwoKWAKCiAgQXR0ZW1wdHMgdG8gY2FuY2VsIHRoZSBwcm9taXNlIGlmIHBvc3NpYmxlLiBUaGUgcHJvbWlzZSBiZWluZyBjYW5jZWxsZWQgYW5kCiAgdGhlIHBhcmVudCBtb3N0IGFuY2VzdG9yIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCB3aWxsIGFsc28gYmUKICBjYW5jZWxsZWQuIEFueSBwcm9taXNlcyB3YWl0aW5nIG9uIHRoZSBjYW5jZWxsZWQgcHJvbWlzZSB0byByZXNvbHZlIHdpbGwgYWxzbwogIGJlIGNhbmNlbGxlZC4KCi0gYGdldFN0YXRlKCkgOiBzdHJpbmdgCgogIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlLiBPbmUgb2YgYHBlbmRpbmdgLCBgZnVsZmlsbGVkYCwgb3IKICBgcmVqZWN0ZWRgLgoKLSBgcmVzb2x2ZSgkdmFsdWUpYAoKICBGdWxmaWxscyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBgJHZhbHVlYC4KCi0gYHJlamVjdCgkcmVhc29uKWAKCiAgUmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBgJHJlYXNvbmAuCgoKIyMjIEZ1bGZpbGxlZFByb21pc2UKCkEgZnVsZmlsbGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCmZ1bGZpbGxlZC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEZ1bGZpbGxlZFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBGdWxmaWxsZWRQcm9taXNlKCd2YWx1ZScpOwoKLy8gRnVsZmlsbGVkIGNhbGxiYWNrcyBhcmUgaW1tZWRpYXRlbHkgaW52b2tlZC4KJHByb21pc2UtPnRoZW4oZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgZWNobyAkdmFsdWU7Cn0pOwpgYGAKCgojIyMgUmVqZWN0ZWRQcm9taXNlCgpBIHJlamVjdGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCnJlamVjdGVkLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUmVqZWN0ZWRQcm9taXNlKCdFcnJvcicpOwoKLy8gUmVqZWN0ZWQgY2FsbGJhY2tzIGFyZSBpbW1lZGlhdGVseSBpbnZva2VkLgokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgZWNobyAkcmVhc29uOwp9KTsKYGBgCgoKIyMgUHJvbWlzZSBJbnRlcm9wZXJhYmlsaXR5CgpUaGlzIGxpYnJhcnkgd29ya3Mgd2l0aCBmb3JlaWduIHByb21pc2VzIHRoYXQgaGF2ZSBhIGB0aGVuYCBtZXRob2QuIFRoaXMgbWVhbnMKeW91IGNhbiB1c2UgR3V6emxlIHByb21pc2VzIHdpdGggW1JlYWN0IHByb21pc2VzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3RwaHAvcHJvbWlzZSkKZm9yIGV4YW1wbGUuIFdoZW4gYSBmb3JlaWduIHByb21pc2UgaXMgcmV0dXJuZWQgaW5zaWRlIG9mIGEgdGhlbiBtZXRob2QKY2FsbGJhY2ssIHByb21pc2UgcmVzb2x1dGlvbiB3aWxsIG9jY3VyIHJlY3Vyc2l2ZWx5LgoKYGBgcGhwCi8vIENyZWF0ZSBhIFJlYWN0IHByb21pc2UKJGRlZmVycmVkID0gbmV3IFJlYWN0XFByb21pc2VcRGVmZXJyZWQoKTsKJHJlYWN0UHJvbWlzZSA9ICRkZWZlcnJlZC0+cHJvbWlzZSgpOwoKLy8gQ3JlYXRlIGEgR3V6emxlIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFJlYWN0IHByb21pc2UuCiRndXp6bGVQcm9taXNlID0gbmV3IEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlKCk7CiRndXp6bGVQcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlYWN0UHJvbWlzZSkgewogICAgLy8gRG8gc29tZXRoaW5nIHNvbWV0aGluZyB3aXRoIHRoZSB2YWx1ZS4uLgogICAgLy8gUmV0dXJuIHRoZSBSZWFjdCBwcm9taXNlCiAgICByZXR1cm4gJHJlYWN0UHJvbWlzZTsKfSk7CmBgYAoKUGxlYXNlIG5vdGUgdGhhdCB3YWl0IGFuZCBjYW5jZWwgY2hhaW5pbmcgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHdoZW4gZm9yd2FyZGluZwphIGZvcmVpZ24gcHJvbWlzZS4gWW91IHdpbGwgbmVlZCB0byB3cmFwIGEgdGhpcmQtcGFydHkgcHJvbWlzZSB3aXRoIGEgR3V6emxlCnByb21pc2UgaW4gb3JkZXIgdG8gdXRpbGl6ZSB3YWl0IGFuZCBjYW5jZWwgZnVuY3Rpb25zIHdpdGggZm9yZWlnbiBwcm9taXNlcy4KCgojIyMgRXZlbnQgTG9vcCBJbnRlZ3JhdGlvbgoKSW4gb3JkZXIgdG8ga2VlcCB0aGUgc3RhY2sgc2l6ZSBjb25zdGFudCwgR3V6emxlIHByb21pc2VzIGFyZSByZXNvbHZlZAphc3luY2hyb25vdXNseSB1c2luZyBhIHRhc2sgcXVldWUuIFdoZW4gd2FpdGluZyBvbiBwcm9taXNlcyBzeW5jaHJvbm91c2x5LCB0aGUKdGFzayBxdWV1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcnVuIHRvIGVuc3VyZSB0aGF0IHRoZSBibG9ja2luZyBwcm9taXNlIGFuZAphbnkgZm9yd2FyZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZC4gV2hlbiB1c2luZyBwcm9taXNlcyBhc3luY2hyb25vdXNseSBpbiBhbgpldmVudCBsb29wLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biB0aGUgdGFzayBxdWV1ZSBvbiBlYWNoIHRpY2sgb2YgdGhlIGxvb3AuIElmCnlvdSBkbyBub3QgcnVuIHRoZSB0YXNrIHF1ZXVlLCB0aGVuIHByb21pc2VzIHdpbGwgbm90IGJlIHJlc29sdmVkLgoKWW91IGNhbiBydW4gdGhlIHRhc2sgcXVldWUgdXNpbmcgdGhlIGBydW4oKWAgbWV0aG9kIG9mIHRoZSBnbG9iYWwgdGFzayBxdWV1ZQppbnN0YW5jZS4KCmBgYHBocAovLyBHZXQgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlCiRxdWV1ZSA9IEd1enpsZUh0dHBcUHJvbWlzZVxVdGlsczo6cXVldWUoKTsKJHF1ZXVlLT5ydW4oKTsKYGBgCgpGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHVzZSBHdXp6bGUgcHJvbWlzZXMgd2l0aCBSZWFjdCB1c2luZyBhIHNob3J0IHBlcmlvZGljCnRpbWVyLiBBdm9pZCB6ZXJvLWludGVydmFsIHRpbWVycyBiZWNhdXNlIHRoZXkgbWF5IGtlZXAgdGhlIGxvb3AgYnVzeSBldmVuIHdoZW4KdGhlcmUgaXMgbm8gcHJvbWlzZSB3b3JrIHRvIHJ1bi4KCmBgYHBocAokbG9vcCA9IFJlYWN0XEV2ZW50TG9vcFxGYWN0b3J5OjpjcmVhdGUoKTsKJGxvb3AtPmFkZFBlcmlvZGljVGltZXIoMC4wMSwgWyRxdWV1ZSwgJ3J1biddKTsKYGBgCgoKIyMgSW1wbGVtZW50YXRpb24gTm90ZXMKCiMjIyBQcm9taXNlIFJlc29sdXRpb24gYW5kIENoYWluaW5nIGlzIEhhbmRsZWQgSXRlcmF0aXZlbHkKCkJ5IHNodWZmbGluZyBwZW5kaW5nIGhhbmRsZXJzIGZyb20gb25lIG93bmVyIHRvIGFub3RoZXIsIHByb21pc2VzIGFyZQpyZXNvbHZlZCBpdGVyYXRpdmVseSwgYWxsb3dpbmcgZm9yICJpbmZpbml0ZSIgdGhlbiBjaGFpbmluZy4KCmBgYHBocAo8P3BocApyZXF1aXJlICd2ZW5kb3IvYXV0b2xvYWQucGhwJzsKCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwYXJlbnQgPSBuZXcgUHJvbWlzZSgpOwokcCA9ICRwYXJlbnQ7Cgpmb3IgKCRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKSB7CiAgICAkcCA9ICRwLT50aGVuKGZ1bmN0aW9uICgkdikgewogICAgICAgIC8vIFRoZSBzdGFjayBzaXplIHJlbWFpbnMgY29uc3RhbnQgKGEgZ29vZCB0aGluZykKICAgICAgICBlY2hvIHhkZWJ1Z19nZXRfc3RhY2tfZGVwdGgoKSAuICcsICc7CiAgICAgICAgcmV0dXJuICR2ICsgMTsKICAgIH0pOwp9CgokcGFyZW50LT5yZXNvbHZlKDApOwp2YXJfZHVtcCgkcC0+d2FpdCgpKTsgLy8gaW50KDEwMDApCgpgYGAKCldoZW4gYSBwcm9taXNlIGlzIGZ1bGZpbGxlZCBvciByZWplY3RlZCB3aXRoIGEgbm9uLXByb21pc2UgdmFsdWUsIHRoZSBwcm9taXNlCnRoZW4gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBoYW5kbGVycyBvZiBlYWNoIGNoaWxkIHByb21pc2UgYW5kIGRlbGl2ZXJzIHZhbHVlcwpkb3duIHRoZSBjaGFpbiB3aXRob3V0IHVzaW5nIHJlY3Vyc2lvbi4KCldoZW4gYSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggYW5vdGhlciBwcm9taXNlLCB0aGUgb3JpZ2luYWwgcHJvbWlzZSB0cmFuc2ZlcnMKYWxsIG9mIGl0cyBwZW5kaW5nIGhhbmRsZXJzIHRvIHRoZSBuZXcgcHJvbWlzZS4gV2hlbiB0aGUgbmV3IHByb21pc2UgaXMKZXZlbnR1YWxseSByZXNvbHZlZCwgYWxsIG9mIHRoZSBwZW5kaW5nIGhhbmRsZXJzIGFyZSBkZWxpdmVyZWQgdGhlIGZvcndhcmRlZAp2YWx1ZS4KCiMjIyBBIFByb21pc2UgaXMgdGhlIERlZmVycmVkCgpTb21lIHByb21pc2UgbGlicmFyaWVzIGltcGxlbWVudCBwcm9taXNlcyB1c2luZyBhIGRlZmVycmVkIG9iamVjdCB0byByZXByZXNlbnQKYSBjb21wdXRhdGlvbiBhbmQgYSBwcm9taXNlIG9iamVjdCB0byByZXByZXNlbnQgdGhlIGRlbGl2ZXJ5IG9mIHRoZSByZXN1bHQgb2YKdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIGEgbmljZSBzZXBhcmF0aW9uIG9mIGNvbXB1dGF0aW9uIGFuZCBkZWxpdmVyeSBiZWNhdXNlCmNvbnN1bWVycyBvZiB0aGUgcHJvbWlzZSBjYW5ub3QgbW9kaWZ5IHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgZXZlbnR1YWxseQpkZWxpdmVyZWQuCgpPbmUgc2lkZSBlZmZlY3Qgb2YgYmVpbmcgYWJsZSB0byBpbXBsZW1lbnQgcHJvbWlzZSByZXNvbHV0aW9uIGFuZCBjaGFpbmluZwppdGVyYXRpdmVseSBpcyB0aGF0IHlvdSBuZWVkIHRvIGJlIGFibGUgZm9yIG9uZSBwcm9taXNlIHRvIHJlYWNoIGludG8gdGhlIHN0YXRlCm9mIGFub3RoZXIgcHJvbWlzZSB0byBzaHVmZmxlIGFyb3VuZCBvd25lcnNoaXAgb2YgaGFuZGxlcnMuIEluIG9yZGVyIHRvIGFjaGlldmUKdGhpcyB3aXRob3V0IG1ha2luZyB0aGUgaGFuZGxlcnMgb2YgYSBwcm9taXNlIHB1YmxpY2x5IG11dGFibGUsIGEgcHJvbWlzZSBpcwphbHNvIHRoZSBkZWZlcnJlZCB2YWx1ZSwgYWxsb3dpbmcgcHJvbWlzZXMgb2YgdGhlIHNhbWUgcGFyZW50IGNsYXNzIHRvIHJlYWNoCmludG8gYW5kIG1vZGlmeSB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIG9mIHByb21pc2VzIG9mIHRoZSBzYW1lIHR5cGUuIFdoaWxlIHRoaXMKZG9lcyBhbGxvdyBjb25zdW1lcnMgb2YgdGhlIHZhbHVlIHRvIG1vZGlmeSB0aGUgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gb2YgdGhlCmRlZmVycmVkLCBpdCBpcyBhIHNtYWxsIHByaWNlIHRvIHBheSBmb3Iga2VlcGluZyB0aGUgc3RhY2sgc2l6ZSBjb25zdGFudC4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsgZWNobyAkdmFsdWU7IH0pOwovLyBUaGUgcHJvbWlzZSBpcyB0aGUgZGVmZXJyZWQgdmFsdWUsIHNvIHlvdSBjYW4gZGVsaXZlciBhIHZhbHVlIHRvIGl0LgokcHJvbWlzZS0+cmVzb2x2ZSgnZm9vJyk7Ci8vIHByaW50cyAiZm9vIgpgYGAKCgojIyBVcGdyYWRpbmcKClNlZSBbVVBHUkFESU5HLm1kXShVUEdSQURJTkcubWQpIGZvciBwYWNrYWdlIHVwZ3JhZGUgbm90ZXMuCgoKIyMgU2VjdXJpdHkKCklmIHlvdSBkaXNjb3ZlciBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gc2VjdXJpdHlAdGlkZWxpZnQuY29tLiBBbGwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYmUgcHJvbXB0bHkgYWRkcmVzc2VkLiBQbGVhc2UgZG8gbm90IGRpc2Nsb3NlIHNlY3VyaXR5LXJlbGF0ZWQgaXNzdWVzIHB1YmxpY2x5IHVudGlsIGEgZml4IGhhcyBiZWVuIGFubm91bmNlZC4gUGxlYXNlIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Byb21pc2VzL3NlY3VyaXR5L3BvbGljeSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgoKIyMgTGljZW5zZQoKR3V6emxlIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKS4gUGxlYXNlIHNlZSBbTGljZW5zZSBGaWxlXShMSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgojIyBGb3IgRW50ZXJwcmlzZQoKQXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIFRpZGVsaWZ0IFN1YnNjcmlwdGlvbgoKVGhlIG1haW50YWluZXJzIG9mIEd1enpsZSBhbmQgdGhvdXNhbmRzIG9mIG90aGVyIHBhY2thZ2VzIGFyZSB3b3JraW5nIHdpdGggVGlkZWxpZnQgdG8gZGVsaXZlciBjb21tZXJjaWFsIHN1cHBvcnQgYW5kIG1haW50ZW5hbmNlIGZvciB0aGUgb3BlbiBzb3VyY2UgZGVwZW5kZW5jaWVzIHlvdSB1c2UgdG8gYnVpbGQgeW91ciBhcHBsaWNhdGlvbnMuIFNhdmUgdGltZSwgcmVkdWNlIHJpc2ssIGFuZCBpbXByb3ZlIGNvZGUgaGVhbHRoLCB3aGlsZSBwYXlpbmcgdGhlIG1haW50YWluZXJzIG9mIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgeW91IHVzZS4gW0xlYXJuIG1vcmUuXShodHRwczovL3RpZGVsaWZ0LmNvbS9zdWJzY3JpcHRpb24vcGtnL3BhY2thZ2lzdC1ndXp6bGVodHRwLXByb21pc2VzP3V0bV9zb3VyY2U9cGFja2FnaXN0LWd1enpsZWh0dHAtcHJvbWlzZXMmdXRtX21lZGl1bT1yZWZlcnJhbCZ1dG1fY2FtcGFpZ249ZW50ZXJwcmlzZSZ1dG1fdGVybT1yZXBvKQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/AggregateException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gdG9vIG1hbnkgZXJyb3JzIG9jY3VyIGluIHRoZSBzb21lKCkgb3IgYW55KCkgbWV0aG9kcy4KICovCmNsYXNzIEFnZ3JlZ2F0ZUV4Y2VwdGlvbiBleHRlbmRzIFJlamVjdGlvbkV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRtc2csIGFycmF5ICRyZWFzb25zKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoCiAgICAgICAgICAgICRyZWFzb25zLAogICAgICAgICAgICBzcHJpbnRmKCclczsgJWQgcmVqZWN0ZWQgcHJvbWlzZXMnLCAkbXNnLCBjb3VudCgkcmVhc29ucykpCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/CancellationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhhdCBpcyBzZXQgYXMgdGhlIHJlYXNvbiBmb3IgYSBwcm9taXNlIHRoYXQgaGFzIGJlZW4gY2FuY2VsbGVkLgogKi8KY2xhc3MgQ2FuY2VsbGF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUmVqZWN0aW9uRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Coroutine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCnVzZSBHZW5lcmF0b3I7CnVzZSBUaHJvd2FibGU7CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB1c2luZyBhIGdlbmVyYXRvciB0aGF0IHlpZWxkcyB2YWx1ZXMgb3IKICogcHJvbWlzZXMgKHNvbWV3aGF0IHNpbWlsYXIgdG8gQyMncyBhc3luYyBrZXl3b3JkKS4KICoKICogV2hlbiBjYWxsZWQsIHRoZSBDb3JvdXRpbmU6Om9mIG1ldGhvZCB3aWxsIHN0YXJ0IGFuIGluc3RhbmNlIG9mIHRoZSBnZW5lcmF0b3IKICogYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggaXRzIGZpbmFsIHlpZWxkZWQgdmFsdWUuCiAqCiAqIENvbnRyb2wgaXMgcmV0dXJuZWQgYmFjayB0byB0aGUgZ2VuZXJhdG9yIHdoZW4gdGhlIHlpZWxkZWQgcHJvbWlzZSBzZXR0bGVzLgogKiBUaGlzIGNhbiBsZWFkIHRvIGxlc3MgdmVyYm9zZSBjb2RlIHdoZW4gZG9pbmcgbG90cyBvZiBzZXF1ZW50aWFsIGFzeW5jIGNhbGxzCiAqIHdpdGggbWluaW1hbCBwcm9jZXNzaW5nIGluIGJldHdlZW4uCiAqCiAqICAgICB1c2UgR3V6emxlSHR0cFxQcm9taXNlOwogKgogKiAgICAgZnVuY3Rpb24gY3JlYXRlUHJvbWlzZSgkdmFsdWUpIHsKICogICAgICAgICByZXR1cm4gbmV3IFByb21pc2VcRnVsZmlsbGVkUHJvbWlzZSgkdmFsdWUpOwogKiAgICAgfQogKgogKiAgICAgJHByb21pc2UgPSBQcm9taXNlXENvcm91dGluZTo6b2YoZnVuY3Rpb24gKCkgewogKiAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCdhJykpOwogKiAgICAgICAgIHRyeSB7CiAqICAgICAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCR2YWx1ZSAuICdiJykpOwogKiAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICogICAgICAgICAgICAgLy8gVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLgogKiAgICAgICAgIH0KICogICAgICAgICB5aWVsZCAkdmFsdWUgLiAnYyc7CiAqICAgICB9KTsKICoKICogICAgIC8vIE91dHB1dHMgImFiYyIKICogICAgICRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdikgeyBlY2hvICR2OyB9KTsKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbiBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gd3JhcCBpbnRvIGEgcHJvbWlzZS4KICoKICogQHJldHVybiBQcm9taXNlCiAqCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC9ibG9iL21hc3Rlci9BUEkubWQjZ2VuZXJhdG9ycyBpbnNwaXJhdGlvbgogKi8KZmluYWwgY2xhc3MgQ29yb3V0aW5lIGltcGxlbWVudHMgUHJvbWlzZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgUHJvbWlzZUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGN1cnJlbnRQcm9taXNlOwoKICAgIC8qKgogICAgICogQHZhciBHZW5lcmF0b3IKICAgICAqLwogICAgcHJpdmF0ZSAkZ2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBQcm9taXNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJlc3VsdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY2FsbGFibGUgJGdlbmVyYXRvckZuKQogICAgewogICAgICAgICR0aGlzLT5nZW5lcmF0b3IgPSAkZ2VuZXJhdG9yRm4oKTsKICAgICAgICAkdGhpcy0+cmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKCk6IHZvaWQgewogICAgICAgICAgICB3aGlsZSAoaXNzZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmN1cnJlbnRQcm9taXNlLT53YWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkdGhpcy0+Z2VuZXJhdG9yLT5jdXJyZW50KCkpOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkdGhyb3dhYmxlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgY29yb3V0aW5lLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mKGNhbGxhYmxlICRnZW5lcmF0b3JGbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGdlbmVyYXRvckZuKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICA/Y2FsbGFibGUgJG9uRnVsZmlsbGVkID0gbnVsbCwKICAgICAgICA/Y2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApOiBQcm9taXNlSW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+dGhlbigkb25GdWxmaWxsZWQsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5vdGhlcndpc2UoJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KGJvb2wgJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQtPndhaXQoJHVud3JhcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZXNvbHZlKCR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkcmVhc29uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKSkgewogICAgICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UtPmNhbmNlbCgpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnJlc3VsdC0+Y2FuY2VsKCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBuZXh0Q29yb3V0aW5lKCR5aWVsZGVkKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5jdXJyZW50UHJvbWlzZSA9IENyZWF0ZTo6cHJvbWlzZUZvcigkeWllbGRlZCkKICAgICAgICAgICAgLT50aGVuKFskdGhpcywgJ19oYW5kbGVTdWNjZXNzJ10sIFskdGhpcywgJ19oYW5kbGVGYWlsdXJlJ10pOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlU3VjY2VzcygkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkbmV4dCA9ICR0aGlzLT5nZW5lcmF0b3ItPnNlbmQoJHZhbHVlKTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5nZW5lcmF0b3ItPnZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5uZXh0Q29yb3V0aW5lKCRuZXh0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlc29sdmUoJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkdGhyb3dhYmxlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9oYW5kbGVGYWlsdXJlKCRyZWFzb24pOiB2b2lkCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkbmV4dFlpZWxkID0gJHRoaXMtPmdlbmVyYXRvci0+dGhyb3coQ3JlYXRlOjpleGNlcHRpb25Gb3IoJHJlYXNvbikpOwogICAgICAgICAgICAvLyBUaGUgdGhyb3cgd2FzIGNhdWdodCwgc28ga2VlcCBpdGVyYXRpbmcgb24gdGhlIGNvcm91dGluZQogICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkbmV4dFlpZWxkKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJHRocm93YWJsZSk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Create.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIENyZWF0ZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBwcm9taXNlIGZvciBhIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgUHJvbWlzZSBvciB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm9taXNlRm9yKCR2YWx1ZSk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIGEgR3V6emxlIHByb21pc2UgdGhhdCBzaGFkb3dzIHRoZSBnaXZlbiBwcm9taXNlLgogICAgICAgIGlmIChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ3RoZW4nKSkgewogICAgICAgICAgICAkd2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICd3YWl0JykgPyBbJHZhbHVlLCAnd2FpdCddIDogbnVsbDsKICAgICAgICAgICAgJGNmbiA9IG1ldGhvZF9leGlzdHMoJHZhbHVlLCAnY2FuY2VsJykgPyBbJHZhbHVlLCAnY2FuY2VsJ10gOiBudWxsOwogICAgICAgICAgICAkcHJvbWlzZSA9IG5ldyBQcm9taXNlKCR3Zm4sICRjZm4pOwogICAgICAgICAgICAkdmFsdWUtPnRoZW4oWyRwcm9taXNlLCAncmVzb2x2ZSddLCBbJHByb21pc2UsICdyZWplY3QnXSk7CgogICAgICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxlZFByb21pc2UoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSByZWplY3RlZCBwcm9taXNlIGZvciBhIHJlYXNvbiBpZiB0aGUgcmVhc29uIGlzIG5vdCBhIHByb21pc2UuCiAgICAgKiBJZiB0aGUgcHJvdmlkZWQgcmVhc29uIGlzIGEgcHJvbWlzZSwgdGhlbiBpdCBpcyByZXR1cm5lZCBhcy1pcy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbiBQcm9taXNlIG9yIHJlYXNvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWplY3Rpb25Gb3IoJHJlYXNvbik6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiBpbnN0YW5jZW9mIFByb21pc2VJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICRyZWFzb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFJlamVjdGVkUHJvbWlzZSgkcmVhc29uKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBleGNlcHRpb24gZm9yIGEgcmVqZWN0ZWQgcHJvbWlzZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4Y2VwdGlvbkZvcigkcmVhc29uKTogXFRocm93YWJsZQogICAgewogICAgICAgIGlmICgkcmVhc29uIGluc3RhbmNlb2YgXFRocm93YWJsZSkgewogICAgICAgICAgICByZXR1cm4gJHJlYXNvbjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgUmVqZWN0aW9uRXhjZXB0aW9uKCRyZWFzb24pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpdGVyRm9yKCR2YWx1ZSk6IFxJdGVyYXRvcgogICAgewogICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfaXRlcmFibGUoJHZhbHVlKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3Byb21pc2VzJywKICAgICAgICAgICAgICAgICcyLjUnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgYSBub24taXRlcmFibGUgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wcm9taXNlcyAzLjAgd2lsbCByZXF1aXJlIGFuIGl0ZXJhYmxlLicsCiAgICAgICAgICAgICAgICBfX0NMQVNTX18sCiAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoWyR2YWx1ZV0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Each.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIEVhY2gKewogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBwcm9taXNlcyBvciB2YWx1ZXMsIHJldHVybnMgYSBwcm9taXNlIHRoYXQKICAgICAqIGlzIGZ1bGZpbGxlZCB3aXRoIGEgbnVsbCB2YWx1ZSB3aGVuIHRoZSBpdGVyYXRvciBoYXMgYmVlbiBjb25zdW1lZCBvcgogICAgICogdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIGhhcyBiZWVuIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KICAgICAqCiAgICAgKiAkb25GdWxmaWxsZWQgaXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIGZ1bGZpbGxlZCB2YWx1ZSwgaXRlcmF0b3IKICAgICAqIGluZGV4LCBhbmQgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlLiBUaGUgY2FsbGJhY2sgY2FuIGludm9rZSBhbnkgbmVjZXNzYXJ5CiAgICAgKiBzaWRlIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIGlmIG5lZWRlZC4KICAgICAqCiAgICAgKiAkb25SZWplY3RlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgaXRlcmF0b3IKICAgICAqIGluZGV4LCBhbmQgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlLiBUaGUgY2FsbGJhY2sgY2FuIGludm9rZSBhbnkgbmVjZXNzYXJ5CiAgICAgKiBzaWRlIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIGlmIG5lZWRlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGl0ZXJhYmxlIEl0ZXJhdG9yIG9yIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZigKICAgICAgICAkaXRlcmFibGUsCiAgICAgICAgP2NhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgP2NhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgJGl0ZXJhYmxlID0gc2VsZjo6cHJlcGFyZUl0ZXJhYmxlKCRpdGVyYWJsZSwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIChuZXcgRWFjaFByb21pc2UoJGl0ZXJhYmxlLCBbCiAgICAgICAgICAgICdmdWxmaWxsZWQnID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAgICAgJ3JlamVjdGVkJyA9PiAkb25SZWplY3RlZCwKICAgICAgICBdKSktPnByb21pc2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIExpa2Ugb2YsIGJ1dCBvbmx5IGFsbG93cyBhIGNlcnRhaW4gbnVtYmVyIG9mIG91dHN0YW5kaW5nIHByb21pc2VzIGF0IGFueQogICAgICogZ2l2ZW4gdGltZS4KICAgICAqCiAgICAgKiAkY29uY3VycmVuY3kgbWF5IGJlIGFuIGludGVnZXIgb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZgogICAgICogcGVuZGluZyBwcm9taXNlcyBhbmQgcmV0dXJucyBhIG51bWVyaWMgY29uY3VycmVuY3kgbGltaXQgdmFsdWUgdG8gYWxsb3cKICAgICAqIGZvciBkeW5hbWljIGEgY29uY3VycmVuY3kgc2l6ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAgICRpdGVyYWJsZQogICAgICogQHBhcmFtIGludHxjYWxsYWJsZSAkY29uY3VycmVuY3kKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvZkxpbWl0KAogICAgICAgICRpdGVyYWJsZSwKICAgICAgICAkY29uY3VycmVuY3ksCiAgICAgICAgP2NhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgP2NhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgJGl0ZXJhYmxlID0gc2VsZjo6cHJlcGFyZUl0ZXJhYmxlKCRpdGVyYWJsZSwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIChuZXcgRWFjaFByb21pc2UoJGl0ZXJhYmxlLCBbCiAgICAgICAgICAgICdmdWxmaWxsZWQnID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAgICAgJ3JlamVjdGVkJyA9PiAkb25SZWplY3RlZCwKICAgICAgICAgICAgJ2NvbmN1cnJlbmN5JyA9PiAkY29uY3VycmVuY3ksCiAgICAgICAgXSkpLT5wcm9taXNlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMaWtlIGxpbWl0LCBidXQgZW5zdXJlcyB0aGF0IG5vIHByb21pc2UgaW4gdGhlIGdpdmVuICRpdGVyYWJsZSBhcmd1bWVudAogICAgICogaXMgcmVqZWN0ZWQuIElmIGFueSBwcm9taXNlIGlzIHJlamVjdGVkLCB0aGVuIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBpcwogICAgICogcmVqZWN0ZWQgd2l0aCB0aGUgZW5jb3VudGVyZWQgcmVqZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgJGl0ZXJhYmxlCiAgICAgKiBAcGFyYW0gaW50fGNhbGxhYmxlICRjb25jdXJyZW5jeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9mTGltaXRBbGwoCiAgICAgICAgJGl0ZXJhYmxlLAogICAgICAgICRjb25jdXJyZW5jeSwKICAgICAgICA/Y2FsbGFibGUgJG9uRnVsZmlsbGVkID0gbnVsbAogICAgKTogUHJvbWlzZUludGVyZmFjZSB7CiAgICAgICAgJGl0ZXJhYmxlID0gc2VsZjo6cHJlcGFyZUl0ZXJhYmxlKCRpdGVyYWJsZSwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6Om9mTGltaXQoCiAgICAgICAgICAgICRpdGVyYWJsZSwKICAgICAgICAgICAgJGNvbmN1cnJlbmN5LAogICAgICAgICAgICAkb25GdWxmaWxsZWQsCiAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uLCAkaWR4LCBQcm9taXNlSW50ZXJmYWNlICRhZ2dyZWdhdGUpOiB2b2lkIHsKICAgICAgICAgICAgICAgICRhZ2dyZWdhdGUtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUl0ZXJhYmxlKCRpdGVyYWJsZSwgc3RyaW5nICRtZXRob2QpOiBpdGVyYWJsZQogICAgewogICAgICAgIGlmIChpc19pdGVyYWJsZSgkaXRlcmFibGUpKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlcmFibGU7CiAgICAgICAgfQoKICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHJvbWlzZXMnLAogICAgICAgICAgICAnMi41JywKICAgICAgICAgICAgJ1Bhc3NpbmcgYSBub24taXRlcmFibGUgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wcm9taXNlcyAzLjAgd2lsbCByZXF1aXJlIGFuIGl0ZXJhYmxlLicsCiAgICAgICAgICAgIHNlbGY6OmNsYXNzLAogICAgICAgICAgICAkbWV0aG9kCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIFskaXRlcmFibGVdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/EachPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgcHJvbWlzZSB0aGF0IGl0ZXJhdGVzIG92ZXIgbWFueSBwcm9taXNlcyBhbmQgaW52b2tlcwogKiBzaWRlLWVmZmVjdCBmdW5jdGlvbnMgaW4gdGhlIHByb2Nlc3MuCiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgRWFjaFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNvckludGVyZmFjZQp7CiAgICBwcml2YXRlICRwZW5kaW5nID0gW107CgogICAgcHJpdmF0ZSAkbmV4dFBlbmRpbmdJbmRleCA9IDA7CgogICAgLyoqIEB2YXIgXEl0ZXJhdG9yfG51bGwgKi8KICAgIHByaXZhdGUgJGl0ZXJhYmxlOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfGludHxudWxsICovCiAgICBwcml2YXRlICRjb25jdXJyZW5jeTsKCiAgICAvKiogQHZhciBjYWxsYWJsZXxudWxsICovCiAgICBwcml2YXRlICRvbkZ1bGZpbGxlZDsKCiAgICAvKiogQHZhciBjYWxsYWJsZXxudWxsICovCiAgICBwcml2YXRlICRvblJlamVjdGVkOwoKICAgIC8qKiBAdmFyIFByb21pc2V8bnVsbCAqLwogICAgcHJpdmF0ZSAkYWdncmVnYXRlOwoKICAgIC8qKiBAdmFyIGJvb2x8bnVsbCAqLwogICAgcHJpdmF0ZSAkbXV0ZXg7CgogICAgLyoqCiAgICAgKiBDb25maWd1cmF0aW9uIGhhc2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXkgdmFsdWUgcGFpcnM6CiAgICAgKgogICAgICogLSBmdWxmaWxsZWQ6IChjYWxsYWJsZSkgSW52b2tlZCB3aGVuIGEgcHJvbWlzZSBmdWxmaWxscy4gVGhlIGZ1bmN0aW9uCiAgICAgKiAgIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBmdWxmaWxsbWVudCB2YWx1ZSwgdGhlIGluZGV4CiAgICAgKiAgIHBvc2l0aW9uIGZyb20gdGhlIGl0ZXJhYmxlIGxpc3Qgb2YgdGhlIHByb21pc2UsIGFuZCB0aGUgYWdncmVnYXRlCiAgICAgKiAgIHByb21pc2UgdGhhdCBtYW5hZ2VzIGFsbCBvZiB0aGUgcHJvbWlzZXMuIFRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBtYXkKICAgICAqICAgYmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrIHRvIHNob3J0LWNpcmN1aXQgdGhlIHByb21pc2UuCiAgICAgKiAtIHJlamVjdGVkOiAoY2FsbGFibGUpIEludm9rZWQgd2hlbiBhIHByb21pc2UgaXMgcmVqZWN0ZWQuIFRoZQogICAgICogICBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgdGhlCiAgICAgKiAgIGluZGV4IHBvc2l0aW9uIGZyb20gdGhlIGl0ZXJhYmxlIGxpc3Qgb2YgdGhlIHByb21pc2UsIGFuZCB0aGUKICAgICAqICAgYWdncmVnYXRlIHByb21pc2UgdGhhdCBtYW5hZ2VzIGFsbCBvZiB0aGUgcHJvbWlzZXMuIFRoZSBhZ2dyZWdhdGUKICAgICAqICAgcHJvbWlzZSBtYXkgYmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrIHRvIHNob3J0LWNpcmN1aXQKICAgICAqICAgdGhlIHByb21pc2UuCiAgICAgKiAtIGNvbmN1cnJlbmN5OiAoaW50ZWdlcikgUGFzcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGxpbWl0IHRoZQogICAgICogICBhbGxvd2VkIG51bWJlciBvZiBvdXRzdGFuZGluZyBjb25jdXJyZW50bHkgZXhlY3V0aW5nIHByb21pc2VzLAogICAgICogICBjcmVhdGluZyBhIGNhcHBlZCBwb29sIG9mIHByb21pc2VzLiBUaGVyZSBpcyBubyBsaW1pdCBieSBkZWZhdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkaXRlcmFibGUgUHJvbWlzZXMgb3IgdmFsdWVzIHRvIGl0ZXJhdGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbmZpZyAgIENvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGl0ZXJhYmxlLCBhcnJheSAkY29uZmlnID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc19pdGVyYWJsZSgkaXRlcmFibGUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHJvbWlzZXMnLAogICAgICAgICAgICAgICAgJzIuNScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyBhIG5vbi1pdGVyYWJsZSB0byAlczo6JXMoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3Byb21pc2VzIDMuMCB3aWxsIHJlcXVpcmUgYW4gaXRlcmFibGUuJywKICAgICAgICAgICAgICAgIF9fQ0xBU1NfXywKICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXwogICAgICAgICAgICApOwoKICAgICAgICAgICAgJGl0ZXJhYmxlID0gWyRpdGVyYWJsZV07CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aXRlcmFibGUgPSBDcmVhdGU6Oml0ZXJGb3IoJGl0ZXJhYmxlKTsKCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2NvbmN1cnJlbmN5J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25jdXJyZW5jeSA9ICRjb25maWdbJ2NvbmN1cnJlbmN5J107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snZnVsZmlsbGVkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5vbkZ1bGZpbGxlZCA9ICRjb25maWdbJ2Z1bGZpbGxlZCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ3JlamVjdGVkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5vblJlamVjdGVkID0gJGNvbmZpZ1sncmVqZWN0ZWQnXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBJbnZhbGlkTnVsbGFibGVSZXR1cm5UeXBlICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvbWlzZSgpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5hZ2dyZWdhdGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZ2dyZWdhdGU7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+Y3JlYXRlUHJvbWlzZSgpOwogICAgICAgICAgICAvKiogQHBzYWxtLWFzc2VydCBQcm9taXNlICR0aGlzLT5hZ2dyZWdhdGUgKi8KICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlLT5yZXdpbmQoKTsKICAgICAgICAgICAgJHRoaXMtPnJlZmlsbFBlbmRpbmcoKTsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+cGVuZGluZykgewogICAgICAgICAgICAgICAgVXRpbHM6OnF1ZXVlKCktPmFkZChmdW5jdGlvbiAoKTogdm9pZCB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWdncmVnYXRlIHx8IElzOjpzZXR0bGVkKCR0aGlzLT5hZ2dyZWdhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jaGVja0lmRmluaXNoZWQoKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTnVsbGFibGVSZXR1cm5TdGF0ZW1lbnQKICAgICAgICAgKi8KICAgICAgICByZXR1cm4gJHRoaXMtPmFnZ3JlZ2F0ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICR0aGlzLT5hZ2dyZWdhdGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKTogdm9pZCB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+Y2hlY2tJZkZpbmlzaGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXNldCgkdGhpcy0+cGVuZGluZyk7CiAgICAgICAgICAgIC8vIENvbnN1bWUgYSBwb3RlbnRpYWxseSBmbHVjdHVhdGluZyBsaXN0IG9mIHByb21pc2VzIHdoaWxlCiAgICAgICAgICAgIC8vIGVuc3VyaW5nIHRoYXQgaW5kZXhlcyBhcmUgbWFpbnRhaW5lZCAocHJlY2x1ZGluZyBhcnJheV9zaGlmdCkuCiAgICAgICAgICAgIHdoaWxlICgkcHJvbWlzZSA9IGN1cnJlbnQoJHRoaXMtPnBlbmRpbmcpKSB7CiAgICAgICAgICAgICAgICBuZXh0KCR0aGlzLT5wZW5kaW5nKTsKICAgICAgICAgICAgICAgICRwcm9taXNlLT53YWl0KCk7CiAgICAgICAgICAgICAgICBpZiAoSXM6OnNldHRsZWQoJHRoaXMtPmFnZ3JlZ2F0ZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIHJlZmVyZW5jZXMgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC4KICAgICAgICAkY2xlYXJGbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHsKICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlID0gJHRoaXMtPmNvbmN1cnJlbmN5ID0gJHRoaXMtPnBlbmRpbmcgPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQgPSAkdGhpcy0+b25SZWplY3RlZCA9IG51bGw7CiAgICAgICAgICAgICR0aGlzLT5uZXh0UGVuZGluZ0luZGV4ID0gMDsKICAgICAgICB9OwoKICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT50aGVuKCRjbGVhckZuLCAkY2xlYXJGbik7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWZpbGxQZW5kaW5nKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jb25jdXJyZW5jeSkgewogICAgICAgICAgICAvLyBBZGQgYWxsIHBlbmRpbmcgcHJvbWlzZXMuCiAgICAgICAgICAgIHdoaWxlICgkdGhpcy0+YWRkUGVuZGluZygpICYmICR0aGlzLT5hZHZhbmNlSXRlcmF0b3IoKSkgewogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgb25seSB1cCB0byBOIHBlbmRpbmcgcHJvbWlzZXMuCiAgICAgICAgJGNvbmN1cnJlbmN5ID0gaXNfY2FsbGFibGUoJHRoaXMtPmNvbmN1cnJlbmN5KQogICAgICAgICAgICA/ICgkdGhpcy0+Y29uY3VycmVuY3kpKGNvdW50KCR0aGlzLT5wZW5kaW5nKSkKICAgICAgICAgICAgOiAkdGhpcy0+Y29uY3VycmVuY3k7CiAgICAgICAgJGNvbmN1cnJlbmN5ID0gbWF4KCRjb25jdXJyZW5jeSAtIGNvdW50KCR0aGlzLT5wZW5kaW5nKSwgMCk7CiAgICAgICAgLy8gQ29uY3VycmVuY3kgbWF5IGJlIHNldCB0byAwIHRvIGRpc2FsbG93IG5ldyBwcm9taXNlcy4KICAgICAgICBpZiAoISRjb25jdXJyZW5jeSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIEFkZCB0aGUgZmlyc3QgcGVuZGluZyBwcm9taXNlLgogICAgICAgICR0aGlzLT5hZGRQZW5kaW5nKCk7CiAgICAgICAgLy8gTm90ZSB0aGlzIGlzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbmN1cnJlbmN5PTEgc28gdGhhdCB3ZSBkbwogICAgICAgIC8vIG5vdCBhZHZhbmNlIHRoZSBpdGVyYXRvciBhZnRlciBhZGRpbmcgdGhlIGZpcnN0IHByb21pc2UuIFRoaXMKICAgICAgICAvLyBoZWxwcyB3b3JrIGFyb3VuZCBpc3N1ZXMgd2l0aCBnZW5lcmF0b3JzIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlCiAgICAgICAgLy8gbmV4dCB2YWx1ZSB0byB5aWVsZCB1bnRpbCBwcm9taXNlIGNhbGxiYWNrcyBhcmUgY2FsbGVkLgogICAgICAgIHdoaWxlICgtLSRjb25jdXJyZW5jeQogICAgICAgICAgICAmJiAkdGhpcy0+YWR2YW5jZUl0ZXJhdG9yKCkKICAgICAgICAgICAgJiYgJHRoaXMtPmFkZFBlbmRpbmcoKSkgewogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZFBlbmRpbmcoKTogYm9vbAogICAgewogICAgICAgIGlmICghJHRoaXMtPml0ZXJhYmxlIHx8ICEkdGhpcy0+aXRlcmFibGUtPnZhbGlkKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHByb21pc2UgPSBDcmVhdGU6OnByb21pc2VGb3IoJHRoaXMtPml0ZXJhYmxlLT5jdXJyZW50KCkpOwogICAgICAgICRrZXkgPSAkdGhpcy0+aXRlcmFibGUtPmtleSgpOwoKICAgICAgICAvLyBJdGVyYWJsZSBrZXlzIG1heSBub3QgYmUgdW5pcXVlLCBzbyB3ZSB1c2UgYSBjb3VudGVyIHRvCiAgICAgICAgLy8gZ3VhcmFudGVlIHVuaXF1ZW5lc3MKICAgICAgICAkaWR4ID0gJHRoaXMtPm5leHRQZW5kaW5nSW5kZXgrKzsKCiAgICAgICAgJHRoaXMtPnBlbmRpbmdbJGlkeF0gPSAkcHJvbWlzZS0+dGhlbigKICAgICAgICAgICAgZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkaWR4LCAka2V5KTogdm9pZCB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm9uRnVsZmlsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgKCR0aGlzLT5vbkZ1bGZpbGxlZCkoCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgJGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RlcCgkaWR4KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGlkeCwgJGtleSk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgKCR0aGlzLT5vblJlamVjdGVkKSgKICAgICAgICAgICAgICAgICAgICAgICAgJHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgJGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RlcCgkaWR4KTsKICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWR2YW5jZUl0ZXJhdG9yKCk6IGJvb2wKICAgIHsKICAgICAgICAvLyBQbGFjZSBhIGxvY2sgb24gdGhlIGl0ZXJhdG9yIHNvIHRoYXQgd2UgZW5zdXJlIHRvIG5vdCByZWN1cnNlLAogICAgICAgIC8vIHByZXZlbnRpbmcgZmF0YWwgZ2VuZXJhdG9yIGVycm9ycy4KICAgICAgICBpZiAoJHRoaXMtPm11dGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5tdXRleCA9IHRydWU7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5pdGVyYWJsZS0+bmV4dCgpOwogICAgICAgICAgICAkdGhpcy0+bXV0ZXggPSBmYWxzZTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgJHRoaXMtPm11dGV4ID0gZmFsc2U7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc3RlcChpbnQgJGlkeCk6IHZvaWQKICAgIHsKICAgICAgICAvLyBJZiB0aGUgcHJvbWlzZSB3YXMgYWxyZWFkeSByZXNvbHZlZCwgdGhlbiBpZ25vcmUgdGhpcyBzdGVwLgogICAgICAgIGlmIChJczo6c2V0dGxlZCgkdGhpcy0+YWdncmVnYXRlKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB1bnNldCgkdGhpcy0+cGVuZGluZ1skaWR4XSk7CgogICAgICAgIC8vIE9ubHkgcmVmaWxsIHBlbmRpbmcgcHJvbWlzZXMgaWYgd2UgYXJlIG5vdCBsb2NrZWQsIHByZXZlbnRpbmcgdGhlCiAgICAgICAgLy8gRWFjaFByb21pc2UgdG8gcmVjdXJzaXZlbHkgaW52b2tlIHRoZSBwcm92aWRlZCBpdGVyYXRvciwgd2hpY2gKICAgICAgICAvLyBjYXVzZSBhIGZhdGFsIGVycm9yOiAiQ2Fubm90IHJlc3VtZSBhbiBhbHJlYWR5IHJ1bm5pbmcgZ2VuZXJhdG9yIgogICAgICAgIGlmICgkdGhpcy0+YWR2YW5jZUl0ZXJhdG9yKCkgJiYgISR0aGlzLT5jaGVja0lmRmluaXNoZWQoKSkgewogICAgICAgICAgICAvLyBBZGQgbW9yZSBwZW5kaW5nIHByb21pc2VzIGlmIHBvc3NpYmxlLgogICAgICAgICAgICAkdGhpcy0+cmVmaWxsUGVuZGluZygpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrSWZGaW5pc2hlZCgpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+cGVuZGluZyAmJiAhJHRoaXMtPml0ZXJhYmxlLT52YWxpZCgpKSB7CiAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgaWYgdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8uCiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlc29sdmUobnVsbCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/FulfilledPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiBmdWxmaWxsZWQuCiAqCiAqIFRoZW5uaW5nIG9mZiBvZiB0aGlzIHByb21pc2Ugd2lsbCBpbnZva2UgdGhlIG9uRnVsZmlsbGVkIGNhbGxiYWNrCiAqIGltbWVkaWF0ZWx5IGFuZCBpZ25vcmUgb3RoZXIgY2FsbGJhY2tzLgogKgogKiBAZmluYWwKICovCmNsYXNzIEZ1bGZpbGxlZFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ3RoZW4nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdZb3UgY2Fubm90IGNyZWF0ZSBhIEZ1bGZpbGxlZFByb21pc2Ugd2l0aCBhIHByb21pc2UuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIC8vIFJldHVybiBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gb25GdWxmaWxsZWQgZnVuY3Rpb24uCiAgICAgICAgaWYgKCEkb25GdWxmaWxsZWQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXVlID0gVXRpbHM6OnF1ZXVlKCk7CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcXVldWUtPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkcCwgJHZhbHVlLCAkb25GdWxmaWxsZWQpOiB2b2lkIHsKICAgICAgICAgICAgaWYgKElzOjpwZW5kaW5nKCRwKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVzb2x2ZSgkb25GdWxmaWxsZWQoJHZhbHVlKSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAgICAgJHAtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICRwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aGVuKG51bGwsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdChib29sICR1bndyYXAgPSB0cnVlKQogICAgewogICAgICAgIHJldHVybiAkdW53cmFwID8gJHRoaXMtPnZhbHVlIDogbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OkZVTEZJTExFRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSAhPT0gJHRoaXMtPnZhbHVlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNvbHZlIGEgZnVsZmlsbGVkIHByb21pc2UnKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZWplY3QgYSBmdWxmaWxsZWQgcHJvbWlzZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZAogICAgewogICAgICAgIC8vIHBhc3MKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Is.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIElzCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcHJvbWlzZSBpcyBwZW5kaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBlbmRpbmcoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPmdldFN0YXRlKCkgPT09IFByb21pc2VJbnRlcmZhY2U6OlBFTkRJTkc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSBwcm9taXNlIGlzIGZ1bGZpbGxlZCBvciByZWplY3RlZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXR0bGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcHJvbWlzZSBpcyBmdWxmaWxsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnVsZmlsbGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpGVUxGSUxMRUQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYSBwcm9taXNlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlamVjdGVkKFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpSRUpFQ1RFRDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Promise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBQcm9taXNlcy9BKyBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByZWN1cnNpb24gd2hlbiBwb3NzaWJsZS4KICoKICogQHNlZSBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLwogKgogKiBAZmluYWwKICovCmNsYXNzIFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHN0YXRlID0gc2VsZjo6UEVORElORzsKICAgIHByaXZhdGUgJHJlc3VsdDsKICAgIHByaXZhdGUgJGNhbmNlbEZuOwogICAgcHJpdmF0ZSAkd2FpdEZuOwogICAgcHJpdmF0ZSAkd2FpdExpc3Q7CiAgICBwcml2YXRlICRoYW5kbGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YWl0Rm4gICBGbiB0aGF0IHdoZW4gaW52b2tlZCByZXNvbHZlcyB0aGUgcHJvbWlzZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FuY2VsRm4gRm4gdGhhdCB3aGVuIGludm9rZWQgY2FuY2VscyB0aGUgcHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgID9jYWxsYWJsZSAkd2FpdEZuID0gbnVsbCwKICAgICAgICA/Y2FsbGFibGUgJGNhbmNlbEZuID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR3YWl0Rm47CiAgICAgICAgJHRoaXMtPmNhbmNlbEZuID0gJGNhbmNlbEZuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShudWxsLCBbJHRoaXMsICdjYW5jZWwnXSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVyc1tdID0gWyRwLCAkb25GdWxmaWxsZWQsICRvblJlamVjdGVkXTsKICAgICAgICAgICAgJHAtPndhaXRMaXN0ID0gJHRoaXMtPndhaXRMaXN0OwogICAgICAgICAgICAkcC0+d2FpdExpc3RbXSA9ICR0aGlzOwoKICAgICAgICAgICAgcmV0dXJuICRwOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIGEgZnVsZmlsbGVkIHByb21pc2UgYW5kIGltbWVkaWF0ZWx5IGludm9rZSBhbnkgY2FsbGJhY2tzLgogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OkZVTEZJTExFRCkgewogICAgICAgICAgICAkcHJvbWlzZSA9IENyZWF0ZTo6cHJvbWlzZUZvcigkdGhpcy0+cmVzdWx0KTsKCiAgICAgICAgICAgIHJldHVybiAkb25GdWxmaWxsZWQgPyAkcHJvbWlzZS0+dGhlbigkb25GdWxmaWxsZWQpIDogJHByb21pc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBJdCdzIGVpdGhlciBjYW5jZWxsZWQgb3IgcmVqZWN0ZWQsIHNvIHJldHVybiBhIHJlamVjdGVkIHByb21pc2UKICAgICAgICAvLyBhbmQgaW1tZWRpYXRlbHkgaW52b2tlIGFueSBjYWxsYmFja3MuCiAgICAgICAgJHJlamVjdGlvbiA9IENyZWF0ZTo6cmVqZWN0aW9uRm9yKCR0aGlzLT5yZXN1bHQpOwoKICAgICAgICByZXR1cm4gJG9uUmVqZWN0ZWQgPyAkcmVqZWN0aW9uLT50aGVuKG51bGwsICRvblJlamVjdGVkKSA6ICRyZWplY3Rpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KGJvb2wgJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT53YWl0KCR1bndyYXApOwogICAgICAgIH0KICAgICAgICBpZiAoJHVud3JhcCkgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEl0J3MgcmVqZWN0ZWQgc28gInVud3JhcCIgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgdGhyb3cgQ3JlYXRlOjpleGNlcHRpb25Gb3IoJHRoaXMtPnJlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgIT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGlmICgkdGhpcy0+Y2FuY2VsRm4pIHsKICAgICAgICAgICAgJGZuID0gJHRoaXMtPmNhbmNlbEZuOwogICAgICAgICAgICAkdGhpcy0+Y2FuY2VsRm4gPSBudWxsOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGZuKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2Ugb25seSBpZiBpdCB3YXNuJ3QgcmVqZWN0ZWQgaW4gYSB0aGVuIGNhbGxiYWNrLgogICAgICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q29uZGl0aW9uICovCiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSA9PT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAkdGhpcy0+cmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FeGNlcHRpb24oJ1Byb21pc2UgaGFzIGJlZW4gY2FuY2VsbGVkJykpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNldHRsZShzZWxmOjpGVUxGSUxMRUQsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZXR0bGUoc2VsZjo6UkVKRUNURUQsICRyZWFzb24pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0dGxlKHN0cmluZyAkc3RhdGUsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnN0YXRlICE9PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIC8vIElnbm9yZSBjYWxscyB3aXRoIHRoZSBzYW1lIHJlc29sdXRpb24uCiAgICAgICAgICAgIGlmICgkc3RhdGUgPT09ICR0aGlzLT5zdGF0ZSAmJiAkdmFsdWUgPT09ICR0aGlzLT5yZXN1bHQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyAkdGhpcy0+c3RhdGUgPT09ICRzdGF0ZQogICAgICAgICAgICAgICAgPyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJUaGUgcHJvbWlzZSBpcyBhbHJlYWR5IHskc3RhdGV9LiIpCiAgICAgICAgICAgICAgICA6IG5ldyBcTG9naWNFeGNlcHRpb24oIkNhbm5vdCBjaGFuZ2UgYSB7JHRoaXMtPnN0YXRlfSBwcm9taXNlIHRvIHskc3RhdGV9Iik7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHZhbHVlID09PSAkdGhpcykgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgZnVsZmlsbCBvciByZWplY3QgYSBwcm9taXNlIHdpdGggaXRzZWxmJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDbGVhciBvdXQgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlIGJ1dCBzdGFzaCB0aGUgaGFuZGxlcnMuCiAgICAgICAgJHRoaXMtPnN0YXRlID0gJHN0YXRlOwogICAgICAgICR0aGlzLT5yZXN1bHQgPSAkdmFsdWU7CiAgICAgICAgJGhhbmRsZXJzID0gJHRoaXMtPmhhbmRsZXJzOwogICAgICAgICR0aGlzLT5oYW5kbGVycyA9IG51bGw7CiAgICAgICAgJHRoaXMtPndhaXRMaXN0ID0gJHRoaXMtPndhaXRGbiA9IG51bGw7CiAgICAgICAgJHRoaXMtPmNhbmNlbEZuID0gbnVsbDsKCiAgICAgICAgaWYgKCEkaGFuZGxlcnMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBub3QgYSBzZXR0bGVkIHByb21pc2Ugb3IgYSB0aGVuYWJsZSwgdGhlbiByZXNvbHZlCiAgICAgICAgLy8gaXQgaW4gdGhlIHRhc2sgcXVldWUgdXNpbmcgdGhlIGNvcnJlY3QgSUQuCiAgICAgICAgaWYgKCFpc19vYmplY3QoJHZhbHVlKSB8fCAhbWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgJGlkID0gJHN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQgPyAxIDogMjsKICAgICAgICAgICAgLy8gSXQncyBhIHN1Y2Nlc3MsIHNvIHJlc29sdmUgdGhlIGhhbmRsZXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgICAgVXRpbHM6OnF1ZXVlKCktPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkaWQsICR2YWx1ZSwgJGhhbmRsZXJzKTogdm9pZCB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmOjpjYWxsSGFuZGxlcigkaWQsICR2YWx1ZSwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2VpZiAoJHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBJczo6cGVuZGluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IG1lcmdlIG91ciBoYW5kbGVycyBvbnRvIHRoZSBuZXh0IHByb21pc2UuCiAgICAgICAgICAgICR2YWx1ZS0+aGFuZGxlcnMgPSBhcnJheV9tZXJnZSgkdmFsdWUtPmhhbmRsZXJzLCAkaGFuZGxlcnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIGhhbmRsZXJzIHdoZW4gdGhlIGZvcndhcmRlZCBwcm9taXNlIGlzIHJlc29sdmVkLgogICAgICAgICAgICAkdmFsdWUtPnRoZW4oCiAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkaGFuZGxlcnMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2FsbEhhbmRsZXIoMSwgJHZhbHVlLCAkaGFuZGxlcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN0YXRpYyBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkaGFuZGxlcnMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2FsbEhhbmRsZXIoMiwgJHJlYXNvbiwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxsIGEgc3RhY2sgb2YgaGFuZGxlcnMgdXNpbmcgYSBzcGVjaWZpYyBjYWxsYmFjayBpbmRleCBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICRpbmRleCAgIDEgKHJlc29sdmUpIG9yIDIgKHJlamVjdCkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhhbmRsZXIgQXJyYXkgb2YgaGFuZGxlciBkYXRhIChwcm9taXNlIGFuZCBjYWxsYmFja3MpLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYWxsSGFuZGxlcihpbnQgJGluZGV4LCAkdmFsdWUsIGFycmF5ICRoYW5kbGVyKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgKi8KICAgICAgICAkcHJvbWlzZSA9ICRoYW5kbGVyWzBdOwoKICAgICAgICAvLyBUaGUgcHJvbWlzZSBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBvciByZXNvbHZlZCBiZWZvcmUgcGxhY2luZwogICAgICAgIC8vIHRoaXMgdGh1bmsgaW4gdGhlIHF1ZXVlLgogICAgICAgIGlmIChJczo6c2V0dGxlZCgkcHJvbWlzZSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRoYW5kbGVyWyRpbmRleF0pKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICogSWYgJGYgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlbiAkaGFuZGxlciB3aWxsIGJlIGluIHRoZSBleGNlcHRpb24KICAgICAgICAgICAgICAgICAqIHN0YWNrIHRyYWNlLiBTaW5jZSAkaGFuZGxlciBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGFibGUKICAgICAgICAgICAgICAgICAqIGl0c2VsZiB3ZSBnZXQgYSBjaXJjdWxhciByZWZlcmVuY2UuIFdlIGNsZWFyIHRoZSAkaGFuZGxlcgogICAgICAgICAgICAgICAgICogaGVyZSB0byBhdm9pZCB0aGF0IG1lbW9yeSBsZWFrLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAkZiA9ICRoYW5kbGVyWyRpbmRleF07CiAgICAgICAgICAgICAgICB1bnNldCgkaGFuZGxlcik7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkZigkdmFsdWUpKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRpbmRleCA9PT0gMSkgewogICAgICAgICAgICAgICAgLy8gRm9yd2FyZCByZXNvbHV0aW9uIHZhbHVlcyBhcy1pcy4KICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCR2YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBGb3J3YXJkIHJlamVjdGlvbnMgZG93biB0aGUgY2hhaW4uCiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVqZWN0KCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRyZWFzb24pIHsKICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB3YWl0SWZQZW5kaW5nKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnN0YXRlICE9PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPndhaXRGbikgewogICAgICAgICAgICAkdGhpcy0+aW52b2tlV2FpdEZuKCk7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT53YWl0TGlzdCkgewogICAgICAgICAgICAkdGhpcy0+aW52b2tlV2FpdExpc3QoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHdhaXQgZnVuY3Rpb24sIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLgogICAgICAgICAgICAkdGhpcy0+cmVqZWN0KCdDYW5ub3Qgd2FpdCBvbiBhIHByb21pc2UgdGhhdCBoYXMgJwogICAgICAgICAgICAgICAgLidubyBpbnRlcm5hbCB3YWl0IGZ1bmN0aW9uLiBZb3UgbXVzdCBwcm92aWRlIGEgd2FpdCAnCiAgICAgICAgICAgICAgICAuJ2Z1bmN0aW9uIHdoZW4gY29uc3RydWN0aW5nIHRoZSBwcm9taXNlIHRvIGJlIGFibGUgdG8gJwogICAgICAgICAgICAgICAgLid3YWl0IG9uIGEgcHJvbWlzZS4nKTsKICAgICAgICB9CgogICAgICAgIFV0aWxzOjpxdWV1ZSgpLT5ydW4oKTsKCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb24gKi8KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJ0ludm9raW5nIHRoZSB3YWl0IGNhbGxiYWNrIGRpZCBub3QgcmVzb2x2ZSB0aGUgcHJvbWlzZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVdhaXRGbigpOiB2b2lkCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHdmbiA9ICR0aGlzLT53YWl0Rm47CiAgICAgICAgICAgICR0aGlzLT53YWl0Rm4gPSBudWxsOwogICAgICAgICAgICAkd2ZuKHRydWUpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJHJlYXNvbikgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgcHJvbWlzZSBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgeWV0LCBzbyByZWplY3QgdGhlIHByb21pc2UKICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgcHJvbWlzZSB3YXMgYWxyZWFkeSByZXNvbHZlZCwgc28gdGhlcmUncyBhIHByb2JsZW0gaW4KICAgICAgICAgICAgICAgIC8vIHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgICAgICAgIHRocm93ICRyZWFzb247CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbnZva2VXYWl0TGlzdCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHdhaXRMaXN0ID0gJHRoaXMtPndhaXRMaXN0OwogICAgICAgICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR3YWl0TGlzdCBhcyAkcmVzdWx0KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRyZXN1bHQtPndhaXRJZlBlbmRpbmcoKTsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0LT5yZXN1bHQ7CiAgICAgICAgICAgIH0gd2hpbGUgKCRyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKTsKCiAgICAgICAgICAgIGlmICgkcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgJHJlc3VsdC0+d2FpdChmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromiseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCiAqCiAqIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyB0aGVuIG1ldGhvZCwKICogd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2ZW50dWFsIHZhbHVlIG9yCiAqIHRoZSByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCiAqCiAqIEBzZWUgaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8KICovCmludGVyZmFjZSBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBjb25zdCBQRU5ESU5HID0gJ3BlbmRpbmcnOwogICAgcHVibGljIGNvbnN0IEZVTEZJTExFRCA9ICdmdWxmaWxsZWQnOwogICAgcHVibGljIGNvbnN0IFJFSkVDVEVEID0gJ3JlamVjdGVkJzsKCiAgICAvKioKICAgICAqIEFwcGVuZHMgZnVsZmlsbG1lbnQgYW5kIHJlamVjdGlvbiBoYW5kbGVycyB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMKICAgICAqIGEgbmV3IHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxlZCBoYW5kbGVyLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQgSW52b2tlZCB3aGVuIHRoZSBwcm9taXNlIGZ1bGZpbGxzLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkICBJbnZva2VkIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBBcHBlbmRzIGEgcmVqZWN0aW9uIGhhbmRsZXIgY2FsbGJhY2sgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zIGEgbmV3CiAgICAgKiBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBpZiBpdCBpcyBjYWxsZWQsCiAgICAgKiBvciB0byBpdHMgb3JpZ2luYWwgZnVsZmlsbG1lbnQgdmFsdWUgaWYgdGhlIHByb21pc2UgaXMgaW5zdGVhZAogICAgICogZnVsZmlsbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25SZWplY3RlZCBJbnZva2VkIHdoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpOiBQcm9taXNlSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZSAoInBlbmRpbmciLCAicmVqZWN0ZWQiLCBvciAiZnVsZmlsbGVkIikuCiAgICAgKgogICAgICogVGhlIHRocmVlIHN0YXRlcyBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjb25zdGFudHMgZGVmaW5lZCBvbgogICAgICogUHJvbWlzZUludGVyZmFjZTogUEVORElORywgRlVMRklMTEVELCBhbmQgUkVKRUNURUQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBSZWplY3QgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pOiB2b2lkOwoKICAgIC8qKgogICAgICogQ2FuY2VscyB0aGUgcHJvbWlzZSBpZiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9taXNlcy1hcGx1cy9jYW5jZWxsYXRpb24tc3BlYy9pc3N1ZXMvNwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBXYWl0cyB1bnRpbCB0aGUgcHJvbWlzZSBjb21wbGV0ZXMgaWYgcG9zc2libGUuCiAgICAgKgogICAgICogUGFzcyAkdW53cmFwIGFzIHRydWUgdG8gdW53cmFwIHRoZSByZXN1bHQgb2YgdGhlIHByb21pc2UsIGVpdGhlcgogICAgICogcmV0dXJuaW5nIHRoZSByZXNvbHZlZCB2YWx1ZSBvciB0aHJvd2luZyB0aGUgcmVqZWN0ZWQgZXhjZXB0aW9uLgogICAgICoKICAgICAqIElmIHRoZSBwcm9taXNlIGNhbm5vdCBiZSB3YWl0ZWQgb24sIHRoZW4gdGhlIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb21pc2UgaGFzIG5vIHdhaXQgZnVuY3Rpb24gb3IgaWYgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlIGRvZXMgbm90IHNldHRsZSBhZnRlciB3YWl0aW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdChib29sICR1bndyYXAgPSB0cnVlKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromisorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCB3aXRoIGNsYXNzZXMgdGhhdCByZXR1cm4gYSBwcm9taXNlLgogKi8KaW50ZXJmYWNlIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByb21pc2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9taXNlKCk6IFByb21pc2VJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectedPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZC4KICoKICogVGhlbm5pbmcgb2ZmIG9mIHRoaXMgcHJvbWlzZSB3aWxsIGludm9rZSB0aGUgb25SZWplY3RlZCBjYWxsYmFjawogKiBpbW1lZGlhdGVseSBhbmQgaWdub3JlIG90aGVyIGNhbGxiYWNrcy4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBSZWplY3RlZFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uKQogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHJlYXNvbikgJiYgbWV0aG9kX2V4aXN0cygkcmVhc29uLCAndGhlbicpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgY3JlYXRlIGEgUmVqZWN0ZWRQcm9taXNlIHdpdGggYSBwcm9taXNlLicKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWFzb24gPSAkcmVhc29uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgID9jYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgID9jYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKICAgICk6IFByb21pc2VJbnRlcmZhY2UgewogICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gb25SZWplY3RlZCBjYWxsYmFjayB0aGVuIGp1c3QgcmV0dXJuIHNlbGYuCiAgICAgICAgaWYgKCEkb25SZWplY3RlZCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkcXVldWUgPSBVdGlsczo6cXVldWUoKTsKICAgICAgICAkcmVhc29uID0gJHRoaXMtPnJlYXNvbjsKICAgICAgICAkcCA9IG5ldyBQcm9taXNlKFskcXVldWUsICdydW4nXSk7CiAgICAgICAgJHF1ZXVlLT5hZGQoc3RhdGljIGZ1bmN0aW9uICgpIHVzZSAoJHAsICRyZWFzb24sICRvblJlamVjdGVkKTogdm9pZCB7CiAgICAgICAgICAgIGlmIChJczo6cGVuZGluZygkcCkpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSBpZiBvblJlamVjdGVkIGRvZXMgbm90IHRocm93LgogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvblJlamVjdGVkKCRyZWFzb24pKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBvblJlamVjdGVkIHRocmV3LCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlLgogICAgICAgICAgICAgICAgICAgICRwLT5yZWplY3QoJGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiAkcDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKTogUHJvbWlzZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGhlbihudWxsLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoYm9vbCAkdW53cmFwID0gdHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJHVud3JhcCkgewogICAgICAgICAgICB0aHJvdyBDcmVhdGU6OmV4Y2VwdGlvbkZvcigkdGhpcy0+cmVhc29uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6UkVKRUNURUQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNvbHZlIGEgcmVqZWN0ZWQgcHJvbWlzZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWplY3QoJHJlYXNvbik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiAhPT0gJHRoaXMtPnJlYXNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgcmVqZWN0IGEgcmVqZWN0ZWQgcHJvbWlzZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCk6IHZvaWQKICAgIHsKICAgICAgICAvLyBwYXNzCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gd2FpdGluZyBvbiBhIHJlamVjdGVkIHByb21pc2UuCiAqCiAqIFRoZSByZWFzb24gdmFsdWUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2V0UmVhc29uKCkgbWV0aG9kLgogKi8KY2xhc3MgUmVqZWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KewogICAgLyoqIEB2YXIgbWl4ZWQgUmVqZWN0aW9uIHJlYXNvbi4gKi8KICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAkcmVhc29uICAgICAgUmVqZWN0aW9uIHJlYXNvbi4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGVzY3JpcHRpb24gT3B0aW9uYWwgZGVzY3JpcHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uLCA/c3RyaW5nICRkZXNjcmlwdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlYXNvbiA9ICRyZWFzb247CgogICAgICAgICRtZXNzYWdlID0gJ1RoZSBwcm9taXNlIHdhcyByZWplY3RlZCc7CgogICAgICAgIGlmICgkZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy4kZGVzY3JpcHRpb247CiAgICAgICAgfSBlbHNlaWYgKGlzX3N0cmluZygkcmVhc29uKQogICAgICAgICAgICB8fCAoaXNfb2JqZWN0KCRyZWFzb24pICYmIG1ldGhvZF9leGlzdHMoJHJlYXNvbiwgJ19fdG9TdHJpbmcnKSkKICAgICAgICApIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy4kdGhpcy0+cmVhc29uOwogICAgICAgIH0gZWxzZWlmICgkcmVhc29uIGluc3RhbmNlb2YgXEpzb25TZXJpYWxpemFibGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJy5qc29uX2VuY29kZSgkdGhpcy0+cmVhc29uLCBKU09OX1BSRVRUWV9QUklOVCk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlamVjdGlvbiByZWFzb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHRhc2sgcXVldWUgdGhhdCBleGVjdXRlcyB0YXNrcyBpbiBhIEZJRk8gb3JkZXIuCiAqCiAqIFRoaXMgdGFzayBxdWV1ZSBjbGFzcyBpcyB1c2VkIHRvIHNldHRsZSBwcm9taXNlcyBhc3luY2hyb25vdXNseSBhbmQKICogbWFpbnRhaW5zIGEgY29uc3RhbnQgc3RhY2sgc2l6ZS4gWW91IGNhbiB1c2UgdGhlIHRhc2sgcXVldWUgYXN5bmNocm9ub3VzbHkKICogYnkgY2FsbGluZyB0aGUgYHJ1bigpYCBmdW5jdGlvbiBvZiB0aGUgZ2xvYmFsIHRhc2sgcXVldWUgaW4gYW4gZXZlbnQgbG9vcC4KICoKICogICAgIEd1enpsZUh0dHBcUHJvbWlzZVxVdGlsczo6cXVldWUoKS0+cnVuKCk7CiAqCiAqIEBmaW5hbAogKi8KY2xhc3MgVGFza1F1ZXVlIGltcGxlbWVudHMgVGFza1F1ZXVlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJGVuYWJsZVNodXRkb3duID0gdHJ1ZTsKICAgIHByaXZhdGUgJHF1ZXVlID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGJvb2wgJHdpdGhTaHV0ZG93biA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKCR3aXRoU2h1dGRvd24pIHsKICAgICAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oZnVuY3Rpb24gKCk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5lbmFibGVTaHV0ZG93bikgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcnVuIHRoZSB0YXNrcyBpZiBhbiBFX0VSUk9SIGRpZG4ndCBvY2N1ci4KICAgICAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoISRlcnIgfHwgKCRlcnJbJ3R5cGUnXSBeIEVfRVJST1IpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW4oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+cXVldWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChjYWxsYWJsZSAkdGFzayk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cXVldWVbXSA9ICR0YXNrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKTogdm9pZAogICAgewogICAgICAgIHdoaWxlICgkdGFzayA9IGFycmF5X3NoaWZ0KCR0aGlzLT5xdWV1ZSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgY2FsbGFibGUgJHRhc2sgKi8KICAgICAgICAgICAgJHRhc2soKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgdGFzayBxdWV1ZSB3aWxsIGJlIHJ1biBhbmQgZXhoYXVzdGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgcHJvY2VzcwogICAgICogZXhpdHMgSUZGIHRoZSBleGl0IGlzIG5vdCB0aGUgcmVzdWx0IG9mIGEgUEhQIEVfRVJST1IgZXJyb3IuCiAgICAgKgogICAgICogWW91IGNhbiBkaXNhYmxlIHJ1bm5pbmcgdGhlIGF1dG9tYXRpYyBzaHV0ZG93biBvZiB0aGUgcXVldWUgYnkgY2FsbGluZwogICAgICogdGhpcyBmdW5jdGlvbi4gSWYgeW91IGRpc2FibGUgdGhlIHRhc2sgcXVldWUgc2h1dGRvd24gcHJvY2VzcywgdGhlbiB5b3UKICAgICAqIE1VU1QgZWl0aGVyIHJ1biB0aGUgdGFzayBxdWV1ZSAoYXMgYSByZXN1bHQgb2YgcnVubmluZyB5b3VyIGV2ZW50IGxvb3AKICAgICAqIG9yIG1hbnVhbGx5IHVzaW5nIHRoZSBydW4oKSBtZXRob2QpIG9yIHdhaXQgb24gZWFjaCBvdXRzdGFuZGluZyBwcm9taXNlLgogICAgICoKICAgICAqIE5vdGU6IFRoaXMgc2h1dGRvd24gd2lsbCBvY2N1ciBiZWZvcmUgYW55IGRlc3RydWN0b3JzIGFyZSB0cmlnZ2VyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlU2h1dGRvd24oKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5lbmFibGVTaHV0ZG93biA9IGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmludGVyZmFjZSBUYXNrUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sOwoKICAgIC8qKgogICAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHF1ZXVlIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0aGUgbmV4dCB0aW1lIHJ1biBpcwogICAgICogY2FsbGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKTogdm9pZDsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYWxsIG9mIHRoZSBwZW5kaW5nIHRhc2sgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKCk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmZpbmFsIGNsYXNzIFV0aWxzCnsKICAgIC8qKgogICAgICogR2V0IHRoZSBnbG9iYWwgdGFzayBxdWV1ZSB1c2VkIGZvciBwcm9taXNlIHJlc29sdXRpb24uCiAgICAgKgogICAgICogVGhpcyB0YXNrIHF1ZXVlIE1VU1QgYmUgcnVuIGluIGFuIGV2ZW50IGxvb3AgaW4gb3JkZXIgZm9yIHByb21pc2VzIHRvIGJlCiAgICAgKiBzZXR0bGVkIGFzeW5jaHJvbm91c2x5LiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gc3luY2hyb25vdXNseQogICAgICogd2FpdGluZyBvbiBhIHByb21pc2UuCiAgICAgKgogICAgICogPGNvZGU+CiAgICAgKiB3aGlsZSAoJGV2ZW50TG9vcC0+aXNSdW5uaW5nKCkpIHsKICAgICAqICAgICBHdXp6bGVIdHRwXFByb21pc2VcVXRpbHM6OnF1ZXVlKCktPnJ1bigpOwogICAgICogfQogICAgICogPC9jb2RlPgogICAgICoKICAgICAqIEBwYXJhbSBUYXNrUXVldWVJbnRlcmZhY2V8bnVsbCAkYXNzaWduIE9wdGlvbmFsbHkgc3BlY2lmeSBhIG5ldyBxdWV1ZSBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBxdWV1ZSg/VGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gPSBudWxsKTogVGFza1F1ZXVlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgc3RhdGljICRxdWV1ZTsKCiAgICAgICAgaWYgKCRhc3NpZ24pIHsKICAgICAgICAgICAgJHF1ZXVlID0gJGFzc2lnbjsKICAgICAgICB9IGVsc2VpZiAoISRxdWV1ZSkgewogICAgICAgICAgICAkcXVldWUgPSBuZXcgVGFza1F1ZXVlKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHF1ZXVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBhIGZ1bmN0aW9uIHRvIHJ1biBpbiB0aGUgdGFzayBxdWV1ZSB3aGVuIGl0IGlzIG5leHQgYHJ1bigpYCBhbmQKICAgICAqIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkIHdpdGggdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHRhc2sgVGFzayBmdW5jdGlvbiB0byBydW4uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGFzayhjYWxsYWJsZSAkdGFzayk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcXVldWUgPSBzZWxmOjpxdWV1ZSgpOwogICAgICAgICRwcm9taXNlID0gbmV3IFByb21pc2UoWyRxdWV1ZSwgJ3J1biddKTsKICAgICAgICAkcXVldWUtPmFkZChmdW5jdGlvbiAoKSB1c2UgKCR0YXNrLCAkcHJvbWlzZSk6IHZvaWQgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKElzOjpwZW5kaW5nKCRwcm9taXNlKSkgewogICAgICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCR0YXNrKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gJHByb21pc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBTeW5jaHJvbm91c2x5IHdhaXRzIG9uIGEgcHJvbWlzZSB0byByZXNvbHZlIGFuZCByZXR1cm5zIGFuIGluc3BlY3Rpb24KICAgICAqIHN0YXRlIGFycmF5LgogICAgICoKICAgICAqIFJldHVybnMgYSBzdGF0ZSBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGEgInN0YXRlIiBrZXkgbWFwcGluZyB0byBhCiAgICAgKiB2YWxpZCBwcm9taXNlIHN0YXRlLiBJZiB0aGUgc3RhdGUgb2YgdGhlIHByb21pc2UgaXMgImZ1bGZpbGxlZCIsIHRoZQogICAgICogYXJyYXkgd2lsbCBjb250YWluIGEgInZhbHVlIiBrZXkgbWFwcGluZyB0byB0aGUgZnVsZmlsbGVkIHZhbHVlIG9mIHRoZQogICAgICogcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQsIHRoZSBhcnJheSB3aWxsIGNvbnRhaW4gYSAicmVhc29uIgogICAgICoga2V5IG1hcHBpbmcgdG8gdGhlIHJlamVjdGlvbiByZWFzb24gb2YgdGhlIHByb21pc2UuCiAgICAgKgogICAgICogQHBhcmFtIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgUHJvbWlzZSBvciB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnNwZWN0KFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpOiBhcnJheQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRCwKICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gJHByb21pc2UtPndhaXQoKSwKICAgICAgICAgICAgXTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIGlmICgkZSBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkZSBpbnN0YW5jZW9mIFJlamVjdGlvbkV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZS0+Z2V0UmVhc29uKCldOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRlXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBXYWl0cyBvbiBhbGwgb2YgdGhlIHByb3ZpZGVkIHByb21pc2VzLCBidXQgZG9lcyBub3QgdW53cmFwIHJlamVjdGVkCiAgICAgKiBwcm9taXNlcyBhcyB0aHJvd24gZXhjZXB0aW9uLgogICAgICoKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheXMuCiAgICAgKgogICAgICogQHNlZSBpbnNwZWN0IGZvciB0aGUgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheSBmb3JtYXQuCiAgICAgKgogICAgICogQHBhcmFtIFByb21pc2VJbnRlcmZhY2VbXSAkcHJvbWlzZXMgVHJhdmVyc2FibGUgb2YgcHJvbWlzZXMgdG8gd2FpdCB1cG9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluc3BlY3RBbGwoJHByb21pc2VzKTogYXJyYXkKICAgIHsKICAgICAgICAkcHJvbWlzZXMgPSBzZWxmOjpwcmVwYXJlSXRlcmFibGUoJHByb21pc2VzLCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICAkcmVzdWx0cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRwcm9taXNlcyBhcyAka2V5ID0+ICRwcm9taXNlKSB7CiAgICAgICAgICAgICRyZXN1bHRzWyRrZXldID0gc2VsZjo6aW5zcGVjdCgkcHJvbWlzZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBXYWl0cyBvbiBhbGwgb2YgdGhlIHByb3ZpZGVkIHByb21pc2VzIGFuZCByZXR1cm5zIHRoZSBmdWxmaWxsZWQgdmFsdWVzLgogICAgICoKICAgICAqIFJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdmFsdWUgb2YgZWFjaCBwcm9taXNlIChpbiB0aGUgc2FtZQogICAgICogb3JkZXIgdGhlIHByb21pc2VzIHdlcmUgcHJvdmlkZWQpLiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIGFueSBvZiB0aGUKICAgICAqIHByb21pc2VzIGFyZSByZWplY3RlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaXRlcmFibGU8UHJvbWlzZUludGVyZmFjZT4gJHByb21pc2VzIEl0ZXJhYmxlIG9mIFByb21pc2VJbnRlcmZhY2Ugb2JqZWN0cyB0byB3YWl0IG9uLgogICAgICoKICAgICAqIEB0aHJvd3MgXFRocm93YWJsZSBvbiBlcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVud3JhcCgkcHJvbWlzZXMpOiBhcnJheQogICAgewogICAgICAgICRwcm9taXNlcyA9IHNlbGY6OnByZXBhcmVJdGVyYWJsZSgkcHJvbWlzZXMsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgICRyZXN1bHRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJHByb21pc2VzIGFzICRrZXkgPT4gJHByb21pc2UpIHsKICAgICAgICAgICAgJHJlc3VsdHNbJGtleV0gPSAkcHJvbWlzZS0+d2FpdCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gYXJyYXkgb2YgcHJvbWlzZXMsIHJldHVybiBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwKICAgICAqIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgYXJlIGZ1bGZpbGxlZC4KICAgICAqCiAgICAgKiBUaGUgcHJvbWlzZSdzIGZ1bGZpbGxtZW50IHZhbHVlIGlzIGFuIGFycmF5IHdpdGggZnVsZmlsbG1lbnQgdmFsdWVzIGF0CiAgICAgKiByZXNwZWN0aXZlIHBvc2l0aW9ucyB0byB0aGUgb3JpZ2luYWwgYXJyYXkuIElmIGFueSBwcm9taXNlIGluIHRoZSBhcnJheQogICAgICogcmVqZWN0cywgdGhlIHJldHVybmVkIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGUgcmVqZWN0aW9uIHJlYXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHByb21pc2VzICBQcm9taXNlcyBvciB2YWx1ZXMuCiAgICAgKiBAcGFyYW0gYm9vbCAgJHJlY3Vyc2l2ZSBJZiB0cnVlLCByZXNvbHZlcyBuZXcgcHJvbWlzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHN0YWNrIGR1cmluZyBpdHMgb3duIHJlc29sdXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWxsKCRwcm9taXNlcywgYm9vbCAkcmVjdXJzaXZlID0gZmFsc2UpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHByb21pc2VzID0gc2VsZjo6cHJlcGFyZUl0ZXJhYmxlKCRwcm9taXNlcywgX19GVU5DVElPTl9fKTsKCiAgICAgICAgJHJlc3VsdHMgPSBbXTsKICAgICAgICAkcHJvbWlzZSA9IEVhY2g6Om9mKAogICAgICAgICAgICAkcHJvbWlzZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUsICRpZHgpIHVzZSAoJiRyZXN1bHRzKTogdm9pZCB7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgsIFByb21pc2UgJGFnZ3JlZ2F0ZSk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKElzOjpwZW5kaW5nKCRhZ2dyZWdhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgJGFnZ3JlZ2F0ZS0+cmVqZWN0KCRyZWFzb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKS0+dGhlbihmdW5jdGlvbiAoKSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICBrc29ydCgkcmVzdWx0cyk7CgogICAgICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICAgICAgfSk7CgogICAgICAgIGlmICh0cnVlID09PSAkcmVjdXJzaXZlKSB7CiAgICAgICAgICAgICRwcm9taXNlID0gJHByb21pc2UtPnRoZW4oZnVuY3Rpb24gKCRyZXN1bHRzKSB1c2UgKCRyZWN1cnNpdmUsICYkcHJvbWlzZXMpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9taXNlcyBhcyAkcHJvbWlzZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChJczo6cGVuZGluZygkcHJvbWlzZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmFsbCgkcHJvbWlzZXMsICRyZWN1cnNpdmUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwcm9taXNlOwogICAgfQoKICAgIC8qKgogICAgICogSW5pdGlhdGUgYSBjb21wZXRpdGl2ZSByYWNlIGJldHdlZW4gbXVsdGlwbGUgcHJvbWlzZXMgb3IgdmFsdWVzICh2YWx1ZXMKICAgICAqIHdpbGwgYmVjb21lIGltbWVkaWF0ZWx5IGZ1bGZpbGxlZCBwcm9taXNlcykuCiAgICAgKgogICAgICogV2hlbiBjb3VudCBhbW91bnQgb2YgcHJvbWlzZXMgaGF2ZSBiZWVuIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkIHByb21pc2UKICAgICAqIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGZ1bGZpbGxtZW50IHZhbHVlcyBvZiB0aGUKICAgICAqIHdpbm5lcnMgaW4gb3JkZXIgb2YgcmVzb2x1dGlvbi4KICAgICAqCiAgICAgKiBUaGlzIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhIHtAc2VlIEFnZ3JlZ2F0ZUV4Y2VwdGlvbn0gaWYgdGhlIG51bWJlcgogICAgICogb2YgZnVsZmlsbGVkIHByb21pc2VzIGlzIGxlc3MgdGhhbiB0aGUgZGVzaXJlZCAkY291bnQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICRjb3VudCAgICBUb3RhbCBudW1iZXIgb2YgcHJvbWlzZXMuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHByb21pc2VzIFByb21pc2VzIG9yIHZhbHVlcy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzb21lKGludCAkY291bnQsICRwcm9taXNlcyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcHJvbWlzZXMgPSBzZWxmOjpwcmVwYXJlSXRlcmFibGUoJHByb21pc2VzLCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICAkcmVzdWx0cyA9IFtdOwogICAgICAgICRyZWplY3Rpb25zID0gW107CgogICAgICAgIHJldHVybiBFYWNoOjpvZigKICAgICAgICAgICAgJHByb21pc2VzLAogICAgICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4LCBQcm9taXNlSW50ZXJmYWNlICRwKSB1c2UgKCYkcmVzdWx0cywgJGNvdW50KTogdm9pZCB7CiAgICAgICAgICAgICAgICBpZiAoSXM6OnNldHRsZWQoJHApKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGlkeF0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpID49ICRjb3VudCkgewogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKG51bGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgmJHJlamVjdGlvbnMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICRyZWplY3Rpb25zW10gPSAkcmVhc29uOwogICAgICAgICAgICB9CiAgICAgICAgKS0+dGhlbigKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMsICYkcmVqZWN0aW9ucywgJGNvdW50KSB7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpICE9PSAkY291bnQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAnTm90IGVub3VnaCBwcm9taXNlcyB0byBmdWxmaWxsIGNvdW50JywKICAgICAgICAgICAgICAgICAgICAgICAgJHJlamVjdGlvbnMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAga3NvcnQoJHJlc3VsdHMpOwoKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV92YWx1ZXMoJHJlc3VsdHMpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIExpa2Ugc29tZSgpLCB3aXRoIDEgYXMgY291bnQuIEhvd2V2ZXIsIGlmIHRoZSBwcm9taXNlIGZ1bGZpbGxzLCB0aGUKICAgICAqIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5vdCBhbiBhcnJheSBvZiAxIGJ1dCB0aGUgdmFsdWUgZGlyZWN0bHkuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYW55KCRwcm9taXNlcyk6IFByb21pc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcHJvbWlzZXMgPSBzZWxmOjpwcmVwYXJlSXRlcmFibGUoJHByb21pc2VzLCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gc2VsZjo6c29tZSgxLCAkcHJvbWlzZXMpLT50aGVuKGZ1bmN0aW9uICgkdmFsdWVzKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWVzWzBdOwogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgb2YgdGhlIHByb3ZpZGVkIHByb21pc2VzIGhhdmUKICAgICAqIGJlZW4gZnVsZmlsbGVkIG9yIHJlamVjdGVkLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIGluc3BlY3Rpb24gc3RhdGUgYXJyYXlzLgogICAgICoKICAgICAqIEBzZWUgaW5zcGVjdCBmb3IgdGhlIGluc3BlY3Rpb24gc3RhdGUgYXJyYXkgZm9ybWF0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcHJvbWlzZXMgUHJvbWlzZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldHRsZSgkcHJvbWlzZXMpOiBQcm9taXNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHByb21pc2VzID0gc2VsZjo6cHJlcGFyZUl0ZXJhYmxlKCRwcm9taXNlcywgX19GVU5DVElPTl9fKTsKCiAgICAgICAgJHJlc3VsdHMgPSBbXTsKCiAgICAgICAgcmV0dXJuIEVhY2g6Om9mKAogICAgICAgICAgICAkcHJvbWlzZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUsICRpZHgpIHVzZSAoJiRyZXN1bHRzKTogdm9pZCB7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9IFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRCwgJ3ZhbHVlJyA9PiAkdmFsdWVdOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbiAoJHJlYXNvbiwgJGlkeCkgdXNlICgmJHJlc3VsdHMpOiB2b2lkIHsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRyZWFzb25dOwogICAgICAgICAgICB9CiAgICAgICAgKS0+dGhlbihmdW5jdGlvbiAoKSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICBrc29ydCgkcmVzdWx0cyk7CgogICAgICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICAgICAgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUl0ZXJhYmxlKCRwcm9taXNlcywgc3RyaW5nICRtZXRob2QpOiBpdGVyYWJsZQogICAgewogICAgICAgIGlmIChpc19pdGVyYWJsZSgkcHJvbWlzZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkcHJvbWlzZXM7CiAgICAgICAgfQoKICAgICAgICBzZWxmOjp0cmlnZ2VyTm9uSXRlcmFibGVEZXByZWNhdGlvbigkcHJvbWlzZXMsICRtZXRob2QpOwoKICAgICAgICByZXR1cm4gWyRwcm9taXNlc107CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdHJpZ2dlck5vbkl0ZXJhYmxlRGVwcmVjYXRpb24oJHByb21pc2VzLCBzdHJpbmcgJG1ldGhvZCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoaXNfaXRlcmFibGUoJHByb21pc2VzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHJvbWlzZXMnLAogICAgICAgICAgICAnMi41JywKICAgICAgICAgICAgJ1Bhc3NpbmcgYSBub24taXRlcmFibGUgdG8gJXM6OiVzKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wcm9taXNlcyAzLjAgd2lsbCByZXF1aXJlIGFuIGl0ZXJhYmxlLicsCiAgICAgICAgICAgIHNlbGY6OmNsYXNzLAogICAgICAgICAgICAkbWV0aG9kCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/UPGRADING.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlIFByb21pc2VzIFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEueCB0byAyLjAKLS0tLS0tLS0tLQoKR3V6emxlIFByb21pc2VzIDIuMCBpcyBhIG1ham9yIHJlbGVhc2UgdGhhdCByZW1vdmVzIGRlcHJlY2F0ZWQgQVBJcywgcmFpc2VzIHRoZQptaW5pbXVtIFBIUCB2ZXJzaW9uLCBhbmQgYWRkcyBQSFAgNyBwYXJhbWV0ZXIgYW5kIHJldHVybiB0eXBlcy4gQXBwbGljYXRpb25zIHRoYXQKb25seSB1c2UgdGhlIG9iamVjdC1vcmllbnRlZCBBUEkgc2hvdWxkIHVzdWFsbHkgbmVlZCBzbWFsbCBjaGFuZ2VzLiBBcHBsaWNhdGlvbnMKdGhhdCBjYWxsIGhlbHBlciBmdW5jdGlvbnMsIGltcGxlbWVudCBwYWNrYWdlIGludGVyZmFjZXMsIGV4dGVuZCBwYWNrYWdlIGNsYXNzZXMsCm9yIHBhc3MgaW52YWxpZCBhcmd1bWVudCB0eXBlcyBuZWVkIGNsb3NlciByZXZpZXcuCgojIyMjIFBIUCBWZXJzaW9uIGFuZCBEZXBlbmRlbmNpZXMKCkd1enpsZSBQcm9taXNlcyAyLjAgcmVxdWlyZXMgUEhQIGBeNy4yLjUgfHwgXjguMGAuIEd1enpsZSBQcm9taXNlcyAxLngKc3VwcG9ydGVkIFBIUCBgPj01LjVgLgoKIyMjIyBQSFAgNyBUeXBlIEhpbnRzIGFuZCBSZXR1cm4gVHlwZXMKClR5cGUgaGludHMgYW5kIHJldHVybiB0eXBlcyB3ZXJlIGFkZGVkIHdoZXJldmVyIHBvc3NpYmxlLiBQbGVhc2UgbWFrZSBzdXJlOgoKLSBZb3UgcGFzcyB2YWx1ZXMgb2YgdGhlIGRvY3VtZW50ZWQgdHlwZSB3aGVuIGNhbGxpbmcgbWV0aG9kcyBhbmQgZnVuY3Rpb25zLgotIENsYXNzZXMgdGhhdCBpbXBsZW1lbnQgYFByb21pc2VJbnRlcmZhY2VgLCBgUHJvbWlzb3JJbnRlcmZhY2VgLCBvcgogIGBUYXNrUXVldWVJbnRlcmZhY2VgIHVwZGF0ZSBtZXRob2Qgc2lnbmF0dXJlcyB0byByZW1haW4gY29tcGF0aWJsZS4KLSBDbGFzc2VzIHRoYXQgZXh0ZW5kIEd1enpsZSBQcm9taXNlcyBjbGFzc2VzIHVwZGF0ZSBhbnkgb3ZlcnJpZGRlbiBtZXRob2QKICBzaWduYXR1cmVzIHRvIHJlbWFpbiBjb21wYXRpYmxlLgotIENvZGUgdGhhdCBleHBlY3RlZCBwYWNrYWdlLXNwZWNpZmljIGV4Y2VwdGlvbnMgZm9yIGludmFsaWQgYXJndW1lbnQgdHlwZXMgbWF5CiAgbm93IHJlY2VpdmUgUEhQIGBUeXBlRXJyb3JgIGV4Y2VwdGlvbnMgaW5zdGVhZC4KCiMjIyMgU29mdC1GaW5hbCBDbGFzc2VzCgpBbGwgcHJldmlvdXNseSBub24tZmluYWwgbm9uLWV4Y2VwdGlvbiBjbGFzc2VzIGFyZSBub3cgZmluYWwgb3IgYW5ub3RhdGVkIHdpdGgKYEBmaW5hbGAuIElmIHlvdXIgY29kZSBleHRlbmRzIG9uZSBvZiB0aGVzZSBjbGFzc2VzLCByZXBsYWNlIGluaGVyaXRhbmNlIHdpdGgKY29tcG9zaXRpb24gb3IgaW1wbGVtZW50IHRoZSByZWxldmFudCBpbnRlcmZhY2UgZGlyZWN0bHkuCgojIyMjIFJlbW92ZWQgRnVuY3Rpb24gQVBJCgpUaGUgc3RhdGljIEFQSSB3YXMgaW50cm9kdWNlZCBpbiAxLjQuMCB0byBtaXRpZ2F0ZSBwcm9ibGVtcyB3aXRoIGZ1bmN0aW9ucwpjb25mbGljdGluZyBiZXR3ZWVuIGdsb2JhbCBhbmQgbG9jYWwgY29waWVzIG9mIHRoZSBwYWNrYWdlLiBUaGUgZnVuY3Rpb24gQVBJIHdhcwpyZW1vdmVkIGluIDIuMC4wLCBhbG9uZyB3aXRoIHRoZSBDb21wb3NlciBgZmlsZXNgIGF1dG9sb2FkIGVudHJ5IHRoYXQgbG9hZGVkCmBzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwYC4KClJlcGxhY2UgbmFtZXNwYWNlZCBmdW5jdGlvbiBjYWxscyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBtZXRob2RzIGluIHRoZQpgR3V6emxlSHR0cFxQcm9taXNlYCBuYW1lc3BhY2U6CgpgYGBwaHAKLy8gQmVmb3JlOgp1c2UgZnVuY3Rpb24gR3V6emxlSHR0cFxQcm9taXNlXHByb21pc2VfZm9yOwoKJHByb21pc2UgPSBwcm9taXNlX2ZvcigndmFsdWUnKTsKCi8vIEFmdGVyOgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXENyZWF0ZTsKCiRwcm9taXNlID0gQ3JlYXRlOjpwcm9taXNlRm9yKCd2YWx1ZScpOwpgYGAKCnwgT3JpZ2luYWwgRnVuY3Rpb24gfCBSZXBsYWNlbWVudCBNZXRob2QgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBgcXVldWVgIHwgYFV0aWxzOjpxdWV1ZWAgfAp8IGB0YXNrYCB8IGBVdGlsczo6dGFza2AgfAp8IGBwcm9taXNlX2ZvcmAgfCBgQ3JlYXRlOjpwcm9taXNlRm9yYCB8CnwgYHJlamVjdGlvbl9mb3JgIHwgYENyZWF0ZTo6cmVqZWN0aW9uRm9yYCB8CnwgYGV4Y2VwdGlvbl9mb3JgIHwgYENyZWF0ZTo6ZXhjZXB0aW9uRm9yYCB8CnwgYGl0ZXJfZm9yYCB8IGBDcmVhdGU6Oml0ZXJGb3JgIHwKfCBgaW5zcGVjdGAgfCBgVXRpbHM6Omluc3BlY3RgIHwKfCBgaW5zcGVjdF9hbGxgIHwgYFV0aWxzOjppbnNwZWN0QWxsYCB8CnwgYHVud3JhcGAgfCBgVXRpbHM6OnVud3JhcGAgfAp8IGBhbGxgIHwgYFV0aWxzOjphbGxgIHwKfCBgc29tZWAgfCBgVXRpbHM6OnNvbWVgIHwKfCBgYW55YCB8IGBVdGlsczo6YW55YCB8CnwgYHNldHRsZWAgfCBgVXRpbHM6OnNldHRsZWAgfAp8IGBlYWNoYCB8IGBFYWNoOjpvZmAgfAp8IGBlYWNoX2xpbWl0YCB8IGBFYWNoOjpvZkxpbWl0YCB8CnwgYGVhY2hfbGltaXRfYWxsYCB8IGBFYWNoOjpvZkxpbWl0QWxsYCB8CnwgYCFpc19mdWxmaWxsZWRgIHwgYElzOjpwZW5kaW5nYCB8CnwgYGlzX2Z1bGZpbGxlZGAgfCBgSXM6OmZ1bGZpbGxlZGAgfAp8IGBpc19yZWplY3RlZGAgfCBgSXM6OnJlamVjdGVkYCB8CnwgYGlzX3NldHRsZWRgIHwgYElzOjpzZXR0bGVkYCB8CnwgYGNvcm91dGluZWAgfCBgQ29yb3V0aW5lOjpvZmAgfAoKRm9yIHRoZSBmdWxsIDIuMCBkaWZmLCBzZWUKaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy9jb21wYXJlLzEuNS4zLi4uMi4wLjAuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgpBbGwgbm90YWJsZSBjaGFuZ2VzIHRvIHRoaXMgcHJvamVjdCB3aWxsIGJlIGRvY3VtZW50ZWQgaW4gdGhpcyBmaWxlLgoKVGhlIGZvcm1hdCBpcyBiYXNlZCBvbiBbS2VlcCBhIENoYW5nZWxvZ10oaHR0cHM6Ly9rZWVwYWNoYW5nZWxvZy5jb20vZW4vMS4wLjAvKQphbmQgdGhpcyBwcm9qZWN0IGFkaGVyZXMgdG8gW1NlbWFudGljIFZlcnNpb25pbmddKGh0dHBzOi8vc2VtdmVyLm9yZy9zcGVjL3YyLjAuMC5odG1sKS4KCiMjIDIuMTIuMCAtIDIwMjYtMDYtMTYKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgbm9uLWZpbml0ZSBmbG9hdCB2YWx1ZXMgaW4gYFF1ZXJ5OjpidWlsZCgpYCB0aGF0IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVqZWN0cwotIERlcHJlY2F0ZWQgbm9uLWZpbml0ZSBmbG9hdCBtdWx0aXBhcnQgY29udGVudHMgdGhhdCBndXp6bGVodHRwL3BzcjcgMy4wIHJlamVjdHMKLSBEZXByZWNhdGVkIG5vbi1zdHJpbmcgc2NhbGFyIGJvZGllcyBpbiBgVXRpbHM6OnN0cmVhbUZvcigpYDsgY2FzdCB0aGVtIHRvIGEgc3RyaW5nIGZvciAzLjAKLSBEZXByZWNhdGVkIG5vbi1zdHJpbmcgYFVyaTo6d2l0aFF1ZXJ5VmFsdWVzKClgIHZhbHVlczsgY2FzdCB0aGVtIHRvIGEgc3RyaW5nIGZvciAzLjAKCiMjIDIuMTEuMSAtIDIwMjYtMDYtMTIKCiMjIyBGaXhlZAoKLSBGaXhlZCBub24tZmluaXRlIGZsb2F0IHZhbHVlcyBlbWl0dGluZyBjb2VyY2lvbiB3YXJuaW5ncyBvbiBQSFAgOC41CgojIyAyLjExLjAgLSAyMDI2LTA2LTAyCgojIyMgQ2hhbmdlZAoKLSBDaGFuZ2VkIGBVdGlsczo6bW9kaWZ5UmVxdWVzdCgpYCB0byByZWplY3QgY29uZmxpY3RpbmcgVVJJIGFuZCBgSG9zdGAgaGVhZGVyIGNoYW5nZXMgaW4gdGhlIHNhbWUgY2FsbAotIENoYW5nZWQgYEhlYWRlcjo6cGFyc2UoKWAgdG8gc3BsaXQgc2VtaWNvbG9uLXNlcGFyYXRlZCBwYXJhbWV0ZXJzIHdpdGhvdXQgcmVwZWF0ZWQgcmVndWxhciBleHByZXNzaW9uIGxvb2thaGVhZHMKLSBDaGFuZ2VkIGBVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luKClgIHNvIG9ubHkgSFRUUCBhbmQgSFRUUFMgbWlzc2luZyBwb3J0cyByZWNlaXZlIGltcGxpY2l0IGRlZmF1bHQgcG9ydHMKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgaW52YWxpZCBQU1ItNyBhcmd1bWVudHMgdGhhdCBndXp6bGVodHRwL3BzcjcgMy4wIHdpbGwgcmVxdWlyZSBuYXRpdmUgdHlwZXMgZm9yCi0gRGVwcmVjYXRlZCBub24tc3RyaW5nIGhlYWRlciB2YWx1ZXMgdGhhdCBndXp6bGVodHRwL3BzcjcgMy4wIHdpbGwgcmVqZWN0Ci0gRGVwcmVjYXRlZCBlbXB0eSBoZWFkZXIgdmFsdWUgYXJyYXlzIHRoYXQgZ3V6emxlaHR0cC9wc3I3IDMuMCB3aWxsIHJlamVjdAotIERlcHJlY2F0ZWQgVVJJIHNjaGVtZXMgdGhhdCBkbyBub3QgbWF0Y2ggZ3V6emxlaHR0cC9wc3I3IDMuMCBzeW50YXggcmVxdWlyZW1lbnRzCi0gRGVwcmVjYXRlZCBtdWx0aXBhcnQgYm91bmRhcnkgYW5kIGN1c3RvbSBwYXJ0IGhlYWRlciBtZXRhZGF0YSB0aGF0IGd1enpsZWh0dHAvcHNyNyAzLjAgd2lsbCByZWplY3QKLSBEZXByZWNhdGVkIHJlbGlhbmNlIG9uIGF1dG9tYXRpYyB1cHBlcmNhc2luZyBvZiByZXF1ZXN0IG1ldGhvZHM7IGd1enpsZWh0dHAvcHNyNyAzLjAgcHJlc2VydmVzIG1ldGhvZCBjYXNpbmcKLSBEZXByZWNhdGVkIGludmFsaWQgYFV0aWxzOjptb2RpZnlSZXF1ZXN0KClgIGNoYW5nZSB2YWx1ZXMgdGhhdCBndXp6bGVodHRwL3BzcjcgMy4wIHdpbGwgcmVqZWN0CgojIyMgRml4ZWQKCi0gRml4ZWQgYFV0aWxzOjpjb3B5VG9TdHJlYW0oKWAgdG8gcmV0cnkgc2hvcnQgZGVzdGluYXRpb24gd3JpdGVzIGluc3RlYWQgb2YgZHJvcHBpbmcgdGhlIHVud3JpdHRlbiByZW1haW5kZXIKLSBGaXhlZCBgSGVhZGVyOjpwYXJzZSgpYCBzcGxpdHRpbmcgb2Ygc2VtaWNvbG9uLXNlcGFyYXRlZCBwYXJhbWV0ZXJzIHdpdGggZXNjYXBlZCBxdW90ZXMKCiMjIDIuMTAuNCAtIDIwMjYtMDUtMjkKCiMjIyBGaXhlZAoKLSBBcHBseSBgVXJpTm9ybWFsaXplcmAgcGVyY2VudC1lbmNvZGluZyBub3JtYWxpemF0aW9ucyB0byBVUkkgZnJhZ21lbnRzCi0gTWFrZSBgTGltaXRTdHJlYW06OmdldFNpemUoKWAgcmV0dXJuIGAwYCBmb3Igc2xpY2VzIHBhc3QgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGVuZAotIE1ha2UgYEFwcGVuZFN0cmVhbTo6cmVhZCgpYCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHdoZW4gbm8gc3RyZWFtcyBhcmUgYXR0YWNoZWQKLSBNYWtlIGBDYWNoaW5nU3RyZWFtOjpyZWFkKClgIHRocm93IG9uIGFuIGluY29tcGxldGUgY2FjaGUtdGFyZ2V0IHdyaXRlIGluc3RlYWQgb2Ygc2lsZW50bHkgY29ycnVwdGluZyByZXBsYXlzCi0gUHJldmVudCBgQ2FjaGluZ1N0cmVhbTo6c2VlaygpYCBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IHdoZW4gdGhlIHJlbW90ZSBzdHJlYW0gbWFrZXMgbm8gcHJvZ3Jlc3MKCiMjIDIuMTAuMyAtIDIwMjYtMDUtMjcKCiMjIyBGaXhlZAoKLSBGaXhlZCBVUkkgcGFyc2luZyBmb3IgSVB2NiBsaXRlcmFscyBjb250YWluaW5nIGVtYmVkZGVkIElQdjQgYWRkcmVzc2VzCi0gRml4ZWQgbWFsZm9ybWVkIFVURi04IFVSSSBzdHJpbmdzIGJlaW5nIHBhcnNlZCBhcyBlbXB0eSBVUklzCgojIyAyLjEwLjIgLSAyMDI2LTA1LTI1CgojIyMgU2VjdXJpdHkKCi0gUmVqZWN0IGNvbnRyb2wgYW5kIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBVUkkgaG9zdCBjb21wb25lbnRzIChHSFNBLWhxN3YtbXgzZy0yOWh3KQotIFJlamVjdCBtYWxmb3JtZWQgSG9zdCB2YWx1ZXMgd2hlbiBjb25zdHJ1Y3RpbmcgcmVxdWVzdCBVUklzIChHSFNBLTM0eGctd2dqeC04eHBoKQoKIyMjIEZpeGVkCgotIE1ha2UgYFNlcnZlclJlcXVlc3Q6OmZyb21HbG9iYWxzKClgIHJvYnVzdCBhZ2FpbnN0IHVuZXhwZWN0ZWQgSFRUUCBoZWFkZXIgdmFsdWUgdHlwZXMgaW4gYCRfU0VSVkVSYAoKIyMgMi4xMC4xIC0gMjAyNi0wNS0yMAoKIyMjIEZpeGVkCgotIEZpeCBgVXRpbHM6Om1vZGlmeVJlcXVlc3QoKWAgd2l0aCBudW1lcmljIGhlYWRlciBuYW1lcwoKIyMgMi4xMC4wIC0gMjAyNi0wNS0xOQoKIyMjIENoYW5nZWQKCi0gSGFyZGVuIGBTZXJ2ZXJSZXF1ZXN0Ojpmcm9tR2xvYmFscygpYCBhZ2FpbnN0IG1hbGZvcm1lZCBgJF9TRVJWRVJgIHZhbHVlcwotIFByZXZlbnQgY3VzdG9tIHN0cmVhbSBtZXRhZGF0YSBmcm9tIGFmZmVjdGluZyBpbnRlcm5hbCBzaXplIGhhbmRsaW5nCi0gVGhyb3cgd2hlbiBgU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoKWAgY2Fubm90IGNyZWF0ZSBhIHJlc291cmNlCi0gUHJlc2VydmUgY3VzdG9tIHJlcXVlc3QgaW1wbGVtZW50YXRpb25zIGluIGBVdGlsczo6bW9kaWZ5UmVxdWVzdCgpYAotIFByZXNlcnZlIGN1c3RvbSBVUkkgaW1wbGVtZW50YXRpb25zIGluIGBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgpYAotIE1ha2UgYFVyaTo6X190b1N0cmluZygpYCBzaWRlLWVmZmVjdC1mcmVlCgojIyAyLjkuMSAtIDIwMjYtMDUtMTkKCiMjIyBGaXhlZAoKLSBGaXggcGFyc2luZyBvZiByZWxhdGl2ZSBwYXRoIHJlZmVyZW5jZXMgY29udGFpbmluZyBhIGNvbG9uIGluIGEgbm9uLWluaXRpYWwgcGF0aCBzZWdtZW50Ci0gRml4IGBDYWNoaW5nU3RyZWFtOjpkZXRhY2goKWAgcmV0dXJuaW5nIGFuIGluY29tcGxldGUgcmVzb3VyY2UgYmVmb3JlIHRoZSBkZWNvcmF0ZWQgc3RyZWFtIGhhcyBiZWVuIGZ1bGx5IHJlYWQKLSBGaXggYE1lc3NhZ2U6OmJvZHlTdW1tYXJ5KClgIHJldHVybmluZyBgbnVsbGAgd2hlbiB0cnVuY2F0aW5nIHByaW50YWJsZSBVVEYtOCBib2RpZXMgaW5zaWRlIGEgbXVsdGlieXRlIGNoYXJhY3RlcgoKIyMgMi45LjAgLSAyMDI2LTAzLTEwCgojIyMgQWRkZWQKCi0gQWRkZWQgbmVzdGVkIGFycmF5IGV4cGFuc2lvbiBzdXBwb3J0IHRvIGBNdWx0aXBhcnRTdHJlYW1gCi0gQWRkZWQgYEByZXR1cm4gc3RhdGljYCB0byBgTWVzc2FnZVRyYWl0YCBtZXRob2RzCgojIyMgQ2hhbmdlZAoKLSBVcGRhdGVkIE1JTUUgdHlwZSBtYXBwaW5ncwoKIyMgMi44LjEgLSAyMDI2LTAzLTEwCgojIyMgRml4ZWQKCi0gRW5jb2RlIGArYCBzaWducyBpbiBgVXJpOjp3aXRoUXVlcnlWYWx1ZSgpYCBhbmQgYFVyaTo6d2l0aFF1ZXJ5VmFsdWVzKClgIHRvIHByZXZlbnQgdGhlbSBiZWluZyBpbnRlcnByZXRlZCBhcyBzcGFjZXMKCiMjIDIuOC4wIC0gMjAyNS0wOC0yMwoKIyMjIEFkZGVkCgotIEFsbG93IGVtcHR5IGxpc3RzIGFzIGhlYWRlciB2YWx1ZXMKCiMjIyBDaGFuZ2VkCgotIFBIUCA4LjUgc3VwcG9ydAoKIyMgMi43LjEgLSAyMDI1LTAzLTI3CgojIyMgRml4ZWQKCi0gRml4ZWQgdXBwZXJjYXNlIElQdjYgYWRkcmVzc2VzIGluIFVSSQoKIyMjIENoYW5nZWQKCi0gSW1wcm92ZSB1cGxvYWRlZCBmaWxlIGVycm9yIG1lc3NhZ2UKCiMjIDIuNy4wIC0gMjAyNC0wNy0xOAoKIyMjIEFkZGVkCgotIEFkZCBgVXRpbHM6OnJlZGFjdFVzZXJJbmZvKClgIG1ldGhvZAotIEFkZCBhYmlsaXR5IHRvIGVuY29kZSBib29scyBhcyBpbnRzIGluIGBRdWVyeTo6YnVpbGRgCgojIyAyLjYuMyAtIDIwMjQtMDctMTgKCiMjIyBGaXhlZAoKLSBNYWtlIGBTdHJlYW1XcmFwcGVyOjpzdHJlYW1fc3RhdCgpYCByZXR1cm4gYGZhbHNlYCBpZiBpbm5lciBzdHJlYW0ncyBzaXplIGlzIGBudWxsYCAKCiMjIyBDaGFuZ2VkCgotIFBIUCA4LjQgc3VwcG9ydAoKIyMgMi42LjIgLSAyMDIzLTEyLTAzCgojIyMgRml4ZWQKCi0gRml4ZWQgYW5vdGhlciBpc3N1ZSB3aXRoIHRoZSBmYWN0IHRoYXQgUEhQIHRyYW5zZm9ybXMgbnVtZXJpYyBzdHJpbmdzIGluIGFycmF5IGtleXMgdG8gaW50cwoKIyMjIENoYW5nZWQKCi0gVXBkYXRlZCBsaW5rcyBpbiBkb2NzIHRvIHRoZWlyIGNhbm9uaWNhbCB2ZXJzaW9ucwotIFJlcGxhY2VkIGBjYWxsX3VzZXJfZnVuYypgIHdpdGggbmF0aXZlIGNhbGxzCgojIyAyLjYuMSAtIDIwMjMtMDgtMjcKCiMjIyBGaXhlZAoKLSBQcm9wZXJseSBoYW5kbGUgdGhlIGZhY3QgdGhhdCBQSFAgdHJhbnNmb3JtcyBudW1lcmljIHN0cmluZ3MgaW4gYXJyYXkga2V5cyB0byBpbnRzCgojIyAyLjYuMCAtIDIwMjMtMDgtMDMKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZWQgdGhlIG1pbWUgdHlwZSBtYXAgdG8gYWRkIHNvbWUgbmV3IGVudHJpZXMsIGZpeCBhIGNvdXBsZSBvZiBpbnZhbGlkIGVudHJpZXMsIGFuZCByZW1vdmUgYW4gaW52YWxpZCBlbnRyeQotIEZhbGxiYWNrIHRvIGBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gIGlmIHdlIGFyZSB1bmFibGUgdG8gZ3Vlc3MgdGhlIGNvbnRlbnQgdHlwZSBmb3IgYSBtdWx0aXBhcnQgZmlsZSB1cGxvYWQKCiMjIDIuNS4xIC0gMjAyMy0wOC0wMwoKIyMjIEZpeGVkCgotIENvcnJlY3RlZCBtaW1lIHR5cGUgZm9yIGAuYWNjYCBmaWxlcyB0byBgYXVkaW8vYWFjYAoKIyMjIENoYW5nZWQKCi0gUEhQIDguMyBzdXBwb3J0CgojIyAyLjUuMCAtIDIwMjMtMDQtMTcKCiMjIyBDaGFuZ2VkCgotIEFkanVzdGVkIGBwc3IvaHR0cC1tZXNzYWdlYCB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gYF4xLjEgfHwgXjIuMGAKCiMjIDIuNC41IC0gMjAyMy0wNC0xNwoKIyMjIEZpeGVkCgotIFByZXZlbnQgcG9zc2libGUgd2FybmluZ3Mgb24gdW5zZXQgdmFyaWFibGVzIGluIGBTZXJ2ZXJSZXF1ZXN0Ojpub3JtYWxpemVOZXN0ZWRGaWxlU3BlY2AKLSBGaXhlZCBgTWVzc2FnZTo6Ym9keVN1bW1hcnlgIHdoZW4gYHByZWdfbWF0Y2hgIGZhaWxzCi0gRml4ZWQgaGVhZGVyIHZhbGlkYXRpb24gaXNzdWUKCiMjIDIuNC40IC0gMjAyMy0wMy0wOQoKIyMjIENoYW5nZWQKCi0gUmVtb3ZlZCB0aGUgbmVlZCBmb3IgYEFsbG93RHluYW1pY1Byb3BlcnRpZXNgIGluIGBMYXp5T3BlblN0cmVhbWAKCiMjIDIuNC4zIC0gMjAyMi0xMC0yNgoKIyMjIENoYW5nZWQKCi0gUmVwbGFjZWQgYHNoYTEodW5pcWlkKCkpYCBieSBgYmluMmhleChyYW5kb21fYnl0ZXMoMjApKWAKCiMjIDIuNC4yIC0gMjAyMi0xMC0yNQoKIyMjIEZpeGVkCgotIEZpeGVkIGVycm9uZW91cyBiZWhhdmlvdXIgd2hlbiBjb21iaW5pbmcgaG9zdCBhbmQgcmVsYXRpdmUgcGF0aAoKIyMgMi40LjEgLSAyMDIyLTA4LTI4CgojIyMgRml4ZWQKCi0gUmV3aW5kIGJvZHkgYmVmb3JlIHJlYWRpbmcgaW4gYE1lc3NhZ2U6OmJvZHlTdW1tYXJ5YAoKIyMgMi40LjAgLSAyMDIyLTA2LTIwCgojIyMgQWRkZWQKCi0gQWRkZWQgcHJvdmlzaW9uYWwgUEhQIDguMiBzdXBwb3J0Ci0gQWRkZWQgYFVyaUNvbXBhcmF0b3I6OmlzQ3Jvc3NPcmlnaW5gIG1ldGhvZAoKIyMgMi4zLjAgLSAyMDIyLTA2LTA5CgojIyMgRml4ZWQKCi0gQWRkZWQgYEhlYWRlcjo6c3BsaXRMaXN0YCBtZXRob2QKLSBBZGRlZCBgVXRpbHM6OnRyeUdldENvbnRlbnRzYCBtZXRob2QKLSBJbXByb3ZlZCBgU3RyZWFtOjpnZXRDb250ZW50c2AgbWV0aG9kCi0gVXBkYXRlZCBtaW1ldHlwZSBtYXBwaW5ncwoKIyMgMi4yLjIgLSAyMDIyLTA2LTA4CgojIyMgRml4ZWQKCi0gRml4IGBNZXNzYWdlOjpwYXJzZVJlcXVlc3RVcmlgIGZvciBudW1lcmljIGhlYWRlcnMKLSBSZS13cmFwIGV4Y2VwdGlvbnMgdGhyb3duIGluIGBmcmVhZGAgaW50byBydW50aW1lIGV4Y2VwdGlvbnMKLSBUaHJvdyBhbiBleGNlcHRpb24gd2hlbiBtdWx0aXBhcnQgb3B0aW9ucyBpcyBtaXNmb3JtYXR0ZWQKCiMjIDIuMi4xIC0gMjAyMi0wMy0yMAoKIyMjIEZpeGVkCgotIENvcnJlY3QgaGVhZGVyIHZhbHVlIHZhbGlkYXRpb24KCiMjIDIuMi4wIC0gMjAyMi0wMy0yMAoKIyMjIEFkZGVkCgotIEEgbW9yZSBjb21wcmVzc2l2ZSBsaXN0IG9mIG1pbWUgdHlwZXMKLSBBZGQgSnNvblNlcmlhbGl6YWJsZSB0byBVcmkKLSBNaXNzaW5nIHJldHVybiB0eXBlcwoKIyMjIEZpeGVkCgotIEJ1ZyBNdWx0aXBhcnRTdHJlYW0gbm8gYHVyaWAgbWV0YWRhdGEKLSBCdWcgTXVsdGlwYXJ0U3RyZWFtIHdpdGggZmlsZW5hbWUgZm9yIGBkYXRhOi8vYCBzdHJlYW1zCi0gRml4ZWQgbmV3IGxpbmUgaGFuZGxpbmcgaW4gTXVsdGlwYXJ0U3RyZWFtCi0gUmVkdWNlZCBSQU0gdXNhZ2Ugd2hlbiBjb3B5aW5nIHN0cmVhbXMKLSBVcGRhdGVkIHBhcnNpbmcgaW4gYEhlYWRlcjo6bm9ybWFsaXplKClgCgojIyAyLjEuMSAtIDIwMjItMDMtMjAKCiMjIyBGaXhlZAoKLSBWYWxpZGF0ZSBoZWFkZXIgdmFsdWVzIHByb3Blcmx5CgojIyAyLjEuMCAtIDIwMjEtMTAtMDYKCiMjIyBDaGFuZ2VkCgotIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgYFVyaWAgb2JqZWN0IGZyb20gYSBtYWxmb3JtZWQgVVJJIHdpbGwgbm8gbG9uZ2VyIHRocm93IGEgZ2VuZXJpYwogIGBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb25gLCBidXQgcmF0aGVyIGEgYE1hbGZvcm1lZFVyaUV4Y2VwdGlvbmAsIHdoaWNoIGluaGVyaXRzIGZyb20gdGhlIGZvcm1lcgogIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gQ2FsbGVycyByZWx5aW5nIG9uIHRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3duIHRvIGRldGVjdCBpbnZhbGlkCiAgVVJJcyBzaG91bGQgY2F0Y2ggdGhlIG5ldyBleGNlcHRpb24uCgojIyMgRml4ZWQKCi0gUmV0dXJuIGBudWxsYCBpbiBjYWNoaW5nIHN0cmVhbSBzaXplIGlmIHJlbW90ZSBzaXplIGlzIGBudWxsYAoKIyMgMi4wLjAgLSAyMDIxLTA2LTMwCgpJZGVudGljYWwgdG8gdGhlIFJDIHJlbGVhc2UuCgojIyAyLjAuMEBSQy0xIC0gMjAyMS0wNC0yOQoKIyMjIEZpeGVkCgotIEhhbmRsZSBwb3NzaWJseSB1bnNldCBgdXJsYCBpbiBgc3RyZWFtX2dldF9tZXRhX2RhdGFgCgojIyAyLjAuMEBiZXRhLTEgLSAyMDIxLTAzLTIxCgojIyMgQWRkZWQKCi0gUFNSLTE3IGZhY3RvcmllcwotIE1hZGUgY2xhc3NlcyBmaW5hbAotIFBIUDcgdHlwZSBoaW50cwoKIyMjIENoYW5nZWQKCi0gV2hlbiBidWlsZGluZyBhIHF1ZXJ5IHN0cmluZywgYm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGFzIDEgYW5kIDAuCgojIyMgUmVtb3ZlZAoKLSBQSFAgPCA3LjIgc3VwcG9ydAotIEFsbCBmdW5jdGlvbnMgaW4gdGhlIGBHdXp6bGVIdHRwXFBzcjdgIG5hbWVzcGFjZQoKIyMgMS44LjEgLSAyMDIxLTAzLTIxCgojIyMgRml4ZWQKCi0gSXNzdWUgcGFyc2luZyBJUHY2IFVSTHMKLSBJc3N1ZSBtb2RpZnlpbmcgU2VydmVyUmVxdWVzdCBsb3N0IGFsbCBpdHMgYXR0cmlidXRlcwoKIyMgMS44LjAgLSAyMDIxLTAzLTIxCgojIyMgQWRkZWQKCi0gTG9jYWxlIGluZGVwZW5kZW50IFVSTCBwYXJzaW5nCi0gTW9zdCBjbGFzc2VzIGdvdCBhIGBAZmluYWxgIGFubm90YXRpb24gdG8gcHJlcGFyZSBmb3IgMi4wCgojIyMgRml4ZWQKCi0gSXNzdWUgd2hlbiBjcmVhdGluZyBzdHJlYW0gZnJvbSBgcGhwOi8vaW5wdXRgIGFuZCBjdXJsLWV4dCBpcyBub3QgaW5zdGFsbGVkCi0gQnJva2VuIGBVdGlsczo6dHJ5Rm9wZW4oKWAgb24gUEhQIDgKCiMjIDEuNy4wIC0gMjAyMC0wOS0zMAoKIyMjIEFkZGVkCgotIFJlcGxhY2VkIGZ1bmN0aW9ucyBieSBzdGF0aWMgbWV0aG9kcwoKIyMjIEZpeGVkCgotIENvbnZlcnRpbmcgYSBub24tc2Vla2FibGUgc3RyZWFtIHRvIGEgc3RyaW5nCi0gSGFuZGxlIG11bHRpcGxlIFNldC1Db29raWUgY29ycmVjdGx5Ci0gSWdub3JlIGFycmF5IGtleXMgaW4gaGVhZGVyIHZhbHVlcyB3aGVuIG1lcmdpbmcKLSBBbGxvdyBtdWx0aWJ5dGUgY2hhcmFjdGVycyB0byBiZSBwYXJzZWQgaW4gYE1lc3NhZ2U6Ym9keVN1bW1hcnkoKWAKCiMjIyBDaGFuZ2VkCgotIFJlc3RvcmVkIHBhcnRpYWwgSEhWTSAzIHN1cHBvcnQKCgojIyBbMS42LjFdIC0gMjAxOS0wNy0wMgoKIyMjIEZpeGVkCgotIEFjY2VwdCBudWxsIGFuZCBib29sIGhlYWRlciB2YWx1ZXMgYWdhaW4KCgojIyBbMS42LjBdIC0gMjAxOS0wNi0zMAoKIyMjIEFkZGVkCgotIEFsbG93ZWQgdmVyc2lvbiBgXjMuMGAgb2YgYHJhbG91cGhpZS9nZXRhbGxoZWFkZXJzYCBkZXBlbmRlbmN5ICgjMjQ0KQotIEFkZGVkIE1JTUUgdHlwZSBmb3IgV0VCUCBpbWFnZSBmb3JtYXQgKCMyNDYpCi0gQWRkZWQgbW9yZSB2YWxpZGF0aW9uIG9mIHZhbHVlcyBhY2NvcmRpbmcgdG8gUFNSLTcgYW5kIFJGQyBzdGFuZGFyZHMsIGUuZy4gc3RhdHVzIGNvZGUgcmFuZ2UgKCMyNTAsICMyNzIpCgojIyMgQ2hhbmdlZAoKLSBUZXN0cyBkb24ndCBwYXNzIHdpdGggSEhWTSA0LjAsIHNvIEhIVk0gc3VwcG9ydCBnb3QgZHJvcHBlZC4gT3RoZXIgbGlicmFyaWVzIGxpa2UgY29tcG9zZXIgaGF2ZSBkb25lIHRoZSBzYW1lLiAoIzI2MikKLSBBY2NlcHQgcG9ydCBudW1iZXIgMCB0byBiZSB2YWxpZCAoIzI3MCkKCiMjIyBGaXhlZAoKLSBGaXhlZCBzdWJzZXF1ZW50IHJlYWRzIGZyb20gYHBocDovL2lucHV0YCBpbiBTZXJ2ZXJSZXF1ZXN0ICgjMjQ3KQotIEZpeGVkIHJlYWRhYmxlL3dyaXRhYmxlIGRldGVjdGlvbiBmb3IgY2VydGFpbiBzdHJlYW0gbW9kZXMgKCMyNDgpCi0gRml4ZWQgZW5jb2Rpbmcgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBgdXNlckluZm9gIGNvbXBvbmVudCBvZiBhbiBVUkkgKCMyNTMpCgoKIyMgWzEuNS4yXSAtIDIwMTgtMTItMDQKCiMjIyBGaXhlZAoKLSBDaGVjayBib2R5IHNpemUgd2hlbiBnZXR0aW5nIHRoZSBtZXNzYWdlIHN1bW1hcnkKCgojIyBbMS41LjFdIC0gMjAxOC0xMi0wNAoKIyMjIEZpeGVkCgotIEdldCB0aGUgc3VtbWFyeSBvZiBhIGJvZHkgb25seSBpZiBpdCBpcyByZWFkYWJsZQoKCiMjIFsxLjUuMF0gLSAyMDE4LTEyLTAzCgojIyMgQWRkZWQKCi0gUmVzcG9uc2UgZmlyc3QtbGluZSB0byByZXNwb25zZSBzdHJpbmcgZXhjZXB0aW9uIChmaXhlcyAjMTQ1KQotIEEgdGVzdCBmb3IgIzEyOSBiZWhhdmlvcgotIGBnZXRfbWVzc2FnZV9ib2R5X3N1bW1hcnlgIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGdldCB0aGUgbWVzc2FnZSBzdW1tYXJ5Ci0gYDNncGAgYW5kIGBta3ZgIG1pbWUgdHlwZXMKCiMjIyBDaGFuZ2VkCgotIENsYXJpZnkgZXhjZXB0aW9uIG1lc3NhZ2Ugd2hlbiBzdHJlYW0gaXMgZGV0YWNoZWQKCiMjIyBEZXByZWNhdGVkCgotIERlcHJlY2F0ZWQgcGFyc2luZyBmb2xkZWQgaGVhZGVyIGxpbmVzIGFzIHBlciBSRkMgNzIzMAoKIyMjIEZpeGVkCgotIEZpeCBgQXBwZW5kU3RyZWFtOjpkZXRhY2hgIHRvIG5vdCBjbG9zZSBzdHJlYW1zCi0gYEluZmxhdGVTdHJlYW1gIHByZXNlcnZlcyBgaXNTZWVrYWJsZWAgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQotIGBTZXJ2ZXJSZXF1ZXN0OjpnZXRVcmlGcm9tR2xvYmFsc2AgdG8gc3VwcG9ydCBVUkxzIGluIHF1ZXJ5IHBhcmFtZXRlcnMKCgpTZXZlcmFsIG90aGVyIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMuCgoKIyMgWzEuNC4yXSAtIDIwMTctMDMtMjAKCiMjIyBGaXhlZAoKLSBSZXZlcnRlZCBCQyBicmVhayB0byBgVXJpOjpyZXNvbHZlYCBhbmQgYFVyaTo6cmVtb3ZlRG90U2VnbWVudHNgIGJ5IHJlbW92aW5nCiAgY2FsbHMgdG8gYHRyaWdnZXJfZXJyb3JgIHdoZW4gZGVwcmVjYXRlZCBtZXRob2RzIGFyZSBpbnZva2VkLgoKCiMjIFsxLjQuMV0gLSAyMDE3LTAyLTI3CgojIyMgQWRkZWQKCi0gUnJpZ2dlcmluZyBvZiBzaWxlbmNlZCBkZXByZWNhdGlvbiB3YXJuaW5ncy4KCiMjIyBGaXhlZAoKLSBSZXZlcnRlZCBCQyBicmVhayBieSByZWludHJvZHVjaW5nIGJlaGF2aW9yIHRvIGF1dG9tYWdpY2FsbHkgZml4IGEgVVJJIHdpdGggYQogIHJlbGF0aXZlIHBhdGggYW5kIGFuIGF1dGhvcml0eSBieSBhZGRpbmcgYSBsZWFkaW5nIHNsYXNoIHRvIHRoZSBwYXRoLiBJdCdzIG9ubHkKICBkZXByZWNhdGVkIG5vdy4KCgojIyBbMS40LjBdIC0gMjAxNy0wMi0yMQoKIyMjIEFkZGVkCgotIEFkZGVkIGNvbW1vbiBVUkkgdXRpbGl0eSBtZXRob2RzIGJhc2VkIG9uIFJGQyAzOTg2IChzZWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgcmVhZG1lKToKICAtIGBVcmk6OmlzRGVmYXVsdFBvcnRgCiAgLSBgVXJpOjppc0Fic29sdXRlYAogIC0gYFVyaTo6aXNOZXR3b3JrUGF0aFJlZmVyZW5jZWAKICAtIGBVcmk6OmlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlYAogIC0gYFVyaTo6aXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2VgCiAgLSBgVXJpOjppc1NhbWVEb2N1bWVudFJlZmVyZW5jZWAKICAtIGBVcmk6OmNvbXBvc2VDb21wb25lbnRzYAogIC0gYFVyaU5vcm1hbGl6ZXI6Om5vcm1hbGl6ZWAKICAtIGBVcmlOb3JtYWxpemVyOjppc0VxdWl2YWxlbnRgCiAgLSBgVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemVgCgojIyMgQ2hhbmdlZAoKLSBFbnN1cmUgYFNlcnZlclJlcXVlc3Q6OmdldFVyaUZyb21HbG9iYWxzYCByZXR1cm5zIGEgVVJJIGluIGFic29sdXRlIGZvcm0uCi0gQWxsb3cgYHBhcnNlX3Jlc3BvbnNlYCB0byBwYXJzZSBhIHJlc3BvbnNlIHdpdGhvdXQgZGVsaW1pdGluZyBzcGFjZSBhbmQgcmVhc29uLgotIEVuc3VyZSBlYWNoIFVSSSBtb2RpZmljYXRpb24gcmVzdWx0cyBpbiBhIHZhbGlkIFVSSSBhY2NvcmRpbmcgdG8gUFNSLTcgZGlzY3Vzc2lvbnMuCiAgSW52YWxpZCBtb2RpZmljYXRpb25zIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgd3JvbmcgVVJJIG9yCiAgZG9pbmcgc29tZSBtYWdpYy4KICAtIGAobmV3IFVyaSktPndpdGhQYXRoKCdmb28nKS0+d2l0aEhvc3QoJ2V4YW1wbGUuY29tJylgIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICBiZWNhdXNlIHRoZSBwYXRoIG9mIGEgVVJJIHdpdGggYW4gYXV0aG9yaXR5IG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoICIvIiBvciBiZSBlbXB0eQogIC0gYChuZXcgVXJpKCkpLT53aXRoU2NoZW1lKCdodHRwJylgIHdpbGwgcmV0dXJuIGAnaHR0cDovL2xvY2FsaG9zdCdgCgojIyMgRGVwcmVjYXRlZAoKLSBgVXJpOjpyZXNvbHZlYCBpbiBmYXZvciBvZiBgVXJpUmVzb2x2ZXI6OnJlc29sdmVgCi0gYFVyaTo6cmVtb3ZlRG90U2VnbWVudHNgIGluIGZhdm9yIG9mIGBVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHNgCgojIyMgRml4ZWQKCi0gYFN0cmVhbTo6cmVhZGAgd2hlbiBsZW5ndGggcGFyYW1ldGVyIDw9IDAuCi0gYGNvcHlfdG9fc3RyZWFtYCByZWFkcyBieXRlcyBpbiBjaHVua3MgaW5zdGVhZCBvZiBgbWF4TGVuYCBpbnRvIG1lbW9yeS4KLSBgU2VydmVyUmVxdWVzdDo6Z2V0VXJpRnJvbUdsb2JhbHNgIHdoZW4gYEhvc3RgIGhlYWRlciBjb250YWlucyBwb3J0LgotIENvbXBhdGliaWxpdHkgb2YgVVJJcyB3aXRoIGBmaWxlYCBzY2hlbWUgYW5kIGVtcHR5IGhvc3QuCgoKIyMgWzEuMy4xXSAtIDIwMTYtMDYtMjUKCiMjIyBGaXhlZAoKLSBgVXJpOjpfX3RvU3RyaW5nYCBmb3IgbmV0d29yayBwYXRoIHJlZmVyZW5jZXMsIGUuZy4gYC8vZXhhbXBsZS5vcmdgLgotIE1pc3NpbmcgbG93ZXJjYXNlIG5vcm1hbGl6YXRpb24gZm9yIGhvc3QuCi0gSGFuZGxpbmcgb2YgVVJJIGNvbXBvbmVudHMgaW4gY2FzZSB0aGV5IGFyZSBgJzAnYCBpbiBhIGxvdCBvZiBwbGFjZXMsCiAgZS5nLiBhcyBhIHVzZXIgaW5mbyBwYXNzd29yZC4KLSBgVXJpOjp3aXRoQWRkZWRIZWFkZXJgIHRvIGNvcnJlY3RseSBtZXJnZSBoZWFkZXJzIHdpdGggZGlmZmVyZW50IGNhc2UuCi0gVHJpbW1pbmcgb2YgaGVhZGVyIHZhbHVlcyBpbiBgVXJpOjp3aXRoQWRkZWRIZWFkZXJgLiBIZWFkZXIgdmFsdWVzIG1heQogIGJlIHN1cnJvdW5kZWQgYnkgd2hpdGVzcGFjZSB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBhY2NvcmRpbmcgdG8gUkZDIDcyMzAKICBTZWN0aW9uIDMuMi40LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGhlYWRlciBuYW1lcy4KLSBgVXJpOjp3aXRoQWRkZWRIZWFkZXJgIHdpdGggYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcy4KLSBgVXJpOjpyZXNvbHZlYCB3aGVuIGJhc2UgcGF0aCBoYXMgbm8gc2xhc2ggYW5kIGhhbmRsaW5nIG9mIGZyYWdtZW50LgotIEhhbmRsaW5nIG9mIGVuY29kaW5nIGluIGBVcmk6OndpdGgob3V0KVF1ZXJ5VmFsdWVgIHNvIG9uZSBjYW4gcGFzcyB0aGUKICBrZXkvdmFsdWUgYm90aCBpbiBlbmNvZGVkIGFzIHdlbGwgYXMgZGVjb2RlZCBmb3JtIHRvIHRob3NlIG1ldGhvZHMuIFRoaXMgaXMKICBjb25zaXN0ZW50IHdpdGggd2l0aFBhdGgsIHdpdGhRdWVyeSBldGMuCi0gYFNlcnZlclJlcXVlc3Q6OndpdGhvdXRBdHRyaWJ1dGVgIHdoZW4gYXR0cmlidXRlIHZhbHVlIGlzIG51bGwuCgoKIyMgWzEuMy4wXSAtIDIwMTYtMDQtMTMKCiMjIyBBZGRlZAoKLSBSZW1haW5pbmcgaW50ZXJmYWNlcyBuZWVkZWQgZm9yIGZ1bGwgUFNSNyBjb21wYXRpYmlsaXR5CiAgKFNlcnZlclJlcXVlc3RJbnRlcmZhY2UsIFVwbG9hZGVkRmlsZUludGVyZmFjZSwgZXRjLikuCi0gU3VwcG9ydCBmb3Igc3RyZWFtX2ZvciBmcm9tIHNjYWxhcnMuCgojIyMgQ2hhbmdlZAoKLSBDYW4gbm93IGV4dGVuZCBVcmkuCgojIyMgRml4ZWQKLSBBIGJ1ZyBpbiB2YWxpZGF0aW5nIHJlcXVlc3QgbWV0aG9kcyBieSBtYWtpbmcgaXQgbW9yZSBwZXJtaXNzaXZlLgoKCiMjIFsxLjIuM10gLSAyMDE2LTAyLTE4CgojIyMgRml4ZWQKCi0gU3VwcG9ydCBpbiBgR3V6emxlSHR0cFxQc3I3XENhY2hpbmdTdHJlYW1gIGZvciBzZWVraW5nIGZvcndhcmQgb24gcmVtb3RlCiAgc3RyZWFtcywgd2hpY2ggY2FuIHNvbWV0aW1lcyByZXR1cm4gZmV3ZXIgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQgd2l0aCBgZnJlYWRgLgotIEhhbmRsaW5nIG9mIGd6aXBwZWQgcmVzcG9uc2VzIHdpdGggRk5BTUUgaGVhZGVycy4KCgojIyBbMS4yLjJdIC0gMjAxNi0wMS0yMgoKIyMjIEFkZGVkCgotIFN1cHBvcnQgZm9yIFVSSXMgd2l0aG91dCBhbnkgYXV0aG9yaXR5LgotIFN1cHBvcnQgZm9yIEhUVFAgNDUxICdVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29ucy4nCi0gU3VwcG9ydCBmb3IgdXNpbmcgJzAnIGFzIGEgZmlsZW5hbWUuCi0gU3VwcG9ydCBmb3IgaW5jbHVkaW5nIG5vbi1zdGFuZGFyZCBwb3J0cyBpbiBIb3N0IGhlYWRlcnMuCgoKIyMgWzEuMi4xXSAtIDIwMTUtMTEtMDIKCiMjIyBDaGFuZ2VzCgotIE5vdyBzdXBwb3J0aW5nIG5lZ2F0aXZlIG9mZnNldHMgd2hlbiBzZWVraW5nIHRvIFNFRUtfRU5ELgoKCiMjIFsxLjIuMF0gLSAyMDE1LTA4LTE1CgojIyMgQ2hhbmdlZAoKLSBCb2R5IGFzIGAiMCJgIGlzIG5vdyBwcm9wZXJseSBhZGRlZCB0byBhIHJlc3BvbnNlLgotIE5vdyBhbGxvd2luZyBmb3J3YXJkIHNlZWtpbmcgaW4gQ2FjaGluZ1N0cmVhbS4KLSBOb3cgcHJvcGVybHkgcGFyc2luZyBIVFRQIHJlcXVlc3RzIHRoYXQgY29udGFpbiBwcm94eSB0YXJnZXRzIGluCiAgYHBhcnNlX3JlcXVlc3RgLgotIGZ1bmN0aW9ucy5waHAgaXMgbm93IGNvbmRpdGlvbmFsbHkgcmVxdWlyZWQuCi0gdXNlci1pbmZvIGlzIG5vIGxvbmdlciBkcm9wcGVkIHdoZW4gcmVzb2x2aW5nIFVSSXMuCgoKIyMgWzEuMS4wXSAtIDIwMTUtMDYtMjQKCiMjIyBDaGFuZ2VkCgotIFVSSXMgY2FuIG5vdyBiZSByZWxhdGl2ZS4KLSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAgaGVhZGVycyBhcmUgbm93IG92ZXJyaWRkZW4gY2FzZS1pbnNlbnNpdGl2ZWx5LgotIFVSSSBwYXRocyBubyBsb25nZXIgZW5jb2RlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIGFsbG93ZWQKICBpbiBVUklzOiAiKCIsICIpIiwgIioiLCAiISIsICInIgotIEEgcG9ydCBpcyBubyBsb25nZXIgYWRkZWQgdG8gYSBVUkkgd2hlbiB0aGUgc2NoZW1lIGlzIG1pc3NpbmcgYW5kIG5vIHBvcnQgaXMKICBwcmVzZW50LgoKCiMjIDEuMC4wIC0gMjAxNS0wNS0xOQoKSW5pdGlhbCByZWxlYXNlLgoKQ3VycmVudGx5IHVuc3VwcG9ydGVkOgoKLSBgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYAotIGBQc3JcSHR0cFxNZXNzYWdlXFVwbG9hZGVkRmlsZUludGVyZmFjZWAKCgoKWzEuNi4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS41LjIuLi4xLjYuMApbMS41LjJdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjUuMS4uLjEuNS4yClsxLjUuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNS4wLi4uMS41LjEKWzEuNS4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS40LjIuLi4xLjUuMApbMS40LjJdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjQuMS4uLjEuNC4yClsxLjQuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNC4wLi4uMS40LjEKWzEuNC4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4zLjEuLi4xLjQuMApbMS4zLjFdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjMuMC4uLjEuMy4xClsxLjMuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMi4zLi4uMS4zLjAKWzEuMi4zXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4yLjIuLi4xLjIuMwpbMS4yLjJdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjIuMS4uLjEuMi4yClsxLjIuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMi4wLi4uMS4yLjEKWzEuMi4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4xLjAuLi4xLjIuMApbMS4xLjBdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjAuMC4uLjEuMS4wCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgInJlcXVlc3QiLAogICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICJzdHJlYW0iLAogICAgICAgICJodHRwIiwKICAgICAgICAidXJpIiwKICAgICAgICAidXJsIiwKICAgICAgICAicHNyLTciCiAgICBdLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHcmFoYW0gQ2FtcGJlbGwiLAogICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AZ2pjYW1wYmVsbC5jby51ayIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vR3JhaGFtQ2FtcGJlbGwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkdlb3JnZSBNcG9ub3MiLAogICAgICAgICAgICAiZW1haWwiOiAiZ21wb25vc0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dtcG9ub3MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBOeWhvbG0iLAogICAgICAgICAgICAiZW1haWwiOiAidG9iaWFzLm55aG9sbUBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL055aG9sbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTcOhcmsgU8OhZ2ktS2F6w6FyIiwKICAgICAgICAgICAgImVtYWlsIjogIm1hcmsuc2FnaWthemFyQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2FnaWthemFybWFyayIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgImVtYWlsIjogIndlYm1hc3RlckB0dWJvLXdvcmxkLmRlIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk3DoXJrIFPDoWdpLUthesOhciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zYWdpa2F6YXJtYXJrLmh1IgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjIuNSB8fCBeOC4wIiwKICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4xIHx8IF4yLjAiLAogICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMy4wIiwKICAgICAgICAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiOiAiXjIuNSB8fCBeMy4wIiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4yNCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImJhbWFybmkvY29tcG9zZXItYmluLXBsdWdpbiI6ICJeMS44LjIiLAogICAgICAgICJodHRwLWludGVyb3AvaHR0cC1mYWN0b3J5LXRlc3RzIjogIjEuMS4wIiwKICAgICAgICAianNodHRwL21pbWUtZGIiOiAiMS41NC4wLjEiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS41MiB8fCBeOS42LjM0IgogICAgfSwKICAgICJwcm92aWRlIjogewogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uIjogIjEuMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UtaW1wbGVtZW50YXRpb24iOiAiMS4wIgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJsYW1pbmFzL2xhbWluYXMtaHR0cGhhbmRsZXJydW5uZXIiOiAiRW1pdCBQU1ItNyByZXNwb25zZXMiCiAgICB9LAogICAgInJlcG9zaXRvcmllcyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInBhY2thZ2UiLAogICAgICAgICAgICAicGFja2FnZSI6IHsKICAgICAgICAgICAgICAgICJuYW1lIjogImpzaHR0cC9taW1lLWRiIiwKICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNTQuMC4xIiwKICAgICAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2NvZGVsb2FkLmdpdGh1Yi5jb20vanNodHRwL21pbWUtZGIvemlwLzBhOWZkMGJmYmM4N2E3MjVmZjYzODQ5NTgzOTExNGU3ODA3YjcxNzciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkd1enpsZUh0dHBcXFBzcjdcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkd1enpsZUh0dHBcXFRlc3RzXFxQc3I3XFwiOiAidGVzdHMvIgogICAgICAgIH0KICAgIH0sCiAgICAiY29uZmlnIjogewogICAgICAgICJhbGxvdy1wbHVnaW5zIjogewogICAgICAgICAgICAiYmFtYXJuaS9jb21wb3Nlci1iaW4tcGx1Z2luIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInByZWZlcnJlZC1pbnN0YWxsIjogImRpc3QiLAogICAgICAgICJzb3J0LXBhY2thZ2VzIjogdHJ1ZQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYmFtYXJuaS1iaW4iOiB7CiAgICAgICAgICAgICJiaW4tbGlua3MiOiB0cnVlLAogICAgICAgICAgICAiZm9yd2FyZC1jb21tYW5kIjogZmFsc2UKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgTWljaGFlbCBEb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgpDb3B5cmlnaHQgKGMpIDIwMTUgTcOhcmsgU8OhZ2ktS2F6w6FyIDxtYXJrLnNhZ2lrYXphckBnbWFpbC5jb20+CkNvcHlyaWdodCAoYykgMjAxNSBHcmFoYW0gQ2FtcGJlbGwgPGhlbGxvQGdqY2FtcGJlbGwuY28udWs+CkNvcHlyaWdodCAoYykgMjAxNiBUb2JpYXMgU2NodWx0emUgPHdlYm1hc3RlckB0dWJvLXdvcmxkLmRlPgpDb3B5cmlnaHQgKGMpIDIwMTYgR2VvcmdlIE1wb25vcyA8Z21wb25vc0BnbWFpbC5jb20+CkNvcHlyaWdodCAoYykgMjAxOCBUb2JpYXMgTnlob2xtIDx0b2JpYXMubnlob2xtQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBQU1ItNyBNZXNzYWdlIEltcGxlbWVudGF0aW9uCgpUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgYSBmdWxsIFtQU1ItN10oaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykKbWVzc2FnZSBpbXBsZW1lbnRhdGlvbiwgc2V2ZXJhbCBzdHJlYW0gZGVjb3JhdG9ycywgYW5kIHNvbWUgaGVscGZ1bApmdW5jdGlvbmFsaXR5IGxpa2UgcXVlcnkgc3RyaW5nIHBhcnNpbmcuCgohW0NJXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Bzcjcvd29ya2Zsb3dzL0NJL2JhZGdlLnN2ZykKIVtTdGF0aWMgYW5hbHlzaXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy93b3JrZmxvd3MvU3RhdGljJTIwYW5hbHlzaXMvYmFkZ2Uuc3ZnKQoKCiMjIEZlYXR1cmVzCgpUaGlzIHBhY2thZ2UgY29tZXMgd2l0aCBhIG51bWJlciBvZiBzdHJlYW0gaW1wbGVtZW50YXRpb25zIGFuZCBzdHJlYW0KZGVjb3JhdG9ycy4KCgojIyBJbnN0YWxsYXRpb24KCmBgYHNoZWxsCmNvbXBvc2VyIHJlcXVpcmUgZ3V6emxlaHR0cC9wc3I3CmBgYAoKIyMgVmVyc2lvbiBHdWlkYW5jZQoKfCBWZXJzaW9uIHwgU3RhdHVzICAgICAgICAgICAgICB8IFBIUCBWZXJzaW9uICB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAp8IDEueCAgICAgfCBFT0wgKDIwMjQtMDYtMzApICAgIHwgPj01LjQsPDguMiAgIHwKfCAyLnggICAgIHwgTGF0ZXN0ICAgICAgICAgICAgICB8ID49Ny4yLjUsPDguNiB8CgpTZWUgW1VQR1JBRElORy5tZF0oVVBHUkFESU5HLm1kKSBmb3Igbm90ZXMgb24gdXBncmFkaW5nIGZyb20gMS54IHRvIDIuMC4KCgojIyBBcHBlbmRTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcQXBwZW5kU3RyZWFtYAoKUmVhZHMgZnJvbSBtdWx0aXBsZSBzdHJlYW1zLCBvbmUgYWZ0ZXIgdGhlIG90aGVyLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7CgokYSA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcignYWJjLCAnKTsKJGIgPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJzEyMy4nKTsKJGNvbXBvc2VkID0gbmV3IFBzcjdcQXBwZW5kU3RyZWFtKFskYSwgJGJdKTsKCiRjb21wb3NlZC0+YWRkU3RyZWFtKFBzcjdcVXRpbHM6OnN0cmVhbUZvcignIEFib3ZlIGFsbCBsaXN0ZW4gdG8gbWUnKSk7CgplY2hvICRjb21wb3NlZDsgLy8gYWJjLCAxMjMuIEFib3ZlIGFsbCBsaXN0ZW4gdG8gbWUuCmBgYAoKCiMjIEJ1ZmZlclN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xCdWZmZXJTdHJlYW1gCgpQcm92aWRlcyBhIGJ1ZmZlciBzdHJlYW0gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byBmaWxsIGEgYnVmZmVyLCBhbmQgcmVhZApmcm9tIHRvIHJlbW92ZSBieXRlcyBmcm9tIHRoZSBidWZmZXIuCgpUaGlzIHN0cmVhbSByZXR1cm5zIGEgImh3bSIgbWV0YWRhdGEgdmFsdWUgdGhhdCB0ZWxscyB1cHN0cmVhbSBjb25zdW1lcnMKd2hhdCB0aGUgY29uZmlndXJlZCBoaWdoIHdhdGVyIG1hcmsgb2YgdGhlIHN0cmVhbSBpcywgb3IgdGhlIG1heGltdW0KcHJlZmVycmVkIHNpemUgb2YgdGhlIGJ1ZmZlci4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKLy8gV2hlbiBtb3JlIHRoYW4gMTAyNCBieXRlcyBhcmUgaW4gdGhlIGJ1ZmZlciwgaXQgd2lsbCBiZWdpbiByZXR1cm5pbmcKLy8gMCB0byB3cml0ZXMuIFRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHdyaXRlcnMgc2hvdWxkIHNsb3cgZG93bi4KJGJ1ZmZlciA9IG5ldyBQc3I3XEJ1ZmZlclN0cmVhbSgxMDI0KTsKYGBgCgoKIyMgQ2FjaGluZ1N0cmVhbQoKVGhlIENhY2hpbmdTdHJlYW0gaXMgdXNlZCB0byBhbGxvdyBzZWVraW5nIG92ZXIgcHJldmlvdXNseSByZWFkIGJ5dGVzIG9uCm5vbi1zZWVrYWJsZSBzdHJlYW1zLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB0cmFuc2ZlcnJpbmcgYSBub24tc2Vla2FibGUKZW50aXR5IGJvZHkgZmFpbHMgZHVlIHRvIG5lZWRpbmcgdG8gcmV3aW5kIHRoZSBzdHJlYW0gKGZvciBleGFtcGxlLCByZXN1bHRpbmcKZnJvbSBhIHJlZGlyZWN0KS4gRGF0YSB0aGF0IGlzIHJlYWQgZnJvbSB0aGUgcmVtb3RlIHN0cmVhbSB3aWxsIGJlIGJ1ZmZlcmVkIGluCmEgUEhQIHRlbXAgc3RyZWFtIHNvIHRoYXQgcHJldmlvdXNseSByZWFkIGJ5dGVzIGFyZSBjYWNoZWQgZmlyc3QgaW4gbWVtb3J5LAp0aGVuIG9uIGRpc2suCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRvcmlnaW5hbCA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcihmb3BlbignaHR0cDovL3d3dy5nb29nbGUuY29tJywgJ3InKSk7CiRzdHJlYW0gPSBuZXcgUHNyN1xDYWNoaW5nU3RyZWFtKCRvcmlnaW5hbCk7Cgokc3RyZWFtLT5yZWFkKDEwMjQpOwplY2hvICRzdHJlYW0tPnRlbGwoKTsKLy8gMTAyNAoKJHN0cmVhbS0+c2VlaygwKTsKZWNobyAkc3RyZWFtLT50ZWxsKCk7Ci8vIDAKYGBgCgoKIyMgRHJvcHBpbmdTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcRHJvcHBpbmdTdHJlYW1gCgpTdHJlYW0gZGVjb3JhdG9yIHRoYXQgYmVnaW5zIGRyb3BwaW5nIGRhdGEgb25jZSB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZwpzdHJlYW0gYmVjb21lcyB0b28gZnVsbC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKLy8gQ3JlYXRlIGFuIGVtcHR5IHN0cmVhbQokc3RyZWFtID0gUHNyN1xVdGlsczo6c3RyZWFtRm9yKCk7CgovLyBTdGFydCBkcm9wcGluZyBkYXRhIHdoZW4gdGhlIHN0cmVhbSBoYXMgbW9yZSB0aGFuIDEwIGJ5dGVzCiRkcm9wcGluZyA9IG5ldyBQc3I3XERyb3BwaW5nU3RyZWFtKCRzdHJlYW0sIDEwKTsKCiRkcm9wcGluZy0+d3JpdGUoJzAxMjM0NTY3ODkwMTIzNDU2Nzg5Jyk7CmVjaG8gJHN0cmVhbTsgLy8gMDEyMzQ1Njc4OQpgYGAKCgojIyBGblN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xGblN0cmVhbWAKCkNvbXBvc2Ugc3RyZWFtIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiBhIGhhc2ggb2YgY2FsbGFibGVzLgoKQWxsb3dzIGZvciBlYXN5IHRlc3RpbmcgYW5kIGV4dGVuc2lvbiBvZiBhIHByb3ZpZGVkIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcKdG8gY3JlYXRlIGEgY29uY3JldGUgY2xhc3MgZm9yIGEgc2ltcGxlIGV4dGVuc2lvbiBwb2ludC4KCmBgYHBocAoKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRzdHJlYW0gPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJ2hpJyk7CiRmblN0cmVhbSA9IFBzcjdcRm5TdHJlYW06OmRlY29yYXRlKCRzdHJlYW0sIFsKICAgICdyZXdpbmQnID0+IGZ1bmN0aW9uICgpIHVzZSAoJHN0cmVhbSkgewogICAgICAgIGVjaG8gJ0Fib3V0IHRvIHJld2luZCAtICc7CiAgICAgICAgJHN0cmVhbS0+cmV3aW5kKCk7CiAgICAgICAgZWNobyAncmV3b3VuZCEnOwogICAgfQpdKTsKCiRmblN0cmVhbS0+cmV3aW5kKCk7Ci8vIE91dHB1dHM6IEFib3V0IHRvIHJld2luZCAtIHJld291bmQhCmBgYAoKCiMjIEluZmxhdGVTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcSW5mbGF0ZVN0cmVhbWAKClVzZXMgUEhQJ3MgemxpYi5pbmZsYXRlIGZpbHRlciB0byBpbmZsYXRlIHpsaWIgKEhUVFAgZGVmbGF0ZSwgUkZDMTk1MCkgb3IgZ3ppcHBlZCAoUkZDMTk1MikgY29udGVudC4KClRoaXMgc3RyZWFtIGRlY29yYXRvciBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgc3RyZWFtIHRvIGEgUEhQIHN0cmVhbSByZXNvdXJjZSwKdGhlbiBhcHBlbmRzIHRoZSB6bGliLmluZmxhdGUgZmlsdGVyLiBUaGUgc3RyZWFtIGlzIHRoZW4gY29udmVydGVkIGJhY2sKdG8gYSBHdXp6bGUgc3RyZWFtIHJlc291cmNlIHRvIGJlIHVzZWQgYXMgYSBHdXp6bGUgc3RyZWFtLgoKCiMjIExhenlPcGVuU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XExhenlPcGVuU3RyZWFtYAoKTGF6aWx5IHJlYWRzIG9yIHdyaXRlcyB0byBhIGZpbGUgdGhhdCBpcyBvcGVuZWQgb25seSBhZnRlciBhbiBJTyBvcGVyYXRpb24KdGFrZSBwbGFjZSBvbiB0aGUgc3RyZWFtLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7Cgokc3RyZWFtID0gbmV3IFBzcjdcTGF6eU9wZW5TdHJlYW0oJy9wYXRoL3RvL2ZpbGUnLCAncicpOwovLyBUaGUgZmlsZSBoYXMgbm90IHlldCBiZWVuIG9wZW5lZC4uLgoKZWNobyAkc3RyZWFtLT5yZWFkKDEwKTsKLy8gVGhlIGZpbGUgaXMgb3BlbmVkIGFuZCByZWFkIGZyb20gb25seSB3aGVuIG5lZWRlZC4KYGBgCgoKIyMgTGltaXRTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTGltaXRTdHJlYW1gCgpMaW1pdFN0cmVhbSBjYW4gYmUgdXNlZCB0byByZWFkIGEgc3Vic2V0IG9yIHNsaWNlIG9mIGFuIGV4aXN0aW5nIHN0cmVhbSBvYmplY3QuClRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgYnJlYWtpbmcgYSBsYXJnZSBmaWxlIGludG8gc21hbGxlciBwaWVjZXMgdG8gYmUgc2VudCBpbgpjaHVua3MgKGUuZy4gQW1hem9uIFMzJ3MgbXVsdGlwYXJ0IHVwbG9hZCBBUEkpLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7Cgokb3JpZ2luYWwgPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoZm9wZW4oJy90bXAvdGVzdC50eHQnLCAncisnKSk7CmVjaG8gJG9yaWdpbmFsLT5nZXRTaXplKCk7Ci8vID4+PiAxMDQ4NTc2CgovLyBMaW1pdCB0aGUgc2l6ZSBvZiB0aGUgYm9keSB0byAxMDI0IGJ5dGVzIGFuZCBzdGFydCByZWFkaW5nIGZyb20gYnl0ZSAyMDQ4CiRzdHJlYW0gPSBuZXcgUHNyN1xMaW1pdFN0cmVhbSgkb3JpZ2luYWwsIDEwMjQsIDIwNDgpOwplY2hvICRzdHJlYW0tPmdldFNpemUoKTsKLy8gPj4+IDEwMjQKZWNobyAkc3RyZWFtLT50ZWxsKCk7Ci8vID4+PiAwCmBgYAoKCiMjIE11bHRpcGFydFN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xNdWx0aXBhcnRTdHJlYW1gCgpTdHJlYW0gdGhhdCB3aGVuIHJlYWQgcmV0dXJucyBieXRlcyBmb3IgYSBzdHJlYW1pbmcgbXVsdGlwYXJ0IG9yCm11bHRpcGFydC9mb3JtLWRhdGEgc3RyZWFtLgoKRWFjaCBtdWx0aXBhcnQgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBgbmFtZWAgYW5kIGBjb250ZW50c2Aga2V5LiBgY29udGVudHNgIG1heQpiZSBhbnkgbm9uLWFycmF5IHZhbHVlIGFjY2VwdGVkIGJ5IGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnN0cmVhbUZvcigpYCwKaW5jbHVkaW5nIGNsb3N1cmVzIGFuZCBpbnZva2FibGUgb2JqZWN0cy4gQXJyYXkgY29udGVudHMgYXJlIHJlY3Vyc2l2ZWx5CmV4cGFuZGVkIGludG8gbmVzdGVkIGZvcm0gZmllbGRzLgoKCiMjIE5vU2Vla1N0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xOb1NlZWtTdHJlYW1gCgpOb1NlZWtTdHJlYW0gd3JhcHMgYSBzdHJlYW0gYW5kIGRvZXMgbm90IGFsbG93IHNlZWtpbmcuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRvcmlnaW5hbCA9IFBzcjdcVXRpbHM6OnN0cmVhbUZvcignZm9vJyk7CiRub1NlZWsgPSBuZXcgUHNyN1xOb1NlZWtTdHJlYW0oJG9yaWdpbmFsKTsKCmVjaG8gJG5vU2Vlay0+cmVhZCgzKTsKLy8gZm9vCnZhcl9leHBvcnQoJG5vU2Vlay0+aXNTZWVrYWJsZSgpKTsKLy8gZmFsc2UKJG5vU2Vlay0+c2VlaygwKTsKdmFyX2V4cG9ydCgkbm9TZWVrLT5yZWFkKDMpKTsKLy8gTlVMTApgYGAKCgojIyBQdW1wU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XFB1bXBTdHJlYW1gCgpQcm92aWRlcyBhIHJlYWQgb25seSBzdHJlYW0gdGhhdCBwdW1wcyBkYXRhIGZyb20gYSBQSFAgY2FsbGFibGUuCgpXaGVuIGludm9raW5nIHRoZSBwcm92aWRlZCBjYWxsYWJsZSwgdGhlIFB1bXBTdHJlYW0gd2lsbCBwYXNzIHRoZSBzdWdnZXN0ZWQKbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgdG8gdGhlIGNhbGxhYmxlLiBUaGUgY2FsbGFibGUgY2FuIGNob29zZSB0byBpZ25vcmUKdGhpcyB2YWx1ZSBhbmQgcmV0dXJuIGZld2VyIG9yIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuIEFueSBleHRyYSBkYXRhCnJldHVybmVkIGJ5IHRoZSBwcm92aWRlZCBjYWxsYWJsZSBpcyBidWZmZXJlZCBpbnRlcm5hbGx5IHVudGlsIGRyYWluZWQgdXNpbmcKdGhlIHJlYWQoKSBmdW5jdGlvbiBvZiB0aGUgUHVtcFN0cmVhbS4gVGhlIHByb3ZpZGVkIGNhbGxhYmxlIE1VU1QgcmV0dXJuCmZhbHNlIG9yIG51bGwgd2hlbiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmVhZC4KClVzZXJsYW5kIGNhbGxhYmxlcyB0aGF0IGRlY2xhcmUgbm8gcGFyYW1ldGVycyBhcmUgdG9sZXJhdGVkIGJ5IFBIUCwgYnV0Cmxlbmd0aC1hd2FyZSBjYWxsYWJsZXMgcmVtYWluIHRoZSByZWNvbW1lbmRlZCBmb3JtYWwgc2hhcGUuCgoKIyMgSW1wbGVtZW50aW5nIHN0cmVhbSBkZWNvcmF0b3JzCgpDcmVhdGluZyBhIHN0cmVhbSBkZWNvcmF0b3IgaXMgdmVyeSBlYXN5IHRoYW5rcyB0byB0aGUKYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdGAuIFRoaXMgdHJhaXQgcHJvdmlkZXMgbWV0aG9kcyB0aGF0CmltcGxlbWVudCBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgIGJ5IHByb3h5aW5nIHRvIGFuIHVuZGVybHlpbmcKc3RyZWFtLiBKdXN0IGB1c2VgIHRoZSBgU3RyZWFtRGVjb3JhdG9yVHJhaXRgIGFuZCBpbXBsZW1lbnQgeW91ciBjdXN0b20KbWV0aG9kcy4KCkZvciBleGFtcGxlLCBsZXQncyBzYXkgd2Ugd2FudGVkIHRvIGNhbGwgYSBzcGVjaWZpYyBmdW5jdGlvbiBlYWNoIHRpbWUgdGhlIGxhc3QKYnl0ZSBpcyByZWFkIGZyb20gYSBzdHJlYW0uIFRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyB0aGUKYHJlYWQoKWAgbWV0aG9kLgoKYGBgcGhwCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCmNsYXNzIEVvZkNhbGxiYWNrU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRjYWxsYmFjazsKCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBjYWxsYWJsZSAkY2IpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPmNhbGxiYWNrID0gJGNiOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5zdHJlYW0tPnJlYWQoJGxlbmd0aCk7CgogICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgd2hlbiBFT0YgaXMgaGl0LgogICAgICAgIGlmICgkdGhpcy0+ZW9mKCkpIHsKICAgICAgICAgICAgKCR0aGlzLT5jYWxsYmFjaykoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9CmBgYAoKVGhpcyBkZWNvcmF0b3IgY291bGQgYmUgYWRkZWQgdG8gYW55IGV4aXN0aW5nIHN0cmVhbSBhbmQgdXNlZCBsaWtlIHNvOgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7Cgokb3JpZ2luYWwgPSBQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJ2ZvbycpOwoKJGVvZlN0cmVhbSA9IG5ldyBFb2ZDYWxsYmFja1N0cmVhbSgkb3JpZ2luYWwsIGZ1bmN0aW9uICgpIHsKICAgIGVjaG8gJ0VPRiEnOwp9KTsKCiRlb2ZTdHJlYW0tPnJlYWQoMik7CiRlb2ZTdHJlYW0tPnJlYWQoMSk7Ci8vIGVjaG9lcyAiRU9GISIKJGVvZlN0cmVhbS0+c2VlaygwKTsKJGVvZlN0cmVhbS0+cmVhZCgzKTsKLy8gZWNob2VzICJFT0YhIgpgYGAKCgojIyBQSFAgU3RyZWFtV3JhcHBlcgoKWW91IGNhbiB1c2UgdGhlIGBHdXp6bGVIdHRwXFBzcjdcU3RyZWFtV3JhcHBlcmAgY2xhc3MgaWYgeW91IG5lZWQgdG8gdXNlIGEKUFNSLTcgc3RyZWFtIGFzIGEgUEhQIHN0cmVhbSByZXNvdXJjZS4KClVzZSB0aGUgYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1XcmFwcGVyOjpnZXRSZXNvdXJjZSgpYCBtZXRob2QgdG8gY3JlYXRlIGEgUEhQCnN0cmVhbSBmcm9tIGEgUFNSLTcgc3RyZWFtLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjdcU3RyZWFtV3JhcHBlcjsKCiRzdHJlYW0gPSBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnN0cmVhbUZvcignaGVsbG8hJyk7CiRyZXNvdXJjZSA9IFN0cmVhbVdyYXBwZXI6OmdldFJlc291cmNlKCRzdHJlYW0pOwplY2hvIGZyZWFkKCRyZXNvdXJjZSwgNik7IC8vIG91dHB1dHMgaGVsbG8hCmBgYAoKCiMgU3RhdGljIEFQSQoKVGhlcmUgYXJlIHZhcmlvdXMgc3RhdGljIG1ldGhvZHMgYXZhaWxhYmxlIHVuZGVyIHRoZSBgR3V6emxlSHR0cFxQc3I3YCBuYW1lc3BhY2UuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjp0b1N0cmluZ2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvU3RyaW5nKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiBzdHJpbmdgCgpSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSFRUUCBtZXNzYWdlLgoKYGBgcGhwCiRyZXF1ZXN0ID0gbmV3IEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0KCdHRVQnLCAnaHR0cDovL2V4YW1wbGUuY29tJyk7CmVjaG8gR3V6emxlSHR0cFxQc3I3XE1lc3NhZ2U6OnRvU3RyaW5nKCRyZXF1ZXN0KTsKYGBgCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjpib2R5U3VtbWFyeWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJvZHlTdW1tYXJ5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UsIGludCAkdHJ1bmNhdGVBdCA9IDEyMCk6IHN0cmluZ3xudWxsYAoKR2V0IGEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgbWVzc2FnZSBib2R5LgoKV2lsbCByZXR1cm4gYG51bGxgIGlmIHRoZSByZXNwb25zZSBpcyBub3QgcHJpbnRhYmxlLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6cmV3aW5kQm9keWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJld2luZEJvZHkoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSk6IHZvaWRgCgpBdHRlbXB0cyB0byByZXdpbmQgYSBtZXNzYWdlIGJvZHkgYW5kIHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KClRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIHdpbGwgb25seSBiZSByZXdvdW5kIGlmIGEgY2FsbCB0byBgdGVsbCgpYApyZXR1cm5zIGEgdmFsdWUgb3RoZXIgdGhhbiBgMGAuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjpwYXJzZU1lc3NhZ2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZU1lc3NhZ2Uoc3RyaW5nICRtZXNzYWdlKTogYXJyYXlgCgpQYXJzZXMgYW4gSFRUUCBtZXNzYWdlIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCgpUaGUgYXJyYXkgY29udGFpbnMgdGhlICJzdGFydC1saW5lIiBrZXkgY29udGFpbmluZyB0aGUgc3RhcnQgbGluZSBvZgp0aGUgbWVzc2FnZSwgImhlYWRlcnMiIGtleSBjb250YWluaW5nIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlcgphcnJheSB2YWx1ZXMsIGFuZCBhICJib2R5IiBrZXkgY29udGFpbmluZyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KCgojIyBgR3V6emxlSHR0cFxQc3I3XE1lc3NhZ2U6OnBhcnNlUmVxdWVzdFVyaWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVxdWVzdFVyaShzdHJpbmcgJHBhdGgsIGFycmF5ICRoZWFkZXJzKTogc3RyaW5nYAoKQ29uc3RydWN0cyBhIFVSSSBmb3IgYW4gSFRUUCByZXF1ZXN0IG1lc3NhZ2UuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xNZXNzYWdlOjpwYXJzZVJlcXVlc3RgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVJlcXVlc3Qoc3RyaW5nICRtZXNzYWdlKTogUmVxdWVzdGAKClBhcnNlcyBhIHJlcXVlc3QgbWVzc2FnZSBzdHJpbmcgaW50byBhIHJlcXVlc3Qgb2JqZWN0LgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcTWVzc2FnZTo6cGFyc2VSZXNwb25zZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2Uoc3RyaW5nICRtZXNzYWdlKTogUmVzcG9uc2VgCgpQYXJzZXMgYSByZXNwb25zZSBtZXNzYWdlIHN0cmluZyBpbnRvIGEgcmVzcG9uc2Ugb2JqZWN0LgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcSGVhZGVyOjpwYXJzZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKHN0cmluZ3xhcnJheSAkaGVhZGVyKTogYXJyYXlgCgpQYXJzZSBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIGNvbnRhaW5pbmcgIjsiIHNlcGFyYXRlZCBkYXRhIGludG8gYW4KYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyIGtleSB2YWx1ZSBwYWlyIGRhdGEKb2YgdGhlIGhlYWRlci4gV2hlbiBhIHBhcmFtZXRlciBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUsIGJ1dCBqdXN0CmNvbnRhaW5zIGEga2V5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5qZWN0IGEga2V5IHdpdGggYSAnJyBzdHJpbmcgdmFsdWUuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xIZWFkZXI6OnNwbGl0TGlzdGAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNwbGl0TGlzdChzdHJpbmd8c3RyaW5nW10gJGhlYWRlcik6IHN0cmluZ1tdYAoKU3BsaXRzIGEgSFRUUCBoZWFkZXIgZGVmaW5lZCB0byBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgaW50bwplYWNoIGluZGl2aWR1YWwgdmFsdWU6CgpgYGAKJGtub3duRXRhZ3MgPSBIZWFkZXI6OnNwbGl0TGlzdCgkcmVxdWVzdC0+Z2V0SGVhZGVyKCdpZi1ub25lLW1hdGNoJykpOwpgYGAKCkV4YW1wbGUgaGVhZGVycyBpbmNsdWRlIGBhY2NlcHRgLCBgY2FjaGUtY29udHJvbGAgYW5kIGBpZi1ub25lLW1hdGNoYC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XEhlYWRlcjo6bm9ybWFsaXplYCAoZGVwcmVjYXRlZCkKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZShzdHJpbmd8YXJyYXkgJGhlYWRlcik6IGFycmF5YAoKYEhlYWRlcjo6bm9ybWFsaXplKClgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgW2BIZWFkZXI6OnNwbGl0TGlzdCgpYF0oUkVBRE1FLm1kI2d1enpsZWh0dHBwc3I3aGVhZGVyc3BsaXRsaXN0KQp3aGljaCBwZXJmb3JtcyB0aGUgc2FtZSBvcGVyYXRpb24gd2l0aCBhIGNsZWFuZWQgdXAgQVBJIGFuZCBpbXByb3ZlZApkb2N1bWVudGF0aW9uLgoKQ29udmVydHMgYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcyB0aGF0IG1heSBjb250YWluIGNvbW1hIHNlcGFyYXRlZApoZWFkZXJzIGludG8gYW4gYXJyYXkgb2YgaGVhZGVycyB3aXRoIG5vIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xRdWVyeTo6cGFyc2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZShzdHJpbmcgJHN0ciwgaW50fGJvb2wgJHVybEVuY29kaW5nID0gdHJ1ZSk6IGFycmF5YAoKUGFyc2UgYSBxdWVyeSBzdHJpbmcgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KCklmIG11bHRpcGxlIHZhbHVlcyBhcmUgZm91bmQgZm9yIHRoZSBzYW1lIGtleSwgdGhlIHZhbHVlIG9mIHRoYXQga2V5CnZhbHVlIHBhaXIgd2lsbCBiZWNvbWUgYW4gYXJyYXkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgbmVzdGVkClBIUCBzdHlsZSBhcnJheXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgYGZvb1thXT0xJmZvb1tiXT0yYAp3aWxsIGJlIHBhcnNlZCBpbnRvIGBbJ2Zvb1thXScgPT4gJzEnLCAnZm9vW2JdJyA9PiAnMiddKWAuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xRdWVyeTo6YnVpbGRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZChhcnJheSAkcGFyYW1zLCBpbnR8ZmFsc2UgJGVuY29kaW5nID0gUEhQX1FVRVJZX1JGQzM5ODYsIGJvb2wgJHRyZWF0Qm9vbHNBc0ludHMgPSB0cnVlKTogc3RyaW5nYAoKQnVpbGQgYSBxdWVyeSBzdHJpbmcgZnJvbSBhbiBhcnJheSBvZiBrZXkgdmFsdWUgcGFpcnMuCgpUaGlzIGZ1bmN0aW9uIGNhbiB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGFyc2UoKWAgdG8gYnVpbGQgYSBxdWVyeQpzdHJpbmcuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IHRoZSBwcm92aWRlZCBrZXlzIHdoZW4gYW4gYXJyYXkgaXMKZW5jb3VudGVyZWQgKGxpa2UgYGh0dHBfYnVpbGRfcXVlcnkoKWAgd291bGQpLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OmNhc2VsZXNzUmVtb3ZlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzZWxlc3NSZW1vdmUoaXRlcmFibGU8c3RyaW5nPiAka2V5cywgJGtleXMsIGFycmF5ICRkYXRhKTogYXJyYXlgCgpSZW1vdmUgdGhlIGl0ZW1zIGdpdmVuIGJ5IHRoZSBrZXlzLCBjYXNlIGluc2Vuc2l0aXZlbHkgZnJvbSB0aGUgZGF0YS4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpjb3B5VG9TdHJlYW1gCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3B5VG9TdHJlYW0oU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UsIFN0cmVhbUludGVyZmFjZSAkZGVzdCwgaW50ICRtYXhMZW4gPSAtMSk6IHZvaWRgCgpDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGFub3RoZXIgc3RyZWFtIHVudGlsIHRoZSBnaXZlbiBudW1iZXIKb2YgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQuCgpUaGUgY29weSBzdG9wcyBpZiB0aGUgZGVzdGluYXRpb24gYHdyaXRlKClgIHJldHVybnMgMCwgZm9yIGV4YW1wbGUgYQpgQnVmZmVyU3RyZWFtYCBhdCBpdHMgaGlnaCB3YXRlciBtYXJrIG9yIGEgZnVsbCBgRHJvcHBpbmdTdHJlYW1gLiBGb3IgYQpndWFyYW50ZWVkIGZ1bGwgY29weSwgdXNlIGEgbm9ybWFsIHdyaXRhYmxlIHN0cmVhbSBzdWNoIGFzIGEgZmlsZSBvcgpgcGhwOi8vdGVtcGAgc3RyZWFtLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OmNvcHlUb1N0cmluZ2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvcHlUb1N0cmluZyhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgaW50ICRtYXhMZW4gPSAtMSk6IHN0cmluZ2AKCkNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgc3RyZWFtIGludG8gYSBzdHJpbmcgdW50aWwgdGhlIGdpdmVuIG51bWJlciBvZgpieXRlcyBoYXZlIGJlZW4gcmVhZC4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpoYXNoYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgc3RyaW5nICRhbGdvLCBib29sICRyYXdPdXRwdXQgPSBmYWxzZSk6IHN0cmluZ2AKCkNhbGN1bGF0ZSBhIGhhc2ggb2YgYSBzdHJlYW0uCgpUaGlzIG1ldGhvZCByZWFkcyB0aGUgZW50aXJlIHN0cmVhbSB0byBjYWxjdWxhdGUgYSByb2xsaW5nIGhhc2gsIGJhc2VkIG9uClBIUCdzIGBoYXNoX2luaXRgIGZ1bmN0aW9ucy4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjptb2RpZnlSZXF1ZXN0YAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW9kaWZ5UmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkY2hhbmdlcyk6IFJlcXVlc3RJbnRlcmZhY2VgCgpDbG9uZSBhbmQgbW9kaWZ5IGEgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBjaGFuZ2VzLgoKVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNsb25lcyBuZWVkZWQgdG8gbXV0YXRlCmEgbWVzc2FnZS4KCi0gbWV0aG9kOiAoc3RyaW5nKSBDaGFuZ2VzIHRoZSBIVFRQIG1ldGhvZC4KLSBzZXRfaGVhZGVyczogKGFycmF5KSBTZXRzIHRoZSBnaXZlbiBoZWFkZXJzLgotIHJlbW92ZV9oZWFkZXJzOiAoYXJyYXkpIFJlbW92ZSB0aGUgZ2l2ZW4gaGVhZGVycy4KLSBib2R5OiAobWl4ZWQpIFNldHMgdGhlIGdpdmVuIGJvZHkuIFByZXNlbnQgbm9uLW51bGwgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgd2l0aAogIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnN0cmVhbUZvcigpYCwgaW5jbHVkaW5nIHNjYWxhciB2YWx1ZXMsIHJlc291cmNlcywKICBzdHJlYW1zLCBpdGVyYXRvcnMsIGNhbGxhYmxlIGFycmF5cywgY2xvc3VyZXMsIGludm9rYWJsZSBvYmplY3RzLCBhbmQKICBvYmplY3RzIHdpdGggYF9fdG9TdHJpbmcoKWAuIFN0cmluZyBpbnB1dHMgcmVtYWluIGxpdGVyYWwgYm9kaWVzLgotIHVyaTogKFVyaUludGVyZmFjZSkgU2V0IHRoZSBVUkkuCi0gcXVlcnk6IChzdHJpbmcpIFNldCB0aGUgcXVlcnkgc3RyaW5nIHZhbHVlIG9mIHRoZSBVUkkuCi0gdmVyc2lvbjogKHN0cmluZykgU2V0IHRoZSBwcm90b2NvbCB2ZXJzaW9uLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnJlYWRMaW5lYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZExpbmUoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sID9pbnQgJG1heExlbmd0aCA9IG51bGwpOiBzdHJpbmdgCgpSZWFkIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0gdXAgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBidWZmZXIgbGVuZ3RoLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnJlZGFjdFVzZXJJbmZvYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVkYWN0VXNlckluZm8oVXJpSW50ZXJmYWNlICR1cmkpOiBVcmlJbnRlcmZhY2VgCgpSZWRhY3QgdGhlIHBhc3N3b3JkIGluIHRoZSB1c2VyIGluZm8gcGFydCBvZiBhIFVSSS4KCgojIyBgR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpzdHJlYW1Gb3JgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJlYW1Gb3IocmVzb3VyY2V8c3RyaW5nfG51bGx8aW50fGZsb2F0fGJvb2x8U3RyZWFtSW50ZXJmYWNlfGNhbGxhYmxlfFxJdGVyYXRvciAkcmVzb3VyY2UgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFN0cmVhbUludGVyZmFjZWAKCkNyZWF0ZSBhIG5ldyBzdHJlYW0gYmFzZWQgb24gdGhlIGlucHV0IHR5cGUuCgpPcHRpb25zIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXlzOgoKLSBtZXRhZGF0YTogQXJyYXkgb2YgY3VzdG9tIG1ldGFkYXRhLgotIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbS4KClRoaXMgbWV0aG9kIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBgJHJlc291cmNlYCB0eXBlczoKCi0gYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYDogUmV0dXJucyB0aGUgdmFsdWUgYXMtaXMuCi0gYHN0cmluZ2A6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgdXNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBjb250ZW50cy4KLSBgcmVzb3VyY2VgOiBDcmVhdGVzIGEgc3RyZWFtIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBQSFAgc3RyZWFtIHJlc291cmNlLgotIGBJdGVyYXRvcmA6IElmIHRoZSBwcm92aWRlZCB2YWx1ZSBpbXBsZW1lbnRzIGBJdGVyYXRvcmAsIHRoZW4gYSByZWFkLW9ubHkKICBzdHJlYW0gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBpdGVyYWJsZS4gRWFjaCB0aW1lIHRoZQogIHN0cmVhbSBpcyByZWFkIGZyb20sIGRhdGEgZnJvbSB0aGUgaXRlcmF0b3Igd2lsbCBmaWxsIGEgYnVmZmVyIGFuZCB3aWxsIGJlCiAgY29udGludW91c2x5IGNhbGxlZCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmVhZCBzaXplLgogIFN1YnNlcXVlbnQgcmVhZCBjYWxscyB3aWxsIGZpcnN0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFuZCB0aGVuIGNhbGwgYG5leHRgCiAgb24gdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgdW50aWwgaXQgaXMgZXhoYXVzdGVkLgotIGBvYmplY3RgIHdpdGggYF9fdG9TdHJpbmcoKWA6IElmIHRoZSBvYmplY3QgaGFzIHRoZSBgX190b1N0cmluZygpYCBtZXRob2QsCiAgdGhlIG9iamVjdCB3aWxsIGJlIGNhc3QgdG8gYSBzdHJpbmcgYW5kIHRoZW4gYSBzdHJlYW0gd2lsbCBiZSByZXR1cm5lZCB0aGF0CiAgdXNlcyB0aGUgc3RyaW5nIHZhbHVlLgotIGBOVUxMYDogV2hlbiBgbnVsbGAgaXMgcGFzc2VkLCBhbiBlbXB0eSBzdHJlYW0gb2JqZWN0IGlzIHJldHVybmVkLgotIGBjYWxsYWJsZWA6IFdoZW4gYSBjYWxsYWJsZSBhcnJheSwgY2xvc3VyZSwgb3IgaW52b2thYmxlIG9iamVjdCBpcyBwYXNzZWQgYW5kCiAgbm8gZWFybGllciByZXNvdXJjZSBvciBvYmplY3QgcnVsZSBhcHBsaWVzLCBhIHJlYWQtb25seSBzdHJlYW0gb2JqZWN0IHdpbGwgYmUKICBjcmVhdGVkIHRoYXQgaW52b2tlcyB0aGUgZ2l2ZW4gY2FsbGFibGUuIFRoZSBjYWxsYWJsZSBpcyBpbnZva2VkIHdpdGggdGhlCiAgc3VnZ2VzdGVkIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBUaGUgY2FsbGFibGUgY2FuIHJldHVybiBmZXdlciBvciBtb3JlIGJ5dGVzCiAgdGhhbiByZXF1ZXN0ZWQsIGJ1dCBNVVNUIHJldHVybiBgZmFsc2VgIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQogIHRvIHJldHVybi4gQW55IGFkZGl0aW9uYWwgYnl0ZXMgd2lsbCBiZSBidWZmZXJlZCBhbmQgdXNlZCBpbiBzdWJzZXF1ZW50IHJlYWRzLgogIFN0cmluZyBpbnB1dHMgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIHN0cmluZyBib2RpZXMsIGV2ZW4gd2hlbiB0aGV5IG5hbWUKICBjYWxsYWJsZSBmdW5jdGlvbnMuCgpgYGBwaHAKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xVdGlsczo6c3RyZWFtRm9yKCdmb28nKTsKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xVdGlsczo6c3RyZWFtRm9yKGZvcGVuKCcvcGF0aC90by9maWxlJywgJ3InKSk7CgokZ2VuZXJhdG9yID0gZnVuY3Rpb24gKCRieXRlcykgewogICAgZm9yICgkaSA9IDA7ICRpIDwgJGJ5dGVzOyAkaSsrKSB7CiAgICAgICAgeWllbGQgJyAnOwogICAgfQp9Cgokc3RyZWFtID0gR3V6emxlSHR0cFxQc3I3XFV0aWxzOjpzdHJlYW1Gb3IoJGdlbmVyYXRvcigxMDApKTsKYGBgCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6dHJ5Rm9wZW5gCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlGb3BlbihzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJG1vZGUpOiByZXNvdXJjZWAKClNhZmVseSBvcGVucyBhIFBIUCBzdHJlYW0gcmVzb3VyY2UgdXNpbmcgYSBmaWxlbmFtZS4KCldoZW4gZm9wZW4gZmFpbHMsIFBIUCBub3JtYWxseSByYWlzZXMgYSB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGFkZHMgYW4KZXJyb3IgaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluc3RlYWQuCgoKIyMgYEd1enpsZUh0dHBcUHNyN1xVdGlsczo6dHJ5R2V0Q29udGVudHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlHZXRDb250ZW50cyhyZXNvdXJjZSAkc3RyZWFtKTogc3RyaW5nYAoKU2FmZWx5IGdldHMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gc3RyZWFtLgoKV2hlbiBzdHJlYW1fZ2V0X2NvbnRlbnRzIGZhaWxzLCBQSFAgbm9ybWFsbHkgcmFpc2VzIGEgd2FybmluZy4gVGhpcwpmdW5jdGlvbiBhZGRzIGFuIGVycm9yIGhhbmRsZXIgdGhhdCBjaGVja3MgZm9yIGVycm9ycyBhbmQgdGhyb3dzIGFuCmV4Y2VwdGlvbiBpbnN0ZWFkLgoKCiMjIGBHdXp6bGVIdHRwXFBzcjdcVXRpbHM6OnVyaUZvcmAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVyaUZvcihzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIGEgVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuCgpUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgb3IgVXJpSW50ZXJmYWNlIGFuZCByZXR1cm5zIGEKVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEKVXJpSW50ZXJmYWNlLCBpdCBpcyByZXR1cm5lZCBhcy1pcy4KCgojIyBgR3V6emxlSHR0cFxQc3I3XE1pbWVUeXBlOjpmcm9tRmlsZW5hbWVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tRmlsZW5hbWUoc3RyaW5nICRmaWxlbmFtZSk6IHN0cmluZ3xudWxsYAoKRGV0ZXJtaW5lcyB0aGUgbWltZXR5cGUgb2YgYSBmaWxlIGJ5IGxvb2tpbmcgYXQgaXRzIGV4dGVuc2lvbi4KCgojIyBgR3V6emxlSHR0cFxQc3I3XE1pbWVUeXBlOjpmcm9tRXh0ZW5zaW9uYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUV4dGVuc2lvbihzdHJpbmcgJGV4dGVuc2lvbik6IHN0cmluZ3xudWxsYAoKTWFwcyBhIGZpbGUgZXh0ZW5zaW9ucyB0byBhIG1pbWV0eXBlLgoKCiMgQWRkaXRpb25hbCBVUkkgTWV0aG9kcwoKQXNpZGUgZnJvbSB0aGUgc3RhbmRhcmQgYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbiBpbiBmb3JtIG9mIHRoZSBgR3V6emxlSHR0cFxQc3I3XFVyaWAgY2xhc3MsCnRoaXMgbGlicmFyeSBhbHNvIHByb3ZpZGVzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSB3aGVuIHdvcmtpbmcgd2l0aCBVUklzIGFzIHN0YXRpYyBtZXRob2RzLgoKIyMgVVJJIFR5cGVzCgpBbiBpbnN0YW5jZSBvZiBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIGNhbiBlaXRoZXIgYmUgYW4gYWJzb2x1dGUgVVJJIG9yIGEgcmVsYXRpdmUgcmVmZXJlbmNlLgpBbiBhYnNvbHV0ZSBVUkkgaGFzIGEgc2NoZW1lLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSBpcyB1c2VkIHRvIGV4cHJlc3MgYSBVUkkgcmVsYXRpdmUgdG8gYW5vdGhlciBVUkksCnRoZSBiYXNlIFVSSS4gUmVsYXRpdmUgcmVmZXJlbmNlcyBjYW4gYmUgZGl2aWRlZCBpbnRvIHNldmVyYWwgZm9ybXMgYWNjb3JkaW5nIHRvCltSRkMgMzk4NiBTZWN0aW9uIDQuMl0oaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4yKToKCi0gbmV0d29yay1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gYC8vZXhhbXBsZS5jb20vcGF0aGAKLSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gYC9wYXRoYAotIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlcywgZS5nLiBgc3VicGF0aGAKClRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiB0aGUgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc0Fic29sdXRlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYWJzb2x1dGUsIGkuZS4gaXQgaGFzIGEgc2NoZW1lLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc05ldHdvcmtQYXRoUmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNOZXR3b3JrUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzIGlzCnRlcm1lZCBhbiBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBpcyBhIGFic29sdXRlLXBhdGggcmVmZXJlbmNlLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciBpcwp0ZXJtZWQgYW4gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aCBhIHNsYXNoIGNoYXJhY3RlciBpcwp0ZXJtZWQgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNTYW1lRG9jdW1lbnRSZWZlcmVuY2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1NhbWVEb2N1bWVudFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSwgP1VyaUludGVyZmFjZSAkYmFzZSA9IG51bGwpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuIEEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UgcmVmZXJzIHRvIGEgVVJJIHRoYXQgaXMsIGFzaWRlIGZyb20gaXRzCmZyYWdtZW50IGNvbXBvbmVudCwgaWRlbnRpY2FsIHRvIHRoZSBiYXNlIFVSSS4gV2hlbiBubyBiYXNlIFVSSSBpcyBnaXZlbiwgb25seSBhbiBlbXB0eSBVUkkgcmVmZXJlbmNlCihhcGFydCBmcm9tIGl0cyBmcmFnbWVudCkgaXMgY29uc2lkZXJlZCBhIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlLgoKIyMgVVJJIENvbXBvbmVudHMKCkFkZGl0aW9uYWwgbWV0aG9kcyB0byB3b3JrIHdpdGggVVJJIGNvbXBvbmVudHMuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzRGVmYXVsdFBvcnRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0RlZmF1bHRQb3J0KFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBoYXMgdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgY3VycmVudCBzY2hlbWUuIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTo6Z2V0UG9ydGAgbWF5IHJldHVybiBudWxsCm9yIHRoZSBzdGFuZGFyZCBwb3J0LiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6Y29tcG9zZUNvbXBvbmVudHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wb3NlQ29tcG9uZW50cygkc2NoZW1lLCAkYXV0aG9yaXR5LCAkcGF0aCwgJHF1ZXJ5LCAkZnJhZ21lbnQpOiBzdHJpbmdgCgpDb21wb3NlcyBhIFVSSSByZWZlcmVuY2Ugc3RyaW5nIGZyb20gaXRzIHZhcmlvdXMgY29tcG9uZW50cyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNS4zXShodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjMpLiBVc3VhbGx5IHRoaXMgbWV0aG9kIGRvZXMgbm90IG5lZWQKdG8gYmUgY2FsbGVkIG1hbnVhbGx5IGJ1dCBpbnN0ZWFkIGlzIHVzZWQgaW5kaXJlY3RseSB2aWEgYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpfX3RvU3RyaW5nYC4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6ZnJvbVBhcnRzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVBhcnRzKGFycmF5ICRwYXJ0cyk6IFVyaUludGVyZmFjZWAKCkNyZWF0ZXMgYSBVUkkgZnJvbSBhIGhhc2ggb2YgW2BwYXJzZV91cmxgXShodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wYXJzZS11cmwucGhwKSBjb21wb25lbnRzLgoKCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aFF1ZXJ5VmFsdWVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRoUXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgJGtleSwgJHZhbHVlKTogVXJpSW50ZXJmYWNlYAoKQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBhIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZS4gQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZQpwcm92aWRlZCBrZXkgYXJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyLiBBIHZhbHVlIG9mIG51bGwgd2lsbCBzZXQgdGhlIHF1ZXJ5IHN0cmluZwprZXkgd2l0aG91dCBhIHZhbHVlLCBlLmcuICJrZXkiIGluc3RlYWQgb2YgImtleT12YWx1ZSIuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OndpdGhRdWVyeVZhbHVlc2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhRdWVyeVZhbHVlcyhVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJGtleVZhbHVlQXJyYXkpOiBVcmlJbnRlcmZhY2VgCgpDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIG11bHRpcGxlIHF1ZXJ5IHN0cmluZyB2YWx1ZXMuIEl0IGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBgd2l0aFF1ZXJ5VmFsdWUoKWAgYnV0IGZvciBhbgphc3NvY2lhdGl2ZSBhcnJheSBvZiBrZXkgPT4gdmFsdWUuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OndpdGhvdXRRdWVyeVZhbHVlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aG91dFF1ZXJ5VmFsdWUoVXJpSW50ZXJmYWNlICR1cmksICRrZXkpOiBVcmlJbnRlcmZhY2VgCgpDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlIHJlbW92ZWQuIEFueSBleGlzdGluZyBxdWVyeSBzdHJpbmcgdmFsdWVzIHRoYXQgZXhhY3RseSBtYXRjaCB0aGUKcHJvdmlkZWQga2V5IGFyZSByZW1vdmVkLgoKIyMgQ3Jvc3MtT3JpZ2luIERldGVjdGlvbgoKYEd1enpsZUh0dHBcUHNyN1xVcmlDb21wYXJhdG9yYCBwcm92aWRlcyBtZXRob2RzIHRvIGRldGVybWluZSBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4uCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlDb21wYXJhdG9yOjppc0Nyb3NzT3JpZ2luYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDcm9zc09yaWdpbihVcmlJbnRlcmZhY2UgJG9yaWdpbmFsLCBVcmlJbnRlcmZhY2UgJG1vZGlmaWVkKTogYm9vbGAKCkRldGVybWluZXMgaWYgYSBtb2RpZmllZCBVUkwgc2hvdWxkIGJlIGNvbnNpZGVyZWQgY3Jvc3Mtb3JpZ2luIHdpdGggcmVzcGVjdCB0byBhbiBvcmlnaW5hbCBVUkwuCgpUd28gVVJMcyBhcmUgY3Jvc3Mtb3JpZ2luIHdoZW4gdGhlaXIgc2NoZW1lLCBob3N0LCBvciBlZmZlY3RpdmUgcG9ydCBkaWZmZXIuIEhvc3QgY29tcGFyaXNvbiBpcyBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgbWlzc2luZyBwb3J0cyB1c2UgdGhlIGRlZmF1bHQgcG9ydCBmb3IgYGh0dHBgIG9yIGBodHRwc2AuIE90aGVyIHNjaGVtZXMgZG8gbm90IHJlY2VpdmUgaW1wbGljaXQgZGVmYXVsdCBwb3J0cy4KClRoaXMgaGVscGVyIG9ubHkgY29tcGFyZXMgVVJJIG9yaWdpbnMuIEl0IGRvZXMgbm90IGltcGxlbWVudCByZWRpcmVjdCBoYW5kbGluZyBvciBjcmVkZW50aWFsIHBvbGljeS4KCiMjIFJlZmVyZW5jZSBSZXNvbHV0aW9uCgpgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyYCBwcm92aWRlcyBtZXRob2RzIHRvIHJlc29sdmUgYSBVUkkgcmVmZXJlbmNlIGluIHRoZSBjb250ZXh0IG9mIGEgYmFzZSBVUkkgYWNjb3JkaW5nCnRvIFtSRkMgMzk4NiBTZWN0aW9uIDVdKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUpLiBUaGlzIGlzIGZvciBleGFtcGxlIGFsc28gd2hhdCB3ZWIKYnJvd3NlcnMgZG8gd2hlbiByZXNvbHZpbmcgYSBsaW5rIGluIGEgd2Vic2l0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCByZXF1ZXN0IFVSSS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyOjpyZXNvbHZlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZShVcmlJbnRlcmZhY2UgJGJhc2UsIFVyaUludGVyZmFjZSAkcmVsKTogVXJpSW50ZXJmYWNlYAoKQ29udmVydHMgdGhlIHJlbGF0aXZlIFVSSSBpbnRvIGEgbmV3IFVSSSB0aGF0IGlzIHJlc29sdmVkIGFnYWluc3QgdGhlIGJhc2UgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoc3RyaW5nICRwYXRoKTogc3RyaW5nYAoKUmVtb3ZlcyBkb3Qgc2VnbWVudHMgZnJvbSBhIHBhdGggYW5kIHJldHVybnMgdGhlIG5ldyBwYXRoIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA1LjIuNF0oaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4yLjQpLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWxhdGl2aXplKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIHRoZSB0YXJnZXQgVVJJIGFzIGEgcmVsYXRpdmUgcmVmZXJlbmNlIGZyb20gdGhlIGJhc2UgVVJJLiBUaGlzIG1ldGhvZCBpcyB0aGUgY291bnRlcnBhcnQgdG8gcmVzb2x2ZSgpOgoKYGBgcGhwCihzdHJpbmcpICR0YXJnZXQgPT09IChzdHJpbmcpIFVyaVJlc29sdmVyOjpyZXNvbHZlKCRiYXNlLCBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgJHRhcmdldCkpCmBgYAoKT25lIHVzZS1jYXNlIGlzIHRvIHVzZSB0aGUgY3VycmVudCByZXF1ZXN0IFVSSSBhcyBiYXNlIFVSSSBhbmQgdGhlbiBnZW5lcmF0ZSByZWxhdGl2ZSBsaW5rcyBpbiB5b3VyIGRvY3VtZW50cwp0byByZWR1Y2UgdGhlIGRvY3VtZW50IHNpemUgb3Igb2ZmZXIgc2VsZi1jb250YWluZWQgZG93bmxvYWRhYmxlIGRvY3VtZW50IGFyY2hpdmVzLgoKYGBgcGhwCiRiYXNlID0gbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi8nKTsKZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi9jJykpOyAgLy8gcHJpbnRzICdjJy4KZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EveC95JykpOyAgLy8gcHJpbnRzICcuLi94L3knLgplY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLz9xJykpOyAvLyBwcmludHMgJz9xJy4KZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUub3JnL2EvYi8nKSk7ICAgLy8gcHJpbnRzICcvL2V4YW1wbGUub3JnL2EvYi8nLgpgYGAKCiMjIE5vcm1hbGl6YXRpb24gYW5kIENvbXBhcmlzb24KCmBHdXp6bGVIdHRwXFBzcjdcVXJpTm9ybWFsaXplcmAgcHJvdmlkZXMgbWV0aG9kcyB0byBub3JtYWxpemUgYW5kIGNvbXBhcmUgVVJJcyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNl0oaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNikuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoVXJpSW50ZXJmYWNlICR1cmksICRmbGFncyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuIFRoZSBzY2hlbWUgYW5kIGhvc3QgY29tcG9uZW50IGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlIHBlciBQU1ItNyBVcmlJbnRlcmZhY2UuClRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBgJGZsYWdzYCBwYXJhbWV0ZXIgd2hpY2ggaXMgYSBiaXRtYXNrCm9mIG5vcm1hbGl6YXRpb25zIHRvIGFwcGx5LiBUaGUgZm9sbG93aW5nIG5vcm1hbGl6YXRpb25zIGFyZSBhdmFpbGFibGU6CgotIGBVcmlOb3JtYWxpemVyOjpQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TYAoKICAgIERlZmF1bHQgbm9ybWFsaXphdGlvbnMgd2hpY2ggb25seSBpbmNsdWRlIHRoZSBvbmVzIHRoYXQgcHJlc2VydmUgc2VtYW50aWNzLgoKLSBgVXJpTm9ybWFsaXplcjo6Q0FQSVRBTElaRV9QRVJDRU5UX0VOQ09ESU5HYAoKICAgIEFsbCBsZXR0ZXJzIHdpdGhpbiBhIHBlcmNlbnQtZW5jb2RpbmcgdHJpcGxldCAoZS5nLiwgIiUzQSIpIGFyZSBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgc2hvdWxkIGJlIGNhcGl0YWxpemVkLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvYSVjMiViMWJgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2ElQzIlQjFiYAoKLSBgVXJpTm9ybWFsaXplcjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSU2AKCiAgICBEZWNvZGVzIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgb2YgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzLiBGb3IgY29uc2lzdGVuY3ksIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgaW4gdGhlIHJhbmdlcyBvZgogICAgQUxQSEEgKCU0MeKAkyU1QSBhbmQgJTYx4oCTJTdBKSwgRElHSVQgKCUzMOKAkyUzOSksIGh5cGhlbiAoJTJEKSwgcGVyaW9kICglMkUpLCB1bmRlcnNjb3JlICglNUYpLCBvciB0aWxkZSAoJTdFKSBzaG91bGQKICAgIG5vdCBiZSBjcmVhdGVkIGJ5IFVSSSBwcm9kdWNlcnMgYW5kLCB3aGVuIGZvdW5kIGluIGEgVVJJLCBzaG91bGQgYmUgZGVjb2RlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVucmVzZXJ2ZWQKICAgIGNoYXJhY3RlcnMgYnkgVVJJIG5vcm1hbGl6ZXJzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvJTdFdXNlcm4lNjFtZS9gIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL351c2VybmFtZS9gCgotIGBVcmlOb3JtYWxpemVyOjpDT05WRVJUX0VNUFRZX1BBVEhgCgogICAgQ29udmVydHMgdGhlIGVtcHR5IHBhdGggdG8gIi8iIGZvciBodHRwIGFuZCBodHRwcyBVUklzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmdgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2AKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9ERUZBVUxUX0hPU1RgCgogICAgUmVtb3ZlcyB0aGUgZGVmYXVsdCBob3N0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4gT25seSB0aGUgImZpbGUiIHNjaGVtZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGhvc3QKICAgICJsb2NhbGhvc3QiLiBBbGwgb2YgYGZpbGU6L215ZmlsZWAsIGBmaWxlOi8vL215ZmlsZWAsIGFuZCBgZmlsZTovL2xvY2FsaG9zdC9teWZpbGVgIGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0bwogICAgUkZDIDM5ODYuCgogICAgRXhhbXBsZTogYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYCDihpIgYGZpbGU6Ly8vbXlmaWxlYAoKLSBgVXJpTm9ybWFsaXplcjo6UkVNT1ZFX0RFRkFVTFRfUE9SVGAKCiAgICBSZW1vdmVzIHRoZSBkZWZhdWx0IHBvcnQgb2YgdGhlIGdpdmVuIFVSSSBzY2hlbWUgZnJvbSB0aGUgVVJJLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmc6ODAvYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9gCgotIGBVcmlOb3JtYWxpemVyOjpSRU1PVkVfRE9UX1NFR01FTlRTYAoKICAgIFJlbW92ZXMgdW5uZWNlc3NhcnkgZG90LXNlZ21lbnRzLiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCgogICAgRXhhbXBsZTogYGh0dHA6Ly9leGFtcGxlLm9yZy8uLi9hL2IvLi4vYy8uL2QuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbGAKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9EVVBMSUNBVEVfU0xBU0hFU2AKCiAgICBQYXRocyB3aGljaCBpbmNsdWRlIHR3byBvciBtb3JlIGFkamFjZW50IHNsYXNoZXMgYXJlIGNvbnZlcnRlZCB0byBvbmUuIFdlYnNlcnZlcnMgdXN1YWxseSBpZ25vcmUgZHVwbGljYXRlIHNsYXNoZXMKICAgIGFuZCB0cmVhdCB0aG9zZSBVUklzIGVxdWl2YWxlbnQuIEJ1dCBpbiB0aGVvcnkgdGhvc2UgVVJJcyBkbyBub3QgbmVlZCB0byBiZSBlcXVpdmFsZW50LiBTbyB0aGlzIG5vcm1hbGl6YXRpb24KICAgIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcy4gRW5jb2RlZCBzbGFzaGVzICglMkYpIGFyZSBub3QgcmVtb3ZlZC4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnLy9mb28vLy9iYXIuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2Jhci5odG1sYAoKLSBgVXJpTm9ybWFsaXplcjo6U09SVF9RVUVSWV9QQVJBTUVURVJTYAoKICAgIFNvcnQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIHRoZWlyIHZhbHVlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIEhvd2V2ZXIsIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIGEgVVJJIG1heSBiZQogICAgc2lnbmlmaWNhbnQgKHRoaXMgaXMgbm90IGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkKS4gU28gdGhpcyBub3JtYWxpemF0aW9uIGlzIG5vdCBzYWZlIGFuZCBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3MKICAgIG9mIHRoZSBVUkkuCgogICAgRXhhbXBsZTogYD9sYW5nPWVuJmFydGljbGU9ZnJlZGAg4oaSIGA/YXJ0aWNsZT1mcmVkJmxhbmc9ZW5gCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjppc0VxdWl2YWxlbnRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnQoVXJpSW50ZXJmYWNlICR1cmkxLCBVcmlJbnRlcmZhY2UgJHVyaTIsICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBib29sYAoKV2hldGhlciB0d28gVVJJcyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LiBCb3RoIFVSSXMgYXJlIG5vcm1hbGl6ZWQgYXV0b21hdGljYWxseSBiZWZvcmUgY29tcGFyaXNvbiB3aXRoIHRoZSBnaXZlbgpgJG5vcm1hbGl6YXRpb25zYCBiaXRtYXNrLiBUaGUgbWV0aG9kIGFsc28gYWNjZXB0cyByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyB0cnVlIHdoZW4gdGhleSBhcmUgZXF1aXZhbGVudC4KVGhpcyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgc2FtZSBiYXNlIFVSSS4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGRldGVybWluYXRpb24gb2YKZXF1aXZhbGVuY2Ugb3IgZGlmZmVyZW5jZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzIGRvZXMgbm90IG1lYW4gYW55dGhpbmcuCgoKIyMgU2VjdXJpdHkKCklmIHlvdSBkaXNjb3ZlciBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gc2VjdXJpdHlAdGlkZWxpZnQuY29tLiBBbGwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYmUgcHJvbXB0bHkgYWRkcmVzc2VkLiBQbGVhc2UgZG8gbm90IGRpc2Nsb3NlIHNlY3VyaXR5LXJlbGF0ZWQgaXNzdWVzIHB1YmxpY2x5IHVudGlsIGEgZml4IGhhcyBiZWVuIGFubm91bmNlZC4gUGxlYXNlIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Bzcjcvc2VjdXJpdHkvcG9saWN5KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgojIyBMaWNlbnNlCgpHdXp6bGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMaWNlbnNlIEZpbGVdKExJQ0VOU0UpIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCiMjIEZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uCgpUaGUgbWFpbnRhaW5lcnMgb2YgR3V6emxlIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcgd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZSBkZXBlbmRlbmNpZXMgeW91IHVzZSB0byBidWlsZCB5b3VyIGFwcGxpY2F0aW9ucy4gU2F2ZSB0aW1lLCByZWR1Y2UgcmlzaywgYW5kIGltcHJvdmUgY29kZSBoZWFsdGgsIHdoaWxlIHBheWluZyB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB5b3UgdXNlLiBbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LWd1enpsZWh0dHAtcHNyNz91dG1fc291cmNlPXBhY2thZ2lzdC1ndXp6bGVodHRwLXBzcjcmdXRtX21lZGl1bT1yZWZlcnJhbCZ1dG1fY2FtcGFpZ249ZW50ZXJwcmlzZSZ1dG1fdGVybT1yZXBvKQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/AppendStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZWFkcyBmcm9tIG11bHRpcGxlIHN0cmVhbXMsIG9uZSBhZnRlciB0aGUgb3RoZXIuCiAqCiAqIFRoaXMgaXMgYSByZWFkLW9ubHkgc3RyZWFtIGRlY29yYXRvci4KICovCmZpbmFsIGNsYXNzIEFwcGVuZFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2VbXSBTdHJlYW1zIGJlaW5nIGRlY29yYXRlZCAqLwogICAgcHJpdmF0ZSAkc3RyZWFtcyA9IFtdOwoKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJHNlZWthYmxlID0gdHJ1ZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJGN1cnJlbnQgPSAwOwoKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkcG9zID0gMDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2VbXSAkc3RyZWFtcyBTdHJlYW1zIHRvIGRlY29yYXRlLiBFYWNoIHN0cmVhbSBtdXN0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc3RyZWFtcyA9IFtdKQogICAgewogICAgICAgIGZvcmVhY2ggKCRzdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPmFkZFN0cmVhbSgkc3RyZWFtKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPnJld2luZCgpOwoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA+PSA3MDQwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcihzcHJpbnRmKCclczo6X190b1N0cmluZyBleGNlcHRpb246ICVzJywgc2VsZjo6Y2xhc3MsIChzdHJpbmcpICRlKSwgRV9VU0VSX0VSUk9SKTsKCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBzdHJlYW0gdG8gdGhlIEFwcGVuZFN0cmVhbQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gYXBwZW5kLiBNdXN0IGJlIHJlYWRhYmxlLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGlzIG5vdCByZWFkYWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKTogdm9pZAogICAgewogICAgICAgIGlmICghJHN0cmVhbS0+aXNSZWFkYWJsZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHN0cmVhbSBtdXN0IGJlIHJlYWRhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG9ubHkgc2Vla2FibGUgaWYgYWxsIHN0cmVhbXMgYXJlIHNlZWthYmxlCiAgICAgICAgaWYgKCEkc3RyZWFtLT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c3RyZWFtc1tdID0gJHN0cmVhbTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpjb3B5VG9TdHJpbmcoJHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xvc2VzIGVhY2ggYXR0YWNoZWQgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gdHJ1ZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAkc3RyZWFtLT5jbG9zZSgpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnN0cmVhbXMgPSBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFjaGVzIGVhY2ggYXR0YWNoZWQgc3RyZWFtLgogICAgICoKICAgICAqIFJldHVybnMgbnVsbCBhcyBpdCdzIG5vdCBjbGVhciB3aGljaCB1bmRlcmx5aW5nIHN0cmVhbSByZXNvdXJjZSB0byByZXR1cm4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gdHJ1ZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAkc3RyZWFtLT5kZXRhY2goKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW1zID0gW107CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cG9zOwogICAgfQoKICAgIC8qKgogICAgICogVHJpZXMgdG8gY2FsY3VsYXRlIHRoZSBzaXplIGJ5IGFkZGluZyB0aGUgc2l6ZSBvZiBlYWNoIHN0cmVhbS4KICAgICAqCiAgICAgKiBJZiBhbnkgb2YgdGhlIHN0cmVhbXMgZG8gbm90IHJldHVybiBhIHZhbGlkIG51bWJlciwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUKICAgICAqIGFwcGVuZCBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgYW5kIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICAkc2l6ZSA9IDA7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHMgPSAkc3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkcyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpemUgKz0gJHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpemU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+c3RyZWFtcwogICAgICAgICAgICB8fCAoJHRoaXMtPmN1cnJlbnQgPj0gY291bnQoJHRoaXMtPnN0cmVhbXMpIC0gMQogICAgICAgICAgICAgJiYgJHRoaXMtPnN0cmVhbXNbJHRoaXMtPmN1cnJlbnRdLT5lb2YoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byBzZWVrIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4gT25seSBzdXBwb3J0cyBTRUVLX1NFVC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIGlmICghXGlzX2ludCgkb2Zmc2V0KSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRvZmZzZXQuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkb2Zmc2V0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfaW50KCR3aGVuY2UpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJHdoZW5jZS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCR3aGVuY2UpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISR0aGlzLT5zZWVrYWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoaXMgQXBwZW5kU3RyZWFtIGlzIG5vdCBzZWVrYWJsZScpOwogICAgICAgIH0gZWxzZWlmICgkd2hlbmNlICE9PSBTRUVLX1NFVCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBBcHBlbmRTdHJlYW0gY2FuIG9ubHkgc2VlayB3aXRoIFNFRUtfU0VUJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cG9zID0gJHRoaXMtPmN1cnJlbnQgPSAwOwoKICAgICAgICAvLyBSZXdpbmQgZWFjaCBzdHJlYW0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RyZWFtcyBhcyAkaSA9PiAkc3RyZWFtKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gc2VlayBzdHJlYW0gJwogICAgICAgICAgICAgICAgICAgIC4kaS4nIG9mIHRoZSBBcHBlbmRTdHJlYW0nLCAwLCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNlZWsgdG8gdGhlIGFjdHVhbCBwb3NpdGlvbiBieSByZWFkaW5nIGZyb20gZWFjaCBzdHJlYW0KICAgICAgICB3aGlsZSAoJHRoaXMtPnBvcyA8ICRvZmZzZXQgJiYgISR0aGlzLT5lb2YoKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnJlYWQobWluKDgwOTYsICRvZmZzZXQgLSAkdGhpcy0+cG9zKSk7CiAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSAnJykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkcyBmcm9tIGFsbCBvZiB0aGUgYXBwZW5kZWQgc3RyZWFtcyB1bnRpbCB0aGUgbGVuZ3RoIGlzIG1ldCBvciBFT0YuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJGxlbmd0aCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6cmVhZCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkbGVuZ3RoLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGxlbmd0aCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+c3RyZWFtcyA9PT0gW10pIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJGJ1ZmZlciA9ICcnOwogICAgICAgICR0b3RhbCA9IGNvdW50KCR0aGlzLT5zdHJlYW1zKSAtIDE7CiAgICAgICAgJHJlbWFpbmluZyA9ICRsZW5ndGg7CiAgICAgICAgJHByb2dyZXNzVG9OZXh0ID0gZmFsc2U7CgogICAgICAgIHdoaWxlICgkcmVtYWluaW5nID4gMCkgewogICAgICAgICAgICAvLyBQcm9ncmVzcyB0byB0aGUgbmV4dCBzdHJlYW0gaWYgbmVlZGVkLgogICAgICAgICAgICBpZiAoJHByb2dyZXNzVG9OZXh0IHx8ICR0aGlzLT5zdHJlYW1zWyR0aGlzLT5jdXJyZW50XS0+ZW9mKCkpIHsKICAgICAgICAgICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5jdXJyZW50ID09PSAkdG90YWwpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICsrJHRoaXMtPmN1cnJlbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c3RyZWFtc1skdGhpcy0+Y3VycmVudF0tPnJlYWQoJHJlbWFpbmluZyk7CgogICAgICAgICAgICBpZiAoJHJlc3VsdCA9PT0gJycpIHsKICAgICAgICAgICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IHRydWU7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJ1ZmZlciAuPSAkcmVzdWx0OwogICAgICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aCAtIHN0cmxlbigkYnVmZmVyKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wb3MgKz0gc3RybGVuKCRidWZmZXIpOwoKICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWVrYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHN0cmluZykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHdyaXRlIHRvIGFuIEFwcGVuZFN0cmVhbScpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRrZXkgIT09IG51bGwgJiYgIVxpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6Z2V0TWV0YWRhdGEoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZ3xudWxsIGZvciAka2V5LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGtleSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5ID8gbnVsbCA6IFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/BufferStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIGJ1ZmZlciBzdHJlYW0gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB0byBmaWxsIGEgYnVmZmVyLCBhbmQgcmVhZAogKiBmcm9tIHRvIHJlbW92ZSBieXRlcyBmcm9tIHRoZSBidWZmZXIuCiAqCiAqIFRoaXMgc3RyZWFtIHJldHVybnMgYSAiaHdtIiBtZXRhZGF0YSB2YWx1ZSB0aGF0IHRlbGxzIHVwc3RyZWFtIGNvbnN1bWVycwogKiB3aGF0IHRoZSBjb25maWd1cmVkIGhpZ2ggd2F0ZXIgbWFyayBvZiB0aGUgc3RyZWFtIGlzLCBvciB0aGUgbWF4aW11bQogKiBwcmVmZXJyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyLgogKi8KZmluYWwgY2xhc3MgQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkaHdtOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkYnVmZmVyID0gJyc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRod20gSGlnaCB3YXRlciBtYXJrLCByZXByZXNlbnRpbmcgdGhlIHByZWZlcnJlZCBtYXhpbXVtCiAgICAgKiAgICAgICAgICAgICAgICAgYnVmZmVyIHNpemUuIElmIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgZXhjZWVkcyB0aGUgaGlnaAogICAgICogICAgICAgICAgICAgICAgIHdhdGVyIG1hcmssIHRoZW4gY2FsbHMgdG8gd3JpdGUgd2lsbCBjb250aW51ZSB0byBzdWNjZWVkCiAgICAgKiAgICAgICAgICAgICAgICAgYnV0IHdpbGwgcmV0dXJuIDAgdG8gaW5mb3JtIHdyaXRlcnMgdG8gc2xvdyBkb3duCiAgICAgKiAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGJ1ZmZlciBoYXMgYmVlbiBkcmFpbmVkIGJ5IHJlYWRpbmcgZnJvbSBpdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkaHdtID0gMTYzODQpCiAgICB7CiAgICAgICAgJHRoaXMtPmh3bSA9ICRod207CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkYnVmZmVyID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CgogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+YnVmZmVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIGlmICghXGlzX2ludCgkb2Zmc2V0KSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRvZmZzZXQuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkb2Zmc2V0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfaW50KCR3aGVuY2UpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJHdoZW5jZS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCR3aGVuY2UpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBzZWVrIGEgQnVmZmVyU3RyZWFtJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+YnVmZmVyKSA9PT0gMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOiBpbnQKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBkZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGEgQnVmZmVyU3RyZWFtJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkcyBkYXRhIGZyb20gdGhlIGJ1ZmZlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICghXGlzX2ludCgkbGVuZ3RoKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpyZWFkKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRsZW5ndGguJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkbGVuZ3RoKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJGN1cnJlbnRMZW5ndGggPSBzdHJsZW4oJHRoaXMtPmJ1ZmZlcik7CgogICAgICAgIGlmICgkbGVuZ3RoID49ICRjdXJyZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2xpY2UgdGhlIGJ1ZmZlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEuCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+YnVmZmVyOwogICAgICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2xpY2UgdXAgdGhlIHJlc3VsdCB0byBwcm92aWRlIGEgc3Vic2V0IG9mIHRoZSBidWZmZXIuCiAgICAgICAgICAgICRyZXN1bHQgPSBzdWJzdHIoJHRoaXMtPmJ1ZmZlciwgMCwgJGxlbmd0aCk7CiAgICAgICAgICAgICR0aGlzLT5idWZmZXIgPSBzdWJzdHIoJHRoaXMtPmJ1ZmZlciwgJGxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlcyBkYXRhIHRvIHRoZSBidWZmZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTogaW50CiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRzdHJpbmcpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OndyaXRlKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmcgZm9yICRzdHJpbmcuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkc3RyaW5nKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJ1ZmZlciAuPSAkc3RyaW5nOwoKICAgICAgICBpZiAoc3RybGVuKCR0aGlzLT5idWZmZXIpID49ICR0aGlzLT5od20pIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RybGVuKCRzdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRrZXkgIT09IG51bGwgJiYgIVxpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6Z2V0TWV0YWRhdGEoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZ3xudWxsIGZvciAka2V5LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGtleSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgka2V5ID09PSAnaHdtJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmh3bTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5ID8gbnVsbCA6IFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/CachingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgY2FuIGNhY2hlIHByZXZpb3VzbHkgcmVhZCBieXRlcyBmcm9tIGEgc2VxdWVudGlhbGx5CiAqIHJlYWQgc3RyZWFtLgogKi8KZmluYWwgY2xhc3MgQ2FjaGluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSBiZWluZyB3cmFwcGVkICovCiAgICBwcml2YXRlICRyZW1vdGVTdHJlYW07CgogICAgLyoqIEB2YXIgaW50IE51bWJlciBvZiBieXRlcyB0byBza2lwIHJlYWRpbmcgZHVlIHRvIGEgd3JpdGUgb24gdGhlIGJ1ZmZlciAqLwogICAgcHJpdmF0ZSAkc2tpcFJlYWRCeXRlcyA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkZGV0YWNoZWQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFdlIHdpbGwgdHJlYXQgdGhlIGJ1ZmZlciBvYmplY3QgYXMgdGhlIGJvZHkgb2YgdGhlIHN0cmVhbQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gY2FjaGUuIFRoZSBjdXJzb3IgaXMgYXNzdW1lZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICR0YXJnZXQgT3B0aW9uYWxseSBzcGVjaWZ5IHdoZXJlIGRhdGEgaXMgY2FjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICAgICA/U3RyZWFtSW50ZXJmYWNlICR0YXJnZXQgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+cmVtb3RlU3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHRhcmdldCA/OiBuZXcgU3RyZWFtKFV0aWxzOjp0cnlGb3BlbigncGhwOi8vdGVtcCcsICdyKycpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5kZXRhY2hlZCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRyZW1vdGVTaXplID0gJHRoaXMtPnJlbW90ZVN0cmVhbS0+Z2V0U2l6ZSgpOwoKICAgICAgICBpZiAobnVsbCA9PT0gJHJlbW90ZVNpemUpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWF4KCR0aGlzLT5zdHJlYW0tPmdldFNpemUoKSwgJHJlbW90ZVNpemUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJG9mZnNldCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkb2Zmc2V0LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJG9mZnNldCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2ludCgkd2hlbmNlKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICR3aGVuY2UuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkd2hlbmNlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR3aGVuY2UgPT09IFNFRUtfU0VUKSB7CiAgICAgICAgICAgICRieXRlID0gJG9mZnNldDsKICAgICAgICB9IGVsc2VpZiAoJHdoZW5jZSA9PT0gU0VFS19DVVIpIHsKICAgICAgICAgICAgJGJ5dGUgPSAkb2Zmc2V0ICsgJHRoaXMtPnRlbGwoKTsKICAgICAgICB9IGVsc2VpZiAoJHdoZW5jZSA9PT0gU0VFS19FTkQpIHsKICAgICAgICAgICAgJHNpemUgPSAkdGhpcy0+cmVtb3RlU3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkc2l6ZSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJHNpemUgPSAkdGhpcy0+Y2FjaGVFbnRpcmVTdHJlYW0oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnl0ZSA9ICRzaXplICsgJG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB3aGVuY2UnKTsKICAgICAgICB9CgogICAgICAgICRkaWZmID0gJGJ5dGUgLSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkZGlmZiA+IDApIHsKICAgICAgICAgICAgLy8gUmVhZCB0aGUgcmVtb3RlU3RyZWFtIHVudGlsIHdlIGhhdmUgcmVhZCBpbiBhdCBsZWFzdCB0aGUgYW1vdW50CiAgICAgICAgICAgIC8vIG9mIGJ5dGVzIHJlcXVlc3RlZCwgb3Igd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZmlsZS4KICAgICAgICAgICAgd2hpbGUgKCRkaWZmID4gMCAmJiAhJHRoaXMtPnJlbW90ZVN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAgICAgICAgICRwcmV2aW91c1NpemUgPSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgICAgICAkcHJldmlvdXNTa2lwUmVhZEJ5dGVzID0gJHRoaXMtPnNraXBSZWFkQnl0ZXM7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICR0aGlzLT5yZWFkKCRkaWZmKTsKICAgICAgICAgICAgICAgICRjdXJyZW50U2l6ZSA9ICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKCiAgICAgICAgICAgICAgICBpZiAoJGRhdGEgPT09ICcnICYmICRjdXJyZW50U2l6ZSA9PT0gJHByZXZpb3VzU2l6ZSAmJiAkdGhpcy0+c2tpcFJlYWRCeXRlcyA9PT0gJHByZXZpb3VzU2tpcFJlYWRCeXRlcykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRkaWZmID0gJGJ5dGUgLSAkY3VycmVudFNpemU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBkbyBhIG5vcm1hbCBzZWVrIHNpbmNlIHdlJ3ZlIGFscmVhZHkgc2VlbiB0aGlzIGJ5dGUuCiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJGJ5dGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCRsZW5ndGgpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnJlYWQoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJGxlbmd0aC4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRsZW5ndGgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBQZXJmb3JtIGEgcmVndWxhciByZWFkIG9uIGFueSBwcmV2aW91c2x5IHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIKICAgICAgICAkZGF0YSA9ICR0aGlzLT5zdHJlYW0tPnJlYWQoJGxlbmd0aCk7CiAgICAgICAgJHJlbWFpbmluZyA9ICRsZW5ndGggLSBzdHJsZW4oJGRhdGEpOwoKICAgICAgICAvLyBNb3JlIGRhdGEgd2FzIHJlcXVlc3RlZCBzbyByZWFkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0KICAgICAgICBpZiAoJHJlbWFpbmluZykgewogICAgICAgICAgICAvLyBJZiBkYXRhIHdhcyB3cml0dGVuIHRvIHRoZSBidWZmZXIgaW4gYSBwb3NpdGlvbiB0aGF0IHdvdWxkIGhhdmUKICAgICAgICAgICAgLy8gYmVlbiBmaWxsZWQgZnJvbSB0aGUgcmVtb3RlIHN0cmVhbSwgdGhlbiB3ZSBtdXN0IHNraXAgYnl0ZXMgb24KICAgICAgICAgICAgLy8gdGhlIHJlbW90ZSBzdHJlYW0gdG8gZW11bGF0ZSBvdmVyd3JpdGluZyBieXRlcyBmcm9tIHRoYXQKICAgICAgICAgICAgLy8gcG9zaXRpb24uIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiBvdGhlciBQSFAgc3RyZWFtIHdyYXBwZXJzLgogICAgICAgICAgICAkcmVtb3RlRGF0YSA9ICR0aGlzLT5yZW1vdGVTdHJlYW0tPnJlYWQoCiAgICAgICAgICAgICAgICAkcmVtYWluaW5nICsgJHRoaXMtPnNraXBSZWFkQnl0ZXMKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+c2tpcFJlYWRCeXRlcykgewogICAgICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkcmVtb3RlRGF0YSk7CiAgICAgICAgICAgICAgICAkcmVtb3RlRGF0YSA9IHN1YnN0cigkcmVtb3RlRGF0YSwgJHRoaXMtPnNraXBSZWFkQnl0ZXMpOwogICAgICAgICAgICAgICAgJHRoaXMtPnNraXBSZWFkQnl0ZXMgPSBtYXgoMCwgJHRoaXMtPnNraXBSZWFkQnl0ZXMgLSAkbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRhdGEgLj0gJHJlbW90ZURhdGE7CgogICAgICAgICAgICAvLyBBIHNob3J0IGNhY2hlIHdyaXRlIHdvdWxkIHNpbGVudGx5IGNvcnJ1cHQgbGF0ZXIgcmVwbGF5cywgc28gZmFpbCBsb3VkbHkuCiAgICAgICAgICAgIGlmICgkdGhpcy0+c3RyZWFtLT53cml0ZSgkcmVtb3RlRGF0YSkgIT09IHN0cmxlbigkcmVtb3RlRGF0YSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGNhY2hlIHRoZSBlbnRpcmUgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHN0cmluZykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8vIFdoZW4gYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnRseSByZWFkIHN0cmVhbSwgeW91J2xsIHdhbnQKICAgICAgICAvLyB0byBza2lwIGJ5dGVzIGZyb20gYmVpbmcgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtIHRvIGVtdWxhdGUKICAgICAgICAvLyBvdGhlciBzdHJlYW0gd3JhcHBlcnMuIEJhc2ljYWxseSByZXBsYWNpbmcgYnl0ZXMgb2YgZGF0YSBvZiBhIGZpeGVkCiAgICAgICAgLy8gbGVuZ3RoLgogICAgICAgICRvdmVyZmxvdyA9IChzdHJsZW4oJHN0cmluZykgKyAkdGhpcy0+dGVsbCgpKSAtICR0aGlzLT5yZW1vdGVTdHJlYW0tPnRlbGwoKTsKICAgICAgICBpZiAoJG92ZXJmbG93ID4gMCkgewogICAgICAgICAgICAkdGhpcy0+c2tpcFJlYWRCeXRlcyArPSAkb3ZlcmZsb3c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoJHN0cmluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpICYmICR0aGlzLT5yZW1vdGVTdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGV0YWNoZWQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcG9zaXRpb24gPSAkdGhpcy0+dGVsbCgpOwoKICAgICAgICAkdGhpcy0+Y2FjaGVFbnRpcmVTdHJlYW0oKTsKICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRwb3NpdGlvbik7CgogICAgICAgICRyZXNvdXJjZSA9ICR0aGlzLT5zdHJlYW0tPmRldGFjaCgpOwogICAgICAgICR0aGlzLT5kZXRhY2hlZCA9IHRydWU7CgogICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZSBib3RoIHRoZSByZW1vdGUgc3RyZWFtIGFuZCBidWZmZXIgc3RyZWFtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnJlbW90ZVN0cmVhbS0+Y2xvc2UoKTsKICAgICAgICAkdGhpcy0+c3RyZWFtLT5jbG9zZSgpOwogICAgICAgICR0aGlzLT5kZXRhY2hlZCA9IHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjYWNoZUVudGlyZVN0cmVhbSgpOiBpbnQKICAgIHsKICAgICAgICAkdGFyZ2V0ID0gbmV3IEZuU3RyZWFtKFsnd3JpdGUnID0+ICdzdHJsZW4nXSk7CiAgICAgICAgVXRpbHM6OmNvcHlUb1N0cmVhbSgkdGhpcywgJHRhcmdldCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dGVsbCgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/DroppingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgYmVnaW5zIGRyb3BwaW5nIGRhdGEgb25jZSB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZwogKiBzdHJlYW0gYmVjb21lcyB0b28gZnVsbC4KICovCmZpbmFsIGNsYXNzIERyb3BwaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJG1heExlbmd0aDsKCiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgICBVbmRlcmx5aW5nIHN0cmVhbSB0byBkZWNvcmF0ZS4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgJG1heExlbmd0aCBNYXhpbXVtIHNpemUgYmVmb3JlIGRyb3BwaW5nIGRhdGEuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgaW50ICRtYXhMZW5ndGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPm1heExlbmd0aCA9ICRtYXhMZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpOiBpbnQKICAgIHsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHN0cmluZykpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6d3JpdGUoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZyBmb3IgJHN0cmluZy4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRzdHJpbmcpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkZGlmZiA9ICR0aGlzLT5tYXhMZW5ndGggLSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CgogICAgICAgIC8vIEJlZ2luIHJldHVybmluZyAwIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIHRvbyBsYXJnZS4KICAgICAgICBpZiAoJGRpZmYgPD0gMCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIC8vIFdyaXRlIHRoZSBzdHJlYW0gb3IgYSBzdWJzZXQgb2YgdGhlIHN0cmVhbSBpZiBuZWVkZWQuCiAgICAgICAgaWYgKHN0cmxlbigkc3RyaW5nKSA8ICRkaWZmKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZSgkc3RyaW5nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZShzdWJzdHIoJHN0cmluZywgMCwgJGRpZmYpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyN1xFeGNlcHRpb247Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgYSBVUkkgY2Fubm90IGJlIHBhcnNlZCBiZWNhdXNlIGl0J3MgbWFsZm9ybWVkLgogKi8KY2xhc3MgTWFsZm9ybWVkVXJpRXhjZXB0aW9uIGV4dGVuZHMgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/FnStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb21wb3NlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gYSBoYXNoIG9mIGNhbGxhYmxlcy4KICoKICogQWxsb3dzIGZvciBlYXN5IHRlc3RpbmcgYW5kIGV4dGVuc2lvbiBvZiBhIHByb3ZpZGVkIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcKICogdG8gY3JlYXRlIGEgY29uY3JldGUgY2xhc3MgZm9yIGEgc2ltcGxlIGV4dGVuc2lvbiBwb2ludC4KICovCiNbXEFsbG93RHluYW1pY1Byb3BlcnRpZXNdCmZpbmFsIGNsYXNzIEZuU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgY29uc3QgU0xPVFMgPSBbCiAgICAgICAgJ19fdG9TdHJpbmcnLCAnY2xvc2UnLCAnZGV0YWNoJywgJ3Jld2luZCcsCiAgICAgICAgJ2dldFNpemUnLCAndGVsbCcsICdlb2YnLCAnaXNTZWVrYWJsZScsICdzZWVrJywgJ2lzV3JpdGFibGUnLCAnd3JpdGUnLAogICAgICAgICdpc1JlYWRhYmxlJywgJ3JlYWQnLCAnZ2V0Q29udGVudHMnLCAnZ2V0TWV0YWRhdGEnLAogICAgXTsKCiAgICAvKiogQHZhciBhcnJheTxzdHJpbmcsIGNhbGxhYmxlPiAqLwogICAgcHJpdmF0ZSAkbWV0aG9kczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIGNhbGxhYmxlPiAkbWV0aG9kcyBIYXNoIG9mIG1ldGhvZCBuYW1lIHRvIGEgY2FsbGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkbWV0aG9kcykKICAgIHsKICAgICAgICAkdGhpcy0+bWV0aG9kcyA9ICRtZXRob2RzOwoKICAgICAgICAvLyBDcmVhdGUgdGhlIGNhbGxhYmxlcyBvbiB0aGUgY2xhc3MKICAgICAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbmFtZSA9PiAkZm4pIHsKICAgICAgICAgICAgJHRoaXMtPnsnX2ZuXycuJG5hbWV9ID0gJGZuOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExhemlseSBkZXRlcm1pbmUgd2hpY2ggbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkLgogICAgICoKICAgICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KHN0cmluZyAkbmFtZSk6IHZvaWQKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oc3RyX3JlcGxhY2UoJ19mbl8nLCAnJywgJG5hbWUpCiAgICAgICAgICAgIC4nKCkgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBGblN0cmVhbScpOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGNsb3NlIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIHVuZGVybHlpbmcgc3RyZWFtIG9ubHkgaWYgcG9zc2libGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9mbl9jbG9zZSkpIHsKICAgICAgICAgICAgKCR0aGlzLT5fZm5fY2xvc2UpKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW4gdW5zZXJpYWxpemUgd291bGQgYWxsb3cgdGhlIF9fZGVzdHJ1Y3QgdG8gcnVuIHdoZW4gdGhlIHVuc2VyaWFsaXplZCB2YWx1ZSBnb2VzIG91dCBvZiBzY29wZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxMb2dpY0V4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKTogdm9pZAogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ZuU3RyZWFtIHNob3VsZCBuZXZlciBiZSB1bnNlcmlhbGl6ZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgY3VzdG9tIGZ1bmN0aW9uYWxpdHkgdG8gYW4gdW5kZXJseWluZyBzdHJlYW0gYnkgaW50ZXJjZXB0aW5nCiAgICAgKiBzcGVjaWZpYyBtZXRob2QgY2FsbHMuCiAgICAgKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAgICAgICAgICRzdHJlYW0gIFN0cmVhbSB0byBkZWNvcmF0ZQogICAgICogQHBhcmFtIGFycmF5PHN0cmluZywgY2FsbGFibGU+ICRtZXRob2RzIEhhc2ggb2YgbWV0aG9kIG5hbWUgdG8gYSBjYWxsYWJsZQogICAgICoKICAgICAqIEByZXR1cm4gRm5TdHJlYW0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvcmF0ZShTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgYXJyYXkgJG1ldGhvZHMpCiAgICB7CiAgICAgICAgLy8gSWYgYW55IG9mIHRoZSByZXF1aXJlZCBtZXRob2RzIHdlcmUgbm90IHByb3ZpZGVkLCB0aGVuIHNpbXBseQogICAgICAgIC8vIHByb3h5IHRvIHRoZSBkZWNvcmF0ZWQgc3RyZWFtLgogICAgICAgIGZvcmVhY2ggKGFycmF5X2RpZmYoc2VsZjo6U0xPVFMsIGFycmF5X2tleXMoJG1ldGhvZHMpKSBhcyAkZGlmZikgewogICAgICAgICAgICAvKiogQHZhciBjYWxsYWJsZSAkY2FsbGFibGUgKi8KICAgICAgICAgICAgJGNhbGxhYmxlID0gWyRzdHJlYW0sICRkaWZmXTsKICAgICAgICAgICAgJG1ldGhvZHNbJGRpZmZdID0gJGNhbGxhYmxlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRtZXRob2RzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX19fdG9TdHJpbmcpKCk7CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICBpZiAoXFBIUF9WRVJTSU9OX0lEID49IDcwNDAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKHNwcmludGYoJyVzOjpfX3RvU3RyaW5nIGV4Y2VwdGlvbjogJXMnLCBzZWxmOjpjbGFzcywgKHN0cmluZykgJGUpLCBFX1VTRVJfRVJST1IpOwoKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgICgkdGhpcy0+X2ZuX2Nsb3NlKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9kZXRhY2gpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9nZXRTaXplKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl90ZWxsKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9lb2YpKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9pc1NlZWthYmxlKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZAogICAgewogICAgICAgICgkdGhpcy0+X2ZuX3Jld2luZCkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCRvZmZzZXQpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJG9mZnNldC4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRvZmZzZXQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19pbnQoJHdoZW5jZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkd2hlbmNlLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHdoZW5jZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICgkdGhpcy0+X2ZuX3NlZWspKCRvZmZzZXQsICR3aGVuY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZm5faXNXcml0YWJsZSkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHN0cmluZykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl93cml0ZSkoJHN0cmluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9pc1JlYWRhYmxlKSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJGxlbmd0aCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6cmVhZCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkbGVuZ3RoLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGxlbmd0aCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9yZWFkKSgkbGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZuX2dldENvbnRlbnRzKSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRrZXkgIT09IG51bGwgJiYgIVxpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6Z2V0TWV0YWRhdGEoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZ3xudWxsIGZvciAka2V5LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGtleSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoJHRoaXMtPl9mbl9nZXRNZXRhZGF0YSkoJGtleSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Header.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIEhlYWRlcgp7CiAgICAvKioKICAgICAqIFBhcnNlIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMgY29udGFpbmluZyAiOyIgc2VwYXJhdGVkIGRhdGEgaW50byBhbgogICAgICogYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyIGtleSB2YWx1ZSBwYWlyIGRhdGEKICAgICAqIG9mIHRoZSBoZWFkZXIuIFdoZW4gYSBwYXJhbWV0ZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbHVlLCBidXQganVzdAogICAgICogY29udGFpbnMgYSBrZXksIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmplY3QgYSBrZXkgd2l0aCBhICcnIHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRoZWFkZXIgSGVhZGVyIHRvIHBhcnNlIGludG8gY29tcG9uZW50cy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkaGVhZGVyKTogYXJyYXkKICAgIHsKICAgICAgICBzdGF0aWMgJHRyaW1tZWQgPSAiXCInICBcblx0XHIiOwogICAgICAgICRwYXJhbXMgPSAkbWF0Y2hlcyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgoYXJyYXkpICRoZWFkZXIgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKHNlbGY6OnNwbGl0TGlzdCgkdmFsdWUpIGFzICR2YWwpIHsKICAgICAgICAgICAgICAgICRwYXJ0ID0gW107CiAgICAgICAgICAgICAgICBmb3JlYWNoIChzZWxmOjpzcGxpdFBhcmFtZXRlcnMoJHZhbCkgYXMgJGt2cCkgewogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoX2FsbCgnLzxbXj5dKz58W149XSsvJywgJGt2cCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtID0gJG1hdGNoZXNbMF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbVsxXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0W3RyaW0oJG1bMF0sICR0cmltbWVkKV0gPSB0cmltKCRtWzFdLCAkdHJpbW1lZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydFtdID0gdHJpbSgkbVswXSwgJHRyaW1tZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRwYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gJHBhcnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcGFyYW1zOwogICAgfQoKICAgIC8qKgogICAgICogU3BsaXQgYSBoZWFkZXIgdmFsdWUgaW50byBzZW1pY29sb24tc2VwYXJhdGVkIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzcGxpdFBhcmFtZXRlcnMoc3RyaW5nICR2YWx1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgJHZhbHVlcyA9IFtdOwogICAgICAgICRzdGFydCA9IDA7CiAgICAgICAgJGlzUXVvdGVkID0gZmFsc2U7CiAgICAgICAgJGlzRXNjYXBlZCA9IGZhbHNlOwoKICAgICAgICBmb3IgKCRpID0gMCwgJG1heCA9IFxzdHJsZW4oJHZhbHVlKTsgJGkgPCAkbWF4OyArKyRpKSB7CiAgICAgICAgICAgICRjaGFyID0gJHZhbHVlWyRpXTsKCiAgICAgICAgICAgIGlmICgkaXNFc2NhcGVkKSB7CiAgICAgICAgICAgICAgICAkaXNFc2NhcGVkID0gZmFsc2U7CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkaXNRdW90ZWQgJiYgJGNoYXIgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICRpc0VzY2FwZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNoYXIgPT09ICciJykgewogICAgICAgICAgICAgICAgJGlzUXVvdGVkID0gISRpc1F1b3RlZDsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEkaXNRdW90ZWQgJiYgJGNoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgJHZhbHVlc1tdID0gXHN1YnN0cigkdmFsdWUsICRzdGFydCwgJGkgLSAkc3RhcnQpOwogICAgICAgICAgICAgICAgJHN0YXJ0ID0gJGkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzW10gPSBcc3Vic3RyKCR2YWx1ZSwgJHN0YXJ0KTsKCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIHRoYXQgbWF5IGNvbnRhaW4gY29tbWEgc2VwYXJhdGVkCiAgICAgKiBoZWFkZXJzIGludG8gYW4gYXJyYXkgb2YgaGVhZGVycyB3aXRoIG5vIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkaGVhZGVyIEhlYWRlciB0byBub3JtYWxpemUuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHNlbGY6OnNwbGl0TGlzdCgpIGluc3RlYWQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKCRoZWFkZXIpOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICBmb3JlYWNoICgoYXJyYXkpICRoZWFkZXIgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKHNlbGY6OnNwbGl0TGlzdCgkdmFsdWUpIGFzICRwYXJzZWQpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICRwYXJzZWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogU3BsaXRzIGEgSFRUUCBoZWFkZXIgZGVmaW5lZCB0byBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgaW50bwogICAgICogZWFjaCBpbmRpdmlkdWFsIHZhbHVlLiBFbXB0eSB2YWx1ZXMgd2lsbCBiZSByZW1vdmVkLgogICAgICoKICAgICAqIEV4YW1wbGUgaGVhZGVycyBpbmNsdWRlICdhY2NlcHQnLCAnY2FjaGUtY29udHJvbCcgYW5kICdpZi1ub25lLW1hdGNoJy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBiZSB1c2VkIHRvIHBhcnNlIGhlYWRlcnMgdGhhdCBhcmUgbm90IGRlZmluZWQgYXMKICAgICAqIGEgbGlzdCwgc3VjaCBhcyAndXNlci1hZ2VudCcgb3IgJ3NldC1jb29raWUnLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHZhbHVlcyBIZWFkZXIgdmFsdWUgYXMgcmV0dXJuZWQgYnkgTWVzc2FnZUludGVyZmFjZTo6Z2V0SGVhZGVyKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXRMaXN0KCR2YWx1ZXMpOiBhcnJheQogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCR2YWx1ZXMpKSB7CiAgICAgICAgICAgICR2YWx1ZXMgPSBbJHZhbHVlc107CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcVHlwZUVycm9yKCckaGVhZGVyIG11c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IGNvbnRhaW5pbmcgc3RyaW5ncy4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHYgPSAnJzsKICAgICAgICAgICAgJGlzUXVvdGVkID0gZmFsc2U7CiAgICAgICAgICAgICRpc0VzY2FwZWQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yICgkaSA9IDAsICRtYXggPSBcc3RybGVuKCR2YWx1ZSk7ICRpIDwgJG1heDsgKyskaSkgewogICAgICAgICAgICAgICAgaWYgKCRpc0VzY2FwZWQpIHsKICAgICAgICAgICAgICAgICAgICAkdiAuPSAkdmFsdWVbJGldOwogICAgICAgICAgICAgICAgICAgICRpc0VzY2FwZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCEkaXNRdW90ZWQgJiYgJHZhbHVlWyRpXSA9PT0gJywnKSB7CiAgICAgICAgICAgICAgICAgICAgJHYgPSBcdHJpbSgkdik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR2ICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSAkdjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICR2ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRpc1F1b3RlZCAmJiAkdmFsdWVbJGldID09PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgJGlzRXNjYXBlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgJHYgLj0gJHZhbHVlWyRpXTsKCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWyRpXSA9PT0gJyInKSB7CiAgICAgICAgICAgICAgICAgICAgJGlzUXVvdGVkID0gISRpc1F1b3RlZDsKICAgICAgICAgICAgICAgICAgICAkdiAuPSAkdmFsdWVbJGldOwoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdiAuPSAkdmFsdWVbJGldOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdiA9IFx0cmltKCR2KTsKICAgICAgICAgICAgaWYgKCR2ICE9PSAnJykgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/HttpFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU2VydmVyUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtRmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgUFNSLTE3IGludGVyZmFjZXMuCiAqCiAqIE5vdGU6IGluIGNvbnN1bWluZyBjb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcXVpcmUgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZXMKICogYW5kIGluamVjdCB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBtdWx0aXBsZSB0aW1lcy4KICovCmZpbmFsIGNsYXNzIEh0dHBGYWN0b3J5IGltcGxlbWVudHMgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UsIFJlc3BvbnNlRmFjdG9yeUludGVyZmFjZSwgU2VydmVyUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UsIFN0cmVhbUZhY3RvcnlJbnRlcmZhY2UsIFVwbG9hZGVkRmlsZUZhY3RvcnlJbnRlcmZhY2UsIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZGVkRmlsZSgKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICAgICA/aW50ICRzaXplID0gbnVsbCwKICAgICAgICBpbnQgJGVycm9yID0gXFVQTE9BRF9FUlJfT0ssCiAgICAgICAgP3N0cmluZyAkY2xpZW50RmlsZW5hbWUgPSBudWxsLAogICAgICAgID9zdHJpbmcgJGNsaWVudE1lZGlhVHlwZSA9IG51bGwKICAgICk6IFVwbG9hZGVkRmlsZUludGVyZmFjZSB7CiAgICAgICAgaWYgKCRzaXplID09PSBudWxsKSB7CiAgICAgICAgICAgICRzaXplID0gJHN0cmVhbS0+Z2V0U2l6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBVcGxvYWRlZEZpbGUoJHN0cmVhbSwgJHNpemUsICRlcnJvciwgJGNsaWVudEZpbGVuYW1lLCAkY2xpZW50TWVkaWFUeXBlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKHN0cmluZyAkY29udGVudCA9ICcnKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpzdHJlYW1Gb3IoJGNvbnRlbnQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW1Gcm9tRmlsZShzdHJpbmcgJGZpbGUsIHN0cmluZyAkbW9kZSA9ICdyJyk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXNvdXJjZSA9IFV0aWxzOjp0cnlGb3BlbigkZmlsZSwgJG1vZGUpOwogICAgICAgIH0gY2F0Y2ggKFxSdW50aW1lRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGlmICgnJyA9PT0gJG1vZGUgfHwgZmFsc2UgPT09IFxpbl9hcnJheSgkbW9kZVswXSwgWydyJywgJ3cnLCAnYScsICd4JywgJ2MnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZmlsZSBvcGVuaW5nIG1vZGUgIiVzIicsICRtb2RlKSwgMCwgJGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVdGlsczo6c3RyZWFtRm9yKCRyZXNvdXJjZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbUZyb21SZXNvdXJjZSgkcmVzb3VyY2UpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gVXRpbHM6OnN0cmVhbUZvcigkcmVzb3VyY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXJSZXF1ZXN0KHN0cmluZyAkbWV0aG9kLCAkdXJpLCBhcnJheSAkc2VydmVyUGFyYW1zID0gW10pOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRtZXRob2QpKSB7CiAgICAgICAgICAgIGlmICghZW1wdHkoJHNlcnZlclBhcmFtc1snUkVRVUVTVF9NRVRIT0QnXSkpIHsKICAgICAgICAgICAgICAgICRtZXRob2QgPSAkc2VydmVyUGFyYW1zWydSRVFVRVNUX01FVEhPRCddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0Nhbm5vdCBkZXRlcm1pbmUgSFRUUCBtZXRob2QnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJSZXF1ZXN0KCRtZXRob2QsICR1cmksIFtdLCBudWxsLCAnMS4xJywgJHNlcnZlclBhcmFtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKGludCAkY29kZSA9IDIwMCwgc3RyaW5nICRyZWFzb25QaHJhc2UgPSAnJyk6IFJlc3BvbnNlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgkY29kZSwgW10sIG51bGwsICcxLjEnLCAkcmVhc29uUGhyYXNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVxdWVzdChzdHJpbmcgJG1ldGhvZCwgJHVyaSk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3QoJG1ldGhvZCwgJHVyaSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBVcmkoJHVyaSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/InflateStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBVc2VzIFBIUCdzIHpsaWIuaW5mbGF0ZSBmaWx0ZXIgdG8gaW5mbGF0ZSB6bGliIChIVFRQIGRlZmxhdGUsIFJGQzE5NTApIG9yIGd6aXBwZWQgKFJGQzE5NTIpIGNvbnRlbnQuCiAqCiAqIFRoaXMgc3RyZWFtIGRlY29yYXRvciBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgc3RyZWFtIHRvIGEgUEhQIHN0cmVhbSByZXNvdXJjZSwKICogdGhlbiBhcHBlbmRzIHRoZSB6bGliLmluZmxhdGUgZmlsdGVyLiBUaGUgc3RyZWFtIGlzIHRoZW4gY29udmVydGVkIGJhY2sKICogdG8gYSBHdXp6bGUgc3RyZWFtIHJlc291cmNlIHRvIGJlIHVzZWQgYXMgYSBHdXp6bGUgc3RyZWFtLgogKgogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMTk1MAogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMTk1MgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2ZpbHRlcnMuY29tcHJlc3Npb24ucGhwCiAqLwpmaW5hbCBjbGFzcyBJbmZsYXRlU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0pCiAgICB7CiAgICAgICAgJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CiAgICAgICAgLy8gU3BlY2lmeSB3aW5kb3c9MTUrMzIsIHNvIHpsaWIgd2lsbCB1c2UgaGVhZGVyIGRldGVjdGlvbiB0byBib3RoIGd6aXAgKHdpdGggaGVhZGVyKSBhbmQgemxpYiBkYXRhCiAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LnpsaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkIGRlZmluaXRpb24gb2YgaW5mbGF0ZUluaXQyCiAgICAgICAgLy8gIkFkZCAzMiB0byB3aW5kb3dCaXRzIHRvIGVuYWJsZSB6bGliIGFuZCBnemlwIGRlY29kaW5nIHdpdGggYXV0b21hdGljIGhlYWRlciBkZXRlY3Rpb24iCiAgICAgICAgLy8gRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyAxNS4KICAgICAgICBzdHJlYW1fZmlsdGVyX2FwcGVuZCgkcmVzb3VyY2UsICd6bGliLmluZmxhdGUnLCBTVFJFQU1fRklMVEVSX1JFQUQsIFsnd2luZG93JyA9PiAxNSArIDMyXSk7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW0tPmlzU2Vla2FibGUoKSA/IG5ldyBTdHJlYW0oJHJlc291cmNlKSA6IG5ldyBOb1NlZWtTdHJlYW0obmV3IFN0cmVhbSgkcmVzb3VyY2UpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LazyOpenStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBMYXppbHkgcmVhZHMgb3Igd3JpdGVzIHRvIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBvbmx5IGFmdGVyIGFuIElPIG9wZXJhdGlvbgogKiB0YWtlIHBsYWNlIG9uIHRoZSBzdHJlYW0uCiAqLwpmaW5hbCBjbGFzcyBMYXp5T3BlblN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRmaWxlbmFtZTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJG1vZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlIHRvIGxhemlseSBvcGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlICAgICBmb3BlbiBtb2RlIHRvIHVzZSB3aGVuIG9wZW5pbmcgdGhlIHN0cmVhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlKQogICAgewogICAgICAgICR0aGlzLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsKICAgICAgICAkdGhpcy0+bW9kZSA9ICRtb2RlOwoKICAgICAgICAvLyB1bnNldHRpbmcgdGhlIHByb3BlcnR5IGZvcmNlcyB0aGUgZmlyc3QgYWNjZXNzIHRvIGdvIHRocm91Z2gKICAgICAgICAvLyBfX2dldCgpLgogICAgICAgIHVuc2V0KCR0aGlzLT5zdHJlYW0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgdW5kZXJseWluZyBzdHJlYW0gbGF6aWx5IHdoZW4gcmVxdWlyZWQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpzdHJlYW1Gb3IoVXRpbHM6OnRyeUZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMtPm1vZGUpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LimitStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBEZWNvcmF0b3IgdXNlZCB0byByZXR1cm4gb25seSBhIHN1YnNldCBvZiBhIHN0cmVhbS4KICovCmZpbmFsIGNsYXNzIExpbWl0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgT2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAqLwogICAgcHJpdmF0ZSAkb2Zmc2V0OwoKICAgIC8qKiBAdmFyIGludCBMaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHJlYWQgKi8KICAgIHByaXZhdGUgJGxpbWl0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFN0cmVhbSB0byB3cmFwCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRsaW1pdCAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzdHJlYW0uIFBhc3MgLTEgZm9yIG5vIGxpbWl0LgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkb2Zmc2V0IFBvc2l0aW9uIHRvIHNlZWsgdG8gYmVmb3JlIHJlYWRpbmcgKG9ubHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrcyBvbiBzZWVrYWJsZSBzdHJlYW1zKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLAogICAgICAgIGludCAkbGltaXQgPSAtMSwKICAgICAgICBpbnQgJG9mZnNldCA9IDAKICAgICkgewogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICR0aGlzLT5zZXRMaW1pdCgkbGltaXQpOwogICAgICAgICR0aGlzLT5zZXRPZmZzZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOiBib29sCiAgICB7CiAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyBFT0YKICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBObyBsaW1pdCBhbmQgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBhdCBFT0YKICAgICAgICBpZiAoJHRoaXMtPmxpbWl0ID09PSAtMSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpID49ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBsaW1pdGVkIHN1YnNldCBvZiBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gKCRsZW5ndGggPSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHNpemUgPSAkbGVuZ3RoIC0gJHRoaXMtPm9mZnNldDsKCiAgICAgICAgaWYgKCR0aGlzLT5saW1pdCAhPT0gLTEpIHsKICAgICAgICAgICAgJHNpemUgPSBtaW4oJHRoaXMtPmxpbWl0LCAkc2l6ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWF4KDAsICRzaXplKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFsbG93IGZvciBhIGJvdW5kZWQgc2VlayBvbiB0aGUgcmVhZCBsaW1pdGVkIHN0cmVhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCRvZmZzZXQpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJG9mZnNldC4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRvZmZzZXQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19pbnQoJHdoZW5jZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkd2hlbmNlLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHdoZW5jZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkd2hlbmNlICE9PSBTRUVLX1NFVCB8fCAkb2Zmc2V0IDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdDYW5ub3Qgc2VlayB0byBvZmZzZXQgJXMgd2l0aCB3aGVuY2UgJXMnLAogICAgICAgICAgICAgICAgJG9mZnNldCwKICAgICAgICAgICAgICAgICR3aGVuY2UKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0ICs9ICR0aGlzLT5vZmZzZXQ7CgogICAgICAgIGlmICgkdGhpcy0+bGltaXQgIT09IC0xKSB7CiAgICAgICAgICAgIGlmICgkb2Zmc2V0ID4gJHRoaXMtPm9mZnNldCArICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICAgICAgJG9mZnNldCA9ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlIGEgcmVsYXRpdmUgdGVsbCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT50ZWxsKCkgLSAkdGhpcy0+b2Zmc2V0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBvZmZzZXQgdG8gc3RhcnQgbGltaXRpbmcgZnJvbQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgdG8gc2VlayB0byBhbmQgYmVnaW4gYnl0ZSBsaW1pdGluZyBmcm9tCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGNhbm5vdCBiZSBzZWVrZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPZmZzZXQoaW50ICRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+c3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkY3VycmVudCAhPT0gJG9mZnNldCkgewogICAgICAgICAgICAvLyBJZiB0aGUgc3RyZWFtIGNhbm5vdCBzZWVrIHRvIHRoZSBvZmZzZXQgcG9zaXRpb24sIHRoZW4gcmVhZCB0byBpdAogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGN1cnJlbnQgPiAkb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBzZWVrIHRvIHN0cmVhbSBvZmZzZXQgJG9mZnNldCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+cmVhZCgkb2Zmc2V0IC0gJGN1cnJlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbGltaXQgb2YgYnl0ZXMgdGhhdCB0aGUgZGVjb3JhdG9yIGFsbG93cyB0byBiZSByZWFkIGZyb20gdGhlCiAgICAgKiBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGltaXQgTnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgogICAgICogICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciBubyBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpbWl0KGludCAkbGltaXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmxpbWl0ID0gJGxpbWl0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJGxlbmd0aCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6cmVhZCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkbGVuZ3RoLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGxlbmd0aCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+bGltaXQgPT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBhbGxvd2VkCiAgICAgICAgLy8gYnl0ZXMgKyBvcmlnaW5hbCBvZmZzZXQKICAgICAgICAkcmVtYWluaW5nID0gKCR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQpIC0gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgICAgIGlmICgkcmVtYWluaW5nID4gMCkgewogICAgICAgICAgICAvLyBPbmx5IHJldHVybiB0aGUgYW1vdW50IG9mIHJlcXVlc3RlZCBkYXRhLCBlbnN1cmluZyB0aGF0IHRoZSBieXRlCiAgICAgICAgICAgIC8vIGxpbWl0IGlzIG5vdCBleGNlZWRlZAogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZChtaW4oJHJlbWFpbmluZywgJGxlbmd0aCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgTWVzc2FnZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBIVFRQIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UgTWVzc2FnZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvU3RyaW5nKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJG1lc3NhZ2UgaW5zdGFuY2VvZiBSZXF1ZXN0SW50ZXJmYWNlKSB7CiAgICAgICAgICAgICRtc2cgPSB0cmltKCRtZXNzYWdlLT5nZXRNZXRob2QoKS4nICcKICAgICAgICAgICAgICAgICAgICAuJG1lc3NhZ2UtPmdldFJlcXVlc3RUYXJnZXQoKSkKICAgICAgICAgICAgICAgIC4nIEhUVFAvJy4kbWVzc2FnZS0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgIGlmICghJG1lc3NhZ2UtPmhhc0hlYWRlcignaG9zdCcpKSB7CiAgICAgICAgICAgICAgICAkbXNnIC49ICJcclxuSG9zdDogIi4kbWVzc2FnZS0+Z2V0VXJpKCktPmdldEhvc3QoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkbWVzc2FnZSBpbnN0YW5jZW9mIFJlc3BvbnNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICRtc2cgPSAnSFRUUC8nLiRtZXNzYWdlLT5nZXRQcm90b2NvbFZlcnNpb24oKS4nICcKICAgICAgICAgICAgICAgIC4kbWVzc2FnZS0+Z2V0U3RhdHVzQ29kZSgpLicgJwogICAgICAgICAgICAgICAgLiRtZXNzYWdlLT5nZXRSZWFzb25QaHJhc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5rbm93biBtZXNzYWdlIHR5cGUnKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRuYW1lKSAmJiBzdHJ0b2xvd2VyKCRuYW1lKSA9PT0gJ3NldC1jb29raWUnKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiLiR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiLmltcGxvZGUoJywgJywgJHZhbHVlcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAieyRtc2d9XHJcblxyXG4iLiRtZXNzYWdlLT5nZXRCb2R5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogV2lsbCByZXR1cm4gYG51bGxgIGlmIHRoZSByZXNwb25zZSBpcyBub3QgcHJpbnRhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlICAgIFRoZSBtZXNzYWdlIHRvIGdldCB0aGUgYm9keSBzdW1tYXJ5CiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAkdHJ1bmNhdGVBdCBUaGUgbWF4aW11bSBhbGxvd2VkIHNpemUgb2YgdGhlIHN1bW1hcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib2R5U3VtbWFyeShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlLCBpbnQgJHRydW5jYXRlQXQgPSAxMjApOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJGJvZHkgPSAkbWVzc2FnZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoISRib2R5LT5pc1NlZWthYmxlKCkgfHwgISRib2R5LT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgICAgICAkc3VtbWFyeSA9ICRib2R5LT5yZWFkKCR0cnVuY2F0ZUF0KTsKCiAgICAgICAgaWYgKCRzaXplID4gJHRydW5jYXRlQXQpIHsKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8vdScsICRzdW1tYXJ5KSAhPT0gMSkgewogICAgICAgICAgICAgICAgJHN1bW1hcnkgPSBzZWxmOjp0cmltVHJhaWxpbmdJbmNvbXBsZXRlVXRmOENoYXJhY3Rlcigkc3VtbWFyeSwgJGJvZHktPnJlYWQoMykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc3VtbWFyeSAuPSAnICh0cnVuY2F0ZWQuLi4pJzsKICAgICAgICB9CgogICAgICAgICRib2R5LT5yZXdpbmQoKTsKCiAgICAgICAgLy8gTWF0Y2hlcyBhbnkgcHJpbnRhYmxlIGNoYXJhY3RlciwgaW5jbHVkaW5nIHVuaWNvZGUgY2hhcmFjdGVyczoKICAgICAgICAvLyBsZXR0ZXJzLCBtYXJrcywgbnVtYmVycywgcHVuY3R1YXRpb24sIHNwYWNpbmcsIGFuZCBzZXBhcmF0b3JzLgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvW15ccExccE1ccE5ccFBccFNccFpcblxyXHRdL3UnLCAkc3VtbWFyeSkgIT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmltcyBhIHBhcnRpYWwgVVRGLTggY2hhcmFjdGVyIGZyb20gdGhlIGVuZCBvZiBhIHRydW5jYXRlZCBzdHJpbmcuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHRyaW1UcmFpbGluZ0luY29tcGxldGVVdGY4Q2hhcmFjdGVyKHN0cmluZyAkc3VtbWFyeSwgc3RyaW5nICRsb29rYWhlYWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRzdW1tYXJ5KTsKCiAgICAgICAgaWYgKCRsZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICRzdW1tYXJ5OwogICAgICAgIH0KCiAgICAgICAgJHN0YXJ0ID0gJGxlbmd0aCAtIDE7CgogICAgICAgIHdoaWxlICgkc3RhcnQgPj0gMCkgewogICAgICAgICAgICAkYnl0ZSA9IG9yZCgkc3VtbWFyeVskc3RhcnRdKTsKCiAgICAgICAgICAgIGlmICgkYnl0ZSA8IDB4ODAgfHwgJGJ5dGUgPiAweEJGKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLS0kc3RhcnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHN0YXJ0IDwgMCkgewogICAgICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICAgICAgfQoKICAgICAgICAkbGVhZCA9IG9yZCgkc3VtbWFyeVskc3RhcnRdKTsKCiAgICAgICAgaWYgKCRsZWFkID49IDB4QzIgJiYgJGxlYWQgPD0gMHhERikgewogICAgICAgICAgICAkZXhwZWN0ZWRMZW5ndGggPSAyOwogICAgICAgIH0gZWxzZWlmICgkbGVhZCA+PSAweEUwICYmICRsZWFkIDw9IDB4RUYpIHsKICAgICAgICAgICAgJGV4cGVjdGVkTGVuZ3RoID0gMzsKICAgICAgICB9IGVsc2VpZiAoJGxlYWQgPj0gMHhGMCAmJiAkbGVhZCA8PSAweEY0KSB7CiAgICAgICAgICAgICRleHBlY3RlZExlbmd0aCA9IDQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRzdW1tYXJ5OwogICAgICAgIH0KCiAgICAgICAgJGF2YWlsYWJsZUxlbmd0aCA9ICRsZW5ndGggLSAkc3RhcnQ7CgogICAgICAgIGlmICgkYXZhaWxhYmxlTGVuZ3RoID49ICRleHBlY3RlZExlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICAgICAgfQoKICAgICAgICAkc2VxdWVuY2UgPSBzdWJzdHIoJHN1bW1hcnksICRzdGFydCkuc3Vic3RyKCRsb29rYWhlYWQsIDAsICRleHBlY3RlZExlbmd0aCAtICRhdmFpbGFibGVMZW5ndGgpOwoKICAgICAgICBpZiAoc3RybGVuKCRzZXF1ZW5jZSkgIT09ICRleHBlY3RlZExlbmd0aCB8fCBwcmVnX21hdGNoKCcvL3UnLCAkc2VxdWVuY2UpICE9PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkc3VtbWFyeTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdWJzdHIoJHN1bW1hcnksIDAsICRzdGFydCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byByZXdpbmQgYSBtZXNzYWdlIGJvZHkgYW5kIHRocm93cyBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqCiAgICAgKiBUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSB3aWxsIG9ubHkgYmUgcmV3b3VuZCBpZiBhIGNhbGwgdG8gYHRlbGwoKWAKICAgICAqIHJldHVybnMgYSB2YWx1ZSBvdGhlciB0aGFuIGAwYC4KICAgICAqCiAgICAgKiBAcGFyYW0gTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSBNZXNzYWdlIHRvIHJld2luZAogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXdpbmRCb2R5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpOiB2b2lkCiAgICB7CiAgICAgICAgJGJvZHkgPSAkbWVzc2FnZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoJGJvZHktPnRlbGwoKSkgewogICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGFuIEhUVFAgbWVzc2FnZSBpbnRvIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICoKICAgICAqIFRoZSBhcnJheSBjb250YWlucyB0aGUgInN0YXJ0LWxpbmUiIGtleSBjb250YWluaW5nIHRoZSBzdGFydCBsaW5lIG9mCiAgICAgKiB0aGUgbWVzc2FnZSwgImhlYWRlcnMiIGtleSBjb250YWluaW5nIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlcgogICAgICogYXJyYXkgdmFsdWVzLCBhbmQgYSAiYm9keSIga2V5IGNvbnRhaW5pbmcgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBIVFRQIHJlcXVlc3Qgb3IgcmVzcG9uc2UgdG8gcGFyc2UuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VNZXNzYWdlKHN0cmluZyAkbWVzc2FnZSk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCEkbWVzc2FnZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtZXNzYWdlJyk7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9IGx0cmltKCRtZXNzYWdlLCAiXHJcbiIpOwoKICAgICAgICAkbWVzc2FnZVBhcnRzID0gcHJlZ19zcGxpdCgiL1xyP1xuXHI/XG4vIiwgJG1lc3NhZ2UsIDIpOwoKICAgICAgICBpZiAoJG1lc3NhZ2VQYXJ0cyA9PT0gZmFsc2UgfHwgY291bnQoJG1lc3NhZ2VQYXJ0cykgIT09IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgbWVzc2FnZTogTWlzc2luZyBoZWFkZXIgZGVsaW1pdGVyJyk7CiAgICAgICAgfQoKICAgICAgICBbJHJhd0hlYWRlcnMsICRib2R5XSA9ICRtZXNzYWdlUGFydHM7CiAgICAgICAgJHJhd0hlYWRlcnMgLj0gIlxyXG4iOyAvLyBQdXQgYmFjayB0aGUgZGVsaW1pdGVyIHdlIHNwbGl0IHByZXZpb3VzbHkKICAgICAgICAkaGVhZGVyUGFydHMgPSBwcmVnX3NwbGl0KCIvXHI/XG4vIiwgJHJhd0hlYWRlcnMsIDIpOwoKICAgICAgICBpZiAoJGhlYWRlclBhcnRzID09PSBmYWxzZSB8fCBjb3VudCgkaGVhZGVyUGFydHMpICE9PSAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG1lc3NhZ2U6IE1pc3Npbmcgc3RhdHVzIGxpbmUnKTsKICAgICAgICB9CgogICAgICAgIFskc3RhcnRMaW5lLCAkcmF3SGVhZGVyc10gPSAkaGVhZGVyUGFydHM7CgogICAgICAgIGlmIChwcmVnX21hdGNoKCIvKD86XkhUVFBcL3xeW0EtWl0rIFxTKyBIVFRQXC8pKFxkKyg/OlwuXGQrKT8pL2kiLCAkc3RhcnRMaW5lLCAkbWF0Y2hlcykgJiYgJG1hdGNoZXNbMV0gPT09ICcxLjAnKSB7CiAgICAgICAgICAgIC8vIEhlYWRlciBmb2xkaW5nIGlzIGRlcHJlY2F0ZWQgZm9yIEhUVFAvMS4xLCBidXQgYWxsb3dlZCBpbiBIVFRQLzEuMAogICAgICAgICAgICAkcmF3SGVhZGVycyA9IHByZWdfcmVwbGFjZShSZmM3MjMwOjpIRUFERVJfRk9MRF9SRUdFWCwgJyAnLCAkcmF3SGVhZGVycyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheVtdICRoZWFkZXJMaW5lcyAqLwogICAgICAgICRjb3VudCA9IHByZWdfbWF0Y2hfYWxsKFJmYzcyMzA6OkhFQURFUl9SRUdFWCwgJHJhd0hlYWRlcnMsICRoZWFkZXJMaW5lcywgUFJFR19TRVRfT1JERVIpOwoKICAgICAgICAvLyBJZiB0aGVzZSBhcmVuJ3QgdGhlIHNhbWUsIHRoZW4gb25lIGxpbmUgZGlkbid0IG1hdGNoIGFuZCB0aGVyZSdzIGFuIGludmFsaWQgaGVhZGVyLgogICAgICAgIGlmICgkY291bnQgIT09IHN1YnN0cl9jb3VudCgkcmF3SGVhZGVycywgIlxuIikpIHsKICAgICAgICAgICAgLy8gRm9sZGluZyBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjQKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goUmZjNzIzMDo6SEVBREVSX0ZPTERfUkVHRVgsICRyYXdIZWFkZXJzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgaGVhZGVyIHN5bnRheDogT2Jzb2xldGUgbGluZSBmb2xkaW5nJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGhlYWRlciBzeW50YXgnKTsKICAgICAgICB9CgogICAgICAgICRoZWFkZXJzID0gW107CgogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJMaW5lcyBhcyAkaGVhZGVyTGluZSkgewogICAgICAgICAgICAkaGVhZGVyc1skaGVhZGVyTGluZVsxXV1bXSA9ICRoZWFkZXJMaW5lWzJdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N0YXJ0LWxpbmUnID0+ICRzdGFydExpbmUsCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiAkaGVhZGVycywKICAgICAgICAgICAgJ2JvZHknID0+ICRib2R5LAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgVVJJIGZvciBhbiBIVFRQIHJlcXVlc3QgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgIFBhdGggZnJvbSB0aGUgc3RhcnQtbGluZQogICAgICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBBcnJheSBvZiBoZWFkZXJzIChlYWNoIHZhbHVlIGFuIGFycmF5KS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVJlcXVlc3RVcmkoc3RyaW5nICRwYXRoLCBhcnJheSAkaGVhZGVycyk6IHN0cmluZwogICAgewogICAgICAgICRob3N0ID0gc2VsZjo6Z2V0SG9zdEZyb21IZWFkZXJzKCRoZWFkZXJzKTsKCiAgICAgICAgLy8gSWYgbm8gaG9zdCBpcyBmb3VuZCwgdGhlbiBhIGZ1bGwgVVJJIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KICAgICAgICBpZiAoJGhvc3QgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgJHNjaGVtZSA9IHN1YnN0cigkaG9zdCwgLTQpID09PSAnOjQ0MycgPyAnaHR0cHMnIDogJ2h0dHAnOwoKICAgICAgICByZXR1cm4gJHNjaGVtZS4nOi8vJy4kaG9zdC4nLycubHRyaW0oJHBhdGgsICcvJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMgQXJyYXkgb2YgaGVhZGVycyAoZWFjaCB2YWx1ZSBhbiBhcnJheSkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldEhvc3RGcm9tSGVhZGVycyhhcnJheSAkaGVhZGVycyk6ID9zdHJpbmcKICAgIHsKICAgICAgICAkaG9zdEtleSA9IGFycmF5X2ZpbHRlcihhcnJheV9rZXlzKCRoZWFkZXJzKSwgZnVuY3Rpb24gKCRrKSB7CiAgICAgICAgICAgIC8vIE51bWVyaWMgYXJyYXkga2V5cyBhcmUgY29udmVydGVkIHRvIGludCBieSBQSFAuCiAgICAgICAgICAgICRrID0gKHN0cmluZykgJGs7CgogICAgICAgICAgICByZXR1cm4gc3RydG9sb3dlcigkaykgPT09ICdob3N0JzsKICAgICAgICB9KTsKCiAgICAgICAgaWYgKCEkaG9zdEtleSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRob3N0ID0gJGhlYWRlcnNbcmVzZXQoJGhvc3RLZXkpXVswXTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkaG9zdCkgfHwgUmZjNzIzMDo6cGFyc2VIb3N0SGVhZGVyKCRob3N0KSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXF1ZXN0IHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRob3N0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgcmVxdWVzdCBtZXNzYWdlIHN0cmluZyBpbnRvIGEgcmVxdWVzdCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVxdWVzdChzdHJpbmcgJG1lc3NhZ2UpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGRhdGEgPSBzZWxmOjpwYXJzZU1lc3NhZ2UoJG1lc3NhZ2UpOwogICAgICAgICRtYXRjaGVzID0gW107CiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXltcU10rXHMrKFthLXpBLVpdKzpcL1wvfFwvKS4qLycsICRkYXRhWydzdGFydC1saW5lJ10sICRtYXRjaGVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXF1ZXN0IHN0cmluZycpOwogICAgICAgIH0KICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcgJywgJGRhdGFbJ3N0YXJ0LWxpbmUnXSwgMyk7CiAgICAgICAgJHZlcnNpb24gPSBpc3NldCgkcGFydHNbMl0pID8gZXhwbG9kZSgnLycsICRwYXJ0c1syXSlbMV0gOiAnMS4xJzsKCiAgICAgICAgJHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgKICAgICAgICAgICAgJHBhcnRzWzBdLAogICAgICAgICAgICAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gc2VsZjo6cGFyc2VSZXF1ZXN0VXJpKCRwYXJ0c1sxXSwgJGRhdGFbJ2hlYWRlcnMnXSkgOiAkcGFydHNbMV0sCiAgICAgICAgICAgICRkYXRhWydoZWFkZXJzJ10sCiAgICAgICAgICAgICRkYXRhWydib2R5J10sCiAgICAgICAgICAgICR2ZXJzaW9uCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRtYXRjaGVzWzFdID09PSAnLycgPyAkcmVxdWVzdCA6ICRyZXF1ZXN0LT53aXRoUmVxdWVzdFRhcmdldCgkcGFydHNbMV0pOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGEgcmVzcG9uc2UgbWVzc2FnZSBzdHJpbmcgaW50byBhIHJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFJlc3BvbnNlIG1lc3NhZ2Ugc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2Uoc3RyaW5nICRtZXNzYWdlKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkZGF0YSA9IHNlbGY6OnBhcnNlTWVzc2FnZSgkbWVzc2FnZSk7CiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yCiAgICAgICAgLy8gdGhlIHNwYWNlIGJldHdlZW4gc3RhdHVzLWNvZGUgYW5kIHJlYXNvbi1waHJhc2UgaXMgcmVxdWlyZWQuIEJ1dAogICAgICAgIC8vIGJyb3dzZXJzIGFjY2VwdCByZXNwb25zZXMgd2l0aG91dCBzcGFjZSBhbmQgcmVhc29uIGFzIHdlbGwuCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXkhUVFBcLy4qIFswLTldezN9KCAuKnwkKS8nLCAkZGF0YVsnc3RhcnQtbGluZSddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXNwb25zZSBzdHJpbmc6ICcuJGRhdGFbJ3N0YXJ0LWxpbmUnXSk7CiAgICAgICAgfQogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyAnLCAkZGF0YVsnc3RhcnQtbGluZSddLCAzKTsKCiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgKGludCkgJHBhcnRzWzFdLAogICAgICAgICAgICAkZGF0YVsnaGVhZGVycyddLAogICAgICAgICAgICAkZGF0YVsnYm9keSddLAogICAgICAgICAgICBleHBsb2RlKCcvJywgJHBhcnRzWzBdKVsxXSwKICAgICAgICAgICAgJHBhcnRzWzJdID8/IG51bGwKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MessageTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBUcmFpdCBpbXBsZW1lbnRpbmcgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICovCnRyYWl0IE1lc3NhZ2VUcmFpdAp7CiAgICAvKiogQHZhciBzdHJpbmdbXVtdIE1hcCBvZiBhbGwgcmVnaXN0ZXJlZCBoZWFkZXJzLCBhcyBvcmlnaW5hbCBuYW1lID0+IGFycmF5IG9mIHZhbHVlcyAqLwogICAgcHJpdmF0ZSAkaGVhZGVycyA9IFtdOwoKICAgIC8qKiBAdmFyIHN0cmluZ1tdIE1hcCBvZiBsb3dlcmNhc2UgaGVhZGVyIG5hbWUgPT4gb3JpZ2luYWwgbmFtZSBhdCByZWdpc3RyYXRpb24gKi8KICAgIHByaXZhdGUgJGhlYWRlck5hbWVzID0gW107CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRwcm90b2NvbCA9ICcxLjEnOwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RvY29sVmVyc2lvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb3RvY29sOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQcm90b2NvbFZlcnNpb24oJHZlcnNpb24pOiBNZXNzYWdlSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2ZXJzaW9uKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gTWVzc2FnZUludGVyZmFjZTo6d2l0aFByb3RvY29sVmVyc2lvbigpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHZlcnNpb24pCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnByb3RvY29sID09PSAkdmVyc2lvbikgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlcnM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhc0hlYWRlcigkaGVhZGVyKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbc3RydG9sb3dlcigkaGVhZGVyKV0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXIoJGhlYWRlcik6IGFycmF5CiAgICB7CiAgICAgICAgJGhlYWRlciA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdKSkgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlckxpbmUoJGhlYWRlcik6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBpbXBsb2RlKCcsICcsICR0aGlzLT5nZXRIZWFkZXIoJGhlYWRlcikpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIZWFkZXIoJGhlYWRlciwgJHZhbHVlKTogTWVzc2FnZUludGVyZmFjZQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRIZWFkZXIoJGhlYWRlcik7CiAgICAgICAgJHZhbHVlcyA9IFxpc19hcnJheSgkdmFsdWUpID8gJHZhbHVlIDogWyR2YWx1ZV07CiAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkaXRlbSkgewogICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGl0ZW0pICYmIChcaXNfc2NhbGFyKCRpdGVtKSB8fCAkaXRlbSA9PT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBNZXNzYWdlSW50ZXJmYWNlOjp3aXRoSGVhZGVyKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmd8c3RyaW5nW10uJywKICAgICAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGl0ZW0pCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5ub3JtYWxpemVIZWFkZXJWYWx1ZSgkdmFsdWUpOwogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcigkaGVhZGVyKTsKCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgIGlmIChpc3NldCgkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pKSB7CiAgICAgICAgICAgIHVuc2V0KCRuZXctPmhlYWRlcnNbJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdXSk7CiAgICAgICAgfQogICAgICAgICRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSA9ICRoZWFkZXI7CiAgICAgICAgJG5ldy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEFkZGVkSGVhZGVyKCRoZWFkZXIsICR2YWx1ZSk6IE1lc3NhZ2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0SGVhZGVyKCRoZWFkZXIpOwogICAgICAgICR2YWx1ZXMgPSBcaXNfYXJyYXkoJHZhbHVlKSA/ICR2YWx1ZSA6IFskdmFsdWVdOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRpdGVtKSAmJiAoXGlzX3NjYWxhcigkaXRlbSkgfHwgJGl0ZW0gPT09IG51bGwpKSB7CiAgICAgICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gTWVzc2FnZUludGVyZmFjZTo6d2l0aEFkZGVkSGVhZGVyKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmd8c3RyaW5nW10uJywKICAgICAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGl0ZW0pCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5ub3JtYWxpemVIZWFkZXJWYWx1ZSgkdmFsdWUpOwogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcigkaGVhZGVyKTsKCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgIGlmIChpc3NldCgkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pKSB7CiAgICAgICAgICAgICRoZWFkZXIgPSAkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdOwogICAgICAgICAgICAkbmV3LT5oZWFkZXJzWyRoZWFkZXJdID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0sICR2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdID0gJGhlYWRlcjsKICAgICAgICAgICAgJG5ldy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJGhlYWRlcik6IE1lc3NhZ2VJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRoZWFkZXJdLCAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5zdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IFV0aWxzOjpzdHJlYW1Gb3IoJycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEJvZHkoU3RyZWFtSW50ZXJmYWNlICRib2R5KTogTWVzc2FnZUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkYm9keSA9PT0gJHRoaXMtPnN0cmVhbSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c3RyZWFtID0gJGJvZHk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIChzdHJpbmd8c3RyaW5nW10pW10gJGhlYWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRIZWFkZXJzKGFycmF5ICRoZWFkZXJzKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5oZWFkZXJOYW1lcyA9ICR0aGlzLT5oZWFkZXJzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlciA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgLy8gTnVtZXJpYyBhcnJheSBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gaW50IGJ5IFBIUC4KICAgICAgICAgICAgJGhlYWRlciA9IChzdHJpbmcpICRoZWFkZXI7CgogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0SGVhZGVyKCRoZWFkZXIpOwogICAgICAgICAgICAkdmFsdWVzID0gXGlzX2FycmF5KCR2YWx1ZSkgPyAkdmFsdWUgOiBbJHZhbHVlXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRpdGVtKSAmJiAoXGlzX3NjYWxhcigkaXRlbSkgfHwgJGl0ZW0gPT09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvICVzOjpfX2NvbnN0cnVjdCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nfHN0cmluZ1tdLicsCiAgICAgICAgICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkaXRlbSksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYzo6Y2xhc3MKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+bm9ybWFsaXplSGVhZGVyVmFsdWUoJHZhbHVlKTsKICAgICAgICAgICAgJG5vcm1hbGl6ZWQgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXIgPSAkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdOwogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0gPSBhcnJheV9tZXJnZSgkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSwgJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlclZhbHVlKCR2YWx1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkgJiYgJHZhbHVlID09PSBbXSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgYW4gZW1wdHkgYXJyYXkgYXMgYSBoZWFkZXIgdmFsdWUgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZWplY3RzIGVtcHR5IGhlYWRlciB2YWx1ZSBhcnJheXMuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKFskdmFsdWVdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmltcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGhlYWRlciB2YWx1ZXMuCiAgICAgKgogICAgICogU3BhY2VzIGFuZCB0YWJzIG91Z2h0IHRvIGJlIGV4Y2x1ZGVkIGJ5IHBhcnNlcnMgd2hlbiBleHRyYWN0aW5nIHRoZSBmaWVsZCB2YWx1ZSBmcm9tIGEgaGVhZGVyIGZpZWxkLgogICAgICoKICAgICAqIGhlYWRlci1maWVsZCA9IGZpZWxkLW5hbWUgIjoiIE9XUyBmaWVsZC12YWx1ZSBPV1MKICAgICAqIE9XUyAgICAgICAgICA9ICooIFNQIC8gSFRBQiApCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkW10gJHZhbHVlcyBIZWFkZXIgdmFsdWVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUcmltbWVkIGhlYWRlciB2YWx1ZXMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi40CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJpbUFuZFZhbGlkYXRlSGVhZGVyVmFsdWVzKGFycmF5ICR2YWx1ZXMpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIWlzX3NjYWxhcigkdmFsdWUpICYmIG51bGwgIT09ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIHZhbHVlIG11c3QgYmUgc2NhbGFyIG9yIG51bGwgYnV0ICVzIHByb3ZpZGVkLicsCiAgICAgICAgICAgICAgICAgICAgaXNfb2JqZWN0KCR2YWx1ZSkgPyBnZXRfY2xhc3MoJHZhbHVlKSA6IGdldHR5cGUoJHZhbHVlKQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIENvbnZlcnQgbm9uLWZpbml0ZSBmbG9hdHMgZXhwbGljaXRseSwgYXMgaW1wbGljaXQgY29lcmNpb24gb2YKICAgICAgICAgICAgLy8gTkFOIGVtaXRzIGEgd2FybmluZyBvbiBQSFAgOC41LgogICAgICAgICAgICBpZiAoaXNfZmxvYXQoJHZhbHVlKSAmJiAhaXNfZmluaXRlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IGlzX25hbigkdmFsdWUpID8gJ05BTicgOiAoJHZhbHVlID4gMCA/ICdJTkYnIDogJy1JTkYnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRyaW1tZWQgPSB0cmltKChzdHJpbmcpICR2YWx1ZSwgIiBcdCIpOwogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VmFsdWUoJHRyaW1tZWQpOwoKICAgICAgICAgICAgcmV0dXJuICR0cmltbWVkOwogICAgICAgIH0sIGFycmF5X3ZhbHVlcygkdmFsdWVzKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkaGVhZGVyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYXNzZXJ0SGVhZGVyKCRoZWFkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGhlYWRlcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdIZWFkZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIGJ1dCAlcyBwcm92aWRlZC4nLAogICAgICAgICAgICAgICAgaXNfb2JqZWN0KCRoZWFkZXIpID8gZ2V0X2NsYXNzKCRoZWFkZXIpIDogZ2V0dHlwZSgkaGVhZGVyKQogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15bYS16QS1aMC05XCdgIyQlJiorLl5ffH4hLV0rJC9EJywgJGhlYWRlcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCciJXMiIGlzIG5vdCB2YWxpZCBoZWFkZXIgbmFtZS4nLCAkaGVhZGVyKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yCiAgICAgKgogICAgICogZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKQogICAgICogZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdCiAgICAgKiBmaWVsZC12Y2hhciAgICA9IFZDSEFSIC8gb2JzLXRleHQKICAgICAqIFZDSEFSICAgICAgICAgID0gJXgyMS03RQogICAgICogb2JzLXRleHQgICAgICAgPSAleDgwLUZGCiAgICAgKiBvYnMtZm9sZCAgICAgICA9IENSTEYgMSooIFNQIC8gSFRBQiApCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYXNzZXJ0VmFsdWUoc3RyaW5nICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGludGVudGlvbmFsbHkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb2JzLWZvbGQgcHJvZHVjdGlvbiwgYmVjYXVzZSBhcwogICAgICAgIC8vIHBlciBSRkMgNzIzMCMzLjIuNDoKICAgICAgICAvLwogICAgICAgIC8vIEEgc2VuZGVyIE1VU1QgTk9UIGdlbmVyYXRlIGEgbWVzc2FnZSB0aGF0IGluY2x1ZGVzCiAgICAgICAgLy8gbGluZSBmb2xkaW5nIChpLmUuLCB0aGF0IGhhcyBhbnkgZmllbGQtdmFsdWUgdGhhdCBjb250YWlucyBhIG1hdGNoIHRvCiAgICAgICAgLy8gdGhlIG9icy1mb2xkIHJ1bGUpIHVubGVzcyB0aGUgbWVzc2FnZSBpcyBpbnRlbmRlZCBmb3IgcGFja2FnaW5nCiAgICAgICAgLy8gd2l0aGluIHRoZSBtZXNzYWdlL2h0dHAgbWVkaWEgdHlwZS4KICAgICAgICAvLwogICAgICAgIC8vIENsaWVudHMgbXVzdCBub3Qgc2VuZCBhIHJlcXVlc3Qgd2l0aCBsaW5lIGZvbGRpbmcgYW5kIGEgc2VydmVyIHNlbmRpbmcgZm9sZGVkIGhlYWRlcnMgaXMKICAgICAgICAvLyBsaWtlbHkgdmVyeSByYXJlLiBMaW5lIGZvbGRpbmcgaXMgYSBmYWlybHkgb2JzY3VyZSBmZWF0dXJlIG9mIEhUVFAvMS4xIGFuZCB0aHVzIG5vdCBhY2NlcHRpbmcKICAgICAgICAvLyBmb2xkaW5nIGlzIG5vdCBsaWtlbHkgdG8gYnJlYWsgYW55IGxlZ2l0aW1hdGUgdXNlIGNhc2UuCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXltceDIwXHgwOVx4MjEtXHg3RVx4ODAtXHhGRl0qJC9EJywgJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgIHNwcmludGYoJyIlcyIgaXMgbm90IHZhbGlkIGhlYWRlciB2YWx1ZS4nLCAkdmFsdWUpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MimeType.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIE1pbWVUeXBlCnsKICAgIHByaXZhdGUgY29uc3QgTUlNRV9UWVBFUyA9IFsKICAgICAgICAnMTIzJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLTEtMi0zJywKICAgICAgICAnMWttJyA9PiAnYXBwbGljYXRpb24vdm5kLjEwMDBtaW5kcy5kZWNpc2lvbi1tb2RlbCt4bWwnLAogICAgICAgICcyMTAnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnM2RtbCcgPT4gJ3RleHQvdm5kLmluM2QuM2RtbCcsCiAgICAgICAgJzNkcycgPT4gJ2ltYWdlL3gtM2RzJywKICAgICAgICAnM2cyJyA9PiAndmlkZW8vM2dwcDInLAogICAgICAgICczZ3AnID0+ICd2aWRlby8zZ3BwJywKICAgICAgICAnM2dwcCcgPT4gJ3ZpZGVvLzNncHAnLAogICAgICAgICczbWYnID0+ICdtb2RlbC8zbWYnLAogICAgICAgICc3eicgPT4gJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsCiAgICAgICAgJzd6aXAnID0+ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLAogICAgICAgICdhYWInID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAnYWFjJyA9PiAnYXVkaW8vYWFjJywKICAgICAgICAnYWFtJyA9PiAnYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcCcsCiAgICAgICAgJ2FhcycgPT4gJ2FwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWcnLAogICAgICAgICdhYncnID0+ICdhcHBsaWNhdGlvbi94LWFiaXdvcmQnLAogICAgICAgICdhYycgPT4gJ2FwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0JywKICAgICAgICAnYWMzJyA9PiAnYXVkaW8vYWMzJywKICAgICAgICAnYWNjJyA9PiAnYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjJywKICAgICAgICAnYWNlJyA9PiAnYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZCcsCiAgICAgICAgJ2FjdScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbCcsCiAgICAgICAgJ2FjdXRjJyA9PiAnYXBwbGljYXRpb24vdm5kLmFjdWNvcnAnLAogICAgICAgICdhZHAnID0+ICdhdWRpby9hZHBjbScsCiAgICAgICAgJ2FkdHMnID0+ICdhdWRpby9hYWMnLAogICAgICAgICdhZXAnID0+ICdhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaCcsCiAgICAgICAgJ2FmbScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ2FmcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwJywKICAgICAgICAnYWdlJyA9PiAnYXBwbGljYXRpb24vdm5kLmFnZScsCiAgICAgICAgJ2FoZWFkJyA9PiAnYXBwbGljYXRpb24vdm5kLmFoZWFkLnNwYWNlJywKICAgICAgICAnYWknID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnYWlmJyA9PiAnYXVkaW8veC1haWZmJywKICAgICAgICAnYWlmYycgPT4gJ2F1ZGlvL3gtYWlmZicsCiAgICAgICAgJ2FpZmYnID0+ICdhdWRpby94LWFpZmYnLAogICAgICAgICdhaXInID0+ICdhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcCcsCiAgICAgICAgJ2FpdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0JywKICAgICAgICAnYW1pJyA9PiAnYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaScsCiAgICAgICAgJ2FtbCcgPT4gJ2FwcGxpY2F0aW9uL2F1dG9tYXRpb25tbC1hbWwreG1sJywKICAgICAgICAnYW1seCcgPT4gJ2FwcGxpY2F0aW9uL2F1dG9tYXRpb25tbC1hbWx4K3ppcCcsCiAgICAgICAgJ2FtcicgPT4gJ2F1ZGlvL2FtcicsCiAgICAgICAgJ2FwaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZScsCiAgICAgICAgJ2FwbmcnID0+ICdpbWFnZS9hcG5nJywKICAgICAgICAnYXBwY2FjaGUnID0+ICd0ZXh0L2NhY2hlLW1hbmlmZXN0JywKICAgICAgICAnYXBwaW5zdGFsbGVyJyA9PiAnYXBwbGljYXRpb24vYXBwaW5zdGFsbGVyJywKICAgICAgICAnYXBwbGljYXRpb24nID0+ICdhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uJywKICAgICAgICAnYXBweCcgPT4gJ2FwcGxpY2F0aW9uL2FwcHgnLAogICAgICAgICdhcHB4YnVuZGxlJyA9PiAnYXBwbGljYXRpb24vYXBweGJ1bmRsZScsCiAgICAgICAgJ2FwcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy1hcHByb2FjaCcsCiAgICAgICAgJ2FyYycgPT4gJ2FwcGxpY2F0aW9uL3gtZnJlZWFyYycsCiAgICAgICAgJ2FyaicgPT4gJ2FwcGxpY2F0aW9uL3gtYXJqJywKICAgICAgICAnYXNjJyA9PiAnYXBwbGljYXRpb24vcGdwLWtleXMnLAogICAgICAgICdhc2YnID0+ICd2aWRlby94LW1zLWFzZicsCiAgICAgICAgJ2FzbScgPT4gJ3RleHQveC1hc20nLAogICAgICAgICdhc28nID0+ICdhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5hc28nLAogICAgICAgICdhc3gnID0+ICd2aWRlby94LW1zLWFzZicsCiAgICAgICAgJ2F0YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwJywKICAgICAgICAnYXRvbScgPT4gJ2FwcGxpY2F0aW9uL2F0b20reG1sJywKICAgICAgICAnYXRvbWNhdCcgPT4gJ2FwcGxpY2F0aW9uL2F0b21jYXQreG1sJywKICAgICAgICAnYXRvbWRlbGV0ZWQnID0+ICdhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWwnLAogICAgICAgICdhdG9tc3ZjJyA9PiAnYXBwbGljYXRpb24vYXRvbXN2Yyt4bWwnLAogICAgICAgICdhdHgnID0+ICdhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnQnLAogICAgICAgICdhdScgPT4gJ2F1ZGlvL2Jhc2ljJywKICAgICAgICAnYXZjaScgPT4gJ2ltYWdlL2F2Y2knLAogICAgICAgICdhdmNzJyA9PiAnaW1hZ2UvYXZjcycsCiAgICAgICAgJ2F2aScgPT4gJ3ZpZGVvL3gtbXN2aWRlbycsCiAgICAgICAgJ2F2aWYnID0+ICdpbWFnZS9hdmlmJywKICAgICAgICAnYXcnID0+ICdhcHBsaWNhdGlvbi9hcHBsaXh3YXJlJywKICAgICAgICAnYXpmJyA9PiAnYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6ZicsCiAgICAgICAgJ2F6cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5henMnLAogICAgICAgICdhenYnID0+ICdpbWFnZS92bmQuYWlyemlwLmFjY2VsZXJhdG9yLmF6dicsCiAgICAgICAgJ2F6dycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2snLAogICAgICAgICdiMTYnID0+ICdpbWFnZS92bmQucGNvLmIxNicsCiAgICAgICAgJ2JhcnknID0+ICdtb2RlbC92bmQuYmFyeScsCiAgICAgICAgJ2JhdCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsCiAgICAgICAgJ2JjcGlvJyA9PiAnYXBwbGljYXRpb24veC1iY3BpbycsCiAgICAgICAgJ2JkZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1iZGYnLAogICAgICAgICdiZG0nID0+ICdhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtK3dieG1sJywKICAgICAgICAnYmRvJyA9PiAnYXBwbGljYXRpb24vdm5kLm5hdG8uYmluZGluZ2RhdGFvYmplY3QreG1sJywKICAgICAgICAnYmRvYycgPT4gJ2FwcGxpY2F0aW9uL2Jkb2MnLAogICAgICAgICdiZWQnID0+ICdhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWQnLAogICAgICAgICdiaDInID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c3BycycsCiAgICAgICAgJ2JpbicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2JsYicgPT4gJ2FwcGxpY2F0aW9uL3gtYmxvcmInLAogICAgICAgICdibGVuZCcgPT4gJ2FwcGxpY2F0aW9uL3gtYmxlbmRlcicsCiAgICAgICAgJ2Jsb3JiJyA9PiAnYXBwbGljYXRpb24veC1ibG9yYicsCiAgICAgICAgJ2JtaScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ibWknLAogICAgICAgICdibW1sJyA9PiAnYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sJywKICAgICAgICAnYm1wJyA9PiAnaW1hZ2UvYm1wJywKICAgICAgICAnYm9vaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyJywKICAgICAgICAnYm94JyA9PiAnYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveCcsCiAgICAgICAgJ2JveicgPT4gJ2FwcGxpY2F0aW9uL3gtYnppcDInLAogICAgICAgICdicGsnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdicG1uJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnYnJ1c2gnID0+ICdhcHBsaWNhdGlvbi92bmQucHJvY3JlYXRlLmJydXNoJywKICAgICAgICAnYnJ1c2hzZXQnID0+ICdhcHBsaWNhdGlvbi92bmQucHJvY3JlYXRlLmJydXNoc2V0JywKICAgICAgICAnYnNwJyA9PiAnbW9kZWwvdm5kLnZhbHZlLnNvdXJjZS5jb21waWxlZC1tYXAnLAogICAgICAgICdidGYnID0+ICdpbWFnZS9wcnMuYnRpZicsCiAgICAgICAgJ2J0aWYnID0+ICdpbWFnZS9wcnMuYnRpZicsCiAgICAgICAgJ2J1ZmZlcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2J6JyA9PiAnYXBwbGljYXRpb24veC1iemlwJywKICAgICAgICAnYnoyJyA9PiAnYXBwbGljYXRpb24veC1iemlwMicsCiAgICAgICAgJ2MnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2MxMWFtYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnJywKICAgICAgICAnYzExYW16JyA9PiAnYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWctcGtnJywKICAgICAgICAnYzRkJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXAnLAogICAgICAgICdjNGYnID0+ICdhcHBsaWNhdGlvbi92bmQuY2xvbmsuYzRncm91cCcsCiAgICAgICAgJ2M0ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwJywKICAgICAgICAnYzRwJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXAnLAogICAgICAgICdjNHUnID0+ICdhcHBsaWNhdGlvbi92bmQuY2xvbmsuYzRncm91cCcsCiAgICAgICAgJ2NhYicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsCiAgICAgICAgJ2NhZicgPT4gJ2F1ZGlvL3gtY2FmJywKICAgICAgICAnY2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCcsCiAgICAgICAgJ2NhcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdXJsLmNhcicsCiAgICAgICAgJ2NhdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0JywKICAgICAgICAnY2I3JyA9PiAnYXBwbGljYXRpb24veC1jYnInLAogICAgICAgICdjYmEnID0+ICdhcHBsaWNhdGlvbi94LWNicicsCiAgICAgICAgJ2NicicgPT4gJ2FwcGxpY2F0aW9uL3gtY2JyJywKICAgICAgICAnY2J0JyA9PiAnYXBwbGljYXRpb24veC1jYnInLAogICAgICAgICdjYnonID0+ICdhcHBsaWNhdGlvbi94LWNicicsCiAgICAgICAgJ2NjJyA9PiAndGV4dC94LWMnLAogICAgICAgICdjY28nID0+ICdhcHBsaWNhdGlvbi94LWNvY29hJywKICAgICAgICAnY2N0JyA9PiAnYXBwbGljYXRpb24veC1kaXJlY3RvcicsCiAgICAgICAgJ2NjeG1sJyA9PiAnYXBwbGljYXRpb24vY2N4bWwreG1sJywKICAgICAgICAnY2RiY21zZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2cnLAogICAgICAgICdjZGYnID0+ICdhcHBsaWNhdGlvbi94LW5ldGNkZicsCiAgICAgICAgJ2NkZngnID0+ICdhcHBsaWNhdGlvbi9jZGZ4K3htbCcsCiAgICAgICAgJ2Nka2V5JyA9PiAnYXBwbGljYXRpb24vdm5kLm1lZGlhc3RhdGlvbi5jZGtleScsCiAgICAgICAgJ2NkbWlhJyA9PiAnYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5JywKICAgICAgICAnY2RtaWMnID0+ICdhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lcicsCiAgICAgICAgJ2NkbWlkJyA9PiAnYXBwbGljYXRpb24vY2RtaS1kb21haW4nLAogICAgICAgICdjZG1pbycgPT4gJ2FwcGxpY2F0aW9uL2NkbWktb2JqZWN0JywKICAgICAgICAnY2RtaXEnID0+ICdhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlJywKICAgICAgICAnY2R4JyA9PiAnY2hlbWljYWwveC1jZHgnLAogICAgICAgICdjZHhtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jaGVtZHJhdyt4bWwnLAogICAgICAgICdjZHknID0+ICdhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYScsCiAgICAgICAgJ2NlcicgPT4gJ2FwcGxpY2F0aW9uL3BraXgtY2VydCcsCiAgICAgICAgJ2NmcycgPT4gJ2FwcGxpY2F0aW9uL3gtY2ZzLWNvbXByZXNzZWQnLAogICAgICAgICdjZ20nID0+ICdpbWFnZS9jZ20nLAogICAgICAgICdjaGF0JyA9PiAnYXBwbGljYXRpb24veC1jaGF0JywKICAgICAgICAnY2htJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWh0bWxoZWxwJywKICAgICAgICAnY2hydCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0JywKICAgICAgICAnY2lmJyA9PiAnY2hlbWljYWwveC1jaWYnLAogICAgICAgICdjaWknID0+ICdhcHBsaWNhdGlvbi92bmQuYW5zZXItd2ViLWNlcnRpZmljYXRlLWlzc3VlLWluaXRpYXRpb24nLAogICAgICAgICdjaWwnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnknLAogICAgICAgICdjanMnID0+ICdhcHBsaWNhdGlvbi9ub2RlJywKICAgICAgICAnY2xhJyA9PiAnYXBwbGljYXRpb24vdm5kLmNsYXltb3JlJywKICAgICAgICAnY2xhc3MnID0+ICdhcHBsaWNhdGlvbi9qYXZhLXZtJywKICAgICAgICAnY2xkJyA9PiAnbW9kZWwvdm5kLmNsZCcsCiAgICAgICAgJ2Nsa2snID0+ICdhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZCcsCiAgICAgICAgJ2Nsa3AnID0+ICdhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlJywKICAgICAgICAnY2xrdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlJywKICAgICAgICAnY2xrdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rJywKICAgICAgICAnY2xreCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyJywKICAgICAgICAnY2xwJyA9PiAnYXBwbGljYXRpb24veC1tc2NsaXAnLAogICAgICAgICdjbWMnID0+ICdhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXInLAogICAgICAgICdjbWRmJyA9PiAnY2hlbWljYWwveC1jbWRmJywKICAgICAgICAnY21sJyA9PiAnY2hlbWljYWwveC1jbWwnLAogICAgICAgICdjbXAnID0+ICdhcHBsaWNhdGlvbi92bmQueWVsbG93cml2ZXItY3VzdG9tLW1lbnUnLAogICAgICAgICdjbXgnID0+ICdpbWFnZS94LWNteCcsCiAgICAgICAgJ2NvZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yaW0uY29kJywKICAgICAgICAnY29mZmVlJyA9PiAndGV4dC9jb2ZmZWVzY3JpcHQnLAogICAgICAgICdjb20nID0+ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLAogICAgICAgICdjb25mJyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2NwaW8nID0+ICdhcHBsaWNhdGlvbi94LWNwaW8nLAogICAgICAgICdjcGwnID0+ICdhcHBsaWNhdGlvbi9jcGwreG1sJywKICAgICAgICAnY3BwJyA9PiAndGV4dC94LWMnLAogICAgICAgICdjcHQnID0+ICdhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHBybycsCiAgICAgICAgJ2NyZCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZScsCiAgICAgICAgJ2NybCcgPT4gJ2FwcGxpY2F0aW9uL3BraXgtY3JsJywKICAgICAgICAnY3J0JyA9PiAnYXBwbGljYXRpb24veC14NTA5LWNhLWNlcnQnLAogICAgICAgICdjcngnID0+ICdhcHBsaWNhdGlvbi94LWNocm9tZS1leHRlbnNpb24nLAogICAgICAgICdjcnlwdG9ub3RlJyA9PiAnYXBwbGljYXRpb24vdm5kLnJpZy5jcnlwdG9ub3RlJywKICAgICAgICAnY3NoJyA9PiAnYXBwbGljYXRpb24veC1jc2gnLAogICAgICAgICdjc2wnID0+ICdhcHBsaWNhdGlvbi92bmQuY2l0YXRpb25zdHlsZXMuc3R5bGUreG1sJywKICAgICAgICAnY3NtbCcgPT4gJ2NoZW1pY2FsL3gtY3NtbCcsCiAgICAgICAgJ2NzcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jb21tb25zcGFjZScsCiAgICAgICAgJ2NzcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2NzcycgPT4gJ3RleHQvY3NzJywKICAgICAgICAnY3N0JyA9PiAnYXBwbGljYXRpb24veC1kaXJlY3RvcicsCiAgICAgICAgJ2NzdicgPT4gJ3RleHQvY3N2JywKICAgICAgICAnY3UnID0+ICdhcHBsaWNhdGlvbi9jdS1zZWVtZScsCiAgICAgICAgJ2N1cmwnID0+ICd0ZXh0L3ZuZC5jdXJsJywKICAgICAgICAnY3dsJyA9PiAnYXBwbGljYXRpb24vY3dsJywKICAgICAgICAnY3d3JyA9PiAnYXBwbGljYXRpb24vcHJzLmN3dycsCiAgICAgICAgJ2N4dCcgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdjeHgnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2RhZScgPT4gJ21vZGVsL3ZuZC5jb2xsYWRhK3htbCcsCiAgICAgICAgJ2RhZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmJywKICAgICAgICAnZGFydCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kYXJ0JywKICAgICAgICAnZGF0YWxlc3MnID0+ICdhcHBsaWNhdGlvbi92bmQuZmRzbi5zZWVkJywKICAgICAgICAnZGF2bW91bnQnID0+ICdhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWwnLAogICAgICAgICdkYmYnID0+ICdhcHBsaWNhdGlvbi92bmQuZGJmJywKICAgICAgICAnZGJrJyA9PiAnYXBwbGljYXRpb24vZG9jYm9vayt4bWwnLAogICAgICAgICdkY20nID0+ICdhcHBsaWNhdGlvbi9kaWNvbScsCiAgICAgICAgJ2RjbXAnID0+ICdhcHBsaWNhdGlvbi92bmQuZGNtcCt4bWwnLAogICAgICAgICdkY3InID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZGN1cmwnID0+ICd0ZXh0L3ZuZC5jdXJsLmRjdXJsJywKICAgICAgICAnZGQyJyA9PiAnYXBwbGljYXRpb24vdm5kLm9tYS5kZDIreG1sJywKICAgICAgICAnZGRkJyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kZGQnLAogICAgICAgICdkZGYnID0+ICdhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtZGRmK3htbCcsCiAgICAgICAgJ2RkcycgPT4gJ2ltYWdlL3ZuZC5tcy1kZHMnLAogICAgICAgICdkZWInID0+ICdhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlJywKICAgICAgICAnZGVmJyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2RlcGxveScgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2RlcicgPT4gJ2FwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0JywKICAgICAgICAnZGZhYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnknLAogICAgICAgICdkZ2MnID0+ICdhcHBsaWNhdGlvbi94LWRnYy1jb21wcmVzc2VkJywKICAgICAgICAnZGliJyA9PiAnaW1hZ2UvYm1wJywKICAgICAgICAnZGljJyA9PiAndGV4dC94LWMnLAogICAgICAgICdkaXInID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZGlzJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXMnLAogICAgICAgICdkaXNwb3NpdGlvbi1ub3RpZmljYXRpb24nID0+ICdtZXNzYWdlL2Rpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvbicsCiAgICAgICAgJ2Rpc3QnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkaXN0eicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2RqdicgPT4gJ2ltYWdlL3ZuZC5kanZ1JywKICAgICAgICAnZGp2dScgPT4gJ2ltYWdlL3ZuZC5kanZ1JywKICAgICAgICAnZGxsJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnZG1nJyA9PiAnYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2UnLAogICAgICAgICdkbW4nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkbXAnID0+ICdhcHBsaWNhdGlvbi92bmQudGNwZHVtcC5wY2FwJywKICAgICAgICAnZG1zJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAnZG5hJyA9PiAnYXBwbGljYXRpb24vdm5kLmRuYScsCiAgICAgICAgJ2RuZycgPT4gJ2ltYWdlL3gtYWRvYmUtZG5nJywKICAgICAgICAnZG9jJyA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywKICAgICAgICAnZG9jbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ2RvY3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsCiAgICAgICAgJ2RvdCcgPT4gJ2FwcGxpY2F0aW9uL21zd29yZCcsCiAgICAgICAgJ2RvdG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdkb3R4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLAogICAgICAgICdkcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vc2dpLmRwJywKICAgICAgICAnZHBnJyA9PiAnYXBwbGljYXRpb24vdm5kLmRwZ3JhcGgnLAogICAgICAgICdkcHgnID0+ICdpbWFnZS9kcHgnLAogICAgICAgICdkcmEnID0+ICdhdWRpby92bmQuZHJhJywKICAgICAgICAnZHJsZScgPT4gJ2ltYWdlL2RpY29tLXJsZScsCiAgICAgICAgJ2RybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcm9jcmVhdGUuZHJlYW0nLAogICAgICAgICdkc2MnID0+ICd0ZXh0L3Bycy5saW5lcy50YWcnLAogICAgICAgICdkc3NjJyA9PiAnYXBwbGljYXRpb24vZHNzYytkZXInLAogICAgICAgICdkc3QnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkdGInID0+ICdhcHBsaWNhdGlvbi94LWR0Ym9vayt4bWwnLAogICAgICAgICdkdGQnID0+ICdhcHBsaWNhdGlvbi94bWwtZHRkJywKICAgICAgICAnZHRzJyA9PiAnYXVkaW8vdm5kLmR0cycsCiAgICAgICAgJ2R0c2hkJyA9PiAnYXVkaW8vdm5kLmR0cy5oZCcsCiAgICAgICAgJ2R1bXAnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdkdmInID0+ICd2aWRlby92bmQuZHZiLmZpbGUnLAogICAgICAgICdkdmknID0+ICdhcHBsaWNhdGlvbi94LWR2aScsCiAgICAgICAgJ2R3ZCcgPT4gJ2FwcGxpY2F0aW9uL2F0c2MtZHdkK3htbCcsCiAgICAgICAgJ2R3ZicgPT4gJ21vZGVsL3ZuZC5kd2YnLAogICAgICAgICdkd2cnID0+ICdpbWFnZS92bmQuZHdnJywKICAgICAgICAnZHhmJyA9PiAnaW1hZ2Uvdm5kLmR4ZicsCiAgICAgICAgJ2R4cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHAnLAogICAgICAgICdkeHInID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnZWFyJyA9PiAnYXBwbGljYXRpb24vamF2YS1hcmNoaXZlJywKICAgICAgICAnZWNlbHA0ODAwJyA9PiAnYXVkaW8vdm5kLm51ZXJhLmVjZWxwNDgwMCcsCiAgICAgICAgJ2VjZWxwNzQ3MCcgPT4gJ2F1ZGlvL3ZuZC5udWVyYS5lY2VscDc0NzAnLAogICAgICAgICdlY2VscDk2MDAnID0+ICdhdWRpby92bmQubnVlcmEuZWNlbHA5NjAwJywKICAgICAgICAnZWNtYScgPT4gJ2FwcGxpY2F0aW9uL2VjbWFzY3JpcHQnLAogICAgICAgICdlZG0nID0+ICdhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWRtJywKICAgICAgICAnZWR4JyA9PiAnYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeCcsCiAgICAgICAgJ2VmaWYnID0+ICdhcHBsaWNhdGlvbi92bmQucGljc2VsJywKICAgICAgICAnZWk2JyA9PiAnYXBwbGljYXRpb24vdm5kLnBnLm9zYXNsaScsCiAgICAgICAgJ2VsYycgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2VtZicgPT4gJ2ltYWdlL2VtZicsCiAgICAgICAgJ2VtbCcgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnZW1tYScgPT4gJ2FwcGxpY2F0aW9uL2VtbWEreG1sJywKICAgICAgICAnZW1vdGlvbm1sJyA9PiAnYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbCcsCiAgICAgICAgJ2VteicgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtZXRhZmlsZScsCiAgICAgICAgJ2VvbCcgPT4gJ2F1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzJywKICAgICAgICAnZW90JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLAogICAgICAgICdlcHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnZXB1YicgPT4gJ2FwcGxpY2F0aW9uL2VwdWIremlwJywKICAgICAgICAnZXMzJyA9PiAnYXBwbGljYXRpb24vdm5kLmVzemlnbm8zK3htbCcsCiAgICAgICAgJ2VzYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbScsCiAgICAgICAgJ2VzZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lcHNvbi5lc2YnLAogICAgICAgICdldDMnID0+ICdhcHBsaWNhdGlvbi92bmQuZXN6aWdubzMreG1sJywKICAgICAgICAnZXR4JyA9PiAndGV4dC94LXNldGV4dCcsCiAgICAgICAgJ2V2YScgPT4gJ2FwcGxpY2F0aW9uL3gtZXZhJywKICAgICAgICAnZXZ5JyA9PiAnYXBwbGljYXRpb24veC1lbnZveScsCiAgICAgICAgJ2V4ZScgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2V4aScgPT4gJ2FwcGxpY2F0aW9uL2V4aScsCiAgICAgICAgJ2V4cCcgPT4gJ2FwcGxpY2F0aW9uL2V4cHJlc3MnLAogICAgICAgICdleHInID0+ICdpbWFnZS9hY2VzJywKICAgICAgICAnZXh0JyA9PiAnYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmV4dCcsCiAgICAgICAgJ2V6JyA9PiAnYXBwbGljYXRpb24vYW5kcmV3LWluc2V0JywKICAgICAgICAnZXoyJyA9PiAnYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtJywKICAgICAgICAnZXozJyA9PiAnYXBwbGljYXRpb24vdm5kLmV6cGl4LXBhY2thZ2UnLAogICAgICAgICdmJyA9PiAndGV4dC94LWZvcnRyYW4nLAogICAgICAgICdmNHYnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdmNzcnID0+ICd0ZXh0L3gtZm9ydHJhbicsCiAgICAgICAgJ2Y5MCcgPT4gJ3RleHQveC1mb3J0cmFuJywKICAgICAgICAnZmFjdGknID0+ICdpbWFnZS92bmQuYmxvY2tmYWN0LmZhY3RpJywKICAgICAgICAnZmJzJyA9PiAnaW1hZ2Uvdm5kLmZhc3RiaWRzaGVldCcsCiAgICAgICAgJ2ZieCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hdXRvZGVzay5mYngnLAogICAgICAgICdmY2R0JyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLmZvcm1zY2VudHJhbC5mY2R0JywKICAgICAgICAnZmNzJyA9PiAnYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzJywKICAgICAgICAnZmRmJyA9PiAnYXBwbGljYXRpb24vZmRmJywKICAgICAgICAnZmR0JyA9PiAnYXBwbGljYXRpb24vZmR0K3htbCcsCiAgICAgICAgJ2ZlX2xhdW5jaCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rJywKICAgICAgICAnZmc1JyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNncCcsCiAgICAgICAgJ2ZnZCcgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdmaCcgPT4gJ2ltYWdlL3gtZnJlZWhhbmQnLAogICAgICAgICdmaDQnID0+ICdpbWFnZS94LWZyZWVoYW5kJywKICAgICAgICAnZmg1JyA9PiAnaW1hZ2UveC1mcmVlaGFuZCcsCiAgICAgICAgJ2ZoNycgPT4gJ2ltYWdlL3gtZnJlZWhhbmQnLAogICAgICAgICdmaGMnID0+ICdpbWFnZS94LWZyZWVoYW5kJywKICAgICAgICAnZmlnJyA9PiAnYXBwbGljYXRpb24veC14ZmlnJywKICAgICAgICAnZml0cycgPT4gJ2ltYWdlL2ZpdHMnLAogICAgICAgICdmbGFjJyA9PiAnYXVkaW8veC1mbGFjJywKICAgICAgICAnZmxpJyA9PiAndmlkZW8veC1mbGknLAogICAgICAgICdmbG8nID0+ICdhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5mbG8nLAogICAgICAgICdmbHYnID0+ICd2aWRlby94LWZsdicsCiAgICAgICAgJ2ZsdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua2l2aW8nLAogICAgICAgICdmbHgnID0+ICd0ZXh0L3ZuZC5mbWkuZmxleHN0b3InLAogICAgICAgICdmbHknID0+ICd0ZXh0L3ZuZC5mbHknLAogICAgICAgICdmbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyJywKICAgICAgICAnZm5jJyA9PiAnYXBwbGljYXRpb24vdm5kLmZyb2dhbnMuZm5jJywKICAgICAgICAnZm8nID0+ICdhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0reG1sJywKICAgICAgICAnZm9yJyA9PiAndGV4dC94LWZvcnRyYW4nLAogICAgICAgICdmcHgnID0+ICdpbWFnZS92bmQuZnB4JywKICAgICAgICAnZnJhbWUnID0+ICdhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlcicsCiAgICAgICAgJ2ZzYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mc2Mud2VibGF1bmNoJywKICAgICAgICAnZnN0JyA9PiAnaW1hZ2Uvdm5kLmZzdCcsCiAgICAgICAgJ2Z0YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwJywKICAgICAgICAnZnRpJyA9PiAnYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1mdW5kcy10cmFuc2Zlci1pbml0aWF0aW9uJywKICAgICAgICAnZnZ0JyA9PiAndmlkZW8vdm5kLmZ2dCcsCiAgICAgICAgJ2Z4cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHAnLAogICAgICAgICdmeHBsJyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLmZ4cCcsCiAgICAgICAgJ2Z6cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0JywKICAgICAgICAnZzJ3JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb3BsYW4nLAogICAgICAgICdnMycgPT4gJ2ltYWdlL2czZmF4JywKICAgICAgICAnZzN3JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlJywKICAgICAgICAnZ2FjJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1hY2NvdW50JywKICAgICAgICAnZ2FtJyA9PiAnYXBwbGljYXRpb24veC10YWRzJywKICAgICAgICAnZ2JyJyA9PiAnYXBwbGljYXRpb24vcnBraS1naG9zdGJ1c3RlcnMnLAogICAgICAgICdnY2EnID0+ICdhcHBsaWNhdGlvbi94LWdjYS1jb21wcmVzc2VkJywKICAgICAgICAnZ2RsJyA9PiAnbW9kZWwvdm5kLmdkbCcsCiAgICAgICAgJ2dkb2MnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZG9jdW1lbnQnLAogICAgICAgICdnZHJhdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kcmF3aW5nJywKICAgICAgICAnZ2VkJyA9PiAndGV4dC92bmQuZmFtaWx5c2VhcmNoLmdlZGNvbScsCiAgICAgICAgJ2dlbycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5keW5hZ2VvJywKICAgICAgICAnZ2VvanNvbicgPT4gJ2FwcGxpY2F0aW9uL2dlbytqc29uJywKICAgICAgICAnZ2V4JyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyJywKICAgICAgICAnZ2Zvcm0nID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZm9ybScsCiAgICAgICAgJ2dnYicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5maWxlJywKICAgICAgICAnZ2dzJyA9PiAnYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLnNsaWRlcycsCiAgICAgICAgJ2dndCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sJywKICAgICAgICAnZ2hmJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1oZWxwJywKICAgICAgICAnZ2lmJyA9PiAnaW1hZ2UvZ2lmJywKICAgICAgICAnZ2ltJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS1pZGVudGl0eS1tZXNzYWdlJywKICAgICAgICAnZ2phbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5qYW0nLAogICAgICAgICdnbGInID0+ICdtb2RlbC9nbHRmLWJpbmFyeScsCiAgICAgICAgJ2dsdGYnID0+ICdtb2RlbC9nbHRmK2pzb24nLAogICAgICAgICdnbWFwJyA9PiAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLm1hcCcsCiAgICAgICAgJ2dtbCcgPT4gJ2FwcGxpY2F0aW9uL2dtbCt4bWwnLAogICAgICAgICdnbXgnID0+ICdhcHBsaWNhdGlvbi92bmQuZ214JywKICAgICAgICAnZ251bWVyaWMnID0+ICdhcHBsaWNhdGlvbi94LWdudW1lcmljJywKICAgICAgICAnZ3BoJyA9PiAnYXBwbGljYXRpb24vdm5kLmZsb2dyYXBoaXQnLAogICAgICAgICdncHgnID0+ICdhcHBsaWNhdGlvbi9ncHgreG1sJywKICAgICAgICAnZ3FmJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyYWZlcScsCiAgICAgICAgJ2dxcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFmZXEnLAogICAgICAgICdncmFtJyA9PiAnYXBwbGljYXRpb24vc3JncycsCiAgICAgICAgJ2dyYW1wcycgPT4gJ2FwcGxpY2F0aW9uL3gtZ3JhbXBzLXhtbCcsCiAgICAgICAgJ2dyZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9tZXRyeS1leHBsb3JlcicsCiAgICAgICAgJ2dydicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaW5qZWN0b3InLAogICAgICAgICdncnhtbCcgPT4gJ2FwcGxpY2F0aW9uL3NyZ3MreG1sJywKICAgICAgICAnZ3NjcmlwdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zY3JpcHQnLAogICAgICAgICdnc2YnID0+ICdhcHBsaWNhdGlvbi94LWZvbnQtZ2hvc3RzY3JpcHQnLAogICAgICAgICdnc2hlZXQnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuc3ByZWFkc2hlZXQnLAogICAgICAgICdnc2l0ZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zaXRlJywKICAgICAgICAnZ3NsaWRlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb24nLAogICAgICAgICdndGFyJyA9PiAnYXBwbGljYXRpb24veC1ndGFyJywKICAgICAgICAnZ3RtJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2UnLAogICAgICAgICdndHcnID0+ICdtb2RlbC92bmQuZ3R3JywKICAgICAgICAnZ3YnID0+ICd0ZXh0L3ZuZC5ncmFwaHZpeicsCiAgICAgICAgJ2d4ZicgPT4gJ2FwcGxpY2F0aW9uL2d4ZicsCiAgICAgICAgJ2d4dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW9uZXh0JywKICAgICAgICAnZ3onID0+ICdhcHBsaWNhdGlvbi9nemlwJywKICAgICAgICAnZ3ppcCcgPT4gJ2FwcGxpY2F0aW9uL2d6aXAnLAogICAgICAgICdoJyA9PiAndGV4dC94LWMnLAogICAgICAgICdoMjYxJyA9PiAndmlkZW8vaDI2MScsCiAgICAgICAgJ2gyNjMnID0+ICd2aWRlby9oMjYzJywKICAgICAgICAnaDI2NCcgPT4gJ3ZpZGVvL2gyNjQnLAogICAgICAgICdoYWwnID0+ICdhcHBsaWNhdGlvbi92bmQuaGFsK3htbCcsCiAgICAgICAgJ2hiY2knID0+ICdhcHBsaWNhdGlvbi92bmQuaGJjaScsCiAgICAgICAgJ2hicycgPT4gJ3RleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlJywKICAgICAgICAnaGRkJyA9PiAnYXBwbGljYXRpb24veC12aXJ0dWFsYm94LWhkZCcsCiAgICAgICAgJ2hkZicgPT4gJ2FwcGxpY2F0aW9uL3gtaGRmJywKICAgICAgICAnaGVpYycgPT4gJ2ltYWdlL2hlaWMnLAogICAgICAgICdoZWljcycgPT4gJ2ltYWdlL2hlaWMtc2VxdWVuY2UnLAogICAgICAgICdoZWlmJyA9PiAnaW1hZ2UvaGVpZicsCiAgICAgICAgJ2hlaWZzJyA9PiAnaW1hZ2UvaGVpZi1zZXF1ZW5jZScsCiAgICAgICAgJ2hlajInID0+ICdpbWFnZS9oZWoyaycsCiAgICAgICAgJ2hlbGQnID0+ICdhcHBsaWNhdGlvbi9hdHNjLWhlbGQreG1sJywKICAgICAgICAnaGgnID0+ICd0ZXh0L3gtYycsCiAgICAgICAgJ2hqc29uJyA9PiAnYXBwbGljYXRpb24vaGpzb24nLAogICAgICAgICdobHAnID0+ICdhcHBsaWNhdGlvbi93aW5obHAnLAogICAgICAgICdocGdsJyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWhwZ2wnLAogICAgICAgICdocGlkJyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWhwaWQnLAogICAgICAgICdocHMnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtaHBzJywKICAgICAgICAnaHF4JyA9PiAnYXBwbGljYXRpb24vbWFjLWJpbmhleDQwJywKICAgICAgICAnaHRjJyA9PiAndGV4dC94LWNvbXBvbmVudCcsCiAgICAgICAgJ2h0a2UnID0+ICdhcHBsaWNhdGlvbi92bmQua2VuYW1lYWFwcCcsCiAgICAgICAgJ2h0bScgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgJ2h0bWwnID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdodmQnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpYycsCiAgICAgICAgJ2h2cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtdm9pY2UnLAogICAgICAgICdodnMnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXNjcmlwdCcsCiAgICAgICAgJ2kyZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnRlcmdlbycsCiAgICAgICAgJ2ljYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pY2Nwcm9maWxlJywKICAgICAgICAnaWNlJyA9PiAneC1jb25mZXJlbmNlL3gtY29vbHRhbGsnLAogICAgICAgICdpY20nID0+ICdhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZScsCiAgICAgICAgJ2ljbycgPT4gJ2ltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbicsCiAgICAgICAgJ2ljcycgPT4gJ3RleHQvY2FsZW5kYXInLAogICAgICAgICdpZWYnID0+ICdpbWFnZS9pZWYnLAogICAgICAgICdpZmInID0+ICd0ZXh0L2NhbGVuZGFyJywKICAgICAgICAnaWZtJyA9PiAnYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhJywKICAgICAgICAnaWdlcycgPT4gJ21vZGVsL2lnZXMnLAogICAgICAgICdpZ2wnID0+ICdhcHBsaWNhdGlvbi92bmQuaWdsb2FkZXInLAogICAgICAgICdpZ20nID0+ICdhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbScsCiAgICAgICAgJ2lncycgPT4gJ21vZGVsL2lnZXMnLAogICAgICAgICdpZ3gnID0+ICdhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5pZ3gnLAogICAgICAgICdpaWYnID0+ICdhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuaW50ZXJjaGFuZ2UnLAogICAgICAgICdpbWcnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdpbXAnID0+ICdhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXAnLAogICAgICAgICdpbXMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtaW1zJywKICAgICAgICAnaW4nID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnaW5kZCcgPT4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nLAogICAgICAgICdpbmknID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnaW5rJyA9PiAnYXBwbGljYXRpb24vaW5rbWwreG1sJywKICAgICAgICAnaW5rbWwnID0+ICdhcHBsaWNhdGlvbi9pbmttbCt4bWwnLAogICAgICAgICdpbnN0YWxsJyA9PiAnYXBwbGljYXRpb24veC1pbnN0YWxsLWluc3RydWN0aW9ucycsCiAgICAgICAgJ2lvdGEnID0+ICdhcHBsaWNhdGlvbi92bmQuYXN0cmFlYS1zb2Z0d2FyZS5pb3RhJywKICAgICAgICAnaXBmaXgnID0+ICdhcHBsaWNhdGlvbi9pcGZpeCcsCiAgICAgICAgJ2lwaycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlJywKICAgICAgICAnaXB5bmInID0+ICdhcHBsaWNhdGlvbi94LWlweW5iK2pzb24nLAogICAgICAgICdpcm0nID0+ICdhcHBsaWNhdGlvbi92bmQuaWJtLnJpZ2h0cy1tYW5hZ2VtZW50JywKICAgICAgICAnaXJwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlyZXBvc2l0b3J5LnBhY2thZ2UreG1sJywKICAgICAgICAnaXNvJyA9PiAnYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlJywKICAgICAgICAnaXRwJyA9PiAnYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZScsCiAgICAgICAgJ2l0cycgPT4gJ2FwcGxpY2F0aW9uL2l0cyt4bWwnLAogICAgICAgICdpdnAnID0+ICdhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwJywKICAgICAgICAnaXZ1JyA9PiAnYXBwbGljYXRpb24vdm5kLmltbWVydmlzaW9uLWl2dScsCiAgICAgICAgJ2phZCcgPT4gJ3RleHQvdm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yJywKICAgICAgICAnamFkZScgPT4gJ3RleHQvamFkZScsCiAgICAgICAgJ2phaWknID0+ICdpbWFnZS9qYWlpJywKICAgICAgICAnamFpcycgPT4gJ2ltYWdlL2phaXMnLAogICAgICAgICdqYW0nID0+ICdhcHBsaWNhdGlvbi92bmQuamFtJywKICAgICAgICAnamFyJyA9PiAnYXBwbGljYXRpb24vamF2YS1hcmNoaXZlJywKICAgICAgICAnamFyZGlmZicgPT4gJ2FwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlLWRpZmYnLAogICAgICAgICdqYXZhJyA9PiAndGV4dC94LWphdmEtc291cmNlJywKICAgICAgICAnamZpZicgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqaGMnID0+ICdpbWFnZS9qcGhjJywKICAgICAgICAnamlzcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5qaXNwJywKICAgICAgICAnamxzJyA9PiAnaW1hZ2UvamxzJywKICAgICAgICAnamx0JyA9PiAnYXBwbGljYXRpb24vdm5kLmhwLWpseXQnLAogICAgICAgICdqbmcnID0+ICdpbWFnZS94LWpuZycsCiAgICAgICAgJ2pubHAnID0+ICdhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlJywKICAgICAgICAnam9kYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5qb29zdC5qb2RhLWFyY2hpdmUnLAogICAgICAgICdqcDInID0+ICdpbWFnZS9qcDInLAogICAgICAgICdqcGUnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBlZycgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqcGYnID0+ICdpbWFnZS9qcHgnLAogICAgICAgICdqcGcnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBnMicgPT4gJ2ltYWdlL2pwMicsCiAgICAgICAgJ2pwZ20nID0+ICdpbWFnZS9qcG0nLAogICAgICAgICdqcGd2JyA9PiAndmlkZW8vanBlZycsCiAgICAgICAgJ2pwaCcgPT4gJ2ltYWdlL2pwaCcsCiAgICAgICAgJ2pwbScgPT4gJ2ltYWdlL2pwbScsCiAgICAgICAgJ2pweCcgPT4gJ2ltYWdlL2pweCcsCiAgICAgICAgJ2pzJyA9PiAndGV4dC9qYXZhc2NyaXB0JywKICAgICAgICAnanNvbicgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICdqc29uNScgPT4gJ2FwcGxpY2F0aW9uL2pzb241JywKICAgICAgICAnanNvbmxkJyA9PiAnYXBwbGljYXRpb24vbGQranNvbicsCiAgICAgICAgJ2pzb25tbCcgPT4gJ2FwcGxpY2F0aW9uL2pzb25tbCtqc29uJywKICAgICAgICAnanN4JyA9PiAndGV4dC9qc3gnLAogICAgICAgICdqdCcgPT4gJ21vZGVsL2p0JywKICAgICAgICAnanhsJyA9PiAnaW1hZ2UvanhsJywKICAgICAgICAnanhyJyA9PiAnaW1hZ2UvanhyJywKICAgICAgICAnanhyYScgPT4gJ2ltYWdlL2p4cmEnLAogICAgICAgICdqeHJzJyA9PiAnaW1hZ2UvanhycycsCiAgICAgICAgJ2p4cycgPT4gJ2ltYWdlL2p4cycsCiAgICAgICAgJ2p4c2MnID0+ICdpbWFnZS9qeHNjJywKICAgICAgICAnanhzaScgPT4gJ2ltYWdlL2p4c2knLAogICAgICAgICdqeHNzJyA9PiAnaW1hZ2UvanhzcycsCiAgICAgICAgJ2thcicgPT4gJ2F1ZGlvL21pZGknLAogICAgICAgICdrYXJib24nID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvbicsCiAgICAgICAgJ2tibCcgPT4gJ2FwcGxpY2F0aW9uL2tibCt4bWwnLAogICAgICAgICdrZGInID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdrZGJ4JyA9PiAnYXBwbGljYXRpb24veC1rZWVwYXNzMicsCiAgICAgICAgJ2tleScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5rZXlub3RlJywKICAgICAgICAna2ZvJyA9PiAnYXBwbGljYXRpb24vdm5kLmtkZS5rZm9ybXVsYScsCiAgICAgICAgJ2tpYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb24nLAogICAgICAgICdrbWwnID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttbCt4bWwnLAogICAgICAgICdrbXonID0+ICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmtteicsCiAgICAgICAgJ2tuZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raW5hcicsCiAgICAgICAgJ2tucCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5raW5hcicsCiAgICAgICAgJ2tvbicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua29udG91cicsCiAgICAgICAgJ2twcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlcicsCiAgICAgICAgJ2twdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlcicsCiAgICAgICAgJ2tweHgnID0+ICdhcHBsaWNhdGlvbi92bmQuZHMta2V5cG9pbnQnLAogICAgICAgICdrc3AnID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmtzcHJlYWQnLAogICAgICAgICdrdHInID0+ICdhcHBsaWNhdGlvbi92bmQua2Fob290eicsCiAgICAgICAgJ2t0eCcgPT4gJ2ltYWdlL2t0eCcsCiAgICAgICAgJ2t0eDInID0+ICdpbWFnZS9rdHgyJywKICAgICAgICAna3R6JyA9PiAnYXBwbGljYXRpb24vdm5kLmthaG9vdHonLAogICAgICAgICdrd2QnID0+ICdhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkJywKICAgICAgICAna3d0JyA9PiAnYXBwbGljYXRpb24vdm5kLmtkZS5rd29yZCcsCiAgICAgICAgJ2xhc3htbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbCcsCiAgICAgICAgJ2xhdGV4JyA9PiAnYXBwbGljYXRpb24veC1sYXRleCcsCiAgICAgICAgJ2xiZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5kZXNrdG9wJywKICAgICAgICAnbGJlJyA9PiAnYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbCcsCiAgICAgICAgJ2xlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllcicsCiAgICAgICAgJ2xlc3MnID0+ICd0ZXh0L2xlc3MnLAogICAgICAgICdsZ3InID0+ICdhcHBsaWNhdGlvbi9sZ3IreG1sJywKICAgICAgICAnbGhhJyA9PiAnYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZCcsCiAgICAgICAgJ2xpbms2NicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWwnLAogICAgICAgICdsaXN0JyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ2xpc3QzODIwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXAnLAogICAgICAgICdsaXN0YWZwJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5tb2RjYXAnLAogICAgICAgICdsaXRjb2ZmZWUnID0+ICd0ZXh0L2NvZmZlZXNjcmlwdCcsCiAgICAgICAgJ2xuaycgPT4gJ2FwcGxpY2F0aW9uL3gtbXMtc2hvcnRjdXQnLAogICAgICAgICdsb2cnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnbG9zdHhtbCcgPT4gJ2FwcGxpY2F0aW9uL2xvc3QreG1sJywKICAgICAgICAnbG90dGllJyA9PiAnYXBwbGljYXRpb24vemlwK2RvdGxvdHRpZScsCiAgICAgICAgJ2xyZicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ2xybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1scm0nLAogICAgICAgICdsdGYnID0+ICdhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGYnLAogICAgICAgICdsdWEnID0+ICd0ZXh0L3gtbHVhJywKICAgICAgICAnbHVhYycgPT4gJ2FwcGxpY2F0aW9uL3gtbHVhLWJ5dGVjb2RlJywKICAgICAgICAnbHZwJyA9PiAnYXVkaW8vdm5kLmx1Y2VudC52b2ljZScsCiAgICAgICAgJ2x3cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvJywKICAgICAgICAnbHpoJyA9PiAnYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZCcsCiAgICAgICAgJ20xMycgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtZWRpYXZpZXcnLAogICAgICAgICdtMTQnID0+ICdhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3JywKICAgICAgICAnbTF2JyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ20yMScgPT4gJ2FwcGxpY2F0aW9uL21wMjEnLAogICAgICAgICdtMmEnID0+ICdhdWRpby9tcGVnJywKICAgICAgICAnbTJ0JyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ20ydHMnID0+ICd2aWRlby9tcDJ0JywKICAgICAgICAnbTJ2JyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ20zYScgPT4gJ2F1ZGlvL21wZWcnLAogICAgICAgICdtM3UnID0+ICdhdWRpby94LW1wZWd1cmwnLAogICAgICAgICdtM3U4JyA9PiAnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnLAogICAgICAgICdtNGEnID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNGInID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNHAnID0+ICdhcHBsaWNhdGlvbi9tcDQnLAogICAgICAgICdtNHMnID0+ICd2aWRlby9pc28uc2VnbWVudCcsCiAgICAgICAgJ200dScgPT4gJ3ZpZGVvL3ZuZC5tcGVndXJsJywKICAgICAgICAnbTR2JyA9PiAndmlkZW8veC1tNHYnLAogICAgICAgICdtYScgPT4gJ2FwcGxpY2F0aW9uL21hdGhlbWF0aWNhJywKICAgICAgICAnbWFkcycgPT4gJ2FwcGxpY2F0aW9uL21hZHMreG1sJywKICAgICAgICAnbWFlaScgPT4gJ2FwcGxpY2F0aW9uL21tdC1hZWkreG1sJywKICAgICAgICAnbWFnJyA9PiAnYXBwbGljYXRpb24vdm5kLmVjb3dpbi5jaGFydCcsCiAgICAgICAgJ21ha2VyJyA9PiAnYXBwbGljYXRpb24vdm5kLmZyYW1lbWFrZXInLAogICAgICAgICdtYW4nID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAnbWFuaWZlc3QnID0+ICd0ZXh0L2NhY2hlLW1hbmlmZXN0JywKICAgICAgICAnbWFwJyA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgJ21hcicgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ21hcmtkb3duJyA9PiAndGV4dC9tYXJrZG93bicsCiAgICAgICAgJ21hdGhtbCcgPT4gJ2FwcGxpY2F0aW9uL21hdGhtbCt4bWwnLAogICAgICAgICdtYicgPT4gJ2FwcGxpY2F0aW9uL21hdGhlbWF0aWNhJywKICAgICAgICAnbWJrJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmsnLAogICAgICAgICdtYm94JyA9PiAnYXBwbGljYXRpb24vbWJveCcsCiAgICAgICAgJ21jMScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YScsCiAgICAgICAgJ21jZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tY2QnLAogICAgICAgICdtY3VybCcgPT4gJ3RleHQvdm5kLmN1cmwubWN1cmwnLAogICAgICAgICdtZCcgPT4gJ3RleHQvbWFya2Rvd24nLAogICAgICAgICdtZGInID0+ICdhcHBsaWNhdGlvbi94LW1zYWNjZXNzJywKICAgICAgICAnbWRpJyA9PiAnaW1hZ2Uvdm5kLm1zLW1vZGknLAogICAgICAgICdtZHgnID0+ICd0ZXh0L21keCcsCiAgICAgICAgJ21lJyA9PiAndGV4dC90cm9mZicsCiAgICAgICAgJ21lc2gnID0+ICdtb2RlbC9tZXNoJywKICAgICAgICAnbWV0YTQnID0+ICdhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sJywKICAgICAgICAnbWV0YWxpbmsnID0+ICdhcHBsaWNhdGlvbi9tZXRhbGluayt4bWwnLAogICAgICAgICdtZXRzJyA9PiAnYXBwbGljYXRpb24vbWV0cyt4bWwnLAogICAgICAgICdtZm0nID0+ICdhcHBsaWNhdGlvbi92bmQubWZtcCcsCiAgICAgICAgJ21mdCcgPT4gJ2FwcGxpY2F0aW9uL3Jwa2ktbWFuaWZlc3QnLAogICAgICAgICdtZ3AnID0+ICdhcHBsaWNhdGlvbi92bmQub3NnZW8ubWFwZ3VpZGUucGFja2FnZScsCiAgICAgICAgJ21neicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lJywKICAgICAgICAnbWh0JyA9PiAnbWVzc2FnZS9yZmM4MjInLAogICAgICAgICdtaHRtbCcgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnbWlkJyA9PiAnYXVkaW8vbWlkaScsCiAgICAgICAgJ21pZGknID0+ICdhdWRpby9taWRpJywKICAgICAgICAnbWllJyA9PiAnYXBwbGljYXRpb24veC1taWUnLAogICAgICAgICdtaWYnID0+ICdhcHBsaWNhdGlvbi92bmQubWlmJywKICAgICAgICAnbWltZScgPT4gJ21lc3NhZ2UvcmZjODIyJywKICAgICAgICAnbWoyJyA9PiAndmlkZW8vbWoyJywKICAgICAgICAnbWpwMicgPT4gJ3ZpZGVvL21qMicsCiAgICAgICAgJ21qcycgPT4gJ3RleHQvamF2YXNjcmlwdCcsCiAgICAgICAgJ21rM2QnID0+ICd2aWRlby9tYXRyb3NrYS0zZCcsCiAgICAgICAgJ21rYScgPT4gJ2F1ZGlvL21hdHJvc2thJywKICAgICAgICAnbWtkJyA9PiAndGV4dC94LW1hcmtkb3duJywKICAgICAgICAnbWtzJyA9PiAndmlkZW8veC1tYXRyb3NrYScsCiAgICAgICAgJ21rdicgPT4gJ3ZpZGVvL21hdHJvc2thJywKICAgICAgICAnbWxwJyA9PiAnYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1scCcsCiAgICAgICAgJ21tZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZCcsCiAgICAgICAgJ21tZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zbWFmJywKICAgICAgICAnbW1sJyA9PiAndGV4dC9tYXRobWwnLAogICAgICAgICdtbXInID0+ICdpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXInLAogICAgICAgICdtbmcnID0+ICd2aWRlby94LW1uZycsCiAgICAgICAgJ21ueScgPT4gJ2FwcGxpY2F0aW9uL3gtbXNtb25leScsCiAgICAgICAgJ21vYmknID0+ICdhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2snLAogICAgICAgICdtb2RzJyA9PiAnYXBwbGljYXRpb24vbW9kcyt4bWwnLAogICAgICAgICdtb3YnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICdtb3ZpZScgPT4gJ3ZpZGVvL3gtc2dpLW1vdmllJywKICAgICAgICAnbXAyJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgJ21wMjEnID0+ICdhcHBsaWNhdGlvbi9tcDIxJywKICAgICAgICAnbXAyYScgPT4gJ2F1ZGlvL21wZWcnLAogICAgICAgICdtcDMnID0+ICdhdWRpby9tcGVnJywKICAgICAgICAnbXA0JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXA0YScgPT4gJ2F1ZGlvL21wNCcsCiAgICAgICAgJ21wNHMnID0+ICdhcHBsaWNhdGlvbi9tcDQnLAogICAgICAgICdtcDR2JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXBjJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vcGh1bi5jZXJ0aWZpY2F0ZScsCiAgICAgICAgJ21wZCcgPT4gJ2FwcGxpY2F0aW9uL2Rhc2greG1sJywKICAgICAgICAnbXBlJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZWcnID0+ICd2aWRlby9tcGVnJywKICAgICAgICAnbXBmJyA9PiAnYXBwbGljYXRpb24vbWVkaWEtcG9saWN5LWRhdGFzZXQreG1sJywKICAgICAgICAnbXBnJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZzQnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdtcGdhJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgJ21wa2cnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBwbGUuaW5zdGFsbGVyK3htbCcsCiAgICAgICAgJ21wbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ibHVlaWNlLm11bHRpcGFzcycsCiAgICAgICAgJ21wbicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tb3BodW4uYXBwbGljYXRpb24nLAogICAgICAgICdtcHAnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcHJvamVjdCcsCiAgICAgICAgJ21wdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0JywKICAgICAgICAnbXB5JyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5taW5pcGF5JywKICAgICAgICAnbXF5JyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tcXknLAogICAgICAgICdtcmMnID0+ICdhcHBsaWNhdGlvbi9tYXJjJywKICAgICAgICAnbXJjeCcgPT4gJ2FwcGxpY2F0aW9uL21hcmN4bWwreG1sJywKICAgICAgICAnbXMnID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAnbXNjbWwnID0+ICdhcHBsaWNhdGlvbi9tZWRpYXNlcnZlcmNvbnRyb2wreG1sJywKICAgICAgICAnbXNlZWQnID0+ICdhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZCcsCiAgICAgICAgJ21zZXEnID0+ICdhcHBsaWNhdGlvbi92bmQubXNlcScsCiAgICAgICAgJ21zZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lcHNvbi5tc2YnLAogICAgICAgICdtc2cnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9vaycsCiAgICAgICAgJ21zaCcgPT4gJ21vZGVsL21lc2gnLAogICAgICAgICdtc2knID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc2l4JyA9PiAnYXBwbGljYXRpb24vbXNpeCcsCiAgICAgICAgJ21zaXhidW5kbGUnID0+ICdhcHBsaWNhdGlvbi9tc2l4YnVuZGxlJywKICAgICAgICAnbXNsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2wnLAogICAgICAgICdtc20nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc3AnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdtc3R5JyA9PiAnYXBwbGljYXRpb24vdm5kLm11dmVlLnN0eWxlJywKICAgICAgICAnbXRsJyA9PiAnbW9kZWwvbXRsJywKICAgICAgICAnbXRzJyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ211cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tdXNpY2lhbicsCiAgICAgICAgJ211c2QnID0+ICdhcHBsaWNhdGlvbi9tbXQtdXNkK3htbCcsCiAgICAgICAgJ211c2ljeG1sJyA9PiAnYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCt4bWwnLAogICAgICAgICdtdmInID0+ICdhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3JywKICAgICAgICAnbXZ0JyA9PiAnYXBwbGljYXRpb24vdm5kLm1hcGJveC12ZWN0b3ItdGlsZScsCiAgICAgICAgJ213ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tZmVyJywKICAgICAgICAnbXhmJyA9PiAnYXBwbGljYXRpb24vbXhmJywKICAgICAgICAnbXhsJyA9PiAnYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCcsCiAgICAgICAgJ214bWYnID0+ICdhdWRpby9tb2JpbGUteG1mJywKICAgICAgICAnbXhtbCcgPT4gJ2FwcGxpY2F0aW9uL3h2K3htbCcsCiAgICAgICAgJ214cycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHMnLAogICAgICAgICdteHUnID0+ICd2aWRlby92bmQubXBlZ3VybCcsCiAgICAgICAgJ24tZ2FnZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsJywKICAgICAgICAnbjMnID0+ICd0ZXh0L24zJywKICAgICAgICAnbmInID0+ICdhcHBsaWNhdGlvbi9tYXRoZW1hdGljYScsCiAgICAgICAgJ25icCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllcicsCiAgICAgICAgJ25jJyA9PiAnYXBwbGljYXRpb24veC1uZXRjZGYnLAogICAgICAgICduY3gnID0+ICdhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWwnLAogICAgICAgICduZGpzb24nID0+ICdhcHBsaWNhdGlvbi94LW5kanNvbicsCiAgICAgICAgJ25mbycgPT4gJ3RleHQveC1uZm8nLAogICAgICAgICduZ2RhdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2UuZGF0YScsCiAgICAgICAgJ25pdGYnID0+ICdhcHBsaWNhdGlvbi92bmQubml0ZicsCiAgICAgICAgJ25sdScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdScsCiAgICAgICAgJ25tbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5lbmxpdmVuJywKICAgICAgICAnbm5kJyA9PiAnYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LWRpcmVjdG9yeScsCiAgICAgICAgJ25ucycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1zZWFsZXInLAogICAgICAgICdubncnID0+ICdhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtd2ViJywKICAgICAgICAnbnB4JyA9PiAnaW1hZ2Uvdm5kLm5ldC1mcHgnLAogICAgICAgICducScgPT4gJ2FwcGxpY2F0aW9uL24tcXVhZHMnLAogICAgICAgICduc2MnID0+ICdhcHBsaWNhdGlvbi94LWNvbmZlcmVuY2UnLAogICAgICAgICduc2YnID0+ICdhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXMnLAogICAgICAgICdudCcgPT4gJ2FwcGxpY2F0aW9uL24tdHJpcGxlcycsCiAgICAgICAgJ250ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5uaXRmJywKICAgICAgICAnbnVtYmVycycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5udW1iZXJzJywKICAgICAgICAnbnpiJyA9PiAnYXBwbGljYXRpb24veC1uemInLAogICAgICAgICdvYTInID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czInLAogICAgICAgICdvYTMnID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czMnLAogICAgICAgICdvYXMnID0+ICdhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5cycsCiAgICAgICAgJ29iZCcgPT4gJ2FwcGxpY2F0aW9uL3gtbXNiaW5kZXInLAogICAgICAgICdvYmd4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW5ibG94LmdhbWUreG1sJywKICAgICAgICAnb2JqJyA9PiAnbW9kZWwvb2JqJywKICAgICAgICAnb2RhJyA9PiAnYXBwbGljYXRpb24vb2RhJywKICAgICAgICAnb2RiJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5kYXRhYmFzZScsCiAgICAgICAgJ29kYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQnLAogICAgICAgICdvZGYnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEnLAogICAgICAgICdvZGZ0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlJywKICAgICAgICAnb2RnJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcycsCiAgICAgICAgJ29kaScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UnLAogICAgICAgICdvZG0nID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtbWFzdGVyJywKICAgICAgICAnb2RwJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24nLAogICAgICAgICdvZHMnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0JywKICAgICAgICAnb2R0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0JywKICAgICAgICAnb2dhJyA9PiAnYXVkaW8vb2dnJywKICAgICAgICAnb2dleCcgPT4gJ21vZGVsL3ZuZC5vcGVuZ2V4JywKICAgICAgICAnb2dnJyA9PiAnYXVkaW8vb2dnJywKICAgICAgICAnb2d2JyA9PiAndmlkZW8vb2dnJywKICAgICAgICAnb2d4JyA9PiAnYXBwbGljYXRpb24vb2dnJywKICAgICAgICAnb21kb2MnID0+ICdhcHBsaWNhdGlvbi9vbWRvYyt4bWwnLAogICAgICAgICdvbmUnID0+ICdhcHBsaWNhdGlvbi9vbmVub3RlJywKICAgICAgICAnb25lYScgPT4gJ2FwcGxpY2F0aW9uL29uZW5vdGUnLAogICAgICAgICdvbmVwa2cnID0+ICdhcHBsaWNhdGlvbi9vbmVub3RlJywKICAgICAgICAnb25ldG1wJyA9PiAnYXBwbGljYXRpb24vb25lbm90ZScsCiAgICAgICAgJ29uZXRvYycgPT4gJ2FwcGxpY2F0aW9uL29uZW5vdGUnLAogICAgICAgICdvbmV0b2MyJyA9PiAnYXBwbGljYXRpb24vb25lbm90ZScsCiAgICAgICAgJ29wZicgPT4gJ2FwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sJywKICAgICAgICAnb3BtbCcgPT4gJ3RleHQveC1vcG1sJywKICAgICAgICAnb3ByYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wYWxtJywKICAgICAgICAnb3B1cycgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ29yZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5sb3R1cy1vcmdhbml6ZXInLAogICAgICAgICdvc2YnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdCcsCiAgICAgICAgJ29zZnB2ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWwnLAogICAgICAgICdvc20nID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnN0cmVldG1hcC5kYXRhK3htbCcsCiAgICAgICAgJ290YycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQtdGVtcGxhdGUnLAogICAgICAgICdvdGYnID0+ICdmb250L290ZicsCiAgICAgICAgJ290ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGUnLAogICAgICAgICdvdGgnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViJywKICAgICAgICAnb3RpJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZScsCiAgICAgICAgJ290cCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uLXRlbXBsYXRlJywKICAgICAgICAnb3RzJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZScsCiAgICAgICAgJ290dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZScsCiAgICAgICAgJ292YScgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmEnLAogICAgICAgICdvdmYnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtb3ZmJywKICAgICAgICAnb3dsJyA9PiAnYXBwbGljYXRpb24vcmRmK3htbCcsCiAgICAgICAgJ294cHMnID0+ICdhcHBsaWNhdGlvbi9veHBzJywKICAgICAgICAnb3h0JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW5vZmZpY2VvcmcuZXh0ZW5zaW9uJywKICAgICAgICAncCcgPT4gJ3RleHQveC1wYXNjYWwnLAogICAgICAgICdwMTAnID0+ICdhcHBsaWNhdGlvbi9wa2NzMTAnLAogICAgICAgICdwMTInID0+ICdhcHBsaWNhdGlvbi94LXBrY3MxMicsCiAgICAgICAgJ3AyMScgPT4gJ21vZGVsL3N0ZXAnLAogICAgICAgICdwN2EnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3LXNpZ25hdHVyZScsCiAgICAgICAgJ3A3YicgPT4gJ2FwcGxpY2F0aW9uL3gtcGtjczctY2VydGlmaWNhdGVzJywKICAgICAgICAncDdjJyA9PiAnYXBwbGljYXRpb24vcGtjczctbWltZScsCiAgICAgICAgJ3A3ZScgPT4gJ2FwcGxpY2F0aW9uL3BrY3M3LW1pbWUnLAogICAgICAgICdwN20nID0+ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJywKICAgICAgICAncDdyJyA9PiAnYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcCcsCiAgICAgICAgJ3A3cycgPT4gJ2FwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZScsCiAgICAgICAgJ3A4JyA9PiAnYXBwbGljYXRpb24vcGtjczgnLAogICAgICAgICdwYWMnID0+ICdhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWcnLAogICAgICAgICdwYWdlcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wYWdlcycsCiAgICAgICAgJ3BhcnF1ZXQnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnBhcnF1ZXQnLAogICAgICAgICdwYXMnID0+ICd0ZXh0L3gtcGFzY2FsJywKICAgICAgICAncGF3JyA9PiAnYXBwbGljYXRpb24vdm5kLnBhd2FhZmlsZScsCiAgICAgICAgJ3BiZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2JywKICAgICAgICAncGJtJyA9PiAnaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXAnLAogICAgICAgICdwY2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCcsCiAgICAgICAgJ3BjZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1wY2YnLAogICAgICAgICdwY2wnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtcGNsJywKICAgICAgICAncGNseGwnID0+ICdhcHBsaWNhdGlvbi92bmQuaHAtcGNseGwnLAogICAgICAgICdwY3QnID0+ICdpbWFnZS94LXBpY3QnLAogICAgICAgICdwY3VybCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsJywKICAgICAgICAncGN4JyA9PiAnaW1hZ2Uvdm5kLnpicnVzaC5wY3gnLAogICAgICAgICdwZGInID0+ICdhcHBsaWNhdGlvbi92bmQucGFsbScsCiAgICAgICAgJ3BkZScgPT4gJ3RleHQveC1wcm9jZXNzaW5nJywKICAgICAgICAncGRmJyA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAncGVtJyA9PiAnYXBwbGljYXRpb24veC14NTA5LXVzZXItY2VydCcsCiAgICAgICAgJ3BmYScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmYicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmbScgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10eXBlMScsCiAgICAgICAgJ3BmcicgPT4gJ2FwcGxpY2F0aW9uL2ZvbnQtdGRwZnInLAogICAgICAgICdwZngnID0+ICdhcHBsaWNhdGlvbi94LXBrY3MxMicsCiAgICAgICAgJ3BnbScgPT4gJ2ltYWdlL3gtcG9ydGFibGUtZ3JheW1hcCcsCiAgICAgICAgJ3BnbicgPT4gJ2FwcGxpY2F0aW9uL3gtY2hlc3MtcGduJywKICAgICAgICAncGdwJyA9PiAnYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZCcsCiAgICAgICAgJ3BoYXInID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdwaHAnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocDMnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocDQnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICAgICAgJ3BocHMnID0+ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocC1zb3VyY2UnLAogICAgICAgICdwaHRtbCcgPT4gJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJywKICAgICAgICAncGljJyA9PiAnaW1hZ2UveC1waWN0JywKICAgICAgICAncGtnJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgICAncGtpJyA9PiAnYXBwbGljYXRpb24vcGtpeGNtcCcsCiAgICAgICAgJ3BraXBhdGgnID0+ICdhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGgnLAogICAgICAgICdwa3Bhc3MnID0+ICdhcHBsaWNhdGlvbi92bmQuYXBwbGUucGtwYXNzJywKICAgICAgICAncGwnID0+ICdhcHBsaWNhdGlvbi94LXBlcmwnLAogICAgICAgICdwbGInID0+ICdhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctbGFyZ2UnLAogICAgICAgICdwbGMnID0+ICdhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsYycsCiAgICAgICAgJ3BsZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFybicsCiAgICAgICAgJ3BscycgPT4gJ2FwcGxpY2F0aW9uL3Bscyt4bWwnLAogICAgICAgICdwbScgPT4gJ2FwcGxpY2F0aW9uL3gtcGVybCcsCiAgICAgICAgJ3BtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jdGMtcG9zbWwnLAogICAgICAgICdwbmcnID0+ICdpbWFnZS9wbmcnLAogICAgICAgICdwbm0nID0+ICdpbWFnZS94LXBvcnRhYmxlLWFueW1hcCcsCiAgICAgICAgJ3BvcnRwa2cnID0+ICdhcHBsaWNhdGlvbi92bmQubWFjcG9ydHMucG9ydHBrZycsCiAgICAgICAgJ3BvdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncG90bScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ3BvdHgnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUnLAogICAgICAgICdwcGEnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsCiAgICAgICAgJ3BwYW0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcGQnID0+ICdhcHBsaWNhdGlvbi92bmQuY3Vwcy1wcGQnLAogICAgICAgICdwcG0nID0+ICdpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCcsCiAgICAgICAgJ3BwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncHBzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlc2hvdy5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcHN4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvdycsCiAgICAgICAgJ3BwdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncHB0bScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnByZXNlbnRhdGlvbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICdwcHR4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsCiAgICAgICAgJ3BxYScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wYWxtJywKICAgICAgICAncHJjJyA9PiAnbW9kZWwvcHJjJywKICAgICAgICAncHJlJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZScsCiAgICAgICAgJ3ByZicgPT4gJ2FwcGxpY2F0aW9uL3BpY3MtcnVsZXMnLAogICAgICAgICdwcm92eCcgPT4gJ2FwcGxpY2F0aW9uL3Byb3ZlbmFuY2UreG1sJywKICAgICAgICAncHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAncHNiJyA9PiAnYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsJywKICAgICAgICAncHNkJyA9PiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsCiAgICAgICAgJ3BzZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC1saW51eC1wc2YnLAogICAgICAgICdwc2tjeG1sJyA9PiAnYXBwbGljYXRpb24vcHNrYyt4bWwnLAogICAgICAgICdwdGknID0+ICdpbWFnZS9wcnMucHRpJywKICAgICAgICAncHRpZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDEnLAogICAgICAgICdwdWInID0+ICdhcHBsaWNhdGlvbi94LW1zcHVibGlzaGVyJywKICAgICAgICAncHYnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdwdmInID0+ICdhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctdmFyJywKICAgICAgICAncHduJyA9PiAnYXBwbGljYXRpb24vdm5kLjNtLnBvc3QtaXQtbm90ZXMnLAogICAgICAgICdweGYnID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdweWEnID0+ICdhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YScsCiAgICAgICAgJ3B5bycgPT4gJ21vZGVsL3ZuZC5weXRoYS5weW94JywKICAgICAgICAncHlveCcgPT4gJ21vZGVsL3ZuZC5weXRoYS5weW94JywKICAgICAgICAncHl2JyA9PiAndmlkZW8vdm5kLm1zLXBsYXlyZWFkeS5tZWRpYS5weXYnLAogICAgICAgICdxYW0nID0+ICdhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZScsCiAgICAgICAgJ3FibycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnR1LnFibycsCiAgICAgICAgJ3FmeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnR1LnFmeCcsCiAgICAgICAgJ3FwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wdWJsaXNoYXJlLWRlbHRhLXRyZWUnLAogICAgICAgICdxdCcgPT4gJ3ZpZGVvL3F1aWNrdGltZScsCiAgICAgICAgJ3F3ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F3dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4YicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4bCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3F4dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzcycsCiAgICAgICAgJ3JhJyA9PiAnYXVkaW8veC1yZWFsYXVkaW8nLAogICAgICAgICdyYW0nID0+ICdhdWRpby94LXBuLXJlYWxhdWRpbycsCiAgICAgICAgJ3JhbWwnID0+ICdhcHBsaWNhdGlvbi9yYW1sK3lhbWwnLAogICAgICAgICdyYXBkJyA9PiAnYXBwbGljYXRpb24vcm91dGUtYXBkK3htbCcsCiAgICAgICAgJ3JhcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5yYXInLAogICAgICAgICdyYXMnID0+ICdpbWFnZS94LWNtdS1yYXN0ZXInLAogICAgICAgICdyY3Byb2ZpbGUnID0+ICdhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlJywKICAgICAgICAncmRmJyA9PiAnYXBwbGljYXRpb24vcmRmK3htbCcsCiAgICAgICAgJ3JkeicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHonLAogICAgICAgICdyZWxvJyA9PiAnYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sJywKICAgICAgICAncmVwJyA9PiAnYXBwbGljYXRpb24vdm5kLmJ1c2luZXNzb2JqZWN0cycsCiAgICAgICAgJ3JlcycgPT4gJ2FwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sJywKICAgICAgICAncmdiJyA9PiAnaW1hZ2UveC1yZ2InLAogICAgICAgICdyaWYnID0+ICdhcHBsaWNhdGlvbi9yZWdpbmZvK3htbCcsCiAgICAgICAgJ3JpcCcgPT4gJ2F1ZGlvL3ZuZC5yaXAnLAogICAgICAgICdyaXMnID0+ICdhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtcycsCiAgICAgICAgJ3JsJyA9PiAnYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sJywKICAgICAgICAncmxjJyA9PiAnaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjJywKICAgICAgICAncmxkJyA9PiAnYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWwnLAogICAgICAgICdybScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEnLAogICAgICAgICdybWknID0+ICdhdWRpby9taWRpJywKICAgICAgICAncm1wJyA9PiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJywKICAgICAgICAncm1zJyA9PiAnYXBwbGljYXRpb24vdm5kLmpjcC5qYXZhbWUubWlkbGV0LXJtcycsCiAgICAgICAgJ3JtdmInID0+ICdhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhLXZicicsCiAgICAgICAgJ3JuYycgPT4gJ2FwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4JywKICAgICAgICAncm5nJyA9PiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAncm9hJyA9PiAnYXBwbGljYXRpb24vcnBraS1yb2EnLAogICAgICAgICdyb2ZmJyA9PiAndGV4dC90cm9mZicsCiAgICAgICAgJ3JwOScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jbG9hbnRvLnJwOScsCiAgICAgICAgJ3JwbScgPT4gJ2FwcGxpY2F0aW9uL3gtcmVkaGF0LXBhY2thZ2UtbWFuYWdlcicsCiAgICAgICAgJ3Jwc3MnID0+ICdhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0cycsCiAgICAgICAgJ3Jwc3QnID0+ICdhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0JywKICAgICAgICAncnEnID0+ICdhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnknLAogICAgICAgICdycycgPT4gJ2FwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWwnLAogICAgICAgICdyc2EnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3JywKICAgICAgICAncnNhdCcgPT4gJ2FwcGxpY2F0aW9uL2F0c2MtcnNhdCt4bWwnLAogICAgICAgICdyc2QnID0+ICdhcHBsaWNhdGlvbi9yc2QreG1sJywKICAgICAgICAncnNoZWV0JyA9PiAnYXBwbGljYXRpb24vdXJjLXJlc3NoZWV0K3htbCcsCiAgICAgICAgJ3JzcycgPT4gJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLAogICAgICAgICdydGYnID0+ICd0ZXh0L3J0ZicsCiAgICAgICAgJ3J0eCcgPT4gJ3RleHQvcmljaHRleHQnLAogICAgICAgICdydW4nID0+ICdhcHBsaWNhdGlvbi94LW1ha2VzZWxmJywKICAgICAgICAncnVzZCcgPT4gJ2FwcGxpY2F0aW9uL3JvdXRlLXVzZCt4bWwnLAogICAgICAgICdydicgPT4gJ3ZpZGVvL3ZuZC5ybi1yZWFsdmlkZW8nLAogICAgICAgICdzJyA9PiAndGV4dC94LWFzbScsCiAgICAgICAgJ3MzbScgPT4gJ2F1ZGlvL3MzbScsCiAgICAgICAgJ3NhZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1hdWRpbycsCiAgICAgICAgJ3Nhc3MnID0+ICd0ZXh0L3gtc2FzcycsCiAgICAgICAgJ3NibWwnID0+ICdhcHBsaWNhdGlvbi9zYm1sK3htbCcsCiAgICAgICAgJ3NjJyA9PiAnYXBwbGljYXRpb24vdm5kLmlibS5zZWN1cmUtY29udGFpbmVyJywKICAgICAgICAnc2NkJyA9PiAnYXBwbGljYXRpb24veC1tc3NjaGVkdWxlJywKICAgICAgICAnc2NtJyA9PiAnYXBwbGljYXRpb24vdm5kLmxvdHVzLXNjcmVlbmNhbScsCiAgICAgICAgJ3NjcScgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdCcsCiAgICAgICAgJ3NjcycgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2UnLAogICAgICAgICdzY3NzJyA9PiAndGV4dC94LXNjc3MnLAogICAgICAgICdzY3VybCcgPT4gJ3RleHQvdm5kLmN1cmwuc2N1cmwnLAogICAgICAgICdzZGEnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXcnLAogICAgICAgICdzZGMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmNhbGMnLAogICAgICAgICdzZGQnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3MnLAogICAgICAgICdzZGtkJyA9PiAnYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbCcsCiAgICAgICAgJ3Nka20nID0+ICdhcHBsaWNhdGlvbi92bmQuc29sZW50LnNka20reG1sJywKICAgICAgICAnc2RwJyA9PiAnYXBwbGljYXRpb24vc2RwJywKICAgICAgICAnc2R3JyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXInLAogICAgICAgICdzZWEnID0+ICdhcHBsaWNhdGlvbi94LXNlYScsCiAgICAgICAgJ3NlZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsJywKICAgICAgICAnc2VlZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5mZHNuLnNlZWQnLAogICAgICAgICdzZW1hJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWEnLAogICAgICAgICdzZW1kJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWQnLAogICAgICAgICdzZW1mJyA9PiAnYXBwbGljYXRpb24vdm5kLnNlbWYnLAogICAgICAgICdzZW5tbHgnID0+ICdhcHBsaWNhdGlvbi9zZW5tbCt4bWwnLAogICAgICAgICdzZW5zbWx4JyA9PiAnYXBwbGljYXRpb24vc2Vuc21sK3htbCcsCiAgICAgICAgJ3NlcicgPT4gJ2FwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3QnLAogICAgICAgICdzZXRwYXknID0+ICdhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uJywKICAgICAgICAnc2V0cmVnJyA9PiAnYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uJywKICAgICAgICAnc2ZkLWhkc3R4JyA9PiAnYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhJywKICAgICAgICAnc2ZzJyA9PiAnYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmcycsCiAgICAgICAgJ3NmdicgPT4gJ3RleHQveC1zZnYnLAogICAgICAgICdzZ2knID0+ICdpbWFnZS9zZ2knLAogICAgICAgICdzZ2wnID0+ICdhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWwnLAogICAgICAgICdzZ20nID0+ICd0ZXh0L3NnbWwnLAogICAgICAgICdzZ21sJyA9PiAndGV4dC9zZ21sJywKICAgICAgICAnc2gnID0+ICdhcHBsaWNhdGlvbi94LXNoJywKICAgICAgICAnc2hhcicgPT4gJ2FwcGxpY2F0aW9uL3gtc2hhcicsCiAgICAgICAgJ3NoZXgnID0+ICd0ZXh0L3NoZXgnLAogICAgICAgICdzaGYnID0+ICdhcHBsaWNhdGlvbi9zaGYreG1sJywKICAgICAgICAnc2h0bWwnID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdzaWQnID0+ICdpbWFnZS94LW1yc2lkLWltYWdlJywKICAgICAgICAnc2lldmUnID0+ICdhcHBsaWNhdGlvbi9zaWV2ZScsCiAgICAgICAgJ3NpZycgPT4gJ2FwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUnLAogICAgICAgICdzaWwnID0+ICdhdWRpby9zaWxrJywKICAgICAgICAnc2lsbycgPT4gJ21vZGVsL21lc2gnLAogICAgICAgICdzaXMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsJywKICAgICAgICAnc2lzeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGwnLAogICAgICAgICdzaXQnID0+ICdhcHBsaWNhdGlvbi94LXN0dWZmaXQnLAogICAgICAgICdzaXR4JyA9PiAnYXBwbGljYXRpb24veC1zdHVmZml0eCcsCiAgICAgICAgJ3NpdicgPT4gJ2FwcGxpY2F0aW9uL3NpZXZlJywKICAgICAgICAnc2tkJyA9PiAnYXBwbGljYXRpb24vdm5kLmtvYW4nLAogICAgICAgICdza20nID0+ICdhcHBsaWNhdGlvbi92bmQua29hbicsCiAgICAgICAgJ3NrcCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rb2FuJywKICAgICAgICAnc2t0JyA9PiAnYXBwbGljYXRpb24vdm5kLmtvYW4nLAogICAgICAgICdzbGRtJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGUubWFjcm9lbmFibGVkLjEyJywKICAgICAgICAnc2xkeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZScsCiAgICAgICAgJ3NsaW0nID0+ICd0ZXh0L3NsaW0nLAogICAgICAgICdzbG0nID0+ICd0ZXh0L3NsaW0nLAogICAgICAgICdzbHMnID0+ICdhcHBsaWNhdGlvbi9yb3V0ZS1zLXRzaWQreG1sJywKICAgICAgICAnc2x0JyA9PiAnYXBwbGljYXRpb24vdm5kLmVwc29uLnNhbHQnLAogICAgICAgICdzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0JywKICAgICAgICAnc21mJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoJywKICAgICAgICAnc21pJyA9PiAnYXBwbGljYXRpb24vc21pbCt4bWwnLAogICAgICAgICdzbWlsJyA9PiAnYXBwbGljYXRpb24vc21pbCt4bWwnLAogICAgICAgICdzbXYnID0+ICd2aWRlby94LXNtdicsCiAgICAgICAgJ3NtemlwJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0ZXBtYW5pYS5wYWNrYWdlJywKICAgICAgICAnc25kJyA9PiAnYXVkaW8vYmFzaWMnLAogICAgICAgICdzbmYnID0+ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJywKICAgICAgICAnc28nID0+ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgICdzcGMnID0+ICdhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlcycsCiAgICAgICAgJ3NwZHgnID0+ICd0ZXh0L3NwZHgnLAogICAgICAgICdzcGYnID0+ICdhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtcGhyYXNlJywKICAgICAgICAnc3BsJyA9PiAnYXBwbGljYXRpb24veC1mdXR1cmVzcGxhc2gnLAogICAgICAgICdzcG90JyA9PiAndGV4dC92bmQuaW4zZC5zcG90JywKICAgICAgICAnc3BwJyA9PiAnYXBwbGljYXRpb24vc2N2cC12cC1yZXNwb25zZScsCiAgICAgICAgJ3NwcScgPT4gJ2FwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdCcsCiAgICAgICAgJ3NweCcgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ3NxbCcgPT4gJ2FwcGxpY2F0aW9uL3NxbCcsCiAgICAgICAgJ3NxbGl0ZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcWxpdGUzJywKICAgICAgICAnc3FsaXRlMycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zcWxpdGUzJywKICAgICAgICAnc3JjJyA9PiAnYXBwbGljYXRpb24veC13YWlzLXNvdXJjZScsCiAgICAgICAgJ3NydCcgPT4gJ2FwcGxpY2F0aW9uL3gtc3VicmlwJywKICAgICAgICAnc3J1JyA9PiAnYXBwbGljYXRpb24vc3J1K3htbCcsCiAgICAgICAgJ3NyeCcgPT4gJ2FwcGxpY2F0aW9uL3NwYXJxbC1yZXN1bHRzK3htbCcsCiAgICAgICAgJ3NzZGwnID0+ICdhcHBsaWNhdGlvbi9zc2RsK3htbCcsCiAgICAgICAgJ3NzZScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yJywKICAgICAgICAnc3NmJyA9PiAnYXBwbGljYXRpb24vdm5kLmVwc29uLnNzZicsCiAgICAgICAgJ3NzbWwnID0+ICdhcHBsaWNhdGlvbi9zc21sK3htbCcsCiAgICAgICAgJ3NzdCcgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgJ3N0JyA9PiAnYXBwbGljYXRpb24vdm5kLnNhaWxpbmd0cmFja2VyLnRyYWNrJywKICAgICAgICAnc3RjJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwuY2FsYy50ZW1wbGF0ZScsCiAgICAgICAgJ3N0ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGUnLAogICAgICAgICdzdGVwJyA9PiAnbW9kZWwvc3RlcCcsCiAgICAgICAgJ3N0ZicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53dC5zdGYnLAogICAgICAgICdzdGknID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlJywKICAgICAgICAnc3RrJyA9PiAnYXBwbGljYXRpb24vaHlwZXJzdHVkaW8nLAogICAgICAgICdzdGwnID0+ICdtb2RlbC9zdGwnLAogICAgICAgICdzdHAnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnc3RwbmMnID0+ICdtb2RlbC9zdGVwJywKICAgICAgICAnc3RweCcgPT4gJ21vZGVsL3N0ZXAreG1sJywKICAgICAgICAnc3RweHonID0+ICdtb2RlbC9zdGVwLXhtbCt6aXAnLAogICAgICAgICdzdHB6JyA9PiAnbW9kZWwvc3RlcCt6aXAnLAogICAgICAgICdzdHInID0+ICdhcHBsaWNhdGlvbi92bmQucGcuZm9ybWF0JywKICAgICAgICAnc3R3JyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLnRlbXBsYXRlJywKICAgICAgICAnc3R5bCcgPT4gJ3RleHQvc3R5bHVzJywKICAgICAgICAnc3R5bHVzJyA9PiAndGV4dC9zdHlsdXMnLAogICAgICAgICdzdWInID0+ICdpbWFnZS92bmQuZHZiLnN1YnRpdGxlJywKICAgICAgICAnc3VzJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhcicsCiAgICAgICAgJ3N1c3AnID0+ICdhcHBsaWNhdGlvbi92bmQuc3VzLWNhbGVuZGFyJywKICAgICAgICAnc3Y0Y3BpbycgPT4gJ2FwcGxpY2F0aW9uL3gtc3Y0Y3BpbycsCiAgICAgICAgJ3N2NGNyYycgPT4gJ2FwcGxpY2F0aW9uL3gtc3Y0Y3JjJywKICAgICAgICAnc3ZjJyA9PiAnYXBwbGljYXRpb24vdm5kLmR2Yi5zZXJ2aWNlJywKICAgICAgICAnc3ZkJyA9PiAnYXBwbGljYXRpb24vdm5kLnN2ZCcsCiAgICAgICAgJ3N2ZycgPT4gJ2ltYWdlL3N2Zyt4bWwnLAogICAgICAgICdzdmd6JyA9PiAnaW1hZ2Uvc3ZnK3htbCcsCiAgICAgICAgJ3N3YScgPT4gJ2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLAogICAgICAgICdzd2YnID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsCiAgICAgICAgJ3N3aScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5hcmlzdGFuZXR3b3Jrcy5zd2knLAogICAgICAgICdzd2lkdGFnJyA9PiAnYXBwbGljYXRpb24vc3dpZCt4bWwnLAogICAgICAgICdzeGMnID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjJywKICAgICAgICAnc3hkJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhdycsCiAgICAgICAgJ3N4ZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWwnLAogICAgICAgICdzeGknID0+ICdhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzJywKICAgICAgICAnc3htJyA9PiAnYXBwbGljYXRpb24vdm5kLnN1bi54bWwubWF0aCcsCiAgICAgICAgJ3N4dycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlcicsCiAgICAgICAgJ3N5c3RlbXZlcmlmeScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5wcC5zeXN0ZW12ZXJpZnkreG1sJywKICAgICAgICAndCcgPT4gJ3RleHQvdHJvZmYnLAogICAgICAgICd0MycgPT4gJ2FwcGxpY2F0aW9uL3gtdDN2bS1pbWFnZScsCiAgICAgICAgJ3QzOCcgPT4gJ2ltYWdlL3QzOCcsCiAgICAgICAgJ3RhZ2xldCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5teW5mYycsCiAgICAgICAgJ3RhbycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC50YW8uaW50ZW50LW1vZHVsZS1hcmNoaXZlJywKICAgICAgICAndGFwJyA9PiAnaW1hZ2Uvdm5kLnRlbmNlbnQudGFwJywKICAgICAgICAndGFyJyA9PiAnYXBwbGljYXRpb24veC10YXInLAogICAgICAgICd0Y2FwJyA9PiAnYXBwbGljYXRpb24vdm5kLjNncHAyLnRjYXAnLAogICAgICAgICd0Y2wnID0+ICdhcHBsaWNhdGlvbi94LXRjbCcsCiAgICAgICAgJ3RkJyA9PiAnYXBwbGljYXRpb24vdXJjLXRhcmdldGRlc2MreG1sJywKICAgICAgICAndGVhY2hlcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zbWFydC50ZWFjaGVyJywKICAgICAgICAndGVpJyA9PiAnYXBwbGljYXRpb24vdGVpK3htbCcsCiAgICAgICAgJ3RlaWNvcnB1cycgPT4gJ2FwcGxpY2F0aW9uL3RlaSt4bWwnLAogICAgICAgICd0ZXgnID0+ICdhcHBsaWNhdGlvbi94LXRleCcsCiAgICAgICAgJ3RleGknID0+ICdhcHBsaWNhdGlvbi94LXRleGluZm8nLAogICAgICAgICd0ZXhpbmZvJyA9PiAnYXBwbGljYXRpb24veC10ZXhpbmZvJywKICAgICAgICAndGV4dCcgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICd0ZmknID0+ICdhcHBsaWNhdGlvbi90aHJhdWQreG1sJywKICAgICAgICAndGZtJyA9PiAnYXBwbGljYXRpb24veC10ZXgtdGZtJywKICAgICAgICAndGZ4JyA9PiAnaW1hZ2UvdGlmZi1meCcsCiAgICAgICAgJ3RnYScgPT4gJ2ltYWdlL3gtdGdhJywKICAgICAgICAndGd6JyA9PiAnYXBwbGljYXRpb24vZ3ppcCcsCiAgICAgICAgJ3RobXgnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWUnLAogICAgICAgICd0aWYnID0+ICdpbWFnZS90aWZmJywKICAgICAgICAndGlmZicgPT4gJ2ltYWdlL3RpZmYnLAogICAgICAgICd0aycgPT4gJ2FwcGxpY2F0aW9uL3gtdGNsJywKICAgICAgICAndG1vJyA9PiAnYXBwbGljYXRpb24vdm5kLnRtb2JpbGUtbGl2ZXR2JywKICAgICAgICAndG9tbCcgPT4gJ2FwcGxpY2F0aW9uL3RvbWwnLAogICAgICAgICd0b3JyZW50JyA9PiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JywKICAgICAgICAndHBsJyA9PiAnYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLXRlbXBsYXRlJywKICAgICAgICAndHB0JyA9PiAnYXBwbGljYXRpb24vdm5kLnRyaWQudHB0JywKICAgICAgICAndHInID0+ICd0ZXh0L3Ryb2ZmJywKICAgICAgICAndHJhJyA9PiAnYXBwbGljYXRpb24vdm5kLnRydWVhcHAnLAogICAgICAgICd0cmlnJyA9PiAnYXBwbGljYXRpb24vdHJpZycsCiAgICAgICAgJ3RybScgPT4gJ2FwcGxpY2F0aW9uL3gtbXN0ZXJtaW5hbCcsCiAgICAgICAgJ3RzJyA9PiAndmlkZW8vbXAydCcsCiAgICAgICAgJ3RzZCcgPT4gJ2FwcGxpY2F0aW9uL3RpbWVzdGFtcGVkLWRhdGEnLAogICAgICAgICd0c3YnID0+ICd0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzJywKICAgICAgICAndHRjJyA9PiAnZm9udC9jb2xsZWN0aW9uJywKICAgICAgICAndHRmJyA9PiAnZm9udC90dGYnLAogICAgICAgICd0dGwnID0+ICd0ZXh0L3R1cnRsZScsCiAgICAgICAgJ3R0bWwnID0+ICdhcHBsaWNhdGlvbi90dG1sK3htbCcsCiAgICAgICAgJ3R3ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zaW10ZWNoLW1pbmRtYXBwZXInLAogICAgICAgICd0d2RzJyA9PiAnYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlcicsCiAgICAgICAgJ3R4ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5nZW5vbWF0aXgudHV4ZWRvJywKICAgICAgICAndHhmJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vYml1cy50eGYnLAogICAgICAgICd0eHQnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAndTMyJyA9PiAnYXBwbGljYXRpb24veC1hdXRob3J3YXJlLWJpbicsCiAgICAgICAgJ3UzZCcgPT4gJ21vZGVsL3UzZCcsCiAgICAgICAgJ3U4ZHNuJyA9PiAnbWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzJywKICAgICAgICAndThoZHInID0+ICdtZXNzYWdlL2dsb2JhbC1oZWFkZXJzJywKICAgICAgICAndThtZG4nID0+ICdtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb24nLAogICAgICAgICd1OG1zZycgPT4gJ21lc3NhZ2UvZ2xvYmFsJywKICAgICAgICAndWJqJyA9PiAnYXBwbGljYXRpb24vdWJqc29uJywKICAgICAgICAndWRlYicgPT4gJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLAogICAgICAgICd1ZmQnID0+ICdhcHBsaWNhdGlvbi92bmQudWZkbCcsCiAgICAgICAgJ3VmZGwnID0+ICdhcHBsaWNhdGlvbi92bmQudWZkbCcsCiAgICAgICAgJ3VseCcgPT4gJ2FwcGxpY2F0aW9uL3gtZ2x1bHgnLAogICAgICAgICd1bWonID0+ICdhcHBsaWNhdGlvbi92bmQudW1hamluJywKICAgICAgICAndW5pdHl3ZWInID0+ICdhcHBsaWNhdGlvbi92bmQudW5pdHknLAogICAgICAgICd1bycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC51b21sK3htbCcsCiAgICAgICAgJ3VvbWwnID0+ICdhcHBsaWNhdGlvbi92bmQudW9tbCt4bWwnLAogICAgICAgICd1cmknID0+ICd0ZXh0L3VyaS1saXN0JywKICAgICAgICAndXJpcycgPT4gJ3RleHQvdXJpLWxpc3QnLAogICAgICAgICd1cmxzJyA9PiAndGV4dC91cmktbGlzdCcsCiAgICAgICAgJ3VzZGEnID0+ICdtb2RlbC92bmQudXNkYScsCiAgICAgICAgJ3VzZHonID0+ICdtb2RlbC92bmQudXNkeit6aXAnLAogICAgICAgICd1c3RhcicgPT4gJ2FwcGxpY2F0aW9uL3gtdXN0YXInLAogICAgICAgICd1dHonID0+ICdhcHBsaWNhdGlvbi92bmQudWlxLnRoZW1lJywKICAgICAgICAndXUnID0+ICd0ZXh0L3gtdXVlbmNvZGUnLAogICAgICAgICd1dmEnID0+ICdhdWRpby92bmQuZGVjZS5hdWRpbycsCiAgICAgICAgJ3V2ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLmRhdGEnLAogICAgICAgICd1dmYnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS5kYXRhJywKICAgICAgICAndXZnJyA9PiAnaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYycsCiAgICAgICAgJ3V2aCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLmhkJywKICAgICAgICAndXZpJyA9PiAnaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYycsCiAgICAgICAgJ3V2bScgPT4gJ3ZpZGVvL3ZuZC5kZWNlLm1vYmlsZScsCiAgICAgICAgJ3V2cCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnBkJywKICAgICAgICAndXZzJyA9PiAndmlkZW8vdm5kLmRlY2Uuc2QnLAogICAgICAgICd1dnQnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS50dG1sK3htbCcsCiAgICAgICAgJ3V2dScgPT4gJ3ZpZGVvL3ZuZC51dnZ1Lm1wNCcsCiAgICAgICAgJ3V2dicgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnZpZGVvJywKICAgICAgICAndXZ2YScgPT4gJ2F1ZGlvL3ZuZC5kZWNlLmF1ZGlvJywKICAgICAgICAndXZ2ZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLmRhdGEnLAogICAgICAgICd1dnZmJyA9PiAnYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YScsCiAgICAgICAgJ3V2dmcnID0+ICdpbWFnZS92bmQuZGVjZS5ncmFwaGljJywKICAgICAgICAndXZ2aCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLmhkJywKICAgICAgICAndXZ2aScgPT4gJ2ltYWdlL3ZuZC5kZWNlLmdyYXBoaWMnLAogICAgICAgICd1dnZtJyA9PiAndmlkZW8vdm5kLmRlY2UubW9iaWxlJywKICAgICAgICAndXZ2cCcgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnBkJywKICAgICAgICAndXZ2cycgPT4gJ3ZpZGVvL3ZuZC5kZWNlLnNkJywKICAgICAgICAndXZ2dCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLnR0bWwreG1sJywKICAgICAgICAndXZ2dScgPT4gJ3ZpZGVvL3ZuZC51dnZ1Lm1wNCcsCiAgICAgICAgJ3V2dnYnID0+ICd2aWRlby92bmQuZGVjZS52aWRlbycsCiAgICAgICAgJ3V2dngnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZCcsCiAgICAgICAgJ3V2dnonID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS56aXAnLAogICAgICAgICd1dngnID0+ICdhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZCcsCiAgICAgICAgJ3V2eicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5kZWNlLnppcCcsCiAgICAgICAgJ3Zib3gnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdmJveCcsCiAgICAgICAgJ3Zib3gtZXh0cGFjaycgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12Ym94LWV4dHBhY2snLAogICAgICAgICd2Y2FyZCcgPT4gJ3RleHQvdmNhcmQnLAogICAgICAgICd2Y2QnID0+ICdhcHBsaWNhdGlvbi94LWNkbGluaycsCiAgICAgICAgJ3ZjZicgPT4gJ3RleHQveC12Y2FyZCcsCiAgICAgICAgJ3ZjZycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdmNhcmQnLAogICAgICAgICd2Y3MnID0+ICd0ZXh0L3gtdmNhbGVuZGFyJywKICAgICAgICAndmN4JyA9PiAnYXBwbGljYXRpb24vdm5kLnZjeCcsCiAgICAgICAgJ3ZkaScgPT4gJ2FwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGknLAogICAgICAgICd2ZHMnID0+ICdtb2RlbC92bmQuc2FwLnZkcycsCiAgICAgICAgJ3ZkeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy12aXNpby52aWV3ZXInLAogICAgICAgICd2ZWMnID0+ICdhcHBsaWNhdGlvbi92ZWMreG1sJywKICAgICAgICAndmhkJyA9PiAnYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZoZCcsCiAgICAgICAgJ3ZpcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnknLAogICAgICAgICd2aXYnID0+ICd2aWRlby92bmQudml2bycsCiAgICAgICAgJ3ZtZGsnID0+ICdhcHBsaWNhdGlvbi94LXZpcnR1YWxib3gtdm1kaycsCiAgICAgICAgJ3ZvYicgPT4gJ3ZpZGVvL3gtbXMtdm9iJywKICAgICAgICAndm9yJyA9PiAnYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXInLAogICAgICAgICd2b3gnID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAndnJtbCcgPT4gJ21vZGVsL3ZybWwnLAogICAgICAgICd2c2QnID0+ICdhcHBsaWNhdGlvbi92bmQudmlzaW8nLAogICAgICAgICd2c2R4JyA9PiAnYXBwbGljYXRpb24vdm5kLnZpc2lvJywKICAgICAgICAndnNmJyA9PiAnYXBwbGljYXRpb24vdm5kLnZzZicsCiAgICAgICAgJ3ZzcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3ZzdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3ZzdycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3Z0ZicgPT4gJ2ltYWdlL3ZuZC52YWx2ZS5zb3VyY2UudGV4dHVyZScsCiAgICAgICAgJ3Z0dCcgPT4gJ3RleHQvdnR0JywKICAgICAgICAndnR1JyA9PiAnbW9kZWwvdm5kLnZ0dScsCiAgICAgICAgJ3Z0eCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC52aXNpbycsCiAgICAgICAgJ3Z4bWwnID0+ICdhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWwnLAogICAgICAgICd3M2QnID0+ICdhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywKICAgICAgICAnd2FkJyA9PiAnYXBwbGljYXRpb24veC1kb29tJywKICAgICAgICAnd2FkbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zdW4ud2FkbCt4bWwnLAogICAgICAgICd3YXInID0+ICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnLAogICAgICAgICd3YXNtJyA9PiAnYXBwbGljYXRpb24vd2FzbScsCiAgICAgICAgJ3dhdicgPT4gJ2F1ZGlvL3dhdicsCiAgICAgICAgJ3dheCcgPT4gJ2F1ZGlvL3gtbXMtd2F4JywKICAgICAgICAnd2JtcCcgPT4gJ2ltYWdlL3ZuZC53YXAud2JtcCcsCiAgICAgICAgJ3dicycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWwnLAogICAgICAgICd3YnhtbCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWwnLAogICAgICAgICd3Y20nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29ya3MnLAogICAgICAgICd3ZGInID0+ICdhcHBsaWNhdGlvbi92bmQubXMtd29ya3MnLAogICAgICAgICd3ZHAnID0+ICdpbWFnZS92bmQubXMtcGhvdG8nLAogICAgICAgICd3ZWJhJyA9PiAnYXVkaW8vd2VibScsCiAgICAgICAgJ3dlYmFwcCcgPT4gJ2FwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uJywKICAgICAgICAnd2VibScgPT4gJ3ZpZGVvL3dlYm0nLAogICAgICAgICd3ZWJtYW5pZmVzdCcgPT4gJ2FwcGxpY2F0aW9uL21hbmlmZXN0K2pzb24nLAogICAgICAgICd3ZWJwJyA9PiAnaW1hZ2Uvd2VicCcsCiAgICAgICAgJ3dnJyA9PiAnYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXQnLAogICAgICAgICd3Z3NsJyA9PiAndGV4dC93Z3NsJywKICAgICAgICAnd2d0JyA9PiAnYXBwbGljYXRpb24vd2lkZ2V0JywKICAgICAgICAnd2lmJyA9PiAnYXBwbGljYXRpb24vd2F0Y2hlcmluZm8reG1sJywKICAgICAgICAnd2tzJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzJywKICAgICAgICAnd20nID0+ICd2aWRlby94LW1zLXdtJywKICAgICAgICAnd21hJyA9PiAnYXVkaW8veC1tcy13bWEnLAogICAgICAgICd3bWQnID0+ICdhcHBsaWNhdGlvbi94LW1zLXdtZCcsCiAgICAgICAgJ3dtZicgPT4gJ2ltYWdlL3dtZicsCiAgICAgICAgJ3dtbCcgPT4gJ3RleHQvdm5kLndhcC53bWwnLAogICAgICAgICd3bWxjJyA9PiAnYXBwbGljYXRpb24vdm5kLndhcC53bWxjJywKICAgICAgICAnd21scycgPT4gJ3RleHQvdm5kLndhcC53bWxzY3JpcHQnLAogICAgICAgICd3bWxzYycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53YXAud21sc2NyaXB0YycsCiAgICAgICAgJ3dtdicgPT4gJ3ZpZGVvL3gtbXMtd212JywKICAgICAgICAnd214JyA9PiAndmlkZW8veC1tcy13bXgnLAogICAgICAgICd3bXonID0+ICdhcHBsaWNhdGlvbi94LW1zLXdteicsCiAgICAgICAgJ3dvZmYnID0+ICdmb250L3dvZmYnLAogICAgICAgICd3b2ZmMicgPT4gJ2ZvbnQvd29mZjInLAogICAgICAgICd3b3JkJyA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywKICAgICAgICAnd3BkJyA9PiAnYXBwbGljYXRpb24vdm5kLndvcmRwZXJmZWN0JywKICAgICAgICAnd3BsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLXdwbCcsCiAgICAgICAgJ3dwcycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy13b3JrcycsCiAgICAgICAgJ3dxZCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC53cWQnLAogICAgICAgICd3cmknID0+ICdhcHBsaWNhdGlvbi94LW1zd3JpdGUnLAogICAgICAgICd3cmwnID0+ICdtb2RlbC92cm1sJywKICAgICAgICAnd3NjJyA9PiAnbWVzc2FnZS92bmQud2ZhLndzYycsCiAgICAgICAgJ3dzZGwnID0+ICdhcHBsaWNhdGlvbi93c2RsK3htbCcsCiAgICAgICAgJ3dzcG9saWN5JyA9PiAnYXBwbGljYXRpb24vd3Nwb2xpY3kreG1sJywKICAgICAgICAnd3RiJyA9PiAnYXBwbGljYXRpb24vdm5kLndlYnR1cmJvJywKICAgICAgICAnd3Z4JyA9PiAndmlkZW8veC1tcy13dngnLAogICAgICAgICd4MzInID0+ICdhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluJywKICAgICAgICAneDNkJyA9PiAnbW9kZWwveDNkK3htbCcsCiAgICAgICAgJ3gzZGInID0+ICdtb2RlbC94M2QrZmFzdGluZm9zZXQnLAogICAgICAgICd4M2RieicgPT4gJ21vZGVsL3gzZCtiaW5hcnknLAogICAgICAgICd4M2R2JyA9PiAnbW9kZWwveDNkLXZybWwnLAogICAgICAgICd4M2R2eicgPT4gJ21vZGVsL3gzZCt2cm1sJywKICAgICAgICAneDNkeicgPT4gJ21vZGVsL3gzZCt4bWwnLAogICAgICAgICd4X2InID0+ICdtb2RlbC92bmQucGFyYXNvbGlkLnRyYW5zbWl0LmJpbmFyeScsCiAgICAgICAgJ3hfdCcgPT4gJ21vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dCcsCiAgICAgICAgJ3hhbWwnID0+ICdhcHBsaWNhdGlvbi94YW1sK3htbCcsCiAgICAgICAgJ3hhcCcgPT4gJ2FwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtYXBwJywKICAgICAgICAneGFyJyA9PiAnYXBwbGljYXRpb24vdm5kLnhhcmEnLAogICAgICAgICd4YXYnID0+ICdhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWwnLAogICAgICAgICd4YmFwJyA9PiAnYXBwbGljYXRpb24veC1tcy14YmFwJywKICAgICAgICAneGJkJyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuYmluZGVyJywKICAgICAgICAneGJtJyA9PiAnaW1hZ2UveC14Yml0bWFwJywKICAgICAgICAneGNhJyA9PiAnYXBwbGljYXRpb24veGNhcC1jYXBzK3htbCcsCiAgICAgICAgJ3hjcycgPT4gJ2FwcGxpY2F0aW9uL2NhbGVuZGFyK3htbCcsCiAgICAgICAgJ3hkY2YnID0+ICdhcHBsaWNhdGlvbi92bmQuZ292LnNrLnhtbGRhdGFjb250YWluZXIreG1sJywKICAgICAgICAneGRmJyA9PiAnYXBwbGljYXRpb24veGNhcC1kaWZmK3htbCcsCiAgICAgICAgJ3hkbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0reG1sJywKICAgICAgICAneGRwJyA9PiAnYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWwnLAogICAgICAgICd4ZHNzYycgPT4gJ2FwcGxpY2F0aW9uL2Rzc2MreG1sJywKICAgICAgICAneGR3JyA9PiAnYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MnLAogICAgICAgICd4ZWwnID0+ICdhcHBsaWNhdGlvbi94Y2FwLWVsK3htbCcsCiAgICAgICAgJ3hlbmMnID0+ICdhcHBsaWNhdGlvbi94ZW5jK3htbCcsCiAgICAgICAgJ3hlcicgPT4gJ2FwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWwnLAogICAgICAgICd4ZmRmJyA9PiAnYXBwbGljYXRpb24veGZkZicsCiAgICAgICAgJ3hmZGwnID0+ICdhcHBsaWNhdGlvbi92bmQueGZkbCcsCiAgICAgICAgJ3hodCcgPT4gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsCiAgICAgICAgJ3hodG0nID0+ICdhcHBsaWNhdGlvbi92bmQucHdnLXhodG1sLXByaW50K3htbCcsCiAgICAgICAgJ3hodG1sJyA9PiAnYXBwbGljYXRpb24veGh0bWwreG1sJywKICAgICAgICAneGh2bWwnID0+ICdhcHBsaWNhdGlvbi94dit4bWwnLAogICAgICAgICd4aWYnID0+ICdpbWFnZS92bmQueGlmZicsCiAgICAgICAgJ3hsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneGxhJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneGxhbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICd4bGMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bGYnID0+ICdhcHBsaWNhdGlvbi94bGlmZit4bWwnLAogICAgICAgICd4bG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bHMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bHNiJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTInLAogICAgICAgICd4bHNtJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMicsCiAgICAgICAgJ3hsc3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsCiAgICAgICAgJ3hsdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsCiAgICAgICAgJ3hsdG0nID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyJywKICAgICAgICAneGx0eCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlJywKICAgICAgICAneGx3JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneG0nID0+ICdhdWRpby94bScsCiAgICAgICAgJ3htbCcgPT4gJ2FwcGxpY2F0aW9uL3htbCcsCiAgICAgICAgJ3hucycgPT4gJ2FwcGxpY2F0aW9uL3hjYXAtbnMreG1sJywKICAgICAgICAneG8nID0+ICdhcHBsaWNhdGlvbi92bmQub2xwYy1zdWdhcicsCiAgICAgICAgJ3hvcCcgPT4gJ2FwcGxpY2F0aW9uL3hvcCt4bWwnLAogICAgICAgICd4cGknID0+ICdhcHBsaWNhdGlvbi94LXhwaW5zdGFsbCcsCiAgICAgICAgJ3hwbCcgPT4gJ2FwcGxpY2F0aW9uL3hwcm9jK3htbCcsCiAgICAgICAgJ3hwbScgPT4gJ2ltYWdlL3gteHBpeG1hcCcsCiAgICAgICAgJ3hwcicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pcy14cHInLAogICAgICAgICd4cHMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMteHBzZG9jdW1lbnQnLAogICAgICAgICd4cHcnID0+ICdhcHBsaWNhdGlvbi92bmQuaW50ZXJjb24uZm9ybW5ldCcsCiAgICAgICAgJ3hweCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5pbnRlcmNvbi5mb3JtbmV0JywKICAgICAgICAneHNkJyA9PiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAneHNmJyA9PiAnYXBwbGljYXRpb24vcHJzLnhzZit4bWwnLAogICAgICAgICd4c2wnID0+ICdhcHBsaWNhdGlvbi94c2x0K3htbCcsCiAgICAgICAgJ3hzbHQnID0+ICdhcHBsaWNhdGlvbi94c2x0K3htbCcsCiAgICAgICAgJ3hzbScgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sJywKICAgICAgICAneHNwZicgPT4gJ2FwcGxpY2F0aW9uL3hzcGYreG1sJywKICAgICAgICAneHVsJyA9PiAnYXBwbGljYXRpb24vdm5kLm1vemlsbGEueHVsK3htbCcsCiAgICAgICAgJ3h2bScgPT4gJ2FwcGxpY2F0aW9uL3h2K3htbCcsCiAgICAgICAgJ3h2bWwnID0+ICdhcHBsaWNhdGlvbi94dit4bWwnLAogICAgICAgICd4d2QnID0+ICdpbWFnZS94LXh3aW5kb3dkdW1wJywKICAgICAgICAneHl6JyA9PiAnY2hlbWljYWwveC14eXonLAogICAgICAgICd4eicgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAogICAgICAgICd5YW1sJyA9PiAndGV4dC95YW1sJywKICAgICAgICAneWFuZycgPT4gJ2FwcGxpY2F0aW9uL3lhbmcnLAogICAgICAgICd5aW4nID0+ICdhcHBsaWNhdGlvbi95aW4reG1sJywKICAgICAgICAneW1sJyA9PiAndGV4dC95YW1sJywKICAgICAgICAneW1wJyA9PiAndGV4dC94LXN1c2UteW1wJywKICAgICAgICAneicgPT4gJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3MnLAogICAgICAgICd6MScgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6MicgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6MycgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NCcgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NScgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NicgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6NycgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6OCcgPT4gJ2FwcGxpY2F0aW9uL3gtem1hY2hpbmUnLAogICAgICAgICd6YXonID0+ICdhcHBsaWNhdGlvbi92bmQuenphenouZGVjayt4bWwnLAogICAgICAgICd6aXAnID0+ICdhcHBsaWNhdGlvbi96aXAnLAogICAgICAgICd6aXInID0+ICdhcHBsaWNhdGlvbi92bmQuenVsJywKICAgICAgICAnemlyeicgPT4gJ2FwcGxpY2F0aW9uL3ZuZC56dWwnLAogICAgICAgICd6bW0nID0+ICdhcHBsaWNhdGlvbi92bmQuaGFuZGhlbGQtZW50ZXJ0YWlubWVudCt4bWwnLAogICAgICAgICd6c2gnID0+ICd0ZXh0L3gtc2NyaXB0enNoJywKICAgIF07CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIHRoZSBtaW1ldHlwZSBvZiBhIGZpbGUgYnkgbG9va2luZyBhdCBpdHMgZXh0ZW5zaW9uLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pzaHR0cC9taW1lLWRiL21hc3Rlci9kYi5qc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUZpbGVuYW1lKHN0cmluZyAkZmlsZW5hbWUpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZyb21FeHRlbnNpb24ocGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1hcHMgYSBmaWxlIGV4dGVuc2lvbnMgdG8gYSBtaW1ldHlwZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qc2h0dHAvbWltZS1kYi9tYXN0ZXIvZGIuanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21FeHRlbnNpb24oc3RyaW5nICRleHRlbnNpb24pOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ok1JTUVfVFlQRVNbc3RydG9sb3dlcigkZXh0ZW5zaW9uKV0gPz8gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MultipartStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gdGhhdCB3aGVuIHJlYWQgcmV0dXJucyBieXRlcyBmb3IgYSBzdHJlYW1pbmcgbXVsdGlwYXJ0IG9yCiAqIG11bHRpcGFydC9mb3JtLWRhdGEgc3RyZWFtLgogKi8KZmluYWwgY2xhc3MgTXVsdGlwYXJ0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJGJvdW5kYXJ5OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHByaXZhdGUgY29uc3QgQk9VTkRBUllfQ0hBUlMgPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonKCkrXywtLi86PT8gIjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAkZWxlbWVudHMgQXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCAibmFtZSIga2V5IG1hcHBpbmcgdG8gdGhlIGZvcm0gZmllbGQsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGEgcmVxdWlyZWQgImNvbnRlbnRzIiBrZXkgbWFwcGluZyB0byBhbnkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uLWFycmF5IHZhbHVlIGFjY2VwdGVkIGJ5IFV0aWxzOjpzdHJlYW1Gb3IoKQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXN0cmluZyBzY2FsYXIgZmllbGQgdmFsdWVzIGFyZSBjYXN0IHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyksIG9yIGFuIGFycmF5IGZvciBuZXN0ZWQgZXhwYW5zaW9uLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBrZXlzIGluY2x1ZGUgImhlYWRlcnMiIChhc3NvY2lhdGl2ZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBvZiBjdXN0b20gaGVhZGVycykgYW5kICJmaWxlbmFtZSIgKHN0cmluZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzZW5kIGFzIHRoZSBmaWxlbmFtZSBpbiB0aGUgcGFydCkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gImNvbnRlbnRzIiBpcyBhbiBhcnJheSwgaXQgaXMgcmVjdXJzaXZlbHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgaW50byBtdWx0aXBsZSBmaWVsZHMgdXNpbmcgYnJhY2tldCBub3RhdGlvbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiwgbmFtZVswXVtrZXldKS4gRW1wdHkgYXJyYXlzIHByb2R1Y2Ugbm8gZmllbGRzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgImZpbGVuYW1lIiBhbmQgImhlYWRlcnMiIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhcnJheSBjb250ZW50cy4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYm91bmRhcnkgWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBzcGVjaWZpYyBib3VuZGFyeQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGVsZW1lbnRzID0gW10sID9zdHJpbmcgJGJvdW5kYXJ5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGJvdW5kYXJ5ICE9PSBudWxsICYmICFzZWxmOjppc1ZhbGlkQm91bmRhcnkoJGJvdW5kYXJ5KSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgYW4gaW52YWxpZCBtdWx0aXBhcnQgYm91bmRhcnkgdG8gTXVsdGlwYXJ0U3RyZWFtOjpfX2NvbnN0cnVjdCgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVqZWN0cyBpbnZhbGlkIG11bHRpcGFydCBib3VuZGFyaWVzLicKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ib3VuZGFyeSA9ICRib3VuZGFyeSA/OiBiaW4yaGV4KHJhbmRvbV9ieXRlcygyMCkpOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGhpcy0+Y3JlYXRlU3RyZWFtKCRlbGVtZW50cyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvdW5kYXJ5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ym91bmRhcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaGVhZGVycyBuZWVkZWQgYmVmb3JlIHRyYW5zZmVycmluZyB0aGUgY29udGVudCBvZiBhIFBPU1QgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIHN0cmluZz4gJGhlYWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRIZWFkZXJzKGFycmF5ICRoZWFkZXJzKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHN0ciA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRrZXkgPSAoc3RyaW5nKSAka2V5OwogICAgICAgICAgICAkc3RyIC49ICJ7JGtleX06IHskdmFsdWV9XHJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIi0teyR0aGlzLT5ib3VuZGFyeX1cclxuIi50cmltKCRzdHIpLiJcclxuXHJcbiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIGFnZ3JlZ2F0ZSBzdHJlYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBsb2FkIHRoZSBQT1NUIGRhdGEKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbShhcnJheSAkZWxlbWVudHMgPSBbXSk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgICRzdHJlYW0gPSBuZXcgQXBwZW5kU3RyZWFtKCk7CgogICAgICAgIGZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZWxlbWVudCkgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRlbGVtZW50KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0FuIGFycmF5IGlzIGV4cGVjdGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmFkZEVsZW1lbnQoJHN0cmVhbSwgJGVsZW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSB0cmFpbGluZyBib3VuZGFyeSB3aXRoIENSTEYKICAgICAgICAkc3RyZWFtLT5hZGRTdHJlYW0oVXRpbHM6OnN0cmVhbUZvcigiLS17JHRoaXMtPmJvdW5kYXJ5fS0tXHJcbiIpKTsKCiAgICAgICAgcmV0dXJuICRzdHJlYW07CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRFbGVtZW50KEFwcGVuZFN0cmVhbSAkc3RyZWFtLCBhcnJheSAkZWxlbWVudCk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoIChbJ2NvbnRlbnRzJywgJ25hbWUnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBICd7JGtleX0nIGtleSBpcyByZXF1aXJlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX3N0cmluZygkZWxlbWVudFsnbmFtZSddKSAmJiAhaXNfaW50KCRlbGVtZW50WyduYW1lJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgJ25hbWUnIGtleSBtdXN0IGJlIGEgc3RyaW5nIG9yIGludGVnZXIiKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19hcnJheSgkZWxlbWVudFsnY29udGVudHMnXSkpIHsKICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2ZpbGVuYW1lJywgJGVsZW1lbnQpIHx8IGFycmF5X2tleV9leGlzdHMoJ2hlYWRlcnMnLCAkZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICJUaGUgJ2ZpbGVuYW1lJyBhbmQgJ2hlYWRlcnMnIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgd2hlbiAnY29udGVudHMnIGlzIGFuIGFycmF5IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmFkZE5lc3RlZEVsZW1lbnRzKCRzdHJlYW0sICRlbGVtZW50Wydjb250ZW50cyddLCAoc3RyaW5nKSAkZWxlbWVudFsnbmFtZSddKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRjb250ZW50cyA9ICRlbGVtZW50Wydjb250ZW50cyddOwogICAgICAgIGlmIChpc19zY2FsYXIoJGNvbnRlbnRzKSAmJiAhaXNfc3RyaW5nKCRjb250ZW50cykpIHsKICAgICAgICAgICAgLy8gTXVsdGlwYXJ0IGZpZWxkIHZhbHVlcyBhcmUgYnl0ZSBzdHJpbmdzIG9uIHRoZSB3aXJlLCBzbyBmaW5pdGUKICAgICAgICAgICAgLy8gbnVtZXJpYyBhbmQgYm9vbGVhbiBmaWVsZCB2YWx1ZXMgYXJlIGNhc3QgdG8gc3RyaW5nIGhlcmUgcmF0aGVyCiAgICAgICAgICAgIC8vIHRoYW4gdHJpcHBpbmcgc3RyZWFtRm9yKCkncyBub24tc3RyaW5nLXNjYWxhciBkZXByZWNhdGlvbi4gTm9uLWZpbml0ZQogICAgICAgICAgICAvLyBmbG9hdHMgYXJlIGRlcHJlY2F0ZWQgYW5kIG5vcm1hbGl6ZWQgaGVyZSB0b28sIHNvIHRoZSBkZXByZWNhdGlvbiBpcwogICAgICAgICAgICAvLyByZXBvcnRlZCBhZ2FpbnN0IE11bHRpcGFydFN0cmVhbSBpbnN0ZWFkIG9mIHRyYW5zaXRpdmVseSB0aHJvdWdoCiAgICAgICAgICAgIC8vIHN0cmVhbUZvcigpLgogICAgICAgICAgICBpZiAoaXNfZmxvYXQoJGNvbnRlbnRzKSAmJiAhaXNfZmluaXRlKCRjb250ZW50cykpIHsKICAgICAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgICAgICcyLjEyJywKICAgICAgICAgICAgICAgICAgICAnUGFzc2luZyBhIG5vbi1maW5pdGUgZmxvYXQgYXMgbXVsdGlwYXJ0IGNvbnRlbnRzIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVqZWN0cyBub24tZmluaXRlIGZsb2F0cy4nCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRjb250ZW50cyA9IGlzX25hbigkY29udGVudHMpID8gJ05BTicgOiAoJGNvbnRlbnRzID4gMCA/ICdJTkYnIDogJy1JTkYnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbnRlbnRzID0gKHN0cmluZykgJGNvbnRlbnRzOwogICAgICAgIH0KICAgICAgICAkZWxlbWVudFsnY29udGVudHMnXSA9IFV0aWxzOjpzdHJlYW1Gb3IoJGNvbnRlbnRzKTsKCiAgICAgICAgaWYgKGVtcHR5KCRlbGVtZW50WydmaWxlbmFtZSddKSkgewogICAgICAgICAgICAkdXJpID0gJGVsZW1lbnRbJ2NvbnRlbnRzJ10tPmdldE1ldGFkYXRhKCd1cmknKTsKICAgICAgICAgICAgaWYgKCR1cmkgJiYgXGlzX3N0cmluZygkdXJpKSAmJiBcc3Vic3RyKCR1cmksIDAsIDYpICE9PSAncGhwOi8vJyAmJiBcc3Vic3RyKCR1cmksIDAsIDcpICE9PSAnZGF0YTovLycpIHsKICAgICAgICAgICAgICAgICRlbGVtZW50WydmaWxlbmFtZSddID0gJHVyaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgWyRib2R5LCAkaGVhZGVyc10gPSAkdGhpcy0+Y3JlYXRlRWxlbWVudCgKICAgICAgICAgICAgKHN0cmluZykgJGVsZW1lbnRbJ25hbWUnXSwKICAgICAgICAgICAgJGVsZW1lbnRbJ2NvbnRlbnRzJ10sCiAgICAgICAgICAgICRlbGVtZW50WydmaWxlbmFtZSddID8/IG51bGwsCiAgICAgICAgICAgICRlbGVtZW50WydoZWFkZXJzJ10gPz8gW10KICAgICAgICApOwoKICAgICAgICAkc3RyZWFtLT5hZGRTdHJlYW0oVXRpbHM6OnN0cmVhbUZvcigkdGhpcy0+Z2V0SGVhZGVycygkaGVhZGVycykpKTsKICAgICAgICAkc3RyZWFtLT5hZGRTdHJlYW0oJGJvZHkpOwogICAgICAgICRzdHJlYW0tPmFkZFN0cmVhbShVdGlsczo6c3RyZWFtRm9yKCJcclxuIikpOwogICAgfQoKICAgIC8qKgogICAgICogUmVjdXJzaXZlbHkgZXhwYW5kIGFycmF5IGNvbnRlbnRzIGludG8gbXVsdGlwbGUgZm9ybSBmaWVsZHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgbWl4ZWQ+ICRjb250ZW50cwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZE5lc3RlZEVsZW1lbnRzKEFwcGVuZFN0cmVhbSAkc3RyZWFtLCBhcnJheSAkY29udGVudHMsIHN0cmluZyAkcm9vdCk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY29udGVudHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGZpZWxkTmFtZSA9ICRyb290ID09PSAnJyA/IHNwcmludGYoJ1slc10nLCAoc3RyaW5nKSAka2V5KSA6IHNwcmludGYoJyVzWyVzXScsICRyb290LCAoc3RyaW5nKSAka2V5KTsKCiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YWRkTmVzdGVkRWxlbWVudHMoJHN0cmVhbSwgJHZhbHVlLCAkZmllbGROYW1lKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hZGRFbGVtZW50KCRzdHJlYW0sIFsnbmFtZScgPT4gJGZpZWxkTmFtZSwgJ2NvbnRlbnRzJyA9PiAkdmFsdWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIG1peGVkPiAkaGVhZGVycwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDogU3RyZWFtSW50ZXJmYWNlLCAxOiBhcnJheTxhcnJheS1rZXksIHN0cmluZz59CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlRWxlbWVudChzdHJpbmcgJG5hbWUsIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCA/c3RyaW5nICRmaWxlbmFtZSwgYXJyYXkgJGhlYWRlcnMpOiBhcnJheQogICAgewogICAgICAgICRoZWFkZXJzID0gc2VsZjo6bm9ybWFsaXplUGFydEhlYWRlcnMoJGhlYWRlcnMpOwoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtZGlzcG9zaXRpb24gaGVhZGVyIGlmIG9uZSB3YXMgbm8gcHJvdmlkZWQKICAgICAgICAkZGlzcG9zaXRpb24gPSBzZWxmOjpnZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWRpc3Bvc2l0aW9uJyk7CiAgICAgICAgaWYgKCEkZGlzcG9zaXRpb24pIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICgkZmlsZW5hbWUgPT09ICcwJyB8fCAkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICA/IHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ2Zvcm0tZGF0YTsgbmFtZT0iJXMiOyBmaWxlbmFtZT0iJXMiJywKICAgICAgICAgICAgICAgICAgICAkbmFtZSwKICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSgkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICA6ICJmb3JtLWRhdGE7IG5hbWU9XCJ7JG5hbWV9XCIiOwogICAgICAgIH0KCiAgICAgICAgLy8gU2V0IGEgZGVmYXVsdCBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgb25lIHdhcyBubyBwcm92aWRlZAogICAgICAgICRsZW5ndGggPSBzZWxmOjpnZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcpOwogICAgICAgIGlmICghJGxlbmd0aCkgewogICAgICAgICAgICBpZiAoJGxlbmd0aCA9ICRzdHJlYW0tPmdldFNpemUoKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAoc3RyaW5nKSAkbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IENvbnRlbnQtVHlwZSBpZiBvbmUgd2FzIG5vdCBzdXBwbGllZAogICAgICAgICR0eXBlID0gc2VsZjo6Z2V0SGVhZGVyKCRoZWFkZXJzLCAnY29udGVudC10eXBlJyk7CiAgICAgICAgaWYgKCEkdHlwZSAmJiAoJGZpbGVuYW1lID09PSAnMCcgfHwgJGZpbGVuYW1lKSkgewogICAgICAgICAgICAkaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBNaW1lVHlwZTo6ZnJvbUZpbGVuYW1lKCRmaWxlbmFtZSkgPz8gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRzdHJlYW0sICRoZWFkZXJzXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIHN0cmluZz4gJGhlYWRlcnMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SGVhZGVyKGFycmF5ICRoZWFkZXJzLCBzdHJpbmcgJGtleSk6ID9zdHJpbmcKICAgIHsKICAgICAgICAkbG93ZXJjYXNlSGVhZGVyID0gc3RydG9sb3dlcigka2V5KTsKICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoc3RydG9sb3dlcigoc3RyaW5nKSAkaykgPT09ICRsb3dlcmNhc2VIZWFkZXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZEJvdW5kYXJ5KHN0cmluZyAkYm91bmRhcnkpOiBib29sCiAgICB7CiAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkYm91bmRhcnkpOwoKICAgICAgICBpZiAoJGxlbmd0aCA8IDEgfHwgJGxlbmd0aCA+IDcwIHx8ICRib3VuZGFyeVskbGVuZ3RoIC0gMV0gPT09ICcgJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Ryc3BuKCRib3VuZGFyeSwgc2VsZjo6Qk9VTkRBUllfQ0hBUlMpID09PSAkbGVuZ3RoOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgbWl4ZWQ+ICRoZWFkZXJzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplUGFydEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpOiBhcnJheQogICAgewogICAgICAgICRub3JtYWxpemVkID0gW107CgogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIHNlbGY6OmRlcHJlY2F0ZUludmFsaWRQYXJ0SGVhZGVyTmFtZSgoc3RyaW5nKSAka2V5KTsKCiAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNfc2NhbGFyKCR2YWx1ZSkgJiYgJHZhbHVlICE9PSBudWxsICYmICEoaXNfb2JqZWN0KCR2YWx1ZSkgJiYgbWV0aG9kX2V4aXN0cygkdmFsdWUsICdfX3RvU3RyaW5nJykpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpcGFydCBwYXJ0IGhlYWRlciB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHN0cmluZ2FibGUgdmFsdWUgYnV0ICVzIHByb3ZpZGVkLicsCiAgICAgICAgICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIGFzIGEgbXVsdGlwYXJ0IHBhcnQgaGVhZGVyIHZhbHVlIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIG11bHRpcGFydCBwYXJ0IGhlYWRlciB2YWx1ZXMuJywKICAgICAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHZhbHVlKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHZhbHVlID0gKHN0cmluZykgJHZhbHVlOwoKICAgICAgICAgICAgc2VsZjo6ZGVwcmVjYXRlSW52YWxpZFBhcnRIZWFkZXJWYWx1ZSgkdmFsdWUpOwoKICAgICAgICAgICAgJG5vcm1hbGl6ZWRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vcm1hbGl6ZWQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVwcmVjYXRlSW52YWxpZFBhcnRIZWFkZXJOYW1lKHN0cmluZyAkbmFtZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9eW2EtekEtWjAtOVwnYCMkJSYqKy5eX3x+IS1dKyQvRCcsICRuYW1lKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgYW4gaW52YWxpZCBtdWx0aXBhcnQgcGFydCBoZWFkZXIgbmFtZSB0byBNdWx0aXBhcnRTdHJlYW0gaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZWplY3RzIGludmFsaWQgbXVsdGlwYXJ0IHBhcnQgaGVhZGVyIG5hbWVzLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVwcmVjYXRlSW52YWxpZFBhcnRIZWFkZXJWYWx1ZShzdHJpbmcgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15bXHgyMFx4MDlceDIxLVx4N0VceDgwLVx4RkZdKiQvRCcsICR2YWx1ZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nIGFuIGludmFsaWQgbXVsdGlwYXJ0IHBhcnQgaGVhZGVyIHZhbHVlIHRvIE11bHRpcGFydFN0cmVhbSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlamVjdHMgaW52YWxpZCBtdWx0aXBhcnQgcGFydCBoZWFkZXIgdmFsdWVzLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/NoSeekStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgcHJldmVudHMgYSBzdHJlYW0gZnJvbSBiZWluZyBzZWVrZWQuCiAqLwpmaW5hbCBjbGFzcyBOb1NlZWtTdHJlYW0gaW1wbGVtZW50cyBTdHJlYW1JbnRlcmZhY2UKewogICAgdXNlIFN0cmVhbURlY29yYXRvclRyYWl0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJG9mZnNldCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkb2Zmc2V0LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJG9mZnNldCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2ludCgkd2hlbmNlKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICR3aGVuY2UuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkd2hlbmNlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgc2VlayBhIE5vU2Vla1N0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/PumpStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIHJlYWQgb25seSBzdHJlYW0gdGhhdCBwdW1wcyBkYXRhIGZyb20gYSBQSFAgY2FsbGFibGUuCiAqCiAqIFdoZW4gaW52b2tpbmcgdGhlIHByb3ZpZGVkIGNhbGxhYmxlLCB0aGUgUHVtcFN0cmVhbSB3aWxsIHBhc3MgdGhlIHN1Z2dlc3RlZAogKiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCB0byB0aGUgY2FsbGFibGUuIFRoZSBjYWxsYWJsZSBjYW4gY2hvb3NlIHRvIGlnbm9yZQogKiB0aGlzIHZhbHVlIGFuZCByZXR1cm4gZmV3ZXIgb3IgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4gQW55IGV4dHJhIGRhdGEKICogcmV0dXJuZWQgYnkgdGhlIGNhbGxhYmxlIGlzIGJ1ZmZlcmVkIGludGVybmFsbHkgdW50aWwgZHJhaW5lZCB1c2luZyB0aGUKICogcmVhZCgpIGZ1bmN0aW9uIG9mIHRoZSBQdW1wU3RyZWFtLiBUaGUgY2FsbGFibGUgTVVTVCByZXR1cm4gZmFsc2Ugb3IgbnVsbAogKiB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZWFkLgogKgogKiBVc2VybGFuZCBjYWxsYWJsZXMgdGhhdCBkZWNsYXJlIG5vIHBhcmFtZXRlcnMgYXJlIHRvbGVyYXRlZCBieSBQSFAsIGJ1dAogKiBsZW5ndGgtYXdhcmUgY2FsbGFibGVzIHJlbWFpbiB0aGUgcmVjb21tZW5kZWQgZm9ybWFsIHNoYXBlLgogKi8KZmluYWwgY2xhc3MgUHVtcFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZXxudWxsICovCiAgICBwcml2YXRlICRzb3VyY2U7CgogICAgLyoqIEB2YXIgaW50fG51bGwgKi8KICAgIHByaXZhdGUgJHNpemU7CgogICAgLyoqIEB2YXIgaW50ICovCiAgICBwcml2YXRlICR0ZWxsUG9zID0gMDsKCiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHJpdmF0ZSAkbWV0YWRhdGE7CgogICAgLyoqIEB2YXIgQnVmZmVyU3RyZWFtICovCiAgICBwcml2YXRlICRidWZmZXI7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gKGNhbGxhYmxlKCk6IChzdHJpbmd8ZmFsc2V8bnVsbCkpfChjYWxsYWJsZShpbnQpOiAoc3RyaW5nfGZhbHNlfG51bGwpKSAkc291cmNlICBTb3VyY2Ugb2YgdGhlIHN0cmVhbSBkYXRhLiBUaGUgY2FsbGFibGUgcmVjZWl2ZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdWdnZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQsIG1heSBpZ25vcmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdmFsdWUsIGFuZCBtYXkgcmV0dXJuIGZld2VyIG9yIG1vcmUgYnl0ZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYSBieXRlcyBhcmUgYnVmZmVyZWQuIFRoZSBjYWxsYWJsZSBNVVNUIHJldHVybgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcgd2hlbiBjYWxsZWQsIG9yIGZhbHNlfG51bGwgb24gZXJyb3Igb3IgRU9GLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcmxhbmQgY2FsbGFibGVzIHRoYXQgZGVjbGFyZSBubyBwYXJhbWV0ZXJzIGFyZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVkIGJ5IFBIUCwgYnV0IGxlbmd0aC1hd2FyZSBjYWxsYWJsZXMgcmVtYWluCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjb21tZW5kZWQgZm9ybWFsIHNoYXBlLgogICAgICogQHBhcmFtIGFycmF5e3NpemU/OiBpbnQsIG1ldGFkYXRhPzogYXJyYXl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgU3RyZWFtIG9wdGlvbnM6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIG1ldGFkYXRhOiBIYXNoIG9mIG1ldGFkYXRhIHRvIHVzZSB3aXRoIHN0cmVhbS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZTogU2l6ZSBvZiB0aGUgc3RyZWFtLCBpZiBrbm93bi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRzb3VyY2UsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnNvdXJjZSA9ICRzb3VyY2U7CiAgICAgICAgJHRoaXMtPnNpemUgPSAkb3B0aW9uc1snc2l6ZSddID8/IG51bGw7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhID0gJG9wdGlvbnNbJ21ldGFkYXRhJ10gPz8gW107CiAgICAgICAgJHRoaXMtPmJ1ZmZlciA9IG5ldyBCdWZmZXJTdHJlYW0oKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gVXRpbHM6OmNvcHlUb1N0cmluZygkdGhpcyk7CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICBpZiAoXFBIUF9WRVJTSU9OX0lEID49IDcwNDAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKHNwcmludGYoJyVzOjpfX3RvU3RyaW5nIGV4Y2VwdGlvbjogJXMnLCBzZWxmOjpjbGFzcywgKHN0cmluZykgJGUpLCBFX1VTRVJfRVJST1IpOwoKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5kZXRhY2goKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCkKICAgIHsKICAgICAgICAkdGhpcy0+dGVsbFBvcyA9IDA7CiAgICAgICAgJHRoaXMtPnNvdXJjZSA9IG51bGw7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpemU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZWxsUG9zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c291cmNlID09PSBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTogdm9pZAogICAgewogICAgICAgIGlmICghXGlzX2ludCgkb2Zmc2V0KSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRvZmZzZXQuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkb2Zmc2V0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfaW50KCR3aGVuY2UpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJHdoZW5jZS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCR3aGVuY2UpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBzZWVrIGEgUHVtcFN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpOiBpbnQKICAgIHsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJHN0cmluZykpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6d3JpdGUoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZyBmb3IgJHN0cmluZy4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRzdHJpbmcpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB3cml0ZSB0byBhIFB1bXBTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICghXGlzX2ludCgkbGVuZ3RoKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpyZWFkKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRsZW5ndGguJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkbGVuZ3RoKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+YnVmZmVyLT5yZWFkKCRsZW5ndGgpOwogICAgICAgICRyZWFkTGVuID0gc3RybGVuKCRkYXRhKTsKICAgICAgICAkdGhpcy0+dGVsbFBvcyArPSAkcmVhZExlbjsKICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aCAtICRyZWFkTGVuOwoKICAgICAgICBpZiAoJHJlbWFpbmluZykgewogICAgICAgICAgICAkdGhpcy0+cHVtcCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJGRhdGEgLj0gJHRoaXMtPmJ1ZmZlci0+cmVhZCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJHRoaXMtPnRlbGxQb3MgKz0gc3RybGVuKCRkYXRhKSAtICRyZWFkTGVuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgd2hpbGUgKCEkdGhpcy0+ZW9mKCkpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+cmVhZCgxMDAwMDAwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRrZXkgIT09IG51bGwgJiYgIVxpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6Z2V0TWV0YWRhdGEoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZ3xudWxsIGZvciAka2V5LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGtleSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGtleSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGFkYXRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5tZXRhZGF0YVska2V5XSA/PyBudWxsOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHVtcChpbnQgJGxlbmd0aCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnNvdXJjZSAhPT0gbnVsbCkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICgkdGhpcy0+c291cmNlKSgkbGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmICgkZGF0YSA9PT0gZmFsc2UgfHwgJGRhdGEgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c291cmNlID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlci0+d3JpdGUoJGRhdGEpOwogICAgICAgICAgICAgICAgJGxlbmd0aCAtPSBzdHJsZW4oJGRhdGEpOwogICAgICAgICAgICB9IHdoaWxlICgkbGVuZ3RoID4gMCk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCmZpbmFsIGNsYXNzIFF1ZXJ5CnsKICAgIC8qKgogICAgICogUGFyc2UgYSBxdWVyeSBzdHJpbmcgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICAgICAqCiAgICAgKiBJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGZvdW5kIGZvciB0aGUgc2FtZSBrZXksIHRoZSB2YWx1ZSBvZiB0aGF0IGtleQogICAgICogdmFsdWUgcGFpciB3aWxsIGJlY29tZSBhbiBhcnJheS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwYXJzZSBuZXN0ZWQKICAgICAqIFBIUCBzdHlsZSBhcnJheXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgYGZvb1thXT0xJmZvb1tiXT0yYAogICAgICogd2lsbCBiZSBwYXJzZWQgaW50byBgWydmb29bYV0nID0+ICcxJywgJ2Zvb1tiXScgPT4gJzInXSlgLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkc3RyICAgICAgICAgUXVlcnkgc3RyaW5nIHRvIHBhcnNlCiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJHVybEVuY29kaW5nIEhvdyB0aGUgcXVlcnkgc3RyaW5nIGlzIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZShzdHJpbmcgJHN0ciwgJHVybEVuY29kaW5nID0gdHJ1ZSk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFtdOwoKICAgICAgICBpZiAoJHN0ciA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHVybEVuY29kaW5nID09PSB0cnVlKSB7CiAgICAgICAgICAgICRkZWNvZGVyID0gZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZShzdHJfcmVwbGFjZSgnKycsICcgJywgKHN0cmluZykgJHZhbHVlKSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlaWYgKCR1cmxFbmNvZGluZyA9PT0gUEhQX1FVRVJZX1JGQzM5ODYpIHsKICAgICAgICAgICAgJGRlY29kZXIgPSAncmF3dXJsZGVjb2RlJzsKICAgICAgICB9IGVsc2VpZiAoJHVybEVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMTczOCkgewogICAgICAgICAgICAkZGVjb2RlciA9ICd1cmxkZWNvZGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWNvZGVyID0gZnVuY3Rpb24gKCRzdHIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnJicsICRzdHIpIGFzICRrdnApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnPScsICRrdnAsIDIpOwogICAgICAgICAgICAka2V5ID0gJGRlY29kZXIoJHBhcnRzWzBdKTsKICAgICAgICAgICAgJHZhbHVlID0gaXNzZXQoJHBhcnRzWzFdKSA/ICRkZWNvZGVyKCRwYXJ0c1sxXSkgOiBudWxsOwogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRyZXN1bHRbJGtleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdFska2V5XSA9IFskcmVzdWx0WyRrZXldXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXN1bHRbJGtleV1bXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZCBhIHF1ZXJ5IHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIGtleSB2YWx1ZSBwYWlycy4KICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiB1c2UgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGFyc2UoKWAgdG8gYnVpbGQgYSBxdWVyeQogICAgICogc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSB0aGUgcHJvdmlkZWQga2V5cyB3aGVuIGFuIGFycmF5IGlzCiAgICAgKiBlbmNvdW50ZXJlZCAobGlrZSBgaHR0cF9idWlsZF9xdWVyeSgpYCB3b3VsZCkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICAkcGFyYW1zICAgICAgICAgICBRdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4KICAgICAqIEBwYXJhbSBpbnR8ZmFsc2UgJGVuY29kaW5nICAgICAgICAgU2V0IHRvIGZhbHNlIHRvIG5vdCBlbmNvZGUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIUF9RVUVSWV9SRkMzOTg2IHRvIGVuY29kZSB1c2luZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMzOTg2LCBvciBQSFBfUVVFUllfUkZDMTczOCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGUgdXNpbmcgUkZDMTczOC4KICAgICAqIEBwYXJhbSBib29sICAgICAgJHRyZWF0Qm9vbHNBc0ludHMgU2V0IHRvIHRydWUgdG8gZW5jb2RlIGFzIDAvMSwgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIGFzIGZhbHNlL3RydWUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGQoYXJyYXkgJHBhcmFtcywgJGVuY29kaW5nID0gUEhQX1FVRVJZX1JGQzM5ODYsIGJvb2wgJHRyZWF0Qm9vbHNBc0ludHMgPSB0cnVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEkcGFyYW1zKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIGlmICgkZW5jb2RpbmcgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRlbmNvZGVyID0gZnVuY3Rpb24gKHN0cmluZyAkc3RyKTogc3RyaW5nIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgPT09IFBIUF9RVUVSWV9SRkMzOTg2KSB7CiAgICAgICAgICAgICRlbmNvZGVyID0gJ3Jhd3VybGVuY29kZSc7CiAgICAgICAgfSBlbHNlaWYgKCRlbmNvZGluZyA9PT0gUEhQX1FVRVJZX1JGQzE3MzgpIHsKICAgICAgICAgICAgJGVuY29kZXIgPSAndXJsZW5jb2RlJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB0eXBlJyk7CiAgICAgICAgfQoKICAgICAgICAkY2FzdEJvb2wgPSAkdHJlYXRCb29sc0FzSW50cyA/IHN0YXRpYyBmdW5jdGlvbiAoJHYpIHsgcmV0dXJuIChpbnQpICR2OyB9IDogc3RhdGljIGZ1bmN0aW9uICgkdikgeyByZXR1cm4gJHYgPyAndHJ1ZScgOiAnZmFsc2UnOyB9OwoKICAgICAgICAkcXMgPSAnJzsKICAgICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICRrID0gJGVuY29kZXIoKHN0cmluZykgJGspOwogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCR2KSkgewogICAgICAgICAgICAgICAgJHFzIC49ICRrOwogICAgICAgICAgICAgICAgJHYgPSBpc19ib29sKCR2KSA/ICRjYXN0Qm9vbCgkdikgOiBzZWxmOjpub3JtYWxpemVOb25GaW5pdGVGbG9hdCgkdik7CiAgICAgICAgICAgICAgICBpZiAoJHYgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkcXMgLj0gJz0nLiRlbmNvZGVyKChzdHJpbmcpICR2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRxcyAuPSAnJic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdiBhcyAkdnYpIHsKICAgICAgICAgICAgICAgICAgICAkcXMgLj0gJGs7CiAgICAgICAgICAgICAgICAgICAgJHZ2ID0gaXNfYm9vbCgkdnYpID8gJGNhc3RCb29sKCR2dikgOiBzZWxmOjpub3JtYWxpemVOb25GaW5pdGVGbG9hdCgkdnYpOwogICAgICAgICAgICAgICAgICAgIGlmICgkdnYgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHFzIC49ICc9Jy4kZW5jb2Rlcigoc3RyaW5nKSAkdnYpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkcXMgLj0gJyYnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHFzID8gKHN0cmluZykgc3Vic3RyKCRxcywgMCwgLTEpIDogJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBub24tZmluaXRlIGZsb2F0cyB0byB0aGUgc3RyaW5ncyBQSFAgY29lcmNlcyB0aGVtIHRvLCBhcwogICAgICogaW1wbGljaXQgY29lcmNpb24gb2YgTkFOIGVtaXRzIGEgd2FybmluZyBvbiBQSFAgOC41LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZU5vbkZpbml0ZUZsb2F0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfZmxvYXQoJHZhbHVlKSAmJiAhaXNfZmluaXRlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjEyJywKICAgICAgICAgICAgICAgICdQYXNzaW5nIGEgbm9uLWZpbml0ZSBmbG9hdCB0byBRdWVyeTo6YnVpbGQoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlamVjdHMgbm9uLWZpbml0ZSBmbG9hdHMuJwogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuIGlzX25hbigkdmFsdWUpID8gJ05BTicgOiAoJHZhbHVlID4gMCA/ICdJTkYnIDogJy1JTkYnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Request.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IHJlcXVlc3QgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICB1c2UgTWVzc2FnZVRyYWl0OwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkbWV0aG9kOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRyZXF1ZXN0VGFyZ2V0OwoKICAgIC8qKiBAdmFyIFVyaUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAkdXJpICAgICBVUkkKICAgICAqIEBwYXJhbSAoc3RyaW5nfHN0cmluZ1tdKVtdICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfFN0cmVhbUludGVyZmFjZXxudWxsICRib2R5ICAgIFJlcXVlc3QgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJG1ldGhvZCwKICAgICAgICAkdXJpLAogICAgICAgIGFycmF5ICRoZWFkZXJzID0gW10sCiAgICAgICAgJGJvZHkgPSBudWxsLAogICAgICAgIHN0cmluZyAkdmVyc2lvbiA9ICcxLjEnCiAgICApIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0TWV0aG9kKCRtZXRob2QpOwogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICAkdXJpID0gbmV3IFVyaSgkdXJpKTsKICAgICAgICB9CgogICAgICAgIHNlbGY6Ondhcm5Pbk1ldGhvZENhc2luZ0NoYW5nZSgkbWV0aG9kKTsKICAgICAgICAkdGhpcy0+bWV0aG9kID0gc3RydG91cHBlcigkbWV0aG9kKTsKICAgICAgICAkdGhpcy0+dXJpID0gJHVyaTsKICAgICAgICAkdGhpcy0+c2V0SGVhZGVycygkaGVhZGVycyk7CiAgICAgICAgJHRoaXMtPnByb3RvY29sID0gJHZlcnNpb247CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGVIb3N0RnJvbVVyaSgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRib2R5ICE9PSAnJyAmJiAkYm9keSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gVXRpbHM6OnN0cmVhbUZvcigkYm9keSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VGFyZ2V0KCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+cmVxdWVzdFRhcmdldCAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RUYXJnZXQ7CiAgICAgICAgfQoKICAgICAgICAkdGFyZ2V0ID0gJHRoaXMtPnVyaS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgkdGFyZ2V0ID09PSAnJykgewogICAgICAgICAgICAkdGFyZ2V0ID0gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPnVyaS0+Z2V0UXVlcnkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0IC49ICc/Jy4kdGhpcy0+dXJpLT5nZXRRdWVyeSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0YXJnZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhSZXF1ZXN0VGFyZ2V0KCRyZXF1ZXN0VGFyZ2V0KTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcjXHMjJywgJHJlcXVlc3RUYXJnZXQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnSW52YWxpZCByZXF1ZXN0IHRhcmdldCBwcm92aWRlZDsgY2Fubm90IGNvbnRhaW4gd2hpdGVzcGFjZScKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5yZXF1ZXN0VGFyZ2V0ID0gJHJlcXVlc3RUYXJnZXQ7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRob2QoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tZXRob2Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhNZXRob2QoJG1ldGhvZCk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0TWV0aG9kKCRtZXRob2QpOwogICAgICAgIHNlbGY6Ondhcm5Pbk1ldGhvZENhc2luZ0NoYW5nZSgkbWV0aG9kKTsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+bWV0aG9kID0gc3RydG91cHBlcigkbWV0aG9kKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVyaSgpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVyaTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVyaShVcmlJbnRlcmZhY2UgJHVyaSwgJHByZXNlcnZlSG9zdCA9IGZhbHNlKTogUmVxdWVzdEludGVyZmFjZQogICAgewogICAgICAgIGlmICghXGlzX2Jvb2woJHByZXNlcnZlSG9zdCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFJlcXVlc3RJbnRlcmZhY2U6OndpdGhVcmkoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGJvb2wgZm9yICRwcmVzZXJ2ZUhvc3QuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkcHJlc2VydmVIb3N0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1cmkgPT09ICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnVyaSA9ICR1cmk7CgogICAgICAgIGlmICghJHByZXNlcnZlSG9zdCB8fCAhaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10pKSB7CiAgICAgICAgICAgICRuZXctPnVwZGF0ZUhvc3RGcm9tVXJpKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZUhvc3RGcm9tVXJpKCk6IHZvaWQKICAgIHsKICAgICAgICAkaG9zdCA9ICR0aGlzLT51cmktPmdldEhvc3QoKTsKCiAgICAgICAgaWYgKCRob3N0ID09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIFVyaTo6YXNzZXJ0VmFsaWRIb3N0KCRob3N0KTsKCiAgICAgICAgaWYgKCgkcG9ydCA9ICR0aGlzLT51cmktPmdldFBvcnQoKSkgIT09IG51bGwpIHsKICAgICAgICAgICAgJGhvc3QgLj0gJzonLiRwb3J0OwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFzc2VydFZhbHVlKCRob3N0KTsKCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5oZWFkZXJOYW1lc1snaG9zdCddKSkgewogICAgICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGhlYWRlciA9ICdIb3N0JzsKICAgICAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10gPSAnSG9zdCc7CiAgICAgICAgfQogICAgICAgIC8vIEVuc3VyZSBIb3N0IGlzIHRoZSBmaXJzdCBoZWFkZXIuCiAgICAgICAgLy8gU2VlOiBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi01LjQKICAgICAgICAkdGhpcy0+aGVhZGVycyA9IFskaGVhZGVyID0+IFskaG9zdF1dICsgJHRoaXMtPmhlYWRlcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1ldGhvZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydE1ldGhvZCgkbWV0aG9kKTogdm9pZAogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRtZXRob2QpIHx8ICRtZXRob2QgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ01ldGhvZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2Fybk9uTWV0aG9kQ2FzaW5nQ2hhbmdlKHN0cmluZyAkbWV0aG9kKTogdm9pZAogICAgewogICAgICAgIGlmICgkbWV0aG9kICE9PSBzdHJ0b3VwcGVyKCRtZXRob2QpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyBhIG5vbi11cHBlcmNhc2UgSFRUUCBtZXRob2QgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCBwcmVzZXJ2ZXMgbWV0aG9kIGNhc2luZyBhbmQgd2lsbCBubyBsb25nZXIgdXBwZXJjYXNlIGl0LiBOb3JtYWxpemUgdGhlIG1ldGhvZCBiZWZvcmUgY29uc3RydWN0aW5nIG9yIG1vZGlmeWluZyByZXF1ZXN0cyBpZiB1cHBlcmNhc2UgaXMgcmVxdWlyZWQuJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Response.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUFNSLTcgcmVzcG9uc2UgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXNwb25zZSBpbXBsZW1lbnRzIFJlc3BvbnNlSW50ZXJmYWNlCnsKICAgIHVzZSBNZXNzYWdlVHJhaXQ7CgogICAgLyoqIE1hcCBvZiBzdGFuZGFyZCBIVFRQIHN0YXR1cyBjb2RlL3JlYXNvbiBwaHJhc2VzICovCiAgICBwcml2YXRlIGNvbnN0IFBIUkFTRVMgPSBbCiAgICAgICAgMTAwID0+ICdDb250aW51ZScsCiAgICAgICAgMTAxID0+ICdTd2l0Y2hpbmcgUHJvdG9jb2xzJywKICAgICAgICAxMDIgPT4gJ1Byb2Nlc3NpbmcnLAogICAgICAgIDIwMCA9PiAnT0snLAogICAgICAgIDIwMSA9PiAnQ3JlYXRlZCcsCiAgICAgICAgMjAyID0+ICdBY2NlcHRlZCcsCiAgICAgICAgMjAzID0+ICdOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbicsCiAgICAgICAgMjA0ID0+ICdObyBDb250ZW50JywKICAgICAgICAyMDUgPT4gJ1Jlc2V0IENvbnRlbnQnLAogICAgICAgIDIwNiA9PiAnUGFydGlhbCBDb250ZW50JywKICAgICAgICAyMDcgPT4gJ011bHRpLXN0YXR1cycsCiAgICAgICAgMjA4ID0+ICdBbHJlYWR5IFJlcG9ydGVkJywKICAgICAgICAzMDAgPT4gJ011bHRpcGxlIENob2ljZXMnLAogICAgICAgIDMwMSA9PiAnTW92ZWQgUGVybWFuZW50bHknLAogICAgICAgIDMwMiA9PiAnRm91bmQnLAogICAgICAgIDMwMyA9PiAnU2VlIE90aGVyJywKICAgICAgICAzMDQgPT4gJ05vdCBNb2RpZmllZCcsCiAgICAgICAgMzA1ID0+ICdVc2UgUHJveHknLAogICAgICAgIDMwNiA9PiAnU3dpdGNoIFByb3h5JywKICAgICAgICAzMDcgPT4gJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCiAgICAgICAgMzA4ID0+ICdQZXJtYW5lbnQgUmVkaXJlY3QnLAogICAgICAgIDQwMCA9PiAnQmFkIFJlcXVlc3QnLAogICAgICAgIDQwMSA9PiAnVW5hdXRob3JpemVkJywKICAgICAgICA0MDIgPT4gJ1BheW1lbnQgUmVxdWlyZWQnLAogICAgICAgIDQwMyA9PiAnRm9yYmlkZGVuJywKICAgICAgICA0MDQgPT4gJ05vdCBGb3VuZCcsCiAgICAgICAgNDA1ID0+ICdNZXRob2QgTm90IEFsbG93ZWQnLAogICAgICAgIDQwNiA9PiAnTm90IEFjY2VwdGFibGUnLAogICAgICAgIDQwNyA9PiAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgICAgIDQwOCA9PiAnUmVxdWVzdCBUaW1lLW91dCcsCiAgICAgICAgNDA5ID0+ICdDb25mbGljdCcsCiAgICAgICAgNDEwID0+ICdHb25lJywKICAgICAgICA0MTEgPT4gJ0xlbmd0aCBSZXF1aXJlZCcsCiAgICAgICAgNDEyID0+ICdQcmVjb25kaXRpb24gRmFpbGVkJywKICAgICAgICA0MTMgPT4gJ1JlcXVlc3QgRW50aXR5IFRvbyBMYXJnZScsCiAgICAgICAgNDE0ID0+ICdSZXF1ZXN0LVVSSSBUb28gTGFyZ2UnLAogICAgICAgIDQxNSA9PiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCiAgICAgICAgNDE2ID0+ICdSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmlhYmxlJywKICAgICAgICA0MTcgPT4gJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCiAgICAgICAgNDE4ID0+ICdJXCdtIGEgdGVhcG90JywKICAgICAgICA0MjIgPT4gJ1VucHJvY2Vzc2FibGUgRW50aXR5JywKICAgICAgICA0MjMgPT4gJ0xvY2tlZCcsCiAgICAgICAgNDI0ID0+ICdGYWlsZWQgRGVwZW5kZW5jeScsCiAgICAgICAgNDI1ID0+ICdVbm9yZGVyZWQgQ29sbGVjdGlvbicsCiAgICAgICAgNDI2ID0+ICdVcGdyYWRlIFJlcXVpcmVkJywKICAgICAgICA0MjggPT4gJ1ByZWNvbmRpdGlvbiBSZXF1aXJlZCcsCiAgICAgICAgNDI5ID0+ICdUb28gTWFueSBSZXF1ZXN0cycsCiAgICAgICAgNDMxID0+ICdSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlJywKICAgICAgICA0NTEgPT4gJ1VuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zJywKICAgICAgICA1MDAgPT4gJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCiAgICAgICAgNTAxID0+ICdOb3QgSW1wbGVtZW50ZWQnLAogICAgICAgIDUwMiA9PiAnQmFkIEdhdGV3YXknLAogICAgICAgIDUwMyA9PiAnU2VydmljZSBVbmF2YWlsYWJsZScsCiAgICAgICAgNTA0ID0+ICdHYXRld2F5IFRpbWUtb3V0JywKICAgICAgICA1MDUgPT4gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJywKICAgICAgICA1MDYgPT4gJ1ZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzJywKICAgICAgICA1MDcgPT4gJ0luc3VmZmljaWVudCBTdG9yYWdlJywKICAgICAgICA1MDggPT4gJ0xvb3AgRGV0ZWN0ZWQnLAogICAgICAgIDUxMCA9PiAnTm90IEV4dGVuZGVkJywKICAgICAgICA1MTEgPT4gJ05ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHJlYXNvblBocmFzZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJHN0YXR1c0NvZGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0dXMgIFN0YXR1cyBjb2RlCiAgICAgKiBAcGFyYW0gKHN0cmluZ3xzdHJpbmdbXSlbXSAgICAgICAgICAgICAgICAgICRoZWFkZXJzIFJlc3BvbnNlIGhlYWRlcnMKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlfG51bGwgJGJvZHkgICAgUmVzcG9uc2UgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFzb24gIFJlYXNvbiBwaHJhc2UgKHdoZW4gZW1wdHkgYSBkZWZhdWx0IHdpbGwgYmUgdXNlZCBiYXNlZCBvbiB0aGUgc3RhdHVzIGNvZGUpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBpbnQgJHN0YXR1cyA9IDIwMCwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICBzdHJpbmcgJHZlcnNpb24gPSAnMS4xJywKICAgICAgICA/c3RyaW5nICRyZWFzb24gPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RhdHVzQ29kZVJhbmdlKCRzdGF0dXMpOwoKICAgICAgICAkdGhpcy0+c3RhdHVzQ29kZSA9ICRzdGF0dXM7CgogICAgICAgIGlmICgkYm9keSAhPT0gJycgJiYgJGJvZHkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IFV0aWxzOjpzdHJlYW1Gb3IoJGJvZHkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNldEhlYWRlcnMoJGhlYWRlcnMpOwogICAgICAgIGlmICgkcmVhc29uID09ICcnICYmIGlzc2V0KHNlbGY6OlBIUkFTRVNbJHRoaXMtPnN0YXR1c0NvZGVdKSkgewogICAgICAgICAgICAkdGhpcy0+cmVhc29uUGhyYXNlID0gc2VsZjo6UEhSQVNFU1skdGhpcy0+c3RhdHVzQ29kZV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnJlYXNvblBocmFzZSA9IChzdHJpbmcpICRyZWFzb247CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdHVzQ29kZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1c0NvZGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvblBocmFzZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvblBocmFzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFN0YXR1cygkY29kZSwgJHJlYXNvblBocmFzZSA9ICcnKTogUmVzcG9uc2VJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJGNvZGUpICYmIFxmaWx0ZXJfdmFyKCRjb2RlLCBcRklMVEVSX1ZBTElEQVRFX0lOVCkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBSZXNwb25zZUludGVyZmFjZTo6d2l0aFN0YXR1cygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkY29kZS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRjb2RlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRyZWFzb25QaHJhc2UpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBSZXNwb25zZUludGVyZmFjZTo6d2l0aFN0YXR1cygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkcmVhc29uUGhyYXNlLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHJlYXNvblBocmFzZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5hc3NlcnRTdGF0dXNDb2RlSXNJbnRlZ2VyKCRjb2RlKTsKICAgICAgICAkY29kZSA9IChpbnQpICRjb2RlOwogICAgICAgICR0aGlzLT5hc3NlcnRTdGF0dXNDb2RlUmFuZ2UoJGNvZGUpOwoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c3RhdHVzQ29kZSA9ICRjb2RlOwogICAgICAgIGlmICgkcmVhc29uUGhyYXNlID09ICcnICYmIGlzc2V0KHNlbGY6OlBIUkFTRVNbJG5ldy0+c3RhdHVzQ29kZV0pKSB7CiAgICAgICAgICAgICRyZWFzb25QaHJhc2UgPSBzZWxmOjpQSFJBU0VTWyRuZXctPnN0YXR1c0NvZGVdOwogICAgICAgIH0KICAgICAgICAkbmV3LT5yZWFzb25QaHJhc2UgPSAoc3RyaW5nKSAkcmVhc29uUGhyYXNlOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkc3RhdHVzQ29kZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydFN0YXR1c0NvZGVJc0ludGVnZXIoJHN0YXR1c0NvZGUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGZpbHRlcl92YXIoJHN0YXR1c0NvZGUsIEZJTFRFUl9WQUxJREFURV9JTlQpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignU3RhdHVzIGNvZGUgbXVzdCBiZSBhbiBpbnRlZ2VyIHZhbHVlLicpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydFN0YXR1c0NvZGVSYW5nZShpbnQgJHN0YXR1c0NvZGUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRzdGF0dXNDb2RlIDwgMTAwIHx8ICRzdGF0dXNDb2RlID49IDYwMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignU3RhdHVzIGNvZGUgbXVzdCBiZSBhbiBpbnRlZ2VyIHZhbHVlIGJldHdlZW4gMXh4IGFuZCA1eHguJyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Rfc3986.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIFJmYzM5ODYKewogICAgLyoqCiAgICAgKiBTdWItZGVsaW1zIGZvciB1c2UgaW4gYSByZWdleC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0hBUl9TVUJfREVMSU1TID0gJyFcJCZcJ1woXClcKlwrLDs9JzsKCiAgICAvKioKICAgICAqIFVucmVzZXJ2ZWQgY2hhcmFjdGVycyBmb3IgdXNlIGluIGEgcmVnZXguCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yLjMKICAgICAqLwogICAgcHVibGljIGNvbnN0IENIQVJfVU5SRVNFUlZFRCA9ICdhLXpBLVowLTlfXC1cLn4nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Rfc7230.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIFJmYzcyMzAKewogICAgLyoqCiAgICAgKiBIZWFkZXIgcmVsYXRlZCByZWd1bGFyIGV4cHJlc3Npb25zIChiYXNlZCBvbiBhbXBocC9odHRwIHBhY2thZ2UpCiAgICAgKgogICAgICogTm90ZTogaGVhZGVyIGRlbGltaXRlciAoXHJcbikgaXMgbW9kaWZpZWQgdG8gXHI/XG4gdG8gYWNjZXB0IGxpbmUgZmVlZCBvbmx5IGRlbGltaXRlcnMgZm9yIEJDIHJlYXNvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW1waHAvaHR0cC9ibG9iL3YxLjAuMS9zcmMvUmZjNzIzMC5waHAjTDEyLUwxNQogICAgICoKICAgICAqIEBsaWNlbnNlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBocC9odHRwL2Jsb2IvdjEuMC4xL0xJQ0VOU0UKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhFQURFUl9SRUdFWCA9ICIoXihbXigpPD5ALDs6XFxcIi9bXF0/PXt9XHgwMS1ceDIwXHg3Rl0rKyk6WyBcdF0qKygoPzpbIFx0XSorW1x4MjEtXHg3RVx4ODAtXHhGRl0rKykqKylbIFx0XSorXHI/XG4pbSI7CiAgICBwdWJsaWMgY29uc3QgSEVBREVSX0ZPTERfUkVHRVggPSAiKFxyP1xuWyBcdF0rKykiOwoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXswOiBzdHJpbmcsIDE6IGludHxudWxsfXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VIb3N0SGVhZGVyKHN0cmluZyAkYXV0aG9yaXR5KTogP2FycmF5CiAgICB7CiAgICAgICAgaWYgKCRhdXRob3JpdHkgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGhvc3QgPSAkYXV0aG9yaXR5OwogICAgICAgICRwb3J0ID0gbnVsbDsKCiAgICAgICAgaWYgKCRhdXRob3JpdHlbMF0gPT09ICdbJykgewogICAgICAgICAgICAkY2xvc2luZ0JyYWNrZXQgPSBzdHJwb3MoJGF1dGhvcml0eSwgJ10nKTsKICAgICAgICAgICAgaWYgKCRjbG9zaW5nQnJhY2tldCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaG9zdCA9IHN1YnN0cigkYXV0aG9yaXR5LCAwLCAkY2xvc2luZ0JyYWNrZXQgKyAxKTsKICAgICAgICAgICAgJHJlbWFpbmRlciA9IHN1YnN0cigkYXV0aG9yaXR5LCAkY2xvc2luZ0JyYWNrZXQgKyAxKTsKICAgICAgICAgICAgaWYgKCRyZW1haW5kZXIgIT09ICcnKSB7CiAgICAgICAgICAgICAgICBpZiAoJHJlbWFpbmRlclswXSAhPT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBvcnQgPSBzZWxmOjpwYXJzZUF1dGhvcml0eVBvcnQoc3Vic3RyKCRyZW1haW5kZXIsIDEpKTsKICAgICAgICAgICAgICAgIGlmICgkcG9ydCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKGZhbHNlICE9PSAoJGNvbG9uID0gc3RycG9zKCRhdXRob3JpdHksICc6JykpKSB7CiAgICAgICAgICAgICRob3N0ID0gc3Vic3RyKCRhdXRob3JpdHksIDAsICRjb2xvbik7CiAgICAgICAgICAgICRwb3J0ID0gc2VsZjo6cGFyc2VBdXRob3JpdHlQb3J0KHN1YnN0cigkYXV0aG9yaXR5LCAkY29sb24gKyAxKSk7CiAgICAgICAgICAgIGlmICgkcG9ydCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkaG9zdCA9PT0gJycgfHwgIXNlbGY6OmlzVmFsaWRIb3N0SGVhZGVySG9zdCgkaG9zdCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRob3N0LCAkcG9ydF07CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZEhvc3RIZWFkZXJIb3N0KHN0cmluZyAkaG9zdCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1tceDAwLVx4MjBceDdGXC9cPyNAXFxcXF0vJywgJGhvc3QpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJGhvc3QsICdbJykgIT09IGZhbHNlIHx8IHN0cnBvcygkaG9zdCwgJ10nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKCRob3N0WzBdICE9PSAnWycgfHwgc3Vic3RyKCRob3N0LCAtMSkgIT09ICddJykgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYWRkcmVzcyA9IHN1YnN0cigkaG9zdCwgMSwgLTEpOwoKICAgICAgICAgICAgcmV0dXJuIGZpbHRlcl92YXIoJGFkZHJlc3MsIFxGSUxURVJfVkFMSURBVEVfSVAsIFxGSUxURVJfRkxBR19JUFY2KSAhPT0gZmFsc2UKICAgICAgICAgICAgICAgIHx8IHByZWdfbWF0Y2goJy9edlswLTlhLWZdK1wuWycuUmZjMzk4Njo6Q0hBUl9VTlJFU0VSVkVELlJmYzM5ODY6OkNIQVJfU1VCX0RFTElNUy4nOl0rJC9pRCcsICRhZGRyZXNzKSA9PT0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJwb3MoJGhvc3QsICc6JykgPT09IGZhbHNlOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5UG9ydChzdHJpbmcgJHBvcnQpOiA/aW50CiAgICB7CiAgICAgICAgaWYgKCRwb3J0ID09PSAnJyB8fCAhY3R5cGVfZGlnaXQoJHBvcnQpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJG5vcm1hbGl6ZWQgPSBsdHJpbSgkcG9ydCwgJzAnKTsKICAgICAgICBpZiAoJG5vcm1hbGl6ZWQgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmxlbigkbm9ybWFsaXplZCkgPiA1IHx8IChpbnQpICRub3JtYWxpemVkID4gMHhGRkZGKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChpbnQpICRub3JtYWxpemVkOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/ServerRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogU2VydmVyLXNpZGUgSFRUUCByZXF1ZXN0CiAqCiAqIEV4dGVuZHMgdGhlIFJlcXVlc3QgZGVmaW5pdGlvbiB0byBhZGQgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIGluY29taW5nIGRhdGEsCiAqIHNwZWNpZmljYWxseSBzZXJ2ZXIgcGFyYW1ldGVycywgY29va2llcywgbWF0Y2hlZCBwYXRoIHBhcmFtZXRlcnMsIHF1ZXJ5CiAqIHN0cmluZyBhcmd1bWVudHMsIGJvZHkgcGFyYW1ldGVycywgYW5kIHVwbG9hZCBmaWxlIGluZm9ybWF0aW9uLgogKgogKiAiQXR0cmlidXRlcyIgYXJlIGRpc2NvdmVyZWQgdmlhIGRlY29tcG9zaW5nIHRoZSByZXF1ZXN0IChhbmQgdXN1YWxseQogKiBzcGVjaWZpY2FsbHkgdGhlIFVSSSBwYXRoKSwgYW5kIHR5cGljYWxseSB3aWxsIGJlIGluamVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBhcmUKICogaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmNsYXNzIFNlcnZlclJlcXVlc3QgZXh0ZW5kcyBSZXF1ZXN0IGltcGxlbWVudHMgU2VydmVyUmVxdWVzdEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0cmlidXRlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRjb29raWVQYXJhbXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl8b2JqZWN0fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGFyc2VkQm9keTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkcXVlcnlQYXJhbXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkc2VydmVyUGFyYW1zOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICR1cGxvYWRlZEZpbGVzID0gW107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXRob2QgICAgICAgSFRUUCBtZXRob2QKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgJHVyaSAgICAgICAgICBVUkkKICAgICAqIEBwYXJhbSAoc3RyaW5nfHN0cmluZ1tdKVtdICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgICAgICBSZXF1ZXN0IGhlYWRlcnMKICAgICAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlfG51bGwgJGJvZHkgICAgICAgICBSZXF1ZXN0IGJvZHkKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZlcnNpb24gICAgICBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXJ2ZXJQYXJhbXMgVHlwaWNhbGx5IHRoZSAkX1NFUlZFUiBzdXBlcmdsb2JhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRtZXRob2QsCiAgICAgICAgJHVyaSwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICBzdHJpbmcgJHZlcnNpb24gPSAnMS4xJywKICAgICAgICBhcnJheSAkc2VydmVyUGFyYW1zID0gW10KICAgICkgewogICAgICAgICR0aGlzLT5zZXJ2ZXJQYXJhbXMgPSAkc2VydmVyUGFyYW1zOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIFVwbG9hZGVkRmlsZSBpbnN0YW5jZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpbGVzIEFuIGFycmF5IHdoaWNoIHJlc3BlY3QgJF9GSUxFUyBzdHJ1Y3R1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdW5yZWNvZ25pemVkIHZhbHVlcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVzKGFycmF5ICRmaWxlcyk6IGFycmF5CiAgICB7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNfYXJyYXkoJHZhbHVlKSAmJiBpc3NldCgkdmFsdWVbJ3RtcF9uYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkbm9ybWFsaXplZFska2V5XSA9IHNlbGY6OmNyZWF0ZVVwbG9hZGVkRmlsZUZyb21TcGVjKCR2YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkbm9ybWFsaXplZFska2V5XSA9IHNlbGY6Om5vcm1hbGl6ZUZpbGVzKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgdmFsdWUgaW4gZmlsZXMgc3BlY2lmaWNhdGlvbicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vcm1hbGl6ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhbiBVcGxvYWRlZEZpbGUgaW5zdGFuY2UgZnJvbSBhICRfRklMRVMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgc3BlY2lmaWNhdGlvbiByZXByZXNlbnRzIGFuIGFycmF5IG9mIHZhbHVlcywgdGhpcyBtZXRob2Qgd2lsbAogICAgICogZGVsZWdhdGUgdG8gbm9ybWFsaXplTmVzdGVkRmlsZVNwZWMoKSBhbmQgcmV0dXJuIHRoYXQgcmV0dXJuIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWUgJF9GSUxFUyBzdHJ1Y3QKICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZXxVcGxvYWRlZEZpbGVJbnRlcmZhY2VbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVVcGxvYWRlZEZpbGVGcm9tU3BlYyhhcnJheSAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZVsndG1wX25hbWUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6Om5vcm1hbGl6ZU5lc3RlZEZpbGVTcGVjKCR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFVwbG9hZGVkRmlsZSgKICAgICAgICAgICAgJHZhbHVlWyd0bXBfbmFtZSddLAogICAgICAgICAgICAoaW50KSAkdmFsdWVbJ3NpemUnXSwKICAgICAgICAgICAgKGludCkgJHZhbHVlWydlcnJvciddLAogICAgICAgICAgICAkdmFsdWVbJ25hbWUnXSwKICAgICAgICAgICAgJHZhbHVlWyd0eXBlJ10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogTm9ybWFsaXplIGFuIGFycmF5IG9mIGZpbGUgc3BlY2lmaWNhdGlvbnMuCiAgICAgKgogICAgICogTG9vcHMgdGhyb3VnaCBhbGwgbmVzdGVkIGZpbGVzIGFuZCByZXR1cm5zIGEgbm9ybWFsaXplZCBhcnJheSBvZgogICAgICogVXBsb2FkZWRGaWxlSW50ZXJmYWNlIGluc3RhbmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZVtdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZU5lc3RlZEZpbGVTcGVjKGFycmF5ICRmaWxlcyA9IFtdKTogYXJyYXkKICAgIHsKICAgICAgICAkbm9ybWFsaXplZEZpbGVzID0gW107CgogICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJGZpbGVzWyd0bXBfbmFtZSddKSBhcyAka2V5KSB7CiAgICAgICAgICAgICRzcGVjID0gWwogICAgICAgICAgICAgICAgJ3RtcF9uYW1lJyA9PiAkZmlsZXNbJ3RtcF9uYW1lJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnc2l6ZScgPT4gJGZpbGVzWydzaXplJ11bJGtleV0gPz8gbnVsbCwKICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGZpbGVzWydlcnJvciddWyRrZXldID8/IG51bGwsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJGZpbGVzWyduYW1lJ11bJGtleV0gPz8gbnVsbCwKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkZmlsZXNbJ3R5cGUnXVska2V5XSA/PyBudWxsLAogICAgICAgICAgICBdOwogICAgICAgICAgICAkbm9ybWFsaXplZEZpbGVzWyRrZXldID0gc2VsZjo6Y3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoJHNwZWMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRub3JtYWxpemVkRmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBTZXJ2ZXJSZXF1ZXN0IHBvcHVsYXRlZCB3aXRoIHN1cGVyZ2xvYmFsczoKICAgICAqICRfR0VUCiAgICAgKiAkX1BPU1QKICAgICAqICRfQ09PS0lFCiAgICAgKiAkX0ZJTEVTCiAgICAgKiAkX1NFUlZFUgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21HbG9iYWxzKCk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbWV0aG9kID0gc3RydG91cHBlcihzZWxmOjpnZXRTZXJ2ZXJQYXJhbSgnUkVRVUVTVF9NRVRIT0QnKSA/PyAnR0VUJyk7CiAgICAgICAgJGhlYWRlcnMgPSBzZWxmOjpyZW1vdmVJbnZhbGlkSG9zdEhlYWRlcihzZWxmOjpnZXRBbGxIZWFkZXJzKCkpOwogICAgICAgICR1cmkgPSBzZWxmOjpnZXRVcmlGcm9tR2xvYmFscygpOwogICAgICAgICRib2R5ID0gbmV3IENhY2hpbmdTdHJlYW0obmV3IExhenlPcGVuU3RyZWFtKCdwaHA6Ly9pbnB1dCcsICdyKycpKTsKICAgICAgICAkc2VydmVyUHJvdG9jb2wgPSBzZWxmOjpnZXRTZXJ2ZXJQYXJhbSgnU0VSVkVSX1BST1RPQ09MJyk7CiAgICAgICAgJHByb3RvY29sID0gJHNlcnZlclByb3RvY29sICE9PSBudWxsID8gc3RyX3JlcGxhY2UoJ0hUVFAvJywgJycsICRzZXJ2ZXJQcm90b2NvbCkgOiAnMS4xJzsKCiAgICAgICAgJHNlcnZlclJlcXVlc3QgPSBuZXcgU2VydmVyUmVxdWVzdCgkbWV0aG9kLCAkdXJpLCAkaGVhZGVycywgJGJvZHksICRwcm90b2NvbCwgJF9TRVJWRVIpOwoKICAgICAgICByZXR1cm4gJHNlcnZlclJlcXVlc3QKICAgICAgICAgICAgLT53aXRoQ29va2llUGFyYW1zKCRfQ09PS0lFKQogICAgICAgICAgICAtPndpdGhRdWVyeVBhcmFtcygkX0dFVCkKICAgICAgICAgICAgLT53aXRoUGFyc2VkQm9keSgkX1BPU1QpCiAgICAgICAgICAgIC0+d2l0aFVwbG9hZGVkRmlsZXMoc2VsZjo6bm9ybWFsaXplRmlsZXMoJF9GSUxFUykpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsSGVhZGVycygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpub3JtYWxpemVIZWFkZXJWYWx1ZXMoZ2V0YWxsaGVhZGVycygpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIG1peGVkPiAkaGVhZGVycwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlclZhbHVlcyhhcnJheSAkaGVhZGVycyk6IGFycmF5CiAgICB7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChpc19zY2FsYXIoJHZhbHVlKSB8fCAoaXNfb2JqZWN0KCR2YWx1ZSkgJiYgbWV0aG9kX2V4aXN0cygkdmFsdWUsICdfX3RvU3RyaW5nJykpKSB7CiAgICAgICAgICAgICAgICAkbm9ybWFsaXplZFskbmFtZV0gPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJQYXJhbShzdHJpbmcgJGtleSk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJF9TRVJWRVJbJGtleV0pICYmIGlzX3N0cmluZygkX1NFUlZFUlska2V5XSkgPyAkX1NFUlZFUlska2V5XSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+ICRoZWFkZXJzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlSW52YWxpZEhvc3RIZWFkZXIoYXJyYXkgJGhlYWRlcnMpOiBhcnJheQogICAgewogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoc3RydG9sb3dlcigoc3RyaW5nKSAkbmFtZSkgIT09ICdob3N0JykgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChSZmM3MjMwOjpwYXJzZUhvc3RIZWFkZXIoJHZhbHVlKSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5hbWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXswOiBzdHJpbmd8bnVsbCwgMTogaW50fG51bGx9CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGV4dHJhY3RIb3N0QW5kUG9ydEZyb21BdXRob3JpdHkoc3RyaW5nICRhdXRob3JpdHkpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBSZmM3MjMwOjpwYXJzZUhvc3RIZWFkZXIoJGF1dGhvcml0eSkgPz8gW251bGwsIG51bGxdOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgVXJpIHBvcHVsYXRlZCB3aXRoIHZhbHVlcyBmcm9tICRfU0VSVkVSLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVyaUZyb21HbG9iYWxzKCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICR1cmkgPSBuZXcgVXJpKCcnKTsKCiAgICAgICAgJGh0dHBzID0gc2VsZjo6Z2V0U2VydmVyUGFyYW0oJ0hUVFBTJyk7CiAgICAgICAgJHVyaSA9ICR1cmktPndpdGhTY2hlbWUoIWVtcHR5KCRodHRwcykgJiYgJGh0dHBzICE9PSAnb2ZmJyA/ICdodHRwcycgOiAnaHR0cCcpOwoKICAgICAgICAkaGFzUG9ydCA9IGZhbHNlOwogICAgICAgICRhdXRob3JpdHkgPSBzZWxmOjpnZXRTZXJ2ZXJQYXJhbSgnSFRUUF9IT1NUJyk7CiAgICAgICAgaWYgKCRhdXRob3JpdHkgIT09IG51bGwpIHsKICAgICAgICAgICAgWyRob3N0LCAkcG9ydF0gPSBzZWxmOjpleHRyYWN0SG9zdEFuZFBvcnRGcm9tQXV0aG9yaXR5KCRhdXRob3JpdHkpOwogICAgICAgICAgICBpZiAoJGhvc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkaG9zdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkcG9ydCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGhhc1BvcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KCRwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgoJHNlcnZlck5hbWUgPSBzZWxmOjpnZXRTZXJ2ZXJQYXJhbSgnU0VSVkVSX05BTUUnKSkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhIb3N0KCRzZXJ2ZXJOYW1lKTsKICAgICAgICB9IGVsc2VpZiAoKCRzZXJ2ZXJBZGRyID0gc2VsZjo6Z2V0U2VydmVyUGFyYW0oJ1NFUlZFUl9BRERSJykpICE9PSBudWxsKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkc2VydmVyQWRkcik7CiAgICAgICAgfQoKICAgICAgICAkc2VydmVyUG9ydCA9IHNlbGY6OmdldFNlcnZlclBhcmFtKCdTRVJWRVJfUE9SVCcpOwogICAgICAgIGlmICghJGhhc1BvcnQgJiYgJHNlcnZlclBvcnQgIT09IG51bGwgJiYgcHJlZ19tYXRjaCgnL15bKy1dP1xkKyQvJywgJHNlcnZlclBvcnQpID09PSAxKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUG9ydCgoaW50KSAkc2VydmVyUG9ydCk7CiAgICAgICAgfQoKICAgICAgICAkaGFzUXVlcnkgPSBmYWxzZTsKICAgICAgICAkcmVxdWVzdFVyaSA9IHNlbGY6OmdldFNlcnZlclBhcmFtKCdSRVFVRVNUX1VSSScpOwogICAgICAgIGlmICgkcmVxdWVzdFVyaSAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVxdWVzdFVyaVBhcnRzID0gZXhwbG9kZSgnPycsICRyZXF1ZXN0VXJpLCAyKTsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKCRyZXF1ZXN0VXJpUGFydHNbMF0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJHJlcXVlc3RVcmlQYXJ0c1sxXSkpIHsKICAgICAgICAgICAgICAgICRoYXNRdWVyeSA9IHRydWU7CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KCRyZXF1ZXN0VXJpUGFydHNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcXVlcnlTdHJpbmcgPSBzZWxmOjpnZXRTZXJ2ZXJQYXJhbSgnUVVFUllfU1RSSU5HJyk7CiAgICAgICAgaWYgKCEkaGFzUXVlcnkgJiYgJHF1ZXJ5U3RyaW5nICE9PSBudWxsKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoJHF1ZXJ5U3RyaW5nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJQYXJhbXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlcnZlclBhcmFtczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBsb2FkZWRGaWxlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXBsb2FkZWRGaWxlczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVwbG9hZGVkRmlsZXMoYXJyYXkgJHVwbG9hZGVkRmlsZXMpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGludmFsaWRVcGxvYWRlZEZpbGVGb3VuZCA9IGZhbHNlOwogICAgICAgICRpbnZhbGlkVXBsb2FkZWRGaWxlID0gbnVsbDsKICAgICAgICAkc3RhY2sgPSBbJHVwbG9hZGVkRmlsZXNdOwoKICAgICAgICB3aGlsZSAoJHN0YWNrICE9PSBbXSkgewogICAgICAgICAgICBmb3JlYWNoIChcYXJyYXlfcG9wKCRzdGFjaykgYXMgJHVwbG9hZGVkRmlsZSkgewogICAgICAgICAgICAgICAgaWYgKCR1cGxvYWRlZEZpbGUgaW5zdGFuY2VvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoXGlzX2FycmF5KCR1cGxvYWRlZEZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0YWNrW10gPSAkdXBsb2FkZWRGaWxlOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRpbnZhbGlkVXBsb2FkZWRGaWxlRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgJGludmFsaWRVcGxvYWRlZEZpbGUgPSAkdXBsb2FkZWRGaWxlOwoKICAgICAgICAgICAgICAgIGJyZWFrIDI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkaW52YWxpZFVwbG9hZGVkRmlsZUZvdW5kKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyBpbnNpZGUgU2VydmVyUmVxdWVzdEludGVyZmFjZTo6d2l0aFVwbG9hZGVkRmlsZXMoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGFuIFVwbG9hZGVkRmlsZUludGVyZmFjZVtdIHRyZWUuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkaW52YWxpZFVwbG9hZGVkRmlsZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT51cGxvYWRlZEZpbGVzID0gJHVwbG9hZGVkRmlsZXM7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb29raWVQYXJhbXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvb2tpZVBhcmFtczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZVBhcmFtcyhhcnJheSAkY29va2llcyk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+Y29va2llUGFyYW1zID0gJGNvb2tpZXM7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cXVlcnlQYXJhbXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeVBhcmFtcyhhcnJheSAkcXVlcnkpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnF1ZXJ5UGFyYW1zID0gJHF1ZXJ5OwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl8b2JqZWN0fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZEJvZHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VkQm9keTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhcnNlZEJvZHkoJGRhdGEpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCRkYXRhICE9PSBudWxsICYmICFcaXNfYXJyYXkoJGRhdGEpICYmICFcaXNfb2JqZWN0KCRkYXRhKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU2VydmVyUmVxdWVzdEludGVyZmFjZTo6d2l0aFBhcnNlZEJvZHkoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGFycmF5fG9iamVjdHxudWxsLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJGRhdGEpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cGFyc2VkQm9keSA9ICRkYXRhOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0cmlidXRlczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZSgkYXR0cmlidXRlLCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjpnZXRBdHRyaWJ1dGUoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIHN0cmluZyBmb3IgJGF0dHJpYnV0ZS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRhdHRyaWJ1dGUpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09IGFycmF5X2tleV9leGlzdHMoJGF0dHJpYnV0ZSwgJHRoaXMtPmF0dHJpYnV0ZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+YXR0cmlidXRlc1skYXR0cmlidXRlXTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEF0dHJpYnV0ZSgkYXR0cmlidXRlLCAkdmFsdWUpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRoQXR0cmlidXRlKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmcgZm9yICRhdHRyaWJ1dGUuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkYXR0cmlidXRlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmF0dHJpYnV0ZXNbJGF0dHJpYnV0ZV0gPSAkdmFsdWU7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0QXR0cmlidXRlKCRhdHRyaWJ1dGUpOiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRob3V0QXR0cmlidXRlKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmcgZm9yICRhdHRyaWJ1dGUuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkYXR0cmlidXRlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSBhcnJheV9rZXlfZXhpc3RzKCRhdHRyaWJ1dGUsICR0aGlzLT5hdHRyaWJ1dGVzKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgdW5zZXQoJG5ldy0+YXR0cmlidXRlc1skYXR0cmlidXRlXSk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQSFAgc3RyZWFtIGltcGxlbWVudGF0aW9uLgogKi8KY2xhc3MgU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mb3Blbi5waHAKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3pvcGVuLnBocAogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFQURBQkxFX01PREVTID0gJy9yfGFcK3xhYlwrfHdcK3x3YlwrfHhcK3x4YlwrfGNcK3xjYlwrLyc7CiAgICBwcml2YXRlIGNvbnN0IFdSSVRBQkxFX01PREVTID0gJy9hfHd8clwrfHJiXCt8cnd8eHxjLyc7CgogICAgLyoqIEB2YXIgcmVzb3VyY2UgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKICAgIC8qKiBAdmFyIGludHxudWxsICovCiAgICBwcml2YXRlICRzaXplOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkc2Vla2FibGU7CiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRyZWFkYWJsZTsKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJHdyaXRhYmxlOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJHVyaTsKICAgIC8qKiBAdmFyIG1peGVkW10gKi8KICAgIHByaXZhdGUgJGN1c3RvbU1ldGFkYXRhOwoKICAgIC8qKgogICAgICogVGhpcyBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMuCiAgICAgKgogICAgICogLSBzaXplOiAoaW50KSBJZiBhIHJlYWQgc3RyZWFtIHdvdWxkIG90aGVyd2lzZSBoYXZlIGFuIGluZGV0ZXJtaW5hdGUKICAgICAqICAgc2l6ZSwgYnV0IHRoZSBzaXplIGlzIGtub3duIGR1ZSB0byBmb3Jla25vd2xlZGdlLCB0aGVuIHlvdSBjYW4KICAgICAqICAgcHJvdmlkZSB0aGF0IHNpemUsIGluIGJ5dGVzLgogICAgICogLSBtZXRhZGF0YTogKGFycmF5KSBBbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0byByZXR1cm4gd2hlbiB0aGUgbWV0YWRhdGEKICAgICAqICAgb2YgdGhlIHN0cmVhbSBpcyBhY2Nlc3NlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmVhbSAgU3RyZWFtIHJlc291cmNlIHRvIHdyYXAuCiAgICAgKiBAcGFyYW0gYXJyYXl7c2l6ZT86IGludCwgbWV0YWRhdGE/OiBhcnJheX0gJG9wdGlvbnMgQXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHN0cmVhbSBpcyBub3QgYSBzdHJlYW0gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJlYW0sIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkc3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignU3RyZWFtIG11c3QgYmUgYSByZXNvdXJjZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaXplJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zaXplID0gJG9wdGlvbnNbJ3NpemUnXTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jdXN0b21NZXRhZGF0YSA9ICRvcHRpb25zWydtZXRhZGF0YSddID8/IFtdOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICRtZXRhID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gJG1ldGFbJ3NlZWthYmxlJ107CiAgICAgICAgJHRoaXMtPnJlYWRhYmxlID0gKGJvb2wpIHByZWdfbWF0Y2goc2VsZjo6UkVBREFCTEVfTU9ERVMsICRtZXRhWydtb2RlJ10pOwogICAgICAgICR0aGlzLT53cml0YWJsZSA9IChib29sKSBwcmVnX21hdGNoKHNlbGY6OldSSVRBQkxFX01PREVTLCAkbWV0YVsnbW9kZSddKTsKICAgICAgICAkdGhpcy0+dXJpID0gJG1ldGFbJ3VyaSddID8/IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSB3aGVuIHRoZSBkZXN0cnVjdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xvc2UoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoJHRoaXMtPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q29udGVudHMoKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDApIHsKICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3Ioc3ByaW50ZignJXM6Ol9fdG9TdHJpbmcgZXhjZXB0aW9uOiAlcycsIHNlbGY6OmNsYXNzLCAoc3RyaW5nKSAkZSksIEVfVVNFUl9FUlJPUik7CgogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISR0aGlzLT5yZWFkYWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCByZWFkIGZyb20gbm9uLXJlYWRhYmxlIHN0cmVhbScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFV0aWxzOjp0cnlHZXRDb250ZW50cygkdGhpcy0+c3RyZWFtKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+c3RyZWFtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+ZGV0YWNoKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnN0cmVhbTsKICAgICAgICB1bnNldCgkdGhpcy0+c3RyZWFtKTsKICAgICAgICAkdGhpcy0+c2l6ZSA9ICR0aGlzLT51cmkgPSBudWxsOwogICAgICAgICR0aGlzLT5yZWFkYWJsZSA9ICR0aGlzLT53cml0YWJsZSA9ICR0aGlzLT5zZWVrYWJsZSA9IGZhbHNlOwoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zaXplICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBDbGVhciB0aGUgc3RhdCBjYWNoZSBpZiB0aGUgc3RyZWFtIGhhcyBhIFVSSQogICAgICAgIGlmICgkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKHRydWUsICR0aGlzLT51cmkpOwogICAgICAgIH0KCiAgICAgICAgJHN0YXRzID0gZnN0YXQoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRzdGF0cykgJiYgaXNzZXQoJHN0YXRzWydzaXplJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zaXplID0gJHN0YXRzWydzaXplJ107CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWFkYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53cml0YWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWVrYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmVvZigkdGhpcy0+c3RyZWFtKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOiBpbnQKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gZnRlbGwoJHRoaXMtPnN0cmVhbSk7CgogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBkZXRlcm1pbmUgc3RyZWFtIHBvc2l0aW9uJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCRvZmZzZXQpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnNlZWsoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJG9mZnNldC4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRvZmZzZXQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19pbnQoJHdoZW5jZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkd2hlbmNlLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHdoZW5jZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR3aGVuY2UgPSAoaW50KSAkd2hlbmNlOwoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQogICAgICAgIGlmICghJHRoaXMtPnNlZWthYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIG5vdCBzZWVrYWJsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoZnNlZWsoJHRoaXMtPnN0cmVhbSwgJG9mZnNldCwgJHdoZW5jZSkgPT09IC0xKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHNlZWsgdG8gc3RyZWFtIHBvc2l0aW9uICcKICAgICAgICAgICAgICAgIC4kb2Zmc2V0Licgd2l0aCB3aGVuY2UgJy52YXJfZXhwb3J0KCR3aGVuY2UsIHRydWUpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICghXGlzX2ludCgkbGVuZ3RoKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpyZWFkKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICRsZW5ndGguJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkbGVuZ3RoKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT5yZWFkYWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCByZWFkIGZyb20gbm9uLXJlYWRhYmxlIHN0cmVhbScpOwogICAgICAgIH0KICAgICAgICBpZiAoJGxlbmd0aCA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdMZW5ndGggcGFyYW1ldGVyIGNhbm5vdCBiZSBuZWdhdGl2ZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgPT09ICRsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHN0cmluZyA9IGZyZWFkKCR0aGlzLT5zdHJlYW0sICRsZW5ndGgpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBmcm9tIHN0cmVhbScsIDAsICRlKTsKICAgICAgICB9CgogICAgICAgIGlmIChmYWxzZSA9PT0gJHN0cmluZykgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkIGZyb20gc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0cmluZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHN0cmluZykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkdGhpcy0+d3JpdGFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUgdG8gYSBub24td3JpdGFibGUgc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBjYW4ndCBrbm93IHRoZSBzaXplIGFmdGVyIHdyaXRpbmcgYW55dGhpbmcKICAgICAgICAkdGhpcy0+c2l6ZSA9IG51bGw7CiAgICAgICAgJHJlc3VsdCA9IGZ3cml0ZSgkdGhpcy0+c3RyZWFtLCAkc3RyaW5nKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHdyaXRlIHRvIHN0cmVhbScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGtleSAhPT0gbnVsbCAmJiAhXGlzX3N0cmluZygka2V5KSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpnZXRNZXRhZGF0YSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nfG51bGwgZm9yICRrZXkuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgka2V5KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICByZXR1cm4gJGtleSA/IG51bGwgOiBbXTsKICAgICAgICB9IGVsc2VpZiAoISRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jdXN0b21NZXRhZGF0YSArIHN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zdHJlYW0pOwogICAgICAgIH0gZWxzZWlmIChpc3NldCgkdGhpcy0+Y3VzdG9tTWV0YWRhdGFbJGtleV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3VzdG9tTWV0YWRhdGFbJGtleV07CiAgICAgICAgfQoKICAgICAgICAkbWV0YSA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zdHJlYW0pOwoKICAgICAgICByZXR1cm4gJG1ldGFbJGtleV0gPz8gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRyYWl0CiAqCiAqIEBwcm9wZXJ0eSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbQogKi8KdHJhaXQgU3RyZWFtRGVjb3JhdG9yVHJhaXQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIGRlY29yYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgIH0KCiAgICAvKioKICAgICAqIE1hZ2ljIG1ldGhvZCB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBzdHJlYW0gaWYgc3RyZWFtcyBhcmUgbm90IGFkZGVkIGluCiAgICAgKiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZWNvcmF0b3IgKGUuZy4sIExhenlPcGVuU3RyZWFtKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoc3RyaW5nICRuYW1lKQogICAgewogICAgICAgIGlmICgkbmFtZSA9PT0gJ3N0cmVhbScpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICR0aGlzLT5jcmVhdGVTdHJlYW0oKTsKCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oIiRuYW1lIG5vdCBmb3VuZCBvbiBjbGFzcyIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA+PSA3MDQwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcihzcHJpbnRmKCclczo6X190b1N0cmluZyBleGNlcHRpb246ICVzJywgc2VsZjo6Y2xhc3MsIChzdHJpbmcpICRlKSwgRV9VU0VSX0VSUk9SKTsKCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdGlsczo6Y29weVRvU3RyaW5nKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFsbG93IGRlY29yYXRvcnMgdG8gaW1wbGVtZW50IGN1c3RvbSBtZXRob2RzCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKHN0cmluZyAkbWV0aG9kLCBhcnJheSAkYXJncykKICAgIHsKICAgICAgICAvKiogQHZhciBjYWxsYWJsZSAkY2FsbGFibGUgKi8KICAgICAgICAkY2FsbGFibGUgPSBbJHRoaXMtPnN0cmVhbSwgJG1ldGhvZF07CiAgICAgICAgJHJlc3VsdCA9ICgkY2FsbGFibGUpKC4uLiRhcmdzKTsKCiAgICAgICAgLy8gQWx3YXlzIHJldHVybiB0aGUgd3JhcHBlZCBvYmplY3QgaWYgdGhlIHJlc3VsdCBpcyBhIHJldHVybiAkdGhpcwogICAgICAgIHJldHVybiAkcmVzdWx0ID09PSAkdGhpcy0+c3RyZWFtID8gJHRoaXMgOiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+Y2xvc2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIGlmICgka2V5ICE9PSBudWxsICYmICFcaXNfc3RyaW5nKCRrZXkpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OmdldE1ldGFkYXRhKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBzdHJpbmd8bnVsbCBmb3IgJGtleS4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRrZXkpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+Z2V0TWV0YWRhdGEoJGtleSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmRldGFjaCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5lb2YoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNSZWFkYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNXcml0YWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIVxpc19pbnQoJG9mZnNldCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFN0cmVhbUludGVyZmFjZTo6c2VlaygpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgaW50IGZvciAkb2Zmc2V0LicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJG9mZnNldCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2ludCgkd2hlbmNlKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjpzZWVrKCkgaXMgZGVwcmVjYXRlZDsgZ3V6emxlaHR0cC9wc3I3IDMuMCByZXF1aXJlcyBpbnQgZm9yICR3aGVuY2UuJywKICAgICAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkd2hlbmNlKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2Vlaygkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFcaXNfaW50KCRsZW5ndGgpKSB7CiAgICAgICAgICAgIFx0cmlnZ2VyX2RlcHJlY2F0aW9uKAogICAgICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICAgICAnMi4xMScsCiAgICAgICAgICAgICAgICAnUGFzc2luZyAlcyB0byBTdHJlYW1JbnRlcmZhY2U6OnJlYWQoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludCBmb3IgJGxlbmd0aC4nLAogICAgICAgICAgICAgICAgXGdldF9kZWJ1Z190eXBlKCRsZW5ndGgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZCgkbGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICdndXp6bGVodHRwL3BzcjcnLAogICAgICAgICAgICAgICAgJzIuMTEnLAogICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgc3RyaW5nIGZvciAkc3RyaW5nLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHN0cmluZykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZSgkc3RyaW5nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEltcGxlbWVudCBpbiBzdWJjbGFzc2VzIHRvIGR5bmFtaWNhbGx5IGNyZWF0ZSBzdHJlYW1zIHdoZW4gcmVxdWVzdGVkLgogICAgICoKICAgICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSgpOiBTdHJlYW1JbnRlcmZhY2UKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ05vdCBpbXBsZW1lbnRlZCcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamWrapper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb252ZXJ0cyBHdXp6bGUgc3RyZWFtcyBpbnRvIFBIUCBzdHJlYW0gcmVzb3VyY2VzLgogKgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvc3RyZWFtd3JhcHBlcgogKi8KZmluYWwgY2xhc3MgU3RyZWFtV3JhcHBlcgp7CiAgICAvKiogQHZhciByZXNvdXJjZSAqLwogICAgcHVibGljICRjb250ZXh0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKiBAdmFyIHN0cmluZyByLCByKywgb3IgdyAqLwogICAgcHJpdmF0ZSAkbW9kZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gVGhlIHN0cmVhbSB0byBnZXQgYSByZXNvdXJjZSBmb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHN0cmVhbSBpcyBub3QgcmVhZGFibGUgb3Igd3JpdGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZXNvdXJjZShTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICBzZWxmOjpyZWdpc3RlcigpOwoKICAgICAgICBpZiAoJHN0cmVhbS0+aXNSZWFkYWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RlID0gJHN0cmVhbS0+aXNXcml0YWJsZSgpID8gJ3IrJyA6ICdyJzsKICAgICAgICB9IGVsc2VpZiAoJHN0cmVhbS0+aXNXcml0YWJsZSgpKSB7CiAgICAgICAgICAgICRtb2RlID0gJ3cnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgc3RyZWFtIG11c3QgYmUgcmVhZGFibGUsICcKICAgICAgICAgICAgICAgIC4nd3JpdGFibGUsIG9yIGJvdGguJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzb3VyY2UgPSBAZm9wZW4oJ2d1enpsZTovL3N0cmVhbScsICRtb2RlLCBmYWxzZSwgc2VsZjo6Y3JlYXRlU3RyZWFtQ29udGV4dCgkc3RyZWFtKSk7CgogICAgICAgIGlmICgkcmVzb3VyY2UgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGNyZWF0ZSBzdHJlYW0gcmVzb3VyY2UnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgc3RyZWFtIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBvcGVuIGEgc3RyZWFtIGFzIGEgcGhwIHN0cmVhbSByZXNvdXJjZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtQ29udGV4dChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSkKICAgIHsKICAgICAgICByZXR1cm4gc3RyZWFtX2NvbnRleHRfY3JlYXRlKFsKICAgICAgICAgICAgJ2d1enpsZScgPT4gWydzdHJlYW0nID0+ICRzdHJlYW1dLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBzdHJlYW0gd3JhcHBlciBpZiBuZWVkZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlcigpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpbl9hcnJheSgnZ3V6emxlJywgc3RyZWFtX2dldF93cmFwcGVycygpKSkgewogICAgICAgICAgICBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlcignZ3V6emxlJywgX19DTEFTU19fKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9vcGVuKHN0cmluZyAkcGF0aCwgc3RyaW5nICRtb2RlLCBpbnQgJG9wdGlvbnMsID9zdHJpbmcgJiRvcGVuZWRfcGF0aCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSBzdHJlYW1fY29udGV4dF9nZXRfb3B0aW9ucygkdGhpcy0+Y29udGV4dCk7CgogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2d1enpsZSddWydzdHJlYW0nXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm1vZGUgPSAkbW9kZTsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJG9wdGlvbnNbJ2d1enpsZSddWydzdHJlYW0nXTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9yZWFkKGludCAkY291bnQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZCgkY291bnQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fd3JpdGUoc3RyaW5nICRkYXRhKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPndyaXRlKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3RlbGwoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnRlbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX2VvZigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fc2VlayhpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2Vlaygkb2Zmc2V0LCAkd2hlbmNlKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fY2FzdChpbnQgJGNhc3RfYXMpCiAgICB7CiAgICAgICAgJHN0cmVhbSA9IGNsb25lICR0aGlzLT5zdHJlYW07CiAgICAgICAgJHJlc291cmNlID0gJHN0cmVhbS0+ZGV0YWNoKCk7CgogICAgICAgIHJldHVybiAkcmVzb3VyY2UgPz8gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5ewogICAgICogICBkZXY6IGludCwKICAgICAqICAgaW5vOiBpbnQsCiAgICAgKiAgIG1vZGU6IGludCwKICAgICAqICAgbmxpbms6IGludCwKICAgICAqICAgdWlkOiBpbnQsCiAgICAgKiAgIGdpZDogaW50LAogICAgICogICByZGV2OiBpbnQsCiAgICAgKiAgIHNpemU6IGludCwKICAgICAqICAgYXRpbWU6IGludCwKICAgICAqICAgbXRpbWU6IGludCwKICAgICAqICAgY3RpbWU6IGludCwKICAgICAqICAgYmxrc2l6ZTogaW50LAogICAgICogICBibG9ja3M6IGludAogICAgICogfXxmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3N0YXQoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRtb2RlTWFwID0gWwogICAgICAgICAgICAncicgPT4gMzMwNjAsCiAgICAgICAgICAgICdyYicgPT4gMzMwNjAsCiAgICAgICAgICAgICdyKycgPT4gMzMyMDYsCiAgICAgICAgICAgICd3JyA9PiAzMzE4OCwKICAgICAgICAgICAgJ3diJyA9PiAzMzE4OCwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnZGV2JyA9PiAwLAogICAgICAgICAgICAnaW5vJyA9PiAwLAogICAgICAgICAgICAnbW9kZScgPT4gJG1vZGVNYXBbJHRoaXMtPm1vZGVdLAogICAgICAgICAgICAnbmxpbmsnID0+IDAsCiAgICAgICAgICAgICd1aWQnID0+IDAsCiAgICAgICAgICAgICdnaWQnID0+IDAsCiAgICAgICAgICAgICdyZGV2JyA9PiAwLAogICAgICAgICAgICAnc2l6ZScgPT4gJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpID86IDAsCiAgICAgICAgICAgICdhdGltZScgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyA9PiAwLAogICAgICAgICAgICAnY3RpbWUnID0+IDAsCiAgICAgICAgICAgICdibGtzaXplJyA9PiAwLAogICAgICAgICAgICAnYmxvY2tzJyA9PiAwLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5ewogICAgICogICBkZXY6IGludCwKICAgICAqICAgaW5vOiBpbnQsCiAgICAgKiAgIG1vZGU6IGludCwKICAgICAqICAgbmxpbms6IGludCwKICAgICAqICAgdWlkOiBpbnQsCiAgICAgKiAgIGdpZDogaW50LAogICAgICogICByZGV2OiBpbnQsCiAgICAgKiAgIHNpemU6IGludCwKICAgICAqICAgYXRpbWU6IGludCwKICAgICAqICAgbXRpbWU6IGludCwKICAgICAqICAgY3RpbWU6IGludCwKICAgICAqICAgYmxrc2l6ZTogaW50LAogICAgICogICBibG9ja3M6IGludAogICAgICogfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXJsX3N0YXQoc3RyaW5nICRwYXRoLCBpbnQgJGZsYWdzKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnZGV2JyA9PiAwLAogICAgICAgICAgICAnaW5vJyA9PiAwLAogICAgICAgICAgICAnbW9kZScgPT4gMCwKICAgICAgICAgICAgJ25saW5rJyA9PiAwLAogICAgICAgICAgICAndWlkJyA9PiAwLAogICAgICAgICAgICAnZ2lkJyA9PiAwLAogICAgICAgICAgICAncmRldicgPT4gMCwKICAgICAgICAgICAgJ3NpemUnID0+IDAsCiAgICAgICAgICAgICdhdGltZScgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyA9PiAwLAogICAgICAgICAgICAnY3RpbWUnID0+IDAsCiAgICAgICAgICAgICdibGtzaXplJyA9PiAwLAogICAgICAgICAgICAnYmxvY2tzJyA9PiAwLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UploadedFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmNsYXNzIFVwbG9hZGVkRmlsZSBpbXBsZW1lbnRzIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IEVSUk9SX01BUCA9IFsKICAgICAgICBVUExPQURfRVJSX09LID0+ICdVUExPQURfRVJSX09LJywKICAgICAgICBVUExPQURfRVJSX0lOSV9TSVpFID0+ICdVUExPQURfRVJSX0lOSV9TSVpFJywKICAgICAgICBVUExPQURfRVJSX0ZPUk1fU0laRSA9PiAnVVBMT0FEX0VSUl9GT1JNX1NJWkUnLAogICAgICAgIFVQTE9BRF9FUlJfUEFSVElBTCA9PiAnVVBMT0FEX0VSUl9QQVJUSUFMJywKICAgICAgICBVUExPQURfRVJSX05PX0ZJTEUgPT4gJ1VQTE9BRF9FUlJfTk9fRklMRScsCiAgICAgICAgVVBMT0FEX0VSUl9OT19UTVBfRElSID0+ICdVUExPQURfRVJSX05PX1RNUF9ESVInLAogICAgICAgIFVQTE9BRF9FUlJfQ0FOVF9XUklURSA9PiAnVVBMT0FEX0VSUl9DQU5UX1dSSVRFJywKICAgICAgICBVUExPQURfRVJSX0VYVEVOU0lPTiA9PiAnVVBMT0FEX0VSUl9FWFRFTlNJT04nLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50RmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNsaWVudE1lZGlhVHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRmaWxlOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJG1vdmVkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRzdHJlYW1PckZpbGUsCiAgICAgICAgP2ludCAkc2l6ZSwKICAgICAgICBpbnQgJGVycm9yU3RhdHVzLAogICAgICAgID9zdHJpbmcgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRjbGllbnRNZWRpYVR5cGUgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+c2V0RXJyb3IoJGVycm9yU3RhdHVzKTsKICAgICAgICAkdGhpcy0+c2l6ZSA9ICRzaXplOwogICAgICAgICR0aGlzLT5jbGllbnRGaWxlbmFtZSA9ICRjbGllbnRGaWxlbmFtZTsKICAgICAgICAkdGhpcy0+Y2xpZW50TWVkaWFUeXBlID0gJGNsaWVudE1lZGlhVHlwZTsKCiAgICAgICAgaWYgKCR0aGlzLT5pc09rKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFN0cmVhbU9yRmlsZSgkc3RyZWFtT3JGaWxlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIHNldCBmaWxlIG9yIHN0cmVhbSB2YXJpYWJsZQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldFN0cmVhbU9yRmlsZSgkc3RyZWFtT3JGaWxlKTogdm9pZAogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHN0cmVhbU9yRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmZpbGUgPSAkc3RyZWFtT3JGaWxlOwogICAgICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkc3RyZWFtT3JGaWxlKSkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gbmV3IFN0cmVhbSgkc3RyZWFtT3JGaWxlKTsKICAgICAgICB9IGVsc2VpZiAoJHN0cmVhbU9yRmlsZSBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbU9yRmlsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgc3RyZWFtIG9yIGZpbGUgcHJvdmlkZWQgZm9yIFVwbG9hZGVkRmlsZScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldEVycm9yKGludCAkZXJyb3IpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCFpc3NldChVcGxvYWRlZEZpbGU6OkVSUk9SX01BUFskZXJyb3JdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgZXJyb3Igc3RhdHVzIGZvciBVcGxvYWRlZEZpbGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZXJyb3IgPSAkZXJyb3I7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNTdHJpbmdOb3RFbXB0eSgkcGFyYW0pOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkcGFyYW0pICYmIGZhbHNlID09PSBlbXB0eSgkcGFyYW0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gdXBsb2FkIGVycm9yCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNPaygpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvciA9PT0gVVBMT0FEX0VSUl9PSzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNNb3ZlZCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb3ZlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBpcyBtb3ZlZCBvciBub3Qgb2sKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2ZSgpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKFxzcHJpbnRmKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGR1ZSB0byB1cGxvYWQgZXJyb3IgKCVzKScsIHNlbGY6OkVSUk9SX01BUFskdGhpcy0+ZXJyb3JdKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmlzTW92ZWQoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHJldHJpZXZlIHN0cmVhbSBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIG1vdmVkJyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKTogU3RyZWFtSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlQWN0aXZlKCk7CgogICAgICAgIGlmICgkdGhpcy0+c3RyZWFtIGluc3RhbmNlb2YgU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRmaWxlICovCiAgICAgICAgJGZpbGUgPSAkdGhpcy0+ZmlsZTsKCiAgICAgICAgcmV0dXJuIG5ldyBMYXp5T3BlblN0cmVhbSgkZmlsZSwgJ3IrJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1vdmVUbygkdGFyZ2V0UGF0aCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGVBY3RpdmUoKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzZWxmOjppc1N0cmluZ05vdEVtcHR5KCR0YXJnZXRQYXRoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcGF0aCBwcm92aWRlZCBmb3IgbW92ZSBvcGVyYXRpb247IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5maWxlKSB7CiAgICAgICAgICAgICR0aGlzLT5tb3ZlZCA9IFBIUF9TQVBJID09PSAnY2xpJwogICAgICAgICAgICAgICAgPyByZW5hbWUoJHRoaXMtPmZpbGUsICR0YXJnZXRQYXRoKQogICAgICAgICAgICAgICAgOiBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRoaXMtPmZpbGUsICR0YXJnZXRQYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBVdGlsczo6Y29weVRvU3RyZWFtKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldFN0cmVhbSgpLAogICAgICAgICAgICAgICAgbmV3IExhenlPcGVuU3RyZWFtKCR0YXJnZXRQYXRoLCAndycpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkdGhpcy0+bW92ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+bW92ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdVcGxvYWRlZCBmaWxlIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byAlcycsICR0YXJnZXRQYXRoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVycm9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGllbnRGaWxlbmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNsaWVudE1lZGlhVHlwZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Uri.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBHdXp6bGVIdHRwXFBzcjdcRXhjZXB0aW9uXE1hbGZvcm1lZFVyaUV4Y2VwdGlvbjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IFVSSSBpbXBsZW1lbnRhdGlvbi4KICoKICogQGF1dGhvciBNaWNoYWVsIERvd2xpbmcKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICogQGF1dGhvciBNYXR0aGV3IFdlaWVyIE8nUGhpbm5leQogKi8KY2xhc3MgVXJpIGltcGxlbWVudHMgVXJpSW50ZXJmYWNlLCBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEFic29sdXRlIGh0dHAgYW5kIGh0dHBzIFVSSXMgcmVxdWlyZSBhIGhvc3QgcGVyIFJGQyA3MjMwIFNlY3Rpb24gMi43CiAgICAgKiBidXQgaW4gZ2VuZXJpYyBVUklzIHRoZSBob3N0IGNhbiBiZSBlbXB0eS4gU28gZm9yIGh0dHAocykgVVJJcwogICAgICogd2UgYXBwbHkgdGhpcyBkZWZhdWx0IGhvc3Qgd2hlbiBubyBob3N0IGlzIGdpdmVuIHlldCB0byBmb3JtIGEKICAgICAqIHZhbGlkIFVSSS4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBIVFRQX0RFRkFVTFRfSE9TVCA9ICdsb2NhbGhvc3QnOwoKICAgIHByaXZhdGUgY29uc3QgREVGQVVMVF9QT1JUUyA9IFsKICAgICAgICAnaHR0cCcgPT4gODAsCiAgICAgICAgJ2h0dHBzJyA9PiA0NDMsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ25udHAnID0+IDExOSwKICAgICAgICAnbmV3cycgPT4gMTE5LAogICAgICAgICd0ZWxuZXQnID0+IDIzLAogICAgICAgICd0bjMyNzAnID0+IDIzLAogICAgICAgICdpbWFwJyA9PiAxNDMsCiAgICAgICAgJ3BvcCcgPT4gMTEwLAogICAgICAgICdsZGFwJyA9PiAzODksCiAgICBdOwoKICAgIHByaXZhdGUgY29uc3QgUVVFUllfU0VQQVJBVE9SU19SRVBMQUNFTUVOVCA9IFsnPScgPT4gJyUzRCcsICcmJyA9PiAnJTI2JywgJysnID0+ICclMkInXTsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHNjaGVtZS4gKi8KICAgIHByaXZhdGUgJHNjaGVtZSA9ICcnOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgdXNlciBpbmZvLiAqLwogICAgcHJpdmF0ZSAkdXNlckluZm8gPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIGhvc3QuICovCiAgICBwcml2YXRlICRob3N0ID0gJyc7CgogICAgLyoqIEB2YXIgaW50fG51bGwgVXJpIHBvcnQuICovCiAgICBwcml2YXRlICRwb3J0OwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgcGF0aC4gKi8KICAgIHByaXZhdGUgJHBhdGggPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHF1ZXJ5IHN0cmluZy4gKi8KICAgIHByaXZhdGUgJHF1ZXJ5ID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBmcmFnbWVudC4gKi8KICAgIHByaXZhdGUgJGZyYWdtZW50ID0gJyc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdXJpID0gJycpCiAgICB7CiAgICAgICAgaWYgKCR1cmkgIT09ICcnKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IHNlbGY6OnBhcnNlKCR1cmkpOwogICAgICAgICAgICBpZiAoJHBhcnRzID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1hbGZvcm1lZFVyaUV4Y2VwdGlvbigiVW5hYmxlIHRvIHBhcnNlIFVSSTogJHVyaSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YXBwbHlQYXJ0cygkcGFydHMpOwogICAgICAgICAgICB9IGNhdGNoIChNYWxmb3JtZWRVcmlFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICB9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkVXJpRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIDAsICRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFVURi04IGF3YXJlIFxwYXJzZV91cmwoKSByZXBsYWNlbWVudC4KICAgICAqCiAgICAgKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gcHJvZHVjZXMgYnJva2VuIG91dHB1dCBmb3Igbm9uIEFTQ0lJIGRvbWFpbiBuYW1lcwogICAgICogKElETikgd2hlbiB1c2VkIHdpdGggbG9jYWxlcyBvdGhlciB0aGFuICJDIi4KICAgICAqCiAgICAgKiBPbiB0aGUgb3RoZXIgaGFuZCwgY1VSTCB1bmRlcnN0YW5kcyBJRE4gY29ycmVjdGx5IG9ubHkgd2hlbiBVVEYtOCBsb2NhbGUKICAgICAqIGlzIGNvbmZpZ3VyZWQgKCJDLlVURi04IiwgImVuX1VTLlVURi04IiwgZXRjLikuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTUyOTIzCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBhcnNlLXVybC5waHAjMTE0ODE3CiAgICAgKiBAc2VlIGh0dHBzOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9DVVJMT1BUX1VSTC5odG1sI0VOQ09ESU5HCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwYXJzZShzdHJpbmcgJHVybCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6aXNQYXRoTm9TY2hlbWVSZWZlcmVuY2UoJHVybCkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OnBhcnNlUGF0aE5vU2NoZW1lUmVmZXJlbmNlKCR1cmwpOwogICAgICAgIH0KCiAgICAgICAgLy8gUHJlc2VydmUgYnJhY2tldGVkIElQdjYgbGl0ZXJhbHMgYmVmb3JlIGVuY29kaW5nLCBpbmNsdWRpbmcgZG90dGVkIElQdjQgdGFpbHMuCiAgICAgICAgJHByZWZpeCA9ICcnOwogICAgICAgIGlmIChwcmVnX21hdGNoKCclXihbMC05QS1aYS16Ky4tXSs6Ly9cW1swLTk6LmEtZkEtRl0rXF0pKC4qPykkJScsICR1cmwsICRtYXRjaGVzKSkgewogICAgICAgICAgICAvKiogQHZhciBhcnJheXswOnN0cmluZywgMTpzdHJpbmcsIDI6c3RyaW5nfSAkbWF0Y2hlcyAqLwogICAgICAgICAgICAkcHJlZml4ID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICR1cmwgPSAkbWF0Y2hlc1syXTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICAgICAgJGVuY29kZWRVcmwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICclW146L0A/Jj0jXSsldXNEJywKICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkbWF0Y2hlcykgewogICAgICAgICAgICAgICAgcmV0dXJuIHVybGVuY29kZSgkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICR1cmwKICAgICAgICApOwoKICAgICAgICBpZiAoJGVuY29kZWRVcmwgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IHBhcnNlX3VybCgkcHJlZml4LiRlbmNvZGVkVXJsKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV9tYXAoJ3VybGRlY29kZScsICRyZXN1bHQpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGlzUGF0aE5vU2NoZW1lUmVmZXJlbmNlKHN0cmluZyAkdXJsKTogYm9vbAogICAgewogICAgICAgIGlmICgkdXJsID09PSAnJyB8fCAkdXJsWzBdID09PSAnLycgfHwgJHVybFswXSA9PT0gJz8nIHx8ICR1cmxbMF0gPT09ICcjJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3RTZWdtZW50ID0gc3Vic3RyKCR1cmwsIDAsIHN0cmNzcG4oJHVybCwgJy8/IycpKTsKCiAgICAgICAgcmV0dXJuIHN0cnBvcygkZmlyc3RTZWdtZW50LCAnOicpID09PSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7cGF0aDogc3RyaW5nLCBxdWVyeT86IHN0cmluZywgZnJhZ21lbnQ/OiBzdHJpbmd9CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUGF0aE5vU2NoZW1lUmVmZXJlbmNlKHN0cmluZyAkdXJsKTogYXJyYXkKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKCiAgICAgICAgaWYgKGZhbHNlICE9PSAoJGZyYWdtZW50UG9zaXRpb24gPSBzdHJwb3MoJHVybCwgJyMnKSkpIHsKICAgICAgICAgICAgJHBhcnRzWydmcmFnbWVudCddID0gc3Vic3RyKCR1cmwsICRmcmFnbWVudFBvc2l0aW9uICsgMSk7CiAgICAgICAgICAgICR1cmwgPSBzdWJzdHIoJHVybCwgMCwgJGZyYWdtZW50UG9zaXRpb24pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlICE9PSAoJHF1ZXJ5UG9zaXRpb24gPSBzdHJwb3MoJHVybCwgJz8nKSkpIHsKICAgICAgICAgICAgJHBhcnRzWydxdWVyeSddID0gc3Vic3RyKCR1cmwsICRxdWVyeVBvc2l0aW9uICsgMSk7CiAgICAgICAgICAgICR1cmwgPSBzdWJzdHIoJHVybCwgMCwgJHF1ZXJ5UG9zaXRpb24pOwogICAgICAgIH0KCiAgICAgICAgJHBhcnRzWydwYXRoJ10gPSAkdXJsOwoKICAgICAgICByZXR1cm4gJHBhcnRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjb21wb3NlQ29tcG9uZW50cygKICAgICAgICAgICAgJHRoaXMtPnNjaGVtZSwKICAgICAgICAgICAgJHRoaXMtPmdldEF1dGhvcml0eSgpLAogICAgICAgICAgICAkdGhpcy0+cGF0aCwKICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5LAogICAgICAgICAgICAkdGhpcy0+ZnJhZ21lbnQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcG9zZXMgYSBVUkkgcmVmZXJlbmNlIHN0cmluZyBmcm9tIGl0cyB2YXJpb3VzIGNvbXBvbmVudHMuCiAgICAgKgogICAgICogVXN1YWxseSB0aGlzIG1ldGhvZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCBtYW51YWxseSBidXQgaW5zdGVhZCBpcyB1c2VkIGluZGlyZWN0bHkgdmlhCiAgICAgKiBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6Ol9fdG9TdHJpbmdgLgogICAgICoKICAgICAqIFBTUi03IFVyaUludGVyZmFjZSB0cmVhdHMgYW4gZW1wdHkgY29tcG9uZW50IHRoZSBzYW1lIGFzIGEgbWlzc2luZyBjb21wb25lbnQgYXMKICAgICAqIGdldFF1ZXJ5KCksIGdldEZyYWdtZW50KCkgZXRjLiBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLiBUaGlzIGV4cGxhaW5zIHRoZSBzbGlnaHQKICAgICAqIGRpZmZlcmVuY2UgdG8gUkZDIDM5ODYgU2VjdGlvbiA1LjMuCiAgICAgKgogICAgICogQW5vdGhlciBhZGp1c3RtZW50IGlzIHRoYXQgdGhlIGF1dGhvcml0eSBzZXBhcmF0b3IgaXMgYWRkZWQgZXZlbiB3aGVuIHRoZSBhdXRob3JpdHkgaXMgbWlzc2luZy9lbXB0eQogICAgICogZm9yIHRoZSAiZmlsZSIgc2NoZW1lLiBUaGlzIGlzIGJlY2F1c2UgUEhQIHN0cmVhbSBmdW5jdGlvbnMgbGlrZSBgZmlsZV9nZXRfY29udGVudHNgIG9ubHkgd29yayB3aXRoCiAgICAgKiBgZmlsZTovLy9teWZpbGVgIGJ1dCBub3Qgd2l0aCBgZmlsZTovbXlmaWxlYCBhbHRob3VnaCB0aGV5IGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0byBSRkMgMzk4Ni4gQnV0CiAgICAgKiBgZmlsZTovLy9gIGlzIHRoZSBtb3JlIGNvbW1vbiBzeW50YXggZm9yIHRoZSBmaWxlIHNjaGVtZSBhbnl3YXkgKENocm9tZSBmb3IgZXhhbXBsZSByZWRpcmVjdHMgdG8KICAgICAqIHRoYXQgZm9ybWF0KS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBvc2VDb21wb25lbnRzKD9zdHJpbmcgJHNjaGVtZSwgP3N0cmluZyAkYXV0aG9yaXR5LCBzdHJpbmcgJHBhdGgsID9zdHJpbmcgJHF1ZXJ5LCA/c3RyaW5nICRmcmFnbWVudCk6IHN0cmluZwogICAgewogICAgICAgICR1cmkgPSAnJzsKCiAgICAgICAgLy8gd2VhayB0eXBlIGNoZWNrcyB0byBhbHNvIGFjY2VwdCBudWxsIHVudGlsIHdlIGNhbiBhZGQgc2NhbGFyIHR5cGUgaGludHMKICAgICAgICBpZiAoJHNjaGVtZSAhPSAnJykgewogICAgICAgICAgICAkdXJpIC49ICRzY2hlbWUuJzonOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhdXRob3JpdHkgIT0gJycgfHwgJHNjaGVtZSA9PT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJy8vJy4kYXV0aG9yaXR5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRhdXRob3JpdHkgIT0gJycgJiYgJHBhdGggIT0gJycgJiYgJHBhdGhbMF0gIT0gJy8nKSB7CiAgICAgICAgICAgICRwYXRoID0gJy8nLiRwYXRoOwogICAgICAgIH0KCiAgICAgICAgJHVyaSAuPSAkcGF0aDsKCiAgICAgICAgaWYgKCRxdWVyeSAhPSAnJykgewogICAgICAgICAgICAkdXJpIC49ICc/Jy4kcXVlcnk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZyYWdtZW50ICE9ICcnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJyMnLiRmcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGhhcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBjdXJyZW50IHNjaGVtZS4KICAgICAqCiAgICAgKiBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6OmdldFBvcnRgIG1heSByZXR1cm4gbnVsbCBvciB0aGUgc3RhbmRhcmQgcG9ydC4gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQKICAgICAqIGluZGVwZW5kZW50bHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRGVmYXVsdFBvcnQoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFBvcnQoKSA9PT0gbnVsbAogICAgICAgICAgICB8fCAoaXNzZXQoc2VsZjo6REVGQVVMVF9QT1JUU1skdXJpLT5nZXRTY2hlbWUoKV0pICYmICR1cmktPmdldFBvcnQoKSA9PT0gc2VsZjo6REVGQVVMVF9QT1JUU1skdXJpLT5nZXRTY2hlbWUoKV0pOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLCBpLmUuIGl0IGhhcyBhIHNjaGVtZS4KICAgICAqCiAgICAgKiBBbiBpbnN0YW5jZSBvZiBVcmlJbnRlcmZhY2UgY2FuIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBVUkkgb3IgYSByZWxhdGl2ZSByZWZlcmVuY2UuIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZQogICAgICogaWYgaXQgaXMgdGhlIGZvcm1lci4gQW4gYWJzb2x1dGUgVVJJIGhhcyBhIHNjaGVtZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgaXMgdXNlZCB0byBleHByZXNzIGEgVVJJIHJlbGF0aXZlCiAgICAgKiB0byBhbm90aGVyIFVSSSwgdGhlIGJhc2UgVVJJLiBSZWxhdGl2ZSByZWZlcmVuY2VzIGNhbiBiZSBkaXZpZGVkIGludG8gc2V2ZXJhbCBmb3JtczoKICAgICAqIC0gbmV0d29yay1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gJy8vZXhhbXBsZS5jb20vcGF0aCcKICAgICAqIC0gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICcvcGF0aCcKICAgICAqIC0gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICdzdWJwYXRoJwogICAgICoKICAgICAqIEBzZWUgVXJpOjppc05ldHdvcmtQYXRoUmVmZXJlbmNlCiAgICAgKiBAc2VlIFVyaTo6aXNBYnNvbHV0ZVBhdGhSZWZlcmVuY2UKICAgICAqIEBzZWUgVXJpOjppc1JlbGF0aXZlUGF0aFJlZmVyZW5jZQogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi00CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgIT09ICcnOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGEgbmV0d29yay1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzIGlzIHRlcm1lZCBhbiBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNOZXR3b3JrUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICcnICYmICR1cmktPmdldEF1dGhvcml0eSgpICE9PSAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIFVSSSBpcyBhIGFic29sdXRlLXBhdGggcmVmZXJlbmNlLgogICAgICoKICAgICAqIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVnaW5zIHdpdGggYSBzaW5nbGUgc2xhc2ggY2hhcmFjdGVyIGlzIHRlcm1lZCBhbiBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnCiAgICAgICAgICAgICYmIGlzc2V0KCR1cmktPmdldFBhdGgoKVswXSkKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0UGF0aCgpWzBdID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIgaXMgdGVybWVkIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZlUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICcnCiAgICAgICAgICAgICYmICR1cmktPmdldEF1dGhvcml0eSgpID09PSAnJwogICAgICAgICAgICAmJiAoIWlzc2V0KCR1cmktPmdldFBhdGgoKVswXSkgfHwgJHVyaS0+Z2V0UGF0aCgpWzBdICE9PSAnLycpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZSByZWZlcnMgdG8gYSBVUkkgdGhhdCBpcywgYXNpZGUgZnJvbSBpdHMgZnJhZ21lbnQKICAgICAqIGNvbXBvbmVudCwgaWRlbnRpY2FsIHRvIHRoZSBiYXNlIFVSSS4gV2hlbiBubyBiYXNlIFVSSSBpcyBnaXZlbiwgb25seSBhbiBlbXB0eQogICAgICogVVJJIHJlZmVyZW5jZSAoYXBhcnQgZnJvbSBpdHMgZnJhZ21lbnQpIGlzIGNvbnNpZGVyZWQgYSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICAgICAgJHVyaSAgVGhlIFVSSSB0byBjaGVjawogICAgICogQHBhcmFtIFVyaUludGVyZmFjZXxudWxsICRiYXNlIEFuIG9wdGlvbmFsIGJhc2UgVVJJIHRvIGNvbXBhcmUgYWdhaW5zdAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNTYW1lRG9jdW1lbnRSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmksID9VcmlJbnRlcmZhY2UgJGJhc2UgPSBudWxsKTogYm9vbAogICAgewogICAgICAgIGlmICgkYmFzZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdXJpID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJGJhc2UsICR1cmkpOwoKICAgICAgICAgICAgcmV0dXJuICgkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJGJhc2UtPmdldFNjaGVtZSgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldEF1dGhvcml0eSgpID09PSAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkpCiAgICAgICAgICAgICAgICAmJiAoJHVyaS0+Z2V0UGF0aCgpID09PSAkYmFzZS0+Z2V0UGF0aCgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldFF1ZXJ5KCkgPT09ICRiYXNlLT5nZXRRdWVyeSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnICYmICR1cmktPmdldFBhdGgoKSA9PT0gJycgJiYgJHVyaS0+Z2V0UXVlcnkoKSA9PT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlIHJlbW92ZWQuCiAgICAgKgogICAgICogQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBwcm92aWRlZCBrZXkgYXJlCiAgICAgKiByZW1vdmVkLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaSBVUkkgdG8gdXNlIGFzIGEgYmFzZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGtleSBRdWVyeSBzdHJpbmcga2V5IHRvIHJlbW92ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRob3V0UXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgc3RyaW5nICRrZXkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcmVzdWx0ID0gc2VsZjo6Z2V0RmlsdGVyZWRRdWVyeVN0cmluZygkdXJpLCBbJGtleV0pOwoKICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFF1ZXJ5KGltcGxvZGUoJyYnLCAkcmVzdWx0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlLgogICAgICoKICAgICAqIEFueSBleGlzdGluZyBxdWVyeSBzdHJpbmcgdmFsdWVzIHRoYXQgZXhhY3RseSBtYXRjaCB0aGUgcHJvdmlkZWQga2V5IGFyZQogICAgICogcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IHZhbHVlIHBhaXIuCiAgICAgKgogICAgICogQSB2YWx1ZSBvZiBudWxsIHdpbGwgc2V0IHRoZSBxdWVyeSBzdHJpbmcga2V5IHdpdGhvdXQgYSB2YWx1ZSwgZS5nLiAia2V5IgogICAgICogaW5zdGVhZCBvZiAia2V5PXZhbHVlIi4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkgICBVUkkgdG8gdXNlIGFzIGEgYmFzZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGtleSAgIEtleSB0byBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICR2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRoUXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgc3RyaW5nICRrZXksID9zdHJpbmcgJHZhbHVlKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHNlbGY6OmdldEZpbHRlcmVkUXVlcnlTdHJpbmcoJHVyaSwgWyRrZXldKTsKCiAgICAgICAgJHJlc3VsdFtdID0gc2VsZjo6Z2VuZXJhdGVRdWVyeVN0cmluZygka2V5LCAkdmFsdWUpOwoKICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFF1ZXJ5KGltcGxvZGUoJyYnLCAkcmVzdWx0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIG11bHRpcGxlIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZXMuCiAgICAgKgogICAgICogSXQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHdpdGhRdWVyeVZhbHVlKCkgYnV0IGZvciBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBrZXkgPT4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAgICAkdXJpICAgICAgICAgICBVUkkgdG8gdXNlIGFzIGEgYmFzZS4KICAgICAqIEBwYXJhbSAoc3RyaW5nfG51bGwpW10gJGtleVZhbHVlQXJyYXkgQXNzb2NpYXRpdmUgYXJyYXkgb2Yga2V5IGFuZCB2YWx1ZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRoUXVlcnlWYWx1ZXMoVXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRrZXlWYWx1ZUFycmF5KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHNlbGY6OmdldEZpbHRlcmVkUXVlcnlTdHJpbmcoJHVyaSwgYXJyYXlfa2V5cygka2V5VmFsdWVBcnJheSkpOwoKICAgICAgICBmb3JlYWNoICgka2V5VmFsdWVBcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkcmVzdWx0W10gPSBzZWxmOjpnZW5lcmF0ZVF1ZXJ5U3RyaW5nKChzdHJpbmcpICRrZXksICR2YWx1ZSAhPT0gbnVsbCA/IHNlbGY6OnN0cmluZ2lmeVF1ZXJ5VmFsdWUoJHZhbHVlKSA6IG51bGwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPndpdGhRdWVyeShpbXBsb2RlKCcmJywgJHJlc3VsdCkpOwogICAgfQoKICAgIC8qKgogICAgICogU3RyaW5naWZpZXMgYSBub24tbnVsbCBxdWVyeSB2YWx1ZSwgZGVwcmVjYXRpbmcgbm9uLXN0cmluZyB2YWx1ZXMgdGhhdAogICAgICogZ3V6emxlaHR0cC9wc3I3IDMuMCB3aWxsIHJlamVjdC4gTm9uLWZpbml0ZSBmbG9hdHMgYXJlIG5vcm1hbGl6ZWQgdG8gdGhlCiAgICAgKiBzdHJpbmdzIFBIUCBjb2VyY2VzIHRoZW0gdG8sIGFzIGltcGxpY2l0IGNvZXJjaW9uIG9mIE5BTiBlbWl0cyBhIHdhcm5pbmcKICAgICAqIG9uIFBIUCA4LjUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzdHJpbmdpZnlRdWVyeVZhbHVlKCR2YWx1ZSk6IHN0cmluZwogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjEyJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFVyaTo6d2l0aFF1ZXJ5VmFsdWVzKCkgaXMgZGVwcmVjYXRlZDsgY2FzdCBpdCB0byBhIHN0cmluZy4gZ3V6emxlaHR0cC9wc3I3IDMuMCB3aWxsIG9ubHkgYWNjZXB0IHN0cmluZyBvciBudWxsIHF1ZXJ5IHZhbHVlcy4nLAogICAgICAgICAgICAgICAgXGdldHR5cGUoJHZhbHVlKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKGlzX2Zsb2F0KCR2YWx1ZSkgJiYgIWlzX2Zpbml0ZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfbmFuKCR2YWx1ZSkgPyAnTkFOJyA6ICgkdmFsdWUgPiAwID8gJ0lORicgOiAnLUlORicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFVSSSBmcm9tIGEgaGFzaCBvZiBgcGFyc2VfdXJsYCBjb21wb25lbnRzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGFyc2UtdXJsLnBocAogICAgICoKICAgICAqIEB0aHJvd3MgTWFsZm9ybWVkVXJpRXhjZXB0aW9uIElmIHRoZSBjb21wb25lbnRzIGRvIG5vdCBmb3JtIGEgdmFsaWQgVVJJLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21QYXJ0cyhhcnJheSAkcGFydHMpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXJpID0gbmV3IHNlbGYoKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdXJpLT5hcHBseVBhcnRzKCRwYXJ0cyk7CiAgICAgICAgICAgICR1cmktPnZhbGlkYXRlU3RhdGUoKTsKICAgICAgICB9IGNhdGNoIChNYWxmb3JtZWRVcmlFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfSBjYXRjaCAoXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkVXJpRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIDAsICRlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBob3N0IGlzIGludmFsaWQuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXNzZXJ0VmFsaWRIb3N0KHN0cmluZyAkaG9zdCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJGhvc3QgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvW1x4MDAtXHgyMFx4N0ZdLycsICRob3N0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdJbnZhbGlkIGhvc3Q6ICIlcyInLCAkaG9zdCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2NoZW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpdHkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGF1dGhvcml0eSA9ICR0aGlzLT5ob3N0OwogICAgICAgIGlmICgkdGhpcy0+dXNlckluZm8gIT09ICcnKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgPSAkdGhpcy0+dXNlckluZm8uJ0AnLiRhdXRob3JpdHk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnBvcnQgIT09IG51bGwpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSAuPSAnOicuJHRoaXMtPnBvcnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGF1dGhvcml0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VySW5mbzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhvc3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cG9ydDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cXVlcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZnJhZ21lbnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoJHNjaGVtZSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRzY2hlbWUgPSAkdGhpcy0+ZmlsdGVyU2NoZW1lKCRzY2hlbWUpOwoKICAgICAgICBpZiAoJHRoaXMtPnNjaGVtZSA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c2NoZW1lID0gJHNjaGVtZTsKICAgICAgICAkbmV3LT5yZW1vdmVEZWZhdWx0UG9ydCgpOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRpbmZvID0gJHRoaXMtPmZpbHRlclVzZXJJbmZvQ29tcG9uZW50KCR1c2VyKTsKICAgICAgICBpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgICAgICRpbmZvIC49ICc6Jy4kdGhpcy0+ZmlsdGVyVXNlckluZm9Db21wb25lbnQoJHBhc3N3b3JkKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dXNlckluZm8gPT09ICRpbmZvKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT51c2VySW5mbyA9ICRpbmZvOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+ZmlsdGVySG9zdCgkaG9zdCk7CgogICAgICAgIGlmICgkdGhpcy0+aG9zdCA9PT0gJGhvc3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmhvc3QgPSAkaG9zdDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCgkcG9ydCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkcG9ydCAhPT0gbnVsbCAmJiAhXGlzX2ludCgkcG9ydCkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICVzIHRvIFVyaUludGVyZmFjZTo6d2l0aFBvcnQoKSBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzIGludHxudWxsLicsCiAgICAgICAgICAgICAgICBcZ2V0X2RlYnVnX3R5cGUoJHBvcnQpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9ICR0aGlzLT5maWx0ZXJQb3J0KCRwb3J0KTsKCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ID09PSAkcG9ydCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cG9ydCA9ICRwb3J0OwogICAgICAgICRuZXctPnJlbW92ZURlZmF1bHRQb3J0KCk7CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhdGgoJHBhdGgpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcGF0aCA9ICR0aGlzLT5maWx0ZXJQYXRoKCRwYXRoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5wYXRoID09PSAkcGF0aCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cGF0aCA9ICRwYXRoOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeSgkcXVlcnkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcXVlcnkgPSAkdGhpcy0+ZmlsdGVyUXVlcnlBbmRGcmFnbWVudCgkcXVlcnkpOwoKICAgICAgICBpZiAoJHRoaXMtPnF1ZXJ5ID09PSAkcXVlcnkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnF1ZXJ5ID0gJHF1ZXJ5OwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRmcmFnbWVudCA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgICAgIGlmICgkdGhpcy0+ZnJhZ21lbnQgPT09ICRmcmFnbWVudCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+ZnJhZ21lbnQgPSAkZnJhZ21lbnQ7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X190b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICogQXBwbHkgcGFyc2VfdXJsIHBhcnRzIHRvIGEgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFydHMgQXJyYXkgb2YgcGFyc2VfdXJsIHBhcnRzIHRvIGFwcGx5LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5UGFydHMoYXJyYXkgJHBhcnRzKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5zY2hlbWUgPSBpc3NldCgkcGFydHNbJ3NjaGVtZSddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJTY2hlbWUoJHBhcnRzWydzY2hlbWUnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+dXNlckluZm8gPSBpc3NldCgkcGFydHNbJ3VzZXInXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyVXNlckluZm9Db21wb25lbnQoJHBhcnRzWyd1c2VyJ10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPmhvc3QgPSBpc3NldCgkcGFydHNbJ2hvc3QnXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVySG9zdCgkcGFydHNbJ2hvc3QnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+cG9ydCA9IGlzc2V0KCRwYXJ0c1sncG9ydCddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJQb3J0KCRwYXJ0c1sncG9ydCddKQogICAgICAgICAgICA6IG51bGw7CiAgICAgICAgJHRoaXMtPnBhdGggPSBpc3NldCgkcGFydHNbJ3BhdGgnXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyUGF0aCgkcGFydHNbJ3BhdGgnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+cXVlcnkgPSBpc3NldCgkcGFydHNbJ3F1ZXJ5J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclF1ZXJ5QW5kRnJhZ21lbnQoJHBhcnRzWydxdWVyeSddKQogICAgICAgICAgICA6ICcnOwogICAgICAgICR0aGlzLT5mcmFnbWVudCA9IGlzc2V0KCRwYXJ0c1snZnJhZ21lbnQnXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyUXVlcnlBbmRGcmFnbWVudCgkcGFydHNbJ2ZyYWdtZW50J10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgaWYgKGlzc2V0KCRwYXJ0c1sncGFzcyddKSkgewogICAgICAgICAgICAkdGhpcy0+dXNlckluZm8gLj0gJzonLiR0aGlzLT5maWx0ZXJVc2VySW5mb0NvbXBvbmVudCgkcGFydHNbJ3Bhc3MnXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVtb3ZlRGVmYXVsdFBvcnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkc2NoZW1lCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBzY2hlbWUgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJTY2hlbWUoJHNjaGVtZSk6IHN0cmluZwogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRzY2hlbWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdTY2hlbWUgbXVzdCBiZSBhIHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgJHNjaGVtZSA9IFxzdHJ0cigkc2NoZW1lLCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonKTsKCiAgICAgICAgaWYgKCRzY2hlbWUgIT09ICcnICYmICFwcmVnX21hdGNoKCcvXlthLXpdW2EtejAtOS4rLV0qJC9EJywgJHNjaGVtZSkpIHsKICAgICAgICAgICAgXHRyaWdnZXJfZGVwcmVjYXRpb24oCiAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgICAgICdQYXNzaW5nICIlcyIgYXMgYSBVUkkgc2NoZW1lIGlzIGRlcHJlY2F0ZWQ7IGd1enpsZWh0dHAvcHNyNyAzLjAgcmVxdWlyZXMgVVJJIHNjaGVtZXMgdG8gbWF0Y2ggUkZDIDM5ODYgc3ludGF4IGFuZCBiZWdpbiB3aXRoIGEgbGV0dGVyLicsCiAgICAgICAgICAgICAgICAkc2NoZW1lCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNjaGVtZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkY29tcG9uZW50CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSB1c2VyIGluZm8gaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJVc2VySW5mb0NvbXBvbmVudCgkY29tcG9uZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGNvbXBvbmVudCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VzZXIgaW5mbyBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnLyg/OlteJScuUmZjMzk4Njo6Q0hBUl9VTlJFU0VSVkVELlJmYzM5ODY6OkNIQVJfU1VCX0RFTElNUy4nXSt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRjb21wb25lbnQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRob3N0CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBob3N0IGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVySG9zdCgkaG9zdCk6IHN0cmluZwogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRob3N0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSG9zdCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICAkaG9zdCA9IFxzdHJ0cigkaG9zdCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJywgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jyk7CiAgICAgICAgc2VsZjo6YXNzZXJ0VmFsaWRIb3N0KCRob3N0KTsKCiAgICAgICAgcmV0dXJuICRob3N0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBwb3J0IGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyUG9ydCgkcG9ydCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHBvcnQgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9IChpbnQpICRwb3J0OwogICAgICAgIGlmICgwID4gJHBvcnQgfHwgMHhGRkZGIDwgJHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdJbnZhbGlkIHBvcnQ6ICVkLiBNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjU1MzUnLCAkcG9ydCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcG9ydDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAoc3RyaW5nfGludClbXSAka2V5cwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsdGVyZWRRdWVyeVN0cmluZyhVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJGtleXMpOiBhcnJheQogICAgewogICAgICAgICRjdXJyZW50ID0gJHVyaS0+Z2V0UXVlcnkoKTsKCiAgICAgICAgaWYgKCRjdXJyZW50ID09PSAnJykgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAkZGVjb2RlZEtleXMgPSBhcnJheV9tYXAoZnVuY3Rpb24gKCRrKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZSgoc3RyaW5nKSAkayk7CiAgICAgICAgfSwgJGtleXMpOwoKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKGV4cGxvZGUoJyYnLCAkY3VycmVudCksIGZ1bmN0aW9uICgkcGFydCkgdXNlICgkZGVjb2RlZEtleXMpIHsKICAgICAgICAgICAgcmV0dXJuICFpbl9hcnJheShyYXd1cmxkZWNvZGUoZXhwbG9kZSgnPScsICRwYXJ0KVswXSksICRkZWNvZGVkS2V5cywgdHJ1ZSk7CiAgICAgICAgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVRdWVyeVN0cmluZyhzdHJpbmcgJGtleSwgP3N0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBRdWVyeSBzdHJpbmcgc2VwYXJhdG9ycyAoIj0iLCAiJiIpIGFuZCBsaXRlcmFsIHBsdXMgc2lnbnMgKCIrIikgd2l0aGluIHRoZQogICAgICAgIC8vIGtleSBvciB2YWx1ZSBuZWVkIHRvIGJlIGVuY29kZWQKICAgICAgICAvLyAod2hpbGUgcHJldmVudGluZyBkb3VibGUtZW5jb2RpbmcpIGJlZm9yZSBzZXR0aW5nIHRoZSBxdWVyeSBzdHJpbmcuIEFsbCBvdGhlcgogICAgICAgIC8vIGNoYXJzIHRoYXQgbmVlZCBwZXJjZW50LWVuY29kaW5nIHdpbGwgYmUgZW5jb2RlZCBieSB3aXRoUXVlcnkoKS4KICAgICAgICAkcXVlcnlTdHJpbmcgPSBzdHJ0cigka2V5LCBzZWxmOjpRVUVSWV9TRVBBUkFUT1JTX1JFUExBQ0VNRU5UKTsKCiAgICAgICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkcXVlcnlTdHJpbmcgLj0gJz0nLnN0cnRyKCR2YWx1ZSwgc2VsZjo6UVVFUllfU0VQQVJBVE9SU19SRVBMQUNFTUVOVCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHF1ZXJ5U3RyaW5nOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVtb3ZlRGVmYXVsdFBvcnQoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+cG9ydCAhPT0gbnVsbCAmJiBzZWxmOjppc0RlZmF1bHRQb3J0KCR0aGlzKSkgewogICAgICAgICAgICAkdGhpcy0+cG9ydCA9IG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVycyB0aGUgcGF0aCBvZiBhIFVSSQogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkcGF0aAogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcGF0aCBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlclBhdGgoJHBhdGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkcGF0aCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhdGggbXVzdCBiZSBhIHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy8oPzpbXicuUmZjMzk4Njo6Q0hBUl9VTlJFU0VSVkVELlJmYzM5ODY6OkNIQVJfU1VCX0RFTElNUy4nJTpAXC9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRwYXRoCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlcnMgdGhlIHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudCBvZiBhIFVSSS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcXVlcnkgb3IgZnJhZ21lbnQgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRzdHIpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkc3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUXVlcnkgYW5kIGZyYWdtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcvKD86W14nLlJmYzM5ODY6OkNIQVJfVU5SRVNFUlZFRC5SZmMzOTg2OjpDSEFSX1NVQl9ERUxJTVMuJyU6QFwvXD9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRzdHIKICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmF3dXJsZW5jb2RlTWF0Y2haZXJvKGFycmF5ICRtYXRjaCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiByYXd1cmxlbmNvZGUoJG1hdGNoWzBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlU3RhdGUoKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+aG9zdCA9PT0gJycgJiYgKCR0aGlzLT5zY2hlbWUgPT09ICdodHRwJyB8fCAkdGhpcy0+c2NoZW1lID09PSAnaHR0cHMnKSkgewogICAgICAgICAgICAkdGhpcy0+aG9zdCA9IHNlbGY6OkhUVFBfREVGQVVMVF9IT1NUOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5nZXRBdXRob3JpdHkoKSA9PT0gJycpIHsKICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkdGhpcy0+cGF0aCwgJy8vJykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVcmlFeGNlcHRpb24oJ1RoZSBwYXRoIG9mIGEgVVJJIHdpdGhvdXQgYW4gYXV0aG9yaXR5IG11c3Qgbm90IHN0YXJ0IHdpdGggdHdvIHNsYXNoZXMgIi8vIicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkdGhpcy0+c2NoZW1lID09PSAnJyAmJiBmYWxzZSAhPT0gc3RycG9zKGV4cGxvZGUoJy8nLCAkdGhpcy0+cGF0aCwgMilbMF0sICc6JykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVcmlFeGNlcHRpb24oJ0EgcmVsYXRpdmUgVVJJIG11c3Qgbm90IGhhdmUgYSBwYXRoIGJlZ2lubmluZyB3aXRoIGEgc2VnbWVudCBjb250YWluaW5nIGEgY29sb24nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriComparator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIGRldGVybWluZSBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4uCiAqCiAqIEBhdXRob3IgR3JhaGFtIENhbXBiZWxsCiAqLwpmaW5hbCBjbGFzcyBVcmlDb21wYXJhdG9yCnsKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiBhIG1vZGlmaWVkIFVSTCBzaG91bGQgYmUgY29uc2lkZXJlZCBjcm9zcy1vcmlnaW4gd2l0aAogICAgICogcmVzcGVjdCB0byBhbiBvcmlnaW5hbCBVUkwuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDcm9zc09yaWdpbihVcmlJbnRlcmZhY2UgJG9yaWdpbmFsLCBVcmlJbnRlcmZhY2UgJG1vZGlmaWVkKTogYm9vbAogICAgewogICAgICAgIGlmIChcc3RyY2FzZWNtcCgkb3JpZ2luYWwtPmdldEhvc3QoKSwgJG1vZGlmaWVkLT5nZXRIb3N0KCkpICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcmlnaW5hbC0+Z2V0U2NoZW1lKCkgIT09ICRtb2RpZmllZC0+Z2V0U2NoZW1lKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6Y29tcHV0ZVBvcnQoJG9yaWdpbmFsKSAhPT0gc2VsZjo6Y29tcHV0ZVBvcnQoJG1vZGlmaWVkKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wdXRlUG9ydChVcmlJbnRlcmZhY2UgJHVyaSk6ID9pbnQKICAgIHsKICAgICAgICAkcG9ydCA9ICR1cmktPmdldFBvcnQoKTsKCiAgICAgICAgaWYgKG51bGwgIT09ICRwb3J0KSB7CiAgICAgICAgICAgIHJldHVybiAkcG9ydDsKICAgICAgICB9CgogICAgICAgIGlmICgnaHR0cCcgPT09ICR1cmktPmdldFNjaGVtZSgpKSB7CiAgICAgICAgICAgIHJldHVybiA4MDsKICAgICAgICB9CgogICAgICAgIGlmICgnaHR0cHMnID09PSAkdXJpLT5nZXRTY2hlbWUoKSkgewogICAgICAgICAgICByZXR1cm4gNDQzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgLy8gY2Fubm90IGJlIGluc3RhbnRpYXRlZAogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriNormalizer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIG5vcm1hbGl6ZSBhbmQgY29tcGFyZSBVUklzLgogKgogKiBAYXV0aG9yIFRvYmlhcyBTY2h1bHR6ZQogKgogKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYKICovCmZpbmFsIGNsYXNzIFVyaU5vcm1hbGl6ZXIKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IG5vcm1hbGl6YXRpb25zIHdoaWNoIG9ubHkgaW5jbHVkZSB0aGUgb25lcyB0aGF0IHByZXNlcnZlIHNlbWFudGljcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMgPQogICAgICAgIHNlbGY6OkNBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORyB8CiAgICAgICAgc2VsZjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSUyB8CiAgICAgICAgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIIHwKICAgICAgICBzZWxmOjpSRU1PVkVfREVGQVVMVF9IT1NUIHwKICAgICAgICBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUIHwKICAgICAgICBzZWxmOjpSRU1PVkVfRE9UX1NFR01FTlRTOwoKICAgIC8qKgogICAgICogQWxsIGxldHRlcnMgd2l0aGluIGEgcGVyY2VudC1lbmNvZGluZyB0cmlwbGV0IChlLmcuLCAiJTNBIikgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzaG91bGQgYmUgY2FwaXRhbGl6ZWQuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnL2ElYzIlYjFiIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYSVDMiVCMWIKICAgICAqLwogICAgcHVibGljIGNvbnN0IENBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORyA9IDE7CgogICAgLyoqCiAgICAgKiBEZWNvZGVzIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgb2YgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzLgogICAgICoKICAgICAqIEZvciBjb25zaXN0ZW5jeSwgcGVyY2VudC1lbmNvZGVkIG9jdGV0cyBpbiB0aGUgcmFuZ2VzIG9mIEFMUEhBICglNDHigJMlNUEgYW5kICU2MeKAkyU3QSksIERJR0lUICglMzDigJMlMzkpLAogICAgICogaHlwaGVuICglMkQpLCBwZXJpb2QgKCUyRSksIHVuZGVyc2NvcmUgKCU1RiksIG9yIHRpbGRlICglN0UpIHNob3VsZCBub3QgYmUgY3JlYXRlZCBieSBVUkkgcHJvZHVjZXJzIGFuZCwKICAgICAqIHdoZW4gZm91bmQgaW4gYSBVUkksIHNob3VsZCBiZSBkZWNvZGVkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGJ5IFVSSSBub3JtYWxpemVycy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvJTdFdXNlcm4lNjFtZS8g4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9+dXNlcm5hbWUvCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTID0gMjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBlbXB0eSBwYXRoIHRvICIvIiBmb3IgaHR0cCBhbmQgaHR0cHMgVVJJcy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy8KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTlZFUlRfRU1QVFlfUEFUSCA9IDQ7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBkZWZhdWx0IGhvc3Qgb2YgdGhlIGdpdmVuIFVSSSBzY2hlbWUgZnJvbSB0aGUgVVJJLgogICAgICoKICAgICAqIE9ubHkgdGhlICJmaWxlIiBzY2hlbWUgZGVmaW5lcyB0aGUgZGVmYXVsdCBob3N0ICJsb2NhbGhvc3QiLgogICAgICogQWxsIG9mIGBmaWxlOi9teWZpbGVgLCBgZmlsZTovLy9teWZpbGVgLCBhbmQgYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYAogICAgICogYXJlIGVxdWl2YWxlbnQgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBUaGUgZmlyc3QgZm9ybWF0IGlzIG5vdCBhY2NlcHRlZAogICAgICogYnkgUEhQcyBzdHJlYW0gZnVuY3Rpb25zIGFuZCB0aHVzIGFscmVhZHkgbm9ybWFsaXplZCBpbXBsaWNpdGx5IHRvIHRoZQogICAgICogc2Vjb25kIGZvcm1hdCBpbiB0aGUgVXJpIGNsYXNzLiBTZWUgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmNvbXBvc2VDb21wb25lbnRzYC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBmaWxlOi8vbG9jYWxob3N0L215ZmlsZSDihpIgZmlsZTovLy9teWZpbGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFTU9WRV9ERUZBVUxUX0hPU1QgPSA4OwoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmc6ODAvIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRU1PVkVfREVGQVVMVF9QT1JUID0gMTY7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHVubmVjZXNzYXJ5IGRvdC1zZWdtZW50cy4KICAgICAqCiAgICAgKiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgICogY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLy4uL2EvYi8uLi9jLy4vZC5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVNT1ZFX0RPVF9TRUdNRU5UUyA9IDMyOwoKICAgIC8qKgogICAgICogUGF0aHMgd2hpY2ggaW5jbHVkZSB0d28gb3IgbW9yZSBhZGphY2VudCBzbGFzaGVzIGFyZSBjb252ZXJ0ZWQgdG8gb25lLgogICAgICoKICAgICAqIFdlYnNlcnZlcnMgdXN1YWxseSBpZ25vcmUgZHVwbGljYXRlIHNsYXNoZXMgYW5kIHRyZWF0IHRob3NlIFVSSXMgZXF1aXZhbGVudC4KICAgICAqIEJ1dCBpbiB0aGVvcnkgdGhvc2UgVVJJcyBkbyBub3QgbmVlZCB0byBiZSBlcXVpdmFsZW50LiBTbyB0aGlzIG5vcm1hbGl6YXRpb24KICAgICAqIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcy4gRW5jb2RlZCBzbGFzaGVzICglMkYpIGFyZSBub3QgcmVtb3ZlZC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvL2Zvby8vL2Jhci5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2Jhci5odG1sCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRU1PVkVfRFVQTElDQVRFX1NMQVNIRVMgPSA2NDsKCiAgICAvKioKICAgICAqIFNvcnQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIHRoZWlyIHZhbHVlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuCiAgICAgKgogICAgICogSG93ZXZlciwgdGhlIG9yZGVyIG9mIHBhcmFtZXRlcnMgaW4gYSBVUkkgbWF5IGJlIHNpZ25pZmljYW50ICh0aGlzIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCkuCiAgICAgKiBTbyB0aGlzIG5vcm1hbGl6YXRpb24gaXMgbm90IHNhZmUgYW5kIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIEV4YW1wbGU6ID9sYW5nPWVuJmFydGljbGU9ZnJlZCDihpIgP2FydGljbGU9ZnJlZCZsYW5nPWVuCiAgICAgKgogICAgICogTm90ZTogVGhlIHNvcnRpbmcgaXMgbmVpdGhlciBsb2NhbGUgbm9yIFVuaWNvZGUgYXdhcmUgKHRoZSBVUkkgcXVlcnkgZG9lcyBub3QgZ2V0IGRlY29kZWQgYXQgYWxsKSBhcyB0aGUKICAgICAqIHB1cnBvc2UgaXMgdG8gYmUgYWJsZSB0byBjb21wYXJlIFVSSXMgaW4gYSByZXByb2R1Y2libGUgd2F5LCBub3QgdG8gaGF2ZSB0aGUgcGFyYW1zIHNvcnRlZCBwZXJmZWN0bHkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT1JUX1FVRVJZX1BBUkFNRVRFUlMgPSAxMjg7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuCiAgICAgKgogICAgICogVGhlIHNjaGVtZSBhbmQgaG9zdCBjb21wb25lbnQgYXJlIGFscmVhZHkgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UgcGVyIFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqIFRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAkZmxhZ3MgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFBTUi03IFVyaUludGVyZmFjZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSBjb21wb25lbnQgYW5kIGEgbWlzc2luZyBjb21wb25lbnQgYXMKICAgICAqIGdldFF1ZXJ5KCksIGdldEZyYWdtZW50KCkgZXRjLiBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLiBUaGlzIG1lYW5zIHRoZSBVUklzICIvPyMiIGFuZCAiLyIgYXJlCiAgICAgKiB0cmVhdGVkIGVxdWl2YWxlbnQgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBCdXQgdGhhdCBkaWZmZXJlbmNlCiAgICAgKiBpcyBoaWdobHkgdW5jb21tb24gaW4gcmVhbGl0eS4gU28gdGhpcyBwb3RlbnRpYWwgbm9ybWFsaXphdGlvbiBpcyBpbXBsaWVkIGluIFBTUi03IGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpICAgVGhlIFVSSSB0byBub3JtYWxpemUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGZsYWdzIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNi4yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKFVyaUludGVyZmFjZSAkdXJpLCBpbnQgJGZsYWdzID0gc2VsZjo6UFJFU0VSVklOR19OT1JNQUxJWkFUSU9OUyk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcpIHsKICAgICAgICAgICAgJHVyaSA9IHNlbGY6OmNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSUykgewogICAgICAgICAgICAkdXJpID0gc2VsZjo6ZGVjb2RlVW5yZXNlcnZlZENoYXJhY3RlcnMoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIICYmICR1cmktPmdldFBhdGgoKSA9PT0gJycKICAgICAgICAgICAgJiYgKCR1cmktPmdldFNjaGVtZSgpID09PSAnaHR0cCcgfHwgJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdodHRwcycpCiAgICAgICAgKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aCgnLycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OlJFTU9WRV9ERUZBVUxUX0hPU1QgJiYgJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdmaWxlJyAmJiAkdXJpLT5nZXRIb3N0KCkgPT09ICdsb2NhbGhvc3QnKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgnJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RFRkFVTFRfUE9SVCAmJiAkdXJpLT5nZXRQb3J0KCkgIT09IG51bGwgJiYgVXJpOjppc0RlZmF1bHRQb3J0KCR1cmkpKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUG9ydChudWxsKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfRE9UX1NFR01FTlRTICYmICFVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKCR1cmkpKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aChVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHMoJHVyaS0+Z2V0UGF0aCgpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RVUExJQ0FURV9TTEFTSEVTKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUGF0aChwcmVnX3JlcGxhY2UoJyMvLysrIycsICcvJywgJHVyaS0+Z2V0UGF0aCgpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6U09SVF9RVUVSWV9QQVJBTUVURVJTICYmICR1cmktPmdldFF1ZXJ5KCkgIT09ICcnKSB7CiAgICAgICAgICAgICRxdWVyeUtleVZhbHVlcyA9IGV4cGxvZGUoJyYnLCAkdXJpLT5nZXRRdWVyeSgpKTsKICAgICAgICAgICAgc29ydCgkcXVlcnlLZXlWYWx1ZXMpOwogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KGltcGxvZGUoJyYnLCAkcXVlcnlLZXlWYWx1ZXMpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0d28gVVJJcyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LgogICAgICoKICAgICAqIEJvdGggVVJJcyBhcmUgbm9ybWFsaXplZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSBjb21wYXJpc29uIHdpdGggdGhlIGdpdmVuICRub3JtYWxpemF0aW9ucyBiaXRtYXNrLiBUaGUgbWV0aG9kIGFsc28KICAgICAqIGFjY2VwdHMgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZXMgYW5kIHJldHVybnMgdHJ1ZSB3aGVuIHRoZXkgYXJlIGVxdWl2YWxlbnQuIFRoaXMgb2YgY291cnNlIGFzc3VtZXMgdGhleSB3aWxsIGJlCiAgICAgKiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBzYW1lIGJhc2UgVVJJLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgZGV0ZXJtaW5hdGlvbiBvZiBlcXVpdmFsZW5jZSBvciBkaWZmZXJlbmNlIG9mCiAgICAgKiByZWxhdGl2ZSByZWZlcmVuY2VzIGRvZXMgbm90IG1lYW4gYW55dGhpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpMSAgICAgICAgICAgQW4gVVJJIHRvIGNvbXBhcmUKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaTIgICAgICAgICAgIEFuIFVSSSB0byBjb21wYXJlCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICRub3JtYWxpemF0aW9ucyBBIGJpdG1hc2sgb2Ygbm9ybWFsaXphdGlvbnMgdG8gYXBwbHksIHNlZSBjb25zdGFudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYuMQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRXF1aXZhbGVudChVcmlJbnRlcmZhY2UgJHVyaTEsIFVyaUludGVyZmFjZSAkdXJpMiwgaW50ICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6Om5vcm1hbGl6ZSgkdXJpMSwgJG5vcm1hbGl6YXRpb25zKSA9PT0gKHN0cmluZykgc2VsZjo6bm9ybWFsaXplKCR1cmkyLCAkbm9ybWFsaXphdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoVXJpSW50ZXJmYWNlICR1cmkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcmVnZXggPSAnLyg/OiVbQS1GYS1mMC05XXsyfSkrKy8nOwoKICAgICAgICAkY2FsbGJhY2sgPSBmdW5jdGlvbiAoYXJyYXkgJG1hdGNoKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoJG1hdGNoWzBdKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gJHVyaQogICAgICAgICAgICAtPndpdGhQYXRoKHNlbGY6Om5vcm1hbGl6ZVBlcmNlbnRFbmNvZGluZ0luQ29tcG9uZW50KCR1cmktPmdldFBhdGgoKSwgJHJlZ2V4LCAkY2FsbGJhY2spKQogICAgICAgICAgICAtPndpdGhRdWVyeShzZWxmOjpub3JtYWxpemVQZXJjZW50RW5jb2RpbmdJbkNvbXBvbmVudCgkdXJpLT5nZXRRdWVyeSgpLCAkcmVnZXgsICRjYWxsYmFjaykpCiAgICAgICAgICAgIC0+d2l0aEZyYWdtZW50KHNlbGY6Om5vcm1hbGl6ZVBlcmNlbnRFbmNvZGluZ0luQ29tcG9uZW50KCR1cmktPmdldEZyYWdtZW50KCksICRyZWdleCwgJGNhbGxiYWNrKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZENoYXJhY3RlcnMoVXJpSW50ZXJmYWNlICR1cmkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkcmVnZXggPSAnLyUoPzoyRHwyRXw1Rnw3RXwzWzAtOV18WzQ2XVsxLTlBLUZdfFs1N11bMC05QV0pL2knOwoKICAgICAgICAkY2FsbGJhY2sgPSBmdW5jdGlvbiAoYXJyYXkgJG1hdGNoKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZSgkbWF0Y2hbMF0pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiAkdXJpCiAgICAgICAgICAgIC0+d2l0aFBhdGgoc2VsZjo6bm9ybWFsaXplUGVyY2VudEVuY29kaW5nSW5Db21wb25lbnQoJHVyaS0+Z2V0UGF0aCgpLCAkcmVnZXgsICRjYWxsYmFjaykpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KHNlbGY6Om5vcm1hbGl6ZVBlcmNlbnRFbmNvZGluZ0luQ29tcG9uZW50KCR1cmktPmdldFF1ZXJ5KCksICRyZWdleCwgJGNhbGxiYWNrKSkKICAgICAgICAgICAgLT53aXRoRnJhZ21lbnQoc2VsZjo6bm9ybWFsaXplUGVyY2VudEVuY29kaW5nSW5Db21wb25lbnQoJHVyaS0+Z2V0RnJhZ21lbnQoKSwgJHJlZ2V4LCAkY2FsbGJhY2spKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZShhcnJheSk6IHN0cmluZyAkY2FsbGJhY2sKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplUGVyY2VudEVuY29kaW5nSW5Db21wb25lbnQoc3RyaW5nICRjb21wb25lbnQsIHN0cmluZyAkcmVnZXgsIGNhbGxhYmxlICRjYWxsYmFjayk6IHN0cmluZwogICAgewogICAgICAgICRub3JtYWxpemVkID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleCwgJGNhbGxiYWNrLCAkY29tcG9uZW50KTsKCiAgICAgICAgaWYgKCRub3JtYWxpemVkID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIG5vcm1hbGl6ZSBVUkkgY29tcG9uZW50IHBlcmNlbnQtZW5jb2RpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAvLyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriResolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXNvbHZlcyBhIFVSSSByZWZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBiYXNlIFVSSSBhbmQgdGhlIG9wcG9zaXRlIHdheS4KICoKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICoKICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01CiAqLwpmaW5hbCBjbGFzcyBVcmlSZXNvbHZlcgp7CiAgICAvKioKICAgICAqIFJlbW92ZXMgZG90IHNlZ21lbnRzIGZyb20gYSBwYXRoIGFuZCByZXR1cm5zIHRoZSBuZXcgcGF0aC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoc3RyaW5nICRwYXRoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRwYXRoID09PSAnJyB8fCAkcGF0aCA9PT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiAkcGF0aDsKICAgICAgICB9CgogICAgICAgICRyZXN1bHRzID0gW107CiAgICAgICAgJHNlZ21lbnRzID0gZXhwbG9kZSgnLycsICRwYXRoKTsKICAgICAgICBmb3JlYWNoICgkc2VnbWVudHMgYXMgJHNlZ21lbnQpIHsKICAgICAgICAgICAgaWYgKCRzZWdtZW50ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHJlc3VsdHMpOwogICAgICAgICAgICB9IGVsc2VpZiAoJHNlZ21lbnQgIT09ICcuJykgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbXSA9ICRzZWdtZW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkbmV3UGF0aCA9IGltcGxvZGUoJy8nLCAkcmVzdWx0cyk7CgogICAgICAgIGlmICgkcGF0aFswXSA9PT0gJy8nICYmICghaXNzZXQoJG5ld1BhdGhbMF0pIHx8ICRuZXdQYXRoWzBdICE9PSAnLycpKSB7CiAgICAgICAgICAgIC8vIFJlLWFkZCB0aGUgbGVhZGluZyBzbGFzaCBpZiBuZWNlc3NhcnkgZm9yIGNhc2VzIGxpa2UgIi8uLiIKICAgICAgICAgICAgJG5ld1BhdGggPSAnLycuJG5ld1BhdGg7CiAgICAgICAgfSBlbHNlaWYgKCRuZXdQYXRoICE9PSAnJyAmJiAoJHNlZ21lbnQgPT09ICcuJyB8fCAkc2VnbWVudCA9PT0gJy4uJykpIHsKICAgICAgICAgICAgLy8gQWRkIHRoZSB0cmFpbGluZyBzbGFzaCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgLy8gSWYgbmV3UGF0aCBpcyBub3QgZW1wdHksIHRoZW4gJHNlZ21lbnQgbXVzdCBiZSBzZXQgYW5kIGlzIHRoZSBsYXN0IHNlZ21lbnQgZnJvbSB0aGUgZm9yZWFjaAogICAgICAgICAgICAkbmV3UGF0aCAuPSAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld1BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICRyZWwpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoKHN0cmluZykgJHJlbCA9PT0gJycpIHsKICAgICAgICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYmFzZSBVUkkgaW5zdGFuY2UgZm9yIHRoaXMgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UKICAgICAgICAgICAgcmV0dXJuICRiYXNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZWwtPmdldFNjaGVtZSgpICE9ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVsLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkcmVsLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVsLT5nZXRBdXRob3JpdHkoKSAhPSAnJykgewogICAgICAgICAgICByZXR1cm4gJHJlbAogICAgICAgICAgICAgICAgLT53aXRoU2NoZW1lKCRiYXNlLT5nZXRTY2hlbWUoKSkKICAgICAgICAgICAgICAgIC0+d2l0aFBhdGgoc2VsZjo6cmVtb3ZlRG90U2VnbWVudHMoJHJlbC0+Z2V0UGF0aCgpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlbC0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICRiYXNlLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICR0YXJnZXRRdWVyeSA9ICRyZWwtPmdldFF1ZXJ5KCkgIT0gJycgPyAkcmVsLT5nZXRRdWVyeSgpIDogJGJhc2UtPmdldFF1ZXJ5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCRyZWwtPmdldFBhdGgoKVswXSA9PT0gJy8nKSB7CiAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICRyZWwtPmdldFBhdGgoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT0gJycgJiYgJGJhc2UtPmdldFBhdGgoKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICcvJy4kcmVsLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRsYXN0U2xhc2hQb3MgPSBzdHJycG9zKCRiYXNlLT5nZXRQYXRoKCksICcvJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRsYXN0U2xhc2hQb3MgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc3Vic3RyKCRiYXNlLT5nZXRQYXRoKCksIDAsICRsYXN0U2xhc2hQb3MgKyAxKS4kcmVsLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc2VsZjo6cmVtb3ZlRG90U2VnbWVudHMoJHRhcmdldFBhdGgpOwogICAgICAgICAgICAkdGFyZ2V0UXVlcnkgPSAkcmVsLT5nZXRRdWVyeSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRiYXNlCiAgICAgICAgICAgIC0+d2l0aFBhdGgoJHRhcmdldFBhdGgpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KCR0YXJnZXRRdWVyeSkKICAgICAgICAgICAgLT53aXRoRnJhZ21lbnQoJHJlbC0+Z2V0RnJhZ21lbnQoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0YXJnZXQgVVJJIGFzIGEgcmVsYXRpdmUgcmVmZXJlbmNlIGZyb20gdGhlIGJhc2UgVVJJLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSBjb3VudGVycGFydCB0byByZXNvbHZlKCk6CiAgICAgKgogICAgICogICAgKHN0cmluZykgJHRhcmdldCA9PT0gKHN0cmluZykgVXJpUmVzb2x2ZXI6OnJlc29sdmUoJGJhc2UsIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCAkdGFyZ2V0KSkKICAgICAqCiAgICAgKiBPbmUgdXNlLWNhc2UgaXMgdG8gdXNlIHRoZSBjdXJyZW50IHJlcXVlc3QgVVJJIGFzIGJhc2UgVVJJIGFuZCB0aGVuIGdlbmVyYXRlIHJlbGF0aXZlIGxpbmtzIGluIHlvdXIgZG9jdW1lbnRzCiAgICAgKiB0byByZWR1Y2UgdGhlIGRvY3VtZW50IHNpemUgb3Igb2ZmZXIgc2VsZi1jb250YWluZWQgZG93bmxvYWRhYmxlIGRvY3VtZW50IGFyY2hpdmVzLgogICAgICoKICAgICAqICAgICRiYXNlID0gbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi8nKTsKICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvYycpKTsgIC8vIHByaW50cyAnYycuCiAgICAgKiAgICBlY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS94L3knKSk7ICAvLyBwcmludHMgJy4uL3gveScuCiAgICAgKiAgICBlY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLz9xJykpOyAvLyBwcmludHMgJz9xJy4KICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLm9yZy9hL2IvJykpOyAgIC8vIHByaW50cyAnLy9leGFtcGxlLm9yZy9hL2IvJy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIGFjY2VwdHMgYSB0YXJnZXQgdGhhdCBpcyBhbHJlYWR5IHJlbGF0aXZlIGFuZCB3aWxsIHRyeSB0byByZWxhdGl2aXplIGl0IGZ1cnRoZXIuIE9ubHkgYQogICAgICogcmVsYXRpdmUtcGF0aCByZWZlcmVuY2Ugd2lsbCBiZSByZXR1cm5lZCBhcy1pcy4KICAgICAqCiAgICAgKiAgICBlY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCcvYS9iL2MnKSk7ICAvLyBwcmludHMgJ2MnIGFzIHdlbGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWxhdGl2aXplKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRhcmdldC0+Z2V0U2NoZW1lKCkgIT09ICcnCiAgICAgICAgICAgICYmICgkYmFzZS0+Z2V0U2NoZW1lKCkgIT09ICR0YXJnZXQtPmdldFNjaGVtZSgpIHx8ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpID09PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICcnKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgICAgICB9CgogICAgICAgIGlmIChVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgIC8vIEFzIHRoZSB0YXJnZXQgaXMgYWxyZWFkeSBoaWdobHkgcmVsYXRpdmUgd2UgcmV0dXJuIGl0IGFzLWlzLiBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byByZXNvbHZlCiAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgd2l0aCBgJHRhcmdldCA9IHNlbGY6OnJlc29sdmUoJGJhc2UsICR0YXJnZXQpO2AgYW5kIHRoZW4gdHJ5IG1ha2UgaXQgbW9yZSByZWxhdGl2ZQogICAgICAgICAgICAvLyBieSByZW1vdmluZyBhIGR1cGxpY2F0ZSBxdWVyeS4gQnV0IGxldCdzIG5vdCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0YXJnZXQtPmdldEF1dGhvcml0eSgpICE9PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5IGJlY2F1c2UgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggdHdvIHNsYXNoZXMsIHRoZSBVUkkKICAgICAgICAvLyB3b3VsZCB0dXJuIGludmFsaWQuIEFuZCB3ZSBhbHNvIGNhbm5vdCBzZXQgYSByZWxhdGl2ZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5LCBhcyB0aGF0IGlzIGFsc28KICAgICAgICAvLyBpbnZhbGlkLgogICAgICAgICRlbXB0eVBhdGhVcmkgPSAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKS0+d2l0aFBhdGgoJycpLT53aXRoVXNlckluZm8oJycpLT53aXRoUG9ydChudWxsKS0+d2l0aEhvc3QoJycpOwoKICAgICAgICBpZiAoJGJhc2UtPmdldFBhdGgoKSAhPT0gJHRhcmdldC0+Z2V0UGF0aCgpKSB7CiAgICAgICAgICAgIHJldHVybiAkZW1wdHlQYXRoVXJpLT53aXRoUGF0aChzZWxmOjpnZXRSZWxhdGl2ZVBhdGgoJGJhc2UsICR0YXJnZXQpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmFzZS0+Z2V0UXVlcnkoKSA9PT0gJHRhcmdldC0+Z2V0UXVlcnkoKSkgewogICAgICAgICAgICAvLyBPbmx5IHRoZSB0YXJnZXQgZnJhZ21lbnQgaXMgbGVmdC4gQW5kIGl0IG11c3QgYmUgcmV0dXJuZWQgZXZlbiBpZiBiYXNlIGFuZCB0YXJnZXQgZnJhZ21lbnQgYXJlIHRoZSBzYW1lLgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFF1ZXJ5KCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBiYXNlIFVSSSBoYXMgYSBxdWVyeSBidXQgdGhlIHRhcmdldCBoYXMgbm9uZSwgd2UgY2Fubm90IHJldHVybiBhbiBlbXB0eSBwYXRoIHJlZmVyZW5jZSBhcyBpdCB3b3VsZAogICAgICAgIC8vIGluaGVyaXQgdGhlIGJhc2UgcXVlcnkgY29tcG9uZW50IHdoZW4gcmVzb2x2aW5nLgogICAgICAgIGlmICgkdGFyZ2V0LT5nZXRRdWVyeSgpID09PSAnJykgewogICAgICAgICAgICAkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJHRhcmdldC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRsYXN0U2VnbWVudCAqLwogICAgICAgICAgICAkbGFzdFNlZ21lbnQgPSBlbmQoJHNlZ21lbnRzKTsKCiAgICAgICAgICAgIHJldHVybiAkZW1wdHlQYXRoVXJpLT53aXRoUGF0aCgkbGFzdFNlZ21lbnQgPT09ICcnID8gJy4vJyA6ICRsYXN0U2VnbWVudCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZVBhdGgoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHRhcmdldCk6IHN0cmluZwogICAgewogICAgICAgICRzb3VyY2VTZWdtZW50cyA9IGV4cGxvZGUoJy8nLCAkYmFzZS0+Z2V0UGF0aCgpKTsKICAgICAgICAkdGFyZ2V0U2VnbWVudHMgPSBleHBsb2RlKCcvJywgJHRhcmdldC0+Z2V0UGF0aCgpKTsKICAgICAgICBhcnJheV9wb3AoJHNvdXJjZVNlZ21lbnRzKTsKICAgICAgICAkdGFyZ2V0TGFzdFNlZ21lbnQgPSBhcnJheV9wb3AoJHRhcmdldFNlZ21lbnRzKTsKICAgICAgICBmb3JlYWNoICgkc291cmNlU2VnbWVudHMgYXMgJGkgPT4gJHNlZ21lbnQpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0YXJnZXRTZWdtZW50c1skaV0pICYmICRzZWdtZW50ID09PSAkdGFyZ2V0U2VnbWVudHNbJGldKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkc291cmNlU2VnbWVudHNbJGldLCAkdGFyZ2V0U2VnbWVudHNbJGldKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0YXJnZXRTZWdtZW50c1tdID0gJHRhcmdldExhc3RTZWdtZW50OwogICAgICAgICRyZWxhdGl2ZVBhdGggPSBzdHJfcmVwZWF0KCcuLi8nLCBjb3VudCgkc291cmNlU2VnbWVudHMpKS5pbXBsb2RlKCcvJywgJHRhcmdldFNlZ21lbnRzKTsKCiAgICAgICAgLy8gQSByZWZlcmVuY2UgdG8gYW0gZW1wdHkgbGFzdCBzZWdtZW50IG9yIGFuIGVtcHR5IGZpcnN0IHN1Yi1zZWdtZW50IG11c3QgYmUgcHJlZml4ZWQgd2l0aCAiLi8iLgogICAgICAgIC8vIFRoaXMgYWxzbyBhcHBsaWVzIHRvIGEgc2VnbWVudCB3aXRoIGEgY29sb24gY2hhcmFjdGVyIChlLmcuLCAiZmlsZTpjb2xvbiIpIHRoYXQgY2Fubm90IGJlIHVzZWQKICAgICAgICAvLyBhcyB0aGUgZmlyc3Qgc2VnbWVudCBvZiBhIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlLCBhcyBpdCB3b3VsZCBiZSBtaXN0YWtlbiBmb3IgYSBzY2hlbWUgbmFtZS4KICAgICAgICBpZiAoJycgPT09ICRyZWxhdGl2ZVBhdGggfHwgZmFsc2UgIT09IHN0cnBvcyhleHBsb2RlKCcvJywgJHJlbGF0aXZlUGF0aCwgMilbMF0sICc6JykpIHsKICAgICAgICAgICAgJHJlbGF0aXZlUGF0aCA9ICIuLyRyZWxhdGl2ZVBhdGgiOwogICAgICAgIH0gZWxzZWlmICgnLycgPT09ICRyZWxhdGl2ZVBhdGhbMF0pIHsKICAgICAgICAgICAgaWYgKCRiYXNlLT5nZXRBdXRob3JpdHkoKSAhPSAnJyAmJiAkYmFzZS0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIGFuIGV4dHJhIHNsYXNoIGlzIGFkZGVkIGJ5IHJlc29sdmUoKSBhdXRvbWF0aWNhbGx5LiBTbyB3ZSBtdXN0IG5vdCBhZGQgb25lIGhlcmUuCiAgICAgICAgICAgICAgICAkcmVsYXRpdmVQYXRoID0gIi4kcmVsYXRpdmVQYXRoIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZWxhdGl2ZVBhdGggPSAiLi8kcmVsYXRpdmVQYXRoIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZWxhdGl2ZVBhdGg7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgLy8gY2Fubm90IGJlIGluc3RhbnRpYXRlZAogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgVXRpbHMKewogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGl0ZW1zIGdpdmVuIGJ5IHRoZSBrZXlzLCBjYXNlIGluc2Vuc2l0aXZlbHkgZnJvbSB0aGUgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gKHN0cmluZ3xpbnQpW10gJGtleXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXNlbGVzc1JlbW92ZShhcnJheSAka2V5cywgYXJyYXkgJGRhdGEpOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHQgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJiRrZXkpIHsKICAgICAgICAgICAgJGtleSA9IHN0cnRvbG93ZXIoKHN0cmluZykgJGtleSk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KHN0cnRvbG93ZXIoKHN0cmluZykgJGspLCAka2V5cykpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJGtdID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQ29weSB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gaW50byBhbm90aGVyIHN0cmVhbSB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyCiAgICAgKiBvZiBieXRlcyBoYXZlIGJlZW4gcmVhZC4KICAgICAqCiAgICAgKiBUaGUgY29weSBzdG9wcyBpZiB0aGUgZGVzdGluYXRpb24gd3JpdGUgcmV0dXJucyAwLCBmb3IgZXhhbXBsZSBhCiAgICAgKiBCdWZmZXJTdHJlYW0gYXQgaXRzIGhpZ2ggd2F0ZXIgbWFyayBvciBhIGZ1bGwgRHJvcHBpbmdTdHJlYW0uIEZvciBhCiAgICAgKiBndWFyYW50ZWVkIGZ1bGwgY29weSB1c2UgYSBub3JtYWwgd3JpdGFibGUgc3RyZWFtIHN1Y2ggYXMgYSBmaWxlIG9yCiAgICAgKiBwaHA6Ly90ZW1wIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UgU3RyZWFtIHRvIHJlYWQgZnJvbQogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkZGVzdCAgIFN0cmVhbSB0byB3cml0ZSB0bwogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkbWF4TGVuIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFBhc3MgLTEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWFkIHRoZSBlbnRpcmUgc3RyZWFtLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weVRvU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc291cmNlLCBTdHJlYW1JbnRlcmZhY2UgJGRlc3QsIGludCAkbWF4TGVuID0gLTEpOiB2b2lkCiAgICB7CiAgICAgICAgJGJ1ZmZlclNpemUgPSA4MTkyOwoKICAgICAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICAgICAgd2hpbGUgKCEkc291cmNlLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJGJ1ZiA9ICRzb3VyY2UtPnJlYWQoJGJ1ZmZlclNpemUpOwogICAgICAgICAgICAgICAgaWYgKCRidWYgPT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFzZWxmOjp3cml0ZUFsbCgkZGVzdCwgJGJ1ZikpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZW1haW5pbmcgPSAkbWF4TGVuOwogICAgICAgICAgICB3aGlsZSAoJHJlbWFpbmluZyA+IDAgJiYgISRzb3VyY2UtPmVvZigpKSB7CiAgICAgICAgICAgICAgICAkYnVmID0gJHNvdXJjZS0+cmVhZChtaW4oJGJ1ZmZlclNpemUsICRyZW1haW5pbmcpKTsKICAgICAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGJ1Zik7CiAgICAgICAgICAgICAgICBpZiAoISRsZW4pIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZW1haW5pbmcgLT0gJGxlbjsKICAgICAgICAgICAgICAgIGlmICghc2VsZjo6d3JpdGVBbGwoJGRlc3QsICRidWYpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBXcml0ZXMgdGhlIGZ1bGwgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiwgcmV0cnlpbmcgc2hvcnQgd3JpdGVzLgogICAgICoKICAgICAqIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgZGVzdGluYXRpb24gd3JpdGUgcmV0dXJucyAwIG9yIGxlc3MuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHdyaXRlQWxsKFN0cmVhbUludGVyZmFjZSAkZGVzdCwgc3RyaW5nICRidWYpOiBib29sCiAgICB7CiAgICAgICAgJHdyaXR0ZW4gPSAwOwogICAgICAgICRsZW4gPSBzdHJsZW4oJGJ1Zik7CgogICAgICAgIHdoaWxlICgkd3JpdHRlbiA8ICRsZW4pIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICRkZXN0LT53cml0ZShzdWJzdHIoJGJ1ZiwgJHdyaXR0ZW4pKTsKICAgICAgICAgICAgaWYgKCRyZXN1bHQgPD0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkd3JpdHRlbiArPSAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGEgc3RyaW5nIHVudGlsIHRoZSBnaXZlbiBudW1iZXIgb2YKICAgICAqIGJ5dGVzIGhhdmUgYmVlbiByZWFkLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gcmVhZAogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkbWF4TGVuIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFBhc3MgLTEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWFkIHRoZSBlbnRpcmUgc3RyZWFtLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weVRvU3RyaW5nKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBpbnQgJG1heExlbiA9IC0xKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGJ1ZmZlciA9ICcnOwoKICAgICAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICAgICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJGJ1ZiA9ICRzdHJlYW0tPnJlYWQoMTA0ODU3Nik7CiAgICAgICAgICAgICAgICBpZiAoJGJ1ZiA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRidWZmZXIgLj0gJGJ1ZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRidWZmZXI7CiAgICAgICAgfQoKICAgICAgICAkbGVuID0gMDsKICAgICAgICB3aGlsZSAoISRzdHJlYW0tPmVvZigpICYmICRsZW4gPCAkbWF4TGVuKSB7CiAgICAgICAgICAgICRidWYgPSAkc3RyZWFtLT5yZWFkKCRtYXhMZW4gLSAkbGVuKTsKICAgICAgICAgICAgaWYgKCRidWYgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZmVyIC49ICRidWY7CiAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGJ1ZmZlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSBhIGhhc2ggb2YgYSBzdHJlYW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmVhZHMgdGhlIGVudGlyZSBzdHJlYW0gdG8gY2FsY3VsYXRlIGEgcm9sbGluZyBoYXNoLCBiYXNlZAogICAgICogb24gUEhQJ3MgYGhhc2hfaW5pdGAgZnVuY3Rpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgICBTdHJlYW0gdG8gY2FsY3VsYXRlIHRoZSBoYXNoIGZvcgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkYWxnbyAgICAgIEhhc2ggYWxnb3JpdGhtIChlLmcuIG1kNSwgY3JjMzIsIGV0YykKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgJHJhd091dHB1dCBXaGV0aGVyIG9yIG5vdCB0byB1c2UgcmF3IG91dHB1dAogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzaChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgc3RyaW5nICRhbGdvLCBib29sICRyYXdPdXRwdXQgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgICRwb3MgPSAkc3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkcG9zID4gMCkgewogICAgICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICB9CgogICAgICAgICRjdHggPSBoYXNoX2luaXQoJGFsZ28pOwogICAgICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAgICAgaGFzaF91cGRhdGUoJGN0eCwgJHN0cmVhbS0+cmVhZCgxMDQ4NTc2KSk7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gaGFzaF9maW5hbCgkY3R4LCAkcmF3T3V0cHV0KTsKICAgICAgICAkc3RyZWFtLT5zZWVrKCRwb3MpOwoKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIENsb25lIGFuZCBtb2RpZnkgYSByZXF1ZXN0IHdpdGggdGhlIGdpdmVuIGNoYW5nZXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNsb25lcyBuZWVkZWQgdG8gbXV0YXRlCiAgICAgKiBhIG1lc3NhZ2UuCiAgICAgKgogICAgICogVGhlIGNoYW5nZXMgY2FuIGJlIG9uZSBvZjoKICAgICAqIC0gbWV0aG9kOiAoc3RyaW5nKSBDaGFuZ2VzIHRoZSBIVFRQIG1ldGhvZC4KICAgICAqIC0gc2V0X2hlYWRlcnM6IChhcnJheSkgU2V0cyB0aGUgZ2l2ZW4gaGVhZGVycy4gVmFsdWVzIG11c3QgYmUgc3RyaW5ncwogICAgICogICBvciBub24tZW1wdHkgYXJyYXlzIG9mIHN0cmluZ3MuCiAgICAgKiAtIHJlbW92ZV9oZWFkZXJzOiAoYXJyYXkpIFJlbW92ZSB0aGUgZ2l2ZW4gaGVhZGVycy4gVmFsdWVzIG1heSBiZQogICAgICogICBzdHJpbmdzIG9yIGludGVnZXJzLgogICAgICogLSBib2R5OiAobWl4ZWQpIFNldHMgdGhlIGdpdmVuIGJvZHkuIFByZXNlbnQgbm9uLW51bGwgdmFsdWVzIGFyZSBjb252ZXJ0ZWQKICAgICAqICAgd2l0aCBzZWxmOjpzdHJlYW1Gb3IoKSwgaW5jbHVkaW5nIHNjYWxhciB2YWx1ZXMsIHJlc291cmNlcywgc3RyZWFtcywKICAgICAqICAgaXRlcmF0b3JzLCBjYWxsYWJsZSBhcnJheXMsIGNsb3N1cmVzLCBpbnZva2FibGUgb2JqZWN0cywgYW5kIG9iamVjdHMKICAgICAqICAgd2l0aCBfX3RvU3RyaW5nKCkuIFN0cmluZyBpbnB1dHMgcmVtYWluIGxpdGVyYWwgYm9kaWVzLgogICAgICogLSB1cmk6IChVcmlJbnRlcmZhY2UpIFNldCB0aGUgVVJJLgogICAgICogLSBxdWVyeTogKHN0cmluZykgU2V0IHRoZSBxdWVyeSBzdHJpbmcgdmFsdWUgb2YgdGhlIFVSSS4KICAgICAqIC0gdmVyc2lvbjogKHN0cmluZykgU2V0IHRoZSBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gY2xvbmUgYW5kIG1vZGlmeS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRjaGFuZ2VzIENoYW5nZXMgdG8gYXBwbHkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW9kaWZ5UmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkY2hhbmdlcyk6IFJlcXVlc3RJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISRjaGFuZ2VzKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVxdWVzdDsKICAgICAgICB9CgogICAgICAgIHNlbGY6Ondhcm5PbkludmFsaWRNb2RpZnlSZXF1ZXN0Q2hhbmdlcygkY2hhbmdlcyk7CgogICAgICAgICRoZWFkZXJzID0gJHJlcXVlc3QtPmdldEhlYWRlcnMoKTsKCiAgICAgICAgaWYgKCFpc3NldCgkY2hhbmdlc1sndXJpJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkcmVxdWVzdC0+Z2V0VXJpKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBob3N0IGhlYWRlciBpZiBvbmUgaXMgb24gdGhlIFVSSQogICAgICAgICAgICAkaG9zdCA9ICRjaGFuZ2VzWyd1cmknXS0+Z2V0SG9zdCgpOwogICAgICAgICAgICBpZiAoJGhvc3QgIT09ICcnKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pICYmIGlzX2FycmF5KCRjaGFuZ2VzWydzZXRfaGVhZGVycyddKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pIGFzICRoZWFkZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoKHN0cmluZykgJGhlYWRlcikgPT09ICdob3N0JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBtb2RpZnkgcmVxdWVzdCB3aXRoIGJvdGggYSBVUkkgY29udGFpbmluZyBhIGhvc3QgYW5kIGFuIGV4cGxpY2l0IEhvc3QgaGVhZGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ11bJ0hvc3QnXSA9ICRob3N0OwoKICAgICAgICAgICAgICAgIGlmICgkcG9ydCA9ICRjaGFuZ2VzWyd1cmknXS0+Z2V0UG9ydCgpKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0YW5kYXJkUG9ydHMgPSBbJ2h0dHAnID0+IDgwLCAnaHR0cHMnID0+IDQ0M107CiAgICAgICAgICAgICAgICAgICAgJHNjaGVtZSA9ICRjaGFuZ2VzWyd1cmknXS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRzdGFuZGFyZFBvcnRzWyRzY2hlbWVdKSAmJiAkcG9ydCAhPSAkc3RhbmRhcmRQb3J0c1skc2NoZW1lXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXVsnSG9zdCddIC49ICc6Jy4kcG9ydDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHVyaSA9ICRjaGFuZ2VzWyd1cmknXTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gc2VsZjo6Y2FzZWxlc3NSZW1vdmUoJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10sICRoZWFkZXJzKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gc2VsZjo6Y2FzZWxlc3NSZW1vdmUoYXJyYXlfa2V5cygkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSksICRoZWFkZXJzKTsKICAgICAgICAgICAgJGhlYWRlcnMgPSAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSArICRoZWFkZXJzOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjaGFuZ2VzWydxdWVyeSddKSkgewogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KCRjaGFuZ2VzWydxdWVyeSddKTsKICAgICAgICB9CgogICAgICAgICRoYXNIb3N0ID0gZmFsc2U7CiAgICAgICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkaGVhZGVycykgYXMgJGhlYWRlcikgewogICAgICAgICAgICBpZiAoc3RydG9sb3dlcigoc3RyaW5nKSAkaGVhZGVyKSA9PT0gJ2hvc3QnKSB7CiAgICAgICAgICAgICAgICAkaGFzSG9zdCA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2ggUmVxdWVzdDo6X19jb25zdHJ1Y3QoKSBieSBhZGRpbmcgYSBIb3N0IGhlYWRlciB3aGVuIG9uZSBpcyBub3QgcHJvdmlkZWQuCiAgICAgICAgaWYgKCEkaGFzSG9zdCAmJiAkdXJpLT5nZXRIb3N0KCkgIT09ICcnKSB7CiAgICAgICAgICAgICRob3N0ID0gJHVyaS0+Z2V0SG9zdCgpOwoKICAgICAgICAgICAgaWYgKCgkcG9ydCA9ICR1cmktPmdldFBvcnQoKSkgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRob3N0IC49ICc6Jy4kcG9ydDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGhlYWRlcnMgPSBbJ0hvc3QnID0+IFskaG9zdF1dICsgJGhlYWRlcnM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gJHJlcXVlc3Q7CgogICAgICAgIGlmIChpc3NldCgkY2hhbmdlc1snbWV0aG9kJ10pKSB7CiAgICAgICAgICAgICRuZXcgPSAkbmV3LT53aXRoTWV0aG9kKCRjaGFuZ2VzWydtZXRob2QnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNoYW5nZXNbJ3VyaSddKSB8fCBpc3NldCgkY2hhbmdlc1sncXVlcnknXSkpIHsKICAgICAgICAgICAgJG5ldyA9ICRuZXctPndpdGhVcmkoJHVyaSwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGhlYWRlcnMgIT09ICRuZXctPmdldEhlYWRlcnMoKSkgewogICAgICAgICAgICBmb3JlYWNoIChhcnJheV9rZXlzKCRuZXctPmdldEhlYWRlcnMoKSkgYXMgJGhlYWRlcikgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgUmVxdWVzdEludGVyZmFjZSAqLwogICAgICAgICAgICAgICAgJG5ldyA9ICRuZXctPndpdGhvdXRIZWFkZXIoKHN0cmluZykgJGhlYWRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhZGRlZEhlYWRlcnMgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlciA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICRoZWFkZXIgPSAoc3RyaW5nKSAkaGVhZGVyOwogICAgICAgICAgICAgICAgJG5vcm1hbGl6ZWQgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYWRkZWRIZWFkZXJzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgICAgICAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlICovCiAgICAgICAgICAgICAgICAgICAgJG5ldyA9ICRuZXctPndpdGhBZGRlZEhlYWRlcigkYWRkZWRIZWFkZXJzWyRub3JtYWxpemVkXSwgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLyoqIEB2YXIgUmVxdWVzdEludGVyZmFjZSAqLwogICAgICAgICAgICAgICAgICAgICRuZXcgPSAkbmV3LT53aXRoSGVhZGVyKCRoZWFkZXIsICR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGFkZGVkSGVhZGVyc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNoYW5nZXNbJ2JvZHknXSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgUmVxdWVzdEludGVyZmFjZSAqLwogICAgICAgICAgICAkbmV3ID0gJG5ldy0+d2l0aEJvZHkoc2VsZjo6c3RyZWFtRm9yKCRjaGFuZ2VzWydib2R5J10pKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY2hhbmdlc1sndmVyc2lvbiddKSkgewogICAgICAgICAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlICovCiAgICAgICAgICAgICRuZXcgPSAkbmV3LT53aXRoUHJvdG9jb2xWZXJzaW9uKCRjaGFuZ2VzWyd2ZXJzaW9uJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8YXJyYXkta2V5LCBtaXhlZD4gJGNoYW5nZXMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2Fybk9uSW52YWxpZE1vZGlmeVJlcXVlc3RDaGFuZ2VzKGFycmF5ICRjaGFuZ2VzKTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKFsnbWV0aG9kJywgJ3F1ZXJ5JywgJ3ZlcnNpb24nXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkY2hhbmdlcykgJiYgIVxpc19zdHJpbmcoJGNoYW5nZXNbJGtleV0pKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuT25JbnZhbGlkTW9kaWZ5UmVxdWVzdENoYW5nZSgka2V5LCAnc3RyaW5nJywgJGNoYW5nZXNbJGtleV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ3VyaScsICRjaGFuZ2VzKSAmJiAhJGNoYW5nZXNbJ3VyaSddIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5PbkludmFsaWRNb2RpZnlSZXF1ZXN0Q2hhbmdlKCd1cmknLCAnVXJpSW50ZXJmYWNlJywgJGNoYW5nZXNbJ3VyaSddKTsKICAgICAgICB9CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygnYm9keScsICRjaGFuZ2VzKSAmJiAkY2hhbmdlc1snYm9keSddID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5PbkludmFsaWRNb2RpZnlSZXF1ZXN0Q2hhbmdlKCdib2R5JywgJ3Jlc291cmNlfHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxTdHJlYW1JbnRlcmZhY2V8Y2FsbGFibGV8XEl0ZXJhdG9yfFxTdHJpbmdhYmxlJywgJGNoYW5nZXNbJ2JvZHknXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ3NldF9oZWFkZXJzJywgJGNoYW5nZXMpKSB7CiAgICAgICAgICAgIGlmICghXGlzX2FycmF5KCRjaGFuZ2VzWydzZXRfaGVhZGVycyddKSkgewogICAgICAgICAgICAgICAgc2VsZjo6d2Fybk9uSW52YWxpZE1vZGlmeVJlcXVlc3RDaGFuZ2UoJ3NldF9oZWFkZXJzJywgJ2FycmF5PGFycmF5LWtleSwgc3RyaW5nfG5vbi1lbXB0eS1hcnJheTxhcnJheS1rZXksIHN0cmluZz4+JywgJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10gYXMgJGhlYWRlciA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyUGF0aCA9IFxzcHJpbnRmKCdzZXRfaGVhZGVycy4lcycsIChzdHJpbmcpICRoZWFkZXIpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoXGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2YWx1ZSA9PT0gW10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6Ondhcm5PbkludmFsaWRNb2RpZnlSZXF1ZXN0Q2hhbmdlKCRoZWFkZXJQYXRoLCAnc3RyaW5nfG5vbi1lbXB0eS1hcnJheTxhcnJheS1rZXksIHN0cmluZz4nLCAkdmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJGluZGV4ID0+ICRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6d2Fybk9uSW52YWxpZE1vZGlmeVJlcXVlc3RDaGFuZ2UoXHNwcmludGYoJyVzLiVzJywgJGhlYWRlclBhdGgsIChzdHJpbmcpICRpbmRleCksICdzdHJpbmcnLCAkaXRlbSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoIVxpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjp3YXJuT25JbnZhbGlkTW9kaWZ5UmVxdWVzdENoYW5nZSgkaGVhZGVyUGF0aCwgJ3N0cmluZ3xub24tZW1wdHktYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+JywgJHZhbHVlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygncmVtb3ZlX2hlYWRlcnMnLCAkY2hhbmdlcykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIHNlbGY6Ondhcm5PbkludmFsaWRNb2RpZnlSZXF1ZXN0Q2hhbmdlKCdyZW1vdmVfaGVhZGVycycsICdhcnJheTxhcnJheS1rZXksIHN0cmluZ3xpbnQ+JywgJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10pOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10gYXMgJGluZGV4ID0+ICRoZWFkZXIpIHsKICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCRoZWFkZXIpICYmICFcaXNfaW50KCRoZWFkZXIpKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp3YXJuT25JbnZhbGlkTW9kaWZ5UmVxdWVzdENoYW5nZShcc3ByaW50ZigncmVtb3ZlX2hlYWRlcnMuJXMnLCAoc3RyaW5nKSAkaW5kZXgpLCAnc3RyaW5nfGludCcsICRoZWFkZXIpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gd2Fybk9uSW52YWxpZE1vZGlmeVJlcXVlc3RDaGFuZ2Uoc3RyaW5nICRrZXksIHN0cmluZyAkZXhwZWN0ZWQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgJ2d1enpsZWh0dHAvcHNyNycsCiAgICAgICAgICAgICcyLjExJywKICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gVXRpbHM6Om1vZGlmeVJlcXVlc3QoKSBjaGFuZ2UgIiVzIiBpcyBkZXByZWNhdGVkOyBndXp6bGVodHRwL3BzcjcgMy4wIHJlcXVpcmVzICVzLicsCiAgICAgICAgICAgIFxnZXRfZGVidWdfdHlwZSgkdmFsdWUpLAogICAgICAgICAgICAka2V5LAogICAgICAgICAgICAkZXhwZWN0ZWQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmVhZCBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtIHVwIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYnVmZmVyIGxlbmd0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgU3RyZWFtIHRvIHJlYWQgZnJvbQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgICAkbWF4TGVuZ3RoIE1heGltdW0gYnVmZmVyIGxlbmd0aAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlYWRMaW5lKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCA/aW50ICRtYXhMZW5ndGggPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGJ1ZmZlciA9ICcnOwogICAgICAgICRzaXplID0gMDsKCiAgICAgICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICBpZiAoJycgPT09ICgkYnl0ZSA9ICRzdHJlYW0tPnJlYWQoMSkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZmVyIC49ICRieXRlOwogICAgICAgICAgICAvLyBCcmVhayB3aGVuIGEgbmV3IGxpbmUgaXMgZm91bmQgb3IgdGhlIG1heCBsZW5ndGggLSAxIGlzIHJlYWNoZWQKICAgICAgICAgICAgaWYgKCRieXRlID09PSAiXG4iIHx8ICsrJHNpemUgPT09ICRtYXhMZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRidWZmZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWRhY3QgdGhlIHBhc3N3b3JkIGluIHRoZSB1c2VyIGluZm8gcGFydCBvZiBhIFVSSS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRhY3RVc2VySW5mbyhVcmlJbnRlcmZhY2UgJHVyaSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICR1c2VySW5mbyA9ICR1cmktPmdldFVzZXJJbmZvKCk7CgogICAgICAgIGlmIChmYWxzZSAhPT0gKCRwb3MgPSBcc3RycG9zKCR1c2VySW5mbywgJzonKSkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhVc2VySW5mbyhcc3Vic3RyKCR1c2VySW5mbywgMCwgJHBvcyksICcqKionKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KICAgICAqCiAgICAgKiBPcHRpb25zIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXlzOgogICAgICogLSBtZXRhZGF0YTogQXJyYXkgb2YgY3VzdG9tIG1ldGFkYXRhLgogICAgICogLSBzaXplOiBTaXplIG9mIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGAkcmVzb3VyY2VgIHR5cGVzOgogICAgICogLSBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgOiBSZXR1cm5zIHRoZSB2YWx1ZSBhcy1pcy4KICAgICAqIC0gYHN0cmluZ2A6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgdXNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBjb250ZW50cy4KICAgICAqIC0gYHJlc291cmNlYDogQ3JlYXRlcyBhIHN0cmVhbSBvYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gUEhQIHN0cmVhbSByZXNvdXJjZS4KICAgICAqIC0gYEl0ZXJhdG9yYDogSWYgdGhlIHByb3ZpZGVkIHZhbHVlIGltcGxlbWVudHMgYEl0ZXJhdG9yYCwgdGhlbiBhIHJlYWQtb25seQogICAgICogICBzdHJlYW0gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBpdGVyYWJsZS4gRWFjaCB0aW1lIHRoZQogICAgICogICBzdHJlYW0gaXMgcmVhZCBmcm9tLCBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgZmlsbCBhIGJ1ZmZlciBhbmQgd2lsbCBiZQogICAgICogICBjb250aW51b3VzbHkgY2FsbGVkIHVudGlsIHRoZSBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByZWFkIHNpemUuCiAgICAgKiAgIFN1YnNlcXVlbnQgcmVhZCBjYWxscyB3aWxsIGZpcnN0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFuZCB0aGVuIGNhbGwgYG5leHRgCiAgICAgKiAgIG9uIHRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yIHVudGlsIGl0IGlzIGV4aGF1c3RlZC4KICAgICAqIC0gYG9iamVjdGAgd2l0aCBgX190b1N0cmluZygpYDogSWYgdGhlIG9iamVjdCBoYXMgdGhlIGBfX3RvU3RyaW5nKClgIG1ldGhvZCwKICAgICAqICAgdGhlIG9iamVjdCB3aWxsIGJlIGNhc3QgdG8gYSBzdHJpbmcgYW5kIHRoZW4gYSBzdHJlYW0gd2lsbCBiZSByZXR1cm5lZCB0aGF0CiAgICAgKiAgIHVzZXMgdGhlIHN0cmluZyB2YWx1ZS4KICAgICAqIC0gYE5VTExgOiBXaGVuIGBudWxsYCBpcyBwYXNzZWQsIGFuIGVtcHR5IHN0cmVhbSBvYmplY3QgaXMgcmV0dXJuZWQuCiAgICAgKiAtIGBjYWxsYWJsZWA6IFdoZW4gYSBjYWxsYWJsZSBhcnJheSwgY2xvc3VyZSwgb3IgaW52b2thYmxlIG9iamVjdCBpcyBwYXNzZWQKICAgICAqICAgYW5kIG5vIGVhcmxpZXIgcmVzb3VyY2Ugb3Igb2JqZWN0IHJ1bGUgYXBwbGllcywgYSByZWFkLW9ubHkgc3RyZWFtIG9iamVjdAogICAgICogICB3aWxsIGJlIGNyZWF0ZWQgdGhhdCBpbnZva2VzIHRoZSBnaXZlbiBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGlzIGludm9rZWQKICAgICAqICAgd2l0aCB0aGUgc3VnZ2VzdGVkIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBUaGUgY2FsbGFibGUgY2FuIHJldHVybiBmZXdlcgogICAgICogICBvciBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLCBidXQgTVVTVCByZXR1cm4gYGZhbHNlYCBvciBgbnVsbGAgd2hlbiB0aGVyZQogICAgICogICBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLiBBbnkgYWRkaXRpb25hbCBieXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIGFuZCB1c2VkCiAgICAgKiAgIGluIHN1YnNlcXVlbnQgcmVhZHMuIFN0cmluZyBpbnB1dHMgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIHN0cmluZyBib2RpZXMsCiAgICAgKiAgIGV2ZW4gd2hlbiB0aGV5IG5hbWUgY2FsbGFibGUgZnVuY3Rpb25zLgogICAgICoKICAgICAqIFBhc3NpbmcgYSBub24tc3RyaW5nIHNjYWxhciAoYGludGAsIGBmbG9hdGAsIG9yIGBib29sYCkgaXMgZGVwcmVjYXRlZDsgY2FzdAogICAgICogaXQgdG8gYSBzdHJpbmcgaW5zdGVhZC4gZ3V6emxlaHR0cC9wc3I3IDMuMCB3aWxsIHJlamVjdCBub24tc3RyaW5nIHNjYWxhcnMuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlfHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxTdHJlYW1JbnRlcmZhY2V8Y2FsbGFibGV8XEl0ZXJhdG9yfG51bGwgJHJlc291cmNlIEVudGl0eSBib2R5IGRhdGEKICAgICAqIEBwYXJhbSBhcnJheXtzaXplPzogaW50LCBtZXRhZGF0YT86IGFycmF5fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zICBBZGRpdGlvbmFsIG9wdGlvbnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICRyZXNvdXJjZSBhcmcgaXMgbm90IHZhbGlkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmVhbUZvcigkcmVzb3VyY2UgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFN0cmVhbUludGVyZmFjZQogICAgewogICAgICAgIGlmIChpc19zY2FsYXIoJHJlc291cmNlKSkgewogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkcmVzb3VyY2UpKSB7CiAgICAgICAgICAgICAgICBcdHJpZ2dlcl9kZXByZWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAnZ3V6emxlaHR0cC9wc3I3JywKICAgICAgICAgICAgICAgICAgICAnMi4xMicsCiAgICAgICAgICAgICAgICAgICAgJ1Bhc3NpbmcgJXMgdG8gVXRpbHM6OnN0cmVhbUZvcigpIGlzIGRlcHJlY2F0ZWQ7IGNhc3QgaXQgdG8gYSBzdHJpbmcuIGd1enpsZWh0dHAvcHNyNyAzLjAgd2lsbCBvbmx5IGFjY2VwdCBzdHJpbmcsIHJlc291cmNlLCBTdHJlYW1JbnRlcmZhY2UsIFN0cmluZ2FibGUsIEl0ZXJhdG9yLCBjYWxsYWJsZSwgb3IgbnVsbC4nLAogICAgICAgICAgICAgICAgICAgIFxnZXR0eXBlKCRyZXNvdXJjZSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKGlzX2Zsb2F0KCRyZXNvdXJjZSkgJiYgIWlzX2Zpbml0ZSgkcmVzb3VyY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplZCBvbmx5IHRvIGF2b2lkIFBIUCA4LjUncyAoc3RyaW5nKSBOQU4gd2FybmluZwogICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIGRlcHJlY2F0ZWQ7IDMuMCByZWplY3RzIG5vbi1maW5pdGUgZmxvYXRzIHdpdGggZXZlcnkKICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBub24tc3RyaW5nIHNjYWxhci4KICAgICAgICAgICAgICAgICAgICAkcmVzb3VyY2UgPSBpc19uYW4oJHJlc291cmNlKSA/ICdOQU4nIDogKCRyZXNvdXJjZSA+IDAgPyAnSU5GJyA6ICctSU5GJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzdHJlYW0gPSBzZWxmOjp0cnlGb3BlbigncGhwOi8vdGVtcCcsICdyKycpOwogICAgICAgICAgICBpZiAoJHJlc291cmNlICE9PSAnJykgewogICAgICAgICAgICAgICAgZndyaXRlKCRzdHJlYW0sIChzdHJpbmcpICRyZXNvdXJjZSk7CiAgICAgICAgICAgICAgICBmc2Vlaygkc3RyZWFtLCAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oJHN0cmVhbSwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgc3dpdGNoIChnZXR0eXBlKCRyZXNvdXJjZSkpIHsKICAgICAgICAgICAgY2FzZSAncmVzb3VyY2UnOgogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAqIFRoZSAncGhwOi8vaW5wdXQnIGlzIGEgc3BlY2lhbCBzdHJlYW0gd2l0aCBxdWlya3MgYW5kIGluY29uc2lzdGVuY2llcy4KICAgICAgICAgICAgICAgICAqIFdlIGF2b2lkIHVzaW5nIHRoYXQgc3RyZWFtIGJ5IHJlYWRpbmcgaXQgaW50byBwaHA6Ly90ZW1wCiAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkcmVzb3VyY2UgKi8KICAgICAgICAgICAgICAgIGlmICgoXHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRyZXNvdXJjZSlbJ3VyaSddID8/ICcnKSA9PT0gJ3BocDovL2lucHV0JykgewogICAgICAgICAgICAgICAgICAgICRzdHJlYW0gPSBzZWxmOjp0cnlGb3BlbigncGhwOi8vdGVtcCcsICd3KycpOwogICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkcmVzb3VyY2UsICRzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgIGZzZWVrKCRzdHJlYW0sIDApOwogICAgICAgICAgICAgICAgICAgICRyZXNvdXJjZSA9ICRzdHJlYW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oJHJlc291cmNlLCAkb3B0aW9ucyk7CiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgICAgICAvKiogQHZhciBvYmplY3QgJHJlc291cmNlICovCiAgICAgICAgICAgICAgICBpZiAoJHJlc291cmNlIGluc3RhbmNlb2YgU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNvdXJjZTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkcmVzb3VyY2UgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFB1bXBTdHJlYW0oZnVuY3Rpb24gKCkgdXNlICgkcmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkcmVzb3VyY2UtPnZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc291cmNlLT5jdXJyZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNvdXJjZS0+bmV4dCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgfSwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKG1ldGhvZF9leGlzdHMoJHJlc291cmNlLCAnX190b1N0cmluZycpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OnN0cmVhbUZvcigoc3RyaW5nKSAkcmVzb3VyY2UsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdOVUxMJzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHNlbGY6OnRyeUZvcGVuKCdwaHA6Ly90ZW1wJywgJ3IrJyksICRvcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19jYWxsYWJsZSgkcmVzb3VyY2UpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHVtcFN0cmVhbSgkcmVzb3VyY2UsICRvcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHJlc291cmNlIHR5cGU6ICcuZ2V0dHlwZSgkcmVzb3VyY2UpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhZmVseSBvcGVucyBhIFBIUCBzdHJlYW0gcmVzb3VyY2UgdXNpbmcgYSBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBXaGVuIGZvcGVuIGZhaWxzLCBQSFAgbm9ybWFsbHkgcmFpc2VzIGEgd2FybmluZy4gVGhpcyBmdW5jdGlvbiBhZGRzIGFuCiAgICAgKiBlcnJvciBoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaW5zdGVhZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlIHRvIG9wZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgICAgIE1vZGUgdXNlZCB0byBvcGVuIHRoZSBmaWxlCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyeUZvcGVuKHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkbW9kZSkKICAgIHsKICAgICAgICAkZXggPSBudWxsOwogICAgICAgIHNldF9lcnJvcl9oYW5kbGVyKHN0YXRpYyBmdW5jdGlvbiAoaW50ICRlcnJubywgc3RyaW5nICRlcnJzdHIpIHVzZSAoJGZpbGVuYW1lLCAkbW9kZSwgJiRleCk6IGJvb2wgewogICAgICAgICAgICAkZXggPSBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gb3BlbiAiJXMiIHVzaW5nIG1vZGUgIiVzIjogJXMnLAogICAgICAgICAgICAgICAgJGZpbGVuYW1lLAogICAgICAgICAgICAgICAgJG1vZGUsCiAgICAgICAgICAgICAgICAkZXJyc3RyCiAgICAgICAgICAgICkpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRoYW5kbGUgKi8KICAgICAgICAgICAgJGhhbmRsZSA9IGZvcGVuKCRmaWxlbmFtZSwgJG1vZGUpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIG9wZW4gIiVzIiB1c2luZyBtb2RlICIlcyI6ICVzJywKICAgICAgICAgICAgICAgICRmaWxlbmFtZSwKICAgICAgICAgICAgICAgICRtb2RlLAogICAgICAgICAgICAgICAgJGUtPmdldE1lc3NhZ2UoKQogICAgICAgICAgICApLCAwLCAkZSk7CiAgICAgICAgfQoKICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCiAgICAgICAgaWYgKCRleCkgewogICAgICAgICAgICAvKiogQHZhciBcUnVudGltZUV4Y2VwdGlvbiAkZXggKi8KICAgICAgICAgICAgdGhyb3cgJGV4OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoYW5kbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYWZlbHkgZ2V0cyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBzdHJlYW0uCiAgICAgKgogICAgICogV2hlbiBzdHJlYW1fZ2V0X2NvbnRlbnRzIGZhaWxzLCBQSFAgbm9ybWFsbHkgcmFpc2VzIGEgd2FybmluZy4gVGhpcwogICAgICogZnVuY3Rpb24gYWRkcyBhbiBlcnJvciBoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgYW5kIHRocm93cyBhbgogICAgICogZXhjZXB0aW9uIGluc3RlYWQuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0KICAgICAqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBzdHJlYW0gY2Fubm90IGJlIHJlYWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlHZXRDb250ZW50cygkc3RyZWFtKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGV4ID0gbnVsbDsKICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihzdGF0aWMgZnVuY3Rpb24gKGludCAkZXJybm8sIHN0cmluZyAkZXJyc3RyKSB1c2UgKCYkZXgpOiBib29sIHsKICAgICAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlYWQgc3RyZWFtIGNvbnRlbnRzOiAlcycsCiAgICAgICAgICAgICAgICAkZXJyc3RyCiAgICAgICAgICAgICkpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZ3xmYWxzZSAkY29udGVudHMgKi8KICAgICAgICAgICAgJGNvbnRlbnRzID0gc3RyZWFtX2dldF9jb250ZW50cygkc3RyZWFtKTsKCiAgICAgICAgICAgIGlmICgkY29udGVudHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXggPSBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkIHN0cmVhbSBjb250ZW50cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkZSkgewogICAgICAgICAgICAkZXggPSBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVhZCBzdHJlYW0gY29udGVudHM6ICVzJywKICAgICAgICAgICAgICAgICRlLT5nZXRNZXNzYWdlKCkKICAgICAgICAgICAgKSwgMCwgJGUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgogICAgICAgIGlmICgkZXgpIHsKICAgICAgICAgICAgLyoqIEB2YXIgXFJ1bnRpbWVFeGNlcHRpb24gJGV4ICovCiAgICAgICAgICAgIHRocm93ICRleDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGEgc3RyaW5nIG9yIFVyaUludGVyZmFjZSBhbmQgcmV0dXJucyBhCiAgICAgKiBVcmlJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYQogICAgICogVXJpSW50ZXJmYWNlLCBpdCBpcyByZXR1cm5lZCBhcy1pcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJpRm9yKCR1cmkpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19zdHJpbmcoJHVyaSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBVcmkoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVVJJIG11c3QgYmUgYSBzdHJpbmcgb3IgVXJpSW50ZXJmYWNlJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/UPGRADING.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlIFBTUi03IFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEueCB0byAyLjAKLS0tLS0tLS0tLQoKR3V6emxlIFBTUi03IDIuMCBpcyBhIG1ham9yIHJlbGVhc2UgdGhhdCByZW1vdmVzIGRlcHJlY2F0ZWQgQVBJcywgcmFpc2VzIHRoZQptaW5pbXVtIFBIUCB2ZXJzaW9uLCBhbmQgYWRkcyBQSFAgNyBwYXJhbWV0ZXIgYW5kIHJldHVybiB0eXBlcy4gQXBwbGljYXRpb25zIHRoYXQKb25seSBkZXBlbmQgb24gUFNSLTcgaW50ZXJmYWNlcyBzaG91bGQgdXN1YWxseSBuZWVkIHNtYWxsIGNoYW5nZXMuIEFwcGxpY2F0aW9ucwp0aGF0IGNhbGwgaGVscGVyIGZ1bmN0aW9ucywgZXh0ZW5kIHBhY2thZ2UgY2xhc3Nlcywgb3IgcGFzcyBpbnZhbGlkIGFyZ3VtZW50CnR5cGVzIG5lZWQgY2xvc2VyIHJldmlldy4KCiMjIyMgUEhQIFZlcnNpb24gYW5kIERlcGVuZGVuY2llcwoKR3V6emxlIFBTUi03IDIuMCByZXF1aXJlcyBQSFAgYF43LjIuNSB8fCBeOC4wYC4gR3V6emxlIFBTUi03IDEueCBzdXBwb3J0ZWQgUEhQCmA+PTUuNC4wYC4KCkNvbXBvc2VyIGRlcGVuZGVuY3kgY2hhbmdlcyB0aGF0IGNhbiBhZmZlY3QgdXBncmFkZXM6CgotIGByYWxvdXBoaWUvZ2V0YWxsaGVhZGVyc2AgdjIgc3VwcG9ydCB3YXMgZHJvcHBlZDsgMi4wIHJlcXVpcmVzIGBeMy4wYC4KLSBgcHNyL2h0dHAtZmFjdG9yeTpeMS4wYCBpcyByZXF1aXJlZCBiZWNhdXNlIDIuMCBzaGlwcyBQU1ItMTcgZmFjdG9yaWVzIHRocm91Z2ggYEd1enpsZUh0dHBcUHNyN1xIdHRwRmFjdG9yeWAuCgojIyMjIFBIUCA3IFR5cGUgSGludHMgYW5kIFJldHVybiBUeXBlcwoKVHlwZSBoaW50cyBhbmQgcmV0dXJuIHR5cGVzIHdlcmUgYWRkZWQgd2hlcmV2ZXIgcG9zc2libGUuIFBsZWFzZSBtYWtlIHN1cmU6CgotIFlvdSBwYXNzIHZhbHVlcyBvZiB0aGUgZG9jdW1lbnRlZCB0eXBlIHdoZW4gY2FsbGluZyBtZXRob2RzIGFuZCBmdW5jdGlvbnMuCi0gQ2xhc3NlcyB0aGF0IGV4dGVuZCBHdXp6bGUgUFNSLTcgY2xhc3NlcyB1cGRhdGUgYW55IG92ZXJyaWRkZW4gbWV0aG9kIHNpZ25hdHVyZXMgdG8gcmVtYWluIGNvbXBhdGlibGUuCi0gQ29kZSB0aGF0IGV4cGVjdGVkIHBhY2thZ2Utc3BlY2lmaWMgYEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbmAgZXhjZXB0aW9ucyBmb3IgaW52YWxpZCBhcmd1bWVudCB0eXBlcyBtYXkgbm93IHJlY2VpdmUgUEhQIGBUeXBlRXJyb3JgIGV4Y2VwdGlvbnMgaW5zdGVhZC4KCkNvbW1vbiBleGFtcGxlcyBpbmNsdWRlIHBhc3NpbmcgYSByZWFsIGludGVnZXIgc3RhdHVzIGNvZGUgdG8gYFJlc3BvbnNlOjpfX2NvbnN0cnVjdCgpYCBhbmQgcGFzc2luZyBhIHN0cmluZyBtZXRob2QgdG8gYFJlcXVlc3Q6Ol9fY29uc3RydWN0KClgLgoKIyMjIyBSZW1vdmVkIEZ1bmN0aW9uIEFQSQoKVGhlIHN0YXRpYyBBUEkgd2FzIGludHJvZHVjZWQgaW4gMS43LjAgdG8gbWl0aWdhdGUgcHJvYmxlbXMgd2l0aCBmdW5jdGlvbnMKY29uZmxpY3RpbmcgYmV0d2VlbiBnbG9iYWwgYW5kIGxvY2FsIGNvcGllcyBvZiB0aGUgcGFja2FnZS4gVGhlIGZ1bmN0aW9uIEFQSSB3YXMKcmVtb3ZlZCBpbiAyLjAuMCwgYWxvbmcgd2l0aCB0aGUgQ29tcG9zZXIgYGZpbGVzYCBhdXRvbG9hZCBlbnRyeSB0aGF0IGxvYWRlZApgc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocGAuCgpSZXBsYWNlIG5hbWVzcGFjZWQgZnVuY3Rpb24gY2FsbHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgbWV0aG9kcyBpbiB0aGUKYEd1enpsZUh0dHBcUHNyN2AgbmFtZXNwYWNlOgoKYGBgcGhwCi8vIEJlZm9yZToKdXNlIGZ1bmN0aW9uIEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yOwoKJHN0cmVhbSA9IHN0cmVhbV9mb3IoJ2JvZHknKTsKCi8vIEFmdGVyOgp1c2UgR3V6emxlSHR0cFxQc3I3XFV0aWxzOwoKJHN0cmVhbSA9IFV0aWxzOjpzdHJlYW1Gb3IoJ2JvZHknKTsKYGBgCgp8IE9yaWdpbmFsIEZ1bmN0aW9uIHwgUmVwbGFjZW1lbnQgTWV0aG9kIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgYHN0cmAgfCBgTWVzc2FnZTo6dG9TdHJpbmdgIHwKfCBgdXJpX2ZvcmAgfCBgVXRpbHM6OnVyaUZvcmAgfAp8IGBzdHJlYW1fZm9yYCB8IGBVdGlsczo6c3RyZWFtRm9yYCB8CnwgYHBhcnNlX2hlYWRlcmAgfCBgSGVhZGVyOjpwYXJzZWAgfAp8IGBub3JtYWxpemVfaGVhZGVyYCB8IGBIZWFkZXI6Om5vcm1hbGl6ZWAgfAp8IGBtb2RpZnlfcmVxdWVzdGAgfCBgVXRpbHM6Om1vZGlmeVJlcXVlc3RgIHwKfCBgcmV3aW5kX2JvZHlgIHwgYE1lc3NhZ2U6OnJld2luZEJvZHlgIHwKfCBgdHJ5X2ZvcGVuYCB8IGBVdGlsczo6dHJ5Rm9wZW5gIHwKfCBgY29weV90b19zdHJpbmdgIHwgYFV0aWxzOjpjb3B5VG9TdHJpbmdgIHwKfCBgY29weV90b19zdHJlYW1gIHwgYFV0aWxzOjpjb3B5VG9TdHJlYW1gIHwKfCBgaGFzaGAgfCBgVXRpbHM6Omhhc2hgIHwKfCBgcmVhZGxpbmVgIHwgYFV0aWxzOjpyZWFkTGluZWAgfAp8IGBwYXJzZV9yZXF1ZXN0YCB8IGBNZXNzYWdlOjpwYXJzZVJlcXVlc3RgIHwKfCBgcGFyc2VfcmVzcG9uc2VgIHwgYE1lc3NhZ2U6OnBhcnNlUmVzcG9uc2VgIHwKfCBgcGFyc2VfcXVlcnlgIHwgYFF1ZXJ5OjpwYXJzZWAgfAp8IGBidWlsZF9xdWVyeWAgfCBgUXVlcnk6OmJ1aWxkYCB8CnwgYG1pbWV0eXBlX2Zyb21fZmlsZW5hbWVgIHwgYE1pbWVUeXBlOjpmcm9tRmlsZW5hbWVgIHwKfCBgbWltZXR5cGVfZnJvbV9leHRlbnNpb25gIHwgYE1pbWVUeXBlOjpmcm9tRXh0ZW5zaW9uYCB8CnwgYF9wYXJzZV9tZXNzYWdlYCB8IGBNZXNzYWdlOjpwYXJzZU1lc3NhZ2VgIHwKfCBgX3BhcnNlX3JlcXVlc3RfdXJpYCB8IGBNZXNzYWdlOjpwYXJzZVJlcXVlc3RVcmlgIHwKfCBgZ2V0X21lc3NhZ2VfYm9keV9zdW1tYXJ5YCB8IGBNZXNzYWdlOjpib2R5U3VtbWFyeWAgfAp8IGBfY2FzZWxlc3NfcmVtb3ZlYCB8IGBVdGlsczo6Y2FzZWxlc3NSZW1vdmVgIHwKCmBIZWFkZXI6Om5vcm1hbGl6ZSgpYCByZW1haW5zIHRoZSBkaXJlY3QgMi4wIHJlcGxhY2VtZW50IGZvcgpgbm9ybWFsaXplX2hlYWRlcigpYC4gSW4gbmV3ZXIgMi54IHZlcnNpb25zLCBwcmVmZXIgYEhlYWRlcjo6c3BsaXRMaXN0KClgIGZvcgpuZXcgY29kZS4KCiMjIyMgRGVwcmVjYXRlZCBVUkkgTWV0aG9kcyBSZW1vdmVkCgpUaGUgZGVwcmVjYXRlZCBgVXJpOjpyZXNvbHZlKClgIGFuZCBgVXJpOjpyZW1vdmVEb3RTZWdtZW50cygpYCBtZXRob2RzIHdlcmUKcmVtb3ZlZC4gVXNlIGBVcmlSZXNvbHZlcmAgaW5zdGVhZC4KCmBgYHBocAovLyBCZWZvcmU6CiRyZXNvbHZlZCA9IFVyaTo6cmVzb2x2ZSgkYmFzZSwgJy4uL3BhdGgnKTsKJHBhdGggPSBVcmk6OnJlbW92ZURvdFNlZ21lbnRzKCcvYS8uLi9iJyk7CgovLyBBZnRlcjoKdXNlIEd1enpsZUh0dHBcUHNyN1xVcmlSZXNvbHZlcjsKdXNlIEd1enpsZUh0dHBcUHNyN1xVdGlsczsKCiRyZXNvbHZlZCA9IFVyaVJlc29sdmVyOjpyZXNvbHZlKCRiYXNlLCBVdGlsczo6dXJpRm9yKCcuLi9wYXRoJykpOwokcGF0aCA9IFVyaVJlc29sdmVyOjpyZW1vdmVEb3RTZWdtZW50cygnL2EvLi4vYicpOwpgYGAKCiMjIyMgU3RyaWN0ZXIgVVJJIFZhbGlkYXRpb24KCkd1enpsZSBQU1ItNyAxLnggYXV0b21hdGljYWxseSBmaXhlZCBhIFVSSSB0aGF0IGNvbWJpbmVkIGFuIGF1dGhvcml0eSB3aXRoIGEKcmVsYXRpdmUgcGF0aCBieSBwcmVwZW5kaW5nIGAvYCB0byB0aGUgcGF0aC4gVGhhdCBkZXByZWNhdGVkIGJlaGF2aW9yIHdhcyByZW1vdmVkCmluIDIuMC4gU3VjaCBVUklzIG5vdyB0aHJvdyBgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uYC4KCmBgYHBocAovLyBCZWZvcmU6IGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIC8vZXhhbXBsZS5jb20vZm9vLgokdXJpID0gKG5ldyBVcmkoKSktPndpdGhIb3N0KCdleGFtcGxlLmNvbScpLT53aXRoUGF0aCgnZm9vJyk7CgovLyBBZnRlcjogbWFrZSB0aGUgYWJzb2x1dGUgcGF0aCBleHBsaWNpdC4KJHVyaSA9IChuZXcgVXJpKCkpLT53aXRoSG9zdCgnZXhhbXBsZS5jb20nKS0+d2l0aFBhdGgoJy9mb28nKTsKYGBgCgojIyMjIEhlYWRlciBWYWxpZGF0aW9uCgpIZWFkZXIgbmFtZXMgYXJlIHZhbGlkYXRlZCBtb3JlIHN0cmljdGx5IGFjY29yZGluZyB0byBSRkMgNzIzMCB0b2tlbiBzeW50YXguCk5hbWVzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSwgYC9gLCBgKGAsIGApYCwgYFxcYCwgb3Igb3RoZXIgaW52YWxpZCBjaGFyYWN0ZXJzIGFyZQpyZWplY3RlZC4KCklmIHlvdSBjb25zdHJ1Y3QgbWVzc2FnZXMgZnJvbSB1bnRydXN0ZWQgb3Igbm9uLXN0YW5kYXJkIGlucHV0LCBub3JtYWxpemUgb3IKcmVqZWN0IGludmFsaWQgaGVhZGVyIG5hbWVzIGJlZm9yZSBjb25zdHJ1Y3RpbmcgYFJlcXVlc3RgLCBgUmVzcG9uc2VgLCBvcgpgU2VydmVyUmVxdWVzdGAgaW5zdGFuY2VzLgoKIyMjIyBRdWVyeSBTdHJpbmcgQm9vbGVhbiBTZXJpYWxpemF0aW9uCgpgUXVlcnk6OmJ1aWxkKClgIG5vdyBzZXJpYWxpemVzIGJvb2xlYW5zIGFzIGAxYCBhbmQgYDBgLCBtYXRjaGluZwpgaHR0cF9idWlsZF9xdWVyeSgpYCBiZWhhdmlvci4KCmBgYHBocApRdWVyeTo6YnVpbGQoWydlbmFibGVkJyA9PiB0cnVlLCAnZGlzYWJsZWQnID0+IGZhbHNlXSk7Ci8vIGVuYWJsZWQ9MSZkaXNhYmxlZD0wCmBgYAoKSW4gY3VycmVudCAyLnggdmVyc2lvbnMsIHBhc3MgYGZhbHNlYCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgaWYgeW91IG5lZWQgdGV4dHVhbApib29sZWFuIHZhbHVlczoKCmBgYHBocApRdWVyeTo6YnVpbGQoWydlbmFibGVkJyA9PiB0cnVlLCAnZGlzYWJsZWQnID0+IGZhbHNlXSwgUEhQX1FVRVJZX1JGQzM5ODYsIGZhbHNlKTsKLy8gZW5hYmxlZD10cnVlJmRpc2FibGVkPWZhbHNlCmBgYAoKIyMjIyBGaW5hbCBTdHJlYW0gYW5kIERlY29yYXRvciBDbGFzc2VzCgpTZXZlcmFsIGNsYXNzZXMgdGhhdCB3ZXJlIGFubm90YXRlZCB3aXRoIGBAZmluYWxgIGluIDEueCBhcmUgZGVjbGFyZWQgYGZpbmFsYCBpbgoyLjA6CgotIGBBcHBlbmRTdHJlYW1gCi0gYEJ1ZmZlclN0cmVhbWAKLSBgQ2FjaGluZ1N0cmVhbWAKLSBgRHJvcHBpbmdTdHJlYW1gCi0gYEZuU3RyZWFtYAotIGBJbmZsYXRlU3RyZWFtYAotIGBMYXp5T3BlblN0cmVhbWAKLSBgTGltaXRTdHJlYW1gCi0gYE11bHRpcGFydFN0cmVhbWAKLSBgTm9TZWVrU3RyZWFtYAotIGBQdW1wU3RyZWFtYAotIGBTdHJlYW1XcmFwcGVyYAoKSWYgeW91ciBjb2RlIGV4dGVuZHMgb25lIG9mIHRoZXNlIGNsYXNzZXMsIHJlcGxhY2UgaW5oZXJpdGFuY2Ugd2l0aCBjb21wb3NpdGlvbi4KRm9yIGN1c3RvbSBzdHJlYW1zLCBpbXBsZW1lbnQgYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYCBkaXJlY3RseSBvciB1c2UKYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdGAgaW4geW91ciBvd24gY2xhc3MuCgpgUmVxdWVzdGAsIGBSZXNwb25zZWAsIGBTZXJ2ZXJSZXF1ZXN0YCwgYFN0cmVhbWAsIGBVcGxvYWRlZEZpbGVgLCBhbmQgYFVyaWAgcmVtYWluCmV4dGVuZGFibGUgaW4gMi4wLCBidXQgb3ZlcnJpZGRlbiBtZXRob2RzIG11c3QgaGF2ZSBjb21wYXRpYmxlIHNpZ25hdHVyZXMuCgojIyMjIFB1YmxpYyBDb25zdGFudHMgYW5kIEludGVybmFsIERldGFpbHMKClNvbWUgY29uc3RhbnRzIHRoYXQgd2VyZSBwdWJsaWMgaW4gMS54IGFyZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGluIDIuMDoKCi0gYFN0cmVhbTo6UkVBREFCTEVfTU9ERVNgCi0gYFN0cmVhbTo6V1JJVEFCTEVfTU9ERVNgCi0gYFVyaTo6SFRUUF9ERUZBVUxUX0hPU1RgCgpJZiB5b3VyIGNvZGUgdXNlZCB0aGVzZSBjb25zdGFudHMsIGRlZmluZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb25zdGFudHMgaW5zdGVhZApvZiBkZXBlbmRpbmcgb24gcGFja2FnZSBpbnRlcm5hbHMuCgojIyMjIFN0cmVhbSBCZWhhdmlvciBDaGFuZ2VzCgpgQnVmZmVyU3RyZWFtOjp3cml0ZSgpYCByZXR1cm5zIGAwYCBpbnN0ZWFkIG9mIGBmYWxzZWAgd2hlbiB0aGUgYnVmZmVyIGV4Y2VlZHMKaXRzIGhpZ2gtd2F0ZXIgbWFyay4gVGhpcyBrZWVwcyB0aGUgbWV0aG9kIGNvbXBhdGlibGUgd2l0aCB0aGUgYGludGAgcmV0dXJuIHR5cGUKZnJvbSBgU3RyZWFtSW50ZXJmYWNlOjp3cml0ZSgpYC4KClNldmVyYWwgc3RyZWFtIGBfX3RvU3RyaW5nKClgIGltcGxlbWVudGF0aW9ucyBub3cgY2F0Y2ggYFRocm93YWJsZWAuIE9uIFBIUCA3LjQKYW5kIG5ld2VyLCBleGNlcHRpb25zIHRocm93biBkdXJpbmcgc3RyaW5naWZpY2F0aW9uIGFyZSByZXRocm93bi4gQXZvaWQgcmVseWluZwpvbiBgKHN0cmluZykgJHN0cmVhbWAgdG8gaGlkZSByZWFkIGZhaWx1cmVzOyBjYWxsIGBnZXRDb250ZW50cygpYCBvciBgcmVhZCgpYCBhbmQKaGFuZGxlIGV4Y2VwdGlvbnMgd2hlbiBmYWlsdXJlcyBhcmUgcG9zc2libGUuCgojIyMjIFBTUi0xNyBGYWN0b3JpZXMKCkd1enpsZSBQU1ItNyAyLjAgYWRkcyBgR3V6emxlSHR0cFxQc3I3XEh0dHBGYWN0b3J5YCwgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlClBTUi0xNyBmYWN0b3J5IGludGVyZmFjZXMgZnJvbSBgcHNyL2h0dHAtZmFjdG9yeWAuIFRoaXMgaXMgYWRkaXRpdmUsIGJ1dCBpdCBpcwp0aGUgcmVhc29uIGZvciB0aGUgbmV3IHJlcXVpcmVkIGRlcGVuZGVuY3kuCgpGb3IgdGhlIGZ1bGwgMi4wIGRpZmYsIHNlZQpodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjguMS4uLjIuMC4wLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL29hdXRoMi1jbGllbnQiLAogICAgImRlc2NyaXB0aW9uIjogIk9BdXRoIDIuMCBDbGllbnQgTGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEgfHwgPj04LjAuMCA8OC42LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAiZ3V6emxlaHR0cC9ndXp6bGUiOiAiXjYuNS44IHx8IF43LjQuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMS4zLjUiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS40IiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43IHx8IF44IHx8IF45IHx8IF4xMCB8fCBeMTEiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjExIgogICAgfSwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAib2F1dGgiLAogICAgICAgICJvYXV0aDIiLAogICAgICAgICJhdXRob3JpemF0aW9uIiwKICAgICAgICAiYXV0aGVudGljYXRpb24iLAogICAgICAgICJpZHAiLAogICAgICAgICJpZGVudGl0eSIsCiAgICAgICAgInNzbyIsCiAgICAgICAgInNpbmdsZSBzaWduIG9uIgogICAgXSwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxleCBCaWxiaWUiLAogICAgICAgICAgICAiZW1haWwiOiAiaGVsbG9AYWxleGJpbGJpZS5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5hbGV4YmlsYmllLmNvbSIsCiAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiV29vZHkgR2lsayIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2hhZG93aGFuZCIsCiAgICAgICAgICAgICJyb2xlIjogIkNvbnRyaWJ1dG9yIgogICAgICAgIH0KCiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcT0F1dGgyXFxDbGllbnRcXFRlc3RcXCI6ICJ0ZXN0L3NyYy8iCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMyBBbGV4IEJpbGJpZSA8aGVsbG9AYWxleGJpbGJpZS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InZlbmRvci9waHB1bml0L3BocHVuaXQvcGhwdW5pdC54c2QiCiAgICAgICAgIGJvb3RzdHJhcD0iLi92ZW5kb3IvYXV0b2xvYWQucGhwIgogICAgICAgICBjb2xvcnM9InRydWUiCiAgICAgICAgIGNhY2hlRGlyZWN0b3J5PSJidWlsZC9waHB1bml0Ij4KCiAgICA8Y292ZXJhZ2U+CiAgICAgICAgPHJlcG9ydD4KICAgICAgICAgICAgPGNsb3ZlciBvdXRwdXRGaWxlPSJidWlsZC9sb2dzL2Nsb3Zlci54bWwiLz4KICAgICAgICAgICAgPGh0bWwgb3V0cHV0RGlyZWN0b3J5PSJidWlsZC9jb3ZlcmFnZSIvPgogICAgICAgICAgICA8dGV4dCBvdXRwdXRGaWxlPSJwaHA6Ly9zdGRvdXQiLz4KICAgICAgICA8L3JlcG9ydD4KICAgIDwvY292ZXJhZ2U+CgogICAgPHRlc3RzdWl0ZXM+CiAgICAgICAgPHRlc3RzdWl0ZSBuYW1lPSJhbGwiPgogICAgICAgICAgICA8ZGlyZWN0b3J5PnRlc3Q8L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8bG9nZ2luZz4KICAgICAgICA8anVuaXQgb3V0cHV0RmlsZT0iYnVpbGQvcmVwb3J0Lmp1bml0LnhtbCIvPgogICAgPC9sb2dnaW5nPgoKICAgIDxzb3VyY2U+CiAgICAgICAgPGluY2x1ZGU+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj5zcmM8L2RpcmVjdG9yeT4KICAgICAgICA8L2luY2x1ZGU+CiAgICA8L3NvdXJjZT4KCiAgICA8cGhwPgogICAgICAgIDxlbnYgbmFtZT0iWERFQlVHX01PREUiIHZhbHVlPSJjb3ZlcmFnZSIvPgogICAgPC9waHA+Cgo8L3BocHVuaXQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBPQXV0aCAyLjAgQ2xpZW50CgpUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBiYXNlIGZvciBpbnRlZ3JhdGluZyB3aXRoIFtPQXV0aCAyLjBdKGh0dHA6Ly9vYXV0aC5uZXQvMi8pIHNlcnZpY2UgcHJvdmlkZXJzLgoKWyFbR2l0dGVyIENoYXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZ2l0dGVyLWpvaW5fY2hhdC1icmlnaHRncmVlbi5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2dpdHRlci5pbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbU291cmNlIENvZGVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc291cmNlLXRoZXBocGxlYWd1ZS9vYXV0aDItLWNsaWVudC1ibHVlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbTGF0ZXN0IFZlcnNpb25dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvdGhlcGhwbGVhZ3VlL29hdXRoMi1jbGllbnQuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L3JlbGVhc2VzKQpbIVtTb2Z0d2FyZSBMaWNlbnNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2xpY2Vuc2UtTUlULWJyaWdodGdyZWVuLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC9ibG9iL21hc3Rlci9MSUNFTlNFKQpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2FjdGlvbnMvd29ya2Zsb3cvc3RhdHVzL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2NvbnRpbnVvdXMtaW50ZWdyYXRpb24ueW1sP2xhYmVsPUNJJmxvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2FjdGlvbnM/cXVlcnk9d29ya2Zsb3clM0FDSSkKWyFbQ29kZWNvdiBDb2RlIENvdmVyYWdlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2NvZGVjb3YvYy9naC90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudD9sYWJlbD1jb2RlY292JmxvZ289Y29kZWNvdiZzdHlsZT1mbGF0LXNxdWFyZSldKGh0dHBzOi8vY29kZWNvdi5pby9naC90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudCkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9sZWFndWUvb2F1dGgyLWNsaWVudC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvbGVhZ3VlL29hdXRoMi1jbGllbnQpCgotLS0KClRoZSBPQXV0aCAyLjAgbG9naW4gZmxvdywgc2VlbiBjb21tb25seSBhcm91bmQgdGhlIHdlYiBpbiB0aGUgZm9ybSBvZiAiQ29ubmVjdCB3aXRoIEZhY2Vib29rL0dvb2dsZS9ldGMuIiBidXR0b25zLCBpcyBhIGNvbW1vbiBpbnRlZ3JhdGlvbiBhZGRlZCB0byB3ZWIgYXBwbGljYXRpb25zLCBidXQgaXQgY2FuIGJlIHRyaWNreSBhbmQgdGVkaW91cyB0byBkbyByaWdodC4gVG8gaGVscCwgd2UndmUgY3JlYXRlZCB0aGUgYGxlYWd1ZS9vYXV0aDItY2xpZW50YCBwYWNrYWdlLCB3aGljaCBwcm92aWRlcyBhIGJhc2UgZm9yIGludGVncmF0aW5nIHdpdGggdmFyaW91cyBPQXV0aCAyLjAgcHJvdmlkZXJzLCB3aXRob3V0IG92ZXJidXJkZW5pbmcgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBjb25jZXJucyBvZiBbUkZDIDY3NDldKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkpLgoKVGhpcyBPQXV0aCAyLjAgY2xpZW50IGxpYnJhcnkgd2lsbCB3b3JrIHdpdGggYW55IE9BdXRoIDIuMCBwcm92aWRlciB0aGF0IGNvbmZvcm1zIHRvIHRoZSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvbiBGcmFtZXdvcmsuIE91dC1vZi10aGUtYm94LCB3ZSBwcm92aWRlIGEgYEdlbmVyaWNQcm92aWRlcmAgY2xhc3MgdG8gY29ubmVjdCB0byBhbnkgc2VydmljZSBwcm92aWRlciB0aGF0IHVzZXMgW0JlYXJlciB0b2tlbnNdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NTApLiBTZWUgb3VyIFtiYXNpYyB1c2FnZSBndWlkZV0oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vdXNhZ2UvKSBmb3IgZXhhbXBsZXMgdXNpbmcgYEdlbmVyaWNQcm92aWRlcmAuCgpNYW55IHNlcnZpY2UgcHJvdmlkZXJzIHByb3ZpZGUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IGFib3ZlIGFuZCBiZXlvbmQgdGhlIE9BdXRoIDIuMCBzcGVjaWZpY2F0aW9uLiBGb3IgdGhpcyByZWFzb24sIHlvdSBtYXkgZXh0ZW5kIGFuZCB3cmFwIHRoaXMgbGlicmFyeSB0byBzdXBwb3J0IGFkZGl0aW9uYWwgYmVoYXZpb3IuIFRoZXJlIGFyZSBhbHJlYWR5IG1hbnkgW29mZmljaWFsXShodHRwczovL29hdXRoMi1jbGllbnQudGhlcGhwbGVhZ3VlLmNvbS9wcm92aWRlcnMvbGVhZ3VlLykgYW5kIFt0aGlyZC1wYXJ0eV0oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vcHJvdmlkZXJzL3RoaXJkcGFydHkvKSBwcm92aWRlciBjbGllbnRzIGF2YWlsYWJsZSAoZS5nLiwgRmFjZWJvb2ssIEdpdEh1YiwgR29vZ2xlLCBJbnN0YWdyYW0sIExpbmtlZEluLCBldGMuKS4gSWYgeW91ciBwcm92aWRlciBpc24ndCBpbiB0aGUgbGlzdCwgZmVlbCBmcmVlIHRvIGFkZCBpdC4KClRoaXMgcGFja2FnZSBpcyBjb21wbGlhbnQgd2l0aCBbUFNSLTFdW10sIFtQU1ItMl1bXSwgW1BTUi00XVtdLCBhbmQgW1BTUi03XVtdLiBJZiB5b3Ugbm90aWNlIGNvbXBsaWFuY2Ugb3ZlcnNpZ2h0cywgcGxlYXNlIHNlbmQgYSBwYXRjaCB2aWEgcHVsbCByZXF1ZXN0LiBJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgdG8gdGhpcyBsaWJyYXJ5LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgb3VyIFtjb250cmlidXRpbmcgZ3VpZGVsaW5lc10oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkuCgojIyBSZXF1aXJlbWVudHMKCldlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBvZiBQSFA6CgoqIFBIUCA4LjUKKiBQSFAgOC40CiogUEhQIDguMwoqIFBIUCA4LjIKKiBQSFAgOC4xCiogUEhQIDguMAoqIFBIUCA3LjQKKiBQSFAgNy4zCiogUEhQIDcuMgoqIFBIUCA3LjEKCiMjIFByb3ZpZGVyIENsaWVudHMKCldlIHByb3ZpZGUgYSBsaXN0IG9mIFtvZmZpY2lhbCBQSFAgTGVhZ3VlIHByb3ZpZGVyIGNsaWVudHNdKGh0dHBzOi8vb2F1dGgyLWNsaWVudC50aGVwaHBsZWFndWUuY29tL3Byb3ZpZGVycy9sZWFndWUvKSwgYXMgd2VsbCBhcyBbdGhpcmQtcGFydHkgcHJvdmlkZXIgY2xpZW50c10oaHR0cHM6Ly9vYXV0aDItY2xpZW50LnRoZXBocGxlYWd1ZS5jb20vcHJvdmlkZXJzL3RoaXJkcGFydHkvKS4KClRvIGJ1aWxkIHlvdXIgb3duIHByb3ZpZGVyIGNsaWVudCwgcGxlYXNlIHJlZmVyIHRvICJbSW1wbGVtZW50aW5nIGEgUHJvdmlkZXIgQ2xpZW50XShodHRwczovL29hdXRoMi1jbGllbnQudGhlcGhwbGVhZ3VlLmNvbS9wcm92aWRlcnMvaW1wbGVtZW50aW5nLykuIgoKIyMgVXNhZ2UKCkZvciB1c2FnZSBhbmQgY29kZSBleGFtcGxlcywgY2hlY2sgb3V0IG91ciBbYmFzaWMgdXNhZ2UgZ3VpZGVdKGh0dHBzOi8vb2F1dGgyLWNsaWVudC50aGVwaHBsZWFndWUuY29tL3VzYWdlLykuCgojIyBDb250cmlidXRpbmcKClBsZWFzZSBzZWUgW291ciBjb250cmlidXRpbmcgZ3VpZGVsaW5lc10oaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50L2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkgZm9yIGRldGFpbHMuCgojIyBMaWNlbnNlCgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkuIFBsZWFzZSBzZWUgW0xJQ0VOU0VdKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvb2F1dGgyLWNsaWVudC9ibG9iL21hc3Rlci9MSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgpbUFNSLTFdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0xLWJhc2ljLWNvZGluZy1zdGFuZGFyZC5tZApbUFNSLTJdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0yLWNvZGluZy1zdHlsZS1ndWlkZS5tZApbUFNSLTRdOiBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi00LWF1dG9sb2FkZXIubWQKW1BTUi03XTogaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItNy1odHRwLW1lc3NhZ2UubWQK]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/AbstractGrant.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sXFJlcXVpcmVkUGFyYW1ldGVyVHJhaXQ7CgovKioKICogUmVwcmVzZW50cyBhIHR5cGUgb2YgYXV0aG9yaXphdGlvbiBncmFudC4KICoKICogQW4gYXV0aG9yaXphdGlvbiBncmFudCBpcyBhIGNyZWRlbnRpYWwgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZQogKiBvd25lcidzIGF1dGhvcml6YXRpb24gKHRvIGFjY2VzcyBpdHMgcHJvdGVjdGVkIHJlc291cmNlcykgdXNlZCBieSB0aGUKICogY2xpZW50IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uICBPQXV0aCAyLjAgZGVmaW5lcyBmb3VyCiAqIGdyYW50IHR5cGVzIC0tIGF1dGhvcml6YXRpb24gY29kZSwgaW1wbGljaXQsIHJlc291cmNlIG93bmVyIHBhc3N3b3JkCiAqIGNyZWRlbnRpYWxzLCBhbmQgY2xpZW50IGNyZWRlbnRpYWxzIC0tIGFzIHdlbGwgYXMgYW4gZXh0ZW5zaWJpbGl0eQogKiBtZWNoYW5pc20gZm9yIGRlZmluaW5nIGFkZGl0aW9uYWwgdHlwZXMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0xLjMgQXV0aG9yaXphdGlvbiBHcmFudCAoUkZDIDY3NDksIMKnMS4zKQogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RHcmFudAp7CiAgICB1c2UgUmVxdWlyZWRQYXJhbWV0ZXJUcmFpdDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBncmFudCwgZWcuICdncmFudF9uYW1lJywgd2hpY2ggaXMgdXNlZCBhcyB0aGUKICAgICAqIGdyYW50IHR5cGUgd2hlbiBlbmNvZGluZyBVUkwgcXVlcnkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlcXVpcmVkIHJlcXVlc3QgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZXF1aXJlZFJlcXVlc3RQYXJhbWV0ZXJzKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoaXMgZ3JhbnQncyBuYW1lIGFzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoaXMgYWxsb3dzIGZvcgogICAgICogc3RyaW5nIGludGVycG9sYXRpb24gd2hlbiBidWlsZGluZyBVUkwgcXVlcnkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXROYW1lKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlcyBhbiBhY2Nlc3MgdG9rZW4gcmVxdWVzdCdzIHBhcmFtZXRlcnMgYnkgY2hlY2tpbmcgdGhhdCBhbGwKICAgICAqIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlbiBtZXJnaW5nIHdpdGggYW55IGdpdmVuIGRlZmF1bHRzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJGRlZmF1bHRzCiAgICAgKiBAcGFyYW0gIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlUmVxdWVzdFBhcmFtZXRlcnMoYXJyYXkgJGRlZmF1bHRzLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkZGVmYXVsdHNbJ2dyYW50X3R5cGUnXSA9ICR0aGlzLT5nZXROYW1lKCk7CgogICAgICAgICRyZXF1aXJlZCA9ICR0aGlzLT5nZXRSZXF1aXJlZFJlcXVlc3RQYXJhbWV0ZXJzKCk7CiAgICAgICAgJHByb3ZpZGVkID0gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkb3B0aW9ucyk7CgogICAgICAgICR0aGlzLT5jaGVja1JlcXVpcmVkUGFyYW1ldGVycygkcmVxdWlyZWQsICRwcm92aWRlZCk7CgogICAgICAgIHJldHVybiAkcHJvdmlkZWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGFuIGF1dGhvcml6YXRpb24gY29kZSBncmFudC4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OSNzZWN0aW9uLTEuMy4xIEF1dGhvcml6YXRpb24gQ29kZSAoUkZDIDY3NDksIMKnMS4zLjEpCiAqLwpjbGFzcyBBdXRob3JpemF0aW9uQ29kZSBleHRlbmRzIEFic3RyYWN0R3JhbnQKewogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdhdXRob3JpemF0aW9uX2NvZGUnOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFJlcXVpcmVkUmVxdWVzdFBhcmFtZXRlcnMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdjb2RlJywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/ClientCredentials.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS4zLjQgQ2xpZW50IENyZWRlbnRpYWxzIChSRkMgNjc0OSwgwqcxLjMuNCkKICovCmNsYXNzIENsaWVudENyZWRlbnRpYWxzIGV4dGVuZHMgQWJzdHJhY3RHcmFudAp7CiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJ2NsaWVudF9jcmVkZW50aWFscyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudFxFeGNlcHRpb247Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgdGhlIGdyYW50IGRvZXMgbm90IGV4dGVuZCBmcm9tIEFic3RyYWN0R3JhbnQuCiAqCiAqIEBzZWUgTGVhZ3VlXE9BdXRoMlxDbGllbnRcR3JhbnRcQWJzdHJhY3RHcmFudAogKi8KY2xhc3MgSW52YWxpZEdyYW50RXhjZXB0aW9uIGV4dGVuZHMgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/GrantFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudFxFeGNlcHRpb25cSW52YWxpZEdyYW50RXhjZXB0aW9uOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBmYWN0b3J5IHVzZWQgd2hlbiByZXRyaWV2aW5nIGFuIGF1dGhvcml6YXRpb24gZ3JhbnQgdHlwZS4KICovCmNsYXNzIEdyYW50RmFjdG9yeQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZWdpc3RyeSA9IFtdOwoKICAgIC8qKgogICAgICogRGVmaW5lcyBhIGdyYW50IHNpbmdsZXRvbiBpbiB0aGUgcmVnaXN0cnkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudCAkZ3JhbnQKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0R3JhbnQoJG5hbWUsIEFic3RyYWN0R3JhbnQgJGdyYW50KQogICAgewogICAgICAgICR0aGlzLT5yZWdpc3RyeVskbmFtZV0gPSAkZ3JhbnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncmFudCBzaW5nbGV0b24gYnkgbmFtZS4KICAgICAqCiAgICAgKiBJZiB0aGUgZ3JhbnQgaGFzIG5vdCBiZSByZWdpc3RlcmVkLCBhIGRlZmF1bHQgZ3JhbnQgd2lsbCBiZSBsb2FkZWQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gQWJzdHJhY3RHcmFudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JhbnQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5yZWdpc3RyeVskbmFtZV0pKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWdpc3RlckRlZmF1bHRHcmFudCgkbmFtZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5WyRuYW1lXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIGRlZmF1bHQgZ3JhbnQgc2luZ2xldG9uIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0R3JhbnQoJG5hbWUpCiAgICB7CiAgICAgICAgLy8gUGFzY2FsQ2FzZSB0aGUgZ3JhbnQuIEUuZzogJ2F1dGhvcml6YXRpb25fY29kZScgYmVjb21lcyAnQXV0aG9yaXphdGlvbkNvZGUnCiAgICAgICAgJGNsYXNzID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgdWN3b3JkcyhzdHJfcmVwbGFjZShbJy0nLCAnXyddLCAnICcsICRuYW1lKSkpOwogICAgICAgICRjbGFzcyA9ICdMZWFndWVcXE9BdXRoMlxcQ2xpZW50XFxHcmFudFxcJyAuICRjbGFzczsKCiAgICAgICAgJHRoaXMtPmNoZWNrR3JhbnQoJGNsYXNzKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXRHcmFudCgkbmFtZSwgbmV3ICRjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIGEgdmFyaWFibGUgaXMgYSB2YWxpZCBncmFudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICRjbGFzcwogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0dyYW50KCRjbGFzcykKICAgIHsKICAgICAgICByZXR1cm4gaXNfc3ViY2xhc3Nfb2YoJGNsYXNzLCBBYnN0cmFjdEdyYW50OjpjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYSB2YXJpYWJsZSBpcyBhIHZhbGlkIGdyYW50LgogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEdyYW50RXhjZXB0aW9uCiAgICAgKiBAcGFyYW0gIG1peGVkICRjbGFzcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja0dyYW50KCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5pc0dyYW50KCRjbGFzcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRHcmFudEV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ0dyYW50ICIlcyIgbXVzdCBleHRlbmQgQWJzdHJhY3RHcmFudCcsCiAgICAgICAgICAgICAgICBpc19vYmplY3QoJGNsYXNzKSA/IGdldF9jbGFzcygkY2xhc3MpIDogJGNsYXNzCiAgICAgICAgICAgICkpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/Password.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgcmVzb3VyY2Ugb3duZXIgcGFzc3dvcmQgY3JlZGVudGlhbHMgZ3JhbnQuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0xLjMuMyBSZXNvdXJjZSBPd25lciBQYXNzd29yZCBDcmVkZW50aWFscyAoUkZDIDY3NDksIMKnMS4zLjMpCiAqLwpjbGFzcyBQYXNzd29yZCBleHRlbmRzIEFic3RyYWN0R3JhbnQKewogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdwYXNzd29yZCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3VzZXJuYW1lJywKICAgICAgICAgICAgJ3Bhc3N3b3JkJywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Grant/RefreshToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxHcmFudDsKCi8qKgogKiBSZXByZXNlbnRzIGEgcmVmcmVzaCB0b2tlbiBncmFudC4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OSNzZWN0aW9uLTYgUmVmcmVzaGluZyBhbiBBY2Nlc3MgVG9rZW4gKFJGQyA2NzQ5LCDCpzYpCiAqLwpjbGFzcyBSZWZyZXNoVG9rZW4gZXh0ZW5kcyBBYnN0cmFjdEdyYW50CnsKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAncmVmcmVzaF90b2tlbic7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRSZXF1ZXN0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3JlZnJlc2hfdG9rZW4nLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQWRkIGh0dHAgYmFzaWMgYXV0aCBpbnRvIGFjY2VzcyB0b2tlbiByZXF1ZXN0IG9wdGlvbnMKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0yLjMuMQogKi8KY2xhc3MgSHR0cEJhc2ljQXV0aE9wdGlvblByb3ZpZGVyIGV4dGVuZHMgUG9zdEF1dGhPcHRpb25Qcm92aWRlcgp7CiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHBhcmFtc1snY2xpZW50X2lkJ10pIHx8IGVtcHR5KCRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignY2xpZW50SWQgYW5kIGNsaWVudFNlY3JldCBhcmUgcmVxdWlyZWQgZm9yIGh0dHAgYmFzaWMgYXV0aCcpOwogICAgICAgIH0KCiAgICAgICAgJGVuY29kZWRDcmVkZW50aWFscyA9IGJhc2U2NF9lbmNvZGUoc3ByaW50ZignJXM6JXMnLCAkcGFyYW1zWydjbGllbnRfaWQnXSwgJHBhcmFtc1snY2xpZW50X3NlY3JldCddKSk7CiAgICAgICAgdW5zZXQoJHBhcmFtc1snY2xpZW50X2lkJ10sICRwYXJhbXNbJ2NsaWVudF9zZWNyZXQnXSk7CgogICAgICAgICRvcHRpb25zID0gcGFyZW50OjpnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgJHBhcmFtcyk7CiAgICAgICAgJG9wdGlvbnNbJ2hlYWRlcnMnXVsnQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgLiAkZW5jb2RlZENyZWRlbnRpYWxzOwoKICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCi8qKgogKiBJbnRlcmZhY2UgZm9yIGFjY2VzcyB0b2tlbiBvcHRpb25zIHByb3ZpZGVyCiAqLwppbnRlcmZhY2UgT3B0aW9uUHJvdmlkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBCdWlsZHMgcmVxdWVzdCBvcHRpb25zIHVzZWQgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHBhcmFtICBhcnJheSAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcyk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxPcHRpb25Qcm92aWRlcjsKCnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxBYnN0cmFjdFByb3ZpZGVyOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxRdWVyeUJ1aWxkZXJUcmFpdDsKCi8qKgogKiBQcm92aWRlIG9wdGlvbnMgZm9yIGFjY2VzcyB0b2tlbgogKi8KY2xhc3MgUG9zdEF1dGhPcHRpb25Qcm92aWRlciBpbXBsZW1lbnRzIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHVzZSBRdWVyeUJ1aWxkZXJUcmFpdDsKCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk9wdGlvbnMoJG1ldGhvZCwgYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICAkb3B0aW9ucyA9IFsnaGVhZGVycycgPT4gWydjb250ZW50LXR5cGUnID0+ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXV07CgogICAgICAgIGlmICgkbWV0aG9kID09PSBBYnN0cmFjdFByb3ZpZGVyOjpNRVRIT0RfUE9TVCkgewogICAgICAgICAgICAkb3B0aW9uc1snYm9keSddID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuQm9keSgkcGFyYW1zKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlcXVlc3QgYm9keSBmb3IgcmVxdWVzdGluZyBhbiBhY2Nlc3MgdG9rZW4uCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5Cb2R5KGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZFF1ZXJ5U3RyaW5nKCRwYXJhbXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/AbstractProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCnVzZSBHdXp6bGVIdHRwXENsaWVudCBhcyBIdHRwQ2xpZW50Owp1c2UgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2UgYXMgSHR0cENsaWVudEludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cR3V6emxlRXhjZXB0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcR3JhbnRcQWJzdHJhY3RHcmFudDsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XEdyYW50XEdyYW50RmFjdG9yeTsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XE9wdGlvblByb3ZpZGVyXE9wdGlvblByb3ZpZGVySW50ZXJmYWNlOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcT3B0aW9uUHJvdmlkZXJcUG9zdEF1dGhPcHRpb25Qcm92aWRlcjsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFByb3ZpZGVyXEV4Y2VwdGlvblxJZGVudGl0eVByb3ZpZGVyRXhjZXB0aW9uOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9rZW5cQWNjZXNzVG9rZW47CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlblxBY2Nlc3NUb2tlbkludGVyZmFjZTsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRvb2xcQXJyYXlBY2Nlc3NvclRyYWl0Owp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxHdWFyZGVkUHJvcGVydHlUcmFpdDsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRvb2xcUXVlcnlCdWlsZGVyVHJhaXQ7CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sXFJlcXVlc3RGYWN0b3J5Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbjsKCi8qKgogKiBSZXByZXNlbnRzIGEgc2VydmljZSBwcm92aWRlciAoYXV0aG9yaXphdGlvbiBzZXJ2ZXIpLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS4xIFJvbGVzIChSRkMgNjc0OSwgwqcxLjEpCiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFByb3ZpZGVyCnsKICAgIHVzZSBBcnJheUFjY2Vzc29yVHJhaXQ7CiAgICB1c2UgR3VhcmRlZFByb3BlcnR5VHJhaXQ7CiAgICB1c2UgUXVlcnlCdWlsZGVyVHJhaXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsIEtleSB1c2VkIGluIGEgdG9rZW4gcmVzcG9uc2UgdG8gaWRlbnRpZnkgdGhlIHJlc291cmNlIG93bmVyLgogICAgICovCiAgICBjb25zdCBBQ0NFU1NfVE9LRU5fUkVTT1VSQ0VfT1dORVJfSUQgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgSFRUUCBtZXRob2QgdXNlZCB0byBmZXRjaCBhY2Nlc3MgdG9rZW5zLgogICAgICovCiAgICBjb25zdCBNRVRIT0RfR0VUID0gJ0dFVCc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBIVFRQIG1ldGhvZCB1c2VkIHRvIGZldGNoIGFjY2VzcyB0b2tlbnMuCiAgICAgKi8KICAgIGNvbnN0IE1FVEhPRF9QT1NUID0gJ1BPU1QnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgUEtDRSBtZXRob2QgdXNlZCB0byBmZXRjaCBhdXRob3JpemF0aW9uIHRva2VuLgogICAgICogVGhlIFBLQ0UgY29kZSBjaGFsbGVuZ2Ugd2lsbCBiZSBoYXNoZWQgd2l0aCBzaGEyNTYgKHJlY29tbWVuZGVkKS4KICAgICAqLwogICAgY29uc3QgUEtDRV9NRVRIT0RfUzI1NiA9ICdTMjU2JzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nIFBLQ0UgbWV0aG9kIHVzZWQgdG8gZmV0Y2ggYXV0aG9yaXphdGlvbiB0b2tlbi4KICAgICAqIFRoZSBQS0NFIGNvZGUgY2hhbGxlbmdlIHdpbGwgYmUgc2VudCBhcyBwbGFpbiB0ZXh0LCB0aGlzIGlzIE5PVCByZWNvbW1lbmRlZC4KICAgICAqIE9ubHkgdXNlIGBwbGFpbmAgaWYgbm8gb3RoZXIgb3B0aW9uIGlzIHBvc3NpYmxlLgogICAgICovCiAgICBjb25zdCBQS0NFX01FVEhPRF9QTEFJTiA9ICdwbGFpbic7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGNsaWVudElkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjbGllbnRTZWNyZXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZGlyZWN0VXJpOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRzdGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkICRwa2NlQ29kZSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIEdyYW50RmFjdG9yeQogICAgICovCiAgICBwcm90ZWN0ZWQgJGdyYW50RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEZhY3RvcnkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgSHR0cENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGh0dHBDbGllbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByb3RlY3RlZCAkb3B0aW9uUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIE9BdXRoIDIuMCBzZXJ2aWNlIHByb3ZpZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHRvIHNldCBvbiB0aGlzIHByb3ZpZGVyLgogICAgICogICAgIE9wdGlvbnMgaW5jbHVkZSBgY2xpZW50SWRgLCBgY2xpZW50U2VjcmV0YCwgYHJlZGlyZWN0VXJpYCwgYW5kIGBzdGF0ZWAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIG9wdGlvbnMsIGFzIG5lZWRlZC4KICAgICAqIEBwYXJhbSBhcnJheSAkY29sbGFib3JhdG9ycyBBbiBhcnJheSBvZiBjb2xsYWJvcmF0b3JzIHRoYXQgbWF5IGJlIHVzZWQgdG8KICAgICAqICAgICBvdmVycmlkZSB0aGlzIHByb3ZpZGVyJ3MgZGVmYXVsdCBiZWhhdmlvci4gQ29sbGFib3JhdG9ycyBpbmNsdWRlCiAgICAgKiAgICAgYGdyYW50RmFjdG9yeWAsIGByZXF1ZXN0RmFjdG9yeWAsIGFuZCBgaHR0cENsaWVudGAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIGNvbGxhYm9yYXRvcnMsIGFzIG5lZWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRvcHRpb25zID0gW10sIGFycmF5ICRjb2xsYWJvcmF0b3JzID0gW10pCiAgICB7CiAgICAgICAgLy8gV2UnbGwgbGV0IHRoZSBHdWFyZGVkUHJvcGVydHlUcmFpdCBoYW5kbGUgbWFzcyBhc3NpZ25tZW50IG9mIGluY29taW5nCiAgICAgICAgLy8gb3B0aW9ucywgc2tpcHBpbmcgYW55IGJsYWNrbGlzdGVkIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJvdmlkZXIKICAgICAgICAkdGhpcy0+ZmlsbFByb3BlcnRpZXMoJG9wdGlvbnMpOwoKICAgICAgICBpZiAoZW1wdHkoJGNvbGxhYm9yYXRvcnNbJ2dyYW50RmFjdG9yeSddKSkgewogICAgICAgICAgICAkY29sbGFib3JhdG9yc1snZ3JhbnRGYWN0b3J5J10gPSBuZXcgR3JhbnRGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zZXRHcmFudEZhY3RvcnkoJGNvbGxhYm9yYXRvcnNbJ2dyYW50RmFjdG9yeSddKTsKCiAgICAgICAgaWYgKGVtcHR5KCRjb2xsYWJvcmF0b3JzWydyZXF1ZXN0RmFjdG9yeSddKSkgewogICAgICAgICAgICAkY29sbGFib3JhdG9yc1sncmVxdWVzdEZhY3RvcnknXSA9IG5ldyBSZXF1ZXN0RmFjdG9yeSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0UmVxdWVzdEZhY3RvcnkoJGNvbGxhYm9yYXRvcnNbJ3JlcXVlc3RGYWN0b3J5J10pOwoKICAgICAgICBpZiAoZW1wdHkoJGNvbGxhYm9yYXRvcnNbJ2h0dHBDbGllbnQnXSkpIHsKICAgICAgICAgICAgJGNsaWVudF9vcHRpb25zID0gJHRoaXMtPmdldEFsbG93ZWRDbGllbnRPcHRpb25zKCRvcHRpb25zKTsKCiAgICAgICAgICAgICRjb2xsYWJvcmF0b3JzWydodHRwQ2xpZW50J10gPSBuZXcgSHR0cENsaWVudCgKICAgICAgICAgICAgICAgIGFycmF5X2ludGVyc2VjdF9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoJGNsaWVudF9vcHRpb25zKSkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNldEh0dHBDbGllbnQoJGNvbGxhYm9yYXRvcnNbJ2h0dHBDbGllbnQnXSk7CgogICAgICAgIGlmIChlbXB0eSgkY29sbGFib3JhdG9yc1snb3B0aW9uUHJvdmlkZXInXSkpIHsKICAgICAgICAgICAgJGNvbGxhYm9yYXRvcnNbJ29wdGlvblByb3ZpZGVyJ10gPSBuZXcgUG9zdEF1dGhPcHRpb25Qcm92aWRlcigpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0T3B0aW9uUHJvdmlkZXIoJGNvbGxhYm9yYXRvcnNbJ29wdGlvblByb3ZpZGVyJ10pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgSHR0cENsaWVudAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHRvIHNldCBvbiB0aGlzIHByb3ZpZGVyLgogICAgICogICAgIE9wdGlvbnMgaW5jbHVkZSBgY2xpZW50SWRgLCBgY2xpZW50U2VjcmV0YCwgYHJlZGlyZWN0VXJpYCwgYW5kIGBzdGF0ZWAuCiAgICAgKiAgICAgSW5kaXZpZHVhbCBwcm92aWRlcnMgbWF5IGludHJvZHVjZSBtb3JlIG9wdGlvbnMsIGFzIG5lZWRlZC4KICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgSHR0cENsaWVudCBjb25zdHJ1Y3RvcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dlZENsaWVudE9wdGlvbnMoYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJGNsaWVudF9vcHRpb25zID0gWyd0aW1lb3V0JywgJ3Byb3h5J107CgogICAgICAgIC8vIE9ubHkgYWxsb3cgdHVybmluZyBvZmYgc3NsIHZlcmlmaWNhdGlvbiBpZiBpdCdzIGZvciBhIHByb3h5CiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1sncHJveHknXSkpIHsKICAgICAgICAgICAgJGNsaWVudF9vcHRpb25zW10gPSAndmVyaWZ5JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xpZW50X29wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBncmFudCBmYWN0b3J5IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgR3JhbnRGYWN0b3J5ICRmYWN0b3J5CiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEdyYW50RmFjdG9yeShHcmFudEZhY3RvcnkgJGZhY3RvcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPmdyYW50RmFjdG9yeSA9ICRmYWN0b3J5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdyYW50IGZhY3RvcnkgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHJldHVybiBHcmFudEZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdyYW50RmFjdG9yeSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ncmFudEZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSByZXF1ZXN0IGZhY3RvcnkgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0RmFjdG9yeSAkZmFjdG9yeQogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1ZXN0RmFjdG9yeShSZXF1ZXN0RmFjdG9yeSAkZmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdEZhY3RvcnkgPSAkZmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBmYWN0b3J5IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3RGYWN0b3J5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3RGYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgSFRUUCBjbGllbnQgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBIdHRwQ2xpZW50SW50ZXJmYWNlICRjbGllbnQKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cENsaWVudChIdHRwQ2xpZW50SW50ZXJmYWNlICRjbGllbnQpCiAgICB7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkY2xpZW50OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBIVFRQIGNsaWVudCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEh0dHBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEh0dHBDbGllbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aHR0cENsaWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wdGlvbiBwcm92aWRlciBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIE9wdGlvblByb3ZpZGVySW50ZXJmYWNlICRwcm92aWRlcgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb25Qcm92aWRlcihPcHRpb25Qcm92aWRlckludGVyZmFjZSAkcHJvdmlkZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wdGlvblByb3ZpZGVyID0gJHByb3ZpZGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBvcHRpb24gcHJvdmlkZXIgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHJldHVybiBPcHRpb25Qcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uUHJvdmlkZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uUHJvdmlkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdGF0ZSBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogVGhpcyBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIHJlZGlyZWN0IGhhbmRsZXIgZHVyaW5nIGF1dGhvcml6YXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgcGtjZUNvZGUgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgUEtDRSB0aGlzIHNob3VsZCBiZSBzZXQgYmVmb3JlIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBrY2VDb2RlCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFBrY2VDb2RlKCRwa2NlQ29kZSkKICAgIHsKICAgICAgICAkdGhpcy0+cGtjZUNvZGUgPSAkcGtjZUNvZGU7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGtjZUNvZGUgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFRoaXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSByZWRpcmVjdCBoYW5kbGVyIGR1cmluZyBhdXRob3JpemF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBrY2VDb2RlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBrY2VDb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIGF1dGhvcml6aW5nIGEgY2xpZW50LgogICAgICoKICAgICAqIEVnLiBodHRwczovL29hdXRoLnNlcnZpY2UuY29tL2F1dGhvcml6ZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQXV0aG9yaXphdGlvblVybCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEVnLiBodHRwczovL29hdXRoLnNlcnZpY2UuY29tL3Rva2VuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQWNjZXNzVG9rZW5VcmwoYXJyYXkgJHBhcmFtcyk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBVUkwgZm9yIHJlcXVlc3RpbmcgdGhlIHJlc291cmNlIG93bmVyJ3MgZGV0YWlscy4KICAgICAqCiAgICAgKiBAcGFyYW0gQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lckRldGFpbHNVcmwoQWNjZXNzVG9rZW4gJHRva2VuKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgcmFuZG9tIHN0cmluZyB0byB1c2UgYXMgdGhlIHN0YXRlIHBhcmFtZXRlciBpbiBhbgogICAgICogYXV0aG9yaXphdGlvbiBmbG93LgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICRsZW5ndGggTGVuZ3RoIG9mIHRoZSByYW5kb20gc3RyaW5nIHRvIGJlIGdlbmVyYXRlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSYW5kb21TdGF0ZSgkbGVuZ3RoID0gMzIpCiAgICB7CiAgICAgICAgLy8gQ29udmVydGluZyBieXRlcyB0byBoZXggd2lsbCBhbHdheXMgZG91YmxlIGxlbmd0aC4gSGVuY2UsIHdlIGNhbiByZWR1Y2UKICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGJ5dGVzIGJ5IGhhbGYgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBsZW5ndGguCiAgICAgICAgcmV0dXJuIGJpbjJoZXgocmFuZG9tX2J5dGVzKCRsZW5ndGggLyAyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbmV3IHJhbmRvbSBzdHJpbmcgdG8gdXNlIGFzIFBLQ0UgY29kZV92ZXJpZmllciBhbmQKICAgICAqIGhhc2hlZCBhcyBjb2RlX2NoYWxsZW5nZSBwYXJhbWV0ZXJzIGluIGFuIGF1dGhvcml6YXRpb24gZmxvdy4KICAgICAqIE11c3QgYmUgYmV0d2VlbiA0MyBhbmQgMTI4IGNoYXJhY3RlcnMgbG9uZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAkbGVuZ3RoIExlbmd0aCBvZiB0aGUgcmFuZG9tIHN0cmluZyB0byBiZSBnZW5lcmF0ZWQuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmFuZG9tUGtjZUNvZGUoJGxlbmd0aCA9IDY0KQogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoCiAgICAgICAgICAgIHN0cnRyKAogICAgICAgICAgICAgICAgYmFzZTY0X2VuY29kZShyYW5kb21fYnl0ZXMoJGxlbmd0aCkpLAogICAgICAgICAgICAgICAgJysvJywKICAgICAgICAgICAgICAgICctXycKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgJGxlbmd0aAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNjb3BlcyB1c2VkIGJ5IHRoaXMgcHJvdmlkZXIuCiAgICAgKgogICAgICogVGhpcyBzaG91bGQgb25seSBiZSB0aGUgc2NvcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJlcXVlc3QgdGhlIGRldGFpbHMKICAgICAqIG9mIHRoZSByZXNvdXJjZSBvd25lciwgcmF0aGVyIHRoYW4gYWxsIHRoZSBhdmFpbGFibGUgc2NvcGVzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRTY29wZXMoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNlcGFyYXRlIHNjb3BlcyB3aGVuIGJ1aWxkaW5nCiAgICAgKiB0aGUgVVJMIGZvciByZXF1ZXN0aW5nIGFuIGFjY2VzcyB0b2tlbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBTY29wZSBzZXBhcmF0b3IsIGRlZmF1bHRzIHRvICcsJwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2NvcGVTZXBhcmF0b3IoKQogICAgewogICAgICAgIHJldHVybiAnLCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRQa2NlTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYXV0aG9yaXphdGlvbiBwYXJhbWV0ZXJzIGJhc2VkIG9uIHByb3ZpZGVkIG9wdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICogQHJldHVybiBhcnJheSBBdXRob3JpemF0aW9uIHBhcmFtZXRlcnMKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uUGFyYW1ldGVycyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ3N0YXRlJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzdGF0ZSddID0gJHRoaXMtPmdldFJhbmRvbVN0YXRlKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzY29wZSddID0gJHRoaXMtPmdldERlZmF1bHRTY29wZXMoKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zICs9IFsKICAgICAgICAgICAgJ3Jlc3BvbnNlX3R5cGUnICAgPT4gJ2NvZGUnLAogICAgICAgICAgICAnYXBwcm92YWxfcHJvbXB0JyA9PiAnYXV0bycKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNfYXJyYXkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRzZXBhcmF0b3IgPSAkdGhpcy0+Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ3Njb3BlJ10gPSBpbXBsb2RlKCRzZXBhcmF0b3IsICRvcHRpb25zWydzY29wZSddKTsKICAgICAgICB9CgogICAgICAgIC8vIFN0b3JlIHRoZSBzdGF0ZSBhcyBpdCBtYXkgbmVlZCB0byBiZSBhY2Nlc3NlZCBsYXRlciBvbi4KICAgICAgICAkdGhpcy0+c3RhdGUgPSAkb3B0aW9uc1snc3RhdGUnXTsKCiAgICAgICAgJHBrY2VNZXRob2QgPSAkdGhpcy0+Z2V0UGtjZU1ldGhvZCgpOwogICAgICAgIGlmICghZW1wdHkoJHBrY2VNZXRob2QpKSB7CiAgICAgICAgICAgICR0aGlzLT5wa2NlQ29kZSA9ICR0aGlzLT5nZXRSYW5kb21Qa2NlQ29kZSgpOwogICAgICAgICAgICBpZiAoJHBrY2VNZXRob2QgPT09IHN0YXRpYzo6UEtDRV9NRVRIT0RfUzI1NikgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2NvZGVfY2hhbGxlbmdlJ10gPSB0cmltKAogICAgICAgICAgICAgICAgICAgIHN0cnRyKAogICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjRfZW5jb2RlKGhhc2goJ3NoYTI1NicsICR0aGlzLT5wa2NlQ29kZSwgdHJ1ZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAnKy8nLAogICAgICAgICAgICAgICAgICAgICAgICAnLV8nCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAnPScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkcGtjZU1ldGhvZCA9PT0gc3RhdGljOjpQS0NFX01FVEhPRF9QTEFJTikgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2NvZGVfY2hhbGxlbmdlJ10gPSAkdGhpcy0+cGtjZUNvZGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmtub3duIFBLQ0UgbWV0aG9kICInIC4gJHBrY2VNZXRob2QgLiAnIi4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3B0aW9uc1snY29kZV9jaGFsbGVuZ2VfbWV0aG9kJ10gPSAkcGtjZU1ldGhvZDsKICAgICAgICB9CgogICAgICAgIC8vIEJ1c2luZXNzIGNvZGUgbGF5ZXIgbWlnaHQgc2V0IGEgZGlmZmVyZW50IHJlZGlyZWN0X3VyaSBwYXJhbWV0ZXIKICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIGxlYXZlIGl0IGFzLWlzCiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncmVkaXJlY3RfdXJpJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydyZWRpcmVjdF91cmknXSA9ICR0aGlzLT5yZWRpcmVjdFVyaTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydjbGllbnRfaWQnXSA9ICR0aGlzLT5jbGllbnRJZDsKCiAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSBhdXRob3JpemF0aW9uIFVSTCdzIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICRwYXJhbXMgUXVlcnkgcGFyYW1ldGVycwogICAgICogQHJldHVybiBzdHJpbmcgUXVlcnkgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uUXVlcnkoYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkUXVlcnlTdHJpbmcoJHBhcmFtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBCdWlsZHMgdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gc3RyaW5nIEF1dGhvcml6YXRpb24gVVJMCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXphdGlvblVybChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRiYXNlICAgPSAkdGhpcy0+Z2V0QmFzZUF1dGhvcml6YXRpb25VcmwoKTsKICAgICAgICAkcGFyYW1zID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25QYXJhbWV0ZXJzKCRvcHRpb25zKTsKICAgICAgICAkcXVlcnkgID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25RdWVyeSgkcGFyYW1zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hcHBlbmRRdWVyeSgkYmFzZSwgJHF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZGlyZWN0cyB0aGUgY2xpZW50IGZvciBhdXRob3JpemF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8bnVsbCAkcmVkaXJlY3RIYW5kbGVyCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0aG9yaXplKAogICAgICAgIGFycmF5ICRvcHRpb25zID0gW10sCiAgICAgICAgP2NhbGxhYmxlICRyZWRpcmVjdEhhbmRsZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdXJsID0gJHRoaXMtPmdldEF1dGhvcml6YXRpb25VcmwoJG9wdGlvbnMpOwogICAgICAgIGlmICgkcmVkaXJlY3RIYW5kbGVyKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVkaXJlY3RIYW5kbGVyKCR1cmwsICR0aGlzKTsKICAgICAgICB9CgogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkdXJsKTsKICAgICAgICBleGl0OwogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGVuZHMgYSBxdWVyeSBzdHJpbmcgdG8gYSBVUkwuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJHVybCBUaGUgVVJMIHRvIGFwcGVuZCB0aGUgcXVlcnkgdG8KICAgICAqIEBwYXJhbSAgc3RyaW5nICRxdWVyeSBUaGUgSFRUUCBxdWVyeSBzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXN1bHRpbmcgVVJMCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmRRdWVyeSgkdXJsLCAkcXVlcnkpCiAgICB7CiAgICAgICAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnksICc/JicpOwoKICAgICAgICBpZiAoJHF1ZXJ5KSB7CiAgICAgICAgICAgICRnbHVlID0gc3Ryc3RyKCR1cmwsICc/JykgPT09IGZhbHNlID8gJz8nIDogJyYnOwogICAgICAgICAgICByZXR1cm4gJHVybCAuICRnbHVlIC4gJHF1ZXJ5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtZXRob2QgdG8gdXNlIHdoZW4gcmVxdWVzdGluZyBhbiBhY2Nlc3MgdG9rZW4uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSFRUUCBtZXRob2QKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6TUVUSE9EX1BPU1Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBrZXkgdXNlZCBpbiB0aGUgYWNjZXNzIHRva2VuIHJlc3BvbnNlIHRvIGlkZW50aWZ5IHRoZSByZXNvdXJjZSBvd25lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFJlc291cmNlIG93bmVyIGlkZW50aWZpZXIga2V5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6QUNDRVNTX1RPS0VOX1JFU09VUkNFX09XTkVSX0lEOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSBhY2Nlc3MgdG9rZW4gVVJMJ3MgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgJHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIHN0cmluZyBRdWVyeSBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUXVlcnkoYXJyYXkgJHBhcmFtcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkUXVlcnlTdHJpbmcoJHBhcmFtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhhdCBhIHByb3ZpZGVkIGdyYW50IGlzIHZhbGlkLCBvciBhdHRlbXB0cyB0byBwcm9kdWNlIG9uZSBpZiB0aGUKICAgICAqIHByb3ZpZGVkIGdyYW50IGlzIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudHxzdHJpbmcgJGdyYW50CiAgICAgKiBAcmV0dXJuIEFic3RyYWN0R3JhbnQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZlcmlmeUdyYW50KCRncmFudCkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRncmFudCkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ncmFudEZhY3RvcnktPmdldEdyYW50KCRncmFudCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Z3JhbnRGYWN0b3J5LT5jaGVja0dyYW50KCRncmFudCk7CiAgICAgICAgcmV0dXJuICRncmFudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZ1bGwgVVJMIHRvIHVzZSB3aGVuIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblVybChhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgICR1cmwgPSAkdGhpcy0+Z2V0QmFzZUFjY2Vzc1Rva2VuVXJsKCRwYXJhbXMpOwoKICAgICAgICBpZiAoJHRoaXMtPmdldEFjY2Vzc1Rva2VuTWV0aG9kKCkgPT09IHNlbGY6Ok1FVEhPRF9HRVQpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuUXVlcnkoJHBhcmFtcyk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YXBwZW5kUXVlcnkoJHVybCwgJHF1ZXJ5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByZXBhcmVkIHJlcXVlc3QgZm9yIHJlcXVlc3RpbmcgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIFF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUmVxdWVzdChhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgICRtZXRob2QgID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuTWV0aG9kKCk7CiAgICAgICAgJHVybCAgICAgPSAkdGhpcy0+Z2V0QWNjZXNzVG9rZW5VcmwoJHBhcmFtcyk7CiAgICAgICAgJG9wdGlvbnMgPSAkdGhpcy0+b3B0aW9uUHJvdmlkZXItPmdldEFjY2Vzc1Rva2VuT3B0aW9ucygkdGhpcy0+Z2V0QWNjZXNzVG9rZW5NZXRob2QoKSwgJHBhcmFtcyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UmVxdWVzdCgkbWV0aG9kLCAkdXJsLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXF1ZXN0cyBhbiBhY2Nlc3MgdG9rZW4gdXNpbmcgYSBzcGVjaWZpZWQgZ3JhbnQgYW5kIG9wdGlvbiBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgICAgICAgICAgICAgICAkZ3JhbnQKICAgICAqIEBwYXJhbSAgYXJyYXk8c3RyaW5nLCBtaXhlZD4gJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQWNjZXNzVG9rZW5JbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbigkZ3JhbnQsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgJGdyYW50ID0gJHRoaXMtPnZlcmlmeUdyYW50KCRncmFudCk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2NvcGUnXSkgJiYgaXNfYXJyYXkoJG9wdGlvbnNbJ3Njb3BlJ10pKSB7CiAgICAgICAgICAgICRzZXBhcmF0b3IgPSAkdGhpcy0+Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ3Njb3BlJ10gPSBpbXBsb2RlKCRzZXBhcmF0b3IsICRvcHRpb25zWydzY29wZSddKTsKICAgICAgICB9CgogICAgICAgICRwYXJhbXMgPSBbCiAgICAgICAgICAgICdjbGllbnRfaWQnICAgICA9PiAkdGhpcy0+Y2xpZW50SWQsCiAgICAgICAgICAgICdjbGllbnRfc2VjcmV0JyA9PiAkdGhpcy0+Y2xpZW50U2VjcmV0LAogICAgICAgICAgICAncmVkaXJlY3RfdXJpJyAgPT4gJHRoaXMtPnJlZGlyZWN0VXJpLAogICAgICAgIF07CgogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPnBrY2VDb2RlKSkgewogICAgICAgICAgICAkcGFyYW1zWydjb2RlX3ZlcmlmaWVyJ10gPSAkdGhpcy0+cGtjZUNvZGU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zICAgPSAkZ3JhbnQtPnByZXBhcmVSZXF1ZXN0UGFyYW1ldGVycygkcGFyYW1zLCAkb3B0aW9ucyk7CiAgICAgICAgJHJlcXVlc3QgID0gJHRoaXMtPmdldEFjY2Vzc1Rva2VuUmVxdWVzdCgkcGFyYW1zKTsKICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Z2V0UGFyc2VkUmVzcG9uc2UoJHJlcXVlc3QpOwogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfYXJyYXkoJHJlc3BvbnNlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBdXRob3JpemF0aW9uIFNlcnZlci4gRXhwZWN0ZWQgSlNPTi4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRwcmVwYXJlZCA9ICR0aGlzLT5wcmVwYXJlQWNjZXNzVG9rZW5SZXNwb25zZSgkcmVzcG9uc2UpOwogICAgICAgICR0b2tlbiAgICA9ICR0aGlzLT5jcmVhdGVBY2Nlc3NUb2tlbigkcHJlcGFyZWQsICRncmFudCk7CgogICAgICAgIHJldHVybiAkdG9rZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgUFNSLTcgcmVxdWVzdCBpbnN0YW5jZSB0aGF0IGlzIG5vdCBhdXRoZW50aWNhdGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSAgYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgkbWV0aG9kLCAkdXJsLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkbWV0aG9kLCAkdXJsLCBudWxsLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgUFNSLTcgcmVxdWVzdCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbWV0aG9kCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkdXJsCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuSW50ZXJmYWNlfHN0cmluZ3xudWxsICR0b2tlbgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucyBBbnkgb2YgImhlYWRlcnMiLCAiYm9keSIsIGFuZCAicHJvdG9jb2xWZXJzaW9uIi4KICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRlZFJlcXVlc3QoJG1ldGhvZCwgJHVybCwgJHRva2VuLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkbWV0aG9kLCAkdXJsLCAkdG9rZW4sICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBQU1ItNyByZXF1ZXN0IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW5JbnRlcmZhY2V8c3RyaW5nfG51bGwgJHRva2VuCiAgICAgKiBAcGFyYW0gIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3QoJG1ldGhvZCwgJHVybCwgJHRva2VuLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkZGVmYXVsdHMgPSBbCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiAkdGhpcy0+Z2V0SGVhZGVycygkdG9rZW4pLAogICAgICAgIF07CgogICAgICAgICRvcHRpb25zID0gYXJyYXlfbWVyZ2VfcmVjdXJzaXZlKCRkZWZhdWx0cywgJG9wdGlvbnMpOwogICAgICAgICRmYWN0b3J5ID0gJHRoaXMtPmdldFJlcXVlc3RGYWN0b3J5KCk7CgogICAgICAgIHJldHVybiAkZmFjdG9yeS0+Z2V0UmVxdWVzdFdpdGhPcHRpb25zKCRtZXRob2QsICR1cmwsICRvcHRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgcmVxdWVzdCBpbnN0YW5jZSBhbmQgcmV0dXJucyBhIHJlc3BvbnNlIGluc3RhbmNlLgogICAgICoKICAgICAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIGRvZXMgbm90IGF0dGVtcHQgdG8gY2F0Y2ggZXhjZXB0aW9ucyBjYXVzZWQgYnkgSFRUUAogICAgICogZXJyb3JzISBJdCBpcyByZWNvbW1lbmRlZCB0byB3cmFwIHRoaXMgbWV0aG9kIGluIGEgdHJ5L2NhdGNoIGJsb2NrLgogICAgICoKICAgICAqIEBwYXJhbSAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZQogICAgICogQHRocm93cyBHdXp6bGVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRIdHRwQ2xpZW50KCktPnNlbmQoJHJlcXVlc3QpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgYSByZXF1ZXN0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzcG9uc2UuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKiBAdGhyb3dzIElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkUmVzcG9uc2UoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+Z2V0UmVzcG9uc2UoJHJlcXVlc3QpOwogICAgICAgIH0gY2F0Y2ggKEJhZFJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICRlLT5nZXRSZXNwb25zZSgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZCA9ICR0aGlzLT5wYXJzZVJlc3BvbnNlKCRyZXNwb25zZSk7CgogICAgICAgICR0aGlzLT5jaGVja1Jlc3BvbnNlKCRyZXNwb25zZSwgJHBhcnNlZCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkOwogICAgfQoKICAgIC8qKgogICAgICogQXR0ZW1wdHMgdG8gcGFyc2UgYSBKU09OIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRjb250ZW50IEpTT04gY29udGVudCBmcm9tIHJlc3BvbnNlIGJvZHkKICAgICAqIEByZXR1cm4gYXJyYXkgUGFyc2VkIEpTT04gZGF0YQogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gaWYgdGhlIGNvbnRlbnQgY291bGQgbm90IGJlIHBhcnNlZAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyc2VKc29uKCRjb250ZW50KQogICAgewogICAgICAgICRjb250ZW50ID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIHRydWUpOwoKICAgICAgICBpZiAoanNvbl9sYXN0X2Vycm9yKCkgIT09IEpTT05fRVJST1JfTk9ORSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2U6ICVzIiwKICAgICAgICAgICAgICAgIGpzb25fbGFzdF9lcnJvcl9tc2coKQogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnQgdHlwZSBoZWFkZXIgb2YgYSByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHJldHVybiBzdHJpbmcgU2VtaS1jb2xvbiBzZXBhcmF0ZWQgam9pbiBvZiBjb250ZW50LXR5cGUgaGVhZGVycy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICByZXR1cm4gaW1wbG9kZSgnOycsICRyZXNwb25zZS0+Z2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZXMgdGhlIHJlc3BvbnNlIGFjY29yZGluZyB0byBpdHMgY29udGVudC10eXBlIGhlYWRlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgogICAgICogQHBhcmFtICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2UoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKQogICAgewogICAgICAgICRjb250ZW50ID0gKHN0cmluZykgJHJlc3BvbnNlLT5nZXRCb2R5KCk7CiAgICAgICAgJHR5cGUgPSAkdGhpcy0+Z2V0Q29udGVudFR5cGUoJHJlc3BvbnNlKTsKCiAgICAgICAgaWYgKHN0cnBvcygkdHlwZSwgJ3VybGVuY29kZWQnKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcGFyc2Vfc3RyKCRjb250ZW50LCAkcGFyc2VkKTsKICAgICAgICAgICAgcmV0dXJuICRwYXJzZWQ7CiAgICAgICAgfQoKICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTiByZWdhcmRsZXNzIG9mIGNvbnRlbnQgdHlwZSwKICAgICAgICAvLyBzaW5jZSBzb21lIHByb3ZpZGVycyB1c2Ugbm9uLXN0YW5kYXJkIGNvbnRlbnQgdHlwZXMuIE9ubHkgdGhyb3cgYW4KICAgICAgICAvLyBleGNlcHRpb24gaWYgdGhlIEpTT04gY291bGQgbm90IGJlIHBhcnNlZCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0by4KICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlSnNvbigkY29udGVudCk7CiAgICAgICAgfSBjYXRjaCAoVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGlmIChzdHJwb3MoJHR5cGUsICdqc29uJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpID09IDUwMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnQW4gT0F1dGggc2VydmVyIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB0aGF0IGRpZCBub3QgY29udGFpbiBhIEpTT04gYm9keScsCiAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAkZQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBhIHByb3ZpZGVyIHJlc3BvbnNlIGZvciBlcnJvcnMuCiAgICAgKgogICAgICogQHRocm93cyBJZGVudGl0eVByb3ZpZGVyRXhjZXB0aW9uCiAgICAgKiBAcGFyYW0gIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgJGRhdGEgUGFyc2VkIHJlc3BvbnNlIGRhdGEKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsICRkYXRhKTsKCiAgICAvKioKICAgICAqIFByZXBhcmVzIGFuIHBhcnNlZCBhY2Nlc3MgdG9rZW4gcmVzcG9uc2UgZm9yIGEgZ3JhbnQuCiAgICAgKgogICAgICogQ3VzdG9tIG1hcHBpbmcgb2YgZXhwaXJhdGlvbiwgZXRjIHNob3VsZCBiZSBkb25lIGhlcmUuIEFsd2F5cyBjYWxsIHRoZQogICAgICogcGFyZW50IG1ldGhvZCB3aGVuIG92ZXJsb2FkaW5nIHRoaXMgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXk8c3RyaW5nLCBtaXhlZD4gJHJlc3VsdAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcHJlcGFyZUFjY2Vzc1Rva2VuUmVzcG9uc2UoYXJyYXkgJHJlc3VsdCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmdldEFjY2Vzc1Rva2VuUmVzb3VyY2VPd25lcklkKCkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdFsncmVzb3VyY2Vfb3duZXJfaWQnXSA9ICR0aGlzLT5nZXRWYWx1ZUJ5S2V5KAogICAgICAgICAgICAgICAgJHJlc3VsdCwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhbiBhY2Nlc3MgdG9rZW4gZnJvbSBhIHJlc3BvbnNlLgogICAgICoKICAgICAqIFRoZSBncmFudCB0aGF0IHdhcyB1c2VkIHRvIGZldGNoIHRoZSByZXNwb25zZSBjYW4gYmUgdXNlZCB0byBwcm92aWRlCiAgICAgKiBhZGRpdGlvbmFsIGNvbnRleHQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcmVzcG9uc2UKICAgICAqIEBwYXJhbSAgQWJzdHJhY3RHcmFudCAkZ3JhbnQKICAgICAqIEByZXR1cm4gQWNjZXNzVG9rZW5JbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZUFjY2Vzc1Rva2VuKGFycmF5ICRyZXNwb25zZSwgQWJzdHJhY3RHcmFudCAkZ3JhbnQpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBY2Nlc3NUb2tlbigkcmVzcG9uc2UpOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgcmVzb3VyY2Ugb3duZXIgb2JqZWN0IGZyb20gYSBzdWNjZXNzZnVsIHJlc291cmNlIG93bmVyCiAgICAgKiBkZXRhaWxzIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkcmVzcG9uc2UKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIFJlc291cmNlT3duZXJJbnRlcmZhY2UKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlT3duZXIoYXJyYXkgJHJlc3BvbnNlLCBBY2Nlc3NUb2tlbiAkdG9rZW4pOwoKICAgIC8qKgogICAgICogUmVxdWVzdHMgYW5kIHJldHVybnMgdGhlIHJlc291cmNlIG93bmVyIG9mIGdpdmVuIGFjY2VzcyB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuICR0b2tlbgogICAgICogQHJldHVybiBSZXNvdXJjZU93bmVySW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcihBY2Nlc3NUb2tlbiAkdG9rZW4pCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmZldGNoUmVzb3VyY2VPd25lckRldGFpbHMoJHRva2VuKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVSZXNvdXJjZU93bmVyKCRyZXNwb25zZSwgJHRva2VuKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcXVlc3RzIHJlc291cmNlIG93bmVyIGRldGFpbHMuCiAgICAgKgogICAgICogQHBhcmFtICBBY2Nlc3NUb2tlbiAkdG9rZW4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEB0aHJvd3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmZXRjaFJlc291cmNlT3duZXJEZXRhaWxzKEFjY2Vzc1Rva2VuICR0b2tlbikKICAgIHsKICAgICAgICAkdXJsID0gJHRoaXMtPmdldFJlc291cmNlT3duZXJEZXRhaWxzVXJsKCR0b2tlbik7CgogICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmdldEF1dGhlbnRpY2F0ZWRSZXF1ZXN0KHNlbGY6Ok1FVEhPRF9HRVQsICR1cmwsICR0b2tlbik7CgogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5nZXRQYXJzZWRSZXNwb25zZSgkcmVxdWVzdCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfYXJyYXkoJHJlc3BvbnNlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBdXRob3JpemF0aW9uIFNlcnZlci4gRXhwZWN0ZWQgSlNPTi4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBoZWFkZXJzIHVzZWQgYnkgdGhpcyBwcm92aWRlci4KICAgICAqCiAgICAgKiBUeXBpY2FsbHkgdGhpcyBpcyB1c2VkIHRvIHNldCAnQWNjZXB0JyBvciAnQ29udGVudC1UeXBlJyBoZWFkZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRIZWFkZXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlcnMgdXNlZCBieSB0aGlzIHByb3ZpZGVyLgogICAgICoKICAgICAqIFR5cGljYWxseSB0aGlzIGlzICJCZWFyZXIiIG9yICJNQUMiLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CiAgICAgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tNy4xCiAgICAgKgogICAgICogTm8gZGVmYXVsdCBpcyBwcm92aWRlZCwgcHJvdmlkZXJzIG11c3Qgb3ZlcmxvYWQgdGhpcyBtZXRob2QgdG8gYWN0aXZhdGUKICAgICAqIGF1dGhvcml6YXRpb24gaGVhZGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkfG51bGwgJHRva2VuIEVpdGhlciBhIHN0cmluZyBvciBhbiBhY2Nlc3MgdG9rZW4gaW5zdGFuY2UKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEF1dGhvcml6YXRpb25IZWFkZXJzKCR0b2tlbiA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgaGVhZGVycyB1c2VkIGJ5IHRoaXMgcHJvdmlkZXIgZm9yIGEgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCB3aWxsIGJlIGF1dGhlbnRpY2F0ZWQgaWYgYW4gYWNjZXNzIHRva2VuIGlzIHByb3ZpZGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWR8bnVsbCAkdG9rZW4gb2JqZWN0IG9yIHN0cmluZwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIGlmICgkdG9rZW4pIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldERlZmF1bHRIZWFkZXJzKCksCiAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0QXV0aG9yaXphdGlvbkhlYWRlcnMoJHRva2VuKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXREZWZhdWx0SGVhZGVycygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxFeGNlcHRpb247CgovKioKICogRXhjZXB0aW9uIHRocm93biBpZiB0aGUgcHJvdmlkZXIgcmVzcG9uc2UgY29udGFpbnMgZXJyb3JzLgogKi8KY2xhc3MgSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlc3BvbnNlIFRoZSByZXNwb25zZSBib2R5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUsICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSAkcmVzcG9uc2U7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4Y2VwdGlvbidzIHJlc3BvbnNlIGJvZHkuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/GenericProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlclxFeGNlcHRpb25cSWRlbnRpdHlQcm92aWRlckV4Y2VwdGlvbjsKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9vbFxCZWFyZXJBdXRob3JpemF0aW9uVHJhaXQ7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHNlcnZpY2UgcHJvdmlkZXIgdGhhdCBtYXkgYmUgdXNlZCB0byBpbnRlcmFjdCB3aXRoIGFueQogKiBPQXV0aCAyLjAgc2VydmljZSBwcm92aWRlciwgdXNpbmcgQmVhcmVyIHRva2VuIGF1dGhlbnRpY2F0aW9uLgogKi8KY2xhc3MgR2VuZXJpY1Byb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RQcm92aWRlcgp7CiAgICB1c2UgQmVhcmVyQXV0aG9yaXphdGlvblRyYWl0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJsQXV0aG9yaXplOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJsQWNjZXNzVG9rZW47CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR1cmxSZXNvdXJjZU93bmVyRGV0YWlsczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGFjY2Vzc1Rva2VuTWV0aG9kOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkc2NvcGVzID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNjb3BlU2VwYXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzcG9uc2VFcnJvciA9ICdlcnJvcic7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZUNvZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyZXNwb25zZVJlc291cmNlT3duZXJJZCA9ICdpZCc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHBrY2VNZXRob2QgPSBudWxsOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbGxhYm9yYXRvcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRvcHRpb25zID0gW10sIGFycmF5ICRjb2xsYWJvcmF0b3JzID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFJlcXVpcmVkT3B0aW9ucygkb3B0aW9ucyk7CgogICAgICAgICRwb3NzaWJsZSAgID0gJHRoaXMtPmdldENvbmZpZ3VyYWJsZU9wdGlvbnMoKTsKICAgICAgICAkY29uZmlndXJlZCA9IGFycmF5X2ludGVyc2VjdF9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoJHBvc3NpYmxlKSk7CgogICAgICAgIGZvcmVhY2ggKCRjb25maWd1cmVkIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0aGlzLT4ka2V5ID0gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIGFsbCBvcHRpb25zIHRoYXQgYXJlIG9ubHkgdXNlZCBsb2NhbGx5CiAgICAgICAgJG9wdGlvbnMgPSBhcnJheV9kaWZmX2tleSgkb3B0aW9ucywgJGNvbmZpZ3VyZWQpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRvcHRpb25zLCAkY29sbGFib3JhdG9ycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBvcHRpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhYmxlT3B0aW9ucygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21lcmdlKCR0aGlzLT5nZXRSZXF1aXJlZE9wdGlvbnMoKSwgWwogICAgICAgICAgICAnYWNjZXNzVG9rZW5NZXRob2QnLAogICAgICAgICAgICAnYWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQnLAogICAgICAgICAgICAnc2NvcGVTZXBhcmF0b3InLAogICAgICAgICAgICAncmVzcG9uc2VFcnJvcicsCiAgICAgICAgICAgICdyZXNwb25zZUNvZGUnLAogICAgICAgICAgICAncmVzcG9uc2VSZXNvdXJjZU93bmVySWQnLAogICAgICAgICAgICAnc2NvcGVzJywKICAgICAgICAgICAgJ3BrY2VNZXRob2QnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZXF1aXJlZE9wdGlvbnMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd1cmxBdXRob3JpemUnLAogICAgICAgICAgICAndXJsQWNjZXNzVG9rZW4nLAogICAgICAgICAgICAndXJsUmVzb3VyY2VPd25lckRldGFpbHMnLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGF0IGFsbCByZXF1aXJlZCBvcHRpb25zIGhhdmUgYmVlbiBwYXNzZWQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkbWlzc2luZyA9IGFycmF5X2RpZmZfa2V5KGFycmF5X2ZsaXAoJHRoaXMtPmdldFJlcXVpcmVkT3B0aW9ucygpKSwgJG9wdGlvbnMpOwoKICAgICAgICBpZiAoIWVtcHR5KCRtaXNzaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1JlcXVpcmVkIG9wdGlvbnMgbm90IGRlZmluZWQ6ICcgLiBpbXBsb2RlKCcsICcsIGFycmF5X2tleXMoJG1pc3NpbmcpKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlQXV0aG9yaXphdGlvblVybCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxBdXRob3JpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZUFjY2Vzc1Rva2VuVXJsKGFycmF5ICRwYXJhbXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxBY2Nlc3NUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNvdXJjZU93bmVyRGV0YWlsc1VybChBY2Nlc3NUb2tlbiAkdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmxSZXNvdXJjZU93bmVyRGV0YWlsczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0U2NvcGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjb3BlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbk1ldGhvZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hY2Nlc3NUb2tlbk1ldGhvZCA/OiBwYXJlbnQ6OmdldEFjY2Vzc1Rva2VuTWV0aG9kKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWNjZXNzVG9rZW5SZXNvdXJjZU93bmVySWQgPzogcGFyZW50OjpnZXRBY2Nlc3NUb2tlblJlc291cmNlT3duZXJJZCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNjb3BlU2VwYXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjb3BlU2VwYXJhdG9yID86IHBhcmVudDo6Z2V0U2NvcGVTZXBhcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRQa2NlTWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBrY2VNZXRob2QgPzogcGFyZW50OjpnZXRQa2NlTWV0aG9kKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UsICRkYXRhKQogICAgewogICAgICAgIGlmICghZW1wdHkoJGRhdGFbJHRoaXMtPnJlc3BvbnNlRXJyb3JdKSkgewogICAgICAgICAgICAkZXJyb3IgPSAkZGF0YVskdGhpcy0+cmVzcG9uc2VFcnJvcl07CiAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRlcnJvcikpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9IHZhcl9leHBvcnQoJGVycm9yLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29kZSAgPSAkdGhpcy0+cmVzcG9uc2VDb2RlICYmICFlbXB0eSgkZGF0YVskdGhpcy0+cmVzcG9uc2VDb2RlXSk/ICRkYXRhWyR0aGlzLT5yZXNwb25zZUNvZGVdIDogMDsKICAgICAgICAgICAgaWYgKCFpc19pbnQoJGNvZGUpKSB7CiAgICAgICAgICAgICAgICAkY29kZSA9IGludHZhbCgkY29kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgbmV3IElkZW50aXR5UHJvdmlkZXJFeGNlcHRpb24oJGVycm9yLCAkY29kZSwgJGRhdGEpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZU93bmVyKGFycmF5ICRyZXNwb25zZSwgQWNjZXNzVG9rZW4gJHRva2VuKQogICAgewogICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1Jlc291cmNlT3duZXIoJHJlc3BvbnNlLCAkdGhpcy0+cmVzcG9uc2VSZXNvdXJjZU93bmVySWQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/GenericResourceOwner.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCi8qKgogKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyByZXNvdXJjZSBvd25lciBmb3IgdXNlIHdpdGggdGhlIEdlbmVyaWNQcm92aWRlci4KICovCmNsYXNzIEdlbmVyaWNSZXNvdXJjZU93bmVyIGltcGxlbWVudHMgUmVzb3VyY2VPd25lckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzb3VyY2VPd25lcklkOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRyZXNwb25zZQogICAgICogQHBhcmFtIHN0cmluZyAkcmVzb3VyY2VPd25lcklkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVzcG9uc2UsICRyZXNvdXJjZU93bmVySWQpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc3BvbnNlID0gJHJlc3BvbnNlOwogICAgICAgICR0aGlzLT5yZXNvdXJjZU93bmVySWQgPSAkcmVzb3VyY2VPd25lcklkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgYXV0aG9yaXplZCByZXNvdXJjZSBvd25lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZVskdGhpcy0+cmVzb3VyY2VPd25lcklkXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhdyByZXNvdXJjZSBvd25lciByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Provider/ResourceOwnerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxQcm92aWRlcjsKCi8qKgogKiBDbGFzc2VzIGltcGxlbWVudGluZyBgUmVzb3VyY2VPd25lckludGVyZmFjZWAgbWF5IGJlIHVzZWQgdG8gcmVwcmVzZW50CiAqIHRoZSByZXNvdXJjZSBvd25lciBhdXRoZW50aWNhdGVkIHdpdGggYSBzZXJ2aWNlIHByb3ZpZGVyLgogKi8KaW50ZXJmYWNlIFJlc291cmNlT3duZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBhdXRob3JpemVkIHJlc291cmNlIG93bmVyLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYWxsIG9mIHRoZSBvd25lciBkZXRhaWxzIGF2YWlsYWJsZSBhcyBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/AccessToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFJlcHJlc2VudHMgYW4gYWNjZXNzIHRva2VuLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5I3NlY3Rpb24tMS40IEFjY2VzcyBUb2tlbiAoUkZDIDY3NDksIMKnMS40KQogKi8KY2xhc3MgQWNjZXNzVG9rZW4gaW1wbGVtZW50cyBBY2Nlc3NUb2tlbkludGVyZmFjZSwgUmVzb3VyY2VPd25lckFjY2Vzc1Rva2VuSW50ZXJmYWNlLCBTZXR0YWJsZVJlZnJlc2hUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkYWNjZXNzVG9rZW47CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJGV4cGlyZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZnJlc2hUb2tlbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVzb3VyY2VPd25lcklkOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHZhbHVlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHRpbWVOb3c7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRpbWUgbm93LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZU5vdyB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRUaW1lTm93KCR0aW1lTm93KQogICAgewogICAgICAgIHNlbGY6OiR0aW1lTm93ID0gJHRpbWVOb3c7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUgdGltZSBub3cgaWYgaXQgd2FzIHNldCBmb3IgdGVzdCBwdXJwb3Nlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNldFRpbWVOb3coKQogICAgewogICAgICAgIHNlbGY6OiR0aW1lTm93ID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTm93KCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHRpbWVOb3cgPyBzZWxmOjokdGltZU5vdyA6IHRpbWUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gYWNjZXNzIHRva2VuLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHJldHVybmVkIGJ5IHRoZSBzZXJ2aWNlIHByb3ZpZGVyCiAgICAgKiAgICAgaW4gdGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0LiBUaGUgYGFjY2Vzc190b2tlbmAgb3B0aW9uIGlzIHJlcXVpcmVkLgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgYGFjY2Vzc190b2tlbmAgaXMgbm90IHByb3ZpZGVkIGluIGAkb3B0aW9uc2AuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snYWNjZXNzX3Rva2VuJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1JlcXVpcmVkIG9wdGlvbiBub3QgcGFzc2VkOiAiYWNjZXNzX3Rva2VuIicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFjY2Vzc1Rva2VuID0gJG9wdGlvbnNbJ2FjY2Vzc190b2tlbiddOwoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydyZXNvdXJjZV9vd25lcl9pZCddKSkgewogICAgICAgICAgICAkdGhpcy0+cmVzb3VyY2VPd25lcklkID0gJG9wdGlvbnNbJ3Jlc291cmNlX293bmVyX2lkJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydyZWZyZXNoX3Rva2VuJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWZyZXNoVG9rZW4gPSAkb3B0aW9uc1sncmVmcmVzaF90b2tlbiddOwogICAgICAgIH0KCiAgICAgICAgLy8gV2UgbmVlZCB0byBrbm93IHdoZW4gdGhlIHRva2VuIGV4cGlyZXMuIFNob3cgcHJlZmVyZW5jZSB0bwogICAgICAgIC8vICdleHBpcmVzX2luJyBzaW5jZSBpdCBpcyBkZWZpbmVkIGluIFJGQzY3NDkgU2VjdGlvbiA1LjEuCiAgICAgICAgLy8gRGVmZXIgdG8gJ2V4cGlyZXMnIGlmIGl0IGlzIHByb3ZpZGVkIGluc3RlYWQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydleHBpcmVzX2luJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfbnVtZXJpYygkb3B0aW9uc1snZXhwaXJlc19pbiddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2V4cGlyZXNfaW4gdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5leHBpcmVzID0gJG9wdGlvbnNbJ2V4cGlyZXNfaW4nXSAhPSAwID8gJHRoaXMtPmdldFRpbWVOb3coKSArICRvcHRpb25zWydleHBpcmVzX2luJ10gOiAwOwogICAgICAgIH0gZWxzZWlmICghZW1wdHkoJG9wdGlvbnNbJ2V4cGlyZXMnXSkpIHsKICAgICAgICAgICAgLy8gU29tZSBwcm92aWRlcnMgc3VwcGx5IHRoZSBzZWNvbmRzIHVudGlsIGV4cGlyYXRpb24gcmF0aGVyIHRoYW4KICAgICAgICAgICAgLy8gdGhlIGV4YWN0IHRpbWVzdGFtcC4gVGFrZSBhIGJlc3QgZ3Vlc3MgYXQgd2hpY2ggd2UgcmVjZWl2ZWQuCiAgICAgICAgICAgICRleHBpcmVzID0gKGludCkgJG9wdGlvbnNbJ2V4cGlyZXMnXTsKCiAgICAgICAgICAgIGlmICghJHRoaXMtPmlzRXhwaXJhdGlvblRpbWVzdGFtcCgkZXhwaXJlcykpIHsKICAgICAgICAgICAgICAgICRleHBpcmVzICs9ICR0aGlzLT5nZXRUaW1lTm93KCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5leHBpcmVzID0gJGV4cGlyZXM7CiAgICAgICAgfQoKICAgICAgICAvLyBDYXB0dXJlIGFueSBhZGRpdGlvbmFsIHZhbHVlcyB0aGF0IG1pZ2h0IGV4aXN0IGluIHRoZSB0b2tlbiBidXQgYXJlCiAgICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIHJlc3BvbnNlLiBWZW5kb3JzIHdpbGwgc29tZXRpbWVzIHBhc3MKICAgICAgICAvLyBhZGRpdGlvbmFsIHVzZXIgZGF0YSB0aGlzIHdheS4KICAgICAgICAkdGhpcy0+dmFsdWVzID0gYXJyYXlfZGlmZl9rZXkoJG9wdGlvbnMsIGFycmF5X2ZsaXAoWwogICAgICAgICAgICAnYWNjZXNzX3Rva2VuJywKICAgICAgICAgICAgJ3Jlc291cmNlX293bmVyX2lkJywKICAgICAgICAgICAgJ3JlZnJlc2hfdG9rZW4nLAogICAgICAgICAgICAnZXhwaXJlc19pbicsCiAgICAgICAgICAgICdleHBpcmVzJywKICAgICAgICBdKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGV4cGlyYXRpb24gdGltZXN0YW1wIG9yIHNlY29uZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNFeHBpcmF0aW9uVGltZXN0YW1wKCR2YWx1ZSkKICAgIHsKICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsIE9BdXRoIDIgZHJhZnQgZGF0ZSwKICAgICAgICAvLyBhc3N1bWUgdGhhdCBpdCBpcyBtZWFudCB0byBiZSBhIChwb3NzaWJsZSBleHBpcmVkKSB0aW1lc3RhbXAuCiAgICAgICAgJG9hdXRoMkluY2VwdGlvbkRhdGUgPSAxMzQ5MDY3NjAwOyAvLyAyMDEyLTEwLTAxCiAgICAgICAgcmV0dXJuICgkdmFsdWUgPiAkb2F1dGgySW5jZXB0aW9uRGF0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWNjZXNzVG9rZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZnJlc2hUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZWZyZXNoVG9rZW4oJHJlZnJlc2hUb2tlbikKICAgIHsKICAgICAgICAkdGhpcy0+cmVmcmVzaFRva2VuID0gJHJlZnJlc2hUb2tlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmV4cGlyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcklkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc291cmNlT3duZXJJZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBpcmVkKCkKICAgIHsKICAgICAgICAkZXhwaXJlcyA9ICR0aGlzLT5nZXRFeHBpcmVzKCk7CgogICAgICAgIGlmIChlbXB0eSgkZXhwaXJlcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJyJleHBpcmVzIiBpcyBub3Qgc2V0IG9uIHRoZSB0b2tlbicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRleHBpcmVzIDwgJHRoaXMtPmdldFRpbWVOb3coKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+Z2V0VG9rZW4oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkKICAgIHsKICAgICAgICAkcGFyYW1ldGVycyA9ICR0aGlzLT52YWx1ZXM7CgogICAgICAgIGlmICgkdGhpcy0+YWNjZXNzVG9rZW4pIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ2FjY2Vzc190b2tlbiddID0gJHRoaXMtPmFjY2Vzc1Rva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZWZyZXNoVG9rZW4pIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ3JlZnJlc2hfdG9rZW4nXSA9ICR0aGlzLT5yZWZyZXNoVG9rZW47CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmV4cGlyZXMpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ2V4cGlyZXMnXSA9ICR0aGlzLT5leHBpcmVzOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZXNvdXJjZU93bmVySWQpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ3Jlc291cmNlX293bmVyX2lkJ10gPSAkdGhpcy0+cmVzb3VyY2VPd25lcklkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYXJhbWV0ZXJzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/AccessTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgUmV0dXJuVHlwZVdpbGxDaGFuZ2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKaW50ZXJmYWNlIEFjY2Vzc1Rva2VuSW50ZXJmYWNlIGV4dGVuZHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFjY2VzcyB0b2tlbiBzdHJpbmcgb2YgdGhpcyBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlZnJlc2ggdG9rZW4sIGlmIGRlZmluZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleHBpcmF0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzLCBpZiBkZWZpbmVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50ZWdlcnxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCk7CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhpcyB0b2tlbiBoYXMgZXhwaXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiAnZXhwaXJlcycgaXMgbm90IHNldCBvbiB0aGUgdG9rZW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBpcmVkKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmVuZG9yIHZhbHVlcyBzdG9yZWQgaW4gdGhlIHRva2VuLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlcygpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWNjZXNzIHRva2VuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyB0byBzZXJpYWxpemUgd2hlbiB0aGlzIGlzIHNlcmlhbGl6ZWQgd2l0aAogICAgICoganNvbl9lbmNvZGUoKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCmludGVyZmFjZSBSZXNvdXJjZU93bmVyQWNjZXNzVG9rZW5JbnRlcmZhY2UgZXh0ZW5kcyBBY2Nlc3NUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlc291cmNlIG93bmVyIGlkZW50aWZpZXIsIGlmIGRlZmluZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VPd25lcklkKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Token/SettableRefreshTokenInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb2tlbjsKCmludGVyZmFjZSBTZXR0YWJsZVJlZnJlc2hUb2tlbkludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFNldHMgb3IgcmVwbGFjZXMgdGhlIHJlZnJlc2ggdG9rZW4gd2l0aCB0aGUgcHJvdmlkZWQgcmVmcmVzaCB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWZyZXNoVG9rZW4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVmcmVzaFRva2VuKCRyZWZyZXNoVG9rZW4pOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/ArrayAccessorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIGdlbmVyaWMgYXJyYXkgbmF2aWdhdGlvbiB0b29scy4KICovCnRyYWl0IEFycmF5QWNjZXNzb3JUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSB2YWx1ZSBieSBrZXkgdXNpbmcgZG90IG5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICAgICAkZGF0YQogICAgICogQHBhcmFtICBzdHJpbmcgICAgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWR8bnVsbCAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFZhbHVlQnlLZXkoYXJyYXkgJGRhdGEsICRrZXksICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygka2V5KSB8fCBlbXB0eSgka2V5KSB8fCAhY291bnQoJGRhdGEpKSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJGtleSwgJy4nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJGtleXMgPSBleHBsb2RlKCcuJywgJGtleSk7CgogICAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAkaW5uZXJLZXkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGRhdGEpIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRpbm5lcktleSwgJGRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRkYXRhID0gJGRhdGFbJGlubmVyS2V5XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRkYXRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJGRhdGEpID8gJGRhdGFbJGtleV0gOiAkZGVmYXVsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuSW50ZXJmYWNlOwoKLyoqCiAqIEVuYWJsZXMgYEJlYXJlcmAgaGVhZGVyIGF1dGhvcml6YXRpb24gZm9yIHByb3ZpZGVycy4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc1MCBCZWFyZXIgVG9rZW4gVXNhZ2UgKFJGQyA2NzUwKQogKi8KdHJhaXQgQmVhcmVyQXV0aG9yaXphdGlvblRyYWl0CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhdXRob3JpemF0aW9uIGhlYWRlcnMgZm9yIHRoZSAnYmVhcmVyJyBncmFudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIEFjY2Vzc1Rva2VuSW50ZXJmYWNlfHN0cmluZ3xudWxsICR0b2tlbiBFaXRoZXIgYSBzdHJpbmcgb3IgYW4gYWNjZXNzIHRva2VuIGluc3RhbmNlCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uSGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBbJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICR0b2tlbl07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/GuardedPropertyTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGJsYWNrbGlzdGluZyBleHBsaWNpdCBwcm9wZXJ0aWVzIGZyb20gdGhlCiAqIG1hc3MgYXNzaWdubWVudCBiZWhhdmlvci4KICovCnRyYWl0IEd1YXJkZWRQcm9wZXJ0eVRyYWl0CnsKICAgIC8qKgogICAgICogVGhlIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3QgbWFzcyBhc3NpZ25hYmxlLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRndWFyZGVkID0gW107CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byBtYXNzIGFzc2lnbiB0aGUgZ2l2ZW4gb3B0aW9ucyB0byBleHBsaWNpdGx5IGRlZmluZWQgcHJvcGVydGllcywKICAgICAqIHNraXBwaW5nIG92ZXIgYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgZ3VhcmRlZCBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbGxQcm9wZXJ0aWVzKGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydndWFyZGVkJ10pKSB7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydndWFyZGVkJ10pOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbiA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKHByb3BlcnR5X2V4aXN0cygkdGhpcywgJG9wdGlvbikgJiYgISR0aGlzLT5pc0d1YXJkZWQoJG9wdGlvbikpIHsKICAgICAgICAgICAgICAgICR0aGlzLT57JG9wdGlvbn0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGN1cnJlbnQgZ3VhcmRlZCBwcm9wZXJ0aWVzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEd1YXJkZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z3VhcmRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIGd1YXJkZWQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRwcm9wZXJ0eQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0d1YXJkZWQoJHByb3BlcnR5KQogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkcHJvcGVydHksICR0aGlzLT5nZXRHdWFyZGVkKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/MacAuthorizationTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIExlYWd1ZVxPQXV0aDJcQ2xpZW50XFRva2VuXEFjY2Vzc1Rva2VuOwp1c2UgTGVhZ3VlXE9BdXRoMlxDbGllbnRcVG9rZW5cQWNjZXNzVG9rZW5JbnRlcmZhY2U7CgovKioKICogRW5hYmxlcyBgTUFDYCBoZWFkZXIgYXV0aG9yaXphdGlvbiBmb3IgcHJvdmlkZXJzLgogKgogKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9hdXRoLXYyLWh0dHAtbWFjLTA1IE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSBUb2tlbnMKICovCnRyYWl0IE1hY0F1dGhvcml6YXRpb25UcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGlkIG9mIHRoaXMgdG9rZW4gZm9yIE1BQyBnZW5lcmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgQWNjZXNzVG9rZW4gJHRva2VuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VG9rZW5JZChBY2Nlc3NUb2tlbiAkdG9rZW4pOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgTUFDIHNpZ25hdHVyZSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkaWQKICAgICAqIEBwYXJhbSAgaW50ZWdlciAkdHMKICAgICAqIEBwYXJhbSAgc3RyaW5nICRub25jZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1hY1NpZ25hdHVyZSgkaWQsICR0cywgJG5vbmNlKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgcmFuZG9tIHN0cmluZyB0byB1c2UgYXMgdGhlIHN0YXRlIHBhcmFtZXRlciBpbiBhbgogICAgICogYXV0aG9yaXphdGlvbiBmbG93LgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICRsZW5ndGggTGVuZ3RoIG9mIHRoZSByYW5kb20gc3RyaW5nIHRvIGJlIGdlbmVyYXRlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSYW5kb21TdGF0ZSgkbGVuZ3RoID0gMzIpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXJzIGZvciB0aGUgJ21hYycgZ3JhbnQuCiAgICAgKgogICAgICogQHBhcmFtICBBY2Nlc3NUb2tlbkludGVyZmFjZXxzdHJpbmd8bnVsbCAkdG9rZW4gRWl0aGVyIGEgc3RyaW5nIG9yIGFuIGFjY2VzcyB0b2tlbiBpbnN0YW5jZQogICAgICogQHJldHVybiBhcnJheQogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICoKICAgICAqIEB0b2RvIFRoaXMgaXMgY3VycmVudGx5IHVudGVzdGVkIGFuZCBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuIElmIHlvdQogICAgICogY29tcGxldGUgdGhlIGltcGxlbWVudGF0aW9uLCBwbGVhc2UgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvcgogICAgICogaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBdXRob3JpemF0aW9uSGVhZGVycygkdG9rZW4gPSBudWxsKQogICAgewogICAgICAgIGlmICgkdG9rZW4gPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgJHRzICAgID0gdGltZSgpOwogICAgICAgICRpZCAgICA9ICR0aGlzLT5nZXRUb2tlbklkKCR0b2tlbik7CiAgICAgICAgJG5vbmNlID0gJHRoaXMtPmdldFJhbmRvbVN0YXRlKDE2KTsKICAgICAgICAkbWFjICAgPSAkdGhpcy0+Z2V0TWFjU2lnbmF0dXJlKCRpZCwgJHRzLCAkbm9uY2UpOwoKICAgICAgICAkcGFydHMgPSBbXTsKICAgICAgICBmb3JlYWNoIChjb21wYWN0KCdpZCcsICd0cycsICdub25jZScsICdtYWMnKSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkcGFydHNbXSA9IHNwcmludGYoJyVzPSIlcyInLCAka2V5LCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsnQXV0aG9yaXphdGlvbicgPT4gJ01BQyAnIC4gaW1wbG9kZSgnLCAnLCAkcGFydHMpXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/ProviderRedirectTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEd1enpsZUh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxQc3I3XFVyaTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7Cgp0cmFpdCBQcm92aWRlclJlZGlyZWN0VHJhaXQKewogICAgLyoqCiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byBmb2xsb3cgcHJvdmlkZXIgaW5pdGlhdGVkIHJlZGlyZWN0cwogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwcm90ZWN0ZWQgJHJlZGlyZWN0TGltaXQgPSAyOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gcmVxdWVzdCBhbmQgcmV0cmlldmVzIHN1YnNlcXVlbnQKICAgICAqIHJlc3BvbnNlcywgd2l0aCBhdXRob3JpemF0aW9uIGhlYWRlcnMsIGlmIGEgcmVkaXJlY3QgaXMgZGV0ZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIEJhZFJlc3BvbnNlRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmb2xsb3dSZXF1ZXN0UmVkaXJlY3RzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gbnVsbDsKICAgICAgICAkYXR0ZW1wdHMgPSAwOwoKICAgICAgICB3aGlsZSAoJGF0dGVtcHRzIDwgJHRoaXMtPnJlZGlyZWN0TGltaXQpIHsKICAgICAgICAgICAgJGF0dGVtcHRzKys7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5nZXRIdHRwQ2xpZW50KCktPnNlbmQoJHJlcXVlc3QsIFsKICAgICAgICAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IGZhbHNlCiAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgaWYgKCR0aGlzLT5pc1JlZGlyZWN0KCRyZXNwb25zZSkpIHsKICAgICAgICAgICAgICAgICRyZWRpcmVjdFVybCA9IG5ldyBVcmkoJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ0xvY2F0aW9uJylbMF0pOwogICAgICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aFVyaSgkcmVkaXJlY3RVcmwpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBIVFRQIGNsaWVudCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRIdHRwQ2xpZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgY3VycmVudCByZWRpcmVjdCBsaW1pdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlZGlyZWN0TGltaXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVkaXJlY3RMaW1pdDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgYSBnaXZlbiByZXNwb25zZSBpcyBhIHJlZGlyZWN0LgogICAgICoKICAgICAqIEBwYXJhbSAgUmVzcG9uc2VJbnRlcmZhY2UgICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNSZWRpcmVjdChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpCiAgICB7CiAgICAgICAgJHN0YXR1c0NvZGUgPSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKTsKCiAgICAgICAgcmV0dXJuICRzdGF0dXNDb2RlID4gMzAwICYmICRzdGF0dXNDb2RlIDwgNDAwICYmICRyZXNwb25zZS0+aGFzSGVhZGVyKCdMb2NhdGlvbicpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgYSByZXF1ZXN0IGluc3RhbmNlIGFuZCByZXR1cm5zIGEgcmVzcG9uc2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogV0FSTklORzogVGhpcyBtZXRob2QgZG9lcyBub3QgYXR0ZW1wdCB0byBjYXRjaCBleGNlcHRpb25zIGNhdXNlZCBieSBIVFRQCiAgICAgKiBlcnJvcnMhIEl0IGlzIHJlY29tbWVuZGVkIHRvIHdyYXAgdGhpcyBtZXRob2QgaW4gYSB0cnkvY2F0Y2ggYmxvY2suCiAgICAgKgogICAgICogQHBhcmFtICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNwb25zZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5mb2xsb3dSZXF1ZXN0UmVkaXJlY3RzKCRyZXF1ZXN0KTsKICAgICAgICB9IGNhdGNoIChCYWRSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSAkZS0+Z2V0UmVzcG9uc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBVcGRhdGVzIHRoZSByZWRpcmVjdCBsaW1pdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkbGltaXQKICAgICAqIEByZXR1cm4gTGVhZ3VlXE9BdXRoMlxDbGllbnRcUHJvdmlkZXJcQWJzdHJhY3RQcm92aWRlcgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlZGlyZWN0TGltaXQoJGxpbWl0KQogICAgewogICAgICAgIGlmICghaXNfaW50KCRsaW1pdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncmVkaXJlY3RMaW1pdCBtdXN0IGJlIGFuIGludGVnZXIuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGxpbWl0IDwgMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdyZWRpcmVjdExpbWl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9uZS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWRpcmVjdExpbWl0ID0gJGxpbWl0OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/QueryBuilderTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKLyoqCiAqIFByb3ZpZGVzIGEgc3RhbmRhcmQgd2F5IHRvIGdlbmVyYXRlIHF1ZXJ5IHN0cmluZ3MuCiAqLwp0cmFpdCBRdWVyeUJ1aWxkZXJUcmFpdAp7CiAgICAvKioKICAgICAqIEJ1aWxkIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRRdWVyeVN0cmluZyhhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIHJldHVybiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsICcnLCAnJicsIFxQSFBfUVVFUllfUkZDMzk4Nik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/RequestFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0OwoKLyoqCiAqIFVzZWQgdG8gcHJvZHVjZSBQU1ItNyBSZXF1ZXN0IGluc3RhbmNlcy4KICoKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMTAxCiAqLwpjbGFzcyBSZXF1ZXN0RmFjdG9yeQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBQU1ItNyBSZXF1ZXN0IGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgbnVsbHxzdHJpbmcgJG1ldGhvZCBIVFRQIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3QuCiAgICAgKiBAcGFyYW0gIG51bGx8c3RyaW5nICR1cmkgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSAgYXJyYXkgJGhlYWRlcnMgSGVhZGVycyBmb3IgdGhlIG1lc3NhZ2UuCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xyZXNvdXJjZXxTdHJlYW1JbnRlcmZhY2UgJGJvZHkgTWVzc2FnZSBib2R5LgogICAgICogQHBhcmFtICBzdHJpbmcgJHZlcnNpb24gSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgKICAgICAgICAkbWV0aG9kLAogICAgICAgICR1cmksCiAgICAgICAgYXJyYXkgJGhlYWRlcnMgPSBbXSwKICAgICAgICAkYm9keSA9IG51bGwsCiAgICAgICAgJHZlcnNpb24gPSAnMS4xJwogICAgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIHNpbXBsaWZpZWQgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgU2ltcGxpZmllZCBvcHRpb25zLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgRXh0ZW5kZWQgb3B0aW9ucyBmb3IgdXNlIHdpdGggZ2V0UmVxdWVzdC4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAvLyBTaG91bGQgbWF0Y2ggZGVmYXVsdCB2YWx1ZXMgZm9yIGdldFJlcXVlc3QKICAgICAgICAkZGVmYXVsdHMgPSBbCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbXSwKICAgICAgICAgICAgJ2JvZHknICAgID0+IG51bGwsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xJywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgcmVxdWVzdCB1c2luZyBhIHNpbXBsaWZpZWQgYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG51bGx8c3RyaW5nICRtZXRob2QKICAgICAqIEBwYXJhbSAgbnVsbHxzdHJpbmcgJHVyaQogICAgICogQHBhcmFtICBhcnJheSAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdFdpdGhPcHRpb25zKCRtZXRob2QsICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgJG9wdGlvbnMgPSAkdGhpcy0+cGFyc2VPcHRpb25zKCRvcHRpb25zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRSZXF1ZXN0KAogICAgICAgICAgICAkbWV0aG9kLAogICAgICAgICAgICAkdXJpLAogICAgICAgICAgICAkb3B0aW9uc1snaGVhZGVycyddLAogICAgICAgICAgICAkb3B0aW9uc1snYm9keSddLAogICAgICAgICAgICAkb3B0aW9uc1sndmVyc2lvbiddCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsZWFndWUvb2F1dGgyLWNsaWVudCBsaWJyYXJ5CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgQWxleCBCaWxiaWUgPGhlbGxvQGFsZXhiaWxiaWUuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBAbGluayBodHRwOi8vdGhlcGhwbGVhZ3VlLmNvbS9vYXV0aDItY2xpZW50LyBEb2N1bWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9sZWFndWUvb2F1dGgyLWNsaWVudCBQYWNrYWdpc3QKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3RoZXBocGxlYWd1ZS9vYXV0aDItY2xpZW50IEdpdEh1YgogKi8KCm5hbWVzcGFjZSBMZWFndWVcT0F1dGgyXENsaWVudFxUb29sOwoKdXNlIEJhZE1ldGhvZENhbGxFeGNlcHRpb247CgovKioKICogUHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBmb3IgcmVxdWlyZWQgcGFyYW1ldGVycy4KICovCnRyYWl0IFJlcXVpcmVkUGFyYW1ldGVyVHJhaXQKewogICAgLyoqCiAgICAgKiBDaGVja3MgZm9yIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIGEgaGFzaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEBwYXJhbSAgc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1JlcXVpcmVkUGFyYW1ldGVyKCRuYW1lLCBhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHBhcmFtc1skbmFtZV0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnUmVxdWlyZWQgcGFyYW1ldGVyIG5vdCBwYXNzZWQ6ICIlcyInLAogICAgICAgICAgICAgICAgJG5hbWUKICAgICAgICAgICAgKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGZvciBtdWx0aXBsZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGluIGEgaGFzaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHBhcmFtICBhcnJheSAkbmFtZXMKICAgICAqIEBwYXJhbSAgYXJyYXkgJHBhcmFtcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tSZXF1aXJlZFBhcmFtZXRlcnMoYXJyYXkgJG5hbWVzLCBhcnJheSAkcGFyYW1zKQogICAgewogICAgICAgIGZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkgewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tSZXF1aXJlZFBhcmFtZXRlcigkbmFtZSwgJHBhcmFtcyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL3VyaS1pbnRlcmZhY2VzIiwKICAgICJkZXNjcmlwdGlvbiIgOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgVVJJIHJlcHJlc2VudGF0aW9uIiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAidXJsIiwKICAgICAgICAidXJpIiwKICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgInJmYzM5ODciCiAgICBdLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJob21lcGFnZSI6ICJodHRwOi8vZ2l0aHViLmNvbS90aGVwaHBsZWFndWUvdXJpLWludGVyZmFjZXMiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSIgOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAiZW1haWwiIDogIm55YW1zcHJvZEBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiIDogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICB9CiAgICBdLAogICAgImZ1bmRpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiIDogIl43LjIgfHwgXjguMCIsCiAgICAgICAgImV4dC1qc29uIjogIioiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE5IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyLjkwIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXN0cmljdC1ydWxlcyI6ICJeMC4xMi45IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjAuMTIuMTkiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjguNS4xNSB8fCBeOS41IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJMZWFndWVcXFVyaVxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHB1bml0IjogInBocHVuaXQgLS1jb3ZlcmFnZS10ZXh0IiwKICAgICAgICAicGhwY3MiOiAicGhwLWNzLWZpeGVyIGZpeCAtLWRyeS1ydW4gLS1kaWZmIC12dnYgLS1hbGxvdy1yaXNreT15ZXMgLS1hbnNpIiwKICAgICAgICAicGhwY3M6Zml4IjogInBocC1jcy1maXhlciBmaXggLXZ2diAtLWFsbG93LXJpc2t5PXllcyAtLWFuc2kiLAogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSAtbCBtYXggLWMgcGhwc3Rhbi5uZW9uIHNyYyAtLWFuc2kgLS1tZW1vcnktbGltaXQgMTkyTSIsCiAgICAgICAgInRlc3QiOiBbCiAgICAgICAgICAgICJAcGhwdW5pdCIsCiAgICAgICAgICAgICJAcGhwc3RhbiIsCiAgICAgICAgICAgICJAcGhwY3M6Zml4IgogICAgICAgIF0KICAgIH0sCiAgICAic2NyaXB0cy1kZXNjcmlwdGlvbnMiOiB7CiAgICAgICAgInBocHVuaXQiOiAiUnVucyBwYWNrYWdlIHRlc3Qgc3VpdGUiLAogICAgICAgICJwaHBzdGFuIjogIlJ1bnMgY29tcGxldGUgY29kZWJhc2Ugc3RhdGljIGFuYWx5c2lzIiwKICAgICAgICAicGhwY3MiOiAiUnVucyBjb2Rpbmcgc3R5bGUgdGVzdGluZyIsCiAgICAgICAgInBocGNzOmZpeCI6ICJGaXggY29kaW5nIHN0eWxlIGlzc3VlcyIsCiAgICAgICAgInRlc3QiOiAiUnVucyBhbGwgdGVzdHMiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtaW50bCI6ICJ0byB1c2UgdGhlIElETkEgZmVhdHVyZSIsCiAgICAgICAgInN5bWZvbnkvaW50bCI6ICJ0byB1c2UgdGhlIElETkEgZmVhdHVyZSB2aWEgU3ltZm9ueSBQb2x5ZmlsbCIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTYgaWduYWNlIG55YW1hZ2FuYSBidXRlcmEKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgp0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCnN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCklOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCkNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/AuthorityInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBBdXRob3JpdHlJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgYXV0aG9yaXR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9ydCBjb21wb25lbnQgb2YgdGhlIGF1dGhvcml0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTogP2ludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHVzZXIgaW5mb3JtYXRpb24gY29tcG9uZW50IG9mIHRoZSBhdXRob3JpdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgaG9zdCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgICAgICAgICAgICRob3N0CiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yICAgICAgIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBmb3IgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmluZyBJRE4gc3VwcG9ydCB3aGVuIElETiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbWlzY29uZmlndXJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KD9zdHJpbmcgJGhvc3QpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcG9ydCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBwb3J0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP2ludCAkcG9ydAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoP2ludCAkcG9ydCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBQYXNzd29yZCBpcyBvcHRpb25hbCwgYnV0IHRoZSB1c2VyIGluZm9ybWF0aW9uIE1VU1QgaW5jbHVkZSB0aGUKICAgICAqIHVzZXI7IGEgbnVsbCB2YWx1ZSBmb3IgdGhlIHVzZXIgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB1c2VyCiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdXNlcgogICAgICogQHBhcmFtID9zdHJpbmcgJHBhc3N3b3JkCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oP3N0cmluZyAkdXNlciwgP3N0cmluZyAkcGFzc3dvcmQgPSBudWxsKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/DataPathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIERhdGFQYXRoSW50ZXJmYWNlIGV4dGVuZHMgUGF0aEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBkYXRhIG1pbWUgdHlwZSBhc3NvY2lhdGVkIHRvIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gbWltZXR5cGUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gdGhlIGRlZmF1bHQgbWltZXR5cGUgJ3RleHQvcGxhaW4nLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbWVUeXBlKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWltZSBUeXBlIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcGFyYW1ldGVycyBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgJ2NoYXJzZXQ9VVMtQVNDSUknLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtZXRlcnMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIG1lZGlhdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBtZWRpYXR5cGUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gdGhlIGRlZmF1bHQgcGFyYW1ldGVyICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHNjaGVtZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1lZGlhVHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRhdGEgc3RyaW5nLgogICAgICoKICAgICAqIFJldHJpZXZlcyB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBwYXRoLiBJZiBubyBkYXRhIHBhcnQgaXMgcHJvdmlkZWQgcmV0dXJuCiAgICAgKiBhIGVtcHR5IHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBUZWxscyB3aGV0aGVyIHRoZSBkYXRhIGlzIGJpbmFyeSBzYWZlIGVuY29kZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JpbmFyeURhdGEoKTogYm9vbDsKCiAgICAvKioKICAgICAqIFNhdmUgdGhlIGRhdGEgdG8gYSBzcGVjaWZpYyBmaWxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZShzdHJpbmcgJHBhdGgsIHN0cmluZyAkbW9kZSA9ICd3Jyk6IFxTcGxGaWxlT2JqZWN0OwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aGVyZSB0aGUgZGF0YSBwYXJ0IGlzIGJhc2U2NCBlbmNvZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2Ugd2hlcmUgdGhlIGRhdGEgcGFydCBpcyBiYXNlNjQgZW5jb2RlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CaW5hcnkoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2hlcmUgdGhlIGRhdGEgcGFydCBpcyB1cmwgZW5jb2RlZCBmb2xsb3dpbmcgUkZDMzk4NiBydWxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHdoZXJlIHRoZSBkYXRhIHBhcnQgaXMgdXJsIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXNjaWkoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbWVkaWF0eXBlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgbWVkaWF0eXBlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVXNlcnMgbXVzdCBwcm92aWRlIGVuY29kZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBwYXJhbWV0ZXJzIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIHBhcmFtZXRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXJhbWV0ZXJzKHN0cmluZyAkcGFyYW1ldGVycyk6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/DomainHostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCi8qKgogKiBAZXh0ZW5kcyBcSXRlcmF0b3JBZ2dyZWdhdGU8c3RyaW5nPgogKi8KaW50ZXJmYWNlIERvbWFpbkhvc3RJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBIb3N0SW50ZXJmYWNlLCBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgdG90YWwgbnVtYmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50OwoKICAgIC8qKgogICAgICogSXRlcmF0ZSBvdmVyIHRoZSBEb21haW4gbGFiZWxzLgogICAgICoKICAgICAqIEByZXR1cm4gXEl0ZXJhdG9yPHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IFxJdGVyYXRvcjsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIHNpbmdsZSBob3N0IGxhYmVsLgogICAgICoKICAgICAqIElmIHRoZSBsYWJlbCBvZmZzZXQgaGFzIG5vdCBiZWVuIHNldCwgcmV0dXJucyB0aGUgbnVsbCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJG9mZnNldCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGtleSBmb3IgYSBzcGVjaWZpYyBsYWJlbCBvciBhbGwgdGhlIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJGxhYmVsCiAgICAgKgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyg/c3RyaW5nICRsYWJlbCA9IG51bGwpOiBhcnJheTsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgdGhlIGRvbWFpbiBpcyBhYnNvbHV0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQWJzb2x1dGUoKTogYm9vbDsKCiAgICAvKioKICAgICAqIFByZXBlbmRzIGEgbGFiZWwgdG8gdGhlIGhvc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKHN0cmluZyAkbGFiZWwpOiBzZWxmOwoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIGxhYmVsIHRvIHRoZSBob3N0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKHN0cmluZyAkbGFiZWwpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIGl0cyBSb290IGxhYmVsLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJvb3RMYWJlbCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGl0cyBSb290IGxhYmVsLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFJvb3RMYWJlbCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIHRoZSBtb2RpZmllZCBsYWJlbC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG5ldyBsYWJlbAogICAgICoKICAgICAqIElmICRrZXkgaXMgbm9uLW5lZ2F0aXZlLCB0aGUgYWRkZWQgbGFiZWwgd2lsbCBiZSB0aGUgbGFiZWwgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSBhZGRlZCBsYWJlbCB3aWxsIGJlIHRoZSBsYWJlbCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBrZXkgaXMgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aExhYmVsKGludCAka2V5LCBzdHJpbmcgJGxhYmVsKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aG91dCB0aGUgc3BlY2lmaWVkIGxhYmVsLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgY29tcG9uZW50CiAgICAgKgogICAgICogSWYgJGtleSBpcyBub24tbmVnYXRpdmUsIHRoZSByZW1vdmVkIGxhYmVsIHdpbGwgYmUgdGhlIGxhYmVsIGF0ICRrZXkgcG9zaXRpb24gZnJvbSB0aGUgc3RhcnQuCiAgICAgKiBJZiAka2V5IGlzIG5lZ2F0aXZlLCB0aGUgcmVtb3ZlZCBsYWJlbCB3aWxsIGJlIHRoZSBsYWJlbCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IC4uLiRrZXlzCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUga2V5IGlzIGludmFsaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRMYWJlbChpbnQgLi4uJGtleXMpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/FragmentInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIEZyYWdtZW50SW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVjb2RlZCBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY29kZWQoKTogP3N0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/HostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIEhvc3RJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc2NpaSByZXByZXNlbnRhdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXNjaWkoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHVuaWNvZGUgcmVwcmVzZW50YXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1VuaWNvZGUoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIElQIHZlcnNpb24uCiAgICAgKgogICAgICogSWYgdGhlIGhvc3QgaXMgYSBub3QgYW4gSVAgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXBWZXJzaW9uKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBJUCBjb21wb25lbnQgSWYgdGhlIEhvc3QgaXMgYW4gSVAgYWRkcmVzcy4KICAgICAqCiAgICAgKiBJZiB0aGUgaG9zdCBpcyBhIG5vdCBhbiBJUCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJcCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogVGVsbHMgd2hldGhlciB0aGUgaG9zdCBpcyBhIGRvbWFpbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNEb21haW4oKTogYm9vbDsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgdGhlIGhvc3QgaXMgYW4gSVAgQWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXAoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/IpHostInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIElwSG9zdEludGVyZmFjZSBleHRlbmRzIEhvc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGlzIGFuIElQdjQgYWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXB2NCgpOiBib29sOwogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGlzIGFuIElQdjYgYWRkcmVzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSXB2NigpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lwRnV0dXJlKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBob3N0IGhhcyBhIFpvbmVJZGVudGlmaWVyLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjg3NCNzZWN0aW9uLTQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1pvbmVJZGVudGlmaWVyKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGhvc3Qgd2l0aG91dCBpdHMgem9uZSBpZGVudGlmaWVyIGFjY29yZGluZyB0byBSRkM2ODc0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2Ugd2l0aG91dCB0aGUgaG9zdCB6b25lIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIFJGQzY4NzQKICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY4NzQjc2VjdGlvbi00CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0Wm9uZUlkZW50aWZpZXIoKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/PathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBQYXRoSW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVjb2RlZCBwYXRoLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlZCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwYXRoIGlzIGFic29sdXRlIG9yIHJlbGF0aXZlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBYnNvbHV0ZSgpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcGF0aCBoYXMgYSB0cmFpbGluZyBkZWxpbWl0ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNUcmFpbGluZ1NsYXNoKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgZG90IHNlZ21lbnRzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgbm9ybWFsaXplZCBieSByZW1vdmluZwogICAgICogdGhlIGRvdCBzZWdtZW50LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dERvdFNlZ21lbnRzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggYSBsZWFkaW5nIHNsYXNoLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgd2l0aCBhIGxlYWRpbmcgc2xhc2gKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhMZWFkaW5nU2xhc2goKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXRoIGNvbXBvbmVudCB3aXRob3V0IGEgbGVhZGluZyBzbGFzaAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dExlYWRpbmdTbGFzaCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXRoIGNvbXBvbmVudCB3aXRoIGEgdHJhaWxpbmcgc2xhc2gKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhUcmFpbGluZ1NsYXNoKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgYSB0cmFpbGluZyBzbGFzaC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHBhdGggY29tcG9uZW50IHdpdGhvdXQgYSB0cmFpbGluZyBzbGFzaAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFRyYWlsaW5nU2xhc2goKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/PortInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIFBvcnRJbnRlcmZhY2UgZXh0ZW5kcyBVcmlDb21wb25lbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQb3J0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKTogP2ludDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/QueryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKLyoqCiAqIEBleHRlbmRzIFxJdGVyYXRvckFnZ3JlZ2F0ZTxhcnJheXswOnN0cmluZywgMTpzdHJpbmd8bnVsbH0+CiAqLwppbnRlcmZhY2UgUXVlcnlJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUsIFVyaUNvbXBvbmVudEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1ZXJ5IHNlcGFyYXRvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcGFyYXRvcigpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5L3ZhbHVlIHBhaXJzIHByZXNlbnQgaW4gdGhlIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgYWxsb3dpbmcgdG8gZ28gdGhyb3VnaCBhbGwga2V5L3ZhbHVlIHBhaXJzIGNvbnRhaW5lZCBpbiB0aGlzIG9iamVjdC4KICAgICAqCiAgICAgKiBUaGUgcGFpciBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSB3aGVyZSB0aGUgZmlyc3QgdmFsdWUgaXMgdGhlIHBhaXIga2V5CiAgICAgKiBhbmQgdGhlIHNlY29uZCB2YWx1ZSB0aGUgcGFpciB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUga2V5IG9mIGVhY2ggcGFpciBpcyBhIHN0cmluZwogICAgICogVGhlIHZhbHVlIG9mIGVhY2ggcGFpciBpcyBhIHNjYWxhciBvciB0aGUgbnVsbCB2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gXEl0ZXJhdG9yPGludCwgYXJyYXl7MDpzdHJpbmcsIDE6c3RyaW5nfG51bGx9PgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogXEl0ZXJhdG9yOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBhbGxvd2luZyB0byBnbyB0aHJvdWdoIGFsbCBrZXkvdmFsdWUgcGFpcnMgY29udGFpbmVkIGluIHRoaXMgb2JqZWN0LgogICAgICoKICAgICAqIFRoZSByZXR1cm4gdHlwZSBpcyBhcyBhIEl0ZXJhdG9yIHdoZXJlIGl0cyBvZmZzZXQgaXMgdGhlIHBhaXIga2V5IGFuZCBpdHMgdmFsdWUgdGhlIHBhaXIgdmFsdWUuCiAgICAgKgogICAgICogVGhlIGtleSBvZiBlYWNoIHBhaXIgaXMgYSBzdHJpbmcKICAgICAqIFRoZSB2YWx1ZSBvZiBlYWNoIHBhaXIgaXMgYSBzY2FsYXIgb3IgdGhlIG51bGwgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGl0ZXJhYmxlPHN0cmluZywgc3RyaW5nfG51bGw+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYWlycygpOiBpdGVyYWJsZTsKCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgYSBwYWlyIHdpdGggYSBzcGVjaWZpYyBuYW1lIGV4aXN0cy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWx1ZSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBwYWlyIG5hbWUuCiAgICAgKgogICAgICogSWYgbm8gdmFsdWUgaXMgZm91bmQgbnVsbCBpcyByZXR1cm5lZAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gcGFpciBuYW1lIGFzIGFuIGFycmF5IG9yIGFsbAogICAgICogdGhlIGluc3RhbmNlIHBhaXJzLgogICAgICoKICAgICAqIElmIG5vIHZhbHVlIGlzIGZvdW5kIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxpbnQsIHN0cmluZ3xudWxsPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsKHN0cmluZyAka2V5KTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdG9yZSBQSFAgdmFyaWFibGVzIGFzIGVsZW1lbnRzIG9mIGFuIGFycmF5LgogICAgICoKICAgICAqIFRoZSByZXN1bHQgaXMgc2ltaWxhciBhcyBQSFAgcGFyc2Vfc3RyIHdoZW4gdXNlZCB3aXRoIGl0cwogICAgICogc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCB2YXJpYWJsZSBuYW1lcyBhcmUKICAgICAqIG5vdCBtYW5nbGVkLgogICAgICoKICAgICAqIElmIGEga2V5IGlzIHN1Ym1pdHRlZCBpdCB3aWxsIHJldHVybnMgdGhlIHZhbHVlIGF0dGFjaGVkIHRvIGl0IG9yIG51bGwKICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L3BhcnNlX3N0cgogICAgICogQHNlZSBodHRwczovL3dpa2kucGhwLm5ldC9yZmMvb25fZGVtYW5kX25hbWVfbWFuZ2xpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgJGtleQogICAgICogQHJldHVybiBtaXhlZCAgIHRoZSBjb2xsZWN0aW9uIG9mIHN0b3JlZCBQSFAgdmFyaWFibGVzIG9yIHRoZSBlbXB0eSBhcnJheSBpZiBubyBpbnB1dCBpcyBnaXZlbiwKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhlIHNpbmdsZSB2YWx1ZSBvZiBhIHN0b3JlZCBQSFAgdmFyaWFibGUgb3IgbnVsbCBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGNvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcmFtcyg/c3RyaW5nICRrZXkgPSBudWxsKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFJGQzE3MzggZW5jb2RlZCBxdWVyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvUkZDMTczOCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUkZDMzk4NiBlbmNvZGVkIHF1ZXJ5LgogICAgICoKICAgICAqIEBzZWUgOjpnZXRDb250ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1JGQzM5ODYoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCBhIGRpZmZlcmVudCBzZXBhcmF0b3IuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBxdWVyeSBjb21wb25lbnQgd2l0aCBhIGRpZmZlcmVudCBzZXBhcmF0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTZXBhcmF0b3Ioc3RyaW5nICRzZXBhcmF0b3IpOiBzZWxmOwoKICAgIC8qKgogICAgICogU29ydHMgdGhlIHF1ZXJ5IHN0cmluZyBieSBvZmZzZXQsIG1haW50YWluaW5nIG9mZnNldCB0byBkYXRhIGNvcnJlbGF0aW9ucy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIHF1ZXJ5CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc29ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydCgpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGR1cGxpY2F0ZSBrZXkvdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5IGNvbXBvbmVudCBub3JtYWxpemVkIGJ5IHJlbW92aW5nCiAgICAgKiBkdXBsaWNhdGUgcGFpcnMgd2hvc2Uga2V5L3ZhbHVlIGFyZSB0aGUgc2FtZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXREdXBsaWNhdGVzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgZW1wdHkga2V5L3ZhbHVlIHdoZXJlIHRoZSB2YWx1ZSBpcyB0aGUgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5IGNvbXBvbmVudCBub3JtYWxpemVkIGJ5IHJlbW92aW5nCiAgICAgKiBlbXB0eSBwYWlycy4KICAgICAqCiAgICAgKiBBIHBhaXIgaXMgY29uc2lkZXJlZCBlbXB0eSBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG51bGwgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRFbXB0eVBhaXJzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdoZXJlIG51bWVyaWMgaW5kaWNlcyBhc3NvY2lhdGVkIHRvIFBIUCdzIGFycmF5IGxpa2Uga2V5IGFyZSByZW1vdmVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcXVlcnkgY29tcG9uZW50IG5vcm1hbGl6ZWQgc28gdGhhdCBudW1lcmljIGluZGV4ZXMKICAgICAqIGFyZSByZW1vdmVkIGZyb20gdGhlIHBhaXIga2V5IHZhbHVlLgogICAgICoKICAgICAqIGllLjogdG90b1szXT1iYXJbM10mZm9vPWJhciBiZWNvbWVzIHRvdG9bXT1iYXJbM10mZm9vPWJhcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dE51bWVyaWNJbmRpY2VzKCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIGEgbmV3IGtleS92YWx1ZSBwYWlyIGFkZGVkIHRvIGl0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgcXVlcnkKICAgICAqCiAgICAgKiBJZiB0aGUgcGFpciBhbHJlYWR5IGV4aXN0cyB0aGUgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBleGlzdGluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXQKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYWlyKHN0cmluZyAka2V5LCA/c3RyaW5nICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIG5ldyBwYWlycyBzZXQgdG8gaXQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2RpZmllZCBxdWVyeQogICAgICoKICAgICAqIEBzZWUgOjp3aXRoUGFpcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWVyZ2Uoc3RyaW5nICRxdWVyeSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBrZXlzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgY29tcG9uZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAuLi4ka2V5cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dFBhaXIoc3RyaW5nIC4uLiRrZXlzKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBrZXkvdmFsdWUgcGFpciBhcHBlbmRlZCBhcyBhIG5ldyBwYWlyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgbW9kaWZpZWQgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZFRvKHN0cmluZyAka2V5LCA/c3RyaW5nICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIG5ldyBwYWlycyBhcHBlbmRlZCB0byBpdC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIHF1ZXJ5CiAgICAgKgogICAgICogSWYgdGhlIHBhaXIgYWxyZWFkeSBleGlzdHMgdGhlIHZhbHVlIHdpbGwgYmUgYWRkZWQgdG8gaXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoc3RyaW5nICRxdWVyeSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2RpZmllZCBjb21wb25lbnQgd2l0aG91dCBQSFAncyB2YWx1ZS4KICAgICAqIFBIUCdzIG1hbmdsZWQgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRrZXlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0UGFyYW0oc3RyaW5nIC4uLiRrZXlzKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/SegmentedPathInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCi8qKgogKiBAZXh0ZW5kcyBcSXRlcmF0b3JBZ2dyZWdhdGU8c3RyaW5nPgogKi8KaW50ZXJmYWNlIFNlZ21lbnRlZFBhdGhJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUsIFBhdGhJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIHBhdGggc2VnbWVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxJdGVyYXRvcjxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBcSXRlcmF0b3I7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHBhcmVudCBkaXJlY3RvcnkncyBwYXRoLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlybmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwYXRoIGJhc2VuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZW5hbWUoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmFzZW5hbWUgZXh0ZW5zaW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIHNpbmdsZSBwYXRoIHNlZ21lbnQuCiAgICAgKgogICAgICogSWYgdGhlIHNlZ21lbnQgb2Zmc2V0IGhhcyBub3QgYmVlbiBzZXQsIHJldHVybnMgbnVsbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJG9mZnNldCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGtleSBmb3IgYSBzcGVjaWZpYyBzZWdtZW50LgogICAgICoKICAgICAqIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIG9ubHkgdGhlIGtleXMgYXNzb2NpYXRlZCB3aXRoCiAgICAgKiB0aGUgZ2l2ZW4gdmFsdWUgd2lsbCBiZSByZXR1cm5lZAogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRzZWdtZW50CiAgICAgKgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyg/c3RyaW5nICRzZWdtZW50ID0gbnVsbCk6IGFycmF5OwoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIHNlZ21lbnQgdG8gdGhlIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoc3RyaW5nICRzZWdtZW50KTogc2VsZjsKCiAgICAvKioKICAgICAqIFByZXBlbmRzIGEgc2VnbWVudCB0byB0aGUgcGF0aC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoc3RyaW5nICRzZWdtZW50KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgbW9kaWZpZWQgc2VnbWVudC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG5ldyBzZWdtZW50CiAgICAgKgogICAgICogSWYgJGtleSBpcyBub24tbmVnYXRpdmUsIHRoZSBhZGRlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSBhZGRlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBlbmQuCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHNlZ21lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBrZXkgaXMgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNlZ21lbnQoaW50ICRrZXksID9zdHJpbmcgJHNlZ21lbnQpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IHRoZSBzcGVjaWZpZWQgc2VnbWVudC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIGNvbXBvbmVudAogICAgICoKICAgICAqIElmICRrZXkgaXMgbm9uLW5lZ2F0aXZlLCB0aGUgcmVtb3ZlZCBzZWdtZW50IHdpbGwgYmUgdGhlIHNlZ21lbnQgYXQgJGtleSBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydC4KICAgICAqIElmICRrZXkgaXMgbmVnYXRpdmUsIHRoZSByZW1vdmVkIHNlZ21lbnQgd2lsbCBiZSB0aGUgc2VnbWVudCBhdCAka2V5IHBvc2l0aW9uIGZyb20gdGhlIGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IC4uLiRrZXlzIHJlbWFpbmluZyBrZXlzIHRvIHJlbW92ZQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgSWYgdGhlIGtleSBpcyBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRob3V0U2VnbWVudChpbnQgLi4uJGtleXMpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRob3V0IGR1cGxpY2F0ZSBkZWxpbWl0ZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgcGF0aCBjb21wb25lbnQgbm9ybWFsaXplZCBieSByZW1vdmluZwogICAgICogbXVsdGlwbGUgY29uc2VjdXRpdmUgZW1wdHkgc2VnbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEVtcHR5U2VnbWVudHMoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmVudCBkaXJlY3RvcnkncyBwYXRoLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5zaW9uIGJhc2VuYW1lIG1vZGlmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRGlybmFtZSg/c3RyaW5nICRwYXRoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VuYW1lLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5zaW9uIGJhc2VuYW1lIG1vZGlmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRiYXNlbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEJhc2VuYW1lKD9zdHJpbmcgJGJhc2VuYW1lKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VuYW1lIGV4dGVuc2lvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGV4dGVuc2lvbiBiYXNlbmFtZSBtb2RpZmllZC4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkZXh0ZW5zaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRXh0ZW5zaW9uKD9zdHJpbmcgJGV4dGVuc2lvbik6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriComponentInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBVcmlDb21wb25lbnRJbnRlcmZhY2UgZXh0ZW5kcyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGluc3RhbmNlIGNvbnRlbnQuCiAgICAgKgogICAgICogSWYgdGhlIGluc3RhbmNlIGlzIGRlZmluZWQsIHRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZQogICAgICogc2VsZWN0ZWQgZW5jb2RpbmcgYWxnb3JpdGhtLiBJbiBhbnkgY2FzZSwgdGhlIHZhbHVlIE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcgogICAgICogZGVwZW5kaW5nIG9uIHRoZSBzZWxlY3RlZCBlbmNvZGluZyBhbGdvcml0aG0uCiAgICAgKgogICAgICogVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0byBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4KICAgICAqIG9yIFJGQyAzOTg3IFNlY3Rpb24gMy4gQnkgZGVmYXVsdCB0aGUgY29udGVudCBpcyBlbmNvZGVkIGFjY29yZGluZyB0byBSRkMzOTg2CiAgICAgKgogICAgICogSWYgdGhlIGluc3RhbmNlIGlzIG5vdCBkZWZpbmVkIG51bGwgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGluc3RhbmNlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXMgZGVmaW5lZCwgdGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLAogICAgICogYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMKICAgICAqIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvIFJGQyAzOTg2LCBTZWN0aW9ucyAyIGFuZCAzLgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5zdGFuY2UganNvbiByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXMgZGVmaW5lZCwgdGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLAogICAgICogYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUgYW55IGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMKICAgICAqIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvIFJGQyAzOTg2IG9yIFJGQyAxNzM4LgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBudWxsIGlzIHJldHVybmVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBpdHMgb3B0aW9uYWwgVVJJIGRlbGltaXRlcnMuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgcGVyY2VudC1lbmNvZGVkLCBidXQgTVVTVCBOT1QgZG91YmxlLWVuY29kZSBhbnkKICAgICAqIGNoYXJhY3RlcnMuIFRvIGRldGVybWluZSB3aGF0IGNoYXJhY3RlcnMgdG8gZW5jb2RlLCBwbGVhc2UgcmVmZXIgdG8gUkZDIDM5ODYsCiAgICAgKiBTZWN0aW9ucyAyIGFuZCAzLgogICAgICoKICAgICAqIElmIHRoZSBpbnN0YW5jZSBpcyBub3QgZGVmaW5lZCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVyaUNvbXBvbmVudCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuCiAgICAgKgogICAgICogVXNlcnMgY2FuIHByb3ZpZGUgYm90aCBlbmNvZGVkIGFuZCBkZWNvZGVkIGNvbnRlbnQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgY29tcG9uZW50IGNvbnRlbnQuCiAgICAgKgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRjb250ZW50CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKiBAdGhyb3dzIElkblN1cHBvcnRNaXNzaW5nIGZvciBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmluZyBJRE4gc3VwcG9ydCB3aGVuIElETiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG1pc2NvbmZpZ3VyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQ29udGVudCg/c3RyaW5nICRjb250ZW50KTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIFRocm93YWJsZTsKCmludGVyZmFjZSBVcmlFeGNlcHRpb24gZXh0ZW5kcyBUaHJvd2FibGUKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UriInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKCmludGVyZmFjZSBVcmlJbnRlcmZhY2UgZXh0ZW5kcyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKiBAc2VlIDo6X190b1N0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhIG51bGwgdmFsdWUuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtZSgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGF1dGhvcml0eSBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBzY2hlbWUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIHRoZSBwb3J0IGNvbXBvbmVudCBpcyBub3Qgc2V0IG9yIGlzIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGUgY3VycmVudAogICAgICogc2NoZW1lLCBpdCBTSE9VTEQgTk9UIGJlIGluY2x1ZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIHVzZXIgaW5mb3JtYXRpb24gY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGhvc3QgY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZSwgcGVyIFJGQyAzOTg2CiAgICAgKiBTZWN0aW9uIDMuMi4yLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIb3N0KCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcG9ydCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBhIHBvcnQgaXMgcHJlc2VudCwgYW5kIGl0IGlzIG5vbi1zdGFuZGFyZCBmb3IgdGhlIGN1cnJlbnQgc2NoZW1lLAogICAgICogdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gaXQgYXMgYW4gaW50ZWdlci4gSWYgdGhlIHBvcnQgaXMgdGhlIHN0YW5kYXJkIHBvcnQKICAgICAqIHVzZWQgd2l0aCB0aGUgY3VycmVudCBzY2hlbWUsIHRoaXMgbWV0aG9kIFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBJZiBubyBwb3J0IGlzIHByZXNlbnQsIGFuZCBubyBzY2hlbWUgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4KICAgICAqIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBJZiBubyBwb3J0IGlzIHByZXNlbnQsIGJ1dCBhIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNQVkgcmV0dXJuCiAgICAgKiB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhhdCBzY2hlbWUsIGJ1dCBTSE9VTEQgcmV0dXJuIG51bGwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBUaGUgcGF0aCBjYW4gZWl0aGVyIGJlIGVtcHR5IG9yIGFic29sdXRlIChzdGFydGluZyB3aXRoIGEgc2xhc2gpIG9yCiAgICAgKiByb290bGVzcyAobm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkuIEltcGxlbWVudGF0aW9ucyBNVVNUIHN1cHBvcnQgYWxsCiAgICAgKiB0aHJlZSBzeW50YXhlcy4KICAgICAqCiAgICAgKiBOb3JtYWxseSwgdGhlIGVtcHR5IHBhdGggIiIgYW5kIGFic29sdXRlIHBhdGggIi8iIGFyZSBjb25zaWRlcmVkIGVxdWFsIGFzCiAgICAgKiBkZWZpbmVkIGluIFJGQyA3MjMwIFNlY3Rpb24gMi43LjMuIEJ1dCB0aGlzIG1ldGhvZCBNVVNUIE5PVCBhdXRvbWF0aWNhbGx5CiAgICAgKiBkbyB0aGlzIG5vcm1hbGl6YXRpb24gYmVjYXVzZSBpbiBjb250ZXh0cyB3aXRoIGEgdHJpbW1lZCBiYXNlIHBhdGgsIGUuZy4KICAgICAqIHRoZSBmcm9udCBjb250cm9sbGVyLCB0aGlzIGRpZmZlcmVuY2UgYmVjb21lcyBzaWduaWZpY2FudC4gSXQncyB0aGUgdGFzawogICAgICogb2YgdGhlIHVzZXIgdG8gaGFuZGxlIGJvdGggIiIgYW5kICIvIi4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuMy4KICAgICAqCiAgICAgKiBBcyBhbiBleGFtcGxlLCBpZiB0aGUgdmFsdWUgc2hvdWxkIGluY2x1ZGUgYSBzbGFzaCAoIi8iKSBub3QgaW50ZW5kZWQgYXMKICAgICAqIGRlbGltaXRlciBiZXR3ZWVuIHBhdGggc2VnbWVudHMsIHRoYXQgdmFsdWUgTVVTVCBiZSBwYXNzZWQgaW4gZW5jb2RlZAogICAgICogZm9ybSAoZS5nLiwgIiUyRiIpIHRvIHRoZSBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZnJhZ21lbnQgY29tcG9uZW50IG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gaG9zdCBpcyBwcmVzZW50IHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgbnVsbCB2YWx1ZS4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiIyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBmcmFnbWVudCBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy41LgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy41CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFnbWVudCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc2NoZW1lLgogICAgICoKICAgICAqIEEgbnVsbCB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRzY2hlbWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoP3N0cmluZyAkc2NoZW1lKTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIFBhc3N3b3JkIGlzIG9wdGlvbmFsLCBidXQgdGhlIHVzZXIgaW5mb3JtYXRpb24gTVVTVCBpbmNsdWRlIHRoZQogICAgICogdXNlcjsgYSBudWxsIHZhbHVlIGZvciB0aGUgdXNlciBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHVzZXIKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICR1c2VyCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkcGFzc3dvcmQKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbyg/c3RyaW5nICR1c2VyLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOiBzZWxmOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgaG9zdCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkaG9zdAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgICAgICAgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBmb3IgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJpbmcgSUROIHN1cHBvcnQgd2hlbiBJRE4gc3VwcG9ydCBpcyBub3QgcHJlc2VudAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtaXNjb25maWd1cmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhvc3QoP3N0cmluZyAkaG9zdCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBwb3J0IGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIHBvcnQKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/aW50ICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCg/aW50ICRwb3J0KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwYXRoLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBwYXRoIGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFBhdGgoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGZvciBpbnZhbGlkIGNvbXBvbmVudCBvciB0cmFuc2Zvcm1hdGlvbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBvYmplY3QgaW4gaW52YWxpZCBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXRoKHN0cmluZyAkcGF0aCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogVXNlcnMgY2FuIHByb3ZpZGUgYm90aCBlbmNvZGVkIGFuZCBkZWNvZGVkIHF1ZXJ5IGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFF1ZXJ5KCkuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcXVlcnkgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcXVlcnkKICAgICAqIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRxdWVyeQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgZm9yIGludmFsaWQgY29tcG9uZW50IG9yIHRyYW5zZm9ybWF0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIG9iamVjdCBpbiBpbnZhbGlkIHN0YXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KD9zdHJpbmcgJHF1ZXJ5KTogc2VsZjsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIFVSSSBmcmFnbWVudC4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgZnJhZ21lbnQgY2hhcmFjdGVycy4KICAgICAqIEltcGxlbWVudGF0aW9ucyBlbnN1cmUgdGhlIGNvcnJlY3QgZW5jb2RpbmcgYXMgb3V0bGluZWQgaW4gZ2V0RnJhZ21lbnQoKS4KICAgICAqCiAgICAgKiBBIG51bGwgdmFsdWUgcHJvdmlkZWQgZm9yIHRoZSBmcmFnbWVudCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBmcmFnbWVudAogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJGZyYWdtZW50CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBmb3IgaW52YWxpZCBjb21wb25lbnQgb3IgdHJhbnNmb3JtYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgd291bGQgcmVzdWx0IGluIGEgb2JqZWN0IGluIGludmFsaWQgc3RhdGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoP3N0cmluZyAkZnJhZ21lbnQpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Contracts/UserInfoInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcQ29udHJhY3RzOwoKaW50ZXJmYWNlIFVzZXJJbmZvSW50ZXJmYWNlIGV4dGVuZHMgVXJpQ29tcG9uZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdXNlciBjb21wb25lbnQgcGFydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXIoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHBhc3MgY29tcG9uZW50IHBhcnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXNzKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1c2VyIGFuZC9vciBwYXNzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHVzZXIuCiAgICAgKgogICAgICogQW4gZW1wdHkgdXNlciBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICR1c2VyCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkcGFzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVzZXJJbmZvKD9zdHJpbmcgJHVzZXIsID9zdHJpbmcgJHBhc3MgPSBudWxsKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/FileinfoSupportMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBGaWxlaW5mb1N1cHBvcnRNaXNzaW5nIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/IdnaConversionFailed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXElkbmFcSWRuYUluZm87CgpmaW5hbCBjbGFzcyBJZG5hQ29udmVyc2lvbkZhaWxlZCBleHRlbmRzIFN5bnRheEVycm9yCnsKICAgIC8qKiBAdmFyIElkbmFJbmZvfG51bGwgICovCiAgICBwcml2YXRlICRpZG5hSW5mbzsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkbWVzc2FnZSwgSWRuYUluZm8gJGlkbmFJbmZvID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgICAgICAkdGhpcy0+aWRuYUluZm8gPSAkaWRuYUluZm87CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb0lETkFFcnJvcihzdHJpbmcgJGRvbWFpbiwgSWRuYUluZm8gJGlkbmFJbmZvKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJ1RoZSBob3N0IGAnLiRkb21haW4uJ2AgaXMgaW52YWxpZCA6ICcuaW1wbG9kZSgnLCAnLCAkaWRuYUluZm8tPmVycm9yTGlzdCgpKS4nIC4nLAogICAgICAgICAgICAkaWRuYUluZm8KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVlVG9JbnZhbGlkSG9zdChzdHJpbmcgJGRvbWFpbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJ1RoZSBob3N0IGAnLiRkb21haW4uJ2AgaXMgbm90IGEgdmFsaWQgSUROIGhvc3QnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaWRuYUluZm8oKTogP0lkbmFJbmZvCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pZG5hSW5mbzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/IdnSupportMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBJZG5TdXBwb3J0TWlzc2luZyBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uIGltcGxlbWVudHMgVXJpRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Exceptions/SyntaxError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/Idna.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcSWRuYTsKCnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcSWRuYUNvbnZlcnNpb25GYWlsZWQ7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcSWRuU3VwcG9ydE1pc3Npbmc7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcU3ludGF4RXJyb3I7CnVzZSBmdW5jdGlvbiBkZWZpbmVkOwp1c2UgZnVuY3Rpb24gZnVuY3Rpb25fZXhpc3RzOwp1c2UgZnVuY3Rpb24gaWRuX3RvX2FzY2lpOwp1c2UgZnVuY3Rpb24gaWRuX3RvX3V0Zjg7CnVzZSBmdW5jdGlvbiByYXd1cmxkZWNvZGU7CnVzZSBjb25zdCBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NjsKCi8qKgogKiBAc2VlIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0Yy91aWRuYV84aC5odG1sCiAqLwpmaW5hbCBjbGFzcyBJZG5hCnsKICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0lETkFfUEFUVEVSTiA9ICcvW15ceDIwLVx4N2ZdLyc7CiAgICBwcml2YXRlIGNvbnN0IE1BWF9ET01BSU5fTEVOR1RIID0gMjUzOwogICAgcHJpdmF0ZSBjb25zdCBNQVhfTEFCRUxfTEVOR1RIID0gNjM7CgogICAgLyoqCiAgICAgKiBHZW5lcmFsIHJlZ2lzdGVyZWQgbmFtZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvZnB0VThWLzEKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfUkVHSVNURVJFRF9OQU1FID0gJy8KICAgICAgICAoPyhERUZJTkUpCiAgICAgICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1dKSAgICMgLiBpcyBtaXNzaW5nIGFzIGl0IGlzIHVzZWQgdG8gc2VwYXJhdGUgbGFiZWxzCiAgICAgICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PV0pCiAgICAgICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgICAgICAgICAoPzxyZWdfbmFtZT4oPzooPyZ1bnJlc2VydmVkKXwoPyZzdWJfZGVsaW1zKXwoPyZlbmNvZGVkKSkqKQogICAgICAgICkKICAgICAgICAgICAgXig/Oig/JnJlZ19uYW1lKVwuKSooPyZyZWdfbmFtZSlcLj8kCiAgICAgICAgL2l4JzsKCiAgICAvKioKICAgICAqIElETkEgb3B0aW9ucy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETkFfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgPSAwOwogICAgcHVibGljIGNvbnN0IElETkFfQUxMT1dfVU5BU1NJR05FRCAgICAgICAgICAgPSAxOwogICAgcHVibGljIGNvbnN0IElETkFfVVNFX1NURDNfUlVMRVMgICAgICAgICAgICAgPSAyOwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQklESSAgICAgICAgICAgICAgICAgPSA0OwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQ09OVEVYVEogICAgICAgICAgICAgPSA4OwogICAgcHVibGljIGNvbnN0IElETkFfTk9OVFJBTlNJVElPTkFMX1RPX0FTQ0lJICAgPSAweDEwOwogICAgcHVibGljIGNvbnN0IElETkFfTk9OVFJBTlNJVElPTkFMX1RPX1VOSUNPREUgPSAweDIwOwogICAgcHVibGljIGNvbnN0IElETkFfQ0hFQ0tfQ09OVEVYVE8gICAgICAgICAgICAgPSAweDQwOwoKICAgIC8qKgogICAgICogSUROQSBlcnJvcnMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJPUl9OT05FICAgICAgICAgICAgICAgICAgID0gMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9FTVBUWV9MQUJFTCAgICAgICAgICAgID0gMTsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MQUJFTF9UT09fTE9ORyAgICAgICAgID0gMjsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9ET01BSU5fTkFNRV9UT09fTE9ORyAgID0gNDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MRUFESU5HX0hZUEhFTiAgICAgICAgID0gODsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9UUkFJTElOR19IWVBIRU4gICAgICAgID0gMHgxMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9IWVBIRU5fM180ICAgICAgICAgICAgID0gMHgyMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9MRUFESU5HX0NPTUJJTklOR19NQVJLID0gMHg0MDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9ESVNBTExPV0VEICAgICAgICAgICAgID0gMHg4MDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9QVU5ZQ09ERSAgICAgICAgICAgICAgID0gMHgxMDA7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfTEFCRUxfSEFTX0RPVCAgICAgICAgICA9IDB4MjAwOwogICAgcHVibGljIGNvbnN0IEVSUk9SX0lOVkFMSURfQUNFX0xBQkVMICAgICAgPSAweDQwMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9CSURJICAgICAgICAgICAgICAgICAgID0gMHg4MDA7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfQ09OVEVYVEogICAgICAgICAgICAgICA9IDB4MTAwMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9DT05URVhUT19QVU5DVFVBVElPTiAgID0gMHgyMDAwOwogICAgcHVibGljIGNvbnN0IEVSUk9SX0NPTlRFWFRPX0RJR0lUUyAgICAgICAgPSAweDQwMDA7CgogICAgLyoqCiAgICAgKiBJRE5BIGRlZmF1bHQgb3B0aW9ucy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETkEyMDA4X0FTQ0lJID0gc2VsZjo6SUROQV9OT05UUkFOU0lUSU9OQUxfVE9fQVNDSUkKICAgICAgICB8IHNlbGY6OklETkFfQ0hFQ0tfQklESQogICAgICAgIHwgc2VsZjo6SUROQV9VU0VfU1REM19SVUxFUwogICAgICAgIHwgc2VsZjo6SUROQV9DSEVDS19DT05URVhUSjsKICAgIHB1YmxpYyBjb25zdCBJRE5BMjAwOF9VTklDT0RFID0gc2VsZjo6SUROQV9OT05UUkFOU0lUSU9OQUxfVE9fVU5JQ09ERQogICAgICAgIHwgc2VsZjo6SUROQV9DSEVDS19CSURJCiAgICAgICAgfCBzZWxmOjpJRE5BX1VTRV9TVEQzX1JVTEVTCiAgICAgICAgfCBzZWxmOjpJRE5BX0NIRUNLX0NPTlRFWFRKOwoKICAgIC8qKgogICAgICogQGNvZGVDb3ZlcmFnZUlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0c0lkbmEoKTogdm9pZAogICAgewogICAgICAgIHN0YXRpYyAkaWRuU3VwcG9ydDsKICAgICAgICBpZiAobnVsbCA9PT0gJGlkblN1cHBvcnQpIHsKICAgICAgICAgICAgJGlkblN1cHBvcnQgPSBmdW5jdGlvbl9leGlzdHMoJ1xpZG5fdG9fYXNjaWknKSAmJiBkZWZpbmVkKCdcSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYnKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGlkblN1cHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElkblN1cHBvcnRNaXNzaW5nKCdJRE4gaG9zdCBjYW4gbm90IGJlIHByb2Nlc3NlZC4gVmVyaWZ5IHRoYXQgZXh0L2ludGwgaXMgaW5zdGFsbGVkIGZvciBJRE4gc3VwcG9ydCBhbmQgdGhhdCBJQ1UgaXMgYXQgbGVhc3QgdmVyc2lvbiA0LjYuJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIGlucHV0IHRvIGl0cyBJRE5BIEFTQ0lJIGZvcm0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBJRE4gQVNDSUkgZm9ybQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB1c2luZyBJRE4gVVRTNDYgYWxnb3JpdGhtCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9Bc2NpaShzdHJpbmcgJGRvbWFpbiwgaW50ICRvcHRpb25zKTogSWRuYUluZm8KICAgIHsKICAgICAgICAkZG9tYWluID0gcmF3dXJsZGVjb2RlKCRkb21haW4pOwoKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSUROQV9QQVRURVJOLCAkZG9tYWluKSkgewogICAgICAgICAgICBzZWxmOjpzdXBwb3J0c0lkbmEoKTsKCiAgICAgICAgICAgIC8qIEBwYXJhbS1vdXQgYXJyYXl7ZXJyb3JzOiBpbnQsIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OiBib29sLCByZXN1bHQ6IHN0cmluZ30gJGlkbmFJbmZvICovCiAgICAgICAgICAgIGlkbl90b19hc2NpaSgkZG9tYWluLCAkb3B0aW9ucywgSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYsICRpZG5hSW5mbyk7CiAgICAgICAgICAgIGlmIChbXSA9PT0gJGlkbmFJbmZvKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKFsKICAgICAgICAgICAgICAgICAgICAncmVzdWx0JyA9PiBzdHJ0b2xvd2VyKCRkb21haW4pLAogICAgICAgICAgICAgICAgICAgICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ2Vycm9ycycgPT4gc2VsZjo6dmFsaWRhdGVEb21haW5BbmRMYWJlbExlbmd0aCgkZG9tYWluKSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBAdmFyIGFycmF5e2Vycm9yczogaW50LCBpc1RyYW5zaXRpb25hbERpZmZlcmVudDogYm9vbCwgcmVzdWx0OiBzdHJpbmd9ICRpZG5hSW5mbyAqLwogICAgICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKCRpZG5hSW5mbyk7CiAgICAgICAgfQoKICAgICAgICAkZXJyb3IgPSBzZWxmOjpFUlJPUl9OT05FOwogICAgICAgIGlmICgxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9SRUdJU1RFUkVEX05BTUUsICRkb21haW4pKSB7CiAgICAgICAgICAgICRlcnJvciB8PSBzZWxmOjpFUlJPUl9ESVNBTExPV0VEOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIElkbmFJbmZvOjpmcm9tSW50bChbCiAgICAgICAgICAgICdyZXN1bHQnID0+IHN0cnRvbG93ZXIoJGRvbWFpbiksCiAgICAgICAgICAgICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdlcnJvcnMnID0+IHNlbGY6OnZhbGlkYXRlRG9tYWluQW5kTGFiZWxMZW5ndGgoJGRvbWFpbikgfCAkZXJyb3IsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgdG8gaXRzIElETkEgVU5JQ09ERSBmb3JtLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gSUROIFVOSUNPREUgZm9ybQogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN0cmluZyBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBVTklDT0RFIHVzaW5nIElETiBVVFM0NiBhbGdvcml0aG0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b1VuaWNvZGUoc3RyaW5nICRkb21haW4sIGludCAkb3B0aW9ucyk6IElkbmFJbmZvCiAgICB7CiAgICAgICAgJGRvbWFpbiA9IHJhd3VybGRlY29kZSgkZG9tYWluKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzdHJpcG9zKCRkb21haW4sICd4bi0tJykpIHsKICAgICAgICAgICAgcmV0dXJuIElkbmFJbmZvOjpmcm9tSW50bChbJ3Jlc3VsdCcgPT4gJGRvbWFpbiwgJ2lzVHJhbnNpdGlvbmFsRGlmZmVyZW50JyA9PiBmYWxzZSwgJ2Vycm9ycycgPT4gc2VsZjo6RVJST1JfTk9ORV0pOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6c3VwcG9ydHNJZG5hKCk7CgogICAgICAgIC8qIEBwYXJhbS1vdXQgYXJyYXl7ZXJyb3JzOiBpbnQsIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OiBib29sLCByZXN1bHQ6IHN0cmluZ30gJGlkbmFJbmZvICovCiAgICAgICAgaWRuX3RvX3V0ZjgoJGRvbWFpbiwgJG9wdGlvbnMsIElOVExfSUROQV9WQVJJQU5UX1VUUzQ2LCAkaWRuYUluZm8pOwogICAgICAgIGlmIChbXSA9PT0gJGlkbmFJbmZvKSB7CiAgICAgICAgICAgIHRocm93IElkbmFDb252ZXJzaW9uRmFpbGVkOjpkdWVUb0ludmFsaWRIb3N0KCRkb21haW4pOwogICAgICAgIH0KCiAgICAgICAgLyogQHZhciBhcnJheXtlcnJvcnM6IGludCwgaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQ6IGJvb2wsIHJlc3VsdDogc3RyaW5nfSAkaWRuYUluZm8gKi8KICAgICAgICByZXR1cm4gSWRuYUluZm86OmZyb21JbnRsKCRpZG5hSW5mbyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1RSb3dib3RoYW0vaWRuYS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9UUm93Ym90aGFtL2lkbmEvYmxvYi9tYXN0ZXIvc3JjL0lkbmEucGhwI0wyMzYKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVEb21haW5BbmRMYWJlbExlbmd0aChzdHJpbmcgJGRvbWFpbik6IGludAogICAgewogICAgICAgICRlcnJvciA9IHNlbGY6OkVSUk9SX05PTkU7CiAgICAgICAgJGxhYmVscyA9IGV4cGxvZGUoJy4nLCAkZG9tYWluKTsKICAgICAgICAkbWF4RG9tYWluU2l6ZSA9IHNlbGY6Ok1BWF9ET01BSU5fTEVOR1RIOwogICAgICAgICRsZW5ndGggPSBjb3VudCgkbGFiZWxzKTsKCiAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGFiZWwgaXMgZW1wdHkgYW5kIGl0IGlzIG5vdCB0aGUgZmlyc3QgbGFiZWwsIHRoZW4gaXQgaXMgdGhlIHJvb3QgbGFiZWwuCiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIG1heCBzaXplIGJ5IDEsIG1ha2luZyBpdCAyNTQsIHRvIGFjY291bnQgZm9yIHRoZSByb290IGxhYmVsJ3MgIi4iCiAgICAgICAgLy8gZGVsaW1pdGVyLiBUaGlzIGFsc28gbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbGFzdCBsYWJlbCdzIGxlbmd0aCBmb3IgYmVpbmcgdG9vCiAgICAgICAgLy8gbG9uZy4KICAgICAgICBpZiAoJGxlbmd0aCA+IDEgJiYgJGxhYmVsc1skbGVuZ3RoIC0gMV0gPT09ICcnKSB7CiAgICAgICAgICAgICsrJG1heERvbWFpblNpemU7CiAgICAgICAgICAgIGFycmF5X3BvcCgkbGFiZWxzKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJGRvbWFpbikgPiAkbWF4RG9tYWluU2l6ZSkgewogICAgICAgICAgICAkZXJyb3IgfD0gc2VsZjo6RVJST1JfRE9NQUlOX05BTUVfVE9PX0xPTkc7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkbGFiZWxzIGFzICRsYWJlbCkgewogICAgICAgICAgICBpZiAoc3RybGVuKCRsYWJlbCkgPiBzZWxmOjpNQVhfTEFCRUxfTEVOR1RIKSB7CiAgICAgICAgICAgICAgICAkZXJyb3IgfD0gc2VsZjo6RVJST1JfTEFCRUxfVE9PX0xPTkc7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri-interfaces/src/Idna/IdnaInfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcSWRuYTsKCnVzZSBmdW5jdGlvbiBhcnJheV9maWx0ZXI7CnVzZSBjb25zdCBBUlJBWV9GSUxURVJfVVNFX0tFWTsKCi8qKgogKiBAc2VlIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0Yy91aWRuYV84aC5odG1sCiAqLwpmaW5hbCBjbGFzcyBJZG5hSW5mbwp7CiAgICBwcml2YXRlIGNvbnN0IEVSUk9SUyA9IFsKICAgICAgICBJZG5hOjpFUlJPUl9FTVBUWV9MQUJFTCA9PiAnYSBub24tZmluYWwgZG9tYWluIG5hbWUgbGFiZWwgKG9yIHRoZSB3aG9sZSBkb21haW4gbmFtZSkgaXMgZW1wdHknLAogICAgICAgIElkbmE6OkVSUk9SX0xBQkVMX1RPT19MT05HID0+ICdhIGRvbWFpbiBuYW1lIGxhYmVsIGlzIGxvbmdlciB0aGFuIDYzIGJ5dGVzJywKICAgICAgICBJZG5hOjpFUlJPUl9ET01BSU5fTkFNRV9UT09fTE9ORyA9PiAnYSBkb21haW4gbmFtZSBpcyBsb25nZXIgdGhhbiAyNTUgYnl0ZXMgaW4gaXRzIHN0b3JhZ2UgZm9ybScsCiAgICAgICAgSWRuYTo6RVJST1JfTEVBRElOR19IWVBIRU4gPT4gJ2EgbGFiZWwgc3RhcnRzIHdpdGggYSBoeXBoZW4tbWludXMgKCItIiknLAogICAgICAgIElkbmE6OkVSUk9SX1RSQUlMSU5HX0hZUEhFTiA9PiAnYSBsYWJlbCBlbmRzIHdpdGggYSBoeXBoZW4tbWludXMgKCItIiknLAogICAgICAgIElkbmE6OkVSUk9SX0hZUEhFTl8zXzQgPT4gJ2EgbGFiZWwgY29udGFpbnMgaHlwaGVuLW1pbnVzICgiLSIpIGluIHRoZSB0aGlyZCBhbmQgZm91cnRoIHBvc2l0aW9ucycsCiAgICAgICAgSWRuYTo6RVJST1JfTEVBRElOR19DT01CSU5JTkdfTUFSSyA9PiAnYSBsYWJlbCBzdGFydHMgd2l0aCBhIGNvbWJpbmluZyBtYXJrJywKICAgICAgICBJZG5hOjpFUlJPUl9ESVNBTExPV0VEID0+ICdhIGxhYmVsIG9yIGRvbWFpbiBuYW1lIGNvbnRhaW5zIGRpc2FsbG93ZWQgY2hhcmFjdGVycycsCiAgICAgICAgSWRuYTo6RVJST1JfUFVOWUNPREUgPT4gJ2EgbGFiZWwgc3RhcnRzIHdpdGggInhuLS0iIGJ1dCBkb2VzIG5vdCBjb250YWluIHZhbGlkIFB1bnljb2RlJywKICAgICAgICBJZG5hOjpFUlJPUl9MQUJFTF9IQVNfRE9UID0+ICdhIGxhYmVsIGNvbnRhaW5zIGEgZG90PWZ1bGwgc3RvcCcsCiAgICAgICAgSWRuYTo6RVJST1JfSU5WQUxJRF9BQ0VfTEFCRUwgPT4gJ0FuIEFDRSBsYWJlbCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgbGFiZWwgc3RyaW5nJywKICAgICAgICBJZG5hOjpFUlJPUl9CSURJID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQmlEaSByZXF1aXJlbWVudHMgKGZvciByaWdodC10by1sZWZ0IGNoYXJhY3RlcnMpJywKICAgICAgICBJZG5hOjpFUlJPUl9DT05URVhUSiA9PiAnYSBsYWJlbCBkb2VzIG5vdCBtZWV0IHRoZSBJRE5BIENPTlRFWFRKIHJlcXVpcmVtZW50cycsCiAgICAgICAgSWRuYTo6RVJST1JfQ09OVEVYVE9fRElHSVRTID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQ09OVEVYVE8gcmVxdWlyZW1lbnRzIGZvciBkaWdpdHMnLAogICAgICAgIElkbmE6OkVSUk9SX0NPTlRFWFRPX1BVTkNUVUFUSU9OID0+ICdhIGxhYmVsIGRvZXMgbm90IG1lZXQgdGhlIElETkEgQ09OVEVYVE8gcmVxdWlyZW1lbnRzIGZvciBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLiBTb21lIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgIldvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gRElTQUxMT1dFRCIgYnV0IGFyZSBhbGxvd2VkIGluIGNlcnRhaW4gY29udGV4dHMnLAogICAgXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHJlc3VsdDsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRpc1RyYW5zaXRpb25hbERpZmZlcmVudDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJGVycm9yczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yTGlzdDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcmVzdWx0LCBib29sICRpc1RyYW5zaXRpb25hbERpZmZlcmVudCwgaW50ICRlcnJvcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc3VsdCA9ICRyZXN1bHQ7CiAgICAgICAgJHRoaXMtPmVycm9ycyA9ICRlcnJvcnM7CiAgICAgICAgJHRoaXMtPmlzVHJhbnNpdGlvbmFsRGlmZmVyZW50ID0gJGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OwogICAgICAgICR0aGlzLT5lcnJvckxpc3QgPSBhcnJheV9maWx0ZXIoCiAgICAgICAgICAgIHNlbGY6OkVSUk9SUywKICAgICAgICAgICAgZnVuY3Rpb24gKGludCAkZXJyb3IpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAwICE9PSAoJGVycm9yICYgJHRoaXMtPmVycm9ycyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFSUkFZX0ZJTFRFUl9VU0VfS0VZCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtyZXN1bHQ6c3RyaW5nLCBpc1RyYW5zaXRpb25hbERpZmZlcmVudDpib29sLCBlcnJvcnM6aW50fSAkaW5mb3MKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tSW50bChhcnJheSAkaW5mb3MpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRpbmZvc1sncmVzdWx0J10sICRpbmZvc1snaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQnXSwgJGluZm9zWydlcnJvcnMnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXl7cmVzdWx0OnN0cmluZywgaXNUcmFuc2l0aW9uYWxEaWZmZXJlbnQ6Ym9vbCwgZXJyb3JzOmludH0gJHByb3BlcnRpZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6ZnJvbUludGwoJHByb3BlcnRpZXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXN1bHQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVHJhbnNpdGlvbmFsRGlmZmVyZW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzVHJhbnNpdGlvbmFsRGlmZmVyZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvcnMoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvcnM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKGludCAkZXJyb3IpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvckxpc3RbJGVycm9yXSA/PyBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxpbnQsIHN0cmluZz4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yTGlzdCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXJyb3JMaXN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAibGVhZ3VlL3VyaSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiIgOiAiVVJJIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IiwKICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAidXJsIiwKICAgICAgICAidXJpIiwKICAgICAgICAicmZjMzk4NiIsCiAgICAgICAgInJmYzM5ODciLAogICAgICAgICJyZmM2NTcwIiwKICAgICAgICAicHNyLTciLAogICAgICAgICJwYXJzZV91cmwiLAogICAgICAgICJodHRwIiwKICAgICAgICAiaHR0cHMiLAogICAgICAgICJ3cyIsCiAgICAgICAgImZ0cCIsCiAgICAgICAgImRhdGEtdXJpIiwKICAgICAgICAiZmlsZS11cmkiLAogICAgICAgICJtaWRkbGV3YXJlIiwKICAgICAgICAicGFyc2Vfc3RyIiwKICAgICAgICAicXVlcnktc3RyaW5nIiwKICAgICAgICAicXVlcnlzdHJpbmciLAogICAgICAgICJob3N0bmFtZSIsCiAgICAgICAgInVyaS10ZW1wbGF0ZSIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vdXJpLnRoZXBocGxlYWd1ZS5jb20iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSIgOiAiSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEiLAogICAgICAgICAgICAiZW1haWwiIDogIm55YW1zcHJvZEBnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiIDogImh0dHBzOi8vbnlhbXNwcm9kLmNvbSIKICAgICAgICB9CiAgICBdLAogICAgInN1cHBvcnQiOiB7CiAgICAgICAgImZvcnVtIjogImh0dHBzOi8vdGhlcGhwbGVhZ3VlLnNsYWNrLmNvbSIsCiAgICAgICAgImRvY3MiOiAiaHR0cHM6Ly91cmkudGhlcGhwbGVhZ3VlLmNvbSIsCiAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlcGhwbGVhZ3VlL3VyaS9pc3N1ZXMiCiAgICB9LAogICAgImZ1bmRpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ueWFtc3Byb2QiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuNCB8fCBeOC4wIiwKICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCIsCiAgICAgICAgImxlYWd1ZS91cmktaW50ZXJmYWNlcyI6ICJeMi4zIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAiZnJpZW5kc29mcGhwL3BocC1jcy1maXhlciI6ICJedjMuMy4yIiwKICAgICAgICAibnlob2xtL3BzcjciOiAiXjEuNSIsCiAgICAgICAgInBocC1odHRwL3BzcjctaW50ZWdyYXRpb24tdGVzdHMiOiAiXjEuMSIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS4yLjAiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjAuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMS4wIiwKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl45LjUuMTAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVxcVXJpXFwiOiAic3JjIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkxlYWd1ZVRlc3RcXFVyaVxcIjogInRlc3RzIgogICAgICAgIH0KICAgIH0sCiAgICAiY29uZmxpY3QiOiB7CiAgICAgICAgImxlYWd1ZS91cmktc2NoZW1lcyI6ICJeMS4wIgogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHBjcyI6ICJwaHAtY3MtZml4ZXIgZml4IC12IC0tZGlmZiAtLWRyeS1ydW4gLS1hbGxvdy1yaXNreT15ZXMgLS1hbnNpIiwKICAgICAgICAicGhwY3M6Zml4IjogInBocC1jcy1maXhlciBmaXggLXZ2diAtLWFsbG93LXJpc2t5PXllcyAtLWFuc2kiLAogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSAtbCBtYXggLWMgcGhwc3Rhbi5uZW9uIHNyYyAtLWFuc2kgLS1tZW1vcnktbGltaXQ9MjU2TSIsCiAgICAgICAgInBocHVuaXQiOiAiWERFQlVHX01PREU9Y292ZXJhZ2UgcGhwdW5pdCAtLWNvdmVyYWdlLXRleHQiLAogICAgICAgICJ0ZXN0IjogWwogICAgICAgICAgICAiQHBocHVuaXQiLAogICAgICAgICAgICAiQHBocHN0YW4iLAogICAgICAgICAgICAiQHBocGNzIgogICAgICAgIF0KICAgIH0sCiAgICAic2NyaXB0cy1kZXNjcmlwdGlvbnMiOiB7CiAgICAgICAgInBocGNzIjogIlJ1bnMgY29kaW5nIHN0eWxlIHRlc3Qgc3VpdGUiLAogICAgICAgICJwaHBzdGFuIjogIlJ1bnMgY29tcGxldGUgY29kZWJhc2Ugc3RhdGljIGFuYWx5c2lzIiwKICAgICAgICAicGhwdW5pdCI6ICJSdW5zIHVuaXQgYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyIsCiAgICAgICAgInRlc3QiOiAiUnVucyBmdWxsIHRlc3Qgc3VpdGUiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImxlYWd1ZS91cmktY29tcG9uZW50cyIgOiAiTmVlZGVkIHRvIGVhc2lseSBtYW5pcHVsYXRlIFVSSSBvYmplY3RzIiwKICAgICAgICAiZXh0LWludGwiIDogIk5lZWRlZCB0byBpbXByb3ZlIGhvc3QgdmFsaWRhdGlvbiIsCiAgICAgICAgImV4dC1maWxlaW5mbyI6ICJOZWVkZWQgdG8gY3JlYXRlIERhdGEgVVJJIGZyb20gYSBmaWxlcGF0aCIsCiAgICAgICAgInBzci9odHRwLWZhY3RvcnkiOiAiTmVlZGVkIHRvIHVzZSB0aGUgVVJJIGZhY3RvcnkiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgaWduYWNlIG55YW1hZ2FuYSBidXRlcmEKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgp0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCnN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCklOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCkNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Exceptions/TemplateCanNotBeExpanded.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uczsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlFeGNlcHRpb247CgpjbGFzcyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVcmlFeGNlcHRpb24KewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb1VuYWJsZVRvUHJvY2Vzc1ZhbHVlTGlzdFdpdGhQcmVmaXgoc3RyaW5nICR2YXJpYWJsZU5hbWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdUaGUgIjoiIG1vZGlmaWVyIGNhbiBub3QgYmUgYXBwbGllZCBvbiAiJy4kdmFyaWFibGVOYW1lLiciIHNpbmNlIGl0IGlzIGEgbGlzdCBvZiB2YWx1ZXMuJyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdWVUb05lc3RlZExpc3RPZlZhbHVlKHN0cmluZyAkdmFyaWFibGVOYW1lKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZignVGhlICInLiR2YXJpYWJsZU5hbWUuJyIgY2FuIG5vdCBiZSBhIG5lc3RlZCBsaXN0LicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Http.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIExlYWd1ZVxVcmlcQ29udHJhY3RzXFVyaUludGVyZmFjZTsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlIGFzIFBzcjdVcmlJbnRlcmZhY2U7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19zY2FsYXI7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIEh0dHAgaW1wbGVtZW50cyBQc3I3VXJpSW50ZXJmYWNlLCBKc29uU2VyaWFsaXphYmxlCnsKICAgIHByaXZhdGUgVXJpSW50ZXJmYWNlICR1cmk7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChVcmlJbnRlcmZhY2UgJHVyaSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoJHVyaSk7CiAgICAgICAgJHRoaXMtPnVyaSA9ICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSB0aGUgc3VibWl0dGVkIHVyaSBhZ2FpbnN0IFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBnaXZlbiBVUkkgZG9lcyBub3QgZm9sbG93IFBTUi03IFVyaUludGVyZmFjZSBydWxlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlKFVyaUludGVyZmFjZSAkdXJpKTogdm9pZAogICAgewogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSAmJiAnJyA9PT0gJHVyaS0+Z2V0SG9zdCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdhbiBVUkkgd2l0aG91dCBzY2hlbWUgY2FuIG5vdCBjb250YWlucyBhIGVtcHR5IGhvc3Qgc3RyaW5nIGFjY29yZGluZyB0byBQU1ItNzogJXMnLCAoc3RyaW5nKSAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICAkcG9ydCA9ICR1cmktPmdldFBvcnQoKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHBvcnQgJiYgKCRwb3J0IDwgMCB8fCAkcG9ydCA+IDY1NTM1KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIFVSSSBwb3J0IGlzIG91dHNpZGUgdGhlIGVzdGFibGlzaGVkIFRDUCBhbmQgVURQIHBvcnQgcmFuZ2VzOiAlcycsIChzdHJpbmcpICR1cmktPmdldFBvcnQoKSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFN0YXRpYyBtZXRob2QgY2FsbGVkIGJ5IFBIUCdzIHZhciBleHBvcnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJGNvbXBvbmVudHMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRjb21wb25lbnRzWyd1cmknXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG1peGVkICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKCR1cmkgPSAnJyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoVXJpOjpjcmVhdGVGcm9tU3RyaW5nKCR1cmkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBmcm9tIGEgaGFzaCBvZiBwYXJzZV91cmwgcGFydHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb21wb25lbnRzIGEgaGFzaCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJIHNpbWlsYXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBQSFAgcGFyc2VfdXJsIGZ1bmN0aW9uIHJlc3VsdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db21wb25lbnRzKGFycmF5ICRjb21wb25lbnRzKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihVcmk6OmNyZWF0ZUZyb21Db21wb25lbnRzKCRjb21wb25lbnRzKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlcnZlcihhcnJheSAkc2VydmVyKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihVcmk6OmNyZWF0ZUZyb21TZXJ2ZXIoJHNlcnZlcikpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVUkkgYW5kIGEgQmFzZSBVUkkuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIFVSSSBtdXN0IGJlIGFic29sdXRlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdXJpICAgICAgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqIEBwYXJhbSBtaXhlZCAkYmFzZV91cmkgdGhlIGJhc2UgVVJJIHVzZWQgZm9yIHJlZmVyZW5jZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21CYXNlVXJpKCR1cmksICRiYXNlX3VyaSA9IG51bGwpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKFVyaTo6Y3JlYXRlRnJvbUJhc2VVcmkoJHVyaSwgJGJhc2VfdXJpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIFVSSSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tVXJpKCR1cmkpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCR1cmkgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKFVyaTo6Y3JlYXRlRnJvbVVyaSgkdXJpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY2hlbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzLT51cmktPmdldFNjaGVtZSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yaXR5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRBdXRob3JpdHkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJJbmZvKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRVc2VySW5mbygpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPnVyaS0+Z2V0SG9zdCgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9ydCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmktPmdldFBvcnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmktPmdldFBhdGgoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dXJpLT5nZXRRdWVyeSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhZ21lbnQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzLT51cmktPmdldEZyYWdtZW50KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoU2NoZW1lKCRzY2hlbWUpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzY2hlbWUgKi8KICAgICAgICAkc2NoZW1lID0gJHRoaXMtPmZpbHRlcklucHV0KCRzY2hlbWUpOwogICAgICAgIGlmICgnJyA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICAkc2NoZW1lID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoU2NoZW1lKCRzY2hlbWUpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhZmVseSBzdHJpbmdpZnkgaW5wdXQgd2hlbiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0ciB0aGUgdmFsdWUgdG8gZXZhbHVhdGUgYXMgYSBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBzdWJtaXR0ZWQgZGF0YSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlcklucHV0KCRzdHIpCiAgICB7CiAgICAgICAgaWYgKGlzX3NjYWxhcigkc3RyKSB8fCAoaXNfb2JqZWN0KCRzdHIpICYmIG1ldGhvZF9leGlzdHMoJHN0ciwgJ19fdG9TdHJpbmcnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRzdHI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHVzZXIgKi8KICAgICAgICAkdXNlciA9ICR0aGlzLT5maWx0ZXJJbnB1dCgkdXNlcik7CiAgICAgICAgaWYgKCcnID09PSAkdXNlcikgewogICAgICAgICAgICAkdXNlciA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFVzZXJJbmZvKCR1c2VyLCAkcGFzc3dvcmQpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkaG9zdCAqLwogICAgICAgICRob3N0ID0gJHRoaXMtPmZpbHRlcklucHV0KCRob3N0KTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgICRob3N0ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoSG9zdCgkaG9zdCk7CiAgICAgICAgaWYgKChzdHJpbmcpICR1cmkgPT09IChzdHJpbmcpICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoJHBvcnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHVyaSA9ICR0aGlzLT51cmktPndpdGhQb3J0KCRwb3J0KTsKICAgICAgICBpZiAoKHN0cmluZykgJHVyaSA9PT0gKHN0cmluZykgJHRoaXMtPnVyaSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHVyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aCgkcGF0aCk6IHNlbGYKICAgIHsKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFBhdGgoJHBhdGgpOwogICAgICAgIGlmICgoc3RyaW5nKSAkdXJpID09PSAoc3RyaW5nKSAkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeSgkcXVlcnkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRxdWVyeSAqLwogICAgICAgICRxdWVyeSA9ICR0aGlzLT5maWx0ZXJJbnB1dCgkcXVlcnkpOwogICAgICAgIGlmICgnJyA9PT0gJHF1ZXJ5KSB7CiAgICAgICAgICAgICRxdWVyeSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkdXJpID0gJHRoaXMtPnVyaS0+d2l0aFF1ZXJ5KCRxdWVyeSk7CiAgICAgICAgaWYgKChzdHJpbmcpICR1cmkgPT09IChzdHJpbmcpICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR1cmkpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGZyYWdtZW50ICovCiAgICAgICAgJGZyYWdtZW50ID0gJHRoaXMtPmZpbHRlcklucHV0KCRmcmFnbWVudCk7CiAgICAgICAgaWYgKCcnID09PSAkZnJhZ21lbnQpIHsKICAgICAgICAgICAgJGZyYWdtZW50ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+dXJpLT53aXRoRnJhZ21lbnQoJGZyYWdtZW50KTsKICAgICAgICBpZiAoKHN0cmluZykgJHVyaSA9PT0gKHN0cmluZykgJHRoaXMtPnVyaSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHVyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpLT5fX3RvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpLT5fX3RvU3RyaW5nKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/HttpFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgpmaW5hbCBjbGFzcyBIdHRwRmFjdG9yeSBpbXBsZW1lbnRzIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIEh0dHA6OmNyZWF0ZUZyb21TdHJpbmcoJHVyaSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/Uri.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgZmluZm87CnVzZSBMZWFndWVcVXJpXENvbnRyYWN0c1xVcmlJbnRlcmZhY2U7CnVzZSBMZWFndWVcVXJpXEV4Y2VwdGlvbnNcRmlsZWluZm9TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5hQ29udmVyc2lvbkZhaWxlZDsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xJZG5TdXBwb3J0TWlzc2luZzsKdXNlIExlYWd1ZVxVcmlcRXhjZXB0aW9uc1xTeW50YXhFcnJvcjsKdXNlIExlYWd1ZVxVcmlcSWRuYVxJZG5hOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21hcDsKdXNlIGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBiYXNlNjRfZW5jb2RlOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHBsb2RlOwp1c2UgZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHM7CnVzZSBmdW5jdGlvbiBmaWx0ZXJfdmFyOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gaW5ldF9wdG9uOwp1c2UgZnVuY3Rpb24gaXNfb2JqZWN0Owp1c2UgZnVuY3Rpb24gaXNfc2NhbGFyOwp1c2UgZnVuY3Rpb24gbWV0aG9kX2V4aXN0czsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiBwcmVnX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiBwcmVnX3JlcGxhY2VfY2FsbGJhY2s7CnVzZSBmdW5jdGlvbiByYXd1cmxlbmNvZGU7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBmdW5jdGlvbiBzdHJzcG47CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgY29uc3QgRklMRUlORk9fTUlNRTsKdXNlIGNvbnN0IEZJTFRFUl9GTEFHX0lQVjQ7CnVzZSBjb25zdCBGSUxURVJfRkxBR19JUFY2Owp1c2UgY29uc3QgRklMVEVSX05VTExfT05fRkFJTFVSRTsKdXNlIGNvbnN0IEZJTFRFUl9WQUxJREFURV9CT09MRUFOOwp1c2UgY29uc3QgRklMVEVSX1ZBTElEQVRFX0lQOwoKZmluYWwgY2xhc3MgVXJpIGltcGxlbWVudHMgVXJpSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUkZDMzk4NiBpbnZhbGlkIGNoYXJhY3RlcnMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yLjIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX0NIQVJTID0gJy9bXHgwMC1ceDFmXHg3Zl0vJzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgU3ViIGRlbGltaXRlciBjaGFyYWN0ZXJzIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMi4yCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfQ0hBUlNfU1VCREVMSU0gPSAiXCFcJCYnXChcKVwqXCssO1w9JSI7CgogICAgLyoqCiAgICAgKiBSRkMzOTg2IHVucmVzZXJ2ZWQgY2hhcmFjdGVycyByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0NIQVJTX1VOUkVTRVJWRUQgPSAnQS1aYS16MC05X1wtXC5+JzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgc2NoZW1hIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1NDSEVNRSA9ICcsXlthLXpdKFstYS16MC05Ky5dKyk/JCxpJzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgaG9zdCBpZGVudGlmaWVkIGJ5IGEgcmVnaXN0ZXJlZCBuYW1lIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSE9TVF9SRUdOQU1FID0gJy9eKAogICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1cLl0pfAogICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PV0pfAogICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgKSskL3gnOwoKICAgIC8qKgogICAgICogUkZDMzk4NiBkZWxpbWl0ZXJzIG9mIHRoZSBnZW5lcmljIFVSSSBjb21wb25lbnRzIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMi4yCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0hPU1RfR0VOX0RFTElNUyA9ICcvWzpcLz8jXFtcXUAgXS8nOyAvLyBBbHNvIGluY2x1ZGVzIHNwYWNlLgoKICAgIC8qKgogICAgICogUkZDMzk4NiBJUHZGdXR1cmUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9IT1NUX0lQRlVUVVJFID0gJy9eCiAgICAgICAgdig/PHZlcnNpb24+W0EtRjAtOV0pK1wuCiAgICAgICAgKD86CiAgICAgICAgICAgICg/PHVucmVzZXJ2ZWQ+W2EtejAtOV9+XC1cLl0pfAogICAgICAgICAgICAoPzxzdWJfZGVsaW1zPlshJCZcJygpKissOz06XSkgICMgYWxzbyBpbmNsdWRlIHRoZSA6IGNoYXJhY3RlcgogICAgICAgICkrCiAgICAkL2l4JzsKCiAgICAvKioKICAgICAqIFJGQzM5ODYgSVB2RnV0dXJlIGhvc3QgYW5kIHBvcnQgY29tcG9uZW50LgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9IT1NUX1BPUlQgPSAnLF4oPzxob3N0PihcWy4qXXxbXjpdKSopKDooPzxwb3J0PlteLz8jXSopKT8kLHgnOwoKICAgIC8qKgogICAgICogU2lnbmlmaWNhbnQgMTAgYml0cyBvZiBJUCB0byBkZXRlY3QgWm9uZSBJRCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBIT1NUX0FERFJFU1NfQkxPQ0sgPSAiXHhmZVx4ODAiOwoKICAgIC8qKgogICAgICogUmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gZm9yIGZpbGUgVVJJLgogICAgICogPHZvbHVtZT4gY29udGFpbnMgdGhlIHZvbHVtZSBidXQgbm90IHRoZSB2b2x1bWUgc2VwYXJhdG9yLgogICAgICogVGhlIHZvbHVtZSBzZXBhcmF0b3IgbWF5IGJlIFVSTC1lbmNvZGVkIChgfGAgYXMgYCU3Q2ApIGJ5IDo6Zm9ybWF0UGF0aCgpLAogICAgICogc28gd2UgYWNjb3VudCBmb3IgdGhhdCBoZXJlLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9GSUxFX1BBVEggPSAnLF4oPzxkZWxpbT4vKT8oPzx2b2x1bWU+W2EtekEtWl0pKD86Wzp8XHxdfCU3QykoPzxyZXN0Pi4qKT8sJzsKCiAgICAvKioKICAgICAqIE1pbWV0eXBlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX01JTUVUWVBFID0gJyxeXHcrL1stLlx3XSsoPzpcK1stLlx3XSspPyQsJzsKCiAgICAvKioKICAgICAqIEJhc2U2NCBjb250ZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0JJTkFSWSA9ICcsKDt8XiliYXNlNjQkLCc7CgogICAgLyoqCiAgICAgKiBXaW5kb3dzIGZpbGUgcGF0aCBzdHJpbmcgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAgICAgKiA8cm9vdD4gY29udGFpbnMgYm90aCB0aGUgdm9sdW1lIGFuZCB2b2x1bWUgc2VwYXJhdG9yLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9XSU5ET1dfUEFUSCA9ICcsXig/PHJvb3Q+W2EtekEtWl1bOnxcfF0pLCc7CgogICAgLyoqCiAgICAgKiBTdXBwb3J0ZWQgc2NoZW1lcyBhbmQgY29ycmVzcG9uZGluZyBkZWZhdWx0IHBvcnQuCiAgICAgKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGludHxudWxsPgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFNDSEVNRV9ERUZBVUxUX1BPUlQgPSBbCiAgICAgICAgJ2RhdGEnID0+IG51bGwsCiAgICAgICAgJ2ZpbGUnID0+IG51bGwsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ2h0dHAnID0+IDgwLAogICAgICAgICdodHRwcycgPT4gNDQzLAogICAgICAgICd3cycgPT4gODAsCiAgICAgICAgJ3dzcycgPT4gNDQzLAogICAgXTsKCiAgICAvKioKICAgICAqIFVSSSB2YWxpZGF0aW9uIG1ldGhvZHMgcGVyIHNjaGVtZS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTQ0hFTUVfVkFMSURBVElPTl9NRVRIT0QgPSBbCiAgICAgICAgJ2RhdGEnID0+ICdpc1VyaVdpdGhTY2hlbWVBbmRQYXRoT25seScsCiAgICAgICAgJ2ZpbGUnID0+ICdpc1VyaVdpdGhTY2hlbWVIb3N0QW5kUGF0aE9ubHknLAogICAgICAgICdmdHAnID0+ICdpc05vbkVtcHR5SG9zdFVyaVdpdGhvdXRGcmFnbWVudEFuZFF1ZXJ5JywKICAgICAgICAnZ29waGVyJyA9PiAnaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnRBbmRRdWVyeScsCiAgICAgICAgJ2h0dHAnID0+ICdpc05vbkVtcHR5SG9zdFVyaScsCiAgICAgICAgJ2h0dHBzJyA9PiAnaXNOb25FbXB0eUhvc3RVcmknLAogICAgICAgICd3cycgPT4gJ2lzTm9uRW1wdHlIb3N0VXJpV2l0aG91dEZyYWdtZW50JywKICAgICAgICAnd3NzJyA9PiAnaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnQnLAogICAgXTsKCiAgICAvKioKICAgICAqIEFsbCBBU0NJSSBsZXR0ZXJzIHNvcnRlZCBieSB0eXBpY2FsIGZyZXF1ZW5jeSBvZiBvY2N1cnJlbmNlLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgQVNDSUkgPSAiXHgyMFx4NjVceDY5XHg2MVx4NzNceDZFXHg3NFx4NzJceDZGXHg2Q1x4NzVceDY0XHg1RFx4NUJceDYzXHg2RFx4NzBceDI3XHgwQVx4NjdceDdDXHg2OFx4NzZceDJFXHg2Nlx4NjJceDJDXHgzQVx4M0RceDJEXHg3MVx4MzFceDMwXHg0M1x4MzJceDJBXHg3OVx4NzhceDI5XHgyOFx4NENceDM5XHg0MVx4NTNceDJGXHg1MFx4MjJceDQ1XHg2QVx4NERceDQ5XHg2Qlx4MzNceDNFXHgzNVx4NTRceDNDXHg0NFx4MzRceDdEXHg0Mlx4N0JceDM4XHg0Nlx4NzdceDUyXHgzNlx4MzdceDU1XHg0N1x4NEVceDNCXHg0QVx4N0FceDU2XHgyM1x4NDhceDRGXHg1N1x4NUZceDI2XHgyMVx4NEJceDNGXHg1OFx4NTFceDI1XHg1OVx4NUNceDA5XHg1QVx4MkJceDdFXHg1RVx4MjRceDQwXHg2MFx4N0ZceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBCXHgwQ1x4MERceDBFXHgwRlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFBXHgxQlx4MUNceDFEXHgxRVx4MUYiOwoKICAgIHByaXZhdGUgP3N0cmluZyAkc2NoZW1lOwogICAgcHJpdmF0ZSA/c3RyaW5nICR1c2VyX2luZm87CiAgICBwcml2YXRlID9zdHJpbmcgJGhvc3Q7CiAgICBwcml2YXRlID9pbnQgJHBvcnQ7CiAgICBwcml2YXRlID9zdHJpbmcgJGF1dGhvcml0eTsKICAgIHByaXZhdGUgc3RyaW5nICRwYXRoID0gJyc7CiAgICBwcml2YXRlID9zdHJpbmcgJHF1ZXJ5OwogICAgcHJpdmF0ZSA/c3RyaW5nICRmcmFnbWVudDsKICAgIHByaXZhdGUgP3N0cmluZyAkdXJpOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP3N0cmluZyAkc2NoZW1lLAogICAgICAgID9zdHJpbmcgJHVzZXIsCiAgICAgICAgP3N0cmluZyAkcGFzcywKICAgICAgICA/c3RyaW5nICRob3N0LAogICAgICAgID9pbnQgJHBvcnQsCiAgICAgICAgc3RyaW5nICRwYXRoLAogICAgICAgID9zdHJpbmcgJHF1ZXJ5LAogICAgICAgID9zdHJpbmcgJGZyYWdtZW50CiAgICApIHsKICAgICAgICAkdGhpcy0+c2NoZW1lID0gJHRoaXMtPmZvcm1hdFNjaGVtZSgkc2NoZW1lKTsKICAgICAgICAkdGhpcy0+dXNlcl9pbmZvID0gJHRoaXMtPmZvcm1hdFVzZXJJbmZvKCR1c2VyLCAkcGFzcyk7CiAgICAgICAgJHRoaXMtPmhvc3QgPSAkdGhpcy0+Zm9ybWF0SG9zdCgkaG9zdCk7CiAgICAgICAgJHRoaXMtPnBvcnQgPSAkdGhpcy0+Zm9ybWF0UG9ydCgkcG9ydCk7CiAgICAgICAgJHRoaXMtPmF1dGhvcml0eSA9ICR0aGlzLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkdGhpcy0+cGF0aCA9ICR0aGlzLT5mb3JtYXRQYXRoKCRwYXRoKTsKICAgICAgICAkdGhpcy0+cXVlcnkgPSAkdGhpcy0+Zm9ybWF0UXVlcnlBbmRGcmFnbWVudCgkcXVlcnkpOwogICAgICAgICR0aGlzLT5mcmFnbWVudCA9ICR0aGlzLT5mb3JtYXRRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CiAgICAgICAgJHRoaXMtPmFzc2VydFZhbGlkU3RhdGUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZvcm1hdCB0aGUgU2NoZW1lIGFuZCBIb3N0IGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gID9zdHJpbmcgICAgICRzY2hlbWUKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHNjaGVtZSBpcyBpbnZhbGlkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZm9ybWF0U2NoZW1lKD9zdHJpbmcgJHNjaGVtZSk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICByZXR1cm4gJHNjaGVtZTsKICAgICAgICB9CgogICAgICAgICRmb3JtYXR0ZWRfc2NoZW1lID0gc3RydG9sb3dlcigkc2NoZW1lKTsKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfU0NIRU1FLCAkZm9ybWF0dGVkX3NjaGVtZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmb3JtYXR0ZWRfc2NoZW1lOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBzY2hlbWUgYCVzYCBpcyBpbnZhbGlkLicsICRzY2hlbWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgVXNlckluZm8gY29tcG9uZW50LgogICAgICogQHBhcmFtID9zdHJpbmcgJHVzZXIKICAgICAqIEBwYXJhbSA/c3RyaW5nICRwYXNzd29yZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdFVzZXJJbmZvKD9zdHJpbmcgJHVzZXIsID9zdHJpbmcgJHBhc3N3b3JkKTogP3N0cmluZwogICAgewogICAgICAgIGlmIChudWxsID09PSAkdXNlcikgewogICAgICAgICAgICByZXR1cm4gJHVzZXI7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgJHVzZXJfcGF0dGVybiA9ICcvKD86W14lJy5zZWxmOjpSRUdFWFBfQ0hBUlNfVU5SRVNFUlZFRC5zZWxmOjpSRUdFWFBfQ0hBUlNfU1VCREVMSU0uJ10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwogICAgICAgICR1c2VyID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCR1c2VyX3BhdHRlcm4sIFtVcmk6OmNsYXNzLCAndXJsRW5jb2RlTWF0Y2gnXSwgJHVzZXIpOwogICAgICAgIGlmIChudWxsID09PSAkcGFzc3dvcmQpIHsKICAgICAgICAgICAgcmV0dXJuICR1c2VyOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRwYXNzd29yZF9wYXR0ZXJuID0gJy8oPzpbXiU6Jy5zZWxmOjpSRUdFWFBfQ0hBUlNfVU5SRVNFUlZFRC5zZWxmOjpSRUdFWFBfQ0hBUlNfU1VCREVMSU0uJ10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwoKICAgICAgICByZXR1cm4gJHVzZXIuJzonLnByZWdfcmVwbGFjZV9jYWxsYmFjaygkcGFzc3dvcmRfcGF0dGVybiwgW1VyaTo6Y2xhc3MsICd1cmxFbmNvZGVNYXRjaCddLCAkcGFzc3dvcmQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUkZDMzk4NiBlbmNvZGVkIHN0cmluZyBtYXRjaGVkLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB1cmxFbmNvZGVNYXRjaChhcnJheSAkbWF0Y2hlcyk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiByYXd1cmxlbmNvZGUoJG1hdGNoZXNbMF0pOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgYW5kIEZvcm1hdCB0aGUgSG9zdCBjb21wb25lbnQuCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkaG9zdAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEhvc3QoP3N0cmluZyAkaG9zdCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGhvc3QgfHwgJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgnWycgIT09ICRob3N0WzBdKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Zm9ybWF0UmVnaXN0ZXJlZE5hbWUoJGhvc3QpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5mb3JtYXRJcCgkaG9zdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSBhbmQgZm9ybWF0IGEgcmVnaXN0ZXJlZCBuYW1lLgogICAgICoKICAgICAqIFRoZSBob3N0IGlzIGNvbnZlcnRlZCB0byBpdHMgYXNjaWkgcmVwcmVzZW50YXRpb24gaWYgbmVlZGVkCiAgICAgKgogICAgICogQHRocm93cyBJZG5TdXBwb3J0TWlzc2luZyBpZiB0aGUgc3VibWl0dGVkIGhvc3QgcmVxdWlyZWQgbWlzc2luZyBvciBtaXNjb25maWd1cmVkIElETiBzdXBwb3J0CiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yICAgICAgIGlmIHRoZSBzdWJtaXR0ZWQgaG9zdCBpcyBub3QgYSB2YWxpZCByZWdpc3RlcmVkIG5hbWUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRSZWdpc3RlcmVkTmFtZShzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZm9ybWF0dGVkX2hvc3QgPSByYXd1cmxkZWNvZGUoJGhvc3QpOwogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX1JFR05BTUUsICRmb3JtYXR0ZWRfaG9zdCkpIHsKICAgICAgICAgICAgcmV0dXJuICRmb3JtYXR0ZWRfaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX0dFTl9ERUxJTVMsICRmb3JtYXR0ZWRfaG9zdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IGEgcmVnaXN0ZXJlZCBuYW1lIGNhbiBub3QgY29udGFpbiBVUkkgZGVsaW1pdGVycyBvciBzcGFjZXMnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgJGluZm8gPSBJZG5hOjp0b0FzY2lpKCRob3N0LCBJZG5hOjpJRE5BMjAwOF9BU0NJSSk7CiAgICAgICAgaWYgKDAgIT09ICRpbmZvLT5lcnJvcnMoKSkgewogICAgICAgICAgICB0aHJvdyBJZG5hQ29udmVyc2lvbkZhaWxlZDo6ZHVlVG9JRE5BRXJyb3IoJGhvc3QsICRpbmZvKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5mby0+cmVzdWx0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSBhbmQgRm9ybWF0IHRoZSBJUHY2L0lQdmZ1dHVyZSBob3N0LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHN1Ym1pdHRlZCBob3N0IGlzIG5vdCBhIHZhbGlkIElQIGhvc3QKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRJcChzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaXAgPSBzdWJzdHIoJGhvc3QsIDEsIC0xKTsKICAgICAgICBpZiAoZmFsc2UgIT09IGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX0lQRlVUVVJFLCAkaXAsICRtYXRjaGVzKSAmJiAhaW5fYXJyYXkoJG1hdGNoZXNbJ3ZlcnNpb24nXSwgWyc0JywgJzYnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRob3N0OwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkaXAsICclJyk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkcG9zKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgaG9zdCBgJXNgIGlzIGludmFsaWQgOiB0aGUgSVAgaG9zdCBpcyBtYWxmb3JtZWQnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0hPU1RfR0VOX0RFTElNUywgcmF3dXJsZGVjb2RlKHN1YnN0cigkaXAsICRwb3MpKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICAkaXAgPSBzdWJzdHIoJGlwLCAwLCAkcG9zKTsKICAgICAgICBpZiAoZmFsc2UgPT09IGZpbHRlcl92YXIoJGlwLCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgaG9zdCBgJXNgIGlzIGludmFsaWQgOiB0aGUgSVAgaG9zdCBpcyBtYWxmb3JtZWQnLCAkaG9zdCkpOwogICAgICAgIH0KCiAgICAgICAgLy9Pbmx5IHRoZSBhZGRyZXNzIGJsb2NrIGZlODA6Oi8xMCBjYW4gaGF2ZSBhIFpvbmUgSUQgYXR0YWNoIHRvCiAgICAgICAgLy9sZXQncyBkZXRlY3QgdGhlIGxpbmsgbG9jYWwgc2lnbmlmaWNhbnQgMTAgYml0cwogICAgICAgIGlmICgwID09PSBzdHJwb3MoKHN0cmluZykgaW5ldF9wdG9uKCRpcCksIHNlbGY6OkhPU1RfQUREUkVTU19CTE9DSykpIHsKICAgICAgICAgICAgcmV0dXJuICRob3N0OwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBob3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgdGhlIFBvcnQgY29tcG9uZW50LgogICAgICoKICAgICAqIEBwYXJhbSBvYmplY3R8bnVsbHxpbnR8c3RyaW5nICRwb3J0CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdFBvcnQoJHBvcnQgPSBudWxsKTogP2ludAogICAgewogICAgICAgIGlmIChudWxsID09PSAkcG9ydCB8fCAnJyA9PT0gJHBvcnQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2ludCgkcG9ydCkgJiYgIShpc19zdHJpbmcoJHBvcnQpICYmIDEgPT09IHByZWdfbWF0Y2goJy9eXGQqJC8nLCAkcG9ydCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIHBvcnQgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gaW50ZWdlcjsgJy5nZXR0eXBlKCRwb3J0KS4nIGdpdmVuLicpOwogICAgICAgIH0KCiAgICAgICAgJHBvcnQgPSAoaW50KSAkcG9ydDsKICAgICAgICBpZiAoMCA+ICRwb3J0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcG9ydCBgJXNgIGlzIGludmFsaWQnLCAkcG9ydCkpOwogICAgICAgIH0KCiAgICAgICAgJGRlZmF1bHRQb3J0ID0gc2VsZjo6U0NIRU1FX0RFRkFVTFRfUE9SVFskdGhpcy0+c2NoZW1lXSA/PyBudWxsOwogICAgICAgIGlmICgkZGVmYXVsdFBvcnQgPT09ICRwb3J0KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwb3J0OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fc2V0X3N0YXRlKGFycmF5ICRjb21wb25lbnRzKTogc2VsZgogICAgewogICAgICAgICRjb21wb25lbnRzWyd1c2VyJ10gPSBudWxsOwogICAgICAgICRjb21wb25lbnRzWydwYXNzJ10gPSBudWxsOwogICAgICAgIGlmIChudWxsICE9PSAkY29tcG9uZW50c1sndXNlcl9pbmZvJ10pIHsKICAgICAgICAgICAgWyRjb21wb25lbnRzWyd1c2VyJ10sICRjb21wb25lbnRzWydwYXNzJ11dID0gZXhwbG9kZSgnOicsICRjb21wb25lbnRzWyd1c2VyX2luZm8nXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVUkkgYW5kIGEgQmFzZSBVUkkuCiAgICAgKgogICAgICogVGhlIHJldHVybmVkIFVSSSBtdXN0IGJlIGFic29sdXRlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICR1cmkgICAgICB0aGUgaW5wdXQgVVJJIHRvIGNyZWF0ZQogICAgICogQHBhcmFtIG51bGx8bWl4ZWQgJGJhc2VfdXJpIHRoZSBiYXNlIFVSSSB1c2VkIGZvciByZWZlcmVuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQmFzZVVyaSgkdXJpLCAkYmFzZV91cmkgPSBudWxsKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCEkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICR1cmkgPSBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKCR1cmkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICRiYXNlX3VyaSkgewogICAgICAgICAgICBpZiAobnVsbCA9PT0gJHVyaS0+Z2V0U2NoZW1lKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCd0aGUgVVJJIGAlc2AgbXVzdCBiZSBhYnNvbHV0ZScsIChzdHJpbmcpICR1cmkpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG51bGwgPT09ICR1cmktPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEB2YXIgVXJpSW50ZXJmYWNlICR1cmkgKi8KICAgICAgICAgICAgJHVyaSA9IFVyaVJlc29sdmVyOjpyZXNvbHZlKCR1cmksICR1cmktPndpdGhGcmFnbWVudChudWxsKS0+d2l0aFF1ZXJ5KG51bGwpLT53aXRoUGF0aCgnJykpOwoKICAgICAgICAgICAgcmV0dXJuICR1cmk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRiYXNlX3VyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICAkYmFzZV91cmkgPSBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKCRiYXNlX3VyaSk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJGJhc2VfdXJpLT5nZXRTY2hlbWUoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZigndGhlIGJhc2UgVVJJIGAlc2AgbXVzdCBiZSBhYnNvbHV0ZScsIChzdHJpbmcpICRiYXNlX3VyaSkpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgVXJpSW50ZXJmYWNlICR1cmkgKi8KICAgICAgICAkdXJpID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJHVyaSwgJGJhc2VfdXJpKTsKCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG1peGVkICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKCR1cmkgPSAnJyk6IHNlbGYKICAgIHsKICAgICAgICAkY29tcG9uZW50cyA9IFVyaVN0cmluZzo6cGFyc2UoJHVyaSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBoYXNoIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkgc2ltaWxhcgogICAgICogdG8gUEhQIHBhcnNlX3VybCBmdW5jdGlvbiByZXN1bHQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbXBvbmVudHMoYXJyYXkgJGNvbXBvbmVudHMgPSBbXSk6IHNlbGYKICAgIHsKICAgICAgICAkY29tcG9uZW50cyArPSBbCiAgICAgICAgICAgICdzY2hlbWUnID0+IG51bGwsICd1c2VyJyA9PiBudWxsLCAncGFzcycgPT4gbnVsbCwgJ2hvc3QnID0+IG51bGwsCiAgICAgICAgICAgICdwb3J0JyA9PiBudWxsLCAncGF0aCcgPT4gJycsICdxdWVyeScgPT4gbnVsbCwgJ2ZyYWdtZW50JyA9PiBudWxsLAogICAgICAgIF07CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3NjaGVtZSddLAogICAgICAgICAgICAkY29tcG9uZW50c1sndXNlciddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGFzcyddLAogICAgICAgICAgICAkY29tcG9uZW50c1snaG9zdCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncG9ydCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncGF0aCddLAogICAgICAgICAgICAkY29tcG9uZW50c1sncXVlcnknXSwKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBkYXRhIGZpbGUgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkY29udGV4dAogICAgICoKICAgICAqIEB0aHJvd3MgRmlsZWluZm9TdXBwb3J0TWlzc2luZyBJZiBleHQvZmlsZWluZm8gaXMgbm90IGluc3RhbGxlZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21EYXRhUGF0aChzdHJpbmcgJHBhdGgsICRjb250ZXh0ID0gbnVsbCk6IHNlbGYKICAgIHsKICAgICAgICBzdGF0aWMgJGZpbmZvX3N1cHBvcnQgPSBudWxsOwogICAgICAgICRmaW5mb19zdXBwb3J0ID0gJGZpbmZvX3N1cHBvcnQgPz8gY2xhc3NfZXhpc3RzKGZpbmZvOjpjbGFzcyk7CgogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghJGZpbmZvX3N1cHBvcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVpbmZvU3VwcG9ydE1pc3Npbmcoc3ByaW50ZignUGxlYXNlIGluc3RhbGwgZXh0L2ZpbGVpbmZvIHRvIHVzZSB0aGUgJXMoKSBtZXRob2QuJywgX19NRVRIT0RfXykpOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgICRmaWxlX2FyZ3MgPSBbJHBhdGgsIGZhbHNlXTsKICAgICAgICAkbWltZV9hcmdzID0gWyRwYXRoLCBGSUxFSU5GT19NSU1FXTsKICAgICAgICBpZiAobnVsbCAhPT0gJGNvbnRleHQpIHsKICAgICAgICAgICAgJGZpbGVfYXJnc1tdID0gJGNvbnRleHQ7CiAgICAgICAgICAgICRtaW1lX2FyZ3NbXSA9ICRjb250ZXh0OwogICAgICAgIH0KCiAgICAgICAgJHJhdyA9IEBmaWxlX2dldF9jb250ZW50cyguLi4kZmlsZV9hcmdzKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyYXcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBmaWxlIGAlc2AgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlJywgJHBhdGgpKTsKICAgICAgICB9CgogICAgICAgICRtaW1ldHlwZSA9IChzdHJpbmcpIChuZXcgZmluZm8oRklMRUlORk9fTUlNRSkpLT5maWxlKC4uLiRtaW1lX2FyZ3MpOwoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbCiAgICAgICAgICAgICdzY2hlbWUnID0+ICdkYXRhJywKICAgICAgICAgICAgJ3BhdGgnID0+IHN0cl9yZXBsYWNlKCcgJywgJycsICRtaW1ldHlwZS4nO2Jhc2U2NCwnLmJhc2U2NF9lbmNvZGUoJHJhdykpLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGZyb20gYSBVbml4IHBhdGggc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Vbml4UGF0aChzdHJpbmcgJHVyaSA9ICcnKTogc2VsZgogICAgewogICAgICAgICR1cmkgPSBpbXBsb2RlKCcvJywgYXJyYXlfbWFwKCdyYXd1cmxlbmNvZGUnLCBleHBsb2RlKCcvJywgJHVyaSkpKTsKICAgICAgICBpZiAoJy8nICE9PSAoJHVyaVswXSA/PyAnJykpIHsKICAgICAgICAgICAgcmV0dXJuIFVyaTo6Y3JlYXRlRnJvbUNvbXBvbmVudHMoWydwYXRoJyA9PiAkdXJpXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICR1cmksICdzY2hlbWUnID0+ICdmaWxlJywgJ2hvc3QnID0+ICcnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIGxvY2FsIFdpbmRvd3MgcGF0aCBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVdpbmRvd3NQYXRoKHN0cmluZyAkdXJpID0gJycpOiBzZWxmCiAgICB7CiAgICAgICAgJHJvb3QgPSAnJzsKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfV0lORE9XX1BBVEgsICR1cmksICRtYXRjaGVzKSkgewogICAgICAgICAgICAkcm9vdCA9IHN1YnN0cigkbWF0Y2hlc1sncm9vdCddLCAwLCAtMSkuJzonOwogICAgICAgICAgICAkdXJpID0gc3Vic3RyKCR1cmksIHN0cmxlbigkcm9vdCkpOwogICAgICAgIH0KICAgICAgICAkdXJpID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkdXJpKTsKICAgICAgICAkdXJpID0gaW1wbG9kZSgnLycsIGFycmF5X21hcCgncmF3dXJsZW5jb2RlJywgZXhwbG9kZSgnLycsICR1cmkpKSk7CgogICAgICAgIC8vTG9jYWwgV2luZG93cyBhYnNvbHV0ZSBwYXRoCiAgICAgICAgaWYgKCcnICE9PSAkcm9vdCkgewogICAgICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICcvJy4kcm9vdC4kdXJpLCAnc2NoZW1lJyA9PiAnZmlsZScsICdob3N0JyA9PiAnJ10pOwogICAgICAgIH0KCiAgICAgICAgLy9VTkMgV2luZG93cyBQYXRoCiAgICAgICAgaWYgKCcvLycgIT09IHN1YnN0cigkdXJpLCAwLCAyKSkgewogICAgICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ3BhdGgnID0+ICR1cmldKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCBzdWJzdHIoJHVyaSwgMiksIDIpICsgWzEgPT4gbnVsbF07CgogICAgICAgIHJldHVybiBVcmk6OmNyZWF0ZUZyb21Db21wb25lbnRzKFsnaG9zdCcgPT4gJHBhcnRzWzBdLCAncGF0aCcgPT4gJy8nLiRwYXJ0c1sxXSwgJ3NjaGVtZScgPT4gJ2ZpbGUnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSBhIFVSSSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkgdGhlIGlucHV0IFVSSSB0byBjcmVhdGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tVXJpKCR1cmkpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCR1cmkgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgJHVzZXJfaW5mbyA9ICR1cmktPmdldFVzZXJJbmZvKCk7CiAgICAgICAgICAgICR1c2VyID0gbnVsbDsKICAgICAgICAgICAgJHBhc3MgPSBudWxsOwogICAgICAgICAgICBpZiAobnVsbCAhPT0gJHVzZXJfaW5mbykgewogICAgICAgICAgICAgICAgWyR1c2VyLCAkcGFzc10gPSBleHBsb2RlKCc6JywgJHVzZXJfaW5mbywgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0U2NoZW1lKCksCiAgICAgICAgICAgICAgICAkdXNlciwKICAgICAgICAgICAgICAgICRwYXNzLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0SG9zdCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UG9ydCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UGF0aCgpLAogICAgICAgICAgICAgICAgJHVyaS0+Z2V0UXVlcnkoKSwKICAgICAgICAgICAgICAgICR1cmktPmdldEZyYWdtZW50KCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdUaGUgb2JqZWN0IG11c3QgaW1wbGVtZW50IHRoZSBgJXNgIG9yIHRoZSBgJXNgJywgUHNyN1VyaUludGVyZmFjZTo6Y2xhc3MsIFVyaUludGVyZmFjZTo6Y2xhc3MpKTsKICAgICAgICB9CgogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICBpZiAoJycgPT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHNjaGVtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkZnJhZ21lbnQgPSAkdXJpLT5nZXRGcmFnbWVudCgpOwogICAgICAgIGlmICgnJyA9PT0gJGZyYWdtZW50KSB7CiAgICAgICAgICAgICRmcmFnbWVudCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcXVlcnkgPSAkdXJpLT5nZXRRdWVyeSgpOwogICAgICAgIGlmICgnJyA9PT0gJHF1ZXJ5KSB7CiAgICAgICAgICAgICRxdWVyeSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgICRob3N0ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICR1c2VyX2luZm8gPSAkdXJpLT5nZXRVc2VySW5mbygpOwogICAgICAgICR1c2VyID0gbnVsbDsKICAgICAgICAkcGFzcyA9IG51bGw7CiAgICAgICAgaWYgKCcnICE9PSAkdXNlcl9pbmZvKSB7CiAgICAgICAgICAgIFskdXNlciwgJHBhc3NdID0gZXhwbG9kZSgnOicsICR1c2VyX2luZm8sIDIpICsgWzEgPT4gbnVsbF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRzY2hlbWUsCiAgICAgICAgICAgICR1c2VyLAogICAgICAgICAgICAkcGFzcywKICAgICAgICAgICAgJGhvc3QsCiAgICAgICAgICAgICR1cmktPmdldFBvcnQoKSwKICAgICAgICAgICAgJHVyaS0+Z2V0UGF0aCgpLAogICAgICAgICAgICAkcXVlcnksCiAgICAgICAgICAgICRmcmFnbWVudAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlcnZlcihhcnJheSAkc2VydmVyKTogc2VsZgogICAgewogICAgICAgIFskdXNlciwgJHBhc3NdID0gc2VsZjo6ZmV0Y2hVc2VySW5mbygkc2VydmVyKTsKICAgICAgICBbJGhvc3QsICRwb3J0XSA9IHNlbGY6OmZldGNoSG9zdG5hbWUoJHNlcnZlcik7CiAgICAgICAgWyRwYXRoLCAkcXVlcnldID0gc2VsZjo6ZmV0Y2hSZXF1ZXN0VXJpKCRzZXJ2ZXIpOwoKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbCiAgICAgICAgICAgICdzY2hlbWUnID0+IHNlbGY6OmZldGNoU2NoZW1lKCRzZXJ2ZXIpLAogICAgICAgICAgICAndXNlcicgPT4gJHVzZXIsCiAgICAgICAgICAgICdwYXNzJyA9PiAkcGFzcywKICAgICAgICAgICAgJ2hvc3QnID0+ICRob3N0LAogICAgICAgICAgICAncG9ydCcgPT4gJHBvcnQsCiAgICAgICAgICAgICdwYXRoJyA9PiAkcGF0aCwKICAgICAgICAgICAgJ3F1ZXJ5JyA9PiAkcXVlcnksCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCBzY2hlbWUuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZldGNoU2NoZW1lKGFycmF5ICRzZXJ2ZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnSFRUUFMnID0+ICcnXTsKICAgICAgICAkcmVzID0gZmlsdGVyX3Zhcigkc2VydmVyWydIVFRQUyddLCBGSUxURVJfVkFMSURBVEVfQk9PTEVBTiwgRklMVEVSX05VTExfT05fRkFJTFVSRSk7CgogICAgICAgIHJldHVybiBmYWxzZSAhPT0gJHJlcyA/ICdodHRwcycgOiAnaHR0cCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCB1c2VyIGluZm8uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOj9zdHJpbmcsIDE6P3N0cmluZ30KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hVc2VySW5mbyhhcnJheSAkc2VydmVyKTogYXJyYXkKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnUEhQX0FVVEhfVVNFUicgPT4gbnVsbCwgJ1BIUF9BVVRIX1BXJyA9PiBudWxsLCAnSFRUUF9BVVRIT1JJWkFUSU9OJyA9PiAnJ107CiAgICAgICAgJHVzZXIgPSAkc2VydmVyWydQSFBfQVVUSF9VU0VSJ107CiAgICAgICAgJHBhc3MgPSAkc2VydmVyWydQSFBfQVVUSF9QVyddOwogICAgICAgIGlmICgwID09PSBzdHJwb3Moc3RydG9sb3dlcigkc2VydmVyWydIVFRQX0FVVEhPUklaQVRJT04nXSksICdiYXNpYycpKSB7CiAgICAgICAgICAgICR1c2VyaW5mbyA9IGJhc2U2NF9kZWNvZGUoc3Vic3RyKCRzZXJ2ZXJbJ0hUVFBfQVVUSE9SSVpBVElPTiddLCA2KSwgdHJ1ZSk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHVzZXJpbmZvKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1RoZSB1c2VyIGluZm8gY291bGQgbm90IGJlIGRldGVjdGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgWyR1c2VyLCAkcGFzc10gPSBleHBsb2RlKCc6JywgJHVzZXJpbmZvLCAyKSArIFsxID0+IG51bGxdOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyKSB7CiAgICAgICAgICAgICR1c2VyID0gcmF3dXJsZW5jb2RlKCR1c2VyKTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkcGFzcykgewogICAgICAgICAgICAkcGFzcyA9IHJhd3VybGVuY29kZSgkcGFzcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyR1c2VyLCAkcGFzc107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCBob3N0LgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgSWYgdGhlIGhvc3QgY2FuIG5vdCBiZSBkZXRlY3RlZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmd8bnVsbCwgMTppbnR8bnVsbH0KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hIb3N0bmFtZShhcnJheSAkc2VydmVyKTogYXJyYXkKICAgIHsKICAgICAgICAkc2VydmVyICs9IFsnU0VSVkVSX1BPUlQnID0+IG51bGxdOwogICAgICAgIGlmIChudWxsICE9PSAkc2VydmVyWydTRVJWRVJfUE9SVCddKSB7CiAgICAgICAgICAgICRzZXJ2ZXJbJ1NFUlZFUl9QT1JUJ10gPSAoaW50KSAkc2VydmVyWydTRVJWRVJfUE9SVCddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRzZXJ2ZXJbJ0hUVFBfSE9TVCddKSAmJiAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9IT1NUX1BPUlQsICRzZXJ2ZXJbJ0hUVFBfSE9TVCddLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWydwb3J0J10pKSB7CiAgICAgICAgICAgICAgICAkbWF0Y2hlc1sncG9ydCddID0gKGludCkgJG1hdGNoZXNbJ3BvcnQnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICRtYXRjaGVzWydob3N0J10sCiAgICAgICAgICAgICAgICAkbWF0Y2hlc1sncG9ydCddID8/ICRzZXJ2ZXJbJ1NFUlZFUl9QT1JUJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCRzZXJ2ZXJbJ1NFUlZFUl9BRERSJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIGhvc3QgY291bGQgbm90IGJlIGRldGVjdGVkJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09IGZpbHRlcl92YXIoJHNlcnZlclsnU0VSVkVSX0FERFInXSwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSkgewogICAgICAgICAgICAkc2VydmVyWydTRVJWRVJfQUREUiddID0gJ1snLiRzZXJ2ZXJbJ1NFUlZFUl9BRERSJ10uJ10nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskc2VydmVyWydTRVJWRVJfQUREUiddLCAkc2VydmVyWydTRVJWRVJfUE9SVCddXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGVudmlyb25tZW50IHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOj9zdHJpbmcsIDE6P3N0cmluZ30KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2hSZXF1ZXN0VXJpKGFycmF5ICRzZXJ2ZXIpOiBhcnJheQogICAgewogICAgICAgICRzZXJ2ZXIgKz0gWydJSVNfV2FzVXJsUmV3cml0dGVuJyA9PiBudWxsLCAnVU5FTkNPREVEX1VSTCcgPT4gJycsICdQSFBfU0VMRicgPT4gJycsICdRVUVSWV9TVFJJTkcnID0+IG51bGxdOwogICAgICAgIGlmICgnMScgPT09ICRzZXJ2ZXJbJ0lJU19XYXNVcmxSZXdyaXR0ZW4nXSAmJiAnJyAhPT0gJHNlcnZlclsnVU5FTkNPREVEX1VSTCddKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5ezA6P3N0cmluZywgMTo/c3RyaW5nfSAkcmV0dmFsICovCiAgICAgICAgICAgICRyZXR2YWwgPSBleHBsb2RlKCc/JywgJHNlcnZlclsnVU5FTkNPREVEX1VSTCddLCAyKSArIFsxID0+IG51bGxdOwoKICAgICAgICAgICAgcmV0dXJuICRyZXR2YWw7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNlcnZlclsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICAgICAgWyRwYXRoLCBdID0gZXhwbG9kZSgnPycsICRzZXJ2ZXJbJ1JFUVVFU1RfVVJJJ10sIDIpOwogICAgICAgICAgICAkcXVlcnkgPSAoJycgIT09ICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddKSA/ICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddIDogbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBbJHBhdGgsICRxdWVyeV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWyRzZXJ2ZXJbJ1BIUF9TRUxGJ10sICRzZXJ2ZXJbJ1FVRVJZX1NUUklORyddXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIHRoZSBVUkkgYXV0aG9yaXR5IHBhcnQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0QXV0aG9yaXR5KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICAkYXV0aG9yaXR5ID0gbnVsbDsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnVzZXJfaW5mbykgewogICAgICAgICAgICAkYXV0aG9yaXR5ID0gJHRoaXMtPnVzZXJfaW5mby4nQCc7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmhvc3QpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSAuPSAkdGhpcy0+aG9zdDsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+cG9ydCkgewogICAgICAgICAgICAkYXV0aG9yaXR5IC49ICc6Jy4kdGhpcy0+cG9ydDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXV0aG9yaXR5OwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0IHRoZSBQYXRoIGNvbXBvbmVudC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgICRwYXRoID0gJHRoaXMtPmZvcm1hdERhdGFQYXRoKCRwYXRoKTsKCiAgICAgICAgc3RhdGljICRwYXR0ZXJuID0gJy8oPzpbXicuc2VsZjo6UkVHRVhQX0NIQVJTX1VOUkVTRVJWRUQuc2VsZjo6UkVHRVhQX0NIQVJTX1NVQkRFTElNLiclOkBcL317XSsrfCUoPyFbQS1GYS1mMC05XXsyfSkpLyc7CgogICAgICAgICRwYXRoID0gKHN0cmluZykgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRwYXR0ZXJuLCBbVXJpOjpjbGFzcywgJ3VybEVuY29kZU1hdGNoJ10sICRwYXRoKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5mb3JtYXRGaWxlUGF0aCgkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgdGhlIFBhdGggY29tcG9uZW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUgcGF0aCBpcyBub3QgY29tcGxpYW50IHdpdGggUkZDMjM5NwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdERhdGFQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnZGF0YScgIT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09ICRwYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbjtjaGFyc2V0PXVzLWFzY2lpLCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RybGVuKCRwYXRoKSAhPT0gc3Ryc3BuKCRwYXRoLCBzZWxmOjpBU0NJSSkgfHwgZmFsc2UgPT09IHN0cnBvcygkcGF0aCwgJywnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHBhdGggYCVzYCBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBSRkMyOTM3JywgJHBhdGgpKTsKICAgICAgICB9CgogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJywnLCAkcGF0aCwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAkbWVkaWF0eXBlID0gZXhwbG9kZSgnOycsIChzdHJpbmcpICRwYXJ0c1swXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAkZGF0YSA9IChzdHJpbmcpICRwYXJ0c1sxXTsKICAgICAgICAkbWltZXR5cGUgPSAkbWVkaWF0eXBlWzBdOwogICAgICAgIGlmIChudWxsID09PSAkbWltZXR5cGUgfHwgJycgPT09ICRtaW1ldHlwZSkgewogICAgICAgICAgICAkbWltZXR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1ldGVycyA9ICRtZWRpYXR5cGVbMV07CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXJhbWV0ZXJzIHx8ICcnID09PSAkcGFyYW1ldGVycykgewogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICdjaGFyc2V0PXVzLWFzY2lpJzsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5hc3NlcnRWYWxpZFBhdGgoJG1pbWV0eXBlLCAkcGFyYW1ldGVycywgJGRhdGEpOwoKICAgICAgICByZXR1cm4gJG1pbWV0eXBlLic7Jy4kcGFyYW1ldGVycy4nLCcuJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhlIHBhdGggaXMgYSBjb21wbGlhbnQgd2l0aCBSRkMyMzk3LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBJZiB0aGUgbWVkaWF0eXBlIG9yIHRoZSBkYXRhIGFyZSBub3QgY29tcGxpYW50IHdpdGggdGhlIFJGQzIzOTcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRWYWxpZFBhdGgoc3RyaW5nICRtaW1ldHlwZSwgc3RyaW5nICRwYXJhbWV0ZXJzLCBzdHJpbmcgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKDEgIT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX01JTUVUWVBFLCAkbWltZXR5cGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcGF0aCBtaW1ldHlwZSBgJXNgIGlzIGludmFsaWQnLCAkbWltZXR5cGUpKTsKICAgICAgICB9CgogICAgICAgICRpc19iaW5hcnkgPSAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9CSU5BUlksICRwYXJhbWV0ZXJzLCAkbWF0Y2hlcyk7CiAgICAgICAgaWYgKCRpc19iaW5hcnkpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSBzdWJzdHIoJHBhcmFtZXRlcnMsIDAsIC0gc3RybGVuKCRtYXRjaGVzWzBdKSk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gYXJyYXlfZmlsdGVyKGFycmF5X2ZpbHRlcihleHBsb2RlKCc7JywgJHBhcmFtZXRlcnMpLCBbJHRoaXMsICd2YWxpZGF0ZVBhcmFtZXRlciddKSk7CiAgICAgICAgaWYgKFtdICE9PSAkcmVzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgcGF0aCBwYXJlbWV0ZXJzIGAlc2AgaXMgaW52YWxpZCcsICRwYXJhbWV0ZXJzKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRpc19iaW5hcnkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHJlcyA9IGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJlcyB8fCAkZGF0YSAhPT0gYmFzZTY0X2VuY29kZSgkcmVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHBhdGggZGF0YSBgJXNgIGlzIGludmFsaWQnLCAkZGF0YSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIG1lZGlhdHlwZSBwYXJhbWV0ZXIuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXIoc3RyaW5nICRwYXJhbWV0ZXIpOiBib29sCiAgICB7CiAgICAgICAgJHByb3BlcnRpZXMgPSBleHBsb2RlKCc9JywgJHBhcmFtZXRlcik7CgogICAgICAgIHJldHVybiAyICE9IGNvdW50KCRwcm9wZXJ0aWVzKSB8fCAnYmFzZTY0JyA9PT0gc3RydG9sb3dlcigkcHJvcGVydGllc1swXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgcGF0aCBjb21wb25lbnQgZm9yIGZpbGUgc2NoZW1lLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZvcm1hdEZpbGVQYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnZmlsZScgIT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXRoOwogICAgICAgIH0KCiAgICAgICAgJHJlcGxhY2UgPSBzdGF0aWMgZnVuY3Rpb24gKGFycmF5ICRtYXRjaGVzKTogc3RyaW5nIHsKICAgICAgICAgICAgcmV0dXJuICRtYXRjaGVzWydkZWxpbSddLiRtYXRjaGVzWyd2b2x1bWUnXS4nOicuJG1hdGNoZXNbJ3Jlc3QnXTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gKHN0cmluZykgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKHNlbGY6OlJFR0VYUF9GSUxFX1BBVEgsICRyZXBsYWNlLCAkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXQgdGhlIFF1ZXJ5IG9yIHRoZSBGcmFnbWVudCBjb21wb25lbnQuCiAgICAgKgogICAgICogUmV0dXJucyBhIGFycmF5IGNvbnRhaW5pbmc6CiAgICAgKiA8dWw+CiAgICAgKiA8bGk+IHRoZSBmb3JtYXR0ZWQgY29tcG9uZW50IChhIHN0cmluZyBvciBudWxsKTwvbGk+CiAgICAgKiA8bGk+IGEgYm9vbGVhbiBmbGFnIHRlbGxpbmcgd2V0aGVyIHRoZSBkZWxpbWl0ZXIgaXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbXBvbmVudAogICAgICogd2hlbiBidWlsZGluZyB0aGUgVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbjwvbGk+CiAgICAgKiA8L3VsPgogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRjb21wb25lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRRdWVyeUFuZEZyYWdtZW50KD9zdHJpbmcgJGNvbXBvbmVudCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGNvbXBvbmVudCB8fCAnJyA9PT0gJGNvbXBvbmVudCkgewogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudDsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyAkcGF0dGVybiA9ICcvKD86W14nLnNlbGY6OlJFR0VYUF9DSEFSU19VTlJFU0VSVkVELnNlbGY6OlJFR0VYUF9DSEFSU19TVUJERUxJTS4nJTpAXC9cP10rK3wlKD8hW0EtRmEtZjAtOV17Mn0pKS8nOwogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHBhdHRlcm4sIFtVcmk6OmNsYXNzLCAndXJsRW5jb2RlTWF0Y2gnXSwgJGNvbXBvbmVudCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhc3NlcnQgdGhlIFVSSSBpbnRlcm5hbCBzdGF0ZSBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgVVJJIGlzIGluIGFuIGludmFsaWQgc3RhdGUgYWNjb3JkaW5nIHRvIFJGQzM5ODYKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGFjY29yZGluZyB0byBzY2hlbWUgc3BlY2lmaWMgcnVsZXMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhc3NlcnRWYWxpZFN0YXRlKCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmF1dGhvcml0eSAmJiAoJycgIT09ICR0aGlzLT5wYXRoICYmICcvJyAhPT0gJHRoaXMtPnBhdGhbMF0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSWYgYW4gYXV0aG9yaXR5IGlzIHByZXNlbnQgdGhlIHBhdGggbXVzdCBiZSBlbXB0eSBvciBzdGFydCB3aXRoIGEgYC9gLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5hdXRob3JpdHkgJiYgMCA9PT0gc3RycG9zKCR0aGlzLT5wYXRoLCAnLy8nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignSWYgdGhlcmUgaXMgbm8gYXV0aG9yaXR5IHRoZSBwYXRoIGAlc2AgY2FuIG5vdCBzdGFydCB3aXRoIGEgYC8vYC4nLCAkdGhpcy0+cGF0aCkpOwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkdGhpcy0+cGF0aCwgJzonKTsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmF1dGhvcml0eQogICAgICAgICAgICAmJiBudWxsID09PSAkdGhpcy0+c2NoZW1lCiAgICAgICAgICAgICYmIGZhbHNlICE9PSAkcG9zCiAgICAgICAgICAgICYmIGZhbHNlID09PSBzdHJwb3Moc3Vic3RyKCR0aGlzLT5wYXRoLCAwLCAkcG9zKSwgJy8nKQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0luIGFic2VuY2Ugb2YgYSBzY2hlbWUgYW5kIGFuIGF1dGhvcml0eSB0aGUgZmlyc3QgcGF0aCBzZWdtZW50IGNhbm5vdCBjb250YWluIGEgY29sb24gKCI6IikgY2hhcmFjdGVyLicpOwogICAgICAgIH0KCiAgICAgICAgJHZhbGlkYXRpb25NZXRob2QgPSBzZWxmOjpTQ0hFTUVfVkFMSURBVElPTl9NRVRIT0RbJHRoaXMtPnNjaGVtZV0gPz8gbnVsbDsKICAgICAgICBpZiAobnVsbCA9PT0gJHZhbGlkYXRpb25NZXRob2QgfHwgdHJ1ZSA9PT0gJHRoaXMtPiR2YWxpZGF0aW9uTWV0aG9kKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnVyaSA9IG51bGw7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHVyaSBgJXNgIGlzIGludmFsaWQgZm9yIHRoZSBgJXNgIHNjaGVtZS4nLCAoc3RyaW5nKSAkdGhpcywgJHRoaXMtPnNjaGVtZSkpOwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGFsbG93cyBvbmx5IHNjaGVtZSBhbmQgcGF0aCBjb21wb25lbnRzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzVXJpV2l0aFNjaGVtZUFuZFBhdGhPbmx5KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gbnVsbCA9PT0gJHRoaXMtPmF1dGhvcml0eQogICAgICAgICAgICAmJiBudWxsID09PSAkdGhpcy0+cXVlcnkKICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGFsbG93cyBvbmx5IHNjaGVtZSwgaG9zdCBhbmQgcGF0aCBjb21wb25lbnRzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzVXJpV2l0aFNjaGVtZUhvc3RBbmRQYXRoT25seSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICR0aGlzLT51c2VyX2luZm8KICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPnBvcnQKICAgICAgICAgICAgJiYgbnVsbCA9PT0gJHRoaXMtPnF1ZXJ5CiAgICAgICAgICAgICYmIG51bGwgPT09ICR0aGlzLT5mcmFnbWVudAogICAgICAgICAgICAmJiAhKCcnICE9ICR0aGlzLT5zY2hlbWUgJiYgbnVsbCA9PT0gJHRoaXMtPmhvc3QpOwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSSBzY2hlbWVzIHdoaWNoIGRpc2FsbG93IHRoZSBlbXB0eSAnJyBob3N0LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzTm9uRW1wdHlIb3N0VXJpKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJycgIT09ICR0aGlzLT5ob3N0CiAgICAgICAgICAgICYmICEobnVsbCAhPT0gJHRoaXMtPnNjaGVtZSAmJiBudWxsID09PSAkdGhpcy0+aG9zdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVUkkgdmFsaWRhdGlvbiBmb3IgVVJJcyBzY2hlbWVzIHdoaWNoIGRpc2FsbG93IHRoZSBlbXB0eSAnJyBob3N0CiAgICAgKiBhbmQgZm9yYmlkcyB0aGUgZnJhZ21lbnQgY29tcG9uZW50LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzTm9uRW1wdHlIb3N0VXJpV2l0aG91dEZyYWdtZW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzTm9uRW1wdHlIb3N0VXJpKCkgJiYgbnVsbCA9PT0gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICogVVJJIHZhbGlkYXRpb24gZm9yIFVSSXMgc2NoZW1lcyB3aGljaCBkaXNhbGxvdyB0aGUgZW1wdHkgJycgaG9zdAogICAgICogYW5kIGZvcmJpZHMgZnJhZ21lbnQgYW5kIHF1ZXJ5IGNvbXBvbmVudHMuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNOb25FbXB0eUhvc3RVcmlXaXRob3V0RnJhZ21lbnRBbmRRdWVyeSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc05vbkVtcHR5SG9zdFVyaSgpICYmIG51bGwgPT09ICR0aGlzLT5mcmFnbWVudCAmJiBudWxsID09PSAkdGhpcy0+cXVlcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbiBmcm9tIGl0cyBjb21wb25lbnRzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4zCiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHNjaGVtZQogICAgICogQHBhcmFtID9zdHJpbmcgJGF1dGhvcml0eQogICAgICogQHBhcmFtID9zdHJpbmcgJHF1ZXJ5CiAgICAgKiBAcGFyYW0gP3N0cmluZyAkZnJhZ21lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRVcmlTdHJpbmcoCiAgICAgICAgP3N0cmluZyAkc2NoZW1lLAogICAgICAgID9zdHJpbmcgJGF1dGhvcml0eSwKICAgICAgICBzdHJpbmcgJHBhdGgsCiAgICAgICAgP3N0cmluZyAkcXVlcnksCiAgICAgICAgP3N0cmluZyAkZnJhZ21lbnQKICAgICk6IHN0cmluZyB7CiAgICAgICAgaWYgKG51bGwgIT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHNjaGVtZSA9ICRzY2hlbWUuJzonOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICRhdXRob3JpdHkpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSA9ICcvLycuJGF1dGhvcml0eTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJz8nLiRxdWVyeTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkZnJhZ21lbnQpIHsKICAgICAgICAgICAgJGZyYWdtZW50ID0gJyMnLiRmcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2NoZW1lLiRhdXRob3JpdHkuJHBhdGguJHF1ZXJ5LiRmcmFnbWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPnVyaSA9ICR0aGlzLT51cmkgPz8gJHRoaXMtPmdldFVyaVN0cmluZygKICAgICAgICAgICAgJHRoaXMtPnNjaGVtZSwKICAgICAgICAgICAgJHRoaXMtPmF1dGhvcml0eSwKICAgICAgICAgICAgJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSwKICAgICAgICAgICAgJHRoaXMtPmZyYWdtZW50CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7c2NoZW1lOj9zdHJpbmcsIHVzZXJfaW5mbzo/c3RyaW5nLCBob3N0Oj9zdHJpbmcsIHBvcnQ6P2ludCwgcGF0aDpzdHJpbmcsIHF1ZXJ5Oj9zdHJpbmcsIGZyYWdtZW50Oj9zdHJpbmd9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2RlYnVnSW5mbygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzY2hlbWUnID0+ICR0aGlzLT5zY2hlbWUsCiAgICAgICAgICAgICd1c2VyX2luZm8nID0+IGlzc2V0KCR0aGlzLT51c2VyX2luZm8pID8gcHJlZ19yZXBsYWNlKCcsOiguKikuPyQsJywgJzoqKionLCAkdGhpcy0+dXNlcl9pbmZvKSA6IG51bGwsCiAgICAgICAgICAgICdob3N0JyA9PiAkdGhpcy0+aG9zdCwKICAgICAgICAgICAgJ3BvcnQnID0+ICR0aGlzLT5wb3J0LAogICAgICAgICAgICAncGF0aCcgPT4gJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICdxdWVyeScgPT4gJHRoaXMtPnF1ZXJ5LAogICAgICAgICAgICAnZnJhZ21lbnQnID0+ICR0aGlzLT5mcmFnbWVudCwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNjaGVtZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRob3JpdHk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VyX2luZm87CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIb3N0KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgwID09PSBzdHJwb3MoJHRoaXMtPnBhdGgsICcvLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLycubHRyaW0oJHRoaXMtPnBhdGgsICcvJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZyYWdtZW50OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNjaGVtZSgkc2NoZW1lKTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJHNjaGVtZSA9ICR0aGlzLT5mb3JtYXRTY2hlbWUoJHRoaXMtPmZpbHRlclN0cmluZygkc2NoZW1lKSk7CiAgICAgICAgaWYgKCRzY2hlbWUgPT09ICR0aGlzLT5zY2hlbWUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5zY2hlbWUgPSAkc2NoZW1lOwogICAgICAgICRjbG9uZS0+cG9ydCA9ICRjbG9uZS0+Zm9ybWF0UG9ydCgkY2xvbmUtPnBvcnQpOwogICAgICAgICRjbG9uZS0+YXV0aG9yaXR5ID0gJGNsb25lLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0ciB0aGUgdmFsdWUgdG8gZXZhbHVhdGUgYXMgYSBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSBzdWJtaXR0ZWQgZGF0YSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJTdHJpbmcoJHN0cik6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHN0cikgewogICAgICAgICAgICByZXR1cm4gJHN0cjsKICAgICAgICB9CgogICAgICAgIGlmIChpc19vYmplY3QoJHN0cikgJiYgbWV0aG9kX2V4aXN0cygkc3RyLCAnX190b1N0cmluZycpKSB7CiAgICAgICAgICAgICRzdHIgPSAoc3RyaW5nKSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19zY2FsYXIoJHN0cikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBjb21wb25lbnQgbXVzdCBiZSBhIHN0cmluZywgYSBzY2FsYXIgb3IgYSBzdHJpbmdhYmxlIG9iamVjdDsgYCVzYCBnaXZlbi4nLCBnZXR0eXBlKCRzdHIpKSk7CiAgICAgICAgfQoKICAgICAgICAkc3RyID0gKHN0cmluZykgJHN0cjsKICAgICAgICBpZiAoMSAhPT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSU5WQUxJRF9DSEFSUywgJHN0cikpIHsKICAgICAgICAgICAgcmV0dXJuICRzdHI7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIGNvbXBvbmVudCBgJXNgIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nLCAkc3RyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oJHVzZXIsICRwYXNzd29yZCA9IG51bGwpOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXNlcl9pbmZvID0gbnVsbDsKICAgICAgICAkdXNlciA9ICR0aGlzLT5maWx0ZXJTdHJpbmcoJHVzZXIpOwogICAgICAgIGlmIChudWxsICE9PSAkcGFzc3dvcmQpIHsKICAgICAgICAgICAgJHBhc3N3b3JkID0gJHRoaXMtPmZpbHRlclN0cmluZygkcGFzc3dvcmQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnICE9PSAkdXNlcikgewogICAgICAgICAgICAkdXNlcl9pbmZvID0gJHRoaXMtPmZvcm1hdFVzZXJJbmZvKCR1c2VyLCAkcGFzc3dvcmQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1c2VyX2luZm8gPT09ICR0aGlzLT51c2VyX2luZm8pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT51c2VyX2luZm8gPSAkdXNlcl9pbmZvOwogICAgICAgICRjbG9uZS0+YXV0aG9yaXR5ID0gJGNsb25lLT5zZXRBdXRob3JpdHkoKTsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+Zm9ybWF0SG9zdCgkdGhpcy0+ZmlsdGVyU3RyaW5nKCRob3N0KSk7CiAgICAgICAgaWYgKCRob3N0ID09PSAkdGhpcy0+aG9zdCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKICAgICAgICAkY2xvbmUtPmhvc3QgPSAkaG9zdDsKICAgICAgICAkY2xvbmUtPmF1dGhvcml0eSA9ICRjbG9uZS0+c2V0QXV0aG9yaXR5KCk7CiAgICAgICAgJGNsb25lLT5hc3NlcnRWYWxpZFN0YXRlKCk7CgogICAgICAgIHJldHVybiAkY2xvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCgkcG9ydCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRwb3J0ID0gJHRoaXMtPmZvcm1hdFBvcnQoJHBvcnQpOwogICAgICAgIGlmICgkcG9ydCA9PT0gJHRoaXMtPnBvcnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5wb3J0ID0gJHBvcnQ7CiAgICAgICAgJGNsb25lLT5hdXRob3JpdHkgPSAkY2xvbmUtPnNldEF1dGhvcml0eSgpOwogICAgICAgICRjbG9uZS0+YXNzZXJ0VmFsaWRTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8b2JqZWN0ICRwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aCgkcGF0aCk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRwYXRoID0gJHRoaXMtPmZpbHRlclN0cmluZygkcGF0aCk7CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXRoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIE5VTEwgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICAkcGF0aCA9ICR0aGlzLT5mb3JtYXRQYXRoKCRwYXRoKTsKICAgICAgICBpZiAoJHBhdGggPT09ICR0aGlzLT5wYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRjbG9uZSA9IGNsb25lICR0aGlzOwogICAgICAgICRjbG9uZS0+cGF0aCA9ICRwYXRoOwogICAgICAgICRjbG9uZS0+YXNzZXJ0VmFsaWRTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KCRxdWVyeSk6IFVyaUludGVyZmFjZQogICAgewogICAgICAgICRxdWVyeSA9ICR0aGlzLT5mb3JtYXRRdWVyeUFuZEZyYWdtZW50KCR0aGlzLT5maWx0ZXJTdHJpbmcoJHF1ZXJ5KSk7CiAgICAgICAgaWYgKCRxdWVyeSA9PT0gJHRoaXMtPnF1ZXJ5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRjbG9uZSA9IGNsb25lICR0aGlzOwogICAgICAgICRjbG9uZS0+cXVlcnkgPSAkcXVlcnk7CiAgICAgICAgJGNsb25lLT5hc3NlcnRWYWxpZFN0YXRlKCk7CgogICAgICAgIHJldHVybiAkY2xvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoJGZyYWdtZW50KTogVXJpSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGZyYWdtZW50ID0gJHRoaXMtPmZvcm1hdFF1ZXJ5QW5kRnJhZ21lbnQoJHRoaXMtPmZpbHRlclN0cmluZygkZnJhZ21lbnQpKTsKICAgICAgICBpZiAoJGZyYWdtZW50ID09PSAkdGhpcy0+ZnJhZ21lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGNsb25lID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNsb25lLT5mcmFnbWVudCA9ICRmcmFnbWVudDsKICAgICAgICAkY2xvbmUtPmFzc2VydFZhbGlkU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriInfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGV4cGxvZGU7CnVzZSBmdW5jdGlvbiBpbXBsb2RlOwp1c2UgZnVuY3Rpb24gcHJlZ19yZXBsYWNlX2NhbGxiYWNrOwp1c2UgZnVuY3Rpb24gcmF3dXJsZGVjb2RlOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIFVyaUluZm8KewogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfRU5DT0RFRF9DSEFSUyA9ICcsJSgyW0R8RV18M1swLTldfDRbMS05fEEtRl18NVswLTl8QUZdfDZbMS05fEEtRl18N1swLTl8RV0pLGknOwoKICAgIHByaXZhdGUgY29uc3QgV0hBVFdHX1NQRUNJQUxfU0NIRU1FUyA9IFsnZnRwJyA9PiAyMSwgJ2h0dHAnID0+IDgwLCAnaHR0cHMnID0+IDQ0MywgJ3dzJyA9PiA4MCwgJ3dzcycgPT4gNDQzXTsKCiAgICAvKioKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIHRoZSBVUkkgb2JqZWN0LgogICAgICoKICAgICAqIFRvIGJlIHZhbGlkIGFuIFVSSSBNVVNUIGltcGxlbWVudCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2U6CiAgICAgKiAgICAgLSBMZWFndWVcVXJpXFVyaUludGVyZmFjZQogICAgICogICAgIC0gUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHVyaSB0aGUgVVJJIHRvIHZhbGlkYXRlCiAgICAgKgogICAgICogQHRocm93cyBUeXBlRXJyb3IgaWYgdGhlIFVSSSBvYmplY3QgZG9lcyBub3QgaW1wbGVtZW50cyB0aGUgc3VwcG9ydGVkIGludGVyZmFjZXMuCiAgICAgKgogICAgICogQHJldHVybiBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJVcmkoJHVyaSkKICAgIHsKICAgICAgICBpZiAoJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgfHwgJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHVyaSBtdXN0IGJlIGEgdmFsaWQgVVJJIG9iamVjdCByZWNlaXZlZCBgJXNgJywgaXNfb2JqZWN0KCR1cmkpID8gZ2V0X2NsYXNzKCR1cmkpIDogZ2V0dHlwZSgkdXJpKSkpOwogICAgfQoKICAgIC8qKgogICAgICogTm9ybWFsaXplIGFuIFVSSSBmb3IgY29tcGFyaXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKCR1cmkpCiAgICB7CiAgICAgICAgJHVyaSA9IHNlbGY6OmZpbHRlclVyaSgkdXJpKTsKICAgICAgICAkbnVsbCA9IHNlbGY6OmVtcHR5Q29tcG9uZW50VmFsdWUoJHVyaSk7CgogICAgICAgICRwYXRoID0gJHVyaS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgnLycgPT09ICgkcGF0aFswXSA/PyAnJykgfHwgJycgIT09ICR1cmktPmdldFNjaGVtZSgpLiR1cmktPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgICRwYXRoID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJHVyaSwgJHVyaS0+d2l0aFBhdGgoJycpLT53aXRoUXVlcnkoJG51bGwpKS0+Z2V0UGF0aCgpOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gJHVyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAkZnJhZ21lbnQgPSAkdXJpLT5nZXRGcmFnbWVudCgpOwogICAgICAgICRmcmFnbWVudE9yaWcgPSAkZnJhZ21lbnQ7CiAgICAgICAgJHBhaXJzID0gbnVsbCA9PT0gJHF1ZXJ5ID8gW10gOiBleHBsb2RlKCcmJywgJHF1ZXJ5KTsKICAgICAgICBzb3J0KCRwYWlycywgU09SVF9SRUdVTEFSKTsKCiAgICAgICAgJHJlcGxhY2UgPSBzdGF0aWMgZm4gKGFycmF5ICRtYXRjaGVzKTogc3RyaW5nID0+IHJhd3VybGRlY29kZSgkbWF0Y2hlc1swXSk7CgogICAgICAgICRyZXR2YWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soc2VsZjo6UkVHRVhQX0VOQ09ERURfQ0hBUlMsICRyZXBsYWNlLCBbJHBhdGgsIGltcGxvZGUoJyYnLCAkcGFpcnMpLCAkZnJhZ21lbnRdKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHJldHZhbCkgewogICAgICAgICAgICBbJHBhdGgsICRxdWVyeSwgJGZyYWdtZW50XSA9ICRyZXR2YWwgKyBbJycsICRudWxsLCAkbnVsbF07CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bGwgIT09ICR1cmktPmdldEF1dGhvcml0eSgpICYmICcnID09PSAkcGF0aCkgewogICAgICAgICAgICAkcGF0aCA9ICcvJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpCiAgICAgICAgICAgIC0+d2l0aEhvc3QoVXJpOjpjcmVhdGVGcm9tQ29tcG9uZW50cyhbJ2hvc3QnID0+ICR1cmktPmdldEhvc3QoKV0pLT5nZXRIb3N0KCkpCiAgICAgICAgICAgIC0+d2l0aFBhdGgoJHBhdGgpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KFtdID09PSAkcGFpcnMgPyAkbnVsbCA6ICRxdWVyeSkKICAgICAgICAgICAgLT53aXRoRnJhZ21lbnQoJG51bGwgPT09ICRmcmFnbWVudE9yaWcgPyAkZnJhZ21lbnRPcmlnIDogJGZyYWdtZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlbGwgd2hldGhlciB0aGUgVVJJIHJlcHJlc2VudHMgYW4gYWJzb2x1dGUgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZSgkdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpICE9PSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSktPmdldFNjaGVtZSgpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBVUkkgcmVwcmVzZW50cyBhIG5ldHdvcmsgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGgoJHVyaSk6IGJvb2wKICAgIHsKICAgICAgICAkdXJpID0gc2VsZjo6ZmlsdGVyVXJpKCR1cmkpOwogICAgICAgICRudWxsID0gc2VsZjo6ZW1wdHlDb21wb25lbnRWYWx1ZSgkdXJpKTsKCiAgICAgICAgcmV0dXJuICRudWxsID09PSAkdXJpLT5nZXRTY2hlbWUoKSAmJiAkbnVsbCAhPT0gJHVyaS0+Z2V0QXV0aG9yaXR5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZWxsIHdoZXRoZXIgdGhlIFVSSSByZXByZXNlbnRzIGFuIGFic29sdXRlIHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aCgkdXJpKTogYm9vbAogICAgewogICAgICAgICR1cmkgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgJG51bGwgPSBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOwoKICAgICAgICByZXR1cm4gJG51bGwgPT09ICR1cmktPmdldFNjaGVtZSgpCiAgICAgICAgICAgICYmICRudWxsID09PSAkdXJpLT5nZXRBdXRob3JpdHkoKQogICAgICAgICAgICAmJiAnLycgPT09ICgkdXJpLT5nZXRQYXRoKClbMF0gPz8gJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBVUkkgcmVwcmVzZW50cyBhIHJlbGF0aXZlIHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICR1cmkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZlUGF0aCgkdXJpKTogYm9vbAogICAgewogICAgICAgICR1cmkgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgJG51bGwgPSBzZWxmOjplbXB0eUNvbXBvbmVudFZhbHVlKCR1cmkpOwoKICAgICAgICByZXR1cm4gJG51bGwgPT09ICR1cmktPmdldFNjaGVtZSgpCiAgICAgICAgICAgICYmICRudWxsID09PSAkdXJpLT5nZXRBdXRob3JpdHkoKQogICAgICAgICAgICAmJiAnLycgIT09ICgkdXJpLT5nZXRQYXRoKClbMF0gPz8gJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIGJvdGggVVJJIHJlZmVycyB0byB0aGUgc2FtZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50KCR1cmksICRiYXNlX3VyaSk6IGJvb2wKICAgIHsKICAgICAgICAkdXJpID0gc2VsZjo6bm9ybWFsaXplKCR1cmkpOwogICAgICAgICRiYXNlX3VyaSA9IHNlbGY6Om5vcm1hbGl6ZSgkYmFzZV91cmkpOwoKICAgICAgICByZXR1cm4gKHN0cmluZykgJHVyaS0+d2l0aEZyYWdtZW50KCR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsKQogICAgICAgICAgICA9PT0gKHN0cmluZykgJGJhc2VfdXJpLT53aXRoRnJhZ21lbnQoJGJhc2VfdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSA/ICcnIDogbnVsbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBVUkkgb3JpZ2luIHByb3BlcnR5IGFzIGRlZmluZWQgYnkgV0hBVFdHIFVSTCBsaXZpbmcgc3RhbmRhcmQuCiAgICAgKgogICAgICoge0BzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNvcmlnaW59CiAgICAgKgogICAgICogRm9yIFVSSSB3aXRob3V0IGEgc3BlY2lhbCBzY2hlbWUgdGhlIG1ldGhvZCByZXR1cm5zIG51bGwKICAgICAqIEZvciBVUkkgd2l0aCB0aGUgZmlsZSBzY2hlbWUgdGhlIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIChhcyB0aGlzIGlzIGxlZnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRlY2lzaW9uKQogICAgICogRm9yIFVSSSB3aXRoIGEgc3BlY2lhbCBzY2hlbWUgdGhlIG1ldGhvZCByZXR1cm5zIHRoZSBzY2hlbWUgZm9sbG93ZWQgYnkgaXRzIGF1dGhvcml0eSAod2l0aG91dCB0aGUgdXNlcmluZm8gcGFydCkKICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yaWdpbigkdXJpKTogP3N0cmluZwogICAgewogICAgICAgICRzY2hlbWUgPSBzZWxmOjpmaWx0ZXJVcmkoJHVyaSktPmdldFNjaGVtZSgpOwogICAgICAgIGlmICgnYmxvYicgPT09ICRzY2hlbWUpIHsKICAgICAgICAgICAgJHVyaSA9IFVyaTo6Y3JlYXRlRnJvbVN0cmluZygkdXJpLT5nZXRQYXRoKCkpOwogICAgICAgICAgICAkc2NoZW1lID0gJHVyaS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJHNjaGVtZSB8fCAhYXJyYXlfa2V5X2V4aXN0cygkc2NoZW1lLCBzZWxmOjpXSEFUV0dfU1BFQ0lBTF9TQ0hFTUVTKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRudWxsID0gc2VsZjo6ZW1wdHlDb21wb25lbnRWYWx1ZSgkdXJpKTsKCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR1cmktPndpdGhGcmFnbWVudCgkbnVsbCktPndpdGhRdWVyeSgkbnVsbCktPndpdGhQYXRoKCcnKS0+d2l0aFVzZXJJbmZvKCRudWxsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDcm9zc09yaWdpbigkdXJpLCAkYmFzZV91cmkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICgkdXJpU3RyaW5nID0gc2VsZjo6Z2V0T3JpZ2luKFVyaTo6Y3JlYXRlRnJvbVVyaSgkdXJpKSkpCiAgICAgICAgICAgIHx8IG51bGwgPT09ICgkYmFzZVVyaVN0cmluZyA9IHNlbGY6OmdldE9yaWdpbihVcmk6OmNyZWF0ZUZyb21VcmkoJGJhc2VfdXJpKSkpCiAgICAgICAgICAgIHx8ICR1cmlTdHJpbmcgIT09ICRiYXNlVXJpU3RyaW5nOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriResolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2UgYXMgUHNyN1VyaUludGVyZmFjZTsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X3BvcDsKdXNlIGZ1bmN0aW9uIGFycmF5X3JlZHVjZTsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gZW5kOwp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGdldHR5cGU7CnVzZSBmdW5jdGlvbiBpbXBsb2RlOwp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGVhdDsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCmZpbmFsIGNsYXNzIFVyaVJlc29sdmVyCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsaW50PgogICAgICovCiAgICBjb25zdCBET1RfU0VHTUVOVFMgPSBbJy4nID0+IDEsICcuLicgPT4gMV07CgogICAgLyoqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZSBhbiBVUkkgYWdhaW5zdCBhIGJhc2UgVVJJIHVzaW5nIFJGQzM5ODYgcnVsZXMuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgVXJpSW50ZXJmYWNlIHRoZSBtZXRob2QgcmV0dXJucyBhIFVyaUludGVyZmFjZSBvYmplY3QKICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIFBzcjdVcmlJbnRlcmZhY2UgdGhlIG1ldGhvZCByZXR1cm5zIGEgUHNyN1VyaUludGVyZmFjZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlKCR1cmksICRiYXNlX3VyaSkKICAgIHsKICAgICAgICBzZWxmOjpmaWx0ZXJVcmkoJHVyaSk7CiAgICAgICAgc2VsZjo6ZmlsdGVyVXJpKCRiYXNlX3VyaSk7CiAgICAgICAgJG51bGwgPSAkdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSA/ICcnIDogbnVsbDsKCiAgICAgICAgaWYgKCRudWxsICE9PSAkdXJpLT5nZXRTY2hlbWUoKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaQogICAgICAgICAgICAgICAgLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbnVsbCAhPT0gJHVyaS0+Z2V0QXV0aG9yaXR5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmkKICAgICAgICAgICAgICAgIC0+d2l0aFNjaGVtZSgkYmFzZV91cmktPmdldFNjaGVtZSgpKQogICAgICAgICAgICAgICAgLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgICR1c2VyID0gJG51bGw7CiAgICAgICAgJHBhc3MgPSBudWxsOwogICAgICAgICR1c2VySW5mbyA9ICRiYXNlX3VyaS0+Z2V0VXNlckluZm8oKTsKICAgICAgICBpZiAobnVsbCAhPT0gJHVzZXJJbmZvKSB7CiAgICAgICAgICAgIFskdXNlciwgJHBhc3NdID0gZXhwbG9kZSgnOicsICR1c2VySW5mbywgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIFskdXJpX3BhdGgsICR1cmlfcXVlcnldID0gc2VsZjo6cmVzb2x2ZVBhdGhBbmRRdWVyeSgkdXJpLCAkYmFzZV91cmkpOwoKICAgICAgICByZXR1cm4gJHVyaQogICAgICAgICAgICAtPndpdGhQYXRoKHNlbGY6OnJlbW92ZURvdFNlZ21lbnRzKCR1cmlfcGF0aCkpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5KCR1cmlfcXVlcnkpCiAgICAgICAgICAgIC0+d2l0aEhvc3QoJGJhc2VfdXJpLT5nZXRIb3N0KCkpCiAgICAgICAgICAgIC0+d2l0aFBvcnQoJGJhc2VfdXJpLT5nZXRQb3J0KCkpCiAgICAgICAgICAgIC0+d2l0aFVzZXJJbmZvKChzdHJpbmcpICR1c2VyLCAkcGFzcykKICAgICAgICAgICAgLT53aXRoU2NoZW1lKCRiYXNlX3VyaS0+Z2V0U2NoZW1lKCkpCiAgICAgICAgOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIHRoZSBVUkkgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdXJpIGFuIFVSSSBvYmplY3QKICAgICAqCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgVVJJIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnRzIHRoZSBzdXBwb3J0ZWQgaW50ZXJmYWNlcy4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyVXJpKCR1cmkpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlICYmICEkdXJpIGluc3RhbmNlb2YgUHNyN1VyaUludGVyZmFjZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1RoZSB1cmkgbXVzdCBiZSBhIHZhbGlkIFVSSSBvYmplY3QgcmVjZWl2ZWQgYCVzYCcsIGdldHR5cGUoJHVyaSkpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgZG90IHNlZ21lbnRzIGZyb20gdGhlIFVSSSBwYXRoLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhzdHJpbmcgJHBhdGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IHN0cnBvcygkcGF0aCwgJy4nKSkgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkb2xkX3NlZ21lbnRzID0gZXhwbG9kZSgnLycsICRwYXRoKTsKICAgICAgICAkbmV3X3BhdGggPSBpbXBsb2RlKCcvJywgYXJyYXlfcmVkdWNlKCRvbGRfc2VnbWVudHMsIFtVcmlSZXNvbHZlcjo6Y2xhc3MsICdyZWR1Y2VyJ10sIFtdKSk7CiAgICAgICAgaWYgKGlzc2V0KHNlbGY6OkRPVF9TRUdNRU5UU1tlbmQoJG9sZF9zZWdtZW50cyldKSkgewogICAgICAgICAgICAkbmV3X3BhdGggLj0gJy8nOwogICAgICAgIH0KCiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgLy8gYWRkZWQgYmVjYXVzZSBzb21lIFBTUi03IGltcGxlbWVudGF0aW9ucyBkbyBub3QgcmVzcGVjdCBSRkMzOTg2CiAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkcGF0aCwgJy8nKSAmJiAwICE9PSBzdHJwb3MoJG5ld19wYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLycuJG5ld19wYXRoOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgIHJldHVybiAkbmV3X3BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgZG90IHNlZ21lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlZHVjZXIoYXJyYXkgJGNhcnJ5LCBzdHJpbmcgJHNlZ21lbnQpOiBhcnJheQogICAgewogICAgICAgIGlmICgnLi4nID09PSAkc2VnbWVudCkgewogICAgICAgICAgICBhcnJheV9wb3AoJGNhcnJ5KTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KHNlbGY6OkRPVF9TRUdNRU5UU1skc2VnbWVudF0pKSB7CiAgICAgICAgICAgICRjYXJyeVtdID0gJHNlZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNhcnJ5OwogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZSBhbiBVUkkgcGF0aCBhbmQgcXVlcnkgY29tcG9uZW50LgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOnN0cmluZywgMTpzdHJpbmd8bnVsbH0KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZVBhdGhBbmRRdWVyeSgkdXJpLCAkYmFzZV91cmkpOiBhcnJheQogICAgewogICAgICAgICR0YXJnZXRfcGF0aCA9ICR1cmktPmdldFBhdGgoKTsKICAgICAgICAkdGFyZ2V0X3F1ZXJ5ID0gJHVyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAkbnVsbCA9ICR1cmkgaW5zdGFuY2VvZiBQc3I3VXJpSW50ZXJmYWNlID8gJycgOiBudWxsOwogICAgICAgICRiYXNlTnVsbCA9ICRiYXNlX3VyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgPyAnJyA6IG51bGw7CgogICAgICAgIGlmICgwID09PSBzdHJwb3MoJHRhcmdldF9wYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiBbJHRhcmdldF9wYXRoLCAkdGFyZ2V0X3F1ZXJ5XTsKICAgICAgICB9CgogICAgICAgIGlmICgnJyA9PT0gJHRhcmdldF9wYXRoKSB7CiAgICAgICAgICAgIGlmICgkbnVsbCA9PT0gJHRhcmdldF9xdWVyeSkgewogICAgICAgICAgICAgICAgJHRhcmdldF9xdWVyeSA9ICRiYXNlX3VyaS0+Z2V0UXVlcnkoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gJGJhc2VfdXJpLT5nZXRQYXRoKCk7CiAgICAgICAgICAgIC8vQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgICAgIC8vYmVjYXVzZSBzb21lIFBTUi03IFVyaSBpbXBsZW1lbnRhdGlvbnMgYWxsb3cgdGhpcyBSRkMzOTg2IGZvcmJpZGRlbiBjb25zdHJ1Y3Rpb24KICAgICAgICAgICAgaWYgKCRiYXNlTnVsbCAhPT0gJGJhc2VfdXJpLT5nZXRBdXRob3JpdHkoKSAmJiAwICE9PSBzdHJwb3MoJHRhcmdldF9wYXRoLCAnLycpKSB7CiAgICAgICAgICAgICAgICAkdGFyZ2V0X3BhdGggPSAnLycuJHRhcmdldF9wYXRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAgICAgcmV0dXJuIFskdGFyZ2V0X3BhdGgsICR0YXJnZXRfcXVlcnldOwogICAgICAgIH0KCiAgICAgICAgJGJhc2VfcGF0aCA9ICRiYXNlX3VyaS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgkYmFzZU51bGwgIT09ICRiYXNlX3VyaS0+Z2V0QXV0aG9yaXR5KCkgJiYgJycgPT09ICRiYXNlX3BhdGgpIHsKICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gJy8nLiR0YXJnZXRfcGF0aDsKICAgICAgICB9CgogICAgICAgIGlmICgnJyAhPT0gJGJhc2VfcGF0aCkgewogICAgICAgICAgICAkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJGJhc2VfcGF0aCk7CiAgICAgICAgICAgIGFycmF5X3BvcCgkc2VnbWVudHMpOwogICAgICAgICAgICBpZiAoW10gIT09ICRzZWdtZW50cykgewogICAgICAgICAgICAgICAgJHRhcmdldF9wYXRoID0gaW1wbG9kZSgnLycsICRzZWdtZW50cykuJy8nLiR0YXJnZXRfcGF0aDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskdGFyZ2V0X3BhdGgsICR0YXJnZXRfcXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogUmVsYXRpdml6ZSBhbiBVUkkgYWNjb3JkaW5nIHRvIGEgYmFzZSBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBzdWJtaXR0ZWQgVVJJIGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBVUkkgaW5zdGFuY2Ugb2YgdGhlIHNhbWUgdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBhcHBsaWVkIG1vZGlmaWNhdGlvbnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSB0cmFuc3BhcmVudCB3aGVuIGRlYWxpbmcgd2l0aCBlcnJvciBhbmQgZXhjZXB0aW9ucy4KICAgICAqIEl0IE1VU1Qgbm90IGFsdGVyIG9mIHNpbGVuY2UgdGhlbSBhcGFydCBmcm9tIHZhbGlkYXRpbmcgaXRzIG93biBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJGJhc2VfdXJpCiAgICAgKgogICAgICogQHJldHVybiBQc3I3VXJpSW50ZXJmYWNlfFVyaUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemUoJHVyaSwgJGJhc2VfdXJpKQogICAgewogICAgICAgIHNlbGY6OmZpbHRlclVyaSgkdXJpKTsKICAgICAgICBzZWxmOjpmaWx0ZXJVcmkoJGJhc2VfdXJpKTsKICAgICAgICAkdXJpID0gc2VsZjo6Zm9ybWF0SG9zdCgkdXJpKTsKICAgICAgICAkYmFzZV91cmkgPSBzZWxmOjpmb3JtYXRIb3N0KCRiYXNlX3VyaSk7CiAgICAgICAgaWYgKCFzZWxmOjppc1JlbGF0aXZpemFibGUoJHVyaSwgJGJhc2VfdXJpKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaTsKICAgICAgICB9CgogICAgICAgICRudWxsID0gJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgPyAnJyA6IG51bGw7CiAgICAgICAgJHVyaSA9ICR1cmktPndpdGhTY2hlbWUoJG51bGwpLT53aXRoUG9ydChudWxsKS0+d2l0aFVzZXJJbmZvKCRudWxsKS0+d2l0aEhvc3QoJG51bGwpOwogICAgICAgICR0YXJnZXRfcGF0aCA9ICR1cmktPmdldFBhdGgoKTsKICAgICAgICBpZiAoJHRhcmdldF9wYXRoICE9PSAkYmFzZV91cmktPmdldFBhdGgoKSkgewogICAgICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFBhdGgoc2VsZjo6cmVsYXRpdml6ZVBhdGgoJHRhcmdldF9wYXRoLCAkYmFzZV91cmktPmdldFBhdGgoKSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OmNvbXBvbmVudEVxdWFscygnZ2V0UXVlcnknLCAkdXJpLCAkYmFzZV91cmkpKSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpLT53aXRoUGF0aCgnJyktPndpdGhRdWVyeSgkbnVsbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG51bGwgPT09ICR1cmktPmdldFF1ZXJ5KCkpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmktPndpdGhQYXRoKHNlbGY6OmZvcm1hdFBhdGhXaXRoRW1wdHlCYXNlUXVlcnkoJHRhcmdldF9wYXRoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVyaS0+d2l0aFBhdGgoJycpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbHMgd2hldGhlciB0aGUgY29tcG9uZW50IHZhbHVlIGZyb20gYm90aCBVUkkgb2JqZWN0IGVxdWFscy4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wb25lbnRFcXVhbHMoc3RyaW5nICRtZXRob2QsICR1cmksICRiYXNlX3VyaSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0Q29tcG9uZW50KCRtZXRob2QsICR1cmkpID09PSBzZWxmOjpnZXRDb21wb25lbnQoJG1ldGhvZCwgJGJhc2VfdXJpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbXBvbmVudCB2YWx1ZSBmcm9tIHRoZSBzdWJtaXR0ZWQgVVJJIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRDb21wb25lbnQoc3RyaW5nICRtZXRob2QsICR1cmkpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgJGNvbXBvbmVudCA9ICR1cmktPiRtZXRob2QoKTsKICAgICAgICBpZiAoJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UgJiYgJycgPT09ICRjb21wb25lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbXBvbmVudDsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciB0aGUgVVJJIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yIGlmIHRoZSBVUkkgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudHMgdGhlIHN1cHBvcnRlZCBpbnRlcmZhY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0SG9zdCgkdXJpKQogICAgewogICAgICAgIGlmICghJHVyaSBpbnN0YW5jZW9mIFBzcjdVcmlJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICR1cmk7CiAgICAgICAgfQoKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPndpdGhIb3N0KChzdHJpbmcpIFVyaTo6Y3JlYXRlRnJvbUNvbXBvbmVudHMoWydob3N0JyA9PiAkaG9zdF0pLT5nZXRIb3N0KCkpOwogICAgfQoKICAgIC8qKgogICAgICogVGVsbCB3aGV0aGVyIHRoZSBzdWJtaXR0ZWQgVVJJIG9iamVjdCBjYW4gYmUgcmVsYXRpdml6ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gUHNyN1VyaUludGVyZmFjZXxVcmlJbnRlcmZhY2UgJHVyaQogICAgICogQHBhcmFtIFBzcjdVcmlJbnRlcmZhY2V8VXJpSW50ZXJmYWNlICRiYXNlX3VyaQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc1JlbGF0aXZpemFibGUoJHVyaSwgJGJhc2VfdXJpKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAhVXJpSW5mbzo6aXNSZWxhdGl2ZVBhdGgoJHVyaSkKICAgICAgICAgICAgJiYgc2VsZjo6Y29tcG9uZW50RXF1YWxzKCdnZXRTY2hlbWUnLCAkdXJpLCAkYmFzZV91cmkpCiAgICAgICAgICAgICYmICBzZWxmOjpjb21wb25lbnRFcXVhbHMoJ2dldEF1dGhvcml0eScsICR1cmksICRiYXNlX3VyaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWxhdGl2ZSB0aGUgVVJJIGZvciBhIGF1dGhvcml0eS1sZXNzIHRhcmdldCBVUkkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemVQYXRoKHN0cmluZyAkcGF0aCwgc3RyaW5nICRiYXNlcGF0aCk6IHN0cmluZwogICAgewogICAgICAgICRiYXNlX3NlZ21lbnRzID0gc2VsZjo6Z2V0U2VnbWVudHMoJGJhc2VwYXRoKTsKICAgICAgICAkdGFyZ2V0X3NlZ21lbnRzID0gc2VsZjo6Z2V0U2VnbWVudHMoJHBhdGgpOwogICAgICAgICR0YXJnZXRfYmFzZW5hbWUgPSBhcnJheV9wb3AoJHRhcmdldF9zZWdtZW50cyk7CiAgICAgICAgYXJyYXlfcG9wKCRiYXNlX3NlZ21lbnRzKTsKICAgICAgICBmb3JlYWNoICgkYmFzZV9zZWdtZW50cyBhcyAkb2Zmc2V0ID0+ICRzZWdtZW50KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRhcmdldF9zZWdtZW50c1skb2Zmc2V0XSkgfHwgJHNlZ21lbnQgIT09ICR0YXJnZXRfc2VnbWVudHNbJG9mZnNldF0pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuc2V0KCRiYXNlX3NlZ21lbnRzWyRvZmZzZXRdLCAkdGFyZ2V0X3NlZ21lbnRzWyRvZmZzZXRdKTsKICAgICAgICB9CiAgICAgICAgJHRhcmdldF9zZWdtZW50c1tdID0gJHRhcmdldF9iYXNlbmFtZTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZvcm1hdFBhdGgoCiAgICAgICAgICAgIHN0cl9yZXBlYXQoJy4uLycsIGNvdW50KCRiYXNlX3NlZ21lbnRzKSkuaW1wbG9kZSgnLycsICR0YXJnZXRfc2VnbWVudHMpLAogICAgICAgICAgICAkYmFzZXBhdGgKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJucyB0aGUgcGF0aCBzZWdtZW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFNlZ21lbnRzKHN0cmluZyAkcGF0aCk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCcnICE9PSAkcGF0aCAmJiAnLycgPT09ICRwYXRoWzBdKSB7CiAgICAgICAgICAgICRwYXRoID0gc3Vic3RyKCRwYXRoLCAxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBsb2RlKCcvJywgJHBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0dGluZyB0aGUgcGF0aCB0byBrZWVwIGEgdmFsaWQgVVJJLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRQYXRoKHN0cmluZyAkcGF0aCwgc3RyaW5nICRiYXNlcGF0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgnJyA9PT0gJHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KCRiYXNlcGF0aCwgWycnLCAnLyddLCB0cnVlKSA/ICRiYXNlcGF0aCA6ICcuLyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICgkY29sb25fcG9zID0gc3RycG9zKCRwYXRoLCAnOicpKSkgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkc2xhc2hfcG9zID0gc3RycG9zKCRwYXRoLCAnLycpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHNsYXNoX3BvcyB8fCAkY29sb25fcG9zIDwgJHNsYXNoX3BvcykgewogICAgICAgICAgICByZXR1cm4gIi4vJHBhdGgiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0dGluZyB0aGUgcGF0aCB0byBrZWVwIGEgcmVzb2x2YWJsZSBVUkkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdFBhdGhXaXRoRW1wdHlCYXNlUXVlcnkoc3RyaW5nICRwYXRoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRhcmdldF9zZWdtZW50cyA9IHNlbGY6OmdldFNlZ21lbnRzKCRwYXRoKTsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJhc2VuYW1lICovCiAgICAgICAgJGJhc2VuYW1lID0gZW5kKCR0YXJnZXRfc2VnbWVudHMpOwoKICAgICAgICByZXR1cm4gJycgPT09ICRiYXNlbmFtZSA/ICcuLycgOiAkYmFzZW5hbWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXElkbmFDb252ZXJzaW9uRmFpbGVkOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXElkblN1cHBvcnRNaXNzaW5nOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxJZG5hXElkbmE7CnVzZSBUeXBlRXJyb3I7CnVzZSBmdW5jdGlvbiBhcnJheV9tZXJnZTsKdXNlIGZ1bmN0aW9uIGV4cGxvZGU7CnVzZSBmdW5jdGlvbiBmaWx0ZXJfdmFyOwp1c2UgZnVuY3Rpb24gZ2V0dHlwZTsKdXNlIGZ1bmN0aW9uIGluZXRfcHRvbjsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3NjYWxhcjsKdXNlIGZ1bmN0aW9uIG1ldGhvZF9leGlzdHM7CnVzZSBmdW5jdGlvbiBwcmVnX21hdGNoOwp1c2UgZnVuY3Rpb24gcmF3dXJsZGVjb2RlOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGNvbnN0IEZJTFRFUl9GTEFHX0lQVjY7CnVzZSBjb25zdCBGSUxURVJfVkFMSURBVEVfSVA7CgovKioKICogQSBjbGFzcyB0byBwYXJzZSBhIFVSSSBzdHJpbmcgYWNjb3JkaW5nIHRvIFJGQzM5ODYuCiAqCiAqIEBsaW5rICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2CiAqIEBwYWNrYWdlIExlYWd1ZVxVcmkKICogQGF1dGhvciAgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqIEBzaW5jZSAgIDYuMC4wCiAqLwpmaW5hbCBjbGFzcyBVcmlTdHJpbmcKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IFVSSSBjb21wb25lbnQgdmFsdWVzLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFVSSV9DT01QT05FTlRTID0gWwogICAgICAgICdzY2hlbWUnID0+IG51bGwsICd1c2VyJyA9PiBudWxsLCAncGFzcycgPT4gbnVsbCwgJ2hvc3QnID0+IG51bGwsCiAgICAgICAgJ3BvcnQnID0+IG51bGwsICdwYXRoJyA9PiAnJywgJ3F1ZXJ5JyA9PiBudWxsLCAnZnJhZ21lbnQnID0+IG51bGwsCiAgICBdOwoKICAgIC8qKgogICAgICogU2ltcGxlIFVSSSB3aGljaCBkbyBub3QgbmVlZCBhbnkgcGFyc2luZy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBVUklfU0NIT1JUQ1VUUyA9IFsKICAgICAgICAnJyA9PiBbXSwKICAgICAgICAnIycgPT4gWydmcmFnbWVudCcgPT4gJyddLAogICAgICAgICc/JyA9PiBbJ3F1ZXJ5JyA9PiAnJ10sCiAgICAgICAgJz8jJyA9PiBbJ3F1ZXJ5JyA9PiAnJywgJ2ZyYWdtZW50JyA9PiAnJ10sCiAgICAgICAgJy8nID0+IFsncGF0aCcgPT4gJy8nXSwKICAgICAgICAnLy8nID0+IFsnaG9zdCcgPT4gJyddLAogICAgXTsKCiAgICAvKioKICAgICAqIFJhbmdlIG9mIGludmFsaWQgY2hhcmFjdGVycyBpbiBVUkkgc3RyaW5nLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX1VSSV9DSEFSUyA9ICcvW1x4MDAtXHgxZlx4N2ZdLyc7CgogICAgLyoqCiAgICAgKiBSRkMzOTg2IHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkkgc3BsaXR0ZXIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9VUklfUEFSVFMgPSAnLF4KICAgICAgICAoPzxzY2hlbWU+KD88c2NvbnRlbnQ+W146Lz9cI10rKTopPyAgICAjIFVSSSBzY2hlbWUgY29tcG9uZW50CiAgICAgICAgKD88YXV0aG9yaXR5Pi8vKD88YWNvbnRlbnQ+W14vP1wjXSopKT8gIyBVUkkgYXV0aG9yaXR5IHBhcnQKICAgICAgICAoPzxwYXRoPlteP1wjXSopICAgICAgICAgICAgICAgICAgICAgICAjIFVSSSBwYXRoIGNvbXBvbmVudAogICAgICAgICg/PHF1ZXJ5Plw/KD88cWNvbnRlbnQ+W15cI10qKSk/ICAgICAgICMgVVJJIHF1ZXJ5IGNvbXBvbmVudAogICAgICAgICg/PGZyYWdtZW50PlwjKD88ZmNvbnRlbnQ+LiopKT8gICAgICAgICMgVVJJIGZyYWdtZW50IGNvbXBvbmVudAogICAgLHgnOwoKICAgIC8qKgogICAgICogVVJJIHNjaGVtZSByZWd1bGFyIGV4cHJlc3NzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1VSSV9TQ0hFTUUgPSAnL14oW2Etel1bYS16XGRcK1wuXC1dKik/JC9pJzsKCiAgICAvKioKICAgICAqIElQdkZ1dHVyZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JUF9GVVRVUkUgPSAnL14KICAgICAgICB2KD88dmVyc2lvbj5bQS1GMC05XSkrXC4KICAgICAgICAoPzoKICAgICAgICAgICAgKD88dW5yZXNlcnZlZD5bYS16MC05X35cLVwuXSl8CiAgICAgICAgICAgICg/PHN1Yl9kZWxpbXM+WyEkJlwnKCkqKyw7PTpdKSAgIyBhbHNvIGluY2x1ZGUgdGhlIDogY2hhcmFjdGVyCiAgICAgICAgKSsKICAgICQvaXgnOwoKICAgIC8qKgogICAgICogR2VuZXJhbCByZWdpc3RlcmVkIG5hbWUgcmVndWxhciBleHByZXNzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfUkVHSVNURVJFRF9OQU1FID0gJy8oPyhERUZJTkUpCiAgICAgICAgKD88dW5yZXNlcnZlZD5bYS16MC05X35cLV0pICAgIyAuIGlzIG1pc3NpbmcgYXMgaXQgaXMgdXNlZCB0byBzZXBhcmF0ZSBsYWJlbHMKICAgICAgICAoPzxzdWJfZGVsaW1zPlshJCZcJygpKissOz1dKQogICAgICAgICg/PGVuY29kZWQ+JVtBLUYwLTldezJ9KQogICAgICAgICg/PHJlZ19uYW1lPig/Oig/JnVucmVzZXJ2ZWQpfCg/JnN1Yl9kZWxpbXMpfCg/JmVuY29kZWQpKSopCiAgICApCiAgICBeKD86KD8mcmVnX25hbWUpXC4pKig/JnJlZ19uYW1lKVwuPyQvaXgnOwoKICAgIC8qKgogICAgICogSW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgcmVndWxhciBleHByZXNzaW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSU5WQUxJRF9IT1NUX0NIQVJTID0gJy8KICAgICAgICBbOlwvPyNcW1xdQCBdICAjIGdlbi1kZWxpbXMgY2hhcmFjdGVycyBhcyB3ZWxsIGFzIHRoZSBzcGFjZSBjaGFyYWN0ZXIKICAgIC9peCc7CgogICAgLyoqCiAgICAgKiBJbnZhbGlkIHBhdGggZm9yIFVSSSB3aXRob3V0IHNjaGVtZSBhbmQgYXV0aG9yaXR5IHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMwogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JTlZBTElEX1BBVEggPSAnLF4oKFteL10qKTopKC4qKT8vLCc7CgogICAgLyoqCiAgICAgKiBIb3N0IGFuZCBQb3J0IHNwbGl0dGVyIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfSE9TVF9QT1JUID0gJyxeKD88aG9zdD5cWy4qXF18W146XSopKDooPzxwb3J0Pi4qKSk/JCwnOwoKICAgIC8qKgogICAgICogSUROIEhvc3QgZGV0ZWN0b3IgcmVndWxhciBleHByZXNzaW9uLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFJFR0VYUF9JRE5fUEFUVEVSTiA9ICcvW15ceDIwLVx4N2ZdLyc7CgogICAgLyoqCiAgICAgKiBPbmx5IHRoZSBhZGRyZXNzIGJsb2NrIGZlODA6Oi8xMCBjYW4gaGF2ZSBhIFpvbmUgSUQgYXR0YWNoIHRvCiAgICAgKiBsZXQncyBkZXRlY3QgdGhlIGxpbmsgbG9jYWwgc2lnbmlmaWNhbnQgMTAgYml0cy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBaT05FX0lEX0FERFJFU1NfQkxPQ0sgPSAiXHhmZVx4ODAiOwoKICAgIC8qKgogICAgICogR2VuZXJhdGUgYW4gVVJJIHN0cmluZyByZXByZXNlbnRhdGlvbiBmcm9tIGl0cyBwYXJzZWQgcmVwcmVzZW50YXRpb24KICAgICAqIHJldHVybmVkIGJ5IExlYWd1ZVxVcmlTdHJpbmc6OnBhcnNlKCkgb3IgUEhQJ3MgcGFyc2VfdXJsLgogICAgICoKICAgICAqIElmIHlvdSBzdXBwbHkgeW91ciBvd24gYXJyYXksIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZwogICAgICogdmFsaWQgY29tcG9uZW50cyB3aXRob3V0IHRoZWlyIFVSSSBkZWxpbWl0ZXJzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4zCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTcuNQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXsKICAgICAqICBzY2hlbWU6P3N0cmluZywKICAgICAqICB1c2VyOj9zdHJpbmcsCiAgICAgKiAgcGFzczo/c3RyaW5nLAogICAgICogIGhvc3Q6P3N0cmluZywKICAgICAqICBwb3J0Oj9pbnQsCiAgICAgKiAgcGF0aDo/c3RyaW5nLAogICAgICogIHF1ZXJ5Oj9zdHJpbmcsCiAgICAgKiAgZnJhZ21lbnQ6P3N0cmluZwogICAgICogfSAkY29tcG9uZW50cwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkKGFycmF5ICRjb21wb25lbnRzKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICRjb21wb25lbnRzWydwYXRoJ10gPz8gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRjb21wb25lbnRzWydxdWVyeSddKSkgewogICAgICAgICAgICAkcmVzdWx0IC49ICc/Jy4kY29tcG9uZW50c1sncXVlcnknXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29tcG9uZW50c1snZnJhZ21lbnQnXSkpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAnIycuJGNvbXBvbmVudHNbJ2ZyYWdtZW50J107CiAgICAgICAgfQoKICAgICAgICAkc2NoZW1lID0gbnVsbDsKICAgICAgICBpZiAoaXNzZXQoJGNvbXBvbmVudHNbJ3NjaGVtZSddKSkgewogICAgICAgICAgICAkc2NoZW1lID0gJGNvbXBvbmVudHNbJ3NjaGVtZSddLic6JzsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ2hvc3QnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgICRzY2hlbWUgLj0gJy8vJzsKICAgICAgICAkYXV0aG9yaXR5ID0gJGNvbXBvbmVudHNbJ2hvc3QnXTsKICAgICAgICBpZiAoaXNzZXQoJGNvbXBvbmVudHNbJ3BvcnQnXSkpIHsKICAgICAgICAgICAgJGF1dGhvcml0eSAuPSAnOicuJGNvbXBvbmVudHNbJ3BvcnQnXTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ3VzZXInXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJGF1dGhvcml0eS4kcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgJGF1dGhvcml0eSA9ICdAJy4kYXV0aG9yaXR5OwogICAgICAgIGlmICghaXNzZXQoJGNvbXBvbmVudHNbJ3Bhc3MnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzY2hlbWUuJGNvbXBvbmVudHNbJ3VzZXInXS4kYXV0aG9yaXR5LiRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNjaGVtZS4kY29tcG9uZW50c1sndXNlciddLic6Jy4kY29tcG9uZW50c1sncGFzcyddLiRhdXRob3JpdHkuJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFuIFVSSSBzdHJpbmcgaW50byBpdHMgY29tcG9uZW50cy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYSBVUkkgYW5kIHJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBhbnkKICAgICAqIG9mIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIFVSSSB0aGF0IGFyZSBwcmVzZW50LgogICAgICoKICAgICAqIDxjb2RlPgogICAgICogJGNvbXBvbmVudHMgPSAobmV3IFBhcnNlcigpKS0+cGFyc2UoJ2h0dHA6Ly9mb29AdGVzdC5leGFtcGxlLmNvbTo0Mj9xdWVyeSMnKTsKICAgICAqIHZhcl9leHBvcnQoJGNvbXBvbmVudHMpOwogICAgICogLy93aWxsIGRpc3BsYXkKICAgICAqIGFycmF5KAogICAgICogICAnc2NoZW1lJyA9PiAnaHR0cCcsICAgICAgICAgICAvLyB0aGUgVVJJIHNjaGVtZSBjb21wb25lbnQKICAgICAqICAgJ3VzZXInID0+ICdmb28nLCAgICAgICAgICAgICAgLy8gdGhlIFVSSSB1c2VyIGNvbXBvbmVudAogICAgICogICAncGFzcycgPT4gbnVsbCwgICAgICAgICAgICAgICAvLyB0aGUgVVJJIHBhc3MgY29tcG9uZW50CiAgICAgKiAgICdob3N0JyA9PiAndGVzdC5leGFtcGxlLmNvbScsIC8vIHRoZSBVUkkgaG9zdCBjb21wb25lbnQKICAgICAqICAgJ3BvcnQnID0+IDQyLCAgICAgICAgICAgICAgICAgLy8gdGhlIFVSSSBwb3J0IGNvbXBvbmVudAogICAgICogICAncGF0aCcgPT4gJycsICAgICAgICAgICAgICAgICAvLyB0aGUgVVJJIHBhdGggY29tcG9uZW50CiAgICAgKiAgICdxdWVyeScgPT4gJ3F1ZXJ5JywgICAgICAgICAgIC8vIHRoZSBVUkkgcXVlcnkgY29tcG9uZW50CiAgICAgKiAgICdmcmFnbWVudCcgPT4gJycsICAgICAgICAgICAgIC8vIHRoZSBVUkkgZnJhZ21lbnQgY29tcG9uZW50CiAgICAgKiApOwogICAgICogPC9jb2RlPgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBhcnJheSBpcyBzaW1pbGFyIHRvIFBIUCdzIHBhcnNlX3VybCByZXR1cm4gdmFsdWUgd2l0aCB0aGUgZm9sbG93aW5nCiAgICAgKiBkaWZmZXJlbmNlczoKICAgICAqCiAgICAgKiA8dWw+CiAgICAgKiA8bGk+QWxsIGNvbXBvbmVudHMgYXJlIGFsd2F5cyBwcmVzZW50IGluIHRoZSByZXR1cm5lZCBhcnJheTwvbGk+CiAgICAgKiA8bGk+RW1wdHkgYW5kIHVuZGVmaW5lZCBjb21wb25lbnQgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFuZCBlbXB0eSBjb21wb25lbnQgaXMKICAgICAqICAgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgd2hpbGUgYW4gdW5kZWZpbmVkIGNvbXBvbmVudCBpcyBzZXQgdG8gdGhlIGBudWxsYCB2YWx1ZS48L2xpPgogICAgICogPGxpPlRoZSBwYXRoIGNvbXBvbmVudCBpcyBuZXZlciB1bmRlZmluZWQ8L2xpPgogICAgICogPGxpPlRoZSBtZXRob2QgcGFyc2VzIHRoZSBVUkkgZm9sbG93aW5nIHRoZSBSRkMzOTg2IHJ1bGVzIGJ1dCB5b3UgYXJlIHN0aWxsCiAgICAgKiAgIHJlcXVpcmVkIHRvIHZhbGlkYXRlIHRoZSByZXR1cm5lZCBjb21wb25lbnRzIGFnYWluc3QgaXRzIHJlbGF0ZWQgc2NoZW1lIHNwZWNpZmljIHJ1bGVzLjwvbGk+CiAgICAgKiA8L3VsPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR1cmkgYW55IHNjYWxhciBvciBzdHJpbmdhYmxlIG9iamVjdAogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIFVSSSBjb250YWlucyBhbiBpbnZhbGlkIHNjaGVtZQogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgVVJJIGNvbnRhaW5zIGFuIGludmFsaWQgcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7CiAgICAgKiAgICAgICAgICAgICAgICBzY2hlbWU6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHVzZXI6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHBhc3M6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIGhvc3Q6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIHBvcnQ6P2ludCwKICAgICAqICAgICAgICAgICAgICAgIHBhdGg6c3RyaW5nLAogICAgICogICAgICAgICAgICAgICAgcXVlcnk6P3N0cmluZywKICAgICAqICAgICAgICAgICAgICAgIGZyYWdtZW50Oj9zdHJpbmcKICAgICAqICAgICAgICAgICAgICAgIH0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkdXJpKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoaXNfb2JqZWN0KCR1cmkpICYmIG1ldGhvZF9leGlzdHMoJHVyaSwgJ19fdG9TdHJpbmcnKSkgewogICAgICAgICAgICAkdXJpID0gKHN0cmluZykgJHVyaTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfc2NhbGFyKCR1cmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHVyaSBtdXN0IGJlIGEgc2NhbGFyIG9yIGEgc3RyaW5nYWJsZSBvYmplY3QgYCVzYCBnaXZlbicsIGdldHR5cGUoJHVyaSkpKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAoc3RyaW5nKSAkdXJpOwoKICAgICAgICBpZiAoaXNzZXQoc2VsZjo6VVJJX1NDSE9SVENVVFNbJHVyaV0pKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5e3NjaGVtZTo/c3RyaW5nLCB1c2VyOj9zdHJpbmcsIHBhc3M6P3N0cmluZywgaG9zdDo/c3RyaW5nLCBwb3J0Oj9pbnQsIHBhdGg6c3RyaW5nLCBxdWVyeTo/c3RyaW5nLCBmcmFnbWVudDo/c3RyaW5nfSAkY29tcG9uZW50cyAqLwogICAgICAgICAgICAkY29tcG9uZW50cyA9IGFycmF5X21lcmdlKHNlbGY6OlVSSV9DT01QT05FTlRTLCBzZWxmOjpVUklfU0NIT1JUQ1VUU1skdXJpXSk7CgogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudHM7CiAgICAgICAgfQoKICAgICAgICBpZiAoMSA9PT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfSU5WQUxJRF9VUklfQ0hBUlMsICR1cmkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgdXJpIGAlc2AgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzJywgJHVyaSkpOwogICAgICAgIH0KCiAgICAgICAgLy9pZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEga25vd24gVVJJIGRlbGltaXRlciBwYXJzaW5nIGNhbiBiZSBzaW1wbGlmaWVkCiAgICAgICAgJGZpcnN0X2NoYXIgPSAkdXJpWzBdOwoKICAgICAgICAvL1RoZSBVUkkgaXMgbWFkZSBvZiB0aGUgZnJhZ21lbnQgb25seQogICAgICAgIGlmICgnIycgPT09ICRmaXJzdF9jaGFyKSB7CiAgICAgICAgICAgIFssICRmcmFnbWVudF0gPSBleHBsb2RlKCcjJywgJHVyaSwgMik7CiAgICAgICAgICAgICRjb21wb25lbnRzID0gc2VsZjo6VVJJX0NPTVBPTkVOVFM7CiAgICAgICAgICAgICRjb21wb25lbnRzWydmcmFnbWVudCddID0gJGZyYWdtZW50OwoKICAgICAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgICAgIH0KCiAgICAgICAgLy9UaGUgVVJJIGlzIG1hZGUgb2YgdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudAogICAgICAgIGlmICgnPycgPT09ICRmaXJzdF9jaGFyKSB7CiAgICAgICAgICAgIFssICRwYXJ0aWFsXSA9IGV4cGxvZGUoJz8nLCAkdXJpLCAyKTsKICAgICAgICAgICAgWyRxdWVyeSwgJGZyYWdtZW50XSA9IGV4cGxvZGUoJyMnLCAkcGFydGlhbCwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICAgICAgJGNvbXBvbmVudHMgPSBzZWxmOjpVUklfQ09NUE9ORU5UUzsKICAgICAgICAgICAgJGNvbXBvbmVudHNbJ3F1ZXJ5J10gPSAkcXVlcnk7CiAgICAgICAgICAgICRjb21wb25lbnRzWydmcmFnbWVudCddID0gJGZyYWdtZW50OwoKICAgICAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgICAgIH0KCiAgICAgICAgLy91c2UgUkZDMzk4NiBVUkkgcmVnZXhwIHRvIHNwbGl0IHRoZSBVUkkKICAgICAgICBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9VUklfUEFSVFMsICR1cmksICRwYXJ0cyk7CiAgICAgICAgJHBhcnRzICs9IFsncXVlcnknID0+ICcnLCAnZnJhZ21lbnQnID0+ICcnXTsKCiAgICAgICAgaWYgKCc6JyA9PT0gJHBhcnRzWydzY2hlbWUnXSB8fCAxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9VUklfU0NIRU1FLCAkcGFydHNbJ3Njb250ZW50J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdUaGUgdXJpIGAlc2AgY29udGFpbnMgYW4gaW52YWxpZCBzY2hlbWUnLCAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJycgPT09ICRwYXJ0c1snc2NoZW1lJ10uJHBhcnRzWydhdXRob3JpdHknXSAmJiAxID09PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9JTlZBTElEX1BBVEgsICRwYXJ0c1sncGF0aCddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ByaW50ZignVGhlIHVyaSBgJXNgIGNvbnRhaW5zIGFuIGludmFsaWQgcGF0aC4nLCAkdXJpKSk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheXtzY2hlbWU6P3N0cmluZywgdXNlcjo/c3RyaW5nLCBwYXNzOj9zdHJpbmcsIGhvc3Q6P3N0cmluZywgcG9ydDo/aW50LCBwYXRoOnN0cmluZywgcXVlcnk6P3N0cmluZywgZnJhZ21lbnQ6P3N0cmluZ30gJGNvbXBvbmVudHMgKi8KICAgICAgICAkY29tcG9uZW50cyA9IGFycmF5X21lcmdlKAogICAgICAgICAgICBzZWxmOjpVUklfQ09NUE9ORU5UUywKICAgICAgICAgICAgJycgPT09ICRwYXJ0c1snYXV0aG9yaXR5J10gPyBbXSA6IHNlbGY6OnBhcnNlQXV0aG9yaXR5KCRwYXJ0c1snYWNvbnRlbnQnXSksCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGFydHNbJ3BhdGgnXSwKICAgICAgICAgICAgICAgICdzY2hlbWUnID0+ICcnID09PSAkcGFydHNbJ3NjaGVtZSddID8gbnVsbCA6ICRwYXJ0c1snc2NvbnRlbnQnXSwKICAgICAgICAgICAgICAgICdxdWVyeScgPT4gJycgPT09ICRwYXJ0c1sncXVlcnknXSA/IG51bGwgOiAkcGFydHNbJ3Fjb250ZW50J10sCiAgICAgICAgICAgICAgICAnZnJhZ21lbnQnID0+ICcnID09PSAkcGFydHNbJ2ZyYWdtZW50J10gPyBudWxsIDogJHBhcnRzWydmY29udGVudCddLAogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIHRoZSBVUkkgYXV0aG9yaXR5IHBhcnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIElmIHRoZSBwb3J0IGNvbXBvbmVudCBpcyBpbnZhbGlkCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXt1c2VyOj9zdHJpbmcsIHBhc3M6P3N0cmluZywgaG9zdDo/c3RyaW5nLCBwb3J0Oj9pbnR9CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KHN0cmluZyAkYXV0aG9yaXR5KTogYXJyYXkKICAgIHsKICAgICAgICAkY29tcG9uZW50cyA9IFsndXNlcicgPT4gbnVsbCwgJ3Bhc3MnID0+IG51bGwsICdob3N0JyA9PiAnJywgJ3BvcnQnID0+IG51bGxdOwogICAgICAgIGlmICgnJyA9PT0gJGF1dGhvcml0eSkgewogICAgICAgICAgICByZXR1cm4gJGNvbXBvbmVudHM7CiAgICAgICAgfQoKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCdAJywgJGF1dGhvcml0eSwgMik7CiAgICAgICAgaWYgKGlzc2V0KCRwYXJ0c1sxXSkpIHsKICAgICAgICAgICAgWyRjb21wb25lbnRzWyd1c2VyJ10sICRjb21wb25lbnRzWydwYXNzJ11dID0gZXhwbG9kZSgnOicsICRwYXJ0c1swXSwgMikgKyBbMSA9PiBudWxsXTsKICAgICAgICB9CgogICAgICAgIHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0hPU1RfUE9SVCwgJHBhcnRzWzFdID8/ICRwYXJ0c1swXSwgJG1hdGNoZXMpOwogICAgICAgICRtYXRjaGVzICs9IFsncG9ydCcgPT4gJyddOwoKICAgICAgICAkY29tcG9uZW50c1sncG9ydCddID0gc2VsZjo6ZmlsdGVyUG9ydCgkbWF0Y2hlc1sncG9ydCddKTsKICAgICAgICAkY29tcG9uZW50c1snaG9zdCddID0gc2VsZjo6ZmlsdGVySG9zdCgkbWF0Y2hlc1snaG9zdCddKTsKCiAgICAgICAgcmV0dXJuICRjb21wb25lbnRzOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIGFuZCBmb3JtYXQgdGhlIHBvcnQgY29tcG9uZW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSByZWdpc3RlcmVkIG5hbWUgaXMgaW52YWxpZAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJQb3J0KHN0cmluZyAkcG9ydCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRwb3J0KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goJy9eXGQqJC8nLCAkcG9ydCkpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpICRwb3J0OwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1RoZSBwb3J0IGAlc2AgaXMgaW52YWxpZCcsICRwb3J0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBob3N0bmFtZSBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKgogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgcmVnaXN0ZXJlZCBuYW1lIGlzIGludmFsaWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmlsdGVySG9zdChzdHJpbmcgJGhvc3QpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRob3N0KSB7CiAgICAgICAgICAgIHJldHVybiAkaG9zdDsKICAgICAgICB9CgogICAgICAgIGlmICgnWycgIT09ICRob3N0WzBdIHx8ICddJyAhPT0gc3Vic3RyKCRob3N0LCAtMSkpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbHRlclJlZ2lzdGVyZWROYW1lKCRob3N0KTsKICAgICAgICB9CgogICAgICAgIGlmICghc2VsZjo6aXNJcEhvc3Qoc3Vic3RyKCRob3N0LCAxLCAtMSkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdIb3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBJUCBob3N0IGlzIG1hbGZvcm1lZCcsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGhvc3QgaXMgYW4gSVB2NCBvciBhIHJlZ2lzdGVyZWQgbmFtZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIuMgogICAgICoKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgICAgICAgaWYgdGhlIHJlZ2lzdGVyZWQgbmFtZSBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIElkblN1cHBvcnRNaXNzaW5nIGlmIElETiBzdXBwb3J0IG9yIElDVSByZXF1aXJlbWVudCBhcmUgbm90IGF2YWlsYWJsZSBvciBtZXQuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZpbHRlclJlZ2lzdGVyZWROYW1lKHN0cmluZyAkaG9zdCk6IHN0cmluZwogICAgewogICAgICAgICRmb3JtYXR0ZWRfaG9zdCA9IHJhd3VybGRlY29kZSgkaG9zdCk7CiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX1JFR0lTVEVSRURfTkFNRSwgJGZvcm1hdHRlZF9ob3N0KSkgewogICAgICAgICAgICByZXR1cm4gJGhvc3Q7CiAgICAgICAgfQoKICAgICAgICAvL3RvIHRlc3QgSUROIGhvc3Qgbm9uLWFzY2lpIGNoYXJhY3RlcnMgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBob3N0CiAgICAgICAgaWYgKDEgIT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0lETl9QQVRURVJOLCAkZm9ybWF0dGVkX2hvc3QpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdIb3N0IGAlc2AgaXMgaW52YWxpZCA6IHRoZSBob3N0IGlzIG5vdCBhIHZhbGlkIHJlZ2lzdGVyZWQgbmFtZScsICRob3N0KSk7CiAgICAgICAgfQoKICAgICAgICAkaW5mbyA9IElkbmE6OnRvQXNjaWkoJGhvc3QsIElkbmE6OklETkEyMDA4X0FTQ0lJKTsKICAgICAgICBpZiAoMCAhPT0gJGluZm8tPmVycm9ycygpKSB7CiAgICAgICAgICAgIHRocm93IElkbmFDb252ZXJzaW9uRmFpbGVkOjpkdWVUb0lETkFFcnJvcigkaG9zdCwgJGluZm8pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRob3N0OwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGEgSVB2Ni9JUHZmdXR1cmUgaG9zdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4yCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjg3NCNzZWN0aW9uLTIKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2ODc0I3NlY3Rpb24tNAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0lwSG9zdChzdHJpbmcgJGlwX2hvc3QpOiBib29sCiAgICB7CiAgICAgICAgaWYgKGZhbHNlICE9PSBmaWx0ZXJfdmFyKCRpcF9ob3N0LCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9GTEFHX0lQVjYpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEgPT09IHByZWdfbWF0Y2goc2VsZjo6UkVHRVhQX0lQX0ZVVFVSRSwgJGlwX2hvc3QsICRtYXRjaGVzKSkgewogICAgICAgICAgICByZXR1cm4gIWluX2FycmF5KCRtYXRjaGVzWyd2ZXJzaW9uJ10sIFsnNCcsICc2J10sIHRydWUpOwogICAgICAgIH0KCiAgICAgICAgJHBvcyA9IHN0cnBvcygkaXBfaG9zdCwgJyUnKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwb3MgfHwgMSA9PT0gcHJlZ19tYXRjaCgKICAgICAgICAgICAgc2VsZjo6UkVHRVhQX0lOVkFMSURfSE9TVF9DSEFSUywKICAgICAgICAgICAgcmF3dXJsZGVjb2RlKHN1YnN0cigkaXBfaG9zdCwgJHBvcykpCiAgICAgICAgKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkaXBfaG9zdCA9IHN1YnN0cigkaXBfaG9zdCwgMCwgJHBvcyk7CgogICAgICAgIHJldHVybiBmYWxzZSAhPT0gZmlsdGVyX3ZhcigkaXBfaG9zdCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY2KQogICAgICAgICAgICAmJiAwID09PSBzdHJwb3MoKHN0cmluZykgaW5ldF9wdG9uKCRpcF9ob3N0KSwgc2VsZjo6Wk9ORV9JRF9BRERSRVNTX0JMT0NLKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmk7Cgp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpRXhjZXB0aW9uOwp1c2UgTGVhZ3VlXFVyaVxDb250cmFjdHNcVXJpSW50ZXJmYWNlOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGVcVGVtcGxhdGU7CnVzZSBMZWFndWVcVXJpXFVyaVRlbXBsYXRlXFZhcmlhYmxlQmFnOwp1c2UgVHlwZUVycm9yOwoKLyoqCiAqIERlZmluZXMgdGhlIFVSSSBUZW1wbGF0ZSBzeW50YXggYW5kIHRoZSBwcm9jZXNzIGZvciBleHBhbmRpbmcgYSBVUkkgVGVtcGxhdGUgaW50byBhIFVSSSByZWZlcmVuY2UuCiAqCiAqIEBsaW5rICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwCiAqIEBwYWNrYWdlIExlYWd1ZVxVcmkKICogQGF1dGhvciAgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqIEBzaW5jZSAgIDYuMS4wCiAqCiAqIEJhc2VkIG9uIEd1enpsZUh0dHBcVXJpVGVtcGxhdGUgY2xhc3MgaW4gR3V6emxlIHY2LjUuCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvNi41L3NyYy9VcmlUZW1wbGF0ZS5waHAKICovCmZpbmFsIGNsYXNzIFVyaVRlbXBsYXRlCnsKICAgIHByaXZhdGUgVGVtcGxhdGUgJHRlbXBsYXRlOwogICAgcHJpdmF0ZSBWYXJpYWJsZUJhZyAkZGVmYXVsdFZhcmlhYmxlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBvYmplY3R8c3RyaW5nICR0ZW1wbGF0ZSBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCB0aGUgX190b1N0cmluZyBtZXRob2QKICAgICAqCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvciAgICAgICAgICAgICAgICBpZiB0aGUgdGVtcGxhdGUgaXMgbm90IGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIHRoZSBfX3RvU3RyaW5nIG1ldGhvZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciAgICAgICAgICAgICAgaWYgdGhlIHRlbXBsYXRlIHN5bnRheCBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZCBpZiB0aGUgdGVtcGxhdGUgdmFyaWFibGVzIGFyZSBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdGVtcGxhdGUsIGFycmF5ICRkZWZhdWx0VmFyaWFibGVzID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnRlbXBsYXRlID0gVGVtcGxhdGU6OmNyZWF0ZUZyb21TdHJpbmcoJHRlbXBsYXRlKTsKICAgICAgICAkdGhpcy0+ZGVmYXVsdFZhcmlhYmxlcyA9ICR0aGlzLT5maWx0ZXJWYXJpYWJsZXMoJGRlZmF1bHRWYXJpYWJsZXMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWyd0ZW1wbGF0ZSddLT50b1N0cmluZygpLCAkcHJvcGVydGllc1snZGVmYXVsdFZhcmlhYmxlcyddLT5hbGwoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXJzIG91dCB2YXJpYWJsZXMgZm9yIHRoZSBnaXZlbiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLHN0cmluZ3xhcnJheTxzdHJpbmc+PiAkdmFyaWFibGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyVmFyaWFibGVzKGFycmF5ICR2YXJpYWJsZXMpOiBWYXJpYWJsZUJhZwogICAgewogICAgICAgICRvdXRwdXQgPSBuZXcgVmFyaWFibGVCYWcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+dGVtcGxhdGUtPnZhcmlhYmxlTmFtZXMoKSBhcyAkbmFtZSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHZhcmlhYmxlc1skbmFtZV0pKSB7CiAgICAgICAgICAgICAgICAkb3V0cHV0LT5hc3NpZ24oJG5hbWUsICR2YXJpYWJsZXNbJG5hbWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgdGVtcGxhdGUgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZW1wbGF0ZS0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLCBpbiBvcmRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZW1wbGF0ZS0+dmFyaWFibGVOYW1lcygpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZXMgdXNlZCB0byBleHBhbmQgdGhlIHRlbXBsYXRlLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBsaXN0IG9ubHkgY29udGFpbnMgdmFyaWFibGVzIHdob3NlIG5hbWUgaXMgcGFydCBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxzdHJpbmd8YXJyYXk+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0VmFyaWFibGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWZhdWx0VmFyaWFibGVzLT5hbGwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgdXBkYXRlZCBkZWZhdWx0IHZhcmlhYmxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIG1vZGlmaWVkIGRlZmF1bHQgdmFyaWFibGVzLgogICAgICoKICAgICAqIElmIHByZXNlbnQsIHZhcmlhYmxlcyB3aG9zZSBuYW1lIGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlCiAgICAgKiBwb3NzaWJsZSB2YXJpYWJsZSBuYW1lcyBhcmUgcmVtb3ZlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhEZWZhdWx0VmFyaWFibGVzKGFycmF5ICRkZWZhdWx0RGVmYXVsdFZhcmlhYmxlcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICR0aGlzLT50ZW1wbGF0ZS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPmZpbHRlclZhcmlhYmxlcygkZGVmYXVsdERlZmF1bHRWYXJpYWJsZXMpLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZCBpZiB0aGUgdmFyaWFibGUgY29udGFpbnMgbmVzdGVkIGFycmF5IHZhbHVlcwogICAgICogQHRocm93cyBVcmlFeGNlcHRpb24gICAgICAgICAgICAgaWYgdGhlIHJlc3VsdGluZyBleHBhbnNpb24gY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGFuZChhcnJheSAkdmFyaWFibGVzID0gW10pOiBVcmlJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gVXJpOjpjcmVhdGVGcm9tU3RyaW5nKAogICAgICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPmV4cGFuZCgKICAgICAgICAgICAgICAgICR0aGlzLT5maWx0ZXJWYXJpYWJsZXMoJHZhcmlhYmxlcyktPnJlcGxhY2UoJHRoaXMtPmRlZmF1bHRWYXJpYWJsZXMpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/Expression.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X2tleXM7CnVzZSBmdW5jdGlvbiBhcnJheV9tYXA7CnVzZSBmdW5jdGlvbiBhcnJheV91bmlxdWU7CnVzZSBmdW5jdGlvbiBleHBsb2RlOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiByYXd1cmxlbmNvZGU7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCmZpbmFsIGNsYXNzIEV4cHJlc3Npb24KewogICAgLyoqCiAgICAgKiBFeHByZXNzaW9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI3NlY3Rpb24tMi4yCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX0VYUFJFU1NJT04gPSAnL15cewogICAgICAgICg/OgogICAgICAgICAgICAoPzxvcGVyYXRvcj5bXC5cLztcPyZcPSxcIUBcfFwrI10pPwogICAgICAgICAgICAoPzx2YXJpYWJsZXM+W15cfV0qKQogICAgICAgICkKICAgIFx9JC94JzsKCiAgICAvKioKICAgICAqIFJlc2VydmVkIE9wZXJhdG9yIGNoYXJhY3RlcnMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzAjc2VjdGlvbi0yLjIKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRVNFUlZFRF9PUEVSQVRPUiA9ICc9LCFAfCc7CgogICAgLyoqCiAgICAgKiBQcm9jZXNzaW5nIGJlaGF2aW9yIGFjY29yZGluZyB0byB0aGUgZXhwcmVzc2lvbiB0eXBlIG9wZXJhdG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI2FwcGVuZGl4LUEKICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBPUEVSQVRPUl9IQVNIX0xPT0tVUCA9IFsKICAgICAgICAnJyAgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnKycgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnIycgPT4gWydwcmVmaXgnID0+ICcjJywgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLicgPT4gWydwcmVmaXgnID0+ICcuJywgJ2pvaW5lcicgPT4gJy4nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLycgPT4gWydwcmVmaXgnID0+ICcvJywgJ2pvaW5lcicgPT4gJy8nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnOycgPT4gWydwcmVmaXgnID0+ICc7JywgJ2pvaW5lcicgPT4gJzsnLCAncXVlcnknID0+IHRydWVdLAogICAgICAgICc/JyA9PiBbJ3ByZWZpeCcgPT4gJz8nLCAnam9pbmVyJyA9PiAnJicsICdxdWVyeScgPT4gdHJ1ZV0sCiAgICAgICAgJyYnID0+IFsncHJlZml4JyA9PiAnJicsICdqb2luZXInID0+ICcmJywgJ3F1ZXJ5JyA9PiB0cnVlXSwKICAgIF07CgogICAgcHJpdmF0ZSBzdHJpbmcgJG9wZXJhdG9yOwogICAgLyoqIEB2YXIgYXJyYXk8VmFyU3BlY2lmaWVyPiAqLwogICAgcHJpdmF0ZSBhcnJheSAkdmFyU3BlY2lmaWVyczsKICAgIHByaXZhdGUgc3RyaW5nICRqb2luZXI7CiAgICAvKiogQHZhciBhcnJheTxzdHJpbmc+ICovCiAgICBwcml2YXRlIGFycmF5ICR2YXJpYWJsZU5hbWVzOwogICAgcHJpdmF0ZSBzdHJpbmcgJGV4cHJlc3Npb25TdHJpbmc7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG9wZXJhdG9yLCBWYXJTcGVjaWZpZXIgLi4uJHZhclNwZWNpZmllcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wZXJhdG9yID0gJG9wZXJhdG9yOwogICAgICAgICR0aGlzLT52YXJTcGVjaWZpZXJzID0gJHZhclNwZWNpZmllcnM7CiAgICAgICAgJHRoaXMtPmpvaW5lciA9IHNlbGY6Ok9QRVJBVE9SX0hBU0hfTE9PS1VQWyRvcGVyYXRvcl1bJ2pvaW5lciddOwogICAgICAgICR0aGlzLT52YXJpYWJsZU5hbWVzID0gJHRoaXMtPnNldFZhcmlhYmxlTmFtZXMoKTsKICAgICAgICAkdGhpcy0+ZXhwcmVzc2lvblN0cmluZyA9ICR0aGlzLT5zZXRFeHByZXNzaW9uU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRWYXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X3VuaXF1ZShhcnJheV9tYXAoCiAgICAgICAgICAgIHN0YXRpYyBmbiAoVmFyU3BlY2lmaWVyICR2YXJTcGVjaWZpZXIpOiBzdHJpbmcgPT4gJHZhclNwZWNpZmllci0+bmFtZSgpLAogICAgICAgICAgICAkdGhpcy0+dmFyU3BlY2lmaWVycwogICAgICAgICkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RXhwcmVzc2lvblN0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdmFyU3BlY2lmaWVyU3RyaW5nID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCgKICAgICAgICAgICAgc3RhdGljIGZuIChWYXJTcGVjaWZpZXIgJHZhcmlhYmxlKTogc3RyaW5nID0+ICR2YXJpYWJsZS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPnZhclNwZWNpZmllcnMKICAgICAgICApKTsKCiAgICAgICAgcmV0dXJuICd7Jy4kdGhpcy0+b3BlcmF0b3IuJHZhclNwZWNpZmllclN0cmluZy4nfSc7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWydvcGVyYXRvciddLCAuLi4kcHJvcGVydGllc1sndmFyU3BlY2lmaWVycyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIGV4cHJlc3Npb24gaXMgaW52YWxpZAogICAgICogQHRocm93cyBTeW50YXhFcnJvciBpZiB0aGUgb3BlcmF0b3IgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiBpcyBpbnZhbGlkCiAgICAgKiBAdGhyb3dzIFN5bnRheEVycm9yIGlmIHRoZSB2YXJpYWJsZSBzcGVjaWZpZXJzIGlzIGludmFsaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZXhwcmVzc2lvbik6IHNlbGYKICAgIHsKICAgICAgICBpZiAoMSAhPT0gcHJlZ19tYXRjaChzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTiwgJGV4cHJlc3Npb24sICRwYXJ0cykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgZXhwcmVzc2lvbiAiJy4kZXhwcmVzc2lvbi4nIiBpcyBpbnZhbGlkLicpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXl7b3BlcmF0b3I6c3RyaW5nLCB2YXJpYWJsZXM6c3RyaW5nfSAkcGFydHMgKi8KICAgICAgICAkcGFydHMgPSAkcGFydHMgKyBbJ29wZXJhdG9yJyA9PiAnJ107CiAgICAgICAgaWYgKCcnICE9PSAkcGFydHNbJ29wZXJhdG9yJ10gJiYgZmFsc2UgIT09IHN0cnBvcyhzZWxmOjpSRVNFUlZFRF9PUEVSQVRPUiwgJHBhcnRzWydvcGVyYXRvciddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1RoZSBvcGVyYXRvciB1c2VkIGluIHRoZSBleHByZXNzaW9uICInLiRleHByZXNzaW9uLiciIGlzIHJlc2VydmVkLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uKCRwYXJ0c1snb3BlcmF0b3InXSwgLi4uYXJyYXlfbWFwKAogICAgICAgICAgICBzdGF0aWMgZm4gKHN0cmluZyAkdmFyU3BlYyk6IFZhclNwZWNpZmllciA9PiBWYXJTcGVjaWZpZXI6OmNyZWF0ZUZyb21TdHJpbmcoJHZhclNwZWMpLAogICAgICAgICAgICBleHBsb2RlKCcsJywgJHBhcnRzWyd2YXJpYWJsZXMnXSkKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXhwcmVzc2lvblN0cmluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFyaWFibGVOYW1lcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFyaWFibGVOYW1lczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwYW5kKFZhcmlhYmxlQmFnICR2YXJpYWJsZXMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcGFydHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+dmFyU3BlY2lmaWVycyBhcyAkdmFyU3BlY2lmaWVyKSB7CiAgICAgICAgICAgICRwYXJ0c1tdID0gJHRoaXMtPnJlcGxhY2UoJHZhclNwZWNpZmllciwgJHZhcmlhYmxlcyk7CiAgICAgICAgfQoKICAgICAgICAkZXhwYW5kZWQgPSBpbXBsb2RlKCR0aGlzLT5qb2luZXIsIGFycmF5X2ZpbHRlcigkcGFydHMsIHN0YXRpYyBmbiAoJHZhbHVlKTogYm9vbCA9PiAnJyAhPT0gJHZhbHVlKSk7CiAgICAgICAgaWYgKCcnID09PSAkZXhwYW5kZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgICRwcmVmaXggPSBzZWxmOjpPUEVSQVRPUl9IQVNIX0xPT0tVUFskdGhpcy0+b3BlcmF0b3JdWydwcmVmaXgnXTsKICAgICAgICBpZiAoJycgPT09ICRwcmVmaXgpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJlZml4LiRleHBhbmRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlcGxhY2VzIGFuIGV4cHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gdmFyaWFibGVzLgogICAgICoKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YXJpYWJsZXMgaXMgYW4gYXJyYXkgYW5kIGEgIjoiIG1vZGlmaWVyIG5lZWRzIHRvIGJlIGFwcGxpZWQKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YXJpYWJsZXMgY29udGFpbnMgbmVzdGVkIGFycmF5IHZhbHVlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcGxhY2UoVmFyU3BlY2lmaWVyICR2YXJTcGVjLCBWYXJpYWJsZUJhZyAkdmFyaWFibGVzKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHZhcmlhYmxlcy0+ZmV0Y2goJHZhclNwZWMtPm5hbWUoKSk7CiAgICAgICAgaWYgKG51bGwgPT09ICR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkdXNlUXVlcnkgPSBzZWxmOjpPUEVSQVRPUl9IQVNIX0xPT0tVUFskdGhpcy0+b3BlcmF0b3JdWydxdWVyeSddOwogICAgICAgIFskZXhwYW5kZWQsICRhY3R1YWxRdWVyeV0gPSAkdGhpcy0+aW5qZWN0KCR2YWx1ZSwgJHZhclNwZWMsICR1c2VRdWVyeSk7CiAgICAgICAgaWYgKCEkYWN0dWFsUXVlcnkpIHsKICAgICAgICAgICAgcmV0dXJuICRleHBhbmRlZDsKICAgICAgICB9CgogICAgICAgIGlmICgnJicgIT09ICR0aGlzLT5qb2luZXIgJiYgJycgPT09ICRleHBhbmRlZCkgewogICAgICAgICAgICByZXR1cm4gJHZhclNwZWMtPm5hbWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFyU3BlYy0+bmFtZSgpLic9Jy4kZXhwYW5kZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5PHN0cmluZz4gJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXswOnN0cmluZywgMTpib29sfQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluamVjdCgkdmFsdWUsIFZhclNwZWNpZmllciAkdmFyU3BlYywgYm9vbCAkdXNlUXVlcnkpOiBhcnJheQogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcGxhY2VTdHJpbmcoJHZhbHVlLCAkdmFyU3BlYywgJHVzZVF1ZXJ5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVwbGFjZUxpc3QoJHZhbHVlLCAkdmFyU3BlYywgJHVzZVF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cGFuZHMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ezA6c3RyaW5nLCAxOmJvb2x9CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVwbGFjZVN0cmluZyhzdHJpbmcgJHZhbHVlLCBWYXJTcGVjaWZpZXIgJHZhclNwZWMsIGJvb2wgJHVzZVF1ZXJ5KTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoJzonID09PSAkdmFyU3BlYy0+bW9kaWZpZXIoKSkgewogICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAwLCAkdmFyU3BlYy0+cG9zaXRpb24oKSk7CiAgICAgICAgfQoKICAgICAgICAkZXhwYW5kZWQgPSByYXd1cmxlbmNvZGUoJHZhbHVlKTsKICAgICAgICBpZiAoJysnID09PSAkdGhpcy0+b3BlcmF0b3IgfHwgJyMnID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgcmV0dXJuIFskdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJGV4cGFuZGVkKSwgJHVzZVF1ZXJ5XTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbJGV4cGFuZGVkLCAkdXNlUXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogRXhwYW5kcyBhbiBleHByZXNzaW9uIHVzaW5nIGEgbGlzdCBvZiB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PHN0cmluZz4gJHZhbHVlCiAgICAgKgogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBpcyBhbiBhcnJheSBhbmQgYSAiOiIgbW9kaWZpZXIgbmVlZHMgdG8gYmUgYXBwbGllZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl7MDpzdHJpbmcsIDE6Ym9vbH0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXBsYWNlTGlzdChhcnJheSAkdmFsdWUsIFZhclNwZWNpZmllciAkdmFyU3BlYywgYm9vbCAkdXNlUXVlcnkpOiBhcnJheQogICAgewogICAgICAgIGlmIChbXSA9PT0gJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBbJycsIGZhbHNlXTsKICAgICAgICB9CgogICAgICAgIGlmICgnOicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgIHRocm93IFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDo6ZHVlVG9VbmFibGVUb1Byb2Nlc3NWYWx1ZUxpc3RXaXRoUHJlZml4KCR2YXJTcGVjLT5uYW1lKCkpOwogICAgICAgIH0KCiAgICAgICAgJHBhaXJzID0gW107CiAgICAgICAgJGlzQXNzb2MgPSAkdGhpcy0+aXNBc3NvYygkdmFsdWUpOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAka2V5ID0+ICR2YXIpIHsKICAgICAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgICAgICAka2V5ID0gcmF3dXJsZW5jb2RlKChzdHJpbmcpICRrZXkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFyID0gcmF3dXJsZW5jb2RlKCR2YXIpOwogICAgICAgICAgICBpZiAoJysnID09PSAkdGhpcy0+b3BlcmF0b3IgfHwgJyMnID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICR2YXIgPSAkdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJHZhcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgnKicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgICAgICBpZiAoJGlzQXNzb2MpIHsKICAgICAgICAgICAgICAgICAgICAkdmFyID0gJGtleS4nPScuJHZhcjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgka2V5ID4gMCAmJiAkdXNlUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFyID0gJHZhclNwZWMtPm5hbWUoKS4nPScuJHZhcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhaXJzWyRrZXldID0gJHZhcjsKICAgICAgICB9CgogICAgICAgIGlmICgnKicgPT09ICR2YXJTcGVjLT5tb2RpZmllcigpKSB7CiAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJlcGVuZCB0aGUgdmFsdWUgbmFtZSB3aGVuIHVzaW5nIHRoZSBleHBsb2RlCiAgICAgICAgICAgICAgICAvLyBtb2RpZmllciB3aXRoIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICAgICAgICAgICAgJHVzZVF1ZXJ5ID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBbaW1wbG9kZSgkdGhpcy0+am9pbmVyLCAkcGFpcnMpLCAkdXNlUXVlcnldOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgIC8vIFdoZW4gYW4gYXNzb2NpYXRpdmUgYXJyYXkgaXMgZW5jb3VudGVyZWQgYW5kIHRoZQogICAgICAgICAgICAvLyBleHBsb2RlIG1vZGlmaWVyIGlzIG5vdCBzZXQsIHRoZW4gdGhlIHJlc3VsdCBtdXN0IGJlCiAgICAgICAgICAgIC8vIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Yga2V5cyBmb2xsb3dlZCBieSB0aGVpcgogICAgICAgICAgICAvLyByZXNwZWN0aXZlIHZhbHVlcy4KICAgICAgICAgICAgZm9yZWFjaCAoJHBhaXJzIGFzICRvZmZzZXQgPT4gJiRkYXRhKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRvZmZzZXQuJywnLiRkYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1bnNldCgkZGF0YSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW2ltcGxvZGUoJywnLCAkcGFpcnMpLCAkdXNlUXVlcnldOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBpZiBhbiBhcnJheSBpcyBhc3NvY2lhdGl2ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgYXJyYXlzIGFyZSBzZXF1ZW5jZXMgb3IgaGFzaGVzLgogICAgICogVGhpcyBhc3N1bXB0aW9uIGlzIGEgdHJhZGUtb2ZmIGZvciBhY2N1cmFjeSBpbiBmYXZvciBvZiBzcGVlZCwgYnV0IGl0CiAgICAgKiBzaG91bGQgd29yayBpbiBhbG1vc3QgZXZlcnkgY2FzZSB3aGVyZSBpbnB1dCBpcyBzdXBwbGllZCBmb3IgYSBVUkkKICAgICAqIHRlbXBsYXRlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQXNzb2MoYXJyYXkgJGFycmF5KTogYm9vbAogICAgewogICAgICAgIHJldHVybiBbXSAhPT0gJGFycmF5ICYmIDAgIT09IGFycmF5X2tleXMoJGFycmF5KVswXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgcGVyY2VudCBlbmNvZGluZyBvbiByZXNlcnZlZCBjaGFyYWN0ZXJzICh1c2VkIHdpdGggKyBhbmQgIyBtb2RpZmllcnMpLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlY29kZVJlc2VydmVkKHN0cmluZyAkc3RyKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3RhdGljICRkZWxpbWl0ZXJzID0gWwogICAgICAgICAgICAnOicsICcvJywgJz8nLCAnIycsICdbJywgJ10nLCAnQCcsICchJywgJyQnLAogICAgICAgICAgICAnJicsICdcJycsICcoJywgJyknLCAnKicsICcrJywgJywnLCAnOycsICc9JywKICAgICAgICBdOwoKICAgICAgICBzdGF0aWMgJGRlbGltaXRlcnNFbmNvZGVkID0gWwogICAgICAgICAgICAnJTNBJywgJyUyRicsICclM0YnLCAnJTIzJywgJyU1QicsICclNUQnLCAnJTQwJywgJyUyMScsICclMjQnLAogICAgICAgICAgICAnJTI2JywgJyUyNycsICclMjgnLCAnJTI5JywgJyUyQScsICclMkInLCAnJTJDJywgJyUzQicsICclM0QnLAogICAgICAgIF07CgogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgkZGVsaW1pdGVyc0VuY29kZWQsICRkZWxpbWl0ZXJzLCAkc3RyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/Template.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21lcmdlOwp1c2UgZnVuY3Rpb24gYXJyYXlfdW5pcXVlOwp1c2UgZnVuY3Rpb24gZ2V0dHlwZTsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3N0cmluZzsKdXNlIGZ1bmN0aW9uIG1ldGhvZF9leGlzdHM7CnVzZSBmdW5jdGlvbiBwcmVnX21hdGNoX2FsbDsKdXNlIGZ1bmN0aW9uIHByZWdfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBjb25zdCBQUkVHX1NFVF9PUkRFUjsKCmZpbmFsIGNsYXNzIFRlbXBsYXRlCnsKICAgIC8qKgogICAgICogRXhwcmVzc2lvbiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiA9ICcvXHtbXlx9XSpcfS94JzsKCiAgICBwcml2YXRlIHN0cmluZyAkdGVtcGxhdGU7CiAgICAvKiogQHZhciBhcnJheTxzdHJpbmcsIEV4cHJlc3Npb24+ICovCiAgICBwcml2YXRlIGFycmF5ICRleHByZXNzaW9ucyA9IFtdOwogICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nPiAqLwogICAgcHJpdmF0ZSBhcnJheSAkdmFyaWFibGVOYW1lczsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdGVtcGxhdGUsIEV4cHJlc3Npb24gLi4uJGV4cHJlc3Npb25zKQogICAgewogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZTsKICAgICAgICAkdmFyaWFibGVOYW1lcyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRleHByZXNzaW9ucyBhcyAkZXhwcmVzc2lvbikgewogICAgICAgICAgICAkdGhpcy0+ZXhwcmVzc2lvbnNbJGV4cHJlc3Npb24tPnRvU3RyaW5nKCldID0gJGV4cHJlc3Npb247CiAgICAgICAgICAgICR2YXJpYWJsZU5hbWVzW10gPSAkZXhwcmVzc2lvbi0+dmFyaWFibGVOYW1lcygpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+dmFyaWFibGVOYW1lcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZShbXSwgLi4uJHZhcmlhYmxlTmFtZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHByb3BlcnRpZXNbJ3RlbXBsYXRlJ10sIC4uLmFycmF5X3ZhbHVlcygkcHJvcGVydGllc1snZXhwcmVzc2lvbnMnXSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJHRlbXBsYXRlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIHRoZSBfX3RvU3RyaW5nIG1ldGhvZAogICAgICoKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yICAgaWYgdGhlIHRlbXBsYXRlIGlzIG5vdCBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCB0aGUgX190b1N0cmluZyBtZXRob2QKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHRlbXBsYXRlIGNvbnRhaW5zIGludmFsaWQgZXhwcmVzc2lvbnMKICAgICAqIEB0aHJvd3MgU3ludGF4RXJyb3IgaWYgdGhlIHRlbXBsYXRlIGNvbnRhaW5zIGludmFsaWQgdmFyaWFibGUgc3BlY2lmaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoJHRlbXBsYXRlKTogc2VsZgogICAgewogICAgICAgIGlmIChpc19vYmplY3QoJHRlbXBsYXRlKSAmJiBtZXRob2RfZXhpc3RzKCR0ZW1wbGF0ZSwgJ19fdG9TdHJpbmcnKSkgewogICAgICAgICAgICAkdGVtcGxhdGUgPSAoc3RyaW5nKSAkdGVtcGxhdGU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX3N0cmluZygkdGVtcGxhdGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignVGhlIHRlbXBsYXRlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzdHJpbmdhYmxlIG9iamVjdCAlcyBnaXZlbi4nLCBnZXR0eXBlKCR0ZW1wbGF0ZSkpKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmVtYWluZGVyICovCiAgICAgICAgJHJlbWFpbmRlciA9IHByZWdfcmVwbGFjZShzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiwgJycsICR0ZW1wbGF0ZSk7CiAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoJHJlbWFpbmRlciwgJ3snKSB8fCBmYWxzZSAhPT0gc3RycG9zKCRyZW1haW5kZXIsICd9JykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdGVtcGxhdGUgIicuJHRlbXBsYXRlLiciIGNvbnRhaW5zIGludmFsaWQgZXhwcmVzc2lvbnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkbmFtZXMgPSBbXTsKICAgICAgICBwcmVnX21hdGNoX2FsbChzZWxmOjpSRUdFWFBfRVhQUkVTU0lPTl9ERVRFQ1RPUiwgJHRlbXBsYXRlLCAkZmluZGluZ3MsIFBSRUdfU0VUX09SREVSKTsKICAgICAgICAkYXJndW1lbnRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGZpbmRpbmdzIGFzICRmaW5kaW5nKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG5hbWVzWyRmaW5kaW5nWzBdXSkpIHsKICAgICAgICAgICAgICAgICRhcmd1bWVudHNbXSA9IEV4cHJlc3Npb246OmNyZWF0ZUZyb21TdHJpbmcoJGZpbmRpbmdbMF0pOwogICAgICAgICAgICAgICAgJG5hbWVzWyRmaW5kaW5nWzBdXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdGVtcGxhdGUsIC4uLiRhcmd1bWVudHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRlbXBsYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YXJpYWJsZU5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YXJpYWJsZU5hbWVzOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBpcyBhbiBhcnJheSBhbmQgYSAiOiIgbW9kaWZpZXIgbmVlZHMgdG8gYmUgYXBwbGllZAogICAgICogQHRocm93cyBUZW1wbGF0ZUNhbk5vdEJlRXhwYW5kZWQgaWYgdGhlIHZhcmlhYmxlcyBjb250YWlucyBuZXN0ZWQgYXJyYXkgdmFsdWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBhbmQoVmFyaWFibGVCYWcgJHZhcmlhYmxlcyk6IHN0cmluZwogICAgewogICAgICAgICR1cmlTdHJpbmcgPSAkdGhpcy0+dGVtcGxhdGU7CiAgICAgICAgLyoqIEB2YXIgRXhwcmVzc2lvbiAkZXhwcmVzc2lvbiAqLwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5leHByZXNzaW9ucyBhcyAkcGF0dGVybiA9PiAkZXhwcmVzc2lvbikgewogICAgICAgICAgICAkdXJpU3RyaW5nID0gc3RyX3JlcGxhY2UoJHBhdHRlcm4sICRleHByZXNzaW9uLT5leHBhbmQoJHZhcmlhYmxlcyksICR1cmlTdHJpbmcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmlTdHJpbmc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/VariableBag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFRlbXBsYXRlQ2FuTm90QmVFeHBhbmRlZDsKdXNlIFR5cGVFcnJvcjsKdXNlIGZ1bmN0aW9uIGdldHR5cGU7CnVzZSBmdW5jdGlvbiBpc19hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2Jvb2w7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19zY2FsYXI7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCmZpbmFsIGNsYXNzIFZhcmlhYmxlQmFnCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsc3RyaW5nfGFycmF5PHN0cmluZz4+CiAgICAgKi8KICAgIHByaXZhdGUgYXJyYXkgJHZhcmlhYmxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGl0ZXJhYmxlPHN0cmluZyxzdHJpbmd8Ym9vbHxpbnR8ZmxvYXR8YXJyYXk8c3RyaW5nfGJvb2x8aW50fGZsb2F0Pj4gJHZhcmlhYmxlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaXRlcmFibGUgJHZhcmlhYmxlcyA9IFtdKQogICAgewogICAgICAgIGZvcmVhY2ggKCR2YXJpYWJsZXMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0aGlzLT5hc3NpZ24oJG5hbWUsICR2YWx1ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19zZXRfc3RhdGUoYXJyYXkgJHByb3BlcnRpZXMpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwcm9wZXJ0aWVzWyd2YXJpYWJsZXMnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxzdHJpbmd8YXJyYXk8c3RyaW5nPj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFyaWFibGVzOwogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2hlcyB0aGUgdmFyaWFibGUgdmFsdWUgaWYgbm9uZSBmb3VuZCByZXR1cm5zIG51bGwuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZ3xhcnJheTxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaChzdHJpbmcgJG5hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YXJpYWJsZXNbJG5hbWVdID8/IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGJvb2x8aW50fGZsb2F0fGFycmF5PHN0cmluZ3xib29sfGludHxmbG9hdD4gJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NpZ24oc3RyaW5nICRuYW1lLCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnZhcmlhYmxlc1skbmFtZV0gPSAkdGhpcy0+bm9ybWFsaXplVmFsdWUoJHZhbHVlLCAkbmFtZSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBleHBhbmRlZAogICAgICoKICAgICAqIEB0aHJvd3MgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkIGlmIHRoZSB2YWx1ZSBjb250YWlucyBuZXN0ZWQgbGlzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGFycmF5PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSgkdmFsdWUsIHN0cmluZyAkbmFtZSwgYm9vbCAkaXNOZXN0ZWRMaXN0QWxsb3dlZCkKICAgIHsKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlID09PSAkdmFsdWUgPyAnMScgOiAnMCc7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCA9PT0gJHZhbHVlIHx8IGlzX3NjYWxhcigkdmFsdWUpIHx8IChpc19vYmplY3QoJHZhbHVlKSAmJiBtZXRob2RfZXhpc3RzKCR2YWx1ZSwgJ19fdG9TdHJpbmcnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1RoZSB2YXJpYWJsZSAnLiRuYW1lLicgbXVzdCBiZSBOVUxMLCBhIHNjYWxhciBvciBhIHN0cmluZ2FibGUgb2JqZWN0IGAlc2AgZ2l2ZW4nLCBnZXR0eXBlKCR2YWx1ZSkpKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGlzTmVzdGVkTGlzdEFsbG93ZWQpIHsKICAgICAgICAgICAgdGhyb3cgVGVtcGxhdGVDYW5Ob3RCZUV4cGFuZGVkOjpkdWVUb05lc3RlZExpc3RPZlZhbHVlKCRuYW1lKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAmJHZhcikgewogICAgICAgICAgICAkdmFyID0gc2VsZjo6bm9ybWFsaXplVmFsdWUoJHZhciwgJG5hbWUsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgdW5zZXQoJHZhcik7CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBlbGVtZW50cyBmcm9tIHBhc3NlZCB2YXJpYWJsZXMgaW50byB0aGUgY3VycmVudCBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2UoVmFyaWFibGVCYWcgJHZhcmlhYmxlcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHRoaXMtPnZhcmlhYmxlcyArICR2YXJpYWJsZXMtPnZhcmlhYmxlcyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/league/uri/src/UriTemplate/VarSpecifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMZWFndWUuVXJpIChodHRwczovL3VyaS50aGVwaHBsZWFndWUuY29tKQogKgogKiAoYykgSWduYWNlIE55YW1hZ2FuYSBCdXRlcmEgPG55YW1zcHJvZEBnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIExlYWd1ZVxVcmlcVXJpVGVtcGxhdGU7Cgp1c2UgTGVhZ3VlXFVyaVxFeGNlcHRpb25zXFN5bnRheEVycm9yOwp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKCmZpbmFsIGNsYXNzIFZhclNwZWNpZmllcgp7CiAgICAvKioKICAgICAqIFZhcmlhYmxlcyBzcGVjaWZpY2F0aW9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwI3NlY3Rpb24tMi4zCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgUkVHRVhQX1ZBUlNQRUMgPSAnL14KICAgICAgICAoPzxuYW1lPig/OltBLXowLTlfXC5dfCVbMC05YS1mQS1GXXsyfSkrKQogICAgICAgICg/PG1vZGlmaWVyPlw6KD88cG9zaXRpb24+XGQrKXxcKik/CiAgICAkL3gnOwoKICAgIHByaXZhdGUgc3RyaW5nICRuYW1lOwogICAgcHJpdmF0ZSBzdHJpbmcgJG1vZGlmaWVyOwogICAgcHJpdmF0ZSBpbnQgJHBvc2l0aW9uOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRuYW1lLCBzdHJpbmcgJG1vZGlmaWVyLCBpbnQgJHBvc2l0aW9uKQogICAgewogICAgICAgICR0aGlzLT5uYW1lID0gJG5hbWU7CiAgICAgICAgJHRoaXMtPm1vZGlmaWVyID0gJG1vZGlmaWVyOwogICAgICAgICR0aGlzLT5wb3NpdGlvbiA9ICRwb3NpdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZShhcnJheSAkcHJvcGVydGllcyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHByb3BlcnRpZXNbJ25hbWUnXSwgJHByb3BlcnRpZXNbJ21vZGlmaWVyJ10sICRwcm9wZXJ0aWVzWydwb3NpdGlvbiddKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRzcGVjaWZpY2F0aW9uKTogc2VsZgogICAgewogICAgICAgIGlmICgxICE9PSBwcmVnX21hdGNoKHNlbGY6OlJFR0VYUF9WQVJTUEVDLCAkc3BlY2lmaWNhdGlvbiwgJHBhcnNlZCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdmFyaWFibGUgc3BlY2lmaWNhdGlvbiAiJy4kc3BlY2lmaWNhdGlvbi4nIiBpcyBpbnZhbGlkLicpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZCArPSBbJ21vZGlmaWVyJyA9PiAnJywgJ3Bvc2l0aW9uJyA9PiAnJ107CiAgICAgICAgaWYgKCcnICE9PSAkcGFyc2VkWydwb3NpdGlvbiddKSB7CiAgICAgICAgICAgICRwYXJzZWRbJ3Bvc2l0aW9uJ10gPSAoaW50KSAkcGFyc2VkWydwb3NpdGlvbiddOwogICAgICAgICAgICAkcGFyc2VkWydtb2RpZmllciddID0gJzonOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09PSAkcGFyc2VkWydwb3NpdGlvbiddKSB7CiAgICAgICAgICAgICRwYXJzZWRbJ3Bvc2l0aW9uJ10gPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKDEwMDAwIDw9ICRwYXJzZWRbJ3Bvc2l0aW9uJ10pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUaGUgdmFyaWFibGUgc3BlY2lmaWNhdGlvbiAiJy4kc3BlY2lmaWNhdGlvbi4nIiBpcyBpbnZhbGlkIHRoZSBwb3NpdGlvbiBtb2RpZmllciBtdXN0IGJlIGxvd2VyIHRoYW4gMTAwMDAuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHBhcnNlZFsnbmFtZSddLCAkcGFyc2VkWydtb2RpZmllciddLCAkcGFyc2VkWydwb3NpdGlvbiddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKDAgPCAkdGhpcy0+cG9zaXRpb24pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uYW1lLiR0aGlzLT5tb2RpZmllci4kdGhpcy0+cG9zaXRpb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWUuJHRoaXMtPm1vZGlmaWVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZpZXIoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2RpZmllcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zaXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3NpdGlvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/advanced_settings_example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRhZHZhbmNlZFNldHRpbmdzID0gYXJyYXkoCgogICAgLy8gQ29tcHJlc3Npb24gc2V0dGluZ3MKICAgIC8vIEhhbmRsZSBpZiB0aGUgZ2V0UmVxdWVzdC9nZXRSZXNwb25zZSBtZXRob2RzIHdpbGwgcmV0dXJuIHRoZSBSZXF1ZXN0L1Jlc3BvbnNlIGRlZmxhdGVkLgogICAgLy8gQnV0IGlmIHdlIHByb3ZpZGUgYSAkZGVmbGF0ZSBib29sZWFuIHBhcmFtZXRlciB0byB0aGUgZ2V0UmVxdWVzdCBvciBnZXRSZXNwb25zZQogICAgLy8gbWV0aG9kIGl0IHdpbGwgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncy4KICAgICdjb21wcmVzcycgPT4gYXJyYXkoCiAgICAgICAgJ3JlcXVlc3RzJyA9PiB0cnVlLAogICAgICAgICdyZXNwb25zZXMnID0+IHRydWUKICAgICksCgogICAgLy8gU2VjdXJpdHkgc2V0dGluZ3MKICAgICdzZWN1cml0eScgPT4gYXJyYXkoCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyBvZmZlcmVkICovCgogICAgICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBuYW1lSUQgb2YgdGhlIDxzYW1scDpsb2dvdXRSZXF1ZXN0PiBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIGVuY3J5cHRlZC4KICAgICAgICAnbmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLiAgICAgICAgICAgICAgW1RoZSBNZXRhZGF0YSBvZiB0aGUgU1Agd2lsbCBvZmZlciB0aGlzIGluZm9dCiAgICAgICAgJ2F1dGhuUmVxdWVzdHNTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgPHNhbWxwOmxvZ291dFJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLgogICAgICAgICdsb2dvdXRSZXF1ZXN0U2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpsb2dvdXRSZXNwb25zZT4gbWVzc2FnZXMgc2VudCBieSB0aGlzIFNQCiAgICAgICAgLy8gd2lsbCBiZSBzaWduZWQuCiAgICAgICAgJ2xvZ291dFJlc3BvbnNlU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLyogU2lnbiB0aGUgTWV0YWRhdGEKICAgICAgICAgRmFsc2UgfHwgVHJ1ZSAodXNlIHNwIGNlcnRzKSB8fCBhcnJheSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5RmlsZU5hbWUnID0+ICdtZXRhZGF0YS5rZXknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlcnRGaWxlTmFtZScgPT4gJ21ldGFkYXRhLmNydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXJyYXkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcml2YXRlS2V5JyA9PiAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAqLwogICAgICAgICdzaWduTWV0YWRhdGEnID0+IGZhbHNlLAoKCiAgICAgICAgLyoqIHNpZ25hdHVyZXMgYW5kIGVuY3J5cHRpb25zIHJlcXVpcmVkICoqLwoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1scDpSZXNwb25zZT4sIDxzYW1scDpMb2dvdXRSZXF1ZXN0PiBhbmQKICAgICAgICAvLyA8c2FtbHA6TG9nb3V0UmVzcG9uc2U+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5IHRoaXMgU1AgdG8gYmUgc2lnbmVkLgogICAgICAgICd3YW50TWVzc2FnZXNTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1sOkFzc2VydGlvbj4gZWxlbWVudHMgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIGVuY3J5cHRlZC4KICAgICAgICAnd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIDxzYW1sOkFzc2VydGlvbj4gZWxlbWVudHMgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIHNpZ25lZC4gICAgICAgIFtUaGUgTWV0YWRhdGEgb2YgdGhlIFNQIHdpbGwgb2ZmZXIgdGhpcyBpbmZvXQogICAgICAgICd3YW50QXNzZXJ0aW9uc1NpZ25lZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyBhIHJlcXVpcmVtZW50IGZvciB0aGUgTmFtZUlEIGVsZW1lbnQgb24gdGhlIFNBTUxSZXNwb25zZSByZWNlaXZlZAogICAgICAgIC8vIGJ5IHRoaXMgU1AgdG8gYmUgcHJlc2VudC4KICAgICAgICAnd2FudE5hbWVJZCcgPT4gdHJ1ZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBOYW1lSUQgcmVjZWl2ZWQgYnkKICAgICAgICAvLyB0aGlzIFNQIHRvIGJlIGVuY3J5cHRlZC4KICAgICAgICAnd2FudE5hbWVJZEVuY3J5cHRlZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIGNvbnRleHQuCiAgICAgICAgLy8gU2V0IHRvIGZhbHNlIGFuZCBubyBBdXRoQ29udGV4dCB3aWxsIGJlIHNlbnQgaW4gdGhlIEF1dGhOUmVxdWVzdCwKICAgICAgICAvLyBTZXQgdHJ1ZSBvciBkb24ndCBwcmVzZW50IHRoaXMgcGFyYW1ldGVyIGFuZCB5b3Ugd2lsbCBnZXQgYW4gQXV0aENvbnRleHQgJ2V4YWN0JyAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmRQcm90ZWN0ZWRUcmFuc3BvcnQnCiAgICAgICAgLy8gU2V0IGFuIGFycmF5IHdpdGggdGhlIHBvc3NpYmxlIGF1dGggY29udGV4dCB2YWx1ZXM6IGFycmF5KCd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCcsICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpYNTA5JyksCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEFsbG93cyB0aGUgYXV0aG4gY29tcGFyaXNvbiBwYXJhbWV0ZXIgdG8gYmUgc2V0LCBkZWZhdWx0cyB0byAnZXhhY3QnIGlmCiAgICAgICAgLy8gdGhlIHNldHRpbmcgaXMgbm90IHByZXNlbnQuCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dENvbXBhcmlzb24nID0+ICdleGFjdCcsCgogICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGUgU1Agd2lsbCB2YWxpZGF0ZSBhbGwgcmVjZWl2ZWQgeG1scy4KICAgICAgICAvLyAoSW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHhtbCwgJ3N0cmljdCcgYW5kICd3YW50WE1MVmFsaWRhdGlvbicgbXVzdCBiZSB0cnVlKS4KICAgICAgICAnd2FudFhNTFZhbGlkYXRpb24nID0+IHRydWUsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBlbXB0eSB2YWx1ZSBhdCBpdHMgRGVzdGluYXRpb24KICAgICAgICAvLyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgcmVqZWN0ZWQgZm9yIHRoaXMgZmFjdC4KICAgICAgICAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCBEZXN0aW5hdGlvbiBVUkwgc2hvdWxkIHN0cmljdGx5IG1hdGNoIHRvIHRoZSBhZGRyZXNzIHRvCiAgICAgICAgLy8gd2hpY2ggdGhlIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuCiAgICAgICAgLy8gTm90aWNlIHRoYXQgaWYgJ3JlbGF4RGVzdGluYXRpb25WYWxpZGF0aW9uJyBpcyB0cnVlIGFuIGVtcHR5IERlc3RpbmF0aW9uCiAgICAgICAgLy8gd2lsbCBiZSBhY2NlcHRlZC4KICAgICAgICAnZGVzdGluYXRpb25TdHJpY3RseU1hdGNoZXMnID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCB0aGUgdG9vbGtpdCB3aWxsIG5vdCByYWlzZWQgYW4gZXJyb3Igd2hlbiB0aGUgU3RhdGVtZW50IEVsZW1lbnQKICAgICAgICAvLyBjb250YWluIGF0cmlidXRlIGVsZW1lbnRzIHdpdGggbmFtZSBkdXBsaWNhdGVkCiAgICAgICAgJ2FsbG93UmVwZWF0QXR0cmlidXRlTmFtZScgPT4gZmFsc2UsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBJblJlc3BvbnNlVG8gdmFsdWUgd2lsbCBiZSByZWplY3RlZCBpZiBub3QKICAgICAgICAvLyBBdXRoTlJlcXVlc3QgSUQgcHJvdmlkZWQgdG8gdGhlIHZhbGlkYXRpb24gbWV0aG9kLgogICAgICAgICdyZWplY3RVbnNvbGljaXRlZFJlc3BvbnNlc1dpdGhJblJlc3BvbnNlVG8nID0+IGZhbHNlLAoKICAgICAgICAvLyBBbGdvcml0aG0gdGhhdCB0aGUgdG9vbGtpdCB3aWxsIHVzZSBvbiBzaWduaW5nIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMScKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2RzYS1zaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMzg0JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHJzYS1zaGExIGlzIGEgZGVwcmVjYXRlZCBhbGdvcml0aG0gYW5kIHNob3VsZCBub3QgYmUgdXNlZAogICAgICAgICdzaWduYXR1cmVBbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JywKCiAgICAgICAgLy8gQWxnb3JpdGhtIHRoYXQgdGhlIHRvb2xraXQgd2lsbCB1c2Ugb24gZGlnZXN0IHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnCiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCcKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHNoYTEgaXMgYSBkZXByZWNhdGVkIGFsZ29yaXRobSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCiAgICAgICAgJ2RpZ2VzdEFsZ29yaXRobScgPT4gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NicsCgogICAgICAgIC8vIEFsZ29yaXRobSB0aGF0IHRoZSB0b29sa2l0IHdpbGwgdXNlIGZvciBlbmNyeXB0aW9uIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczE5Mi1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbScKICAgICAgICAvLyAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNhZXMxOTItZ2NtJwogICAgICAgIC8vICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgIC8vIE5vdGljZSB0aGF0IGFlcy1jYmMgYXJlIG5vdCBjb25zaWRlciBzZWN1cmUgYW55bW9yZSBzbyBzaG91bGQgbm90IGJlIHVzZWQKICAgICAgICAnZW5jcnlwdGlvbl9hbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nLAoKICAgICAgICAvLyBBREZTIFVSTC1FbmNvZGVzIFNBTUwgZGF0YSBhcyBsb3dlcmNhc2UsIGFuZCB0aGUgdG9vbGtpdCBieSBkZWZhdWx0IHVzZXMKICAgICAgICAvLyB1cHBlcmNhc2UuIFR1cm4gaXQgVHJ1ZSBmb3IgQURGUyBjb21wYXRpYmlsaXR5IG9uIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KICAgICAgICAnbG93ZXJjYXNlVXJsZW5jb2RpbmcnID0+IGZhbHNlLAogICAgKSwKCiAgICAvLyBDb250YWN0IGluZm9ybWF0aW9uIHRlbXBsYXRlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdXBwbHkgYSB0ZWNobmljYWwgYW5kIHN1cHBvcnQgY29udGFjdHMKICAgICdjb250YWN0UGVyc29uJyA9PiBhcnJheSgKICAgICAgICAndGVjaG5pY2FsJyA9PiBhcnJheSgKICAgICAgICAgICAgJ2dpdmVuTmFtZScgPT4gJycsCiAgICAgICAgICAgICdlbWFpbEFkZHJlc3MnID0+ICcnCiAgICAgICAgKSwKICAgICAgICAnc3VwcG9ydCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdnaXZlbk5hbWUnID0+ICcnLAogICAgICAgICAgICAnZW1haWxBZGRyZXNzJyA9PiAnJwogICAgICAgICksCiAgICApLAoKICAgIC8vIE9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0ZW1wbGF0ZSwgdGhlIGluZm8gaW4gZW5fVVMgbGFuZyBpcyByZWNvbW1lbmRlZCwgYWRkIG1vcmUgaWYgcmVxdWlyZWQKICAgICdvcmdhbml6YXRpb24nID0+IGFycmF5KAogICAgICAgICdlbi1VUycgPT4gYXJyYXkoCiAgICAgICAgICAgICduYW1lJyA9PiAnJywKICAgICAgICAgICAgJ2Rpc3BsYXluYW1lJyA9PiAnJywKICAgICAgICAgICAgJ3VybCcgPT4gJycKICAgICAgICApLAogICAgKSwKKTsKCgovKiBJbnRlcm9wZXJhYmxlIFNBTUwgMi4wIFdlYiBCcm93c2VyIFNTTyBQcm9maWxlIFtzYW1sMmludF0gICBodHRwOi8vc2FtbDJpbnQub3JnL3Byb2ZpbGUvY3VycmVudAoKICAgJ2F1dGhuUmVxdWVzdHNTaWduZWQnID0+IGZhbHNlLCAgICAvLyBTUCBTSE9VTEQgTk9UIHNpZ24gdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1VU1QgTk9UIGFzc3VtZSB0aGF0IHRoZSBJZFAgdmFsaWRhdGVzIHRoZSBzaWduCiAgICd3YW50QXNzZXJ0aW9uc1NpZ25lZCcgPT4gdHJ1ZSwKICAgJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJyA9PiB0cnVlLCAvLyBNVVNUIGJlIGVuYWJsZWQgaWYgU1NML0hUVFBzIGlzIGRpc2FibGVkCiAgICd3YW50TmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKKi8K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/certs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/certs/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGFrZSBjYXJlIG9mIHRoaXMgZm9sZGVyIHRoYXQgY291bGQgY29udGFpbiBwcml2YXRlIGtleS4gQmUgc3VyZSB0aGF0IHRoaXMgZm9sZGVyIG5ldmVyIGlzIHB1Ymxpc2hlZC4KCk9uZWxvZ2luIFBIUCBUb29sa2l0IGV4cGVjdHMgY2VydHMgZm9yIHRoZSBTUCBzdG9yZWQgYXQ6CgogKiBzcC5rZXkgICBQcml2YXRlIEtleQogKiBzcC5jcnQgIFB1YmxpYyBjZXJ0CiAqIHNwX25ldy5jcnQgRnV0dXJlIFB1YmxpYyBjZXJ0CgpBbHNvIHlvdSBjYW4gdXNlIG90aGVyIGNlcnQgdG8gc2lnbiB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQIHVzaW5nIHRoZToKCiAqIG1ldGFkYXRhLmtleQogKiBtZXRhZGF0YS5jcnQKCklmIHlvdSBhcmUgdXNpbmcgY29tcG9zZXIgdG8gaW5zdGFsbCB0aGUgcGhwLXNhbWwgdG9vbGtpdCwgWW91IHNob3VsZCBtb3ZlIHRoZSBjZXJ0cyBmb2xkZXIgdG8gIHZlbmRvci9vbmVsb2dpbi9waHAtc2FtbC9jZXJ0cwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/CHANGELOG</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKdjQuMy4yCiogVXBkYXRlIHhtbHNlY2xpYnMgdmVyc2lvbiByZXF1aXJlbWVudCB0byAzLjEuNSBkdWUgW0NWRS0yMDI2LTMyMzEzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EtNHYyNi12NmNnLWc2ZjkpCgp2NC4zLjEKKiBVcGRhdGUgeG1sc2VjbGlicyB2ZXJzaW9uIHJlcXVpcmVtZW50IHRvIDMuMS40IGR1ZSBbQ1ZFLTIwMjUtNjY0NzVdKGh0dHBzOi8vZ2l0aHViLmNvbS9hZHZpc29yaWVzL0dIU0EtYzRjYy14OTI4LXZqdzkpCgp2NC4zLjAKKiBQSFAgOC40IENvbXBhdGliaWxpdHkgdmlhICM2MDAgYW5kICM2MDcuCiogWyM2MTldKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNjE5KSBBZGQgUGFyYW1ldGVyIGNoZWNraW5nIG9uIHZhbGlkYXRlQmluYXJ5U2lnbiwgaW5zcGlyZWQgb24gQ1ZFLTIwMjUtMjc3NzMKKiBbIzYwM10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzYwMykgRml4IHR5cG8gaW4gaWdub3JlVmFsaWRVbnRpbCB0aGF0IGJyZWFrcyBtZXRhZGF0YS4gQWRkIGEgbmV3IHBhcmFtZXRlciB0byBleGNsdWRlIHZhbGlkVW50aWwgb24gU2V0dGluZ3MgZ2V0U1BNZXRhZGF0YQoqIFsjNTk0XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU5NCkgQWRkIHN1cHBvcnQgZm9yIGVuY3J5cHRlZCBuYW1lIGlkIGluIGVuY3J5cHRlZCBhc3NlcnRpb24KKiBGaXggYnVpbGRXaXRoQmFzZVVSTFBhdGguIFNlZSAjNTgxCiogRG9jIGZpeCB0eXBvCiogUmVtb3ZlIFRyYXZpcyBDSSByZWZlcmVuY2VzCgp2NC4yLjAKKiBbIzU4Nl0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81ODYpIElkUE1ldGFkYXRhUGFyc2VyOjpwYXJzZVJlbW90ZVhNTCAtIEFkZCBhcmd1bWVudCBmb3Igc2V0dGluZyB3aGV0aGVyIHRvIHZhbGlkYXRlIHBlZXIgU1NMIGNlcnRpZmljYXRlCiogWyM1ODVdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg1KSBEZWNsYXJlIGNvbmRpdGlvbmFsIHJldHVybiB0eXBlcwoqIFsjNTc3XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3NykgQWxsb3cgZW1wdHkgTmFtZUlEIHZhbHVlIHdoZW4gbm8gc3RyaWN0IG9yIHdhbnROYW1lSWQgaXMgZmFsc2UKKiBbIzU3MF0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NzApIFN1cHBvcnQgWDUwOSBjZXJ0IGNvbW1lbnRzCiogWyM1NjldKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTY5KSBBZGQgcGFyYW1ldGVyIHRvIGV4Y2x1ZGUgdmFsaWRVbnRpbCBvbiBTUCBNZXRhZGF0YSBYTUwKKiBbIzU1MV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NTEpIEZpeCBjb21wYXRpYmlsaXR5IHdpdGggcHJveGllcyB0aGF0IGV4dGVuZHMgSFRUUF9YX0ZPUldBUkRFRF9IT1NUCiogTG9nb3V0UmVxdWVzdCBhbmQgdGhlIExvZ291dFJlc3BvbnNlIG9iamVjdCB0byBzZXBhcmF0ZSBmdW5jdGlvbnMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogRml4IHR5cG9zIG9uIHJlYWRtZS4KKiBbIzQ4MF0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC80ODApIEZpeCB0eXBvIG9uIFNQTmFtZVF1YWxpZmllciBtaXNtYXRjaCBlcnJvciBtZXNzYWdlCiogUmVtb3ZlIHVuYm91bmQgdmVyc2lvbiBjb25zdHJhaW50cyBvbiB4bWxzZWNsaWJzCiogVXBkYXRlIGRlcGVuZGVuY2llcwoqIEZpeCB0ZXN0IHBheWxvYWRzCiogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT25lTG9naW4uCgp2NC4xLjAKKiBBZGQgcGlwZSB0aHJvdWdoIGZvciB0aGUgJHNwVmFsaWRhdGlvbk9ubHkgc2V0dGluZyBpbiB0aGUgQXV0aCBjbGFzcy4KCnY0LjAuMQoqIEFkZCBjb21wYXRpYmlsaXR5IHdpdGggUEhQIDguMQoqIFsjNDg3XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9pc3N1ZXMvNDg3KSBFbmFibGUgc3RyaWN0IGNoZWNrIG9uIGluX2FycmF5IG1ldGhvZAoqIEFkZCB3YXJuaW5nIGFib3V0IE9wZW4gUmVkaXJlY3QgYW5kIFJlcGx5IGF0dGFja3MKKiBBZGQgd2FybmluZyBhYm91dCB0aGUgdXNlIG9mIElkcE1ldGFkYXRhUGFyc2VyIGNsYXNzLiBJZiBNZXRhZGF0YSBVUkxzCiAgYXJlIHByb3ZpZGVkIGJ5IDNyZCBwYXJ0aWVzLCB0aGUgVVJMIGlucHV0cyBNVVNUIGJlIHZhbGlkYXRlZCB0byBhdm9pZCBpc3N1ZXMgbGlrZSBTU1JGCgp2NC4wLjAKKiBbIzQ2N10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NjcpIEZpeCBidWcgb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkgbWV0aG9kCiogU3VwcG9ydHMgUEhQIDguWAoKdjMuNy4wCiogWyM1ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg2KSBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgLSBBZGQgYXJndW1lbnQgZm9yIHNldHRpbmcgd2hldGhlciB0byB2YWxpZGF0ZSBwZWVyIFNTTCBjZXJ0aWZpY2F0ZQoqIFsjNTg1XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU4NSkgRGVjbGFyZSBjb25kaXRpb25hbCByZXR1cm4gdHlwZXMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogWyM1NzddKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTc3KSBBbGxvdyBlbXB0eSBOYW1lSUQgdmFsdWUgd2hlbiBubyBzdHJpY3Qgb3Igd2FudE5hbWVJZCBpcyBmYWxzZQoqIFsjNTcwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3MCkgU3VwcG9ydCBYNTA5IGNlcnQgY29tbWVudHMKKiBbIzU2OV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NjkpIEFkZCBwYXJhbWV0ZXIgdG8gZXhjbHVkZSB2YWxpZFVudGlsIG9uIFNQIE1ldGFkYXRhIFhNTAoqIFsjNTUxXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU1MSkgRml4IGNvbXBhdGliaWxpdHkgd2l0aCBwcm94aWVzIHRoYXQgZXh0ZW5kcyBIVFRQX1hfRk9SV0FSREVEX0hPU1QKKiBbIzQ4N10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzQ4NykgRW5hYmxlIHN0cmljdCBjaGVjayBvbiBpbl9hcnJheSBtZXRob2QKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogRml4IHR5cG9zIG9uIHJlYWRtZS4KKiBBZGQgd2FybmluZyBhYm91dCBPcGVuIFJlZGlyZWN0IGFuZCBSZXBseSBhdHRhY2tzCiogQWRkIHdhcm5pbmcgYWJvdXQgdGhlIHVzZSBvZiBJZHBNZXRhZGF0YVBhcnNlciBjbGFzcy4gSWYgTWV0YWRhdGEgVVJMcwogIGFyZSBwcm92aWRlZCBieSAzcmQgcGFydGllcywgdGhlIFVSTCBpbnB1dHMgTVVTVCBiZSB2YWxpZGF0ZWQgdG8gYXZvaWQgaXNzdWVzIGxpa2UgU1NSRgoqIEZpeCB0ZXN0IHBheWxvYWRzCiogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT25lTG9naW4uCgp2My42LjEKKiBbIzQ2N10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NjcpIEZpeCBidWcgb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkgbWV0aG9kCgp2My42LjAKKiBBZGQgQUVTMTI4X0dDTSBlbmNyeXB0aW9uIG9uIGdlbmVyYXRlTmFtZUlkIG1ldGhvZC4gTmV3IHNldHRpbmcgcGFyYW1ldGVyIGVuY3J5cHRpb25fYWxnb3JpdGhtLiBJZiB5b3Ugc2V0IGEgZW5jcnlwdGlvbiBtZXRob2QgZGlmZmVyZW50IHRoYW4gQUVTMTI4X0NCQyB0aGVuIHRoZSBhbGdvcml0aG0gUlNBX09BRVBfTUdGMVAgd2lsbCBiZSB1c2VkIGFzIHdlbGwgaW5zdGVhZCBSU0FfMV81CiogUEhQIDguMCBzdXBwb3J0Cgp2My41LjEKKiAzLjUuMCBwYWNrYWdpc3QvZ2l0aHViIHJlbGVhc2UgZHVlIGEgY29uZnVzaW9uIHdlcmUgdXNpbmcgdGhlIG1hc3RlciAoMi5YIGJyYW5jaCkuIEknbSByZWxlYXNpbmcgMy41LjEgdG8gZml4IHRoaXMgaXNzdWUgYW5kIGdvIGJhY2sgdG8gMy5YIGJyYW5jaAoKdjMuNS4wCiogWyM0MTJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzQxMikgRW1wdHkgaW5zdGVhZCBvZiB1bnNldCB0aGUgJF9TRVNTSU9OIHZhcmlhYmxlCiogWyM0MzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvNDQzKSBGaXggSW5jb3JyZWN0IERlc3RpbmF0aW9uIGluIExvZ291dFJlc3BvbnNlIHdoZW4gdXNpbmcgcmVzcG9uc2VVcmwgIzQ0MwoqIFVwZGF0ZSB4bWxzZWNsaWJzIHRvIDMuMS4xCiogQWRkIHN1cHBvcnQgZm9yIFNNQVJUQ0FSRF9QS0kgYW5kIFJTQV9UT0tFTiBBdXRoIENvbnRleHRzCiogR2V0IGxpYiBwYXRoIGR5bmFtaWNhbGx5CiogQ2hlY2sgZm9yIHg1MDlDZXJ0IG9mIHRoZSBJZFAgd2hlbiBsb2FkaW5nIHNldHRpbmdzLCBldmVuIGlmIHRoZSBzZWN1cml0eSBpbmRleCB3YXMgbm90IHByb3ZpZGVkCiogU3VwcG9ydCBTdGF0ZW1lbnRzIHdpdGggQXR0cmlidXRlIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZSBlbmFibGluZyB0aGUgYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lIHNldHRpbmcKCnYzLjQuMQoqIEFkZCBzZXRTY2hlbWFzUGF0aCB0byBBdXRoIGNsYXNzIGFuZCBmaXggYmFja3dhcmQgY29tcGF0aWJpbGl0eQoKdi4zLjQuMAoqIFN1cHBvcnQgcmVqZWN0aW5nIHVuc29saWNpdGVkIFNBTUxSZXNwb25zZXMuCiogU3VwcG9ydCBzdHJpYyBkZXN0aW5hdGlvbiBtYXRjaGluZy4KKiBSZWplY3QgU0FNTFJlc3BvbnNlIGlmIHJlcXVlc3RJRCB3YXMgcHJvdmlkZWQgdG8gdGhlIHZhbGlkb3RyIGJ1dCB0aGUgSW5SZXNwb25zZVRvIGF0dHJpYnV0ZW9mIHRoZSBTQU1MUmVzcG9uc2UgaXMgbWlzc2luZwoqIENoZWNrIGRlc3RpbmF0aW9uIGFnYWluc3QgdGhlIGdldFNlbGZVUkxOb1F1ZXJ5IGFzIHdlbGwgb24gTG9nb3V0UmVxdWVzdCBhbmQgTG9nb3V0UmVzcG9uc2UgYXMgd2UgZG8gb24gUmVzcG9uc2UKKiBJbXByb3ZlIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoqIE9ubHkgYWRkIHJlc3BvbnNlVXJsIHRvIHRoZSBzZXR0aW5ncyBpZiBSZXNwb25zZUxvY2F0aW9uIHByZXNlbnQgaW4gdGhlIElkUE1ldGFkYXRhUGFyc2VyCiogUmVtb3ZlIHVzZSBvZiAkX0dFVCBvbiBzdGF0aWMgbWV0aG9kIHZhbGlkYXRlQmluYXJ5U2lnbgoqIEZpeCBlcnJvciBtZXNzYWdlIHdoZW4gQXNzZXJ0aW9uIGFuZCBOYW1lSWQgYXJlIGJvdGggZW5jcnlwdGVkIChub3Qgc3VwcG9ydGVkKQoKdi4zLjMuMQoqIFVwZGF0ZSB4bWxzZWNsaWJzIHRvIDMuMC40CiogUmVtb3ZlIENvbXBhcmlzb24gYXRyaWJ1dGUgZnJvbSBSZXF1ZXN0ZWRBdXRobkNvbnRleHQgd2hlbiBzZXR0aW5nIGhhcyBlbXB0eSB2YWx1ZQoKdi4zLjMuMAoqIFNldCB0cnVlIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBzdHJpY3Qgc2V0dGluZwoqIFJlbGF4IGNvbXBhcmlzb24gb2YgZmFsc2Ugb24gU2lnbk1ldGFkYXRhCiogRml4IENJCgp2LjMuMi4xCiogQWRkIG1pc3NlZCBuYW1lSWRWYWx1ZVJlcSBwYXJhbWV0ZXIgdG8gYnVpbGRBdXRoblJlcXVlc3QgbWV0aG9kCgp2LjMuMi4wCiogQWRkIHN1cHBvcnQgZm9yIFN1YmplY3RzIG9uIEF1dGhOUmVxdWVzdHMgYnkgdGhlIG5ldyBwYXJhbWV0ZXIgbmFtZUlkVmFsdWVSZXEKKiBTdXBwb3J0IFNMTyBSZXNwb25zZUxvY2F0aW9uCiogWyMzNDRdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMzQ0KSBSYWlzZSBlcnJvcnMgb24gSWRQTWV0YWRhdGFQYXJzZXI6OnBhcnNlUmVtb3RlWE1MIGFuZCBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VGaWxlWE1MCiogWyMzNTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMzU2KSBTdXBwb3J0ICd4NTA5Y2VydCcgYW5kICdwcml2YXRlS2V5JyBvbiBzaWduTWV0YWRhdGEgc2VjdXJpdHkgc2V0dGluZwoKdi4zLjEuMQoqIEZvcmNlIHRvIHVzZSBhdCBsZWFzdCB4bWxzZWNsaWJzIDMuMC4zIGZvciBzZWN1cml0eSByZWFzb25zCiogWyMzNjddKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzM2NykgTW92ZSB0aGUgY3JlYXRpb24gb2YgdGhlIEF1dGhuUmVxdWVzdCB0byBzZXBhcmF0ZSBmdW5jdGlvbgoqIFNldCBzdHJpY3Q9dHJ1ZSBvbiBjb25maWcgZXhhbXBsZXMKKiBNb3ZlIHBocHVuaXQueG1sCgp2LjMuMS4wCiogU2VjdXJpdHkgaW1wcm92ZW1lbnQgc3VnZ2VzdGVkIGJ5IE5pbHMgRW5nZWxiZXJ0eiB0byBwcmV2ZW50IERET1MgYnkgZXhwYW5zaW9uIG9mIGludGVybmFsbHkgZGVmaW5lZCBlbnRpdGllcyAoWEVFKQoqIEZpeCBzZXR0aW5nX2V4YW1wbGUucGhwIHNlcnZpY2VuYW1lIHBhcmFtZXRlcgoKdi4zLjAuMAoqIFJlbW92ZSBtY3J5cHQgZGVwZW5kZW5jeS4gQ29tcGF0aWJsZSB3aXRoIFBIUCA3LjIKKiB4bWxzZWNsaWJzIG5vdyBpcyBub3QgcGFydCBvZiB0aGUgdG9vbGtpdCBhbmQgbmVlZCB0byBiZSBpbnN0YWxsZWQgZnJvbSBvcmlnaW5hbCBzb3VyY2UKCnYuMi4yMC4wCiogWyM1ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTg2KSBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgLSBBZGQgYXJndW1lbnQgZm9yIHNldHRpbmcgd2hldGhlciB0byB2YWxpZGF0ZSBwZWVyIFNTTCBjZXJ0aWZpY2F0ZQoqIFsjNTg1XShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU4NSkgRGVjbGFyZSBjb25kaXRpb25hbCByZXR1cm4gdHlwZXMKKiBNYWtlIFNhbWwyXEF1dGggY2FuIGFjY2VwdCBhIHBhcmFtICRzcFZhbGlkYXRpb25Pbmx5CiogWyM1NzddKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3B1bGwvNTc3KSBBbGxvdyBlbXB0eSBOYW1lSUQgdmFsdWUgd2hlbiBubyBzdHJpY3Qgb3Igd2FudE5hbWVJZCBpcyBmYWxzZQoqIFsjNTcwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU3MCkgU3VwcG9ydCBYNTA5IGNlcnQgY29tbWVudHMKKiBbIzU2OV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvcHVsbC81NjkpIEFkZCBwYXJhbWV0ZXIgdG8gZXhjbHVkZSB2YWxpZFVudGlsIG9uIFNQIE1ldGFkYXRhIFhNTAoqIFsjNTUxXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzU1MSkgRml4IGNvbXBhdGliaWxpdHkgd2l0aCBwcm94aWVzIHRoYXQgZXh0ZW5kcyBIVFRQX1hfRk9SV0FSREVEX0hPU1QKKiBbIzQ4N10oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvaXNzdWVzLzQ4NykgRW5hYmxlIHN0cmljdCBjaGVjayBvbiBpbl9hcnJheSBtZXRob2QKKiBGaXggdHlwb3Mgb24gcmVhZG1lLgoqIFsjNDgwXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9wdWxsLzQ4MCkgRml4IHR5cG8gb24gU1BOYW1lUXVhbGlmaWVyIG1pc21hdGNoCiogQWRkICRzcFZhbGlkYXRpb25Pbmx5IHBhcmFtIHRvIEF1dGgKKiBVcGRhdGUgeG1sc2VjbGlicyAoMy4xLjIgd2l0aG91dCBBRVMtR0NNIGFuZCBPQUVQIHN1cHBvcnQpCiogQWRkIHdhcm5pbmcgYWJvdXQgT3BlbiBSZWRpcmVjdCBhbmQgUmVwbHkgYXR0YWNrcwoqIEFkZCB3YXJuaW5nIGFib3V0IHRoZSB1c2Ugb2YgSWRwTWV0YWRhdGFQYXJzZXIgY2xhc3MuIElmIE1ldGFkYXRhIFVSTHMKICBhcmUgcHJvdmlkZWQgYnkgM3JkIHBhcnRpZXMsIHRoZSBVUkwgaW5wdXRzIE1VU1QgYmUgdmFsaWRhdGVkIHRvIGF2b2lkIGlzc3VlcyBsaWtlIFNTUkYKKiBVcGRhdGUgZGVwZW5kZW5jaWVzCiogRml4IHRlc3QgcGF5bG9hZHMKKiBSZW1vdmUgcmVmZXJlbmNlcyB0byBPbmVMb2dpbi4KCnYuMi4xOS4xCiogWyM0NjddKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvNDY3KSBGaXggYnVnIG9uIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoKdi4yLjE5LjAKKiBbIzQxMl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvNDEyKSBFbXB0eSBpbnN0ZWFkIG9mIHVuc2V0IHRoZSAkX1NFU1NJT04gdmFyaWFibGUKKiBbIzQzM10oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy80NDMpIEZpeCBJbmNvcnJlY3QgRGVzdGluYXRpb24gaW4gTG9nb3V0UmVzcG9uc2Ugd2hlbiB1c2luZyByZXNwb25zZVVybCAjNDQzCiogQWRkIHN1cHBvcnQgZm9yIFNNQVJUQ0FSRF9QS0kgYW5kIFJTQV9UT0tFTiBBdXRoIENvbnRleHRzCiogU3VwcG9ydCBTdGF0ZW1lbnRzIHdpdGggQXR0cmlidXRlIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZSBlbmFibGluZyB0aGUgYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lIHNldHRpbmcKKiBHZXQgbGliIHBhdGggZGluYW1pY2FsbHkKKiBDaGVjayBmb3IgeDUwOUNlcnQgb2YgdGhlIElkUCB3aGVuIGxvYWRpbmcgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlIHNlY3VyaXR5IGluZGV4IHdhcyBub3QgcHJvdmlkZWQKCnYuMi4xOC4xCiogQWRkIHNldFNjaGVtYXNQYXRoIHRvIEF1dGggY2xhc3MgYW5kIGZpeCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Cgp2LjIuMTguMAoqIFN1cHBvcnQgcmVqZWN0aW5nIHVuc29saWNpdGVkIFNBTUxSZXNwb25zZXMuCiogU3VwcG9ydCBzdHJpYyBkZXN0aW5hdGlvbiBtYXRjaGluZy4KKiBSZWplY3QgU0FNTFJlc3BvbnNlIGlmIHJlcXVlc3RJRCB3YXMgcHJvdmlkZWQgdG8gdGhlIHZhbGlkb3RyIGJ1dCB0aGUgSW5SZXNwb25zZVRvIGF0dHJpYnV0ZW9mIHRoZSBTQU1MUmVzcG9uc2UgaXMgbWlzc2luZwoqIENoZWNrIGRlc3RpbmF0aW9uIGFnYWluc3QgdGhlIGdldFNlbGZVUkxOb1F1ZXJ5IGFzIHdlbGwgb24gTG9nb3V0UmVxdWVzdCBhbmQgTG9nb3V0UmVzcG9uc2UgYXMgd2UgZG8gb24gUmVzcG9uc2UKKiBJbXByb3ZlIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IG1ldGhvZAoqIE9ubHkgYWRkIHJlc3BvbnNlVXJsIHRvIHRoZSBzZXR0aW5ncyBpZiBSZXNwb25zZUxvY2F0aW9uIHByZXNlbnQgaW4gdGhlIElkUE1ldGFkYXRhUGFyc2VyCiogUmVtb3ZlIHVzZSBvZiAkX0dFVCBvbiBzdGF0aWMgbWV0aG9kIHZhbGlkYXRlQmluYXJ5U2lnbgoqIEZpeCBlcnJvciBtZXNzYWdlIHdoZW4gQXNzZXJ0aW9uIGFuZCBOYW1lSWQgYXJlIGJvdGggZW5jcnlwdGVkIChub3Qgc3VwcG9ydGVkKQoKdi4yLjE3LjEKKiBVcGRhdGUgeG1sc2VjbGlicyB0byAzLjAuNAoqIFJlbW92ZSBDb21wYXJpc29uIGF0cmlidXRlIGZyb20gUmVxdWVzdGVkQXV0aG5Db250ZXh0IHdoZW4gc2V0dGluZyBoYXMgZW1wdHkgdmFsdWUKCnYuMi4xNy4wCiogU2V0IHRydWUgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHN0cmljdCBzZXR0aW5nCiogU3VwcG9ydCAneDUwOWNlcnQnIGFuZCAncHJpdmF0ZUtleScgb24gc2lnbk1ldGFkYXRhIHNlY3VyaXR5IHNldHRpbmdzCiogUmVsYXggY29tcGFyaXNpb24gb2YgZmFsc2Ugb24gU2lnbk1ldGFkYXRhCiogRml4IENJCgp2LjIuMTYuMAoqIFN1cHBvcnQgU0xPIFJlc3BvbnNlTG9jYXRpb24KKiBbIzM0NF0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL2lzc3Vlcy8zNDQpIFJhaXNlIGVycm9ycyBvbiBJZFBNZXRhZGF0YVBhcnNlcjo6cGFyc2VSZW1vdGVYTUwgYW5kIElkUE1ldGFkYXRhUGFyc2VyOjpwYXJzZUZpbGVYTUwKKiBBZGp1c3RlZCBhY3MgZW5kcG9pbnQgdG8gZXh0cmFjdCBOYW1lUXVhbGlmaWVyIGFuZCBTUE5hbWVRdWFsaWZpZXIgZnJvbSBTQU1MUmVzcG9uc2UuIEFkanVzdGVkIHNpbmdsZSBsb2dvdXQgc2VydmljZSB0byBwcm92aWRlIE5hbWVRdWFsaWZpZXIgYW5kIFNQTmFtZVF1YWxpZmllciB0byBsb2dvdXQgbWV0aG9kLiBBZGQgZ2V0TmFtZUlkTmFtZVF1YWxpZmllciB0byBBdXRoIGFuZCBTYW1sUmVzcG9uc2UuIEV4dGVuZCBsb2dvdXQgbWV0aG9kIGZyb20gQXV0aCBhbmQgTG9nb3V0UmVxdWVzdCBjb25zdHJ1Y3RvciB0byBzdXBwb3J0IFNQTmFtZVF1YWxpZmllciBwYXJhbWV0ZXIuIEFsaWduIExvZ291dFJlcXVlc3QgY29uc3RydWN0b3Igd2l0aCBTQU1MIHNwZWNzCiogQWRkIHN1cHBvcnQgZm9yIFN1YmplY3RzIG9uIEF1dGhOUmVxdWVzdHMgYnkgdGhlIG5ldyBwYXJhbWV0ZXIKKiBTZXQgc3RyaWN0PXRydWUgb24gY29uZmlnIGV4YW1wbGVzCgp2LjIuMTUuMAoqIFNlY3VyaXR5IGltcHJvdmVtZW50IHN1Z2dlc3RlZCBieSBOaWxzIEVuZ2VsYmVydHogdG8gcHJldmVudCBERE9TIGJ5IGV4cGFuc2lvbiBvZiBpbnRlcm5hbGx5IGRlZmluZWQgZW50aXRpZXMgKFhFRSkKKiBGaXggYnVnIG9uIHNldHRpbmdzX2V4YW1wbGUucGhwCgp2LjIuMTQuMAoqIEFkZCAgcGFyYW1ldGVyIHRvIHRoZSBkZWNyeXB0RWxlbWVudCBtZXRob2QgdG8gbWFrZSBvcHRpb25hbCB0aGUgZm9ybWF0dGluZwoqIFsjMjgzXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yODMpIE5ldyBtZXRob2Qgb2YgaW1wb3J0aW5nIGEgZGVjcnlwdGVkIGFzc2VydGlvbiBpbnRvIHRoZSBYTUwgZG9jdW1lbnQgdG8gcmVwbGFjZSB0aGUgRW5jcnlwdGVkQXNzZXJ0aW9uLiBGaXggc2lnbmF0dXJlIGlzc3VlcyBvbiBTaWduZWQgRW5jcnlwdGVkIEFzc2VydGlvbnMgd2l0aCBkZWZhdWx0IG5hbWVzcGFjZQoqIEFsbG93IHRoZSBnZXRTUE1ldGFkYXRhKCkgbWV0aG9kIHRvIGFsd2F5cyBpbmNsdWRlIHRoZSBlbmNyeXB0aW9uIEtleSBEZXNjcmlwdG9yCiogQ2hhbmdlIHNvbWUgRmF0YWwgRXJyb3IgdG8gRXhjZXB0aW9ucwoqIFsjMjY1XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvaXNzdWVzLzI2NSkgU3VwcG9ydCBwYXJhbWV0ZXJzIGF0IGdldFNQTWV0YWRhdGEgbWV0aG9kCiogQXZvaWQgY2FsbGluZyBzdGF0aWMgbWV0aG9kIHVzaW5nIHRoaXMKCnYuMi4xMy4wCiogVXBkYXRlIHhtbHNlY2xpYnMgd2l0aCBzb21lIGZpeGVzLgoqIEFkZCBleHRyYSBwcm90ZWN0aW9uIHZlcmlmeWluZyB0aGUgU2lnbmF0dXJlIGFsZ29yaXRobSB1c2VkIG9uIFNpZ25lZEluZm8gZWxlbWVudCwgbm90IG9ubHkgcmVseSBvbiB0aGUgeG1sc2VjbGlicyB2ZXJpZnkgLyB2ZXJpZnlTaWduYXR1cmUgbWV0aG9kcy4KKiBBZGQgZ2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMgaW5kZXhlZCBieSBGcmllbmRseU5hbWUKKiBGaXggYnVnIG9uIHBhcnNlUmVtb3RlWE1MIGFuZCBwYXJzZUZpbGVYTUwuIEludGVybmFsIGNhbGxzIHRvIHBhcnNlWE1MIG1pc3NlZCB0aGUgZGVzaXJlZE5hbWVJZEZvcm1hdCBwYXJhbWV0ZXIKCnYuMi4xMi4wCiogSW1wcm92ZSBUaW1lIG1hbmFnZW1lbnQuIFVzZSBEYXRlVGltZS9EYXRlVGltZVpvbmUgY2xhc3Nlcy4KKiBFc2NhcGUgZXJyb3IgbWVzc2FnZXMgaW4gZGVidWcgbW9kZQoqIEltcHJvdmUgcGhwZG9jCiogQWRkIGFuIGV4dHJhIGZpbHRlciB0byB0aGUgdXJsIHRvIGJlIHVzZWQgb24gcmVkaXJlY3Rpb24KCiogWyMyNDJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzI0MikgRG9jdW1lbnQgdGhhdCBTSEEtMSBtdXN0IG5vdCBiZSB1c2VkCiogWyMyNTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzI1MCkgRml4ZWQgaXNzdWUgd2l0aCBJZFBNZXRhZGF0YVBhcnNlciBvbmx5IGtlZXBpbmcgMSBjZXJ0aWZpY2F0ZSB3aGVuIG11bHRpcGxlIGNlcnRpZmljYXRlcyBvZiBhIHNpbmdsZSB0eXBlIHdlcmUgcHJvdmlkZWQuCiogWyMyNjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMjYzKSBGaXggaW5jb21wYXRpYmlsaXR5IHdpdGggQURGUyBvbiBTTE8uIFdoZW4gb24gcGhwIHNhbWwgc2V0dGluZ3MgTmFtZUlEIEZvcm1hdCBpcyBzZXQgYXMgdW5zcGVjaWZpZWQgYnV0IHRoZSBTQU1MUmVzcG9uc2UgaGFzIG5vIE5hbWVJRCBGb3JtYXQsIG5vIE5hbWVJRCBGb3JtYXQgc2hvdWxkIGJlIHNwZWNpZmllZCBvbiBMb2dvdXRSZXF1ZXN0LgoKdi4yLjExLjAKKiBbIzIzNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjM2KSBFeGNsdWRlIHVubmVjZXNzYXJ5IGZpbGVzIGZyb20gQ29tcG9zZXIgcHJvZHVjdGlvbiBkb3dubG9hZHMKKiBbIzIyNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjI2KSBBZGQgcG9zc2liaWxpdHkgdG8gaGFuZGxlIG5hbWVJZCBOYW1lUXVhbGlmaWVyIGF0dHJpYnV0ZSBpbiBTTE8gUmVxdWVzdAoqIEltcHJvdmUgbG9nb3V0IGRvY3VtZW50YXRpb24gb24gUmVhZG1lLgoqIEltcHJvdmUgbXVsdGktY2VydGlmaWNhdGUgc3VwcG9ydAoKdi4yLjEwLjcKKiBGaXggSWRQTWV0YWRhdGFQYXJzZXIuIFRoZSBTaW5nbGVMb2dvdXRTZXJ2aWNlIHJldHJpZXZlZCBtZXRob2Qgd2FzIHdyb25nCiogWyMyMDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9pc3N1ZXMvMjAxKSBGaXggaXNzdWVzIHdpdGggU1AgZW50aXR5X2lkLCBhY3MgdXJsIGFuZCBzbHMgdXJsIHRoYXQgY29udGFpbnMgJgoKdi4yLjEwLjYKKiBbIzIwNl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMjA2KUJlIGFibGUgdG8gcmVnaXN0ZXIgZnV0dXJlIFNQIHg1MDljZXJ0IG9uIHRoZSBzZXR0aW5ncyBhbmQgcHVibGlzaCBpdCBvbiBTUCBtZXRhZGF0YQoqIFsjMjA2XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yMDYpIEJlIGFibGUgdG8gcmVnaXN0ZXIgbW9yZSB0aGFuIDEgSWRlbnRpdHkgUHJvdmlkZXIgeDUwOWNlcnQsIGxpbmtlZCB3aXRoIGFuIHNwZWNpZmljIHVzZSAoc2lnbmluZyBvciBlbmNyeXB0aW9uKQoqIFsjMjA2XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8yMDYpIFN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gcGFyc2UgSWRQIFhNTCBtZXRhZGF0YSAocmVtb3RlIHVybCBvciBmaWxlKSBhbmQgYmUgYWJsZSB0byBpbmplY3QgdGhlIGRhdGEgb2J0YWluZWQgb24gdGhlIHNldHRpbmdzLgoKdi4yLjEwLjUKKiBCZSBhYmxlIHRvIGdldCBhdCB0aGUgYXV0aCBvYmplY3QgdGhlIGxhc3QgcHJvY2Vzc2VkIElECiogSW1wcm92ZSBOYW1lSUQgRm9ybWF0IHN1cHBvcnQKKiBSZXNldCBlcnJvclJlYXNvbiBhdHRyaWJ1dGUgb2YgdGhlIGF1dGggb2JqZWN0IGFmdGVyIGVhY2ggUHJvY2VzcyBtZXRob2QKKiBWYWxpZGF0ZSBzZXJpYWwgbnVtYmVyIGFzIHN0cmluZyB0byB3b3JrIGFyb3VuZCBsaWJ4bWwyIGxpbWl0YXRpb24KKiBNYWtlIHRoZSBJc3N1ZXIgb24gdGhlIFJlc3BvbnNlIE9wdGlvbmFsCgp2LjIuMTAuNAoqIFsrXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvY29tbWl0Lzk0OTM1OWY1Y2FkNWUxZDA4NWM0ZTU0NDdkOWFhOGY0OWE2ZTgyYTEpIFNlY3VyaXR5IHVwZGF0ZSBmb3Igc2lnbmF0dXJlIHZhbGlkYXRpb24gb24gTG9nb3V0UmVxdWVzdC9Mb2dvdXRSZXNwb25zZQoqIFsjMTkyXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xOTIpIEFkZGVkIGFiaWxpdHkgdG8gY29uZmlndXJlIERpZ2VzdEFsZ29yaXRobSBpbiBzZXR0aW5ncwoqIFsjMTgzXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xODMpIEZpeCBzdHJwb3MgYnVnIHdoZW4gZGVjcnlwdGluZyBhc3NlcnRpb25zCiogWyMxODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE4NikgSW1wcm92ZSBpbmZvIG9uIGVudGl0eUlkIHZhbGlkYXRpb24gRXhjZXB0aW9uCiogWyMxODhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE4OCkgRml4ZWQgaXNzdWUgd2l0aCB1bmRlZmluZWQgY29uc3RhbnQgb2YgVU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVAoqIFJlYWQgQUNTIGJpbmRpbmcgb24gQXV0aE5SZXF1ZXN0IGJ1aWxkZXIgZnJvbSBzZXR0aW5ncwoqIEJlIGFibGUgdG8gcmVsYXggRGVzdGluYXRpb24gdmFsaWRhdGlvbiBvbiBTQU1MUmVzcG9uc2VzIGFuZCBsZXQgdGhpcwogIGF0dHJpYnV0ZSB0byBiZSBlbXB0eSB3aXRoIHRoZSAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nIHNldHRpbmcKCnYuMi4xMC4zCiogSW1wbGVtZW50IGEgbW9yZSBzcGVjaWZpYyBleGNlcHRpb24gY2xhc3MgZm9yIGhhbmRsaW5nIHNvbWUgdmFsaWRhdGlvbiBlcnJvcnMKKiBNaW5vciBjaGFuZ2VzIG9uIHRpbWUgdmFsaWRhdGlvbi9leGNlcHRpb25zCiogQWRkIGhvb2tzIHRvIHJldHJpZXZlIGxhc3Qtc2VudCBhbmQgbGFzdC1yZWNlaXZlZCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzCiogSW1wcm92ZS9GaXggdGVzdHMKKiBBZGQgRGlnZXN0QWxnb3JpdGhtIHN1cHBvcnQgb24gYWRkU2lnbgoqIFsjMTc3XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNzcpIEFkZCBlcnJvciBtZXNzYWdlIGZvciBiYWQgT25lTG9naW5fU2FtbDJfU2V0dGluZ3MgYXJndW1lbnQKCnYuMi4xMC4yCiogWyMxNzVdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE3NSkgQWxsb3cgb3ZlcnJpZGluZyBvZiBob3N0LCBwb3J0LCBwcm90b2NvbCBhbmQgdXJsIHBhdGggZm9yIFVSTCBidWlsZGluZwoqIFsjMTczXShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNzMpIFByb3ZpZGUgYmV0dGVyIHN1cHBvcnQgdG8gTmFtZUlkRm9ybWF0CiogRml4IGFub3RoZXIgaXNzdWUgb24gQXNzZXJ0aW9uIFNpZ25hdHVyZSB2YWxpZGF0aW9uIHdoZW4gdGhlIGFzc2VydGlvbiBjb250YWlucyBubyBuYW1lc3BhY2UsIGNvbnRhaW5lciBoYXMgc2FtbDIgbmFtZXNwYWNlIGFuZCBpdCB3YXMgZW5jcnlwdGVkCgp2LjIuMTAuMQoqIEZpeCBlcnJvciBtZXNzYWdlIG9uIFNpZ25NZXRhZGF0YSBwcm9jZXNzCiogRml4IGlzc3VlIG9uIEFzc2VydGlvbiBTaWduYXR1cmUgdmFsaWRhdGlvbiB3aGVuIHRoZSBhc3NlcnRpb24gY29udGFpbnMgbm8gbmFtZXNwYWNlIGFuZCBpdCB3YXMgZW5jcnlwdGVkCgp2LjIuMTAuMAoqIFNldmVyYWwgc2VjdXJpdHkgaW1wcm92ZW1lbnRzOgogICogQ29uZGl0aW9ucyBlbGVtZW50IHJlcXVpcmVkIGFuZCB1bmlxdWUuCiAgKiBBdXRoblN0YXRlbWVudCBlbGVtZW50IHJlcXVpcmVkIGFuZCB1bmlxdWUuCiAgKiBTUE5hbWVRdWFsaWZpZXIgbXVzdCBtYXRoIHRoZSBTUCBFbnRpdHlJRAogICogUmVqZWN0IHNhbWw6QXR0cmlidXRlIGVsZW1lbnQgd2l0aCBzYW1lIOKAnE5hbWXigJ0gYXR0cmlidXRlCiAgKiBSZWplY3QgZW1wdHkgbmFtZUlECiAgKiBSZXF1aXJlIElzc3VlciBlbGVtZW50LiAoTXVzdCBtYXRjaCBJZFAgRW50aXR5SUQpLgogICogRGVzdGluYXRpb24gdmFsdWUgY2FuJ3QgYmUgYmxhbmsgKGlmIHByZXNlbnQgbXVzdCBtYXRjaCBBQ1MgVVJMKS4KICAqIENoZWNrIHRoYXQgdGhlIEVuY3J5cHRlZEFzc2VydGlvbiBlbGVtZW50IG9ubHkgY29udGFpbnMgMSBBc3NlcnRpb24gZWxlbWVudC4KKiBJbXByb3ZlIFNpZ25hdHVyZSB2YWxpZGF0aW9uIHByb2Nlc3MKKiBBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlIHN1cHBvcnQKKiBTdXBwb3J0IGxvd2VyY2FzZSBVcmxlbmNvZGluZyAoQURGUyBjb21wYXRpYmlsaXR5KS4KKiBbIzE1NF0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMTU0KSBnZXRTZWxmSG9zdCBubyBsb25nZXIgcmV0dXJucyBhIHBvcnQgbnVtYmVyCiogWyMxNTZdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzE1NikgVXNlIGNvcnJlY3QgaG9zdCBvbiByZXNwb25zZSBkZXN0aW5hdGlvbiBmYWxsYmFjayBjaGVjawoqIFsjMTU4XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xNTgpIE5FVyBDb250cm9sIHVzYWdlIG9mIFgtRm9yd2FyZGVkLSogaGVhZGVycwoqIEZpeCBpc3N1ZSB3aXRoIGJ1aWxkUmVxdWVzdFNpZ25hdHVyZS4gQWRkZWQgUmVsYXlTdGF0ZSB0byB0aGUgU2lnblF1ZXJ5IG9ubHkgaWYgaXMgbm90IG51bGwuCiogQWRkIFNpZ25hdHVyZSBXcmFwcGluZyBwcmV2ZW50aW9uIFRlc3QKKiBJbXByb3ZlIF9kZWNyeXB0QXNzZXJ0aW9uIGluIG9yZGVyIHRvIHRha2UgY2FyZSBvZiBBc3NlcnRpb25zIHdpdGggcHJvYmxlbXMgd2l0aCBuYW1lc3BhY2VzCiogSW1wcm92ZSBkb2N1bWVudGF0aW9uCgp2LjIuOS4xCi4uLi4uLi4KKiBbMTM0XShodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vcGhwLXNhbWwvcHVsbC8xMzQpIFBIUDcgcHJvZHVjdGlvbiBzZXR0aW5ncyBjb21waWxlcyBvdXQgYXNzZXJ0KCksIHRocm93IGFuIGV4Y2VwdGlvbiBleHBsaWNpdGx5CiogWzEzMl0oaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL3BocC1zYW1sL3B1bGwvMTMyKSBBZGQgbm90ZSBmb3IgIndhbnRBc3NlcnRpb25zRW5jcnlwdGVkIgoqIFVwZGF0ZSBjb3B5cmlnaHQgb24gTElDRU5TRQoKdi4yLjkuMAotLS0tLS0tCiogQ2hhbmdlIHRoZSBkZWNyeXB0IGFzc2VydGlvbiBwcm9jZXNzLgoqIEFkZCAyIGV4dHJhIHZhbGlkYXRpb25zIHRvIHByZXZlbnQgU2lnbmF0dXJlIHdyYXBwaW5nIGF0dGFja3MuCiogUmVtb3ZlIHJlZmVyZW5jZSB0byB3cm9uZyBOYW1lSURGb3JtYXQ6IHVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnVuc3BlY2lmaWVkIHNob3VsZCBiZSB1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZAoqIFsxMjhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbC9wdWxsLzEyOCkgVGVzdCBwaHA3IGFuZCB1cGdyYWRlIHBocHVuaXQKKiBVcGRhdGUgUmVhZG1lIHdpdGggbW9yZSBkZXNjcmlwdGl2ZSByZXF1ZXN0ZWRBdXRobkNvbnRleHQgZGVzY3JpcHRpb24gYW5kIFNlY3VyaXR5IEd1aWRlbGluZXMKCnYuMi44LjAKLS0tLS0tLQoqIE1ha2UgTmFtZUlEUG9saWN5IG9mIEF1dGhOUmVxdWVzdCBvcHRpb25hbAoqIE1ha2UgbmFtZUlEIHJlcXVpcmVtZW50IG9uIFNBTUxSZXNwb25zZSBvcHRpb25hbAoqIEZpeCBlbXB0eSBVUkkgc3VwcG9ydAoqIFN5bW1ldHJpYyBlbmNyeXB0aW9uIGtleSBzdXBwb3J0CiogQWRkIG1vcmUgQXV0aCBDb250ZXh0IG9wdGlvbnMgdG8gdGhlIGNvbnN0YW50IGNsYXNzCiogRml4IERTQV9TSEExIGNvbnN0YW50IG9uIHhtbHNlY2xpYnMKKiBTZXQgbm9uZSByZXF1ZXN0ZWRBdXRobkNvbnRleHQgYXMgZGVmYXVsdCBiZWhhdmlvdXIKKiBVcGRhdGUgeG1sc2VjbGlicyBsaWIKKiBJbXByb3ZlIGZvcm1hdFByaXZhdGVLZXkgbWV0aG9kCiogRml4IGJ1ZyB3aGVuIHNpZ25pbmcgbWV0YWRhdGEsIHRoZSBTaWduYXR1cmVNZXRob2Qgd2FzIG5vdCBwcm92aWRlZAoqIEZpeCBnZXR0ZXIgZm9yIGxhc3RSZXF1ZXN0SUQgcGFyYW1ldGVyIGluIE9uZUxvZ2luX1NhbWwyX0F1dGggY2xhc3MKKiBBZGQgJHdhbnRFbmNyeXB0ZWQgcGFyYW1ldGVyIG9uIGFkZFg1MDlLZXlEZXNjcmlwdG9ycyBtZXRob2QgdGhhdCB3aWxsIGFsbG93IHRvIHNldCBLZXlEZXNjcmlwdG9yW3VzZT0nZW5jcnlwdGlvbiddIGlmIHdhbnROYW1lSWRFbmNyeXB0ZWQgb3Igd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQgZW5hYmxlZAoqIEFkZCAkc3RheSBwYXJhbWV0ZXIgb24gcmVkaXJlY3RUbyBtZXRob2QuIChsb2dpbi9sb2dvdXQgc3VwcG9ydHMgJHN0YXkgYnV0IEkgZm9yZ290IGFkZCB0aGlzIG9uIHByZXZpb3VzIDIuNy4wIHZlcnNpb24pCiogSW1wcm92ZSBjb2RlIHN0eWxlCgp2LjIuNy4wCi0tLS0tLS0KKiBUcmltIGFjcywgc2xvIGFuZCBpc3N1ZXIgdXJscy4KKiBGaXggUEhQIDcgZXJyb3IgKHVzZWQgY29udGludWUgb3V0c2lkZSBhIGxvb3Avc3dpdGNoKS4KKiBGaXggYnVnIG9uIG9yZ2FuaXphdGlvbiBlbGVtZW50IG9mIHRoZSBTUCBtZXRhZGF0YSBidWlsZGVyLgoqIEZpeCB0eXBvcyBvbiBkb2N1bWVudGF0aW9uLiBGaXggQUxPV0VEIE1pc3NwZWxsLgoqIEJlIGFibGUgdG8gZXh0cmFjdCBSZXF1ZXN0SUQuIEFkZCBSZXF1ZXN0SUQgdmFsaWRhdGlvbiBvbiBkZW1vMS4KKiBBZGQgJHN0YXkgcGFyYW1ldGVyIHRvIGxvZ2luLCBsb2dvdXQgYW5kIHByb2Nlc3NTTE8gbWV0aG9kLgoKdi4yLjYuMQotLS0tLS0tCiogRml4IGJ1ZyBvbiBjYWNoZUR1cmF0aW9uIG9mIHRoZSBNZXRhZGF0YSBYTUwgZ2VuZXJhdGVkLgoqIE1ha2UgU1BOYW1lUXVhbGlmaWVyIG9wdGlvbmFsIG9uIHRoZSBnZW5lcmF0ZU5hbWVJZCBtZXRob2QuIEF2b2lkIHRoZSB1c2Ugb2YgU1BOYW1lUXVhbGlmaWVyIHdoZW4gZ2VuZXJhdGluZyB0aGUgTmFtZUlEIG9uIHRoZSBMb2dvdXRSZXF1ZXN0IGJ1aWxkZXIuCiogQWxsb3dzIHRoZSBhdXRobiBjb21wYXJpc29uIGF0dHJpYnV0ZSB0byBiZSBzZXQgdmlhIGNvbmZpZy4KKiBSZXRyaWV2ZSBTZXNzaW9uIFRpbWVvdXQgYWZ0ZXIgcHJvY2Vzc1Jlc3BvbnNlIHdpdGggZ2V0U2Vzc2lvbkV4cGlyYXRpb24oKS4KKiBJbXByb3ZlIHJlYWRtZSByZWFkYWJpbGl0eS4KKiBBbGxvdyBzaW5nbGUgbG9nIG91dCB0byB3b3JrIGZvciBhcHBsaWNhdGlvbnMgbm90IGxldmVyYWdpbmcgcGhwIHNlc3Npb25fc3RhcnQuIEFkZGVkIGEgY2FsbGJhY2sgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBzZXNzaW9uIGF0IHByb2Nlc3NTTE8uCgp2LjIuNi4wCi0tLS0tLS0KKiBTZXQgTkFNRUlEX1VOU1BFQ0lGSUVEIGFzIGRlZmF1bHQgTmFtZUlERm9ybWF0IHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggSWRQcyB0aGF0IGRvbid0IHN1cHBvcnQgTkFNRUlEX1BFUlNJU1RFTlQuCiogTm93IHRoZSBTUCBpcyBhYmxlIHRvIHNlbGVjdCB0aGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQgb24gc2lnbmF0dXJlcyAoRFNBX1NIQTEsIFJTQV9TSEExLCBSU0FfU0hBMjU2LCBSU0FfU0hBMzg0LCBSU0FfU0hBNTEyKS4KKiBDaGFuZ2UgdmlzaWJpbGl0eSBvZiBfZGVjcnlwdEFzc2VydGlvbiB0byBwcm90ZWN0ZWQuCiogVXBkYXRlIHhtbHNlY2xpYnMgbGlicmFyeS4KKiBIYW5kbGUgdmFsaWQgYnV0IHVuY29tbW9uIGRzaWcgYmxvY2sgd2l0aCBubyBVUkkgaW4gdGhlIHJlZmVyZW5jZS4KKiBsb2dpbiwgbG9nb3V0IGFuZCBwcm9jZXNzU0xPIG5vdyByZXR1cm4gLT5yZWRpcmVjdFRvIGluc3RlYWQgb2YganVzdCBjYWxsIGl0LgoqIFNwbGl0IHRoZSBzZXR0aW5nIGNoZWNrIG1ldGhvZHMuIE5vdyAxIG1ldGhvZCBmb3IgSWRQIHNldHRpbmdzIGFuZCBvdGhlciBmb3IgU1Agc2V0dGluZ3MuCiogTGV0IHRoZSBzZXR0aW5nIG9iamVjdCB0byBhdm9pZCB0aGUgSWRQIHNldHRpbmcgY2hlY2suIHJlcXVpcmVkIGlmIHdlIHdhbnQgdG8gcHVibGlzaCBTUCBTQU1MIE1ldGFkYXRhIHdoZW4gdGhlIElkUCBkYXRhIGlzIHN0aWxsIG5vdCBwcm92aWRlZC4KCnYuMi41LjAKLS0tLS0tLQoqIERvIGFjY2Vzc2libGUgdGhlIElEIG9mIHRoZSBvYmplY3QgTG9nb3V0IFJlcXVlc3QgKGlkIGF0dHJpYnV0ZSkuCiogQWRkIG5vdGUgYWJvdXQgdGhlIGZhY3QgdGhhdCBQSFAgNS4zIGlzIHVuc3VwcG9ydGVkLgoqIEFkZCBmaW5nZXJwcmludCBhbGdvcml0aG0gc3VwcG9ydC4KKiBBZGQgZGVwZW5kZW5jZXMgdG8gY29tcG9zZXIuCgp2LjIuNC4wCi0tLS0tLS0KKiBGaXggd3JvbmcgZWxlbWVudCBvcmRlciBpbiBnZW5lcmF0ZWQgbWV0YWRhdGEuCiogQWRkZWQgU0xPIHdpdGggbmFtZUlEIGFuZCBTZXNzaW9uSW5kZXggaW4gZGVtbzEuCiogSW1wcm92ZSBpc0hUVFBTIG1ldGhvZCBpbiBvcmRlciB0byBzdXBwb3J0IEhUVFBfWF9GT1JXQVJERURfUE9SVC4KKiBTZXQgb3B0aW9uYWwgdGhlIFhNTHZhbGlkYXRpb24gKGVuYWJsZS9kaXNhYmxlIGl0IHdpdGggd2FudFhNTFZhbGlkYXRpb24gc2VjdXJpdHkgc2V0dGluZykuCgp2LjIuMy4wCi0tLS0tLS0KKiBSZXNvbHZlIG5hbWVzcGFjZSBwcm9ibGVtLiBTb21lIElkUHMgdXNlcyBzYW1sMnA6UmVzcG9uc2UgYW5kIHNhbWwyOkFzc2VydGlvbiBpbnN0ZWFkIG9mIHNhbWxwOlJlc3BvbnNlIHNhbWw6QXNzZXJ0aW9uLgoqIEltcHJvdmUgdGVzdCBhbmQgZG9jdW1lbnRhdGlvbi4KKiBJbXByb3ZlIEFERlMgY29tcGF0aWJpbGl0eS4KKiBSZW1vdmUgdW5uZWNlc3NhcnkgWFNEcyBmaWxlcy4KKiBNYWtlIGF2YWlsYWJsZSB0aGUgcmVhc29uIGZvciB0aGUgc2FtbCBtZXNzYWdlIGludmFsaWRhdGlvbi4KKiBBZGRpbmcgYWJpbGl0eSB0byBzZXQgaWRwIGNlcnQgb25jZSB0aGUgU2V0dGluZyBvYmplY3QgaW5pdGlhbGl6ZWQuCiogRml4IHN0YXR1cyBpbmZvIGlzc3VlLgoqIFJlamVjdCBTQU1MIFJlc3BvbnNlIGlmIG5vdCBzaWduZWQgYW5kIHN0cmljdCA9IGZhbHNlLgoqIFN1cHBvcnQgTmFtZUlkIGFuZCBTZXNzaW9uSW5kZXggaW4gTG9nb3V0UmVxdWVzdC4KKiBBZGQgRm9yY2VBdWggYW5kIElzUGFzc2l2ZSBzdXBwb3J0LgoKdi4yLjIuMAotLS0tLS0tCiogRml4IGJ1ZyB3aXRoIEVuY3J5cHRlZCBuYW1lSUQgb24gTG9nb3V0UmVxdWVzdC4KKiBGaXhlZCB1c2FiaWxpdHkgYnVnLiBTUCB3aWxsIGluZm9ybSBhYm91dCBBdXRoRmFpbCBzdGF0dXMgYWZ0ZXIgcHJvY2VzcyBhIFJlc3BvbnNlLgoqIEFkZGVkIFNlc3Npb25JbmRleCBzdXBwb3J0IG9uIExvZ291dFJlcXVlc3QsIGFuZCBrbm93IGlzIGFjY2Vzc2libGUgZnJvbSB0aGUgQXV0aCBjbGFzcy4KKiBMb2dvdXRSZXF1ZXN0IGFuZCBMb2dvdXRSZXNwb25zZSBjbGFzc2VzIG5vdyBhY2NlcHQgbm9uIGRlZmxhdGVkIHhtbC4KKiBJbXByb3ZlZCB0aGUgWE1MIG1ldGFkYXRhLyBEZWNyeXB0ZWQgQXNzZXJ0aW9uIG91dHB1dC4gKHByZXR0eXByaW50KS4KKiBGaXggYnVnIGluIGZvcm1hdFByaXZhdGVLZXkgbWV0aG9kLCB0aGUga2V5IGNvdWxkIGJlIG5vdCBSU0EuCiogRXhwbGljaXQgd2FybmluZyBtZXNzYWdlIGZvciBzaWduZWQgZWxlbWVudCBwcm9ibGVtLgoqIERlY3J5cHQgbWV0aG9kIGltcHJvdmVkLgoqIFN1cHBvcnQgbW9yZSBhbGdvcml0aG0gYXQgdGhlIFNpZ0FsZyBpbiB0aGUgU2lnbmVkIExvZ291dFJlcXVlc3RzIGFuZCBMb2dvdXRSZXNwb25zZXMKKiBBdXRoTlJlcXVlc3Qgbm93IHN0b3JlcyBJRCAoaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlcikuCiogRml4ZWQgYSB0eXBvIG9uIHRoZSAnTmFtZUlkUG9saWN5JyBhdHRyaWJ1dGUgdGhhdCBhcHBlYXJlZCBhdCB0aGUgUkVBRE1FIGFuZCBzZXR0aW5nc19leGFtcGxlIGZpbGUuCgoKdi4yLjEuMAotLS0tLS0tCgoqIFRoZSBpc1ZhbGlkIG1ldGhvZCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QgaXMgbm93IG5vbi1zdGF0aWMuIChhZmZlY3RzIHByb2Nlc3NTTE8gbWV0aG9kIG9mIEF1dGgucGhwKS4KKiBMb2dvdXQgUmVxdWVzdCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBlbmNvZGVkIGxvZ291dCByZXF1ZXN0cy4KKiBOb3cgYWZ0ZXIgdmFsaWRhdGUgYSBtZXNzYWdlLCBpZiBmYWlscyBhIG1ldGhvZCBnZXRFcnJvciBvZiB0aGUgb2JqZWN0IHdpbGwgcmV0dXJuIHRoZSBjYXVzZS4KKiBGaXggdHlwb3MuCiogQWRkZWQgZXh0cmEgcGFyYW1ldGVycyBvcHRpb24gdG8gbG9naW4gYW5kIGxvZ291dCBtZXRob2RzLgoqIEltcHJvdmUgVGVzdCAobmV3IHRlc3QsIHVzZSB0aGUgbmV3IGdldEVycm9yIG1ldGhvZCBmb3IgdGVzdGluZykuCiogQnVnZml4IG5hbWVzcGFjZSBwcm9ibGVtIHdoZW4gZ2V0dGluZyBBdHRyaWJ1dGVzLgoKCnYuMi4wLjAKLS0tLS0tLQoKKiBOZXcgUEhQIFNBTUwgVG9vbGtpdCAoU0xPLCBTaWduLCBFbmNyeXB0YXRpb24pLgoKCnYuMS4wLjAKLS0tLS0tLQoKKiBPbGQgUEhQIFNBTUwgVG9vbGtpdC4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAib25lbG9naW4vcGhwLXNhbWwiLAogICAgImRlc2NyaXB0aW9uIjogIlBIUCBTQU1MIFRvb2xraXQiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbCIsCiAgICAia2V5d29yZHMiOiBbInNhbWwiLCAic2FtbDIiLCAic3NvIiwgImZlZGVyYXRpb24iLCAiaWRlbnRpdHkiXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJPbmVMb2dpblxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJzdXBwb3J0IjogewogICAgICAgICJlbWFpbCI6ICJzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbSIsCiAgICAgICAgImlzc3VlcyI6ICJodHRwczovL2dpdGh1Yi5jb20vb25lbG9naW4vU0FNTC1Ub29sa2l0cy9pc3N1ZXMiLAogICAgICAgICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL29uZWxvZ2luL1NBTUwtVG9vbGtpdHMvIgogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjMiLAogICAgICAgICJyb2JyaWNoYXJkcy94bWxzZWNsaWJzIjogIl4zLjEuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICJzZWJhc3RpYW4vcGhwY3BkIjogIl40LjAgfHwgXjUuMCB8fCBeNi4wICIsCiAgICAgICAgInBocGxvYy9waHBsb2MiOiAiXjQuMCB8fCBeNS4wIHx8IF42LjAgfHwgXjcuMCIsCiAgICAgICAgInBkZXBlbmQvcGRlcGVuZCI6ICJeMi44LjAiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUuOCIKICAgIH0sCiAgICAiY29uZmlnIjogewogICAgICAgICJwbGF0Zm9ybSI6IHsKICAgICAgICAgICAgInBocCI6ICI3LjMuMCIKICAgICAgICB9LAogICAgICAgICJvcHRpbWl6ZS1hdXRvbG9hZGVyIjogdHJ1ZSwKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAic3VnZ2VzdCI6IHsKICAgICAgICAiZXh0LW9wZW5zc2wiOiAiSW5zdGFsbCBvcGVuc3NsIGxpYiBpbiBvcmRlciB0byBoYW5kbGUgd2l0aCB4NTA5IGNlcnRzIChyZXF1aXJlIHRvIHN1cHBvcnQgc2lnbiBhbmQgZW5jcnlwdGlvbikiLAogICAgICAgICJleHQtY3VybCI6ICJJbnN0YWxsIGN1cmwgbGliIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBJZFBNZXRhZGF0YVBhcnNlciBmb3IgcGFyc2luZyByZW1vdGUgWE1McyIsCiAgICAgICAgImV4dC1kb20iOiAiSW5zdGFsbCB4bWwgbGliIiwKICAgICAgICAiZXh0LXpsaWIiOiAiSW5zdGFsbCB6bGliIgogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEwLTIwMjIgT25lTG9naW4sIEluYy4KQ29weXJpZ2h0IChjKSAyMDIzIElBTSBEaWdpdGFsIFNlcnZpY2VzLCBTTC4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCm9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCmZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCmNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQpTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwpjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECk5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLApXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgpPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/phpunit.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxwaHB1bml0IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIGJvb3RzdHJhcD0idGVzdHMvYm9vdHN0cmFwLnBocCIgY29sb3JzPSJ0cnVlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cHM6Ly9zY2hlbWEucGhwdW5pdC5kZS85LjMvcGhwdW5pdC54c2QiIHZlcmJvc2U9InRydWUiPgogIDxjb3ZlcmFnZSBwcm9jZXNzVW5jb3ZlcmVkRmlsZXM9InRydWUiPgogICAgPGluY2x1ZGU+CiAgICAgIDxkaXJlY3Rvcnk+Li9zcmM8L2RpcmVjdG9yeT4KICAgIDwvaW5jbHVkZT4KICAgIDxyZXBvcnQ+CiAgICAgIDxjbG92ZXIgb3V0cHV0RmlsZT0idGVzdHMvYnVpbGQvbG9ncy9jbG92ZXIueG1sIi8+CiAgICAgIDxodG1sIG91dHB1dERpcmVjdG9yeT0idGVzdHMvYnVpbGQvY292ZXJhZ2UiIGxvd1VwcGVyQm91bmQ9IjM1IiBoaWdoTG93ZXJCb3VuZD0iNzAiLz4KICAgICAgPHBocCBvdXRwdXRGaWxlPSJ0ZXN0cy9idWlsZC9sb2dzL2NvdmVyYWdlLmNvdiIvPgogICAgICA8eG1sIG91dHB1dERpcmVjdG9yeT0idGVzdHMvYnVpbGQvbG9nZmlsZS54bWwiLz4KICAgIDwvcmVwb3J0PgogIDwvY292ZXJhZ2U+CiAgPHRlc3RzdWl0ZXM+CiAgICA8dGVzdHN1aXRlIG5hbWU9IlBIUC1TQU1MIFRlc3QgU3VpdGUiPgogICAgICA8ZGlyZWN0b3J5Pi4vdGVzdHMvc3JjPC9kaXJlY3Rvcnk+CiAgICA8L3Rlc3RzdWl0ZT4KICA8L3Rlc3RzdWl0ZXM+CiAgPGxvZ2dpbmcvPgo8L3BocHVuaXQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBTQU1MIFBIUCBUb29sa2l0IENvbXBhdGlibGUgd2l0aCBQSFAgNy4zLDcuNCAmIDguWAoKWyFbcGhwLXNhbWwgNC54LWRldiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9hY3Rpb25zL3dvcmtmbG93cy9waHAtcGFja2FnZS55bWwvYmFkZ2Uuc3ZnP2JyYW5jaD00LngtZGV2KV0oaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwvYWN0aW9ucy93b3JrZmxvd3MvcGhwLXBhY2thZ2UueW1sKSBbIVtDb3ZlcmFnZSBTdGF0dXNdKGh0dHBzOi8vY292ZXJhbGxzLmlvL3JlcG9zL2dpdGh1Yi9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2JhZGdlLnN2Zz9icmFuY2g9NC54LWRldildKGh0dHBzOi8vY292ZXJhbGxzLmlvL2dpdGh1Yi9TQU1MLVRvb2xraXRzL3BocC1zYW1sP2JyYW5jaD00LngtZGV2KSAhW1BhY2thZ2lzdCBEZXBlbmRlbmN5IFZlcnNpb24gKHNwZWNpZnkgdmVyc2lvbildKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2RlcGVuZGVuY3ktdi9vbmVsb2dpbi9waHAtc2FtbC9waHA/dmVyc2lvbj00LjAuMCkgWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9vbmVsb2dpbi9waHAtc2FtbC9saWNlbnNlLnBuZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9vbmVsb2dpbi9waHAtc2FtbCkgIVtQYWNrYWdpc3QgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kbS9vbmVsb2dpbi9waHAtc2FtbCkgIVtQYWNrYWdpc3QgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9vbmVsb2dpbi9waHAtc2FtbD9sYWJlbD1Ub3RhbCUyMGRvd25sb2FkcykKCkFkZCBTQU1MIHN1cHBvcnQgdG8geW91ciBQSFAgc29mdHdhcmUgdXNpbmcgdGhpcyBsaWJyYXJ5LgoKCldhcm5pbmcKLS0tLS0tLQoKVmVyc2lvbiA0LjMuMiB1cGRhdGVzIHhtbHNlY2xpYnMgdG8gMy4xLjUgZHVlIFtDVkUtMjAyNi0zMjMxM10oaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLTR2MjYtdjZjZy1nNmY5KQoKVmVyc2lvbiA0LjMuMSB1cGRhdGVzIHhtbHNlY2xpYnMgdG8gMy4xLjQgZHVlIFtDVkUtMjAyNS02NjQ3NV0oaHR0cHM6Ly9naXRodWIuY29tL2Fkdmlzb3JpZXMvR0hTQS1jNGNjLXg5Mjgtdmp3OSkKClRoaXMgdmVyc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggUEhQID49Ny4zIGFuZCA4LlggYW5kIGRvZXMgbm90IGluY2x1ZGUgeG1sc2VjbGlicyAoeW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIGl0IHZpYSBjb21wb3NlciwgZGVwZW5kZW5jeSBkZXNjcmliZWQgaW4gY29tcG9zZXIuanNvbikKClNlY3VyaXR5IEd1aWRlbGluZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQoKSWYgeW91IGJlbGlldmUgeW91IGhhdmUgZGlzY292ZXJlZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gdGhpcyB0b29sa2l0LCBwbGVhc2UgcmVwb3J0IGl0IGJ5IG1haWwgdG8gdGhlIG1haW50YWluZXI6IHNpeHRvLm1hcnRpbi5nYXJjaWErc2VjdXJpdHlAZ21haWwuY29tCgoKV2h5IGFkZCBTQU1MIHN1cHBvcnQgdG8gbXkgc29mdHdhcmU/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU0FNTCBpcyBhbiBYTUwtYmFzZWQgc3RhbmRhcmQgZm9yIHdlYiBicm93c2VyIHNpbmdsZSBzaWduLW9uIGFuZCBpcyBkZWZpbmVkIGJ5CnRoZSBPQVNJUyBTZWN1cml0eSBTZXJ2aWNlcyBUZWNobmljYWwgQ29tbWl0dGVlLiBUaGUgc3RhbmRhcmQgaGFzIGJlZW4gYXJvdW5kCnNpbmNlIDIwMDIsIGJ1dCBsYXRlbHkgaXQgaXMgYmVjb21pbmcgcG9wdWxhciBkdWUgaXRzIGFkdmFudGFnZXM6CgogKiAqKlVzYWJpbGl0eSoqIC0gT25lLWNsaWNrIGFjY2VzcyBmcm9tIHBvcnRhbHMgb3IgaW50cmFuZXRzLCBkZWVwIGxpbmtpbmcsCiAgIHBhc3N3b3JkIGVsaW1pbmF0aW9uIGFuZCBhdXRvbWF0aWNhbGx5IHJlbmV3aW5nIHNlc3Npb25zIG1ha2UgbGlmZQogICBlYXNpZXIgZm9yIHRoZSB1c2VyLgogKiAqKlNlY3VyaXR5KiogLSBCYXNlZCBvbiBzdHJvbmcgZGlnaXRhbCBzaWduYXR1cmVzIGZvciBhdXRoZW50aWNhdGlvbiBhbmQKICAgaW50ZWdyaXR5LCBTQU1MIGlzIGEgc2VjdXJlIHNpbmdsZSBzaWduLW9uIHByb3RvY29sIHRoYXQgdGhlIGxhcmdlc3QKICAgYW5kIG1vc3Qgc2VjdXJpdHkgY29uc2Npb3VzIGVudGVycHJpc2VzIGluIHRoZSB3b3JsZCByZWx5IG9uLgogKiAqKlNwZWVkKiogLSBTQU1MIGlzIGZhc3QuIE9uZSBicm93c2VyIHJlZGlyZWN0IGlzIGFsbCBpdCB0YWtlcyB0byBzZWN1cmVseQogICBzaWduIGEgdXNlciBpbnRvIGFuIGFwcGxpY2F0aW9uLgogKiAqKlBoaXNoaW5nIFByZXZlbnRpb24qKiAtIElmIHlvdSBkb27igJl0IGhhdmUgYSBwYXNzd29yZCBmb3IgYW4gYXBwLCB5b3UKICAgY2Fu4oCZdCBiZSB0cmlja2VkIGludG8gZW50ZXJpbmcgaXQgb24gYSBmYWtlIGxvZ2luIHBhZ2UuCiAqICoqSVQgRnJpZW5kbHkqKiAtIFNBTUwgc2ltcGxpZmllcyBsaWZlIGZvciBJVCBiZWNhdXNlIGl0IGNlbnRyYWxpemVzCiAgIGF1dGhlbnRpY2F0aW9uLCBwcm92aWRlcyBncmVhdGVyIHZpc2liaWxpdHkgYW5kIG1ha2VzIGRpcmVjdG9yeQogICBpbnRlZ3JhdGlvbiBlYXNpZXIuCiAqICoqT3Bwb3J0dW5pdHkqKiAtIEIyQiBjbG91ZCB2ZW5kb3Igc2hvdWxkIHN1cHBvcnQgU0FNTCB0byBmYWNpbGl0YXRlIHRoZQogICBpbnRlZ3JhdGlvbiBvZiB0aGVpciBwcm9kdWN0LgoKCkdlbmVyYWwgZGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLQoKU0FNTCBQSFAgdG9vbGtpdCBsZXQgeW91IGJ1aWxkIGEgU1AgKFNlcnZpY2UgUHJvdmlkZXIpIG92ZXIKeW91ciBQSFAgYXBwbGljYXRpb24gYW5kIGNvbm5lY3QgaXQgdG8gYW55IElkUCAoSWRlbnRpdHkgUHJvdmlkZXIpLgoKU3VwcG9ydHM6CgogKiBTU08gYW5kIFNMTyAoU1AtSW5pdGlhdGVkIGFuZCBJZFAtSW5pdGlhdGVkKS4KICogQXNzZXJ0aW9uIGFuZCBuYW1lSWQgZW5jcnlwdGlvbi4KICogQXNzZXJ0aW9uIHNpZ25hdHVyZS4KICogTWVzc2FnZSBzaWduYXR1cmU6IEF1dGhOUmVxdWVzdCwgTG9nb3V0UmVxdWVzdCwgTG9nb3V0UmVzcG9uc2VzLgogKiBFbmFibGUgYW4gQXNzZXJ0aW9uIENvbnN1bWVyIFNlcnZpY2UgZW5kcG9pbnQuCiAqIEVuYWJsZSBhIFNpbmdsZSBMb2dvdXQgU2VydmljZSBlbmRwb2ludC4KICogUHVibGlzaCB0aGUgU1AgbWV0YWRhdGEgKHdoaWNoIGNhbiBiZSBzaWduZWQpLgoKS2V5IGZlYXR1cmVzOgoKICogKipzYW1sMmludCoqIC0gSW1wbGVtZW50cyB0aGUgU0FNTCAyLjAgV2ViIEJyb3dzZXIgU1NPIFByb2ZpbGUuCiAqICoqU2Vzc2lvbi1sZXNzKiogLSBGb3JnZXQgdGhvc2UgY29tbW9uIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBTUCBhbmQKICAgdGhlIGZpbmFsIGFwcCwgdGhlIHRvb2xraXQgZGVsZWdhdGUgc2Vzc2lvbiBpbiB0aGUgZmluYWwgYXBwLgogKiAqKkVhc3kgdG8gdXNlKiogLSBQcm9ncmFtbWVyIHdpbGwgYmUgYWxsb3dlZCB0byBjb2RlIGhpZ2gtbGV2ZWwgYW5kCiAgIGxvdy1sZXZlbCBwcm9ncmFtbWluZywgMiBlYXN5IHRvIHVzZSBBUElzIGFyZSBhdmFpbGFibGUuCiAqICoqVGVzdGVkKiogLSBUaG9yb3VnaGx5IHRlc3RlZC4KICogKipQb3B1bGFyKiogLSBEZXZlbG9wZXJzIHVzZSBpdC4gTWFueSBQSFAgU0FNTCBwbHVnaW5zIHVzZXMgaXQuCgpJbnRlZ3JhdGUgeW91ciBQSFAgdG9vbGtpdCBhdCBPbmVMb2dpbiB1c2luZyB0aGlzIGd1aWRlOiBbaHR0cHM6Ly9kZXZlbG9wZXJzLm9uZWxvZ2luLmNvbS9wYWdlL3NhbWwtdG9vbGtpdC1mb3ItcGhwXShodHRwczovL2RldmVsb3BlcnMub25lbG9naW4uY29tL3BhZ2Uvc2FtbC10b29sa2l0LWZvci1waHApCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgojIyMgRGVwZW5kZW5jaWVzICMjIwoKICogYHBocCA+PSA1LjRgIGFuZCBzb21lIGNvcmUgZXh0ZW5zaW9ucyBsaWtlIGBwaHAteG1sYCwgYHBocC1kYXRlYCwgYHBocC16bGliYC4KICogYG9wZW5zc2xgLiBJbnN0YWxsIHRoZSBvcGVuc3NsIGxpYnJhcnkuIEl0IGhhbmRsZXMgeDUwOSBjZXJ0aWZpY2F0ZXMuCiAqIGBnZXR0ZXh0YC4gSW5zdGFsbCB0aGF0IGxpYnJhcnkgYW5kIGl0cyBwaHAgZHJpdmVyLiBJdCBoYW5kbGVzIHRyYW5zbGF0aW9ucy4KICogYGN1cmxgLiBJbnN0YWxsIHRoYXQgbGlicmFyeSBhbmQgaXRzIHBocCBkcml2ZXIgaWYgeW91IHBsYW4gdG8gdXNlIHRoZSBJZFAgTWV0YWRhdGEgcGFyc2VyLgoKIyMjIENvZGUgIyMjCgojIyMjIE9wdGlvbiAxLiBjbG9uZSB0aGUgcmVwb3NpdG9yeSBmcm9tICBnaXRodWIgIyMjIwoKZ2l0IGNsb25lIGdpdEBnaXRodWIuY29tOlNBTUwtVG9vbGtpdHMvcGhwLXNhbWwuZ2l0CgpUaGVuIHB1bGwgdGhlIDQuWC5YIGJyYW5jaC90YWcKCiMjIyMgT3B0aW9uIDIuIERvd25sb2FkIGZyb20gZ2l0aHViICMjIyMKClRoZSB0b29sa2l0IGlzIGhvc3RlZCBvbiBnaXRodWIuIFlvdSBjYW4gZG93bmxvYWQgaXQgZnJvbToKCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL3JlbGVhc2VzCgpTZWFyY2ggZm9yIDQuWC5YIHJlbGVhc2VzCgpDb3B5IHRoZSBjb3JlIG9mIHRoZSBsaWJyYXJ5IGluc2lkZSB0aGUgcGhwIGFwcGxpY2F0aW9uLiAoZWFjaCBhcHBsaWNhdGlvbiBoYXMgaXRzCnN0cnVjdHVyZSBzbyB0YWtlIHlvdXIgdGltZSB0byBsb2NhdGUgdGhlIFBIUCBTQU1MIHRvb2xraXQgaW4gdGhlIGJlc3QgcGxhY2UpLgpTZWUgdGhlICJHdWlkZSB0byBhZGQgU0FNTCBzdXBwb3J0IHRvIG15IGFwcCIgdG8ga25vdyBob3cuCgpUYWtlIGluIG1pbmQgdGhhdCB0aGUgY29tcHJlc3NlZCBmaWxlIG9ubHkgY29udGFpbnMgdGhlIG1haW4gZmlsZXMuCklmIHlvdSBwbGFuIHRvIHBsYXkgd2l0aCB0aGUgZGVtb3MsIHVzZSB0aGUgT3B0aW9uIDEuCgojIyMjIE9wdGlvbiAzLiBDb21wb3NlciAjIyMjCgpUaGUgdG9vbGtpdCBzdXBwb3J0cyBbY29tcG9zZXJdKGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnLykuIFlvdSBjYW4gZmluZCB0aGUgYG9uZWxvZ2luL3BocC1zYW1sYCBwYWNrYWdlIGF0IGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9vbmVsb2dpbi9waHAtc2FtbAoKSW4gb3JkZXIgdG8gaW1wb3J0IHRoZSBzYW1sIHRvb2xraXQgdG8geW91ciBjdXJyZW50IHBocCBwcm9qZWN0LCBleGVjdXRlCmBgYApjb21wb3NlciByZXF1aXJlIG9uZWxvZ2luL3BocC1zYW1sCmBgYAoKUmVtZW1iZXIgdG8gc2VsZWN0IHRoZSAzLlguWCBicmFuY2gKCkFmdGVyIGluc3RhbGxhdGlvbiBoYXMgY29tcGxldGVkIHlvdSB3aWxsIGZpbmQgYXQgdGhlIGB2ZW5kb3IvYCBmb2xkZXIgYSBuZXcgZm9sZGVyIG5hbWVkIGBvbmVsb2dpbmAgYW5kIGluc2lkZSB0aGUgYHBocC1zYW1sYC4gTWFrZSBzdXJlIHlvdSBhcmUgaW5jbHVkaW5nIHRoZSBhdXRvbG9hZGVyIHByb3ZpZGVkIGJ5IGNvbXBvc2VyLiBJdCBjYW4gYmUgZm91bmQgYXQgYHZlbmRvci9hdXRvbG9hZC5waHBgLgoKKipJbXBvcnRhbnQqKiBJbiB0aGlzIG9wdGlvbiwgdGhlIHg1MDkgY2VydHMgbXVzdCBiZSBzdG9yZWQgYXQgYHZlbmRvci9vbmVsb2dpbi9waHAtc2FtbC9jZXJ0c2AKYW5kIHNldHRpbmdzIGZpbGUgc3RvcmVkIGF0IGB2ZW5kb3Ivb25lbG9naW4vcGhwLXNhbWxgLgoKWW91ciBzZXR0aW5ncyBhcmUgYXQgcmlzayBvZiBiZWluZyBkZWxldGVkIHdoZW4gdXBkYXRpbmcgcGFja2FnZXMgdXNpbmcgYGNvbXBvc2VyIHVwZGF0ZWAgb3Igc2ltaWxhciBjb21tYW5kcy4gU28gaXQgaXMgKipoaWdobHkqKiByZWNvbW1lbmRlZCB0aGF0IGluc3RlYWQgb2YgdXNpbmcgc2V0dGluZ3MgZmlsZXMsIHlvdSBwYXNzIHRoZSBzZXR0aW5ncyBhcyBhbiBhcnJheSBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IgKGV4cGxhaW5lZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50KS4gSWYgeW91IGRvIG5vdCB1c2UgdGhpcyBhcHByb2FjaCB5b3VyIHNldHRpbmdzIGFyZSBhdCByaXNrIG9mIGJlaW5nIGRlbGV0ZWQgd2hlbiB1cGRhdGluZyBwYWNrYWdlcyB1c2luZyBgY29tcG9zZXIgdXBkYXRlYCBvciBzaW1pbGFyIGNvbW1hbmRzLgoKQ29tcGF0aWJpbGl0eQotLS0tLS0tLS0tLS0tCgpUaGlzIDQuWC5YIHN1cHBvcnRzIFBIUCA+PTcuMyAuCgpJdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFBIUDUuNiBvciBQSFA3LjAsIFBIUDcuMSBvciBQSFA3LjIKCk5hbWVzcGFjZXMKLS0tLS0tLS0tLQoKSWYgeW91IGFyZSB1c2luZyB0aGUgbGlicmFyeSB3aXRoIGEgZnJhbWV3b3JrIGxpa2UgU3ltZm9ueSB0aGF0IGNvbnRhaW5zCm5hbWVzcGFjZXMsIHJlbWVtYmVyIHRoYXQgY2FsbHMgdG8gdGhlIGNsYXNzIG11c3QgYmUgZG9uZSBieSBhZGRpbmcgYSBiYWNrc2xhc2ggKGBcYCkgdG8gdGhlCnN0YXJ0LCBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZ2V0U2VsZlVSTE5vUXVlcnkgdXNlOgoKICAgIFxPbmVMb2dpblxTYW1sMlxVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKQoKClNlY3VyaXR5IHdhcm5pbmcKLS0tLS0tLS0tLS0tLS0tLQoKSW4gcHJvZHVjdGlvbiwgdGhlIGBzdHJpY3RgIHBhcmFtZXRlciAqKk1VU1QqKiBiZSBzZXQgYXMgYCJ0cnVlImAgYW5kIHRoZQpgc2lnbmF0dXJlQWxnb3JpdGhtYCBhbmQgYGRpZ2VzdEFsZ29yaXRobWAgdW5kZXIgYHNlY3VyaXR5YCBtdXN0IGJlIHNldCB0bwpzb21ldGhpbmcgb3RoZXIgdGhhbiBTSEExIChzZWUgaHR0cHM6Ly9zaGF0dGVyZWQuaW8vICkuIE90aGVyd2lzZSB5b3VyCmVudmlyb25tZW50IGlzIG5vdCBzZWN1cmUgYW5kIHdpbGwgYmUgZXhwb3NlZCB0byBhdHRhY2tzLgoKSW4gcHJvZHVjdGlvbiBhbHNvIHdlIGhpZ2hseSByZWNvbW1lbmRlZCB0byByZWdpc3RlciBvbiB0aGUgc2V0dGluZ3MgdGhlIElkUCBjZXJ0aWZpY2F0ZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBmaW5nZXJwcmludCBtZXRob2QuIFRoZSBmaW5nZXJwcmludCwgaXMgYSBoYXNoLCBzbyBhdCB0aGUgZW5kIGlzIG9wZW4gdG8gYSBjb2xsaXNpb24gYXR0YWNrIHRoYXQgY2FuIGVuZCBvbiBhIHNpZ25hdHVyZSB2YWxpZGF0aW9uIGJ5cGFzcy4gT3RoZXIgU0FNTCB0b29sa2l0cyBkZXByZWNhdGVkIHRoYXQgbWVjaGFuaXNtLCB3ZSBtYWludGFpbiBpdCBmb3IgY29tcGF0aWJpbGl0eSBhbmQgYWxzbyB0byBiZSB1c2VkIG9uIHRlc3QgZW52aXJvbm1lbnQuCgoKIyMjIEF2b2lkaW5nIE9wZW4gUmVkaXJlY3QgYXR0YWNrcyAjIyMKClNvbWUgaW1wbGVtZW50YXRpb25zIHVzZXMgdGhlIFJlbGF5U3RhdGUgcGFyYW1ldGVyIGFzIGEgd2F5IHRvIGNvbnRyb2wgdGhlIGZsb3cgd2hlbiBTU08gYW5kIFNMTyBzdWNjZWVkZWQuIFNvIGJhc2ljYWxseSB0aGUKdXNlciBpcyByZWRpcmVjdGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgUmVsYXlTdGF0ZS4KCklmIHlvdSBhcmUgdXNpbmcgU2lnbmF0dXJlIFZhbGlkYXRpb24gb24gdGhlIEhUVFAtUmVkaXJlY3QgYmluZGluZywgeW91IHdpbGwgaGF2ZSB0aGUgUmVsYXlTdGF0ZSB2YWx1ZSBpbnRlZ3JpdHkgY292ZXJlZCwgb3RoZXJ3aXNlLCBhbmQKb24gSFRUUC1QT1NUIGJpbmRpbmcsIHlvdSBjYW4ndCB0cnVzdCB0aGUgUmVsYXlTdGF0ZSBzbyBiZWZvcmUKZXhlY3V0aW5nIHRoZSB2YWxpZGF0aW9uLCB5b3UgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgdmFsdWUgYmVsb25nCmEgdHJ1c3RlZCBhbmQgZXhwZWN0ZWQgVVJMLgoKUmVhZCBtb3JlIGFib3V0IE9wZW4gUmVkaXJlY3QgW0NXRS02MDFdKGh0dHBzOi8vY3dlLm1pdHJlLm9yZy9kYXRhL2RlZmluaXRpb25zLzYwMS5odG1sKS4KCgojIyMgQXZvaWRpbmcgUmVwbGF5IGF0dGFja3MgIyMjCgpBIHJlcGxheSBhdHRhY2sgaXMgYmFzaWNhbGx5IHRyeSB0byByZXVzZSBhbiBpbnRlcmNlcHRlZCB2YWxpZCBTQU1MIE1lc3NhZ2UgaW4gb3JkZXIgdG8gaW1wZXJzb25hdGUgYSBTQU1MIGFjdGlvbiAoU1NPIG9yIFNMTykuCgpTQU1MIE1lc3NhZ2VzIGhhdmUgYSBsaW1pdGVkIHRpbWVsaWZlIChOb3RCZWZvcmUsIE5vdE9uT3JBZnRlcikgdGhhdAptYWtlIGhhcmRlciB0aGlzIGtpbmQgb2YgYXR0YWNrcywgYnV0IHRoZXkgYXJlIHN0aWxsIHBvc3NpYmxlLgoKSW4gb3JkZXIgdG8gYXZvaWQgdGhlbSwgdGhlIFNQIGNhbiBrZWVwIGEgbGlzdCBvZiBTQU1MIE1lc3NhZ2VzIG9yIEFzc2VydGlvbiBJRHMgYWxyZWFkeSB2YWxpZGF0ZWQgYW5kIHByb2Nlc3NlZC4gVGhvc2UgdmFsdWVzIG9ubHkgbmVlZAp0byBiZSBzdG9yZWQgdGhlIGFtb3VudCBvZiB0aW1lIG9mIHRoZSBTQU1MIE1lc3NhZ2UgbGlmZSB0aW1lLCBzbwp3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIGFsbCBwcm9jZXNzZWQgbWVzc2FnZS9hc3NlcnRpb24gSWRzLCBidXQgdGhlIG1vc3QgcmVjZW50IG9uZXMuCgpUaGUgT25lTG9naW5cU2FtbDJcQXV0aCBjbGFzcyBjb250YWlucyB0aGUgW2dldExhc3RSZXF1ZXN0SURdKGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvYjgyMTRiNzRkZDcyOTYwZmE2YWE4OGFiNDU0NjY3YzY0Y2VhOTM1Yy9zcmMvU2FtbDIvQXV0aC5waHAjTDY1NyksIFtnZXRMYXN0TWVzc2FnZUlkXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9ibG9iL2I4MjE0Yjc0ZGQ3Mjk2MGZhNmFhODhhYjQ1NDY2N2M2NGNlYTkzNWMvc3JjL1NhbWwyL0F1dGgucGhwI0w3NjIpIGFuZCBbZ2V0TGFzdEFzc2VydGlvbklkXShodHRwczovL2dpdGh1Yi5jb20vU0FNTC1Ub29sa2l0cy9waHAtc2FtbC9ibG9iL2I4MjE0Yjc0ZGQ3Mjk2MGZhNmFhODhhYjQ1NDY2N2M2NGNlYTkzNWMvc3JjL1NhbWwyL0F1dGgucGhwI0w3NzApIG1ldGhvZHMgdG8gcmV0cmlldmUgdGhlIElEcwoKQ2hlY2tpbmcgdGhhdCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS9Bc3NlcnRpb24gZG9lcyBub3QgZXhpc3RzIGluIHRoZSBsaXN0IG9mIHRoZSBvbmVzIGFscmVhZHkgcHJvY2Vzc2VkIHdpbGwgcHJldmVudCByZXBseQphdHRhY2tzLgoKCkdldHRpbmcgc3RhcnRlZAotLS0tLS0tLS0tLS0tLS0KCiMjIyBLbm93aW5nIHRoZSB0b29sa2l0ICMjIwoKVGhlIG5ldyBTQU1MIFRvb2xraXQgY29udGFpbnMgZGlmZmVyZW50IGZvbGRlcnMgKGBjZXJ0c2AsIGBlbmRwb2ludHNgLApgbGliYCwgYGRlbW9gLCBldGMuKSBhbmQgc29tZSBmaWxlcy4KCkxldCdzIHN0YXJ0IGRlc2NyaWJpbmcgdGhlIGZvbGRlcnM6CgojIyMjIGBjZXJ0cy9gICMjIyMKClNBTUwgcmVxdWlyZXMgYSB4NTA5IGNlcnQgdG8gc2lnbiBhbmQgZW5jcnlwdCBlbGVtZW50cyBsaWtlIGBOYW1lSURgLCBgTWVzc2FnZWAsCmBBc3NlcnRpb25gLCBgTWV0YWRhdGFgLgoKSWYgb3VyIGVudmlyb25tZW50IHJlcXVpcmVzIHNpZ24gb3IgZW5jcnlwdCBzdXBwb3J0LCB0aGlzIGZvbGRlciBtYXkgY29udGFpbgp0aGUgeDUwOSBjZXJ0IGFuZCB0aGUgcHJpdmF0ZSBrZXkgdGhhdCB0aGUgU1Agd2lsbCB1c2U6CgogKiBgc3AuY3J0YCAtIFRoZSBwdWJsaWMgY2VydCBvZiB0aGUgU1AKICogYHNwLmtleWAgLSBUaGUgcHJpdmF0ZSBrZXkgb2YgdGhlIFNQCgpPciBhbHNvIHdlIGNhbiBwcm92aWRlIHRob3NlIGRhdGEgaW4gdGhlIHNldHRpbmcgZmlsZSBhdCB0aGUgYCRzZXR0aW5nc1snc3AnXVsneDUwOWNlcnQnXWAKYW5kIHRoZSBgJHNldHRpbmdzWydzcCddWydwcml2YXRlS2V5J11gLgoKU29tZXRpbWVzIHdlIGNvdWxkIG5lZWQgYSBzaWduYXR1cmUgb24gdGhlIG1ldGFkYXRhIHB1Ymxpc2hlZCBieSB0aGUgU1AsIGluCnRoaXMgY2FzZSB3ZSBjb3VsZCB1c2UgdGhlIHg1MDkgY2VydCBwcmV2aW91c2x5IG1lbnRpb25lZCBvciB1c2UgYSBuZXcgeC41MDkKY2VydDogYG1ldGFkYXRhLmNydGAgYW5kIGBtZXRhZGF0YS5rZXlgLgoKVXNlIGBzcF9uZXcuY3J0YCBpZiB5b3UgYXJlIGluIGEga2V5IHJvbGxvdmVyIHByb2Nlc3MgYW5kIHlvdSB3YW50IHRvCnB1Ymxpc2ggdGhhdCB4NTA5IGNlcnRpZmljYXRlIG9uIFNlcnZpY2UgUHJvdmlkZXIgbWV0YWRhdGEuCgojIyMjIGBzcmMvYCAjIyMjCgpUaGlzIGZvbGRlciBjb250YWlucyB0aGUgaGVhcnQgb2YgdGhlIHRvb2xraXQsIHRoZSBsaWJyYXJpZXM6CgogKiBgU2FtbDJgIGZvbGRlciBjb250YWlucyB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgdGhhdAogICBhcmUgZGVzY3JpYmVkIGluIGEgbGF0ZXIgc2VjdGlvbi4KCgojIyMjIGBkb2MvYCAjIyMjCgpUaGlzIGZvbGRlciBjb250YWlucyB0aGUgQVBJIGRvY3VtZW50YXRpb24gb2YgdGhlIHRvb2xraXQuCgoKIyMjIyBgZW5kcG9pbnRzL2AgIyMjIwoKVGhlIHRvb2xraXQgaGFzIHRocmVlIGVuZHBvaW50czoKCiAqIGBtZXRhZGF0YS5waHBgIC0gV2hlcmUgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBpcyBwdWJsaXNoZWQuCiAqIGBhY3MucGhwYCAtIEFzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlLiBQcm9jZXNzZXMgdGhlIFNBTUwgUmVzcG9uc2VzLgogKiBgc2xzLnBocGAgLSBTaW5nbGUgTG9nb3V0IFNlcnZpY2UuIFByb2Nlc3NlcyBMb2dvdXQgUmVxdWVzdHMgYW5kIExvZ291dAogICBSZXNwb25zZXMuCgpZb3UgY2FuIHVzZSB0aGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHRvb2xraXQgb3IgY3JlYXRlIHlvdXIgb3duIGVuZHBvaW50cwpmaWxlcyB3aGVuIGFkZGluZyBTQU1MIHN1cHBvcnQgdG8geW91ciBhcHBsaWNhdGlvbnMuIFRha2UgaW4gbWluZCB0aGF0IHRob3NlCmVuZHBvaW50cyBmaWxlcyB1c2VzIHRoZSBzZXR0aW5nIGZpbGUgb2YgdGhlIHRvb2xraXQncyBiYXNlIGZvbGRlci4KCgojIyMjIGBsb2NhbGUvYCAjIyMjCgpMb2NhbGUgZm9sZGVyIGNvbnRhaW5zIHNvbWUgdHJhbnNsYXRpb25zOiBgZW5fVVNgIGFuZCBgZXNfRVNgIGFzIGEgcHJvb2Ygb2YgY29uY2VwdC4KQ3VycmVudGx5IHRoZXJlIGFyZSBubyB0cmFuc2xhdGlvbnMgYnV0IHdlIHdpbGwgZXZlbnR1YWxseSBsb2NhbGl6ZSB0aGUgbWVzc2FnZXMKYW5kIHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2VzLgoKCiMjIyMgT3RoZXIgaW1wb3J0YW50IGZpbGVzICMjIyMKCiogYHNldHRpbmdzX2V4YW1wbGUucGhwYCAtIEEgdGVtcGxhdGUgdG8gYmUgdXNlZCBpbiBvcmRlciB0byBjcmVhdGUgYQogIHNldHRpbmdzLnBocCBmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm8gb2YgdGhlIHRvb2xraXQuCiogYGFkdmFuY2VkX3NldHRpbmdzX2V4YW1wbGUucGhwYCAtIEEgdGVtcGxhdGUgdG8gYmUgdXNlZCBpbiBvcmRlciB0byBjcmVhdGUgYQogIGFkdmFuY2VkX3NldHRpbmdzLnBocCBmaWxlIHdoaWNoIGNvbnRhaW5zIGV4dHJhIGNvbmZpZ3VyYXRpb24gaW5mbyByZWxhdGVkIHRvCiAgdGhlIHNlY3VyaXR5LCB0aGUgY29udGFjdCBwZXJzb24sIGFuZCB0aGUgb3JnYW5pemF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIFNQLgoqIGBfdG9vbGtpdF9sb2FkZXIucGhwYCAtIFRoaXMgZmlsZSBsb2FkIHRoZSB0b29sa2l0IGxpYnJhcmllcyAoVGhlIFNBTUwyIGxpYikuCgoKIyMjIyBNaXNjZWxsYW5lb3VzICMjIyMKCiogYHRlc3RzL2AgLSBDb250YWlucyB0aGUgdW5pdCB0ZXN0IG9mIHRoZSB0b29sa2l0LgoqIGBkZW1vMS9gIC0gQ29udGFpbnMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBQSFAgYXBwIHdpdGggU0FNTCBzdXBwb3J0LgogIFJlYWQgdGhlIGBSZWFkbWUudHh0YCBpbnNpZGUgZm9yIG1vcmUgaW5mby4KKiBgZGVtbzIvYCAtIENvbnRhaW5zIGFub3RoZXIgZXhhbXBsZS4KCgojIyMgSG93IGl0IHdvcmtzICMjIwoKIyMjIyBTZXR0aW5ncyAjIyMjCgpGaXJzdCBvZiBhbGwgd2UgbmVlZCB0byBjb25maWd1cmUgdGhlIHRvb2xraXQuIFRoZSBTUCdzIGluZm8sIHRoZSBJZFAncyBpbmZvLAphbmQgaW4gc29tZSBjYXNlcywgY29uZmlndXJlIGFkdmFuY2VkIHNlY3VyaXR5IGlzc3VlcyBsaWtlIHNpZ25hdHVyZXMgYW5kCmVuY3J5cHRpb24uCgpUaGVyZSBhcmUgdHdvIHdheXMgdG8gcHJvdmlkZSB0aGUgc2V0dGluZ3MgaW5mb3JtYXRpb246CgogKiBVc2UgYSBgc2V0dGluZ3MucGhwYCBmaWxlIHRoYXQgd2Ugc2hvdWxkIGxvY2F0ZSBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlCiAgIHRvb2xraXQuCiAqIFVzZSBhbiBhcnJheSB3aXRoIHRoZSBzZXR0aW5nIGRhdGEgYW5kIHByb3ZpZGUgaXQgZGlyZWN0bHkgdG8gdGhlCiAgIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcy4KCgpUaGVyZSBpcyBhIHRlbXBsYXRlIGZpbGUsIGBzZXR0aW5nc19leGFtcGxlLnBocGAsIHNvIHlvdSBjYW4gbWFrZSBhIGNvcHkgb2YgdGhpcwpmaWxlLCByZW5hbWUgYW5kIGVkaXQgaXQuCgpgYGBwaHAKPD9waHAKCiRzZXR0aW5ncyA9IGFycmF5KAogICAgLy8gSWYgJ3N0cmljdCcgaXMgVHJ1ZSwgdGhlbiB0aGUgUEhQIFRvb2xraXQgd2lsbCByZWplY3QgdW5zaWduZWQKICAgIC8vIG9yIHVuZW5jcnlwdGVkIG1lc3NhZ2VzIGlmIGl0IGV4cGVjdHMgdGhlbSB0byBiZSBzaWduZWQgb3IgZW5jcnlwdGVkLgogICAgLy8gQWxzbyBpdCB3aWxsIHJlamVjdCB0aGUgbWVzc2FnZXMgaWYgdGhlIFNBTUwgc3RhbmRhcmQgaXMgbm90IHN0cmljdGx5CiAgICAvLyBmb2xsb3dlZDogRGVzdGluYXRpb24sIE5hbWVJZCwgQ29uZGl0aW9ucyAuLi4gYXJlIHZhbGlkYXRlZCB0b28uCiAgICAnc3RyaWN0JyA9PiB0cnVlLAoKICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlICh0byBwcmludCBlcnJvcnMpLgogICAgJ2RlYnVnJyA9PiBmYWxzZSwKCiAgICAvLyBTZXQgYSBCYXNlVVJMIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0cnkgdG8gZ3Vlc3MKICAgIC8vIHRoZSBCYXNlVVJMIG9mIHRoZSB2aWV3IHRoYXQgcHJvY2VzcyB0aGUgU0FNTCBNZXNzYWdlLgogICAgLy8gRXggaHR0cDovL3NwLmV4YW1wbGUuY29tLwogICAgLy8gICAgaHR0cDovL2V4YW1wbGUuY29tL3NwLwogICAgJ2Jhc2V1cmwnID0+IG51bGwsCgogICAgLy8gU2VydmljZSBQcm92aWRlciBEYXRhIHRoYXQgd2UgYXJlIGRlcGxveWluZy4KICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgU1AgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxBdXRoblJlc3BvbnNlPiBtZXNzYWdlIE1VU1QgYmUKICAgICAgICAvLyByZXR1cm5lZCB0byB0aGUgcmVxdWVzdGVyLCBpbiB0aGlzIGNhc2Ugb3VyIFNQLgogICAgICAgICdhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuIFNBTUwgVG9vbGtpdCBzdXBwb3J0cyB0aGlzIGVuZHBvaW50IGZvciB0aGUKICAgICAgICAgICAgLy8gSFRUUC1QT1NUIGJpbmRpbmcgb25seS4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUJywKICAgICAgICApLAogICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgcmVxdWVzdGVkIGF0dHJpYnV0ZXMsIHNldCBhCiAgICAgICAgLy8gYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZS4gbmFtZUZvcm1hdCwgYXR0cmlidXRlVmFsdWUgYW5kCiAgICAgICAgLy8gZnJpZW5kbHlOYW1lIGNhbiBiZSBvbWl0dGVkCiAgICAgICAgImF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAic2VydmljZU5hbWUiID0+ICJTUCB0ZXN0IiwKICAgICAgICAgICAgICAgICJzZXJ2aWNlRGVzY3JpcHRpb24iID0+ICJUZXN0IFNlcnZpY2UiLAogICAgICAgICAgICAgICAgInJlcXVlc3RlZEF0dHJpYnV0ZXMiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc1JlcXVpcmVkIiA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVGb3JtYXQiID0+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZnJpZW5kbHlOYW1lIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZVZhbHVlIiA9PiBhcnJheSgpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICksCiAgICAgICAgLy8gU3BlY2lmaWVzIGluZm8gYWJvdXQgd2hlcmUgYW5kIGhvdyB0aGUgPExvZ291dCBSZXNwb25zZT4gbWVzc2FnZSBNVVNUIGJlCiAgICAgICAgLy8gcmV0dXJuZWQgdG8gdGhlIHJlcXVlc3RlciwgaW4gdGhpcyBjYXNlIG91ciBTUC4KICAgICAgICAnc2luZ2xlTG9nb3V0U2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBMb2NhdGlvbiB3aGVyZSB0aGUgPFJlc3BvbnNlPiBmcm9tIHRoZSBJZFAgd2lsbCBiZSByZXR1cm5lZAogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gU0FNTCBwcm90b2NvbCBiaW5kaW5nIHRvIGJlIHVzZWQgd2hlbiByZXR1cm5pbmcgdGhlIDxSZXNwb25zZT4KICAgICAgICAgICAgLy8gbWVzc2FnZS4gU0FNTCBUb29sa2l0IHN1cHBvcnRzIHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcKICAgICAgICAgICAgLy8gb25seSBmb3IgdGhpcyBlbmRwb2ludC4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBTcGVjaWZpZXMgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSBuYW1lIGlkZW50aWZpZXIgdG8gYmUgdXNlZCB0bwogICAgICAgIC8vIHJlcHJlc2VudCB0aGUgcmVxdWVzdGVkIHN1YmplY3QuCiAgICAgICAgLy8gVGFrZSBhIGxvb2sgb24gbGliL1NhbWwyL0NvbnN0YW50cy5waHAgdG8gc2VlIHRoZSBOYW1lSWRGb3JtYXQgc3VwcG9ydGVkLgogICAgICAgICdOYW1lSURGb3JtYXQnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MnLAogICAgICAgIC8vIFVzdWFsbHkgeDUwOWNlcnQgYW5kIHByaXZhdGVLZXkgb2YgdGhlIFNQIGFyZSBwcm92aWRlZCBieSBmaWxlcyBwbGFjZWQgYXQKICAgICAgICAvLyB0aGUgY2VydHMgZm9sZGVyLiBCdXQgd2UgY2FuIGFsc28gcHJvdmlkZSB0aGVtIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAncHJpdmF0ZUtleScgPT4gJycsCgogICAgICAgIC8qCiAgICAgICAgICogS2V5IHJvbGxvdmVyCiAgICAgICAgICogSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleQogICAgICAgICAqIHlvdSBjYW4gZGVmaW5lIGhlcmUgdGhlIG5ldyB4NTA5Y2VydCBhbmQgaXQgd2lsbCBiZQogICAgICAgICAqIHB1Ymxpc2hlZCBvbiB0aGUgU1AgbWV0YWRhdGEgc28gSWRlbnRpdHkgUHJvdmlkZXJzIGNhbgogICAgICAgICAqIHJlYWQgdGhlbSBhbmQgZ2V0IHJlYWR5IGZvciByb2xsb3Zlci4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnROZXcnID0+ICcnLAogICAgKSwKCiAgICAvLyBJZGVudGl0eSBQcm92aWRlciBEYXRhIHRoYXQgd2Ugd2FudCBjb25uZWN0ZWQgd2l0aCBvdXIgU1AuCiAgICAnaWRwJyA9PiBhcnJheSgKICAgICAgICAvLyBJZGVudGlmaWVyIG9mIHRoZSBJZFAgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNTTyBlbmRwb2ludCBpbmZvIG9mIHRoZSBJZFAuIChBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IHByb3RvY29sKQogICAgICAgICdzaW5nbGVTaWduT25TZXJ2aWNlJyA9PiBhcnJheSgKICAgICAgICAgICAgLy8gVVJMIFRhcmdldCBvZiB0aGUgSWRQIHdoZXJlIHRoZSBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IE1lc3NhZ2UKICAgICAgICAgICAgLy8gd2lsbCBiZSBzZW50LgogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gU0FNTCBwcm90b2NvbCBiaW5kaW5nIHRvIGJlIHVzZWQgd2hlbiByZXR1cm5pbmcgdGhlIDxSZXNwb25zZT4KICAgICAgICAgICAgLy8gbWVzc2FnZS4gT25lTG9naW4gVG9vbGtpdCBzdXBwb3J0cyB0aGUgSFRUUC1SZWRpcmVjdCBiaW5kaW5nCiAgICAgICAgICAgIC8vIG9ubHkgZm9yIHRoaXMgZW5kcG9pbnQuCiAgICAgICAgICAgICdiaW5kaW5nJyA9PiAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUmVkaXJlY3QnLAogICAgICAgICksCiAgICAgICAgLy8gU0xPIGVuZHBvaW50IGluZm8gb2YgdGhlIElkUC4KICAgICAgICAnc2luZ2xlTG9nb3V0U2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBMb2NhdGlvbiBvZiB0aGUgSWRQIHdoZXJlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgc2VudC4KICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFVSTCBsb2NhdGlvbiBvZiB0aGUgSWRQIHdoZXJlIFNMTyBSZXNwb25zZSB3aWxsIGJlIHNlbnQgKFJlc3BvbnNlTG9jYXRpb24pCiAgICAgICAgICAgIC8vIGlmIG5vdCBzZXQsIHVybCBmb3IgdGhlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgdXNlZAogICAgICAgICAgICAncmVzcG9uc2VVcmwnID0+ICcnLAogICAgICAgICAgICAvLyBTQU1MIHByb3RvY29sIGJpbmRpbmcgdG8gYmUgdXNlZCB3aGVuIHJldHVybmluZyB0aGUgPFJlc3BvbnNlPgogICAgICAgICAgICAvLyBtZXNzYWdlLiBPbmVMb2dpbiBUb29sa2l0IHN1cHBvcnRzIHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcKICAgICAgICAgICAgLy8gb25seSBmb3IgdGhpcyBlbmRwb2ludC4KICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBQdWJsaWMgeDUwOSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSWRQCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAvKgogICAgICAgICAqICBJbnN0ZWFkIG9mIHVzZSB0aGUgd2hvbGUgeDUwOWNlcnQgeW91IGNhbiB1c2UgYSBmaW5nZXJwcmludCBpbiBvcmRlciB0bwogICAgICAgICAqICB2YWxpZGF0ZSBhIFNBTUxSZXNwb25zZSwgYnV0IHdlIGRvbid0IHJlY29tbWVuZCB0byB1c2UgdGhhdAogICAgICAgICAqICBtZXRob2Qgb24gcHJvZHVjdGlvbiBzaW5jZSBpcyBleHBsb2l0YWJsZSBieSBhIGNvbGxpc2lvbiBhdHRhY2suCiAgICAgICAgICogIChvcGVuc3NsIHg1MDkgLW5vb3V0IC1maW5nZXJwcmludCAtaW4gImlkcC5jcnQiIHRvIGdlbmVyYXRlIGl0LAogICAgICAgICAqICAgb3IgYWRkIGZvciBleGFtcGxlIHRoZSAtc2hhMjU2ICwgLXNoYTM4NCBvciAtc2hhNTEyIHBhcmFtZXRlcikKICAgICAgICAgKgogICAgICAgICAqICBJZiBhIGZpbmdlcnByaW50IGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBjZXJ0RmluZ2VycHJpbnRBbGdvcml0aG0gaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8KICAgICAgICAgKiAgbGV0IHRoZSB0b29sa2l0IGtub3cgd2hpY2ggYWxnb3JpdGhtIHdhcyB1c2VkLiBQb3NzaWJsZSB2YWx1ZXM6IHNoYTEsIHNoYTI1Niwgc2hhMzg0IG9yIHNoYTUxMgogICAgICAgICAqICAnc2hhMScgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiAgTm90aWNlIHRoYXQgaWYgeW91IHdhbnQgdG8gdmFsaWRhdGUgYW55IFNBTUwgTWVzc2FnZSBzZW50IGJ5IHRoZSBIVFRQLVJlZGlyZWN0IGJpbmRpbmcsIHlvdQogICAgICAgICAqICB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGUgd2hvbGUgeDUwOWNlcnQuCiAgICAgICAgICovCiAgICAgICAgLy8gJ2NlcnRGaW5nZXJwcmludCcgPT4gJycsCiAgICAgICAgLy8gJ2NlcnRGaW5nZXJwcmludEFsZ29yaXRobScgPT4gJ3NoYTEnLAoKICAgICAgICAvKiBJbiBzb21lIHNjZW5hcmlvcyB0aGUgSWRQIHVzZXMgZGlmZmVyZW50IGNlcnRpZmljYXRlcyBmb3IKICAgICAgICAgKiBzaWduaW5nL2VuY3J5cHRpb24sIG9yIGlzIHVuZGVyIGtleSByb2xsb3ZlciBwaGFzZSBhbmQKICAgICAgICAgKiBtb3JlIHRoYW4gb25lIGNlcnRpZmljYXRlIGlzIHB1Ymxpc2hlZCBvbiBJZFAgbWV0YWRhdGEuCiAgICAgICAgICogSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoYXQgcGFyYW1ldGVyLgogICAgICAgICAqICh3aGVuIHVzZWQsICd4NTA5Y2VydCcgYW5kICdjZXJ0RmluZ2VycHJpbnQnIHZhbHVlcyBhcmUKICAgICAgICAgKiBpZ25vcmVkKS4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnRNdWx0aScgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAnc2lnbmluZycgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAgICAgMCA9PiAnPGNlcnQxLXN0cmluZz4nLAogICAgICAgIC8vICAgICAgKSwKICAgICAgICAvLyAgICAgICdlbmNyeXB0aW9uJyA9PiBhcnJheSgKICAgICAgICAvLyAgICAgICAgICAwID0+ICc8Y2VydDItc3RyaW5nPicsCiAgICAgICAgLy8gICAgICApCiAgICAgICAgLy8gKSwKICAgICksCik7CmBgYApJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgc2V0dGluZ3MgZGF0YSAoSWRQLCBTUCksIHRoZXJlIGlzIGV4dHJhCmluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgZGVmaW5lZC4gSW4gdGhlIHNhbWUgd2F5IHRoYXQgYSB0ZW1wbGF0ZSBleGlzdHMKZm9yIHRoZSBiYXNpYyBpbmZvLCB0aGVyZSBpcyBhIHRlbXBsYXRlIGZvciB0aGF0IGFkdmFuY2VkIGluZm8gbG9jYXRlZAphdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQgYW5kIG5hbWVkIGBhZHZhbmNlZF9zZXR0aW5nc19leGFtcGxlLnBocGAKdGhhdCB5b3UgY2FuIGNvcHkgYW5kIHJlbmFtZSBpdCBhcyBgYWR2YW5jZWRfc2V0dGluZ3MucGhwYAoKYGBgcGhwCjw/cGhwCgokYWR2YW5jZWRTZXR0aW5ncyA9IGFycmF5KAoKICAgIC8vIENvbXByZXNzaW9uIHNldHRpbmdzCiAgICAnY29tcHJlc3MnID0+IGFycmF5KAogICAgICAgICdyZXF1ZXN0cycgPT4gdHJ1ZSwKICAgICAgICAncmVzcG9uc2VzJyA9PiB0cnVlCiAgICApLAogICAgLy8gU2VjdXJpdHkgc2V0dGluZ3MKICAgICdzZWN1cml0eScgPT4gYXJyYXkoCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyBvZmZlcmVkICovCgogICAgICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBuYW1lSUQgb2YgdGhlIDxzYW1scDpsb2dvdXRSZXF1ZXN0PiBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIGVuY3J5cHRlZC4KICAgICAgICAnbmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIDxzYW1scDpBdXRoblJlcXVlc3Q+IG1lc3NhZ2VzIHNlbnQgYnkgdGhpcyBTUAogICAgICAgIC8vIHdpbGwgYmUgc2lnbmVkLiAgW01ldGFkYXRhIG9mIHRoZSBTUCB3aWxsIG9mZmVyIHRoaXMgaW5mb10KICAgICAgICAnYXV0aG5SZXF1ZXN0c1NpZ25lZCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSA8c2FtbHA6bG9nb3V0UmVxdWVzdD4gbWVzc2FnZXMgc2VudCBieSB0aGlzIFNQCiAgICAgICAgLy8gd2lsbCBiZSBzaWduZWQuCiAgICAgICAgJ2xvZ291dFJlcXVlc3RTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgPHNhbWxwOmxvZ291dFJlc3BvbnNlPiBtZXNzYWdlcyBzZW50IGJ5IHRoaXMgU1AKICAgICAgICAvLyB3aWxsIGJlIHNpZ25lZC4KICAgICAgICAnbG9nb3V0UmVzcG9uc2VTaWduZWQnID0+IGZhbHNlLAoKICAgICAgICAvKiBTaWduIHRoZSBNZXRhZGF0YQogICAgICAgICBGYWxzZSB8fCBUcnVlICh1c2Ugc3AgY2VydHMpIHx8IGFycmF5ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlGaWxlTmFtZScgPT4gJ21ldGFkYXRhLmtleScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VydEZpbGVOYW1lJyA9PiAnbWV0YWRhdGEuY3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhcnJheSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneDUwOWNlcnQnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGVLZXknID0+ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICovCiAgICAgICAgJ3NpZ25NZXRhZGF0YScgPT4gZmFsc2UsCgogICAgICAgIC8qKiBzaWduYXR1cmVzIGFuZCBlbmNyeXB0aW9ucyByZXF1aXJlZCAqKi8KCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbHA6UmVzcG9uc2U+LCA8c2FtbHA6TG9nb3V0UmVxdWVzdD4KICAgICAgICAvLyBhbmQgPHNhbWxwOkxvZ291dFJlc3BvbnNlPiBlbGVtZW50cyByZWNlaXZlZCBieSB0aGlzIFNQIHRvIGJlIHNpZ25lZC4KICAgICAgICAnd2FudE1lc3NhZ2VzU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbDpBc3NlcnRpb24+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5CiAgICAgICAgLy8gdGhpcyBTUCB0byBiZSBlbmNyeXB0ZWQuCiAgICAgICAgJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSA8c2FtbDpBc3NlcnRpb24+IGVsZW1lbnRzIHJlY2VpdmVkIGJ5CiAgICAgICAgLy8gdGhpcyBTUCB0byBiZSBzaWduZWQuIFtNZXRhZGF0YSBvZiB0aGUgU1Agd2lsbCBvZmZlciB0aGlzIGluZm9dCiAgICAgICAgJ3dhbnRBc3NlcnRpb25zU2lnbmVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gSW5kaWNhdGVzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBOYW1lSUQgZWxlbWVudCBvbiB0aGUgU0FNTFJlc3BvbnNlCiAgICAgICAgLy8gcmVjZWl2ZWQgYnkgdGhpcyBTUCB0byBiZSBwcmVzZW50LgogICAgICAgICd3YW50TmFtZUlkJyA9PiB0cnVlLAoKICAgICAgICAvLyBJbmRpY2F0ZXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIE5hbWVJRCByZWNlaXZlZCBieQogICAgICAgIC8vIHRoaXMgU1AgdG8gYmUgZW5jcnlwdGVkLgogICAgICAgICd3YW50TmFtZUlkRW5jcnlwdGVkJyA9PiBmYWxzZSwKCiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gY29udGV4dC4KICAgICAgICAvLyBTZXQgdG8gZmFsc2UgYW5kIG5vIEF1dGhDb250ZXh0IHdpbGwgYmUgc2VudCBpbiB0aGUgQXV0aE5SZXF1ZXN0LgogICAgICAgIC8vIFNldCB0cnVlIG9yIGRvbid0IHByZXNlbnQgdGhpcyBwYXJhbWV0ZXIgYW5kIHlvdSB3aWxsIGdldCBhbiBBdXRoQ29udGV4dCAnZXhhY3QnICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydCcuCiAgICAgICAgLy8gU2V0IGFuIGFycmF5IHdpdGggdGhlIHBvc3NpYmxlIGF1dGggY29udGV4dCB2YWx1ZXM6IGFycmF5KCd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCcsICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpYNTA5JykuCiAgICAgICAgJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCcgPT4gZmFsc2UsCgogICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGUgU1Agd2lsbCB2YWxpZGF0ZSBhbGwgcmVjZWl2ZWQgeG1scy4KICAgICAgICAvLyAoSW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHhtbCwgJ3N0cmljdCcgYW5kICd3YW50WE1MVmFsaWRhdGlvbicgbXVzdCBiZSB0cnVlKS4KICAgICAgICAnd2FudFhNTFZhbGlkYXRpb24nID0+IHRydWUsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBlbXB0eSB2YWx1ZSBhdCBpdHMgRGVzdGluYXRpb24KICAgICAgICAvLyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgcmVqZWN0ZWQgZm9yIHRoaXMgZmFjdC4KICAgICAgICAncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCBEZXN0aW5hdGlvbiBVUkwgc2hvdWxkIHN0cmljdGx5IG1hdGNoIHRvIHRoZSBhZGRyZXNzIHRvCiAgICAgICAgLy8gd2hpY2ggdGhlIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuCiAgICAgICAgLy8gTm90aWNlIHRoYXQgaWYgJ3JlbGF4RGVzdGluYXRpb25WYWxpZGF0aW9uJyBpcyB0cnVlIGFuIGVtcHR5IERlc3RpbmF0aW9uCiAgICAgICAgLy8gd2lsbCBiZSBhY2NlcHRlZC4KICAgICAgICAnZGVzdGluYXRpb25TdHJpY3RseU1hdGNoZXMnID0+IGZhbHNlLAoKICAgICAgICAvLyBJZiB0cnVlLCB0aGUgdG9vbGtpdCB3aWxsIG5vdCByYWlzZWQgYW4gZXJyb3Igd2hlbiB0aGUgU3RhdGVtZW50IEVsZW1lbnQKICAgICAgICAvLyBjb250YWluIGF0cmlidXRlIGVsZW1lbnRzIHdpdGggbmFtZSBkdXBsaWNhdGVkCiAgICAgICAgJ2FsbG93UmVwZWF0QXR0cmlidXRlTmFtZScgPT4gZmFsc2UsCgogICAgICAgIC8vIElmIHRydWUsIFNBTUxSZXNwb25zZXMgd2l0aCBhbiBJblJlc3BvbnNlVG8gdmFsdWUgd2lsbCBiZSByZWplY3RlZCBpZiBub3QKICAgICAgICAvLyBBdXRoTlJlcXVlc3QgSUQgcHJvdmlkZWQgdG8gdGhlIHZhbGlkYXRpb24gbWV0aG9kLgogICAgICAgICdyZWplY3RVbnNvbGljaXRlZFJlc3BvbnNlc1dpdGhJblJlc3BvbnNlVG8nID0+IGZhbHNlLAoKICAgICAgICAvLyBBbGdvcml0aG0gdGhhdCB0aGUgdG9vbGtpdCB3aWxsIHVzZSBvbiBzaWduaW5nIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMScKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2RzYS1zaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMzg0JwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHJzYS1zaGExIGlzIGEgZGVwcmVjYXRlZCBhbGdvcml0aG0gYW5kIHNob3VsZCBub3QgYmUgdXNlZAogICAgICAgICdzaWduYXR1cmVBbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2JywKCiAgICAgICAgLy8gQWxnb3JpdGhtIHRoYXQgdGhlIHRvb2xraXQgd2lsbCB1c2Ugb24gZGlnZXN0IHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJwogICAgICAgIC8vICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnCiAgICAgICAgLy8gICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCcKICAgICAgICAvLyAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJwogICAgICAgIC8vIE5vdGljZSB0aGF0IHNoYTEgaXMgYSBkZXByZWNhdGVkIGFsZ29yaXRobSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCiAgICAgICAgJ2RpZ2VzdEFsZ29yaXRobScgPT4gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NicsCgogICAgICAgIC8vIEFsZ29yaXRobSB0aGF0IHRoZSB0b29sa2l0IHdpbGwgdXNlIGZvciBlbmNyeXB0aW9uIHByb2Nlc3MuIE9wdGlvbnM6CiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczE5Mi1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnCiAgICAgICAgLy8gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbScKICAgICAgICAvLyAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNhZXMxOTItZ2NtJwogICAgICAgIC8vICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgIC8vIE5vdGljZSB0aGF0IGFlcy1jYmMgYXJlIG5vdCBjb25zaWRlciBzZWN1cmUgYW55bW9yZSBzbyBzaG91bGQgbm90IGJlIHVzZWQKICAgICAgICAnZW5jcnlwdGlvbl9hbGdvcml0aG0nID0+ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nLAoKICAgICAgICAvLyBBREZTIFVSTC1FbmNvZGVzIFNBTUwgZGF0YSBhcyBsb3dlcmNhc2UsIGFuZCB0aGUgdG9vbGtpdCBieSBkZWZhdWx0IHVzZXMKICAgICAgICAvLyB1cHBlcmNhc2UuIFR1cm4gaXQgVHJ1ZSBmb3IgQURGUyBjb21wYXRpYmlsaXR5IG9uIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KICAgICAgICAnbG93ZXJjYXNlVXJsZW5jb2RpbmcnID0+IGZhbHNlLAogICAgKSwKCiAgICAvLyBDb250YWN0IGluZm9ybWF0aW9uIHRlbXBsYXRlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdXBwbHkgYQogICAgLy8gdGVjaG5pY2FsIGFuZCBzdXBwb3J0IGNvbnRhY3RzLgogICAgJ2NvbnRhY3RQZXJzb24nID0+IGFycmF5KAogICAgICAgICd0ZWNobmljYWwnID0+IGFycmF5KAogICAgICAgICAgICAnZ2l2ZW5OYW1lJyA9PiAnJywKICAgICAgICAgICAgJ2VtYWlsQWRkcmVzcycgPT4gJycKICAgICAgICApLAogICAgICAgICdzdXBwb3J0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ2dpdmVuTmFtZScgPT4gJycsCiAgICAgICAgICAgICdlbWFpbEFkZHJlc3MnID0+ICcnCiAgICAgICAgKSwKICAgICksCgogICAgLy8gT3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHRlbXBsYXRlLCB0aGUgaW5mbyBpbiBlbl9VUyBsYW5nIGlzCiAgICAvLyByZWNvbW1lbmRlZCwgYWRkIG1vcmUgaWYgcmVxdWlyZWQuCiAgICAnb3JnYW5pemF0aW9uJyA9PiBhcnJheSgKICAgICAgICAnZW4tVVMnID0+IGFycmF5KAogICAgICAgICAgICAnbmFtZScgPT4gJycsCiAgICAgICAgICAgICdkaXNwbGF5bmFtZScgPT4gJycsCiAgICAgICAgICAgICd1cmwnID0+ICcnCiAgICAgICAgKSwKICAgICksCik7CmBgYAoKVGhlIGNvbXByZXNzaW9uIHNldHRpbmdzIGFsbG93IHlvdSB0byBpbnN0cnVjdCB3aGV0aGVyIG9yIG5vdCB0aGUgSWRQIGNhbiBhY2NlcHQKZGF0YSB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgdXNpbmcgW2d6aXBdKGd6aXApICgncmVxdWVzdHMnIGFuZCAncmVzcG9uc2VzJykuCkJ1dCBpZiB3ZSBwcm92aWRlIGEgYCRkZWZsYXRlYCBib29sZWFuIHBhcmFtZXRlciB0byB0aGUgYGdldFJlcXVlc3RgIG9yIGBnZXRSZXNwb25zZWAgbWV0aG9kIGl0IHdpbGwgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncy4KCkluIHRoZSBzZWN1cml0eSBzZWN0aW9uLCB5b3UgY2FuIHNldCB0aGUgd2F5IHRoYXQgdGhlIFNQIHdpbGwgaGFuZGxlIHRoZSBtZXNzYWdlcwphbmQgYXNzZXJ0aW9ucy4gQ29udGFjdCB0aGUgYWRtaW4gb2YgdGhlIElkUCBhbmQgYXNrIGhpbSB3aGF0IHRoZSBJZFAgZXhwZWN0cywKYW5kIGRlY2lkZSB3aGF0IHZhbGlkYXRpb25zIHdpbGwgaGFuZGxlIHRoZSBTUCBhbmQgd2hhdCByZXF1aXJlbWVudHMgdGhlIFNQIHdpbGwgaGF2ZQphbmQgY29tbXVuaWNhdGUgdGhlbSB0byB0aGUgSWRQJ3MgYWRtaW4gdG9vLgoKT25jZSB3ZSBrbm93IHdoYXQga2luZCBvZiBkYXRhIGNvdWxkIGJlIGNvbmZpZ3VyZWQsIGxldCdzIHRhbGsgYWJvdXQgdGhlIHdheQpzZXR0aW5ncyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHRvb2xraXQuCgpUaGUgc2V0dGluZ3MgZmlsZXMgZGVzY3JpYmVkIChgc2V0dGluZ3MucGhwYCBhbmQgYGFkdmFuY2VkX3NldHRpbmdzLnBocGApIGFyZSBsb2FkZWQKYnkgdGhlIHRvb2xraXQgaWYgbm8gb3RoZXIgYXJyYXkgd2l0aCBzZXR0aW5ncyBpbmZvIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdG9vbGtpdC4gTGV0J3Mgc2VlIHNvbWUgZXhhbXBsZXMuCgpgYGBwaHAKLy8gSW5pdGlhbGl6ZXMgdG9vbGtpdCB3aXRoIHNldHRpbmdzLnBocCAmIGFkdmFuY2VkX3NldHRpbmdzIGZpbGVzLgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7Ci8vb3IKJHNldHRpbmdzID0gbmV3IE9uZUxvZ2luXFNhbWwyXFNldHRpbmdzKCk7CgovLyBJbml0aWFsaXplcyB0b29sa2l0IHdpdGggdGhlIGFycmF5IHByb3ZpZGVkLgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOwovL29yCiRzZXR0aW5ncyA9IG5ldyBPbmVMb2dpblxTYW1sMlxTZXR0aW5ncygkc2V0dGluZ3NJbmZvKTsKYGBgCgpZb3UgY2FuIGRlY2xhcmUgdGhlIGAkc2V0dGluZ3NJbmZvYCBpbiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3RvcgpleGVjdXRpb24gb3IgbG9jYXRlIHRoZW0gaW4gYW55IGZpbGUgYW5kIGxvYWQgdGhlIGZpbGUgaW4gb3JkZXIgdG8gZ2V0IHRoZQphcnJheSBhdmFpbGFibGUgYXMgd2Ugc2VlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKCmBgYHBocAo8P3BocAoKcmVxdWlyZV9vbmNlICdjdXN0b21fc2V0dGluZ3MucGhwJzsgIC8vIFRoZSBjdXN0b21fc2V0dGluZ3MucGhwIGNvbnRhaW5zIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICRzZXR0aW5nc0luZm8gYXJyYXkuCgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOwpgYGAKCgojIyMjIEhvdyBsb2FkIHRoZSBsaWJyYXJ5ICMjIyMKCgpJbiBvcmRlciB0byB1c2UgdGhlIHRvb2xraXQgbGlicmFyeSwgaWYgeW91ciBwcm9qZWN0IHN1cHBvcnQgY29tcG9zZXIgeW91IG9ubHkKbmVlZCB0byBpbnN0YWxsIGl0IHdpdGggY29tcG9zZXIgKFNlZSB0aGUgaW5zdGFsbGF0aW9uIHNlY3Rpb24pIGFuZCB5b3UgYXJlIGRvbmUuCgoKSWYgeW91ciBwcm9qZWN0IGRvZXNuJ3QgdXNlIGNvbXBvc2VyIHlvdSBuZWVkIHRvIGltcG9ydCB0aGUgYF90b29sa2l0X2xvYWRlci5waHBgCmZpbGUgbG9jYXRlZCBvbiB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQuIFlvdSBjYW4gbG9hZCB0aGlzIGZpbGUgaW4gdGhpcyB3YXk6CgpgYGBwaHAKPD9waHAKCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UoVE9PTEtJVF9QQVRIIC4gJ190b29sa2l0X2xvYWRlci5waHAnKTsKYGBgCgpBZnRlciB0aGF0IGxpbmUgd2Ugd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgY2xhc3NlcyAoYW5kIHRoZWlyIG1ldGhvZHMpIG9mIHRoZQp0b29sa2l0IChiZWNhdXNlIHRoZSBleHRlcm5hbCBhbmQgdGhlIFNhbWwyIGxpYnJhcmllcyBmaWxlcyBhcmUgbG9hZGVkKS4KClRoYXQgdG9vbGtpdCBkZXBlbmRzIG9uIFt4bWxzZWNsaWJzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicykgMy5YLlggYnJhbmNoLAp5b3Ugd2lsbCBuZWVkIHRvIGdldCBpdHMgY29kZSBhbmQgcGxhY2Ugb24geW91ciBwcm9qZWN0IGFuZCByZXVzZSB0aGUgX3Rvb2xraXRfbG9hZGVyLnBocApmaWxlIHRvIGluY2x1ZGUgeG1sc2VjbGlicyBhcyB3ZWxsLgoKCiMjIyMgSW5pdGlhdGUgU1NPICMjIyMKCkluIG9yZGVyIHRvIHNlbmQgYW4gYEF1dGhOUmVxdWVzdGAgdG8gdGhlIElkUDoKCmBgYHBocAo8P3BocAoKZGVmaW5lKCJUT09MS0lUX1BBVEgiLCAnL3Zhci93d3cvcGhwLXNhbWwvJyk7CnJlcXVpcmVfb25jZShUT09MS0lUX1BBVEggLiAnX3Rvb2xraXRfbG9hZGVyLnBocCcpOyAgIC8vIFdlIGxvYWQgdGhlIFNBTUwyIGxpYgoKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOyAvLyBDb25zdHJ1Y3RvciBvZiB0aGUgU1AsIGxvYWRzIHNldHRpbmdzLnBocAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhZHZhbmNlZF9zZXR0aW5ncy5waHAKJGF1dGgtPmxvZ2luKCk7ICAgLy8gTWV0aG9kIHRoYXQgc2VudCB0aGUgQXV0aE5SZXF1ZXN0CmBgYAoKVGhlIGBBdXRoTlJlcXVlc3RgIHdpbGwgYmUgc2VudCBzaWduZWQgb3IgdW5zaWduZWQgYmFzZWQgb24gdGhlIHNlY3VyaXR5IGluZm8Kb2YgdGhlIGBhZHZhbmNlZF9zZXR0aW5ncy5waHBgIChgJ2F1dGhuUmVxdWVzdHNTaWduZWQnYCkuCgoKVGhlIElkUCB3aWxsIHRoZW4gcmV0dXJuIHRoZSBTQU1MIFJlc3BvbnNlIHRvIHRoZSB1c2VyJ3MgY2xpZW50LiBUaGUgY2xpZW50IGlzIHRoZW4gZm9yd2FyZGVkIHRvIHRoZSBBdHRyaWJ1dGUgQ29uc3VtZXIgU2VydmljZSBvZiB0aGUgU1Agd2l0aCB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBkbyBub3Qgc2V0IGEgYCd1cmwnYCBwYXJhbSBpbiB0aGUgbG9naW4gbWV0aG9kIGFuZCB3ZSBhcmUgdXNpbmcgdGhlIGRlZmF1bHQgQUNTIHByb3ZpZGVkIGJ5IHRoZSB0b29sa2l0IChgZW5kcG9pbnRzL2Fjcy5waHBgKSwgdGhlbiB0aGUgQUNTIGVuZHBvaW50IHdpbGwgcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIGZpbGUgdGhhdCBsYXVuY2hlZCB0aGUgU1NPIHJlcXVlc3QuCgpXZSBjYW4gc2V0IGEgYCdyZXR1cm5UbydgIHVybCB0byBjaGFuZ2UgdGhlIHdvcmtmbG93IGFuZCByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgb3RoZXIgUEhQIGZpbGUuCgpgYGBwaHAKJG5ld1RhcmdldFVybCA9ICdodHRwOi8vZXhhbXBsZS5jb20vY29uc3VtZTIucGhwJzsKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokYXV0aC0+bG9naW4oJG5ld1RhcmdldFVybCk7CmBgYAoKVGhlIGxvZ2luIG1ldGhvZCBjYW4gcmVjZWl2ZSBvdGhlciBzaXggb3B0aW9uYWwgcGFyYW1ldGVyczoKCiogYCRwYXJhbWV0ZXJzYCAtIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBgR0VUYCBpbiB0aGUgSFRUUC1SZWRpcmVjdC4KKiBgJGZvcmNlQXV0aG5gIC0gV2hlbiB0cnVlIHRoZSBgQXV0aE5SZXF1ZXN0YCB3aWxsIHNldCB0aGUgYEZvcmNlQXV0aG49J3RydWUnYAoqIGAkaXNQYXNzaXZlYCAtIFdoZW4gdHJ1ZSB0aGUgYEF1dGhOUmVxdWVzdGAgd2lsbCBzZXQgdGhlIGBJc3Bhc3NpdmU9J3RydWUnYAoqIGAkc3RheWAgLSBUcnVlIGlmIHdlIHdhbnQgdG8gc3RheSAocmV0dXJucyB0aGUgdXJsIHN0cmluZykgRmFsc2UgdG8gcmVkaXJlY3QKKiBgJHNldE5hbWVJZFBvbGljeWAgLSBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCBhIG5hbWVJZFBvbGljeSBlbGVtZW50LgoqIGAkbmFtZUlkVmFsdWVSZXFgIC0gSW5kaWNhdGVzIHRvIHRoZSBJZFAgdGhlIHN1YmplY3QgdGhhdCBzaG91bGQgYmUgYXV0aGVudGljYXRlZC4KCklmIGEgbWF0Y2ggb24gdGhlIGZ1dHVyZSBTQU1MUmVzcG9uc2UgSUQgYW5kIHRoZSBBdXRoTlJlcXVlc3QgSUQgdG8gYmUgc2VudCBpcyByZXF1aXJlZCwgdGhhdCBBdXRoTlJlcXVlc3QgSUQgbXVzdCB0byBiZSBleHRyYWN0ZWQgYW5kIHNhdmVkLgoKYGBgcGhwCiRzc29CdWlsdFVybCA9ICRhdXRoLT5sb2dpbihudWxsLCBhcnJheSgpLCBmYWxzZSwgZmFsc2UsIHRydWUpOwokX1NFU1NJT05bJ0F1dGhOUmVxdWVzdElEJ10gPSAkYXV0aC0+Z2V0TGFzdFJlcXVlc3RJRCgpOwpoZWFkZXIoJ1ByYWdtYTogbm8tY2FjaGUnKTsKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlJyk7CmhlYWRlcignTG9jYXRpb246ICcgLiAkc3NvQnVpbHRVcmwpOwpleGl0KCk7CmBgYAoKIyMjIyBUaGUgU1AgRW5kcG9pbnRzICMjIyMKClJlbGF0ZWQgdG8gdGhlIFNQIHRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgdmlld3M6IFRoZSBtZXRhZGF0YSB2aWV3LCB0aGUgQUNTIHZpZXcgYW5kIHRoZSBTTFMgdmlldy4gVGhlIHRvb2xraXQKcHJvdmlkZXMgZXhhbXBsZXMgb2YgdGhvc2Ugdmlld3MgaW4gdGhlIGVuZHBvaW50cyBkaXJlY3RvcnkuCgojIyMjIyBTUCBNZXRhZGF0YSBgZW5kcG9pbnRzL21ldGFkYXRhLnBocGAgIyMjIyMKClRoaXMgY29kZSB3aWxsIHByb3ZpZGUgdGhlIFhNTCBtZXRhZGF0YSBmaWxlIG9mIG91ciBTUCwgYmFzZWQgb24gdGhlIGluZm8gdGhhdCB3ZSBwcm92aWRlZCBpbiB0aGUgc2V0dGluZ3MgZmlsZXMuCgpgYGBwaHAKPD9waHAKCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UgZGlybmFtZShUT09MS0lUX1BBVEguJy9fdG9vbGtpdF9sb2FkZXIucGhwJzsKCnRyeSB7CiAgICAkYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CiAgICAkc2V0dGluZ3MgPSAkYXV0aC0+Z2V0U2V0dGluZ3MoKTsKICAgICRtZXRhZGF0YSA9ICRzZXR0aW5ncy0+Z2V0U1BNZXRhZGF0YSgpOwogICAgJGVycm9ycyA9ICRzZXR0aW5ncy0+dmFsaWRhdGVNZXRhZGF0YSgkbWV0YWRhdGEpOwogICAgaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQveG1sJyk7CiAgICAgICAgZWNobyAkbWV0YWRhdGE7CiAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBPbmVMb2dpblxTYW1sMlxFcnJvcigKICAgICAgICAgICAgJ0ludmFsaWQgU1AgbWV0YWRhdGE6ICcuaW1wbG9kZSgnLCAnLCAkZXJyb3JzKSwKICAgICAgICAgICAgT25lTG9naW5cU2FtbDJcRXJyb3I6Ok1FVEFEQVRBX1NQX0lOVkFMSUQKICAgICAgICApOwogICAgfQp9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTsKfQpgYGAKVGhlIGBnZXRTUE1ldGFkYXRhYCB3aWxsIHJldHVybiB0aGUgbWV0YWRhdGEgc2lnbmVkIG9yIG5vdCBiYXNlZApvbiB0aGUgc2VjdXJpdHkgaW5mbyBvZiB0aGUgYGFkdmFuY2VkX3NldHRpbmdzLnBocGAgKGAnc2lnbk1ldGFkYXRhJ2ApLgoKQmVmb3JlIHRoZSBYTUwgbWV0YWRhdGEgaXMgZXhwb3NlZCwgYSBjaGVjayB0YWtlcyBwbGFjZSB0byBlbnN1cmUKdGhhdCB0aGUgaW5mbyB0byBiZSBwcm92aWRlZCBpcyB2YWxpZC4KCkluc3RlYWQgb2YgdXNlIHRoZSBBdXRoIG9iamVjdCwgeW91IGNhbiBkaXJlY3RseSB1c2UKCmBgYHBocAokc2V0dGluZ3MgPSBuZXcgT25lTG9naW5cU2FtbDJcU2V0dGluZ3MoJHNldHRpbmdzSW5mbywgdHJ1ZSk7CmBgYAp0byBnZXQgdGhlIHNldHRpbmdzIG9iamVjdCBhbmQgd2l0aCB0aGUgdHJ1ZSBwYXJhbWV0ZXIgd2Ugd2lsbCBhdm9pZCB0aGUgSWRQIFNldHRpbmdzIHZhbGlkYXRpb24uCgoKIyMjIyMgQXR0cmlidXRlIENvbnN1bWVyIFNlcnZpY2UoQUNTKSBgZW5kcG9pbnRzL2Fjcy5waHBgICMjIyMjCgpUaGlzIGNvZGUgaGFuZGxlcyB0aGUgU0FNTCByZXNwb25zZSB0aGF0IHRoZSBJZFAgZm9yd2FyZHMgdG8gdGhlIFNQIHRocm91Z2ggdGhlIHVzZXIncyBjbGllbnQuCgpgYGBwaHAKPD9waHAKCnNlc3Npb25fc3RhcnQoKTsgIC8vIElNUE9SVEFOVDogVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiZSBhYmxlCiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0b3JlIHRoZSB1c2VyIGRhdGEgaW4gdGhlIHNlc3Npb24uCgpkZWZpbmUoIlRPT0xLSVRfUEFUSCIsICcvdmFyL3d3dy9waHAtc2FtbC8nKTsKcmVxdWlyZV9vbmNlIGRpcm5hbWUoVE9PTEtJVF9QQVRILicvX3Rvb2xraXRfbG9hZGVyLnBocCc7CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CgppZiAoaXNzZXQoJF9TRVNTSU9OKSAmJiBpc3NldCgkX1NFU1NJT05bJ0F1dGhOUmVxdWVzdElEJ10pKSB7CiAgICAkcmVxdWVzdElEID0gJF9TRVNTSU9OWydBdXRoTlJlcXVlc3RJRCddOwp9IGVsc2UgewogICAgJHJlcXVlc3RJRCA9IG51bGw7Cn0KCiRhdXRoLT5wcm9jZXNzUmVzcG9uc2UoJHJlcXVlc3RJRCk7CnVuc2V0KCRfU0VTU0lPTlsnQXV0aE5SZXF1ZXN0SUQnXSk7CgokZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOwoKaWYgKCFlbXB0eSgkZXJyb3JzKSkgewogICAgZWNobyAnPHA+JyAuIGltcGxvZGUoJywgJywgJGVycm9ycykgLiAnPC9wPic7CiAgICBleGl0KCk7Cn0KCmlmICghJGF1dGgtPmlzQXV0aGVudGljYXRlZCgpKSB7CiAgICBlY2hvICI8cD5Ob3QgYXV0aGVudGljYXRlZDwvcD4iOwogICAgZXhpdCgpOwp9CgokX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKJF9TRVNTSU9OWydzYW1sTmFtZUlkJ10gPSAkYXV0aC0+Z2V0TmFtZUlkKCk7CiRfU0VTU0lPTlsnc2FtbE5hbWVJZEZvcm1hdCddID0gJGF1dGgtPmdldE5hbWVJZEZvcm1hdCgpOwokX1NFU1NJT05bJ3NhbWxOYW1laWROYW1lUXVhbGlmaWVyJ10gPSAkYXV0aC0+Z2V0TmFtZUlkTmFtZVF1YWxpZmllcigpOwokX1NFU1NJT05bJ3NhbWxOYW1laWRTUE5hbWVRdWFsaWZpZXInXSA9ICRhdXRoLT5nZXROYW1lSWRTUE5hbWVRdWFsaWZpZXIoKTsKJF9TRVNTSU9OWydzYW1sU2Vzc2lvbkluZGV4J10gPSAkYXV0aC0+Z2V0U2Vzc2lvbkluZGV4KCk7CgppZiAoaXNzZXQoJF9QT1NUWydSZWxheVN0YXRlJ10pICYmIE9uZUxvZ2luXFNhbWwyXFV0aWxzOjpnZXRTZWxmVVJMKCkgIT0gJF9QT1NUWydSZWxheVN0YXRlJ10pIHsKICAgIC8vIFRvIGF2b2lkICdPcGVuIFJlZGlyZWN0JyBhdHRhY2tzLCBiZWZvcmUgZXhlY3V0ZSB0aGUKICAgIC8vIHJlZGlyZWN0aW9uIGNvbmZpcm0gdGhlIHZhbHVlIG9mICRfUE9TVFsnUmVsYXlTdGF0ZSddIGlzIGEgLy8gdHJ1c3RlZCBVUkwuCiAgICAkYXV0aC0+cmVkaXJlY3RUbygkX1BPU1RbJ1JlbGF5U3RhdGUnXSk7Cn0KCiRhdHRyaWJ1dGVzID0gJF9TRVNTSU9OWydzYW1sVXNlcmRhdGEnXTsKJG5hbWVJZCA9ICRfU0VTU0lPTlsnc2FtbE5hbWVJZCddOwoKZWNobyAnPGgxPklkZW50aWZpZWQgdXNlcjogJy4gaHRtbGVudGl0aWVzKCRuYW1lSWQpIC4nPC9oMT4nOwoKaWYgKCFlbXB0eSgkYXR0cmlidXRlcykpIHsKICAgIGVjaG8gJzxoMj4nIC4gXygnVXNlciBhdHRyaWJ1dGVzOicpIC4gJzwvaDI+JzsKICAgIGVjaG8gJzx0YWJsZT48dGhlYWQ+PHRoPicgLiBfKCdOYW1lJykgLiAnPC90aD48dGg+JyAuIF8oJ1ZhbHVlcycpIC4gJzwvdGg+PC90aGVhZD48dGJvZHk+JzsKICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVzIGFzICRhdHRyaWJ1dGVOYW1lID0+ICRhdHRyaWJ1dGVWYWx1ZXMpIHsKICAgICAgICBlY2hvICc8dHI+PHRkPicgLiBodG1sZW50aXRpZXMoJGF0dHJpYnV0ZU5hbWUpIC4gJzwvdGQ+PHRkPjx1bD4nOwogICAgICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVWYWx1ZXMgYXMgJGF0dHJpYnV0ZVZhbHVlKSB7CiAgICAgICAgICAgIGVjaG8gJzxsaT4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVWYWx1ZSkgLiAnPC9saT4nOwogICAgICAgIH0KICAgICAgICBlY2hvICc8L3VsPjwvdGQ+PC90cj4nOwogICAgfQogICAgZWNobyAnPC90Ym9keT48L3RhYmxlPic7Cn0gZWxzZSB7CiAgICBlY2hvIF8oJ05vIGF0dHJpYnV0ZXMgZm91bmQuJyk7Cn0KYGBgCgpUaGUgU0FNTCByZXNwb25zZSBpcyBwcm9jZXNzZWQgYW5kIHRoZW4gY2hlY2tlZCB0aGF0IHRoZXJlIGFyZSBubyBlcnJvcnMuCkl0IGFsc28gdmVyaWZpZXMgdGhhdCB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIGFuZCBzdG9yZWQgdGhlIHVzZXJkYXRhIGluIHNlc3Npb24uCgpBdCB0aGF0IHBvaW50IHRoZXJlIGFyZSB0d28gcG9zc2libGUgYWx0ZXJuYXRpdmVzOgoKIDEuIElmIG5vIGBSZWxheVN0YXRlYCBpcyBwcm92aWRlZCwgd2UgY291bGQgc2hvdyB0aGUgdXNlciBkYXRhIGluIHRoaXMgdmlldwogb3IgaG93ZXZlciB3ZSB3YW50ZWQuCgogMi4gSWYgYFJlbGF5U3RhdGVgIGlzIHByb3ZpZGVkLCBhIHJlZGlyZWN0aW9uIHRha2VzIHBsYWNlLgoKTm90aWNlIHRoYXQgd2Ugc2F2ZWQgdGhlIHVzZXIgZGF0YSBpbiB0aGUgc2Vzc2lvbiBiZWZvcmUgdGhlIHJlZGlyZWN0aW9uIHRvCmhhdmUgdGhlIHVzZXIgZGF0YSBhdmFpbGFibGUgYXQgdGhlIGBSZWxheVN0YXRlYCB2aWV3LgoKCiMjIyMjIyBUaGUgYGdldEF0dHJpYnV0ZXNgIG1ldGhvZCAjIyMjIyMKCkluIG9yZGVyIHRvIHJldHJpZXZlIGF0dHJpYnV0ZXMgd2UgY2FuIHVzZToKCmBgYHBocAokYXR0cmlidXRlcyA9ICRhdXRoLT5nZXRBdHRyaWJ1dGVzKCk7CmBgYAoKV2l0aCB0aGlzIG1ldGhvZCB3ZSBnZXQgYWxsIHRoZSB1c2VyIGRhdGEgcHJvdmlkZWQgYnkgdGhlIElkUCBpbiB0aGUgQXNzZXJ0aW9uCm9mIHRoZSBTQU1MIFJlc3BvbnNlLgoKSWYgd2UgZXhlY3V0ZSBgYGBwcmludF9yKCRhdHRyaWJ1dGVzKWBgYCB3ZSBjb3VsZCBnZXQ6CgpgYGBwaHAKQXJyYXkKKAogICAgW2NuXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IEpvaG4KICAgICAgICApCiAgICBbc25dID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gRG9lCiAgICAgICAgKQogICAgW21haWxdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gam9obi5kb2VAZXhhbXBsZS5jb20KICAgICAgICApCiAgICBbZ3JvdXBzXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IHVzZXJzCiAgICAgICAgICAgIFsxXSA9PiBtZW1iZXJzCiAgICAgICAgKQopCmBgYAoKRWFjaCBhdHRyaWJ1dGUgbmFtZSBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCBpbnRvIGAkYXR0cmlidXRlc2AgdG8gb2J0YWluIHRoZSB2YWx1ZS4gRXZlcnkgYXR0cmlidXRlIHZhbHVlCmlzIGFuIGFycmF5IC0gYSBzaW5nbGUtdmFsdWVkIGF0dHJpYnV0ZSBpcyBhbiBhcnJheSBvZiBhIHNpbmdsZSBlbGVtZW50LgoKClRoZSBmb2xsb3dpbmcgY29kZSBpcyBlcXVpdmFsZW50OgoKYGBgcGhwCiRhdHRyaWJ1dGVzID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsKcHJpbnRfcigkYXR0cmlidXRlc1snY24nXSk7CmBgYAoKYGBgcGhwCnByaW50X3IoJGF1dGgtPmdldEF0dHJpYnV0ZSgnY24nKSk7CmBgYAoKCkJlZm9yZSB0cnlpbmcgdG8gZ2V0IGFuIGF0dHJpYnV0ZSwgY2hlY2sgdGhhdCB0aGUgdXNlciBpcwphdXRoZW50aWNhdGVkLiBJZiB0aGUgdXNlciBpc24ndCBhdXRoZW50aWNhdGVkIG9yIGlmIHRoZXJlIHdlcmUKbm8gYXR0cmlidXRlcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24sIGFuIGVtcHR5IGFycmF5IHdpbGwgYmUKcmV0dXJuZWQuIEZvciBleGFtcGxlLCBpZiB3ZSBjYWxsIHRvIGBnZXRBdHRyaWJ1dGVzYCBiZWZvcmUgYQpgJGF1dGgtPnByb2Nlc3NSZXNwb25zZWAsIHRoZSBgZ2V0QXR0cmlidXRlcygpYCB3aWxsIHJldHVybiBhbgplbXB0eSBhcnJheS4KCgojIyMjIyBTaW5nbGUgTG9nb3V0IFNlcnZpY2UgKFNMUykgYGVuZHBvaW50cy9zbHMucGhwYCAjIyMjIwoKVGhpcyBjb2RlIGhhbmRsZXMgdGhlIExvZ291dCBSZXF1ZXN0IGFuZCB0aGUgTG9nb3V0IFJlc3BvbnNlcy4KCmBgYHBocAo8P3BocAoKc2Vzc2lvbl9zdGFydCgpOyAgLy8gSU1QT1JUQU5UOiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJlIGFibGUKICAgICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgdGhlIHVzZXIgc2Vzc2lvbi4KCmRlZmluZSgiVE9PTEtJVF9QQVRIIiwgJy92YXIvd3d3L3BocC1zYW1sLycpOwpyZXF1aXJlX29uY2UgZGlybmFtZShUT09MS0lUX1BBVEguJy9fdG9vbGtpdF9sb2FkZXIucGhwJzsKCiRhdXRoID0gbmV3IE9uZUxvZ2luXFNhbWwyXEF1dGgoKTsKCmlmIChpc3NldCgkX1NFU1NJT04pICYmIGlzc2V0KCRfU0VTU0lPTlsnTG9nb3V0UmVxdWVzdElEJ10pKSB7CiAgICAkcmVxdWVzdElEID0gJF9TRVNTSU9OWydMb2dvdXRSZXF1ZXN0SUQnXTsKfSBlbHNlIHsKICAgICRyZXF1ZXN0SUQgPSBudWxsOwp9CgokYXV0aC0+cHJvY2Vzc1NMTyhmYWxzZSwgJHJlcXVlc3RJRCk7CgokZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOwoKaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICBlY2hvICdTdWNjZXNzZnVsbHkgbG9nZ2VkIG91dCc7Cn0gZWxzZSB7CiAgICBlY2hvIGltcGxvZGUoJywgJywgJGVycm9ycyk7Cn0KYGBgCgpJZiB0aGUgU0xTIGVuZHBvaW50cyByZWNlaXZlcyBhIExvZ291dCBSZXNwb25zZSwgdGhlIHJlc3BvbnNlIGlzCnZhbGlkYXRlZCBhbmQgdGhlIHNlc3Npb24gY291bGQgYmUgY2xvc2VkCgoKCmBgYHBocAovLyBwYXJ0IG9mIHRoZSBwcm9jZXNzU0xPIG1ldGhvZAoKJGxvZ291dFJlc3BvbnNlID0gbmV3IE9uZUxvZ2luXFNhbWwyXExvZ291dFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MsICRfR0VUWydTQU1MUmVzcG9uc2UnXSk7CmlmICghJGxvZ291dFJlc3BvbnNlLT5pc1ZhbGlkKCRyZXF1ZXN0SWQpKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2ludmFsaWRfbG9nb3V0X3Jlc3BvbnNlJzsKfSBlbHNlIGlmICgkbG9nb3V0UmVzcG9uc2UtPmdldFN0YXR1cygpICE9PSBPbmVMb2dpblxTYW1sMlxDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2xvZ291dF9ub3Rfc3VjY2Vzcyc7Cn0gZWxzZSB7CiAgICBpZiAoISRrZWVwTG9jYWxTZXNzaW9uKSB7CiAgICAgICAgT25lTG9naW5cU2FtbDJcVXRpbHM6OmRlbGV0ZUxvY2FsU2Vzc2lvbigpOwogICAgfQp9CmBgYAoKSWYgdGhlIFNMUyBlbmRwb2ludHMgcmVjZWl2ZXMgYW4gTG9nb3V0IFJlcXVlc3QsIHRoZSByZXF1ZXN0IGlzIHZhbGlkYXRlZCwKdGhlIHNlc3Npb24gaXMgY2xvc2VkIGFuZCBhIExvZ291dCBSZXNwb25zZSBpcyBzZW50IHRvIHRoZSBTTFMgZW5kcG9pbnQgb2YKdGhlIElkUC4KCmBgYHBocAovLyBwYXJ0IG9mIHRoZSBwcm9jZXNzU0xPIG1ldGhvZAoKJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydTQU1MUmVxdWVzdCddKTsKJHJlcXVlc3QgPSBnemluZmxhdGUoJGRlY29kZWQpOwppZiAoIU9uZUxvZ2luXFNhbWwyXExvZ291dFJlcXVlc3Q6OmlzVmFsaWQoJHRoaXMtPl9zZXR0aW5ncywgJHJlcXVlc3QpKSB7CiAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2ludmFsaWRfbG9nb3V0X3JlcXVlc3QnOwp9IGVsc2UgewogICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgIE9uZUxvZ2luXFNhbWwyXFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgIH0KCiAgICAkaW5SZXNwb25zZVRvID0gJHJlcXVlc3QtPmlkOwogICAgJHJlc3BvbnNlQnVpbGRlciA9IG5ldyBPbmVMb2dpblxTYW1sMlxMb2dvdXRSZXNwb25zZSgkdGhpcy0+X3NldHRpbmdzKTsKICAgICRyZXNwb25zZUJ1aWxkZXItPmJ1aWxkKCRpblJlc3BvbnNlVG8pOwogICAgJGxvZ291dFJlc3BvbnNlID0gJHJlc3BvbnNlQnVpbGRlci0+Z2V0UmVzcG9uc2UoKTsKCiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCdTQU1MUmVzcG9uc2UnID0+ICRsb2dvdXRSZXNwb25zZSk7CiAgICBpZiAoaXNzZXQoJF9HRVRbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gJF9HRVRbJ1JlbGF5U3RhdGUnXTsKICAgIH0KCiAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ2xvZ291dFJlc3BvbnNlU2lnbmVkJ10pICYmICRzZWN1cml0eVsnbG9nb3V0UmVzcG9uc2VTaWduZWQnXSkgewogICAgICAgICRzaWduYXR1cmUgPSAkdGhpcy0+YnVpbGRSZXNwb25zZVNpZ25hdHVyZSgkbG9nb3V0UmVzcG9uc2UsICRwYXJhbWV0ZXJzWydSZWxheVN0YXRlJ10sICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ10pOwogICAgICAgICRwYXJhbWV0ZXJzWydTaWdBbGcnXSA9ICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ107CiAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ25hdHVyZSddID0gJHNpZ25hdHVyZTsKICAgIH0KCiAgICAkdGhpcy0+cmVkaXJlY3RUbygkdGhpcy0+Z2V0U0xPdXJsKCksICRwYXJhbWV0ZXJzKTsKfQpgYGAKCklmIHlvdSBhcmVuJ3QgdXNpbmcgdGhlIGRlZmF1bHQgUEhQIHNlc3Npb24sIG9yIG90aGVyd2lzZSBuZWVkIGEgbWFudWFsCndheSB0byBkZXN0cm95IHRoZSBzZXNzaW9uLCB5b3UgY2FuIHBhc3MgYSBjYWxsYmFjayBtZXRob2QgdG8gdGhlCmBwcm9jZXNzU0xPYCBtZXRob2QgYXMgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIKCmBgYHBocAoka2VlcExvY2FsU2Vzc2lvbiA9IEZhbHNlOwokY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBEZXN0cm95IHVzZXIgc2Vzc2lvbgp9OwoKJGF1dGgtPnByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24sIG51bGwsIGZhbHNlLCAkY2FsbGJhY2spOwpgYGAKCgpJZiB3ZSBkb24ndCB3YW50IHRoYXQgYHByb2Nlc3NTTE9gIHRvIGRlc3Ryb3kgdGhlIHNlc3Npb24sIHBhc3MgYSB0cnVlCnBhcmFtZXRlciB0byB0aGUgYHByb2Nlc3NTTE9gIG1ldGhvZAoKYGBgcGhwCiRrZWVwTG9jYWxTZXNzaW9uID0gVHJ1ZTsKJGF1dGgtPnByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24pOwpgYGAKCiMjIyMgSW5pdGlhdGUgU0xPICMjIyMKCkluIG9yZGVyIHRvIHNlbmQgYSBMb2dvdXQgUmVxdWVzdCB0byB0aGUgSWRQOgoKYGBgcGhwCjw/cGhwCgpkZWZpbmUoIlRPT0xLSVRfUEFUSCIsICcvdmFyL3d3dy9waHAtc2FtbC8nKTsKcmVxdWlyZV9vbmNlKFRPT0xLSVRfUEFUSCAuICdfdG9vbGtpdF9sb2FkZXIucGhwJyk7CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCk7CgokYXV0aC0+bG9nb3V0KCk7ICAgLy8gTWV0aG9kIHRoYXQgc2VudCB0aGUgTG9nb3V0IFJlcXVlc3QuCmBgYAoKQWxzbyB0aGVyZSBhcmUgZWlnaHQgb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQ6CiogYCRyZXR1cm5Ub2AgLSBUaGUgdGFyZ2V0IFVSTCB0aGUgdXNlciBzaG91bGQgYmUgcmV0dXJuZWQgdG8gYWZ0ZXIgbG9nb3V0LgoqIGAkcGFyYW1ldGVyc2AgLSBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBHRVQuCiogYCRuYW1lX2lkYCAtIFRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBMb2dvdXRSZXF1ZXN0LiBJZiBgbmFtZV9pZGAgcGFyYW1ldGVyIGlzIG5vdCBzZXQgYW5kIHRoZSBhdXRoIG9iamVjdCBwcm9jZXNzZWQgYQpTQU1MIFJlc3BvbnNlIHdpdGggYSBgTmFtZUlkYCwgdGhlbiB0aGlzIGBOYW1lSWRgIHdpbGwgYmUgdXNlZC4KKiBgJHNlc3Npb25faW5kZXhgIC0gU2Vzc2lvbkluZGV4IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiBvZiB0aGUgdXNlci4KKiBgJHN0YXlgIC0gVHJ1ZSBpZiB3ZSB3YW50IHRvIHN0YXkgKHJldHVybnMgdGhlIHVybCBzdHJpbmcpIEZhbHNlIHRvIHJlZGlyZWN0LgoqIGAkbmFtZUlkRm9ybWF0YCAtIFRoZSBOYW1lSUQgRm9ybWF0IHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgoqIGAkbmFtZUlkTmFtZVF1YWxpZmllcmAgLSBUaGUgTmFtZUlEIE5hbWVRdWFsaWZpZXIgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiogYCRuYW1lSWRTUE5hbWVRdWFsaWZpZXJgIC0gVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgoKVGhlIExvZ291dCBSZXF1ZXN0IHdpbGwgYmUgc2VudCBzaWduZWQgb3IgdW5zaWduZWQgYmFzZWQgb24gdGhlIHNlY3VyaXR5CmluZm8gb2YgdGhlIGBhZHZhbmNlZF9zZXR0aW5ncy5waHBgIChgJ2xvZ291dFJlcXVlc3RTaWduZWQnYCkuCgpUaGUgSWRQIHdpbGwgcmV0dXJuIHRoZSBMb2dvdXQgUmVzcG9uc2UgdGhyb3VnaCB0aGUgdXNlcidzIGNsaWVudCB0byB0aGUKU2luZ2xlIExvZ291dCBTZXJ2aWNlIG9mIHRoZSBTUC4KSWYgd2UgZG8gbm90IHNldCBhIGAndXJsJ2AgcGFyYW0gaW4gdGhlIGxvZ291dCBtZXRob2QgYW5kIGFyZSB1c2luZyB0aGUKZGVmYXVsdCBTTFMgcHJvdmlkZWQgYnkgdGhlIHRvb2xraXQgKGBlbmRwb2ludHMvc2xzLnBocGApLCB0aGVuIHRoZSBTTFMKZW5kcG9pbnQgd2lsbCByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgZmlsZSB0aGF0IGxhdW5jaGVkIHRoZSBTTE8gcmVxdWVzdC4KCldlIGNhbiBzZXQgYW4gYCdyZXR1cm5UbydgIHVybCB0byBjaGFuZ2UgdGhlIHdvcmtmbG93IGFuZCByZWRpcmVjdCB0aGUgdXNlcgp0byBvdGhlciBwaHAgZmlsZS4KCmBgYHBocAokbmV3VGFyZ2V0VXJsID0gJ2h0dHA6Ly9leGFtcGxlLmNvbS9sb2dnZWRPdXQucGhwJzsKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokYXV0aC0+bG9nb3V0KCRuZXdUYXJnZXRVcmwpOwpgYGAKQSBtb3JlIGNvbXBsZXggbG9nb3V0IHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzOgpgYGAKJGF1dGggPSBuZXcgT25lTG9naW5cU2FtbDJcQXV0aCgpOwokcmV0dXJuVG8gPSBudWxsOwokcGFyYW1ldGVycyA9IGFycmF5KCk7CiRuYW1lSWQgPSBudWxsOwokc2Vzc2lvbkluZGV4ID0gbnVsbDsKJG5hbWVJZEZvcm1hdCA9IG51bGw7CiRuYW1lSWROYW1lUXVhbGlmaWVyID0gbnVsbDsKJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9IG51bGw7CgppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sTmFtZUlkJ10pKSB7CiAgICAkbmFtZUlkID0gJF9TRVNTSU9OWydzYW1sTmFtZUlkJ107Cn0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnc2FtbFNlc3Npb25JbmRleCddKSkgewogICAgJHNlc3Npb25JbmRleCA9ICRfU0VTU0lPTlsnc2FtbFNlc3Npb25JbmRleCddOwp9CmlmIChpc3NldCgkX1NFU1NJT05bJ3NhbWxOYW1lSWRGb3JtYXQnXSkpIHsKICAgICRuYW1lSWRGb3JtYXQgPSAkX1NFU1NJT05bJ3NhbWxOYW1lSWRGb3JtYXQnXTsKfQppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sTmFtZUlkTmFtZVF1YWxpZmllciddKSkgewogICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgPSAkX1NFU1NJT05bJ3NhbWxOYW1lSWROYW1lUXVhbGlmaWVyJ107Cn0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnc2FtbE5hbWVJZFNQTmFtZVF1YWxpZmllciddKSkgewogICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9ICRfU0VTU0lPTlsnc2FtbE5hbWVJZFNQTmFtZVF1YWxpZmllciddOwp9CiRhdXRoLT5sb2dvdXQoJHJldHVyblRvLCAkcGFyYW1ldGVycywgJG5hbWVJZCwgJHNlc3Npb25JbmRleCwgZmFsc2UsICRuYW1lSWRGb3JtYXQsICRuYW1lSWROYW1lUXVhbGlmaWVyLCAkbmFtZUlkU1BOYW1lUXVhbGlmaWVyKTsKYGBgCgpJZiBhIG1hdGNoIG9uIHRoZSBmdXR1cmUgTG9nb3V0UmVzcG9uc2UgSUQgYW5kIHRoZSBMb2dvdXRSZXF1ZXN0IElEIHRvIGJlIHNlbnQgaXMgcmVxdWlyZWQsIHRoYXQgTG9nb3V0UmVxdWVzdCBJRCBtdXN0IHRvIGJlIGV4dHJhY3RlZCBhbmQgc3RvcmVkLgoKYGBgcGhwCiRzbG9CdWlsdFVybCA9ICRhdXRoLT5sb2dvdXQobnVsbCwgJHBhcmFtZXRlcnMsICRuYW1lSWQsICRzZXNzaW9uSW5kZXgsIHRydWUpOwokX1NFU1NJT05bJ0xvZ291dFJlcXVlc3RJRCddID0gJGF1dGgtPmdldExhc3RSZXF1ZXN0SUQoKTsKaGVhZGVyKCdQcmFnbWE6IG5vLWNhY2hlJyk7CmhlYWRlcignQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZScpOwpoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHNsb0J1aWx0VXJsKTsKZXhpdCgpOwpgYGAKCiMjIyMgRXhhbXBsZSBvZiBhIHZpZXcgdGhhdCBpbml0aWF0ZXMgdGhlIFNTTyByZXF1ZXN0IGFuZCBoYW5kbGVzIHRoZSByZXNwb25zZSAoaXMgdGhlIGFjcyB0YXJnZXQpICMjIyMKCldlIGNhbiBjb2RlIGEgdW5pcXVlIGZpbGUgdGhhdCBpbml0aWF0ZXMgdGhlIFNTTyBwcm9jZXNzLCBoYW5kbGUgdGhlIHJlc3BvbnNlLCBnZXQgdGhlIGF0dHJpYnV0ZXMsIGluaXRpYXRlCnRoZSBTTE8gYW5kIHByb2Nlc3NlcyB0aGUgbG9nb3V0IHJlc3BvbnNlLgoKTm90ZTogUmV2aWV3IHRoZSBgZGVtbzFgIGZvbGRlciB0aGF0IGNvbnRhaW5zIHRoYXQgdXNlIGNhc2U7IGluIGEgbGF0ZXIgc2VjdGlvbiB3ZQpleHBsYWluIHRoZSBkZW1vMSB1c2UgY2FzZSBmdXJ0aGVyIGluIGRldGFpbC4KCmBgYHBocAo8P3BocAoKc2Vzc2lvbl9zdGFydCgpOyAgICAvLyBJbml0aWFsaXplIHRoZSBzZXNzaW9uLCB3ZSBkbyB0aGF0IGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgcHJvY2Vzc1Jlc3BvbnNlIGFuZCBwcm9jZXNzU0xPCiAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBjb3VsZCBtYW5pcHVsYXRlL2Nsb3NlIHRoYXQgc2Vzc2lvbgoKcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL190b29sa2l0X2xvYWRlci5waHAnOyAvLyBMb2FkIFNhbWwyIGFuZCB4bWxzZWNsaWJzCnJlcXVpcmVfb25jZSAnc2V0dGluZ3MucGhwJzsgICAgLy8gTG9hZCB0aGUgc2V0dGluZyBpbmZvIGFzIGFuIEFycmF5CgokYXV0aCA9IG5ldyBPbmVMb2dpblxTYW1sMlxBdXRoKCRzZXR0aW5nc0luZm8pOyAgLy8gSW5pdGlhbGl6ZSB0aGUgU1AgU0FNTCBpbnN0YW5jZQoKaWYgKGlzc2V0KCRfR0VUWydzc28nXSkpIHsgICAgLy8gU1NPIGFjdGlvbi4gIFdpbGwgc2VuZCBhbiBBdXRoTlJlcXVlc3QgdG8gdGhlIElkUAogICAgJGF1dGgtPmxvZ2luKCk7Cn0gZWxzZSBpZiAoaXNzZXQoJF9HRVRbJ3NzbzInXSkpIHsgICAgICAgICAgICAgIC8vIEFub3RoZXIgU1NPIGFjdGlvbgogICAgJHJldHVyblRvID0gJHNwQmFzZVVybC4nL2RlbW8xL2F0dHJzLnBocCc7ICAvLyBidXQgc2V0IGEgY3VzdG9tIFJlbGF5U3RhdGUgVVJMCiAgICAkYXV0aC0+bG9naW4oJHJldHVyblRvKTsKfSBlbHNlIGlmIChpc3NldCgkX0dFVFsnc2xvJ10pKSB7ICAvLyBTTE8gYWN0aW9uLiBXaWxsIHNlbnQgYSBMb2dvdXQgUmVxdWVzdCB0byBJZFAKICAgICRhdXRoLT5sb2dvdXQoKTsKfSBlbHNlIGlmIChpc3NldCgkX0dFVFsnYWNzJ10pKSB7ICAvLyBBc3NlcnRpb24gQ29uc3VtZXIgU2VydmljZQogICAgJGF1dGgtPnByb2Nlc3NSZXNwb25zZSgpOyAgICAgIC8vIFByb2Nlc3MgdGhlIFJlc3BvbnNlIG9mIHRoZSBJZFAsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBwdXQgdGhlbiBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICRfU0VTU0lPTlsnc2FtbFVzZXJkYXRhJ10KCiAgICAkZXJyb3JzID0gJGF1dGgtPmdldEVycm9ycygpOyAgLy8gVGhpcyBtZXRob2QgcmVjZWl2ZXMgYW4gYXJyYXkgd2l0aCB0aGUgZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBjb3VsZCB0b29rIHBsYWNlIGR1cmluZyB0aGUgcHJvY2VzcwoKICAgIGlmICghZW1wdHkoJGVycm9ycykpIHsKICAgICAgICBlY2hvICc8cD4nIC4gaW1wbG9kZSgnLCAnLCAkZXJyb3JzKSAuICc8L3A+JzsKICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBpZiB0aGUgcmVzcG9uc2Ugd2FzCiAgICBpZiAoISRhdXRoLT5pc0F1dGhlbnRpY2F0ZWQoKSkgeyAgICAgIC8vIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQgYW5kIHRoZSB1c2VyCiAgICAgICAgZWNobyAnPHA+Tm90IGF1dGhlbnRpY2F0ZWQ8L3A+JzsgIC8vIGRhdGEgcmV0cmlldmVkIG9yIG5vdAogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAkX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddID0gJGF1dGgtPmdldEF0dHJpYnV0ZXMoKTsgLy8gUmV0cmlldmVzIHVzZXIgZGF0YQogICAgaWYgKGlzc2V0KCRfUE9TVFsnUmVsYXlTdGF0ZSddKSAmJiBPbmVMb2dpblxTYW1sMlxVdGlsczo6Z2V0U2VsZlVSTCgpICE9ICRfUE9TVFsnUmVsYXlTdGF0ZSddKSB7CiAgICAgICAgLy8gVG8gYXZvaWQgJ09wZW4gUmVkaXJlY3QnIGF0dGFja3MsIGJlZm9yZSBleGVjdXRlIHRoZQogICAgICAgIC8vIHJlZGlyZWN0aW9uIGNvbmZpcm0gdGhlIHZhbHVlIG9mICRfUE9TVFsnUmVsYXlTdGF0ZSddIGlzIGEgLy8gdHJ1c3RlZCBVUkwuCiAgICAgICAgJGF1dGgtPnJlZGlyZWN0VG8oJF9QT1NUWydSZWxheVN0YXRlJ10pOyAgLy8gUmVkaXJlY3QgaWYgdGhlcmUgaXMgYQogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbGF5U3RhdGUgc2V0Cn0gZWxzZSBpZiAoaXNzZXQoJF9HRVRbJ3NscyddKSkgeyAgIC8vIFNpbmdsZSBMb2dvdXQgU2VydmljZQogICAgJGF1dGgtPnByb2Nlc3NTTE8oKTsgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBMb2dvdXQgUmVxdWVzdCAmIExvZ291dCBSZXNwb25zZQogICAgJGVycm9ycyA9ICRhdXRoLT5nZXRFcnJvcnMoKTsgLy8gUmV0cmlldmVzIHBvc3NpYmxlIHZhbGlkYXRpb24gZXJyb3JzCiAgICBpZiAoZW1wdHkoJGVycm9ycykpIHsKICAgICAgICBlY2hvICc8cD5TdWNjZXNzZnVsbHkgbG9nZ2VkIG91dDwvcD4nOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8cD4nIC4gaHRtbGVudGl0aWVzKGltcGxvZGUoJywgJywgJGVycm9ycykpIC4gJzwvcD4nOwogICAgfQp9CgppZiAoaXNzZXQoJF9TRVNTSU9OWydzYW1sVXNlcmRhdGEnXSkpIHsgICAvLyBJZiB0aGVyZSBpcyB1c2VyIGRhdGEgd2UgcHJpbnQgaXQuCiAgICBpZiAoIWVtcHR5KCRfU0VTU0lPTlsnc2FtbFVzZXJkYXRhJ10pKSB7CiAgICAgICAgJGF0dHJpYnV0ZXMgPSAkX1NFU1NJT05bJ3NhbWxVc2VyZGF0YSddOwogICAgICAgIGVjaG8gJ1lvdSBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8YnI+JzsKICAgICAgICBlY2hvICc8dGFibGU+PHRoZWFkPjx0aD5OYW1lPC90aD48dGg+VmFsdWVzPC90aD48L3RoZWFkPjx0Ym9keT4nOwogICAgICAgIGZvcmVhY2ggKCRhdHRyaWJ1dGVzIGFzICRhdHRyaWJ1dGVOYW1lID0+ICRhdHRyaWJ1dGVWYWx1ZXMpIHsKICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVOYW1lKSAuICc8L3RkPjx0ZD48dWw+JzsKICAgICAgICAgICAgZm9yZWFjaCAoJGF0dHJpYnV0ZVZhbHVlcyBhcyAkYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICAgICAgICAgIGVjaG8gJzxsaT4nIC4gaHRtbGVudGl0aWVzKCRhdHRyaWJ1dGVWYWx1ZSkgLiAnPC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzwvdWw+PC90ZD48L3RyPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvdGJvZHk+PC90YWJsZT4nOwogICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCB1c2VyIGRhdGEsIHdlIG5vdGlmeQogICAgICAgIGVjaG8gIjxwPllvdSBkb24ndCBoYXZlIGFueSBhdHRyaWJ1dGU8L3A+IjsKICAgIH0KCiAgICBlY2hvICc8cD48YSBocmVmPSI/c2xvIiA+TG9nb3V0PC9hPjwvcD4nOyAvLyBQcmludCBzb21lIGxpbmtzIHdpdGggcG9zc2libGUKfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjdGlvbnMKICAgIGVjaG8gJzxwPjxhIGhyZWY9Ij9zc28iID5Mb2dpbjwvYT48L3A+JzsKICAgIGVjaG8gJzxwPjxhIGhyZWY9Ij9zc28yIiA+TG9naW4gYW5kIGFjY2VzcyB0byBhdHRycy5waHAgcGFnZTwvYT48L3A+JzsKfQpgYGAKCiMjIyMgVVJMLWd1ZXNzaW5nIG1ldGhvZHMgIyMjIwoKcGhwLXNhbWwgdG9vbGtpdCB1c2VzIGEgYnVuY2ggb2YgbWV0aG9kcyBpbiBPbmVMb2dpblxTYW1sMlxVdGlscyB0aGF0IHRyeSB0byBndWVzcyB0aGUgVVJMIHdoZXJlIHRoZSBTQU1MIG1lc3NhZ2VzIGFyZSBwcm9jZXNzZWQuCgoqIGBnZXRTZWxmSG9zdGAgUmV0dXJucyB0aGUgY3VycmVudCBob3N0LgoqIGBnZXRTZWxmUG9ydGAgUmV0dXJuIHRoZSBwb3J0IG51bWJlciB1c2VkIGZvciB0aGUgcmVxdWVzdAoqIGBpc0hUVFBTYCBDaGVja3MgaWYgdGhlIHByb3RvY29sIGlzIGh0dHBzIG9yIGh0dHAuCiogYGdldFNlbGZVUkxob3N0YCBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydCAoaWYgZGlmZmVyZW50IHRoYW4gY29tbW9uIHBvcnRzKS4KKiBgZ2V0U2VsZlVSTGAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcgKyBxdWVyeS4KKiBgZ2V0U2VsZlVSTE5vUXVlcnlgIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgoqIGBnZXRTZWxmUm91dGVkVVJMTm9RdWVyeWAgUmV0dXJucyB0aGUgcm91dGVkIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgoKZ2V0U2VsZlVSTE5vUXVlcnkgYW5kIGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5IGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgY3VycmVudFVSTCBpbiBvcmRlciB0byB2YWxpZGF0ZSBTQU1MIGVsZW1lbnRzIGxpa2UgRGVzdGluYXRpb24gb3IgUmVjaXBpZW50LgoKV2hlbiB0aGUgUEhQIGFwcGxpY2F0aW9uIGlzIGJlaGluZCBhIHByb3h5IG9yIGEgbG9hZCBiYWxhbmNlciB3ZSBjYW4gZXhlY3V0ZSBgc2V0UHJveHlWYXJzKHRydWUpYCBhbmQgYHNldFNlbGZQb3J0YCBhbmQgYGlzSFRUUFNgIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBgJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfUE9SVCJdYCBhbmQgYCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ11gIHZhcnMgKG90aGVyd2lzZSB0aGV5IGFyZSBpZ25vcmVkKS4KCkFsc28gYSBkZXZlbG9wZXIgY2FuIHVzZSBgc2V0U2VsZlByb3RvY29sYCwgYHNldFNlbGZIb3N0YCwgYHNldFNlbGZQb3J0YCBhbmQgYGdldEJhc2VVUkxQYXRoYCB0byBkZWZpbmUgYSBzcGVjaWZpYyB2YWx1ZSB0byBiZSByZXR1cm5lZCBieSBgaXNIVFRQU2AsIGBnZXRTZWxmSG9zdGAsIGBnZXRTZWxmUG9ydGAgYW5kIGBnZXRCYXNlVVJMUGF0aGAuIEFuZCBkZWZpbmUgYSBgc2V0QmFzZVBhdGhgIHRvIGJlIHVzZWQgb24gdGhlIGBnZXRTZWxmVVJMYCBhbmQgYGdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5YCB0byByZXBsYWNlIHRoZSBkYXRhIGV4dHJhY3RlZCBmcm9tIGAkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXWAuCgpBdCB0aGUgc2V0dGluZ3MgdGhlIGRldmVsb3BlciB3aWxsIGJlIGFibGUgdG8gc2V0IGEgYCdiYXNldXJsJ2AgcGFyYW1ldGVyIHRoYXQgYXV0b21hdGljYWxseSB3aWxsIHVzZSBgc2V0QmFzZVVSTGAgdG8gc2V0IHZhbHVlcyBmb3IgYHNldFNlbGZQcm90b2NvbGAsIGBzZXRTZWxmSG9zdGAsIGBzZXRTZWxmUG9ydGAgYW5kIGBzZXRCYXNlVVJMUGF0aGAuCgoKIyMjIFdvcmtpbmcgYmVoaW5kIGxvYWQgYmFsYW5jZXIgIyMjCgpJcyBwb3NzaWJsZSB0aGF0IGFzc2VydGluZyByZXF1ZXN0IFVSTCBhbmQgRGVzdGluYXRpb24gYXR0cmlidXRlIG9mIFNBTUwgcmVzcG9uc2UgZmFpbHMgd2hlbiB3b3JraW5nIGJlaGluZCBsb2FkIGJhbGFuY2VyIHdpdGggU1NMIG9mZmxvYWQuCgpZb3Ugc2hvdWxkIGJlIGFibGUgdG8gd29ya2Fyb3VuZCB0aGlzIGJ5IGNvbmZpZ3VyaW5nIHlvdXIgc2VydmVyIHNvIHRoYXQgaXQgaXMgYXdhcmUgb2YgdGhlIHByb3h5IGFuZCByZXR1cm5zIHRoZSBvcmlnaW5hbCB1cmwgd2hlbiByZXF1ZXN0ZWQuCgpPciBieSB1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBvbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KCgojIyMgU1AgS2V5IHJvbGxvdmVyICMjIwoKSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleSB5b3UgY2FuIGRlZmluZSB0aGUgbmV3IHg1MDljZXJ0IGFzIGAkc2V0dGluZ3NbJ3NwJ11bJ3g1MDljZXJ0TmV3J11gIGFuZCBpdCB3aWxsIGJlCnB1Ymxpc2hlZCBvbiB0aGUgU1AgbWV0YWRhdGEgc28gSWRlbnRpdHkgUHJvdmlkZXJzIGNhbiByZWFkIHRoZW0gYW5kIGdldCByZWFkeSBmb3Igcm9sbG92ZXIuCgoKIyMjIElkUCB3aXRoIG11bHRpcGxlIGNlcnRpZmljYXRlcyAjIyMKCkluIHNvbWUgc2NlbmFyaW9zIHRoZSBJZFAgdXNlcyBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIGZvcgpzaWduaW5nL2VuY3J5cHRpb24sIG9yIGlzIHVuZGVyIGtleSByb2xsb3ZlciBwaGFzZSBhbmQgbW9yZSB0aGFuIG9uZSBjZXJ0aWZpY2F0ZSBpcyBwdWJsaXNoZWQgb24gSWRQIG1ldGFkYXRhLgoKSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoZSBgJHNldHRpbmdzWydpZHAnXVsneDUwOWNlcnRNdWx0aSddYCBwYXJhbWV0ZXIuCgpXaGVuIHRoYXQgcGFyYW1ldGVyIGlzIHVzZWQsIGAneDUwOWNlcnQnYCBhbmQgYCdjZXJ0RmluZ2VycHJpbnQnYCB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSB0b29sa2l0LgoKVGhlIGB4NTA5Y2VydE11bHRpYCBpcyBhbiBhcnJheSB3aXRoIDIga2V5czoKLSBgc2lnbmluZ2AuIEFuIGFycmF5IG9mIGNlcnRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIElkUCBzaWduYXR1cmUKLSBgZW5jcnlwdGlvbmAgQW4gYXJyYXkgd2l0aCBvbmUgdW5pcXVlIGNlcnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIElkUAoKCiMjIyBSZXBsYXkgYXR0YWNrcyAjIyMKCkluIG9yZGVyIHRvIGF2b2lkIHJlcGxheSBhdHRhY2tzLCB5b3UgY2FuIHN0b3JlIHRoZSBJRCBvZiB0aGUgU0FNTCBtZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCwgdG8gYXZvaWQgcHJvY2Vzc2luZyB0aGVtIHR3aWNlLiBTaW5jZSB0aGUgTWVzc2FnZXMgZXhwaXJlcyBhbmQgd2lsbCBiZSBpbnZhbGlkYXRlZCBkdWUgdGhhdCBmYWN0LCB5b3UgZG9uJ3QgbmVlZCB0byBzdG9yZSB0aG9zZSBJRHMgbG9uZ2VyIHRoYW4gdGhlIHRpbWUgZnJhbWUgdGhhdCB5b3UgY3VycmVudGx5IGFjY2VwdGluZy4KCkdldCB0aGUgSUQgb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIG1lc3NhZ2UvYXNzZXJ0aW9uIHdpdGggdGhlIGBnZXRMYXN0TWVzc2FnZUlkYC9gZ2V0TGFzdEFzc2VydGlvbklkYCBtZXRob2RzIG9mIHRoZSBBdXRoIG9iamVjdC4KCgojIyMgTWFpbiBjbGFzc2VzIGFuZCBtZXRob2RzICMjIwoKRGVzY3JpYmVkIGJlbG93IGFyZSB0aGUgbWFpbiBjbGFzc2VzIGFuZCBtZXRob2RzIHRoYXQgY2FuIGJlIGludm9rZWQuCgojIyMjIFNhbWwyIGxpYnJhcnkgIyMjIwoKTGV0cyBkZXNjcmliZSBub3cgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgb2YgdGhlIFNBTUwyIGxpYnJhcnkuCgojIyMjIyBPbmVMb2dpblxTYW1sMlxBdXRoIC0gQXV0aC5waHAgIyMjIyMKCk1haW4gY2xhc3Mgb2YgU0FNTCBQSFAgVG9vbGtpdAoKICogYEF1dGhgIC0gSW5pdGlhbGl6ZXMgdGhlIFNQIFNBTUwgaW5zdGFuY2UKICogYGxvZ2luYCAtIEluaXRpYXRlcyB0aGUgU1NPIHByb2Nlc3MuCiAqIGBsb2dvdXRgIC0gSW5pdGlhdGVzIHRoZSBTTE8gcHJvY2Vzcy4KICogYHByb2Nlc3NSZXNwb25zZWAgLSBQcm9jZXNzIHRoZSBTQU1MIFJlc3BvbnNlIHNlbnQgYnkgdGhlIElkUC4KICogYHByb2Nlc3NTTE9gIC0gUHJvY2VzcyB0aGUgU0FNTCBMb2dvdXQgUmVzcG9uc2UgLyBMb2dvdXQgUmVxdWVzdCBzZW50IGJ5IHRoZQogICBJZFAuCiAqIGByZWRpcmVjdFRvYCAtIFJlZGlyZWN0cyB0aGUgdXNlciB0byB0aGUgdXJsIHBhc3QgYnkgcGFyYW1ldGVyIG9yIHRvIHRoZSB1cmwKICAgdGhhdCB3ZSBkZWZpbmVkIGluIG91ciBTU08gUmVxdWVzdC4KICogYGlzQXV0aGVudGljYXRlZGAgLSBDaGVja3MgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAqIGBnZXRBdHRyaWJ1dGVzYCAtIFJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMuCiAqIGBnZXRBdHRyaWJ1dGVgIC0gUmV0dXJucyB0aGUgcmVxdWVzdGVkIFNBTUwgYXR0cmlidXRlCiAqIGBnZXROYW1lSWRgIC0gUmV0dXJucyB0aGUgbmFtZUlECiAqIGBnZXROYW1lSWRGb3JtYXRgIC0gR2V0cyB0aGUgTmFtZUlEIEZvcm1hdCBwcm92aWRlZCBieSB0aGUgU0FNTCByZXNwb25zZSBmcm9tIHRoZSBJZFAuCiAqIGBnZXROYW1lSWROYW1lUXVhbGlmaWVyYCAtIEdldHMgdGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgU3RyaW5nLgogKiBgZ2V0TmFtZUlkU1BOYW1lUXVhbGlmaWVyYCAtIEdldHMgdGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgU3RyaW5nLgogKiBgZ2V0U2Vzc2lvbkluZGV4YCAtIEdldHMgdGhlIFNlc3Npb25JbmRleCBmcm9tIHRoZSBBdXRoblN0YXRlbWVudC4KICogYGdldEVycm9yc2AgLSBSZXR1cm5zIGlmIHRoZXJlIHdlcmUgYW55IGVycm9yCiAqIGBnZXRTU091cmxgIC0gR2V0cyB0aGUgU1NPIHVybC4KICogYGdldFNMT3VybGAgLSBHZXRzIHRoZSBTTE8gdXJsLgogKiBgZ2V0TGFzdFJlcXVlc3RJRGAgLSBUaGUgSUQgb2YgdGhlIGxhc3QgUmVxdWVzdCBTQU1MIG1lc3NhZ2UgZ2VuZXJhdGVkLgogKiBgYnVpbGRSZXF1ZXN0U2lnbmF0dXJlYCAtIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVxdWVzdAogKiBgYnVpbGRSZXNwb25zZVNpZ25hdHVyZWAgLSBHZW5lcmF0ZXMgdGhlIFNpZ25hdHVyZSBmb3IgYSBTQU1MIFJlc3BvbnNlCiAqIGBnZXRTZXR0aW5nc2AgLSBSZXR1cm5zIHRoZSBzZXR0aW5ncyBpbmZvCiAqIGBzZXRTdHJpY3RgIC0gU2V0IHRoZSBzdHJpY3QgbW9kZSBhY3RpdmUvZGlzYWJsZQogKiBgZ2V0TGFzdFJlcXVlc3RJRGAgLSBHZXRzIHRoZSBJRCBvZiB0aGUgbGFzdCBBdXRoTlJlcXVlc3Qgb3IgTG9nb3V0UmVxdWVzdCBnZW5lcmF0ZWQgYnkgdGhlIFNlcnZpY2UgUHJvdmlkZXIuCiAqIGBnZXRMYXN0UmVxdWVzdFhNTGAgLSBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXF1ZXN0IChBdXRoTlJlcXVlc3QsIExvZ291dFJlcXVlc3QpCiAqIGBnZXRMYXN0UmVzcG9uc2VYTUxgIC0gUmV0dXJucyB0aGUgbW9zdCByZWNlbnRseS1jb25zdHJ1Y3RlZC9wcm9jZXNzZWQgWE1MIFNBTUwgcmVzcG9uc2UgKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLiBJZiB0aGUgU0FNTFJlc3BvbnNlIGhhZCBhbiBlbmNyeXB0ZWQgYXNzZXJ0aW9uLCBkZWNyeXB0cyBpdC4KKiBgYnVpbGRBdXRoblJlcXVlc3RgIC0gQ3JlYXRlcyBhbiBBdXRoblJlcXVlc3QKKiBgYnVpbGRMb2dvdXRSZXF1ZXN0YCAtIENyZWF0ZXMgYW4gTG9nb3V0UmVxdWVzdAoqIGBidWlsZExvZ291dFJlc3BvbnNlYCAtIENvbnN0cnVjdHMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0IChJbml0aWFsaXplIHBhcmFtcyBmcm9tIHNldHRpbmdzIGFuZCBpZiBwcm92aWRlZCBsb2FkIHRoZSBMb2dvdXQgUmVzcG9uc2UpLgoKCiMjIyMjIE9uZUxvZ2luXFNhbWwyXEF1dGhuUmVxdWVzdCAtIGBBdXRoblJlcXVlc3QucGhwYCAjIyMjIwoKU0FNTCAyIEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgY2xhc3MKCiAqIGBBdXRoblJlcXVlc3RgIC0gQ29uc3RydWN0cyB0aGUgYEF1dGhuUmVxdWVzdGAgb2JqZWN0LgogKiBgZ2V0UmVxdWVzdGAgLSBSZXR1cm5zIGRlZmxhdGVkLCBiYXNlNjQgZW5jb2RlZCwgdW5zaWduZWQgYEF1dGhuUmVxdWVzdGAuCiAqIGBnZXRJZGAgLSBSZXR1cm5zIHRoZSBgQXV0aE5SZXF1ZXN0YCBJRC4KICogYGdldFhNTGAgLSBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdC4KCiMjIyMjIE9uZUxvZ2luXFNhbWwyXFJlc3BvbnNlIC0gYFJlc3BvbnNlLnBocGAgIyMjIyMKClNBTUwgMiBBdXRoZW50aWNhdGlvbiBSZXNwb25zZSBjbGFzcwoKICogYFJlc3BvbnNlYCAtIENvbnN0cnVjdHMgdGhlIFNBTUwgUmVzcG9uc2Ugb2JqZWN0LgogKiBgaXNWYWxpZGAgLSBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIFJlc3BvbnNlIGlzIHZhbGlkIHVzaW5nIHRoZSBjZXJ0aWZpY2F0ZS4KICogYGNoZWNrU3RhdHVzYCAtIENoZWNrcyBpZiB0aGUgU3RhdHVzIGlzIHN1Y2Nlc3MuCiAqIGBnZXRBdWRpZW5jZXNgIC0gR2V0cyB0aGUgYXVkaWVuY2VzLgogKiBgZ2V0SXNzdWVyc2AgLSBHZXRzIHRoZSBJc3N1ZXJzIChmcm9tIFJlc3BvbnNlIGFuZCBBc3NlcnRpb24pCiAqIGBnZXROYW1lSWREYXRhYCAtIEdldHMgdGhlIE5hbWVJRCBEYXRhIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlCiAgIElkUC4KICogYGdldE5hbWVJZGAgLSBHZXRzIHRoZSBOYW1lSUQgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogKiBgZ2V0TmFtZUlkRm9ybWF0YCAtIEdldHMgdGhlIE5hbWVJRCBGb3JtYXQgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogKiBgZ2V0TmFtZUlkTmFtZVF1YWxpZmllcmAgLSBHZXRzIHRoZSBOYW1lSUQgTmFtZVF1YWxpZmllciBwcm92aWRlZCBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIFN0cmluZy4KICogYGdldE5hbWVJZFNQTmFtZVF1YWxpZmllcmAgLSBHZXRzIHRoZSBOYW1lSUQgU1AgTmFtZVF1YWxpZmllciBwcm92aWRlZCBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIFN0cmluZy4KICogYGdldFNlc3Npb25Ob3RPbk9yQWZ0ZXJgIC0gR2V0cyB0aGUgU2Vzc2lvbk5vdE9uT3JBZnRlciBmcm9tIHRoZQogICBBdXRoblN0YXRlbWVudAogKiBgZ2V0U2Vzc2lvbkluZGV4YCAtIEdldHMgdGhlIFNlc3Npb25JbmRleCBmcm9tIHRoZSBBdXRoblN0YXRlbWVudC4KICogYGdldEF0dHJpYnV0ZXNgIC0gR2V0cyB0aGUgQXR0cmlidXRlcyBmcm9tIHRoZSBBdHRyaWJ1dGVTdGF0ZW1lbnQgZWxlbWVudC4KICogYHZhbGlkYXRlTnVtQXNzZXJ0aW9uc2AgLSBWZXJpZmllcyB0aGF0IHRoZSBkb2N1bWVudCBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlCiAgIEFzc2VydGlvbiAoZW5jcnlwdGVkIG9yIG5vdCkuCiAqIGB2YWxpZGF0ZVRpbWVzdGFtcHNgIC0gVmVyaWZpZXMgdGhhdCB0aGUgZG9jdW1lbnQgaXMgc3RpbGwgdmFsaWQgYWNjb3JkaW5nCiAgIENvbmRpdGlvbnMgRWxlbWVudC4KICogYGdldEVycm9yYCAtIEFmdGVyIGV4ZWN1dGluZyBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgaXQgZmFpbHMsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAqIGBnZXRYTUxEb2N1bWVudGAgLSBSZXR1cm5zIHRoZSBTQU1MIFJlc3BvbnNlIGRvY3VtZW50IChJZiBjb250YWlucyBhbiBlbmNyeXB0ZWQgYXNzZXJ0aW9uLCBkZWNyeXB0cyBpdCkKCiMjIyMjIE9uZUxvZ2luXFNhbWwyXExvZ291dFJlcXVlc3QgLSBgTG9nb3V0UmVxdWVzdC5waHBgICMjIyMjCgpTQU1MIDIgTG9nb3V0IFJlcXVlc3QgY2xhc3MKCiAqIGBMb2dvdXRSZXF1ZXN0YCAtIENvbnN0cnVjdHMgdGhlIExvZ291dCBSZXF1ZXN0IG9iamVjdC4KICogYGdldFJlcXVlc3RgIC0gUmV0dXJucyB0aGUgTG9nb3V0IFJlcXVlc3QgZGVmbGF0ZWQsIGJhc2U2NGVuY29kZWQsIHVuc2lnbmVkCiAqIGBnZXRJRGAgLSBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuIChJZiB5b3UgaGF2ZSB0aGUgb2JqZWN0IHlvdSBjYW4gYWNjZXNzIHRvIHRoZSBpZCBhdHRyaWJ1dGUpCiAqIGBnZXROYW1lSWREYXRhYCAtIEdldHMgdGhlIE5hbWVJRCBEYXRhIG9mIHRoZSB0aGUgTG9nb3V0IFJlcXVlc3QuCiAqIGBnZXROYW1lSWRgIC0gR2V0cyB0aGUgTmFtZUlEIG9mIHRoZSBMb2dvdXQgUmVxdWVzdC4KICogYGdldElzc3VlcmAgLSBHZXRzIHRoZSBJc3N1ZXIgb2YgdGhlIExvZ291dCBSZXF1ZXN0LgogKiBgZ2V0U2Vzc2lvbkluZGV4ZXNgIC0gR2V0cyB0aGUgU2Vzc2lvbkluZGV4ZXMgZnJvbSB0aGUgTG9nb3V0IFJlcXVlc3QuCiAqIGBpc1ZhbGlkYCAtIENoZWNrcyBpZiB0aGUgTG9nb3V0IFJlcXVlc3QgcmVjZWl2ZWQgaXMgdmFsaWQuCiAqIGBnZXRFcnJvcmAgLSBBZnRlciBleGVjdXRpbmcgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGl0IGZhaWxzLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXVzZQogKiBgZ2V0WE1MYCAtIFJldHVybnMgdGhlIFhNTCB0aGF0IHdpbGwgYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0IG9yIHRoYXQgd2FzIHJlY2VpdmVkIGF0IHRoZSBTUC4KCiMjIyMjIE9uZUxvZ2luXFNhbWwyXExvZ291dFJlc3BvbnNlIC0gYExvZ291dFJlc3BvbnNlLnBocGAgIyMjIyMKClNBTUwgMiBMb2dvdXQgUmVzcG9uc2UgY2xhc3MKCiAqIGBMb2dvdXRSZXNwb25zZWAgLSBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdAogICAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQgbG9hZCB0aGUgTG9nb3V0IFJlc3BvbnNlKQogKiBgZ2V0SXNzdWVyYCAtIEdldHMgdGhlIElzc3VlciBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlLgogKiBgZ2V0U3RhdHVzYCAtIEdldHMgdGhlIFN0YXR1cyBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlLgogKiBgaXNWYWxpZGAgLSBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIExvZ291dFJlc3BvbnNlIGlzIHZhbGlkCiAqIGBidWlsZGAgLSBHZW5lcmF0ZXMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0LgogKiBgZ2V0UmVzcG9uc2VgIC0gUmV0dXJucyBhIExvZ291dCBSZXNwb25zZSBvYmplY3QuCiAqIGBnZXRFcnJvcmAgLSBBZnRlciBleGVjdXRpbmcgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGl0IGZhaWxzLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXVzZS4KICogYGdldFhNTGAgLSBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVzcG9uc2Ugb3IgdGhhdCB3YXMgcmVjZWl2ZWQgYXQgdGhlIFNQLgoKIyMjIyMgT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgLSBgU2V0dGluZ3MucGhwYCAjIyMjIwoKQ29uZmlndXJhdGlvbiBvZiB0aGUgU0FNTCBQSFAgVG9vbGtpdAoKICogYFNldHRpbmdzYCAtICBJbml0aWFsaXplcyB0aGUgc2V0dGluZ3M6IFNldHMgdGhlIHBhdGhzIG9mCiAgIHRoZSBkaWZmZXJlbnQgZm9sZGVycyBhbmQgTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHNldHRpbmdzIGZpbGUgb3IKICAgYXJyYXkvb2JqZWN0IHByb3ZpZGVkCiAqIGBjaGVja1NldHRpbmdzYCAtIENoZWNrcyB0aGUgc2V0dGluZ3MgaW5mby4KICogYGdldEJhc2VQYXRoYCAtIFJldHVybnMgYmFzZSBwYXRoLgogKiBgZ2V0Q2VydFBhdGhgIC0gUmV0dXJucyBjZXJ0IHBhdGguCiAqIGBnZXRMaWJQYXRoYCAtIFJldHVybnMgbGliIHBhdGguCiAqIGBnZXRFeHRMaWJQYXRoYCAtIFJldHVybnMgZXh0ZXJuYWwgbGliIHBhdGguCiAqIGBnZXRTY2hlbWFzUGF0aGAgLSBSZXR1cm5zIHNjaGVtYSBwYXRoLgogKiBgY2hlY2tTUENlcnRzYCAtIENoZWNrcyBpZiB0aGUgeDUwOSBjZXJ0cyBvZiB0aGUgU1AgZXhpc3RzIGFuZCBhcmUgdmFsaWQuCiAqIGBnZXRTUGtleWAgLSBSZXR1cm5zIHRoZSB4NTA5IHByaXZhdGUga2V5IG9mIHRoZSBTUC4KICogYGdldFNQY2VydGAgLSBSZXR1cm5zIHRoZSB4NTA5IHB1YmxpYyBjZXJ0IG9mIHRoZSBTUC4KICogYGdldFNQY2VydE5ld2AgLSBSZXR1cm5zIHRoZSBmdXR1cmUgeDUwOSBwdWJsaWMgY2VydCBvZiB0aGUgU1AuCiAqIGBnZXRJZFBEYXRhYCAtIEdldHMgdGhlIElkUCBkYXRhLgogKiBgZ2V0U1BEYXRhYEdldHMgdGhlIFNQIGRhdGEuCiAqIGBnZXRTZWN1cml0eURhdGFgIC0gR2V0cyBzZWN1cml0eSBkYXRhLgogKiBgZ2V0Q29udGFjdHNgIC0gR2V0cyBjb250YWN0IGRhdGEuCiAqIGBnZXRPcmdhbml6YXRpb25gIC0gR2V0cyBvcmdhbml6YXRpb24gZGF0YS4KICogYGdldFNQTWV0YWRhdGFgIC0gR2V0cyB0aGUgU1AgbWV0YWRhdGEuIFRoZSBYTUwgcmVwcmVzZW50YXRpb24uCiAqIGB2YWxpZGF0ZU1ldGFkYXRhYCAtIFZhbGlkYXRlcyBhbiBYTUwgU1AgTWV0YWRhdGEuCiAqIGBmb3JtYXRJZFBDZXJ0YCAtIEZvcm1hdHMgdGhlIElkUCBjZXJ0LgogKiBgZm9ybWF0U1BDZXJ0YCAtIEZvcm1hdHMgdGhlIFNQIGNlcnQuCiAqIGBmb3JtYXRTUENlcnROZXdgIC0gRm9ybWF0cyB0aGUgU1AgY2VydCBuZXcuCiAqIGBmb3JtYXRTUEtleWAgLSBGb3JtYXRzIHRoZSBTUCBwcml2YXRlIGtleS4KICogYGdldEVycm9yc2AgLSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGVycm9ycywgdGhlIGFycmF5IGlzIGVtcHR5IHdoZW4KICAgdGhlIHNldHRpbmdzIGlzIG9rLgogKiBgZ2V0TGFzdEVycm9yUmVhc29uYCAtIFJldHVybnMgdGhlIHJlYXNvbiBvZiB0aGUgbGFzdCBlcnJvcgogKiBgZ2V0QmFzZVVSTGAgLSAgUmV0dXJucyB0aGUgYmFzZXVybCBzZXQgb24gdGhlIHNldHRpbmdzIGlmIGFueS4KICogYHNldEJhc2VVUkxgIC0gU2V0IGEgYmFzZXVybCB2YWx1ZQogKiBgc2V0U3RyaWN0YCAtIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgc3RyaWN0IG1vZGUuCiAqIGBpc1N0cmljdGAgLSBSZXR1cm5zIGlmIHRoZSAnc3RyaWN0JyBtb2RlIGlzIGFjdGl2ZS4KICogYGlzRGVidWdBY3RpdmVgIC0gUmV0dXJucyBpZiB0aGUgZGVidWcgaXMgYWN0aXZlLgoKIyMjIyMgT25lTG9naW5cU2FtbDJcTWV0YWRhdGEgLSBgTWV0YWRhdGEucGhwYCAjIyMjIwoKQSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQCgoqIGBidWlsZGVyYCAtIEdlbmVyYXRlcyB0aGUgbWV0YWRhdGEgb2YgdGhlIFNQIGJhc2VkIG9uIHRoZSBzZXR0aW5ncy4KKiBgc2lnbm1ldGFkYXRhYCAtIFNpZ25zIHRoZSBtZXRhZGF0YSB3aXRoIHRoZSBrZXkvY2VydCBwcm92aWRlZAoqIGBhZGRYNTA5S2V5RGVzY3JpcHRvcnNgIC0gQWRkcyB0aGUgeDUwOSBkZXNjcmlwdG9ycyAoc2lnbi9lbmNyeXB0aW9uKSB0bwogIHRoZSBtZXRhZGF0YQoKIyMjIyMgT25lTG9naW5cU2FtbDJcVXRpbHMgLSBgVXRpbHMucGhwYCAjIyMjIwoKQXV4aWxpYXJ5IGNsYXNzIHRoYXQgY29udGFpbnMgc2V2ZXJhbCBtZXRob2RzCgogKiBgdmFsaWRhdGVYTUxgIC0gVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byB2YWxpZGF0ZSBhbiBYTUwgc3RyaW5nIGFnYWluc3QKICAgdGhlIHNwZWNpZmllZCBzY2hlbWEuCiAqIGBmb3JtYXRDZXJ0YCAtIFJldHVybnMgYSB4NTA5IGNlcnQgKGFkZGluZyBoZWFkZXIgJiBmb290ZXIgaWYgcmVxdWlyZWQpLgogKiBgZm9ybWF0UHJpdmF0ZUtleWAgLSByZXR1cm5zIGEgUlNBIHByaXZhdGUga2V5IChhZGRpbmcgaGVhZGVyICYgZm9vdGVyIGlmIHJlcXVpcmVkKS4KICogYHJlZGlyZWN0YCAtIEV4ZWN1dGVzIGEgcmVkaXJlY3Rpb24gdG8gdGhlIHByb3ZpZGVkIHVybCAob3IgcmV0dXJuIHRoZQogICB0YXJnZXQgdXJsKS4KICogYGlzSFRUUFNgIC0gQ2hlY2tzIGlmIGh0dHBzIG9yIGh0dHAuCiAqIGBnZXRTZWxmSG9zdGAgLSBSZXR1cm5zIHRoZSBjdXJyZW50IGhvc3QuCiAqIGBnZXRTZWxmVVJMaG9zdGAgLSBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydAogICAoaWYgZGlmZmVyZW50IHRoYW4gY29tbW9uIHBvcnRzKS4KICogYGdldFNlbGZVUkxOb1F1ZXJ5YCAtIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgogKiBgZ2V0U2VsZlVSTGAgLSBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIGN1cnJlbnQgaG9zdCArIGN1cnJlbnQgdmlldyArIHF1ZXJ5LgogKiBgZ2VuZXJhdGVVbmlxdWVJRGAgLSBHZW5lcmF0ZXMgYSB1bmlxdWUgc3RyaW5nICh1c2VkIGZvciBleGFtcGxlIGFzIElECiAgIGZvciBhc3NlcnRpb25zKS4KICogYHBhcnNlVGltZTJTQU1MYCAtIENvbnZlcnRzIGEgVU5JWCB0aW1lc3RhbXAgdG8gU0FNTDIgdGltZXN0YW1wIG9uIHRoZQogICBmb3JtIGB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1pgLgogKiBgcGFyc2VTQU1MMlRpbWVgIC0gQ29udmVydHMgYSBTQU1MMiB0aW1lc3RhbXAgb24gdGhlIGZvcm0KICAgYHl5eXktbW0tZGRUaGg6bW06c3MoXC5zKyk/WmAgdG8gYSBVTklYIHRpbWVzdGFtcC4gVGhlIHN1Yi1zZWNvbmQgcGFydCBpcwogICBpZ25vcmVkLgogKiBgcGFyc2VEdXJhdGlvbmAgLSBJbnRlcnByZXRzIGEgSVNPODYwMSBkdXJhdGlvbiB2YWx1ZSByZWxhdGl2ZSB0byBhIGdpdmVuCiAgIHRpbWVzdGFtcC4KICogYGdldEV4cGlyZVRpbWVgIC0gQ29tcGFyZXMgdHdvIGRhdGVzIGFuZCByZXR1cm5zIHRoZSBlYXJsaWVzdC4KICogYHF1ZXJ5YCAtIEV4dHJhY3RzIG5vZGVzIGZyb20gdGhlIERPTURvY3VtZW50LgogKiBgaXNTZXNzaW9uU3RhcnRlZGAgLSBDaGVja3MgaWYgdGhlIHNlc3Npb24gaXMgc3RhcnRlZCBvciBub3QuCiAqIGBkZWxldGVMb2NhbFNlc3Npb25gIC0gRGVsZXRlcyB0aGUgbG9jYWwgc2Vzc2lvbi4KICogYGNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludGAgLSBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiBhIHg1MDljZXJ0LgogKiBgZm9ybWF0RmluZ2VyUHJpbnRgIC0gRm9ybWF0cyBhIGZpbmdlcnByaW50LgogKiBgZ2VuZXJhdGVOYW1lSWRgIC0gR2VuZXJhdGVzIGEgYG5hbWVJRGAuCiAqIGBnZXRTdGF0dXNgIC0gR2V0cyBTdGF0dXMgZnJvbSBhIFJlc3BvbnNlLgogKiBgZGVjcnlwdEVsZW1lbnRgIC0gRGVjcnlwdHMgYW4gZW5jcnlwdGVkIGVsZW1lbnQuCiAqIGBjYXN0S2V5YCAtIENvbnZlcnRzIGEgYFhNTFNlY3VyaXR5S2V5YCB0byB0aGUgY29ycmVjdCBhbGdvcml0aG0uCiAqIGBhZGRTaWduYCAtIEFkZHMgc2lnbmF0dXJlIGtleSBhbmQgc2VuZGVycyBjZXJ0aWZpY2F0ZSB0byBhbiBlbGVtZW50CiAgIChNZXNzYWdlIG9yIEFzc2VydGlvbikuCiAqIGB2YWxpZGF0ZVNpZ25gIC0gVmFsaWRhdGVzIGEgc2lnbmF0dXJlIChNZXNzYWdlIG9yIEFzc2VydGlvbikuCgojIyMjIyBPbmVMb2dpblxTYW1sMlxJZFBNZXRhZGF0YVBhcnNlciAtIGBJZFBNZXRhZGF0YVBhcnNlci5waHBgICMjIyMjCgpBdXhpbGlhcnkgY2xhc3MgdGhhdCBjb250YWlucyBzZXZlcmFsIG1ldGhvZHMgdG8gcmV0cmlldmUgYW5kIHByb2Nlc3MgSWRQIG1ldGFkYXRhCgogKiBgcGFyc2VSZW1vdGVYTUxgIC0gR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gVVJMLgogKiBgcGFyc2VGaWxlWE1MYCAtIEdldCBJZFAgTWV0YWRhdGEgSW5mbyBmcm9tIEZpbGUuCiAqIGBwYXJzZVhNTGAgLSBHZXQgSWRQIE1ldGFkYXRhIEluZm8gZnJvbSBYTUwuCiAqIGBpbmplY3RJbnRvU2V0dGluZ3NgIC0gSW5qZWN0IG1ldGFkYXRhIGluZm8gaW50byBwaHAtc2FtbCBzZXR0aW5ncyBhcnJheS4KClRoZSBjbGFzcyBkb2VzIG5vdCB2YWxpZGF0ZSBpbiBhbnkgd2F5IHRoZSBVUkwgdGhhdCBpcyBpbnRyb2R1Y2VkIG9uIG1ldGhvZHMgbGlrZSBwYXJzZVJlbW90ZVhNTCBpbiBvcmRlciB0byByZXRyaWV2ZSB0aGUgcmVtb3ZlIFhNTC4gVXN1YWxseSBpcyB0aGUgc2FtZSBhZG1pbmlzdHJhdG9yIHRoYXQgaGFuZGxlcyB0aGUgU2VydmljZSBQcm92aWRlciB0aGUgb25lcyB0aGF0IHNldCB0aGUgVVJMIHRoYXQgc2hvdWxkIGJlbG9uZyB0byBhIHRydXN0ZWQgdGhpcmQtcGFydHkgSWRQLgpCdXQgdGhlcmUgYXJlIG90aGVyIHNjZW5hcmlvcywgbGlrZSBhIFNBQVMgYXBwIHdoZXJlIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoZSBhcHAgZGVsZWdhdGVzIG9uIG90aGVyIGFkbWluaXN0cmF0b3JzLiBJbiBzdWNoIGNhc2UsIGV4dHJhIHByb3RlY3Rpb24gc2hvdWxkIGJlIHRha2VuIGluIG9yZGVyIHRvIHZhbGlkYXRlIHN1Y2ggVVJMIGlucHV0cyBhbmQgYXZvaWQgYXR0YWNrcyBsaWtlIFNTUkYuCgpGb3IgbW9yZSBpbmZvLCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZTsgZWFjaCBtZXRob2QgaXMgZG9jdW1lbnRlZCBhbmQgZGV0YWlscwphYm91dCB3aGF0IGl0IGRvZXMgYW5kIGhvdyB0byB1c2UgaXQgYXJlIHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gYWxzbyBjaGVjayB0aGUgZG9jIGZvbGRlciB3aGVyZQpIVE1MIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgaXMgcHJvdmlkZWQgZm9yIFNBTUwgYW5kClNBTUwyLgoKCkRlbW9zIGluY2x1ZGVkIGluIHRoZSB0b29sa2l0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgdG9vbGtpdCBpbmNsdWRlcyB0aHJlZSBkZW1vIGFwcHMgdG8gdGVhY2ggaG93IHVzZSB0aGUgdG9vbGtpdCwgdGFrZSBhIGxvb2sgb24gaXQuCgpEZW1vcyByZXF1aXJlIHRoYXQgU1AgYW5kIElkUCBhcmUgd2VsbCBjb25maWd1cmVkIGJlZm9yZSB0ZXN0IGl0LgoKIyMgRGVtbzEgIyMKCiMjIyBTUCBzZXR1cCAjIyMKClRoZSBTQU1MIFBIUCBUb29sa2l0IGFsbG93cyB5b3UgdG8gcHJvdmlkZSB0aGUgc2V0dGluZ3MgaW5mbyBpbiB0d28gd2F5czoKCiAqIFVzZSBhIGBzZXR0aW5ncy5waHBgIGZpbGUgdGhhdCB3ZSBzaG91bGQgbG9jYXRlIGF0IHRoZSBiYXNlIGZvbGRlciBvZiB0aGUKICAgdG9vbGtpdC4KICogVXNlIGFuIGFycmF5IHdpdGggdGhlIHNldHRpbmcgZGF0YS4KCkluIHRoaXMgZGVtbyB3ZSBwcm92aWRlIHRoZSBkYXRhIGluIHRoZSBzZWNvbmQgd2F5LCB1c2luZyBhIHNldHRpbmcgYXJyYXkgbmFtZWQKYCRzZXR0aW5nc0luZm9gLiBUaGlzIGFycmF5IHVzZXJzIHRoZSBgc2V0dGluZ3NfZXhhbXBsZS5waHBgIGluY2x1ZGVkIGFzIGEgdGVtcGxhdGUKdG8gY3JlYXRlIHRoZSBgc2V0dGluZ3MucGhwYCBzZXR0aW5ncyBhbmQgc3RvcmUgaXQgaW4gdGhlIGBkZW1vMS9gIGZvbGRlci4KQ29uZmlndXJlIHRoZSBTUCBwYXJ0IGFuZCBsYXRlciByZXZpZXcgdGhlIG1ldGFkYXRhIG9mIHRoZSBJZFAgYW5kIGNvbXBsZXRlIHRoZSBJZFAgaW5mby4KCklmIHlvdSBjaGVjayB0aGUgY29kZSBvZiB0aGUgaW5kZXgucGhwIGZpbGUgeW91IHdpbGwgc2VlIHRoYXQgdGhlIGBzZXR0aW5ncy5waHBgCmZpbGUgaXMgbG9hZGVkIGluIG9yZGVyIHRvIGdldCB0aGUgYCRzZXR0aW5nc0luZm9gIHZhciB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGluaXRpYWxpemUKdGhlIGBTZXR0aW5nYCBjbGFzcy4KCk5vdGljZSB0aGF0IGluIHRoaXMgZGVtbywgdGhlIGBzZXR0aW5nLnBocGAgZmlsZSB0aGF0IGNvdWxkIGJlIGRlZmluZWQgYXQgdGhlIGJhc2UKZm9sZGVyIG9mIHRoZSB0b29sa2l0IGlzIGlnbm9yZWQgYW5kIHRoZSBsaWJzIGFyZSBsb2FkZWQgdXNpbmcgdGhlCmBfdG9vbGtpdF9sb2FkZXIucGhwYCBsb2NhdGVkIGF0IHRoZSBiYXNlIGZvbGRlciBvZiB0aGUgdG9vbGtpdC4KCgojIyMgSWRQIHNldHVwICMjIwoKT25jZSB0aGUgU1AgaXMgY29uZmlndXJlZCwgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBpcyBwdWJsaXNoZWQgYXQgdGhlCmBtZXRhZGF0YS5waHBgIGZpbGUuIENvbmZpZ3VyZSB0aGUgSWRQIGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24uCgoKIyMjIEhvdyBpdCB3b3JrcyAjIyMKCiAxLiBGaXJzdCB0aW1lIHlvdSBhY2Nlc3MgdG8gYGluZGV4LnBocGAgdmlldywgeW91IGNhbiBzZWxlY3QgdG8gbG9naW4gYW5kIHJldHVybgogICAgdG8gdGhlIHNhbWUgdmlldyBvciBsb2dpbiBhbmQgYmUgcmVkaXJlY3RlZCB0byB0aGUgYGF0dHJzLnBocGAgdmlldy4KCiAyLiBXaGVuIHlvdSBjbGljazoKCiAgICAyLjEgaW4gdGhlIGZpcnN0IGxpbmssIHdlIGFjY2VzcyB0byAoYGluZGV4LnBocD9zc29gKSBhbiBgQXV0aE5SZXF1ZXN0YAogICAgaXMgc2VudCB0byB0aGUgSWRQLCB3ZSBhdXRoZW50aWNhdGUgYXQgdGhlIElkUCBhbmQgdGhlbiBhIFJlc3BvbnNlIGlzIHNlbnQKICAgIHRocm91Z2ggdGhlIHVzZXIncyBjbGllbnQgdG8gdGhlIFNQLCBzcGVjaWZpY2FsbHkgdGhlIEFzc2VydGlvbiBDb25zdW1lciBTZXJ2aWNlIHZpZXc6IGBpbmRleC5waHA/YWNzYC4KICAgIE5vdGljZSB0aGF0IGEgYFJlbGF5U3RhdGVgIHBhcmFtZXRlciBpcyBzZXQgdG8gdGhlIHVybCB0aGF0IGluaXRpYXRlZCB0aGUKICAgIHByb2Nlc3MsIHRoZSBgaW5kZXgucGhwYCB2aWV3LgoKICAgIDIuMiBpbiB0aGUgc2Vjb25kIGxpbmsgd2UgYWNjZXNzIHRvIChgYXR0cnMucGhwYCkgaGF2ZSB0aGUgc2FtZSBwcm9jZXNzCiAgICBkZXNjcmliZWQgYXQgMi4xIHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCBhcyBgUmVsYXlTdGF0ZWAgaXMgc2V0IHRoZSBgYXR0cnMucGhwYC4KCiAzLiBUaGUgU0FNTCBSZXNwb25zZSBpcyBwcm9jZXNzZWQgaW4gdGhlIEFDUyAoYGluZGV4LnBocD9hY3NgKSwgaWYgdGhlIFJlc3BvbnNlCiAgICBpcyBub3QgdmFsaWQsIHRoZSBwcm9jZXNzIHN0b3BzIGhlcmUgYW5kIGEgbWVzc2FnZSBpcyBzaG93bi4gT3RoZXJ3aXNlIHdlCiAgICBhcmUgcmVkaXJlY3RlZCB0byB0aGUgUmVsYXlTdGF0ZSB2aWV3LiBhKSBgaW5kZXgucGhwYCBvciBiKSBgYXR0cnMucGhwYC4KCiA0LiBXZSBhcmUgbG9nZ2VkIGluIHRoZSBhcHAgYW5kIHRoZSB1c2VyIGF0dHJpYnV0ZXMgYXJlIHNob3dlZC4KICAgIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiB0ZXN0IHRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5LgoKIDUuIFRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5IGNvdWxkIGJlIHRlc3RlZCBieSB0d28gd2F5cy4KCiAgICA1LjEgU0xPIEluaXRpYXRlZCBieSBTUC4gQ2xpY2sgb24gdGhlICJsb2dvdXQiIGxpbmsgYXQgdGhlIFNQLCBhZnRlciB0aGF0IGEKICAgIExvZ291dCBSZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIElkUCwgdGhlIHNlc3Npb24gYXQgdGhlIElkUCBpcyBjbG9zZWQgYW5kCiAgICByZXBsaWVzIHRocm91Z2ggdGhlIGNsaWVudCB0byB0aGUgU1Agd2l0aCBhIExvZ291dCBSZXNwb25zZSAoc2VudCB0byB0aGUKICAgIFNpbmdsZSBMb2dvdXQgU2VydmljZSBlbmRwb2ludCkuIFRoZSBTTFMgZW5kcG9pbnQgKGBpbmRleC5waHA/c2xzYCkgb2YgdGhlIFNQCiAgICBwcm9jZXNzIHRoZSBMb2dvdXQgUmVzcG9uc2UgYW5kIGlmIGlzIHZhbGlkLCBjbG9zZSB0aGUgdXNlciBzZXNzaW9uIG9mIHRoZQogICAgbG9jYWwgYXBwLiBOb3RpY2UgdGhhdCB0aGUgU0xPIFdvcmtmbG93IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUgU1AuCgogICAgNS4yIFNMTyBJbml0aWF0ZWQgYnkgSWRQLiBJbiB0aGlzIGNhc2UsIHRoZSBhY3Rpb24gdGFrZXMgcGxhY2Ugb24gdGhlIElkUAogICAgc2lkZSwgdGhlIGxvZ291dCBwcm9jZXNzIGlzIGluaXRpYXRlZCBhdCB0aGUgaWRQLCBzZW5kcyBhIExvZ291dAogICAgUmVxdWVzdCB0byB0aGUgU1AgKFNMUyBlbmRwb2ludCwgYGluZGV4LnBocD9zbHNgKS4gVGhlIFNMUyBlbmRwb2ludCBvZiB0aGUgU1AKICAgIHByb2Nlc3MgdGhlIExvZ291dCBSZXF1ZXN0IGFuZCBpZiBpcyB2YWxpZCwgY2xvc2UgdGhlIHNlc3Npb24gb2YgdGhlIHVzZXIKICAgIGF0IHRoZSBsb2NhbCBhcHAgYW5kIHNlbmQgYSBMb2dvdXQgUmVzcG9uc2UgdG8gdGhlIElkUCAodG8gdGhlIFNMUyBlbmRwb2ludAogICAgb2YgdGhlIElkUCkuIFRoZSBJZFAgcmVjZWl2ZXMgdGhlIExvZ291dCBSZXNwb25zZSwgcHJvY2VzcyBpdCBhbmQgY2xvc2UgdGhlCiAgICBzZXNzaW9uIGF0IG9mIHRoZSBJZFAuIE5vdGljZSB0aGF0IHRoZSBTTE8gV29ya2Zsb3cgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBJZFAuCgpOb3RpY2UgdGhhdCBhbGwgdGhlIFNBTUwgUmVxdWVzdHMgYW5kIFJlc3BvbnNlcyBhcmUgaGFuZGxlZCBieSBhIHVuaXF1ZSBmaWxlLAp0aGUgYGluZGV4LnBocGAgZmlsZSBhbmQgaG93IGBHRVRgIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8ga25vdyB0aGUgYWN0aW9uIHRoYXQKbXVzdCBiZSBkb25lLgoKCiMjIERlbW8yICMjCgojIyMgU1Agc2V0dXAgIyMjCgpUaGUgU0FNTCBQSFAgVG9vbGtpdCBhbGxvd3MgeW91IHRvIHByb3ZpZGUgdGhlIHNldHRpbmdzIGluZm8gaW4gdHdvIHdheXM6CgogKiBVc2UgYSBgc2V0dGluZ3MucGhwYCBmaWxlIHRoYXQgd2Ugc2hvdWxkIGxvY2F0ZSBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlCiAgIHRvb2xraXQuCiAqIFVzZSBhbiBhcnJheSB3aXRoIHRoZSBzZXR0aW5nIGRhdGEuCgpUaGUgZmlyc3QgaXMgdGhlIGNhc2Ugb2YgdGhlIGRlbW8yIGFwcC4gVGhlIGBzZXR0aW5nLnBocGAgZmlsZSBhbmQgdGhlCmBzZXR0aW5nX2V4dGVuZGVkLnBocGAgZmlsZSBzaG91bGQgYmUgZGVmaW5lZCBhdCB0aGUgYmFzZSBmb2xkZXIgb2YgdGhlIHRvb2xraXQuClJldmlldyB0aGUgYHNldHRpbmdfZXhhbXBsZS5waHBgIGFuZCB0aGUgYGFkdmFuY2VkX3NldHRpbmdzX2V4YW1wbGUucGhwYCB0bwpsZWFybiBob3cgdG8gYnVpbGQgdGhlbS4KCkluIHRoaXMgY2FzZSBhcyBBdHRyaWJ1dGUgQ29uc3VtZSBTZXJ2aWNlIGFuZCBTaW5nbGUgTG9nb3V0IFNlcnZpY2Ugd2UgYXJlIGdvaW5nIHRvCnVzZSB0aGUgZmlsZXMgbG9jYXRlZCBpbiB0aGUgZW5kcG9pbnQgZm9sZGVyIChgYWNzLnBocGAgYW5kIGBzbHMucGhwYCkuCgoKIyMjIElkUCBzZXR1cCAjIyMKCk9uY2UgdGhlIFNQIGlzIGNvbmZpZ3VyZWQsIHRoZSBtZXRhZGF0YSBvZiB0aGUgU1AgaXMgcHVibGlzaGVkIGF0IHRoZQpgbWV0YWRhdGEucGhwYCBmaWxlLiBCYXNlZCBvbiB0aGF0IGluZm8sIGNvbmZpZ3VyZSB0aGUgSWRQLgoKCiMjIyBIb3cgaXQgd29ya3MgIyMjCgpBdCBkZW1vMSwgd2Ugc2F3IGhvdyBhbGwgdGhlIFNBTUwgUmVxdWVzdCBhbmQgUmVzcG9uc2VzIHdlcmUgaGFuZGxlciBhdCBhbgp1bmlxdWUgZmlsZSwgdGhlIGBpbmRleC5waHBgIGZpbGUuIFRoaXMgZGVtbzEgdXNlcyBoaWdoLWxldmVsIHByb2dyYW1taW5nLgoKQXQgZGVtbzIsIHdlIGhhdmUgc2V2ZXJhbCB2aWV3czogYGluZGV4LnBocGAsIGBzc28ucGhwYCwgYHNsby5waHBgLCBgY29uc3VtZS5waHBgCmFuZCBgbWV0YWRhdGEucGhwYC4gQXMgd2Ugc2FpZCwgd2Ugd2lsbCB1c2UgdGhlIGVuZHBvaW50cyB0aGF0IGFyZSBkZWZpbmVkCmluIHRoZSB0b29sa2l0IChgYWNzLnBocGAsIGBzbHMucGhwYCBvZiB0aGUgZW5kcG9pbnRzIGZvbGRlcikuIFRoaXMgZGVtbzIgdXNlcwpsb3ctbGV2ZWwgcHJvZ3JhbW1pbmcuCgpOb3RpY2UgdGhhdCB0aGUgU1NPIGFjdGlvbiBjYW4gYmUgaW5pdGlhdGVkIGF0IGBpbmRleC5waHBgIG9yIGBzc28ucGhwYC4KClRoZSBTQU1MIHdvcmtmbG93IHRoYXQgdGFrZSBwbGFjZSBpcyBzaW1pbGFyIHRoYXQgdGhlIHdvcmtmbG93IGRlZmluZWQgaW4gdGhlCmRlbW8xLCBvbmx5IGNoYW5nZXMgdGhlIHRhcmdldHMuCgogMS4gV2hlbiB5b3UgYWNjZXNzIGBpbmRleC5waHBgIG9yIGBzc28ucGhwYCBmb3IgdGhlIGZpcnN0IHRpbWUsIGFuIGBBdXRoTlJlcXVlc3RgIGlzCiAgICBzZW50IHRvIHRoZSBJZFAgYXV0b21hdGljYWxseSwgKGFzIGBSZWxheVN0YXRlYCBpcyBzZW50IHRoZSBvcmlnaW4gdXJsKS4KICAgIFdlIGF1dGhlbnRpY2F0ZSBhdCB0aGUgSWRQIGFuZCB0aGVuIGEgYFJlc3BvbnNlYCBpcyBzZW50IHRvIHRoZSBTUCwgdG8gdGhlCiAgICBBQ1MgZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBgYWNzLnBocGAgb2YgdGhlIGVuZHBvaW50cyBmb2xkZXIuCgogMi4gVGhlIFNBTUwgUmVzcG9uc2UgaXMgcHJvY2Vzc2VkIGluIHRoZSBBQ1MsIGlmIHRoZSBgUmVzcG9uc2VgIGlzIG5vdCB2YWxpZCwKICAgIHRoZSBwcm9jZXNzIHN0b3BzIGhlcmUgYW5kIGEgbWVzc2FnZSBpcyBzaG93bi4gT3RoZXJ3aXNlIHdlIGFyZSByZWRpcmVjdGVkCiAgICB0byB0aGUgYFJlbGF5U3RhdGVgIHZpZXcgKGBzc28ucGhwYCBvciBgaW5kZXgucGhwYCkuIFRoZSBgc3NvLnBocGAgZGV0ZWN0cyBpZiB0aGUKICAgIHVzZXIgaXMgbG9nZ2VkIGFuZCByZWRpcmVjdHMgdG8gYGluZGV4LnBocGAsIHNvIHdlIHdpbGwgYmUgaW4gdGhlCiAgICBgaW5kZXgucGhwYCBhdCB0aGUgZW5kLgoKIDMuIFdlIGFyZSBsb2dnZWQgaW50byB0aGUgYXBwIGFuZCB0aGUgdXNlciBhdHRyaWJ1dGVzIChpZiBhbnkpIGFyZSBzaG93bi4KICAgIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiB0ZXN0IHRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5LgoKIDQuIFRoZSBzaW5nbGUgbG9nIG91dCBmdW5jdGlvbmFsaXR5IGNvdWxkIGJlIHRlc3RlZCBieSB0d28gd2F5cy4KCiAgICA0LjEgU0xPIEluaXRpYXRlZCBieSBTUC4gQ2xpY2sgb24gdGhlICJsb2dvdXQiIGxpbmsgYXQgdGhlIFNQLCBhZnRlciB0aGF0CiAgICB3ZSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYHNsby5waHBgIHZpZXcgYW5kIHRoZXJlIGEgTG9nb3V0IFJlcXVlc3QgaXMgc2VudAogICAgdG8gdGhlIElkUCwgdGhlIHNlc3Npb24gYXQgdGhlIElkUCBpcyBjbG9zZWQgYW5kIHJlcGxpZXMgdG8gdGhlIFNQIGEKICAgIExvZ291dCBSZXNwb25zZSAoc2VudCB0byB0aGUgU2luZ2xlIExvZ291dCBTZXJ2aWNlIGVuZHBvaW50KS4gSW4gdGhpcyBjYXNlCiAgICBUaGUgU0xTIGVuZHBvaW50IG9mIHRoZSBTUCBwcm9jZXNzIHRoZSBMb2dvdXQgUmVzcG9uc2UgYW5kIGlmIGlzCiAgICB2YWxpZCwgY2xvc2UgdGhlIHVzZXIgc2Vzc2lvbiBvZiB0aGUgbG9jYWwgYXBwLiBOb3RpY2UgdGhhdCB0aGUgU0xPCiAgICBXb3JrZmxvdyBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIFNQLgoKICAgIDQuMiBTTE8gSW5pdGlhdGVkIGJ5IElkUC4gSW4gdGhpcyBjYXNlLCB0aGUgYWN0aW9uIHRha2VzIHBsYWNlIG9uIHRoZSBJZFAKICAgIHNpZGUsIHRoZSBsb2dvdXQgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYXQgdGhlIGlkUCwgc2VuZHMgYSBMb2dvdXQKICAgIFJlcXVlc3QgdG8gdGhlIFNQIChTTFMgZW5kcG9pbnQgYHNscy5waHBgIG9mIHRoZSBlbmRwb2ludCBmb2xkZXIpLgogICAgVGhlIFNMUyBlbmRwb2ludCBvZiB0aGUgU1AgcHJvY2VzcyB0aGUgTG9nb3V0IFJlcXVlc3QgYW5kIGlmIGlzIHZhbGlkLAogICAgY2xvc2UgdGhlIHNlc3Npb24gb2YgdGhlIHVzZXIgYXQgdGhlIGxvY2FsIGFwcCBhbmQgc2VuZHMgYSBMb2dvdXQgUmVzcG9uc2UKICAgIHRvIHRoZSBJZFAgKHRvIHRoZSBTTFMgZW5kcG9pbnQgb2YgdGhlIElkUCkuVGhlIElkUCByZWNlaXZlcyB0aGUgTG9nb3V0CiAgICBSZXNwb25zZSwgcHJvY2VzcyBpdCBhbmQgY2xvc2UgdGhlIHNlc3Npb24gYXQgb2YgdGhlIElkUC4gTm90aWNlIHRoYXQgdGhlCiAgICBTTE8gV29ya2Zsb3cgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBJZFAuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/settings_example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRzZXR0aW5ncyA9IGFycmF5KAogICAgLy8gSWYgJ3N0cmljdCcgaXMgVHJ1ZSwgdGhlbiB0aGUgUEhQIFRvb2xraXQgd2lsbCByZWplY3QgdW5zaWduZWQKICAgIC8vIG9yIHVuZW5jcnlwdGVkIG1lc3NhZ2VzIGlmIGl0IGV4cGVjdHMgdGhlbSBzaWduZWQgb3IgZW5jcnlwdGVkCiAgICAvLyBBbHNvIHdpbGwgcmVqZWN0IHRoZSBtZXNzYWdlcyBpZiBub3Qgc3RyaWN0bHkgZm9sbG93IHRoZSBTQU1MCiAgICAvLyBzdGFuZGFyZDogRGVzdGluYXRpb24sIE5hbWVJZCwgQ29uZGl0aW9ucyAuLi4gYXJlIHZhbGlkYXRlZCB0b28uCiAgICAnc3RyaWN0JyA9PiB0cnVlLAoKICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlICh0byBwcmludCBlcnJvcnMpCiAgICAnZGVidWcnID0+IGZhbHNlLAoKICAgIC8vIFNldCBhIEJhc2VVUkwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRyeSB0byBndWVzcwogICAgLy8gdGhlIEJhc2VVUkwgb2YgdGhlIHZpZXcgdGhhdCBwcm9jZXNzIHRoZSBTQU1MIE1lc3NhZ2UuCiAgICAvLyBFeC4gaHR0cDovL3NwLmV4YW1wbGUuY29tLwogICAgLy8gICAgIGh0dHA6Ly9leGFtcGxlLmNvbS9zcC8KICAgICdiYXNldXJsJyA9PiBudWxsLAoKICAgIC8vIFNlcnZpY2UgUHJvdmlkZXIgRGF0YSB0aGF0IHdlIGFyZSBkZXBsb3lpbmcKICAgICdzcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgU1AgZW50aXR5ICAobXVzdCBiZSBhIFVSSSkKICAgICAgICAnZW50aXR5SWQnID0+ICcnLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxBdXRoblJlc3BvbnNlPiBtZXNzYWdlIE1VU1QgYmUKICAgICAgICAvLyByZXR1cm5lZCB0byB0aGUgcmVxdWVzdGVyLCBpbiB0aGlzIGNhc2Ugb3VyIFNQLgogICAgICAgICdhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVBPU1QgYmluZGluZyBvbmx5CiAgICAgICAgICAgICdiaW5kaW5nJyA9PiAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUE9TVCcsCiAgICAgICAgKSwKICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHJlcXVlc3RlZCBhdHRyaWJ1dGVzLCBzZXQgYQogICAgICAgIC8vIGF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UuIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlIGFuZAogICAgICAgIC8vIGZyaWVuZGx5TmFtZSBjYW4gYmUgb21pdHRlZC4gT3RoZXJ3aXNlIHJlbW92ZSB0aGlzIHNlY3Rpb24uCiAgICAgICAgImF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAic2VydmljZU5hbWUiID0+ICJTUCB0ZXN0IiwKICAgICAgICAgICAgICAgICJzZXJ2aWNlRGVzY3JpcHRpb24iID0+ICJUZXN0IFNlcnZpY2UiLAogICAgICAgICAgICAgICAgInJlcXVlc3RlZEF0dHJpYnV0ZXMiID0+IGFycmF5KAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc1JlcXVpcmVkIiA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVGb3JtYXQiID0+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAiZnJpZW5kbHlOYW1lIiA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZVZhbHVlIiA9PiAiIgogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICApLAogICAgICAgIC8vIFNwZWNpZmllcyBpbmZvIGFib3V0IHdoZXJlIGFuZCBob3cgdGhlIDxMb2dvdXQgUmVzcG9uc2U+IG1lc3NhZ2UgTVVTVCBiZQogICAgICAgIC8vIHJldHVybmVkIHRvIHRoZSByZXF1ZXN0ZXIsIGluIHRoaXMgY2FzZSBvdXIgU1AuCiAgICAgICAgJ3NpbmdsZUxvZ291dFNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gd2hlcmUgdGhlIDxSZXNwb25zZT4gZnJvbSB0aGUgSWRQIHdpbGwgYmUgcmV0dXJuZWQKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVJlZGlyZWN0IGJpbmRpbmcgb25seQogICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVJlZGlyZWN0JywKICAgICAgICApLAogICAgICAgIC8vIFNwZWNpZmllcyBjb25zdHJhaW50cyBvbiB0aGUgbmFtZSBpZGVudGlmaWVyIHRvIGJlIHVzZWQgdG8KICAgICAgICAvLyByZXByZXNlbnQgdGhlIHJlcXVlc3RlZCBzdWJqZWN0LgogICAgICAgIC8vIFRha2UgYSBsb29rIG9uIGxpYi9TYW1sMi9Db25zdGFudHMucGhwIHRvIHNlZSB0aGUgTmFtZUlkRm9ybWF0IHN1cHBvcnRlZAogICAgICAgICdOYW1lSURGb3JtYXQnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCcsCgogICAgICAgIC8vIFVzdWFsbHkgeDUwOWNlcnQgYW5kIHByaXZhdGVLZXkgb2YgdGhlIFNQIGFyZSBwcm92aWRlZCBieSBmaWxlcyBwbGFjZWQgYXQKICAgICAgICAvLyB0aGUgY2VydHMgZm9sZGVyLiBCdXQgd2UgY2FuIGFsc28gcHJvdmlkZSB0aGVtIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAncHJpdmF0ZUtleScgPT4gJycsCgogICAgICAgIC8qCiAgICAgICAgICogS2V5IHJvbGxvdmVyCiAgICAgICAgICogSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSBTUCB4NTA5Y2VydCBhbmQgcHJpdmF0ZUtleQogICAgICAgICAqIHlvdSBjYW4gZGVmaW5lIGhlcmUgdGhlIG5ldyB4NTA5Y2VydCBhbmQgaXQgd2lsbCBiZSAKICAgICAgICAgKiBwdWJsaXNoZWQgb24gdGhlIFNQIG1ldGFkYXRhIHNvIElkZW50aXR5IFByb3ZpZGVycyBjYW4KICAgICAgICAgKiByZWFkIHRoZW0gYW5kIGdldCByZWFkeSBmb3Igcm9sbG92ZXIuCiAgICAgICAgICovCiAgICAgICAgLy8gJ3g1MDljZXJ0TmV3JyA9PiAnJywKICAgICksCgogICAgLy8gSWRlbnRpdHkgUHJvdmlkZXIgRGF0YSB0aGF0IHdlIHdhbnQgY29ubmVjdCB3aXRoIG91ciBTUAogICAgJ2lkcCcgPT4gYXJyYXkoCiAgICAgICAgLy8gSWRlbnRpZmllciBvZiB0aGUgSWRQIGVudGl0eSAgKG11c3QgYmUgYSBVUkkpCiAgICAgICAgJ2VudGl0eUlkJyA9PiAnJywKICAgICAgICAvLyBTU08gZW5kcG9pbnQgaW5mbyBvZiB0aGUgSWRQLiAoQXV0aGVudGljYXRpb24gUmVxdWVzdCBwcm90b2NvbCkKICAgICAgICAnc2luZ2xlU2lnbk9uU2VydmljZScgPT4gYXJyYXkoCiAgICAgICAgICAgIC8vIFVSTCBUYXJnZXQgb2YgdGhlIElkUCB3aGVyZSB0aGUgU1Agd2lsbCBzZW5kIHRoZSBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IE1lc3NhZ2UKICAgICAgICAgICAgJ3VybCcgPT4gJycsCiAgICAgICAgICAgIC8vIFNBTUwgcHJvdG9jb2wgYmluZGluZyB0byBiZSB1c2VkIHdoZW4gcmV0dXJuaW5nIHRoZSA8UmVzcG9uc2U+CiAgICAgICAgICAgIC8vIG1lc3NhZ2UuICBPbmVsb2dpbiBUb29sa2l0IHN1cHBvcnRzIGZvciB0aGlzIGVuZHBvaW50IHRoZQogICAgICAgICAgICAvLyBIVFRQLVJlZGlyZWN0IGJpbmRpbmcgb25seQogICAgICAgICAgICAnYmluZGluZycgPT4gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVJlZGlyZWN0JywKICAgICAgICApLAogICAgICAgIC8vIFNMTyBlbmRwb2ludCBpbmZvIG9mIHRoZSBJZFAuCiAgICAgICAgJ3NpbmdsZUxvZ291dFNlcnZpY2UnID0+IGFycmF5KAogICAgICAgICAgICAvLyBVUkwgTG9jYXRpb24gb2YgdGhlIElkUCB3aGVyZSB0aGUgU1Agd2lsbCBzZW5kIHRoZSBTTE8gUmVxdWVzdAogICAgICAgICAgICAndXJsJyA9PiAnJywKICAgICAgICAgICAgLy8gVVJMIGxvY2F0aW9uIG9mIHRoZSBJZFAgd2hlcmUgdGhlIFNQIFNMTyBSZXNwb25zZSB3aWxsIGJlIHNlbnQgKFJlc3BvbnNlTG9jYXRpb24pCiAgICAgICAgICAgIC8vIGlmIG5vdCBzZXQsIHVybCBmb3IgdGhlIFNMTyBSZXF1ZXN0IHdpbGwgYmUgdXNlZAogICAgICAgICAgICAncmVzcG9uc2VVcmwnID0+ICcnLAogICAgICAgICAgICAvLyBTQU1MIHByb3RvY29sIGJpbmRpbmcgdG8gYmUgdXNlZCB3aGVuIHJldHVybmluZyB0aGUgPFJlc3BvbnNlPgogICAgICAgICAgICAvLyBtZXNzYWdlLiAgT25lbG9naW4gVG9vbGtpdCBzdXBwb3J0cyBmb3IgdGhpcyBlbmRwb2ludCB0aGUKICAgICAgICAgICAgLy8gSFRUUC1SZWRpcmVjdCBiaW5kaW5nIG9ubHkKICAgICAgICAgICAgJ2JpbmRpbmcnID0+ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCcsCiAgICAgICAgKSwKICAgICAgICAvLyBQdWJsaWMgeDUwOSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSWRQCiAgICAgICAgJ3g1MDljZXJ0JyA9PiAnJywKICAgICAgICAvKgogICAgICAgICAqICBJbnN0ZWFkIG9mIHVzZSB0aGUgd2hvbGUgeDUwOWNlcnQgeW91IGNhbiB1c2UgYSBmaW5nZXJwcmludCBpbgogICAgICAgICAqICBvcmRlciB0byB2YWxpZGF0ZSB0aGUgU0FNTFJlc3BvbnNlLCBidXQgd2UgZG9uJ3QgcmVjb21tZW5kIHRvIHVzZQogICAgICAgICAqICB0aGF0IG1ldGhvZCBvbiBwcm9kdWN0aW9uIHNpbmNlIGlzIGV4cGxvaXRhYmxlIGJ5IGEgY29sbGlzaW9uCiAgICAgICAgICogIGF0dGFjay4KICAgICAgICAgKiAgKG9wZW5zc2wgeDUwOSAtbm9vdXQgLWZpbmdlcnByaW50IC1pbiAiaWRwLmNydCIgdG8gZ2VuZXJhdGUgaXQsCiAgICAgICAgICogICBvciBhZGQgZm9yIGV4YW1wbGUgdGhlIC1zaGEyNTYgLCAtc2hhMzg0IG9yIC1zaGE1MTIgcGFyYW1ldGVyKQogICAgICAgICAqCiAgICAgICAgICogIElmIGEgZmluZ2VycHJpbnQgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGNlcnRGaW5nZXJwcmludEFsZ29yaXRobSBpcyByZXF1aXJlZCBpbiBvcmRlciB0bwogICAgICAgICAqICBsZXQgdGhlIHRvb2xraXQga25vdyB3aGljaCBBbGdvcml0aG0gd2FzIHVzZWQuIFBvc3NpYmxlIHZhbHVlczogc2hhMSwgc2hhMjU2LCBzaGEzODQgb3Igc2hhNTEyCiAgICAgICAgICogICdzaGExJyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICAvLyAnY2VydEZpbmdlcnByaW50JyA9PiAnJywKICAgICAgICAvLyAnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJyA9PiAnc2hhMScsCgogICAgICAgIC8qIEluIHNvbWUgc2NlbmFyaW9zIHRoZSBJZFAgdXNlcyBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIGZvcgogICAgICAgICAqIHNpZ25pbmcvZW5jcnlwdGlvbiwgb3IgaXMgdW5kZXIga2V5IHJvbGxvdmVyIHBoYXNlIGFuZCBtb3JlIAogICAgICAgICAqIHRoYW4gb25lIGNlcnRpZmljYXRlIGlzIHB1Ymxpc2hlZCBvbiBJZFAgbWV0YWRhdGEuCiAgICAgICAgICogSW4gb3JkZXIgdG8gaGFuZGxlIHRoYXQgdGhlIHRvb2xraXQgb2ZmZXJzIHRoYXQgcGFyYW1ldGVyLgogICAgICAgICAqICh3aGVuIHVzZWQsICd4NTA5Y2VydCcgYW5kICdjZXJ0RmluZ2VycHJpbnQnIHZhbHVlcyBhcmUKICAgICAgICAgKiBpZ25vcmVkKS4KICAgICAgICAgKi8KICAgICAgICAvLyAneDUwOWNlcnRNdWx0aScgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAnc2lnbmluZycgPT4gYXJyYXkoCiAgICAgICAgLy8gICAgICAgICAgMCA9PiAnPGNlcnQxLXN0cmluZz4nLAogICAgICAgIC8vICAgICAgKSwKICAgICAgICAvLyAgICAgICdlbmNyeXB0aW9uJyA9PiBhcnJheSgKICAgICAgICAvLyAgICAgICAgICAwID0+ICc8Y2VydDItc3RyaW5nPicsCiAgICAgICAgLy8gICAgICApCiAgICAgICAgLy8gKSwKICAgICksCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Auth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKCnVzZSBFeGNlcHRpb247CgovKioKICogTWFpbiBjbGFzcyBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBBdXRoCnsKICAgIC8qKgogICAgICogU2V0dGluZ3MgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIFNldHRpbmdzCiAgICAgKi8KICAgIHByaXZhdGUgJF9zZXR0aW5nczsKCiAgICAvKioKICAgICAqIFVzZXIgYXR0cmlidXRlcyBkYXRhLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX2F0dHJpYnV0ZXMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogVXNlciBhdHRyaWJ1dGVzIGRhdGEgd2l0aCBGcmllbmRseU5hbWUgaW5kZXguCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogTmFtZUlECiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX25hbWVpZDsKCiAgICAvKioKICAgICAqIE5hbWVJRCBGb3JtYXQKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbmFtZWlkRm9ybWF0OwoKICAgIC8qKgogICAgICogTmFtZUlEIE5hbWVRdWFsaWZpZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbmFtZWlkTmFtZVF1YWxpZmllcjsKCiAgICAvKioKICAgICAqIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX25hbWVpZFNQTmFtZVF1YWxpZmllcjsKCiAgICAvKioKICAgICAqIElmIHVzZXIgaXMgYXV0aGVudGljYXRlZC4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkX2F1dGhlbnRpY2F0ZWQgPSBmYWxzZTsKCgogICAgLyoqCiAgICAgKiBTZXNzaW9uSW5kZXguIFdoZW4gdGhlIHVzZXIgaXMgbG9nZ2VkLCB0aGlzIHN0b3JlZCBpdAogICAgICogZnJvbSB0aGUgQXV0aG5TdGF0ZW1lbnQgb2YgdGhlIFNBTUwgUmVzcG9uc2UKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfc2Vzc2lvbkluZGV4OwoKICAgIC8qKgogICAgICogU2Vzc2lvbk5vdE9uT3JBZnRlci4gV2hlbiB0aGUgdXNlciBpcyBsb2dnZWQsIHRoaXMgc3RvcmVkIGl0CiAgICAgKiBmcm9tIHRoZSBBdXRoblN0YXRlbWVudCBvZiB0aGUgU0FNTCBSZXNwb25zZQogICAgICoKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkX3Nlc3Npb25FeHBpcmF0aW9uOwoKICAgIC8qKgogICAgICogVGhlIElEIG9mIHRoZSBsYXN0IG1lc3NhZ2UgcHJvY2Vzc2VkCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhc3RNZXNzYWdlSWQ7CgogICAgLyoqCiAgICAgKiBUaGUgSUQgb2YgdGhlIGxhc3QgYXNzZXJ0aW9uIHByb2Nlc3NlZAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0QXNzZXJ0aW9uSWQ7CgogICAgLyoqCiAgICAgKiBUaGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZCBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YQogICAgICogbm9kZSAoaWYgYW55KSBvZiB0aGUgbGFzdCBhc3NlcnRpb24gcHJvY2Vzc2VkCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXI7CgogICAgLyoqCiAgICAgKiBJZiBhbnkgZXJyb3IuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfZXJyb3JzID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIExhc3QgZXJyb3Igb2JqZWN0LgogICAgICoKICAgICAqIEB2YXIgRXJyb3J8bnVsbAogICAgICovCiAgICBwcml2YXRlICRfbGFzdEVycm9yRXhjZXB0aW9uOwoKICAgIC8qKgogICAgICogTGFzdCBlcnJvci4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0RXJyb3I7CgogICAgLyoqCiAgICAgKiBMYXN0IEF1dGhOUmVxdWVzdCBJRCBvciBMb2dvdXRSZXF1ZXN0IElEIGdlbmVyYXRlZCBieSB0aGlzIFNlcnZpY2UgUHJvdmlkZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfbGFzdFJlcXVlc3RJRDsKCiAgICAvKioKICAgICAqIFRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXF1ZXN0CiAgICAgKiAoQXV0aE5SZXF1ZXN0LCBMb2dvdXRSZXF1ZXN0KQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0UmVxdWVzdDsKCiAgICAvKioKICAgICAqIFRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZCBYTUwgU0FNTCByZXNwb25zZQogICAgICogKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLiBJZiB0aGUgU0FNTFJlc3BvbnNlIHdhcwogICAgICogZW5jcnlwdGVkLCBieSBkZWZhdWx0IHRyaWVzIHRvIHJldHVybiB0aGUgZGVjcnlwdGVkIFhNTAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nfFxEb21Eb2N1bWVudHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0UmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplcyB0aGUgU1AgU0FNTCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkc2V0dGluZ3MgU2V0dGluZyBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkc3BWYWxpZGF0aW9uT25seSBpZiB0cnVlLCBUaGUgbGlicmFyeSB3aWxsIG9ubHkgdmFsaWRhdGUgdGhlIFNBTUwgU1Agc2V0dGluZ3MsCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9hcnJheSAkc2V0dGluZ3MgPSBudWxsLCBib29sICRzcFZhbGlkYXRpb25Pbmx5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygkc2V0dGluZ3MsICRzcFZhbGlkYXRpb25Pbmx5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNldHRpbmdzIGluZm8KICAgICAqCiAgICAgKiBAcmV0dXJuIFNldHRpbmdzIFRoZSBzZXR0aW5ncyBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzdHJpY3QgbW9kZSBhY3RpdmUvZGlzYWJsZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICR2YWx1ZSBTdHJpY3QgcGFyYW1ldGVyCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RyaWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWlzX2Jvb2woJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnSW52YWxpZCB2YWx1ZSBwYXNzZWQgdG8gc2V0U3RyaWN0KCknLAogICAgICAgICAgICAgICAgRXJyb3I6OlNFVFRJTkdTX0lOVkFMSURfU1lOVEFYCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+X3NldHRpbmdzLT5zZXRTdHJpY3QoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBzY2hlbWFzIHBhdGgKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTY2hlbWFzUGF0aCgkcGF0aCkKICAgIHsKICAgICAgICAkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ10gPSAkcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgdGhlIFNBTUwgUmVzcG9uc2Ugc2VudCBieSB0aGUgSWRQLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcmVxdWVzdElkIFRoZSBJRCBvZiB0aGUgQXV0aE5SZXF1ZXN0IHNlbnQgYnkgdGhpcyBTUCB0byB0aGUgSWRQCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NSZXNwb25zZSgkcmVxdWVzdElkID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2Vycm9ycyA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPl9sYXN0RXJyb3IgPSAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnU0FNTFJlc3BvbnNlJ10pKSB7CiAgICAgICAgICAgIC8vIEF1dGhuUmVzcG9uc2UgLS0gSFRUUF9QT1NUIEJpbmRpbmcKICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MsICRfUE9TVFsnU0FNTFJlc3BvbnNlJ10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRyZXNwb25zZS0+Z2V0WE1MRG9jdW1lbnQoKTsKCiAgICAgICAgICAgIGlmICgkcmVzcG9uc2UtPmlzVmFsaWQoJHJlcXVlc3RJZCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fYXR0cmlidXRlcyA9ICRyZXNwb25zZS0+Z2V0QXR0cmlidXRlcygpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9hdHRyaWJ1dGVzV2l0aEZyaWVuZGx5TmFtZSA9ICRyZXNwb25zZS0+Z2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkID0gJHJlc3BvbnNlLT5nZXROYW1lSWQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkRm9ybWF0ID0gJHJlc3BvbnNlLT5nZXROYW1lSWRGb3JtYXQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbmFtZWlkTmFtZVF1YWxpZmllciA9ICRyZXNwb25zZS0+Z2V0TmFtZUlkTmFtZVF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9uYW1laWRTUE5hbWVRdWFsaWZpZXIgPSAkcmVzcG9uc2UtPmdldE5hbWVJZFNQTmFtZVF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9hdXRoZW50aWNhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5fc2Vzc2lvbkluZGV4ID0gJHJlc3BvbnNlLT5nZXRTZXNzaW9uSW5kZXgoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fc2Vzc2lvbkV4cGlyYXRpb24gPSAkcmVzcG9uc2UtPmdldFNlc3Npb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdE1lc3NhZ2VJZCA9ICRyZXNwb25zZS0+Z2V0SWQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEFzc2VydGlvbklkID0gJHJlc3BvbnNlLT5nZXRBc3NlcnRpb25JZCgpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9sYXN0QXNzZXJ0aW9uTm90T25PckFmdGVyID0gJHJlc3BvbnNlLT5nZXRBc3NlcnRpb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzW10gPSAnaW52YWxpZF9yZXNwb25zZSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9ICRyZXNwb25zZS0+Z2V0RXJyb3JFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yID0gJHJlc3BvbnNlLT5nZXRFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2JpbmRpbmcnOwogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnU0FNTCBSZXNwb25zZSBub3QgZm91bmQsIE9ubHkgc3VwcG9ydGVkIEhUVFBfUE9TVCBCaW5kaW5nJywKICAgICAgICAgICAgICAgIEVycm9yOjpTQU1MX1JFU1BPTlNFX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgdGhlIFNBTUwgTG9nb3V0IFJlc3BvbnNlIC8gTG9nb3V0IFJlcXVlc3Qgc2VudCBieSB0aGUgSWRQLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICAgICAgICAka2VlcExvY2FsU2Vzc2lvbiAgICAgICAgICAgICBXaGVuIGZhbHNlIHdpbGwgZGVzdHJveSB0aGUgbG9jYWwgc2Vzc2lvbiwgb3RoZXJ3aXNlIHdpbGwga2VlcCBpdAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1ZXN0SWQgICAgICAgICAgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgTG9nb3V0UmVxdWVzdCBzZW50IGJ5IHRoaXMgU1AgdG8gdGhlIElkUAogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyIFRydWUgaWYgd2Ugd2FudCB0byB1c2UgcGFyYW1ldGVycyBmcm9tICRfU0VSVkVSIHRvIHZhbGlkYXRlIHRoZSBzaWduYXR1cmUKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAgICAkY2JEZWxldGVTZXNzaW9uICAgICAgICAgICAgICBDYWxsYmFjayB0byBiZSBleGVjdXRlZCB0byBkZWxldGUgc2Vzc2lvbgogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRzdGF5ICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqIEBwaHBzdGFuLXJldHVybiAoJHN0YXkgaXMgdHJ1ZSA/IHN0cmluZyA6IG5ldmVyKQogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NTTE8oJGtlZXBMb2NhbFNlc3Npb24gPSBmYWxzZSwgJHJlcXVlc3RJZCA9IG51bGwsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyID0gZmFsc2UsICRjYkRlbGV0ZVNlc3Npb24gPSBudWxsLCAkc3RheSA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3JzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2xhc3RFcnJvciA9ICR0aGlzLT5fbGFzdEVycm9yRXhjZXB0aW9uID0gbnVsbDsKICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ1NBTUxSZXNwb25zZSddKSkgewogICAgICAgICAgICAkbG9nb3V0UmVzcG9uc2UgPSAkdGhpcy0+YnVpbGRMb2dvdXRSZXNwb25zZSgkdGhpcy0+X3NldHRpbmdzLCAkX0dFVFsnU0FNTFJlc3BvbnNlJ10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRsb2dvdXRSZXNwb25zZS0+Z2V0WE1MKCk7CiAgICAgICAgICAgIGlmICghJGxvZ291dFJlc3BvbnNlLT5pc1ZhbGlkKCRyZXF1ZXN0SWQsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2xvZ291dF9yZXNwb25zZSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvckV4Y2VwdGlvbiA9ICRsb2dvdXRSZXNwb25zZS0+Z2V0RXJyb3JFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yID0gJGxvZ291dFJlc3BvbnNlLT5nZXRFcnJvcigpOwoKICAgICAgICAgICAgfSBlbHNlIGlmICgkbG9nb3V0UmVzcG9uc2UtPmdldFN0YXR1cygpICE9PSBDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2Vycm9yc1tdID0gJ2xvZ291dF9ub3Rfc3VjY2Vzcyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RNZXNzYWdlSWQgPSAkbG9nb3V0UmVzcG9uc2UtPmlkOwogICAgICAgICAgICAgICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2JEZWxldGVTZXNzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkY2JEZWxldGVTZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCRfR0VUWydTQU1MUmVxdWVzdCddKSkgewogICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9ICR0aGlzLT5idWlsZExvZ291dFJlcXVlc3QoJHRoaXMtPl9zZXR0aW5ncywgJF9HRVRbJ1NBTUxSZXF1ZXN0J10pOwogICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXF1ZXN0ID0gJGxvZ291dFJlcXVlc3QtPmdldFhNTCgpOwogICAgICAgICAgICBpZiAoISRsb2dvdXRSZXF1ZXN0LT5pc1ZhbGlkKCRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnNbXSA9ICdpbnZhbGlkX2xvZ291dF9yZXF1ZXN0JzsKICAgICAgICAgICAgICAgICR0aGlzLT5fbGFzdEVycm9yRXhjZXB0aW9uID0gJGxvZ291dFJlcXVlc3QtPmdldEVycm9yRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RFcnJvciA9ICRsb2dvdXRSZXF1ZXN0LT5nZXRFcnJvcigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCEka2VlcExvY2FsU2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2JEZWxldGVTZXNzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzOjpkZWxldGVMb2NhbFNlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkY2JEZWxldGVTZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaW5SZXNwb25zZVRvID0gJGxvZ291dFJlcXVlc3QtPmlkOwogICAgICAgICAgICAgICAgJHRoaXMtPl9sYXN0TWVzc2FnZUlkID0gJGxvZ291dFJlcXVlc3QtPmlkOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlQnVpbGRlciA9ICR0aGlzLT5idWlsZExvZ291dFJlc3BvbnNlKCR0aGlzLT5fc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlQnVpbGRlci0+YnVpbGQoJGluUmVzcG9uc2VUbyk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RSZXNwb25zZSA9ICRyZXNwb25zZUJ1aWxkZXItPmdldFhNTCgpOwoKICAgICAgICAgICAgICAgICRsb2dvdXRSZXNwb25zZSA9ICRyZXNwb25zZUJ1aWxkZXItPmdldFJlc3BvbnNlKCk7CgogICAgICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnU0FNTFJlc3BvbnNlJyA9PiAkbG9nb3V0UmVzcG9uc2UpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydSZWxheVN0YXRlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSA9ICRfR0VUWydSZWxheVN0YXRlJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U2VjdXJpdHlEYXRhKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHNlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2xvZ291dFJlc3BvbnNlU2lnbmVkJ10pIHsKICAgICAgICAgICAgICAgICAgICAkc2lnbmF0dXJlID0gJHRoaXMtPmJ1aWxkUmVzcG9uc2VTaWduYXR1cmUoJGxvZ291dFJlc3BvbnNlLCBpc3NldCgkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddKT8gJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXTogbnVsbCwgJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXSk7CiAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ0FsZyddID0gJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXTsKICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyc1snU2lnbmF0dXJlJ10gPSAkc2lnbmF0dXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVkaXJlY3RUbygkdGhpcy0+Z2V0U0xPUmVzcG9uc2VVcmwoKSwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzW10gPSAnaW52YWxpZF9iaW5kaW5nJzsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgJ1NBTUwgTG9nb3V0UmVxdWVzdC9Mb2dvdXRSZXNwb25zZSBub3QgZm91bmQuIE9ubHkgc3VwcG9ydGVkIEhUVFBfUkVESVJFQ1QgQmluZGluZycsCiAgICAgICAgICAgICAgICBFcnJvcjo6U0FNTF9MT0dPVVRNRVNTQUdFX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZGlyZWN0cyB0aGUgdXNlciB0byB0aGUgdXJsIHBhc3QgYnkgcGFyYW1ldGVyCiAgICAgKiBvciB0byB0aGUgdXJsIHRoYXQgd2UgZGVmaW5lZCBpbiBvdXIgU1NPIFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsICAgICAgICBUaGUgdGFyZ2V0IFVSTCB0byByZWRpcmVjdCB0aGUgdXNlci4KICAgICAqIEBwYXJhbSBhcnJheSAgJHBhcmFtZXRlcnMgRXh0cmEgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgYXMgcGFydCBvZiB0aGUgdXJsCiAgICAgKiBAcGFyYW0gYm9vbCAgICRzdGF5ICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqIEBwaHBzdGFuLXJldHVybiAoJHN0YXkgaXMgdHJ1ZSA/IHN0cmluZyA6IG5ldmVyKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVkaXJlY3RUbygkdXJsID0gJycsIGFycmF5ICRwYXJhbWV0ZXJzID0gYXJyYXkoKSwgJHN0YXkgPSBmYWxzZSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCR1cmwpKTsKCiAgICAgICAgaWYgKGVtcHR5KCR1cmwpICYmIGlzc2V0KCRfUkVRVUVTVFsnUmVsYXlTdGF0ZSddKSkgewogICAgICAgICAgICAkdXJsID0gJF9SRVFVRVNUWydSZWxheVN0YXRlJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXRpbHM6OnJlZGlyZWN0KCR1cmwsICRwYXJhbWV0ZXJzLCAkc3RheSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sICBUcnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQXV0aGVudGljYXRlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fYXV0aGVudGljYXRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBTQU1MIGF0dHJpYnV0ZXMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgQXR0cmlidXRlcyBvZiB0aGUgdXNlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXM7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2V0IG9mIFNBTUwgYXR0cmlidXRlcyBpbmRleGVkIGJ5IEZyaWVuZGx5TmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgIEF0dHJpYnV0ZXMgb2YgdGhlIHVzZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzV2l0aEZyaWVuZGx5TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgVGhlIG5hbWVJRCBvZiB0aGUgYXNzZXJ0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lSWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X25hbWVpZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVJRCBGb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgVGhlIG5hbWVJRCBGb3JtYXQgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkRm9ybWF0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9uYW1laWRGb3JtYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lSUQgTmFtZVF1YWxpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICBUaGUgbmFtZUlEIE5hbWVRdWFsaWZpZXIgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbmFtZWlkTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgIFRoZSBuYW1lSUQgU1AgTmFtZVF1YWxpZmllciBvZiB0aGUgYXNzZXJ0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lSWRTUE5hbWVRdWFsaWZpZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X25hbWVpZFNQTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFNlc3Npb25JbmRleAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgIFRoZSBTZXNzaW9uSW5kZXggb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zZXNzaW9uSW5kZXg7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBTZXNzaW9uTm90T25PckFmdGVyCiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbCAgVGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgb2YgdGhlIGFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkV4cGlyYXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Nlc3Npb25FeHBpcmF0aW9uOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgIEVycm9ycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9lcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZWFzb24gZm9yIHRoZSBsYXN0IGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAgRXJyb3IgcmVhc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RXJyb3JSZWFzb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RFcnJvcjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yRXhjZXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sYXN0RXJyb3JFeGNlcHRpb247CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIG9mIHRoZSB1c2VyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBSZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUgKCRuYW1lKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZSgkbmFtZSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCRuYW1lKSk7CgogICAgICAgICR2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fYXR0cmlidXRlc1skbmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXNbJG5hbWVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdGVkIFNBTUwgYXR0cmlidXRlIGluZGV4ZWQgYnkgRnJpZW5kbHlOYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZnJpZW5kbHlOYW1lIFRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlIG9mIHRoZSB1c2VyLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBSZXF1ZXN0ZWQgU0FNTCBhdHRyaWJ1dGUgKCRmcmllbmRseU5hbWUpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlV2l0aEZyaWVuZGx5TmFtZSgkZnJpZW5kbHlOYW1lKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGZyaWVuZGx5TmFtZSkpOwogICAgICAgICR2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fYXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWVbJGZyaWVuZGx5TmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2F0dHJpYnV0ZXNXaXRoRnJpZW5kbHlOYW1lWyRmcmllbmRseU5hbWVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogSW5pdGlhdGVzIHRoZSBTU08gcHJvY2Vzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldHVyblRvICAgICAgICBUaGUgdGFyZ2V0IFVSTCB0aGUgdXNlciBzaG91bGQgYmUgcmV0dXJuZWQgdG8gYWZ0ZXIgbG9naW4uCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgJHBhcmFtZXRlcnMgICAgICBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBHRVQKICAgICAqIEBwYXJhbSBib29sICAgICAgICAkZm9yY2VBdXRobiAgICAgIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXF1ZXN0IHdpbGwgc2V0IHRoZSBGb3JjZUF1dGhuPSd0cnVlJwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRpc1Bhc3NpdmUgICAgICAgV2hlbiB0cnVlIHRoZSBBdXRoTlJlcXVlc3Qgd2lsbCBzZXQgdGhlIElzcGFzc2l2ZT0ndHJ1ZScKICAgICAqIEBwYXJhbSBib29sICAgICAgICAkc3RheSAgICAgICAgICAgIFRydWUgaWYgd2Ugd2FudCB0byBzdGF5IChyZXR1cm5zIHRoZSB1cmwgc3RyaW5nKSBGYWxzZSB0byByZWRpcmVjdAogICAgICogQHBhcmFtIGJvb2wgICAgICAgICRzZXROYW1lSWRQb2xpY3kgV2hlbiB0cnVlIHRoZSBBdXRoTlJlcXVlc3Qgd2lsbCBzZXQgYSBuYW1lSWRQb2xpY3kgZWxlbWVudAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lSWRWYWx1ZVJlcSAgSW5kaWNhdGVzIHRvIHRoZSBJZFAgdGhlIHN1YmplY3QgdGhhdCBzaG91bGQgYmUgYXV0aGVudGljYXRlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgSWYgJHN0YXkgaXMgVHJ1ZSwgaXQgcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIFNMTyBVUkwgKyBMb2dvdXRSZXF1ZXN0ICsgcGFyYW1ldGVycwogICAgICogQHBocHN0YW4tcmV0dXJuICgkc3RheSBpcyB0cnVlID8gc3RyaW5nIDogbmV2ZXIpCiAgICAgKgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9naW4oJHJldHVyblRvID0gbnVsbCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkZm9yY2VBdXRobiA9IGZhbHNlLCAkaXNQYXNzaXZlID0gZmFsc2UsICRzdGF5ID0gZmFsc2UsICRzZXROYW1lSWRQb2xpY3kgPSB0cnVlLCAkbmFtZUlkVmFsdWVSZXEgPSBudWxsKQogICAgewogICAgICAgICRhdXRoblJlcXVlc3QgPSAkdGhpcy0+YnVpbGRBdXRoblJlcXVlc3QoJHRoaXMtPl9zZXR0aW5ncywgJGZvcmNlQXV0aG4sICRpc1Bhc3NpdmUsICRzZXROYW1lSWRQb2xpY3ksICRuYW1lSWRWYWx1ZVJlcSk7CgogICAgICAgICR0aGlzLT5fbGFzdFJlcXVlc3QgPSAkYXV0aG5SZXF1ZXN0LT5nZXRYTUwoKTsKICAgICAgICAkdGhpcy0+X2xhc3RSZXF1ZXN0SUQgPSAkYXV0aG5SZXF1ZXN0LT5nZXRJZCgpOwoKICAgICAgICAkc2FtbFJlcXVlc3QgPSAkYXV0aG5SZXF1ZXN0LT5nZXRSZXF1ZXN0KCk7CiAgICAgICAgJHBhcmFtZXRlcnNbJ1NBTUxSZXF1ZXN0J10gPSAkc2FtbFJlcXVlc3Q7CgogICAgICAgIGlmICghZW1wdHkoJHJldHVyblRvKSkgewogICAgICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gJHJldHVyblRvOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydSZWxheVN0YXRlJ10gPSBVdGlsczo6Z2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKTsKICAgICAgICB9CgogICAgICAgICRzZWN1cml0eSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNlY3VyaXR5RGF0YSgpOwogICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSkgJiYgJHNlY3VyaXR5WydhdXRoblJlcXVlc3RzU2lnbmVkJ10pIHsKICAgICAgICAgICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5idWlsZFJlcXVlc3RTaWduYXR1cmUoJHNhbWxSZXF1ZXN0LCAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddLCAkc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddKTsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ0FsZyddID0gJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXTsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1NpZ25hdHVyZSddID0gJHNpZ25hdHVyZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWRpcmVjdFRvKCR0aGlzLT5nZXRTU091cmwoKSwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEluaXRpYXRlcyB0aGUgU0xPIHByb2Nlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXR1cm5UbyAgICAgICAgICAgIFRoZSB0YXJnZXQgVVJMIHRoZSB1c2VyIHNob3VsZCBiZSByZXR1cm5lZCB0byBhZnRlciBsb2dvdXQuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgJHBhcmFtZXRlcnMgICAgICAgICAgRXh0cmEgcGFyYW1ldGVycyB0byBiZSBhZGRlZCB0byB0aGUgR0VUCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZCAgICAgICAgICAgICAgVGhlIE5hbWVJRCB0aGF0IHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzZXNzaW9uSW5kZXggICAgICAgIFRoZSBTZXNzaW9uSW5kZXggKHRha2VuIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UgaW4gdGhlIFNTTyBwcm9jZXNzKS4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAkc3RheSAgICAgICAgICAgICAgICBUcnVlIGlmIHdlIHdhbnQgdG8gc3RheSAocmV0dXJucyB0aGUgdXJsIHN0cmluZykgRmFsc2UgdG8gcmVkaXJlY3QKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZUlkRm9ybWF0ICAgICAgICBUaGUgTmFtZUlEIEZvcm1hdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZUlkTmFtZVF1YWxpZmllciBUaGUgTmFtZUlEIE5hbWVRdWFsaWZpZXIgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiAkc3RheSBpcyBUcnVlLCBpdCByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgU0xPIFVSTCArIExvZ291dFJlcXVlc3QgKyBwYXJhbWV0ZXJzCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gKCRzdGF5IGlzIHRydWUgPyBzdHJpbmcgOiBuZXZlcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2dvdXQoJHJldHVyblRvID0gbnVsbCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRzdGF5ID0gZmFsc2UsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgICRzbG9VcmwgPSAkdGhpcy0+Z2V0U0xPdXJsKCk7CiAgICAgICAgaWYgKGVtcHR5KCRzbG9VcmwpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICdUaGUgSWRQIGRvZXMgbm90IHN1cHBvcnQgU2luZ2xlIExvZyBPdXQnLAogICAgICAgICAgICAgICAgRXJyb3I6OlNBTUxfU0lOR0xFX0xPR09VVF9OT1RfU1VQUE9SVEVECiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG5hbWVJZCkgJiYgIWVtcHR5KCR0aGlzLT5fbmFtZWlkKSkgewogICAgICAgICAgICAkbmFtZUlkID0gJHRoaXMtPl9uYW1laWQ7CiAgICAgICAgfQogICAgICAgIGlmIChlbXB0eSgkbmFtZUlkRm9ybWF0KSAmJiAhZW1wdHkoJHRoaXMtPl9uYW1laWRGb3JtYXQpKSB7CiAgICAgICAgICAgICRuYW1lSWRGb3JtYXQgPSAkdGhpcy0+X25hbWVpZEZvcm1hdDsKICAgICAgICB9CgogICAgICAgICRsb2dvdXRSZXF1ZXN0ID0gJHRoaXMtPmJ1aWxkTG9nb3V0UmVxdWVzdCgkdGhpcy0+X3NldHRpbmdzLCBudWxsLCAkbmFtZUlkLCAkc2Vzc2lvbkluZGV4LCAkbmFtZUlkRm9ybWF0LCAkbmFtZUlkTmFtZVF1YWxpZmllciwgJG5hbWVJZFNQTmFtZVF1YWxpZmllcik7CgogICAgICAgICR0aGlzLT5fbGFzdFJlcXVlc3QgPSAkbG9nb3V0UmVxdWVzdC0+Z2V0WE1MKCk7CiAgICAgICAgJHRoaXMtPl9sYXN0UmVxdWVzdElEID0gJGxvZ291dFJlcXVlc3QtPmlkOwoKICAgICAgICAkc2FtbFJlcXVlc3QgPSAkbG9nb3V0UmVxdWVzdC0+Z2V0UmVxdWVzdCgpOwoKICAgICAgICAkcGFyYW1ldGVyc1snU0FNTFJlcXVlc3QnXSA9ICRzYW1sUmVxdWVzdDsKICAgICAgICBpZiAoIWVtcHR5KCRyZXR1cm5UbykpIHsKICAgICAgICAgICAgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSA9ICRyZXR1cm5UbzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyYW1ldGVyc1snUmVsYXlTdGF0ZSddID0gVXRpbHM6OmdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoaXNzZXQoJHNlY3VyaXR5Wydsb2dvdXRSZXF1ZXN0U2lnbmVkJ10pICYmICRzZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSB7CiAgICAgICAgICAgICRzaWduYXR1cmUgPSAkdGhpcy0+YnVpbGRSZXF1ZXN0U2lnbmF0dXJlKCRzYW1sUmVxdWVzdCwgJHBhcmFtZXRlcnNbJ1JlbGF5U3RhdGUnXSwgJHNlY3VyaXR5WydzaWduYXR1cmVBbGdvcml0aG0nXSk7CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydTaWdBbGcnXSA9ICRzZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ107CiAgICAgICAgICAgICRwYXJhbWV0ZXJzWydTaWduYXR1cmUnXSA9ICRzaWduYXR1cmU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJlZGlyZWN0VG8oJHNsb1VybCwgJHBhcmFtZXRlcnMsICRzdGF5KTsKICAgIH0KCiAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNTTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBTaWduIE9uIFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNTT3VybCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUFNTT1VybCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgdXJsIG9mIHRoZSBJZFAgU2luZ2xlIExvZ291dCBTZXJ2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTTE91cmwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzLT5nZXRJZFBTTE9VcmwoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElkUCBTTE8gcmVzcG9uc2UgdXJsLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHJlc3BvbnNlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBMb2dvdXQgU2VydmljZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U0xPUmVzcG9uc2VVcmwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NldHRpbmdzLT5nZXRJZFBTTE9SZXNwb25zZVVybCgpOwogICAgfQoKCiAgICAvKioKICAgICAqIEdldHMgdGhlIElEIG9mIHRoZSBsYXN0IEF1dGhOUmVxdWVzdCBvciBMb2dvdXRSZXF1ZXN0IGdlbmVyYXRlZCBieSB0aGUgU2VydmljZSBQcm92aWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIFJlcXVlc3QgU0FNTCBtZXNzYWdlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3RJRCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbGFzdFJlcXVlc3RJRDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gQXV0aG5SZXF1ZXN0CiAgICAgKgogICAgICogQHBhcmFtIFNldHRpbmdzICRzZXR0aW5ncyAgICAgICAgU2V0dGluZyBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgJGZvcmNlQXV0aG4gICAgICBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCB0aGUgRm9yY2VBdXRobj0ndHJ1ZScKICAgICAqIEBwYXJhbSBib29sICAgICAkaXNQYXNzaXZlICAgICAgIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXF1ZXN0IHdpbGwgc2V0IHRoZSBJc3Bhc3NpdmU9J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgJHNldE5hbWVJZFBvbGljeSBXaGVuIHRydWUgdGhlIEF1dGhOUmVxdWVzdCB3aWxsIHNldCBhIG5hbWVJZFBvbGljeSBlbGVtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJG5hbWVJZFZhbHVlUmVxICBJbmRpY2F0ZXMgdG8gdGhlIElkUCB0aGUgc3ViamVjdCB0aGF0IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkCiAgICAgKgogICAgICogQHJldHVybiBBdXRoblJlcXVlc3QgVGhlIEF1dGhuUmVxdWVzdCBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkQXV0aG5SZXF1ZXN0KFNldHRpbmdzICRzZXR0aW5ncywgJGZvcmNlQXV0aG4sICRpc1Bhc3NpdmUsICRzZXROYW1lSWRQb2xpY3ksICRuYW1lSWRWYWx1ZVJlcSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBdXRoblJlcXVlc3QoJHNldHRpbmdzLCAkZm9yY2VBdXRobiwgJGlzUGFzc2l2ZSwgJHNldE5hbWVJZFBvbGljeSwgJG5hbWVJZFZhbHVlUmVxKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gTG9nb3V0UmVxdWVzdAogICAgICoKICAgICAqIEBwYXJhbSBTZXR0aW5ncyAgICAkc2V0dGluZ3MgICAgICAgICAgICBTZXR0aW5ncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1ZXN0ICAgICAgICAgICAgIEEgVVVFbmNvZGVkIExvZ291dCBSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRuYW1lSWQgICAgICAgICAgICAgIFRoZSBOYW1lSUQgdGhhdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2Vzc2lvbkluZGV4ICAgICAgICBUaGUgU2Vzc2lvbkluZGV4ICh0YWtlbiBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIGluIHRoZSBTU08gcHJvY2VzcykuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZEZvcm1hdCAgICAgICAgVGhlIE5hbWVJRCBGb3JtYXQgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVJZE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRMb2dvdXRSZXF1ZXN0KFNldHRpbmdzICRzZXR0aW5ncywgJHJlcXVlc3QgPSBudWxsLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBuZXcgTG9nb3V0UmVxdWVzdCgkc2V0dGluZ3MsICRyZXF1ZXN0LCAkbmFtZUlkLCAkc2Vzc2lvbkluZGV4LCAkbmFtZUlkRm9ybWF0LCAkbmFtZUlkTmFtZVF1YWxpZmllciwgJG5hbWVJZFNQTmFtZVF1YWxpZmllcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdCAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQKICAgICAqIGxvYWQgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgICAgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXNwb25zZSBBbiBVVUVuY29kZWQgU0FNTCBMb2dvdXQgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZExvZ291dFJlc3BvbnNlKFNldHRpbmdzICRzZXR0aW5ncywgJHJlc3BvbnNlID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IExvZ291dFJlc3BvbnNlKCRzZXR0aW5ncywgJHJlc3BvbnNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVxdWVzdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbWxSZXF1ZXN0ICAgVGhlIFNBTUwgUmVxdWVzdAogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXlTdGF0ZSAgICBUaGUgUmVsYXlTdGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbkFsZ29yaXRobSBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgYmFzZTY0IGVuY29kZWQgc2lnbmF0dXJlCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdFNpZ25hdHVyZSgkc2FtbFJlcXVlc3QsICRyZWxheVN0YXRlLCAkc2lnbkFsZ29yaXRobSA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMjU2KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRNZXNzYWdlU2lnbmF0dXJlKCRzYW1sUmVxdWVzdCwgJHJlbGF5U3RhdGUsICRzaWduQWxnb3JpdGhtLCAiU0FNTFJlcXVlc3QiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgUmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzYW1sUmVzcG9uc2UgIFRoZSBTQU1MIFJlc3BvbnNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWxheVN0YXRlICAgIFRoZSBSZWxheVN0YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduQWxnb3JpdGhtIFNpZ25hdHVyZSBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRSZXNwb25zZVNpZ25hdHVyZSgkc2FtbFJlc3BvbnNlLCAkcmVsYXlTdGF0ZSwgJHNpZ25BbGdvcml0aG0gPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NikKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ1aWxkTWVzc2FnZVNpZ25hdHVyZSgkc2FtbFJlc3BvbnNlLCAkcmVsYXlTdGF0ZSwgJHNpZ25BbGdvcml0aG0sICJTQU1MUmVzcG9uc2UiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyB0aGUgU2lnbmF0dXJlIGZvciBhIFNBTUwgTWVzc2FnZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbWxNZXNzYWdlICAgVGhlIFNBTUwgTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcmVsYXlTdGF0ZSAgICBUaGUgUmVsYXlTdGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbkFsZ29yaXRobSBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSAgICAgICAgICAiU0FNTFJlcXVlc3QiIG9yICJTQU1MUmVzcG9uc2UiCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgQSBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTWVzc2FnZVNpZ25hdHVyZSgkc2FtbE1lc3NhZ2UsICRyZWxheVN0YXRlLCAkc2lnbkFsZ29yaXRobSA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMjU2LCAkdHlwZSA9ICJTQU1MUmVxdWVzdCIpCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQa2V5KCk7CiAgICAgICAgaWYgKGVtcHR5KCRrZXkpKSB7CiAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiU0FNTFJlcXVlc3QiKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNc2cgPSAiVHJ5aW5nIHRvIHNpZ24gdGhlIFNBTUwgUmVxdWVzdCBidXQgY2FuJ3QgbG9hZCB0aGUgU1AgcHJpdmF0ZSBrZXkiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGVycm9yTXNnID0gIlRyeWluZyB0byBzaWduIHRoZSBTQU1MIFJlc3BvbnNlIGJ1dCBjYW4ndCBsb2FkIHRoZSBTUCBwcml2YXRlIGtleSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigkZXJyb3JNc2csIEVycm9yOjpQUklWQVRFX0tFWV9OT1RfRk9VTkQpOwogICAgICAgIH0KCiAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkc2lnbkFsZ29yaXRobSwgYXJyYXkoJ3R5cGUnID0+ICdwcml2YXRlJykpOwogICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSwgZmFsc2UpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoJHNlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddKSB7CiAgICAgICAgICAgICRtc2cgPSAkdHlwZS4nPScucmF3dXJsZW5jb2RlKCRzYW1sTWVzc2FnZSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVsYXlTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gJyZSZWxheVN0YXRlPScucmF3dXJsZW5jb2RlKCRyZWxheVN0YXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbXNnIC49ICcmU2lnQWxnPScgLiByYXd1cmxlbmNvZGUoJHNpZ25BbGdvcml0aG0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtc2cgPSAkdHlwZS4nPScudXJsZW5jb2RlKCRzYW1sTWVzc2FnZSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVsYXlTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICRtc2cgLj0gJyZSZWxheVN0YXRlPScudXJsZW5jb2RlKCRyZWxheVN0YXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbXNnIC49ICcmU2lnQWxnPScgLiB1cmxlbmNvZGUoJHNpZ25BbGdvcml0aG0pOwogICAgICAgIH0KICAgICAgICAkc2lnbmF0dXJlID0gJG9iaktleS0+c2lnbkRhdGEoJG1zZyk7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoJHNpZ25hdHVyZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIGxhc3QgbWVzc2FnZSBwcm9jZXNzZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RNZXNzYWdlSWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RNZXNzYWdlSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSUQgb2YgdGhlIGxhc3QgYXNzZXJ0aW9uIHByb2Nlc3NlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEFzc2VydGlvbklkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sYXN0QXNzZXJ0aW9uSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZAogICAgICogICAgICAgICBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBub2RlIChpZiBhbnkpCiAgICAgKiAgICAgICAgIG9mIHRoZSBsYXN0IGFzc2VydGlvbiBwcm9jZXNzZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhc3RBc3NlcnRpb25Ob3RPbk9yQWZ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZAogICAgICogWE1MIFNBTUwgcmVxdWVzdCAoQXV0aE5SZXF1ZXN0LCBMb2dvdXRSZXF1ZXN0KQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIFJlcXVlc3QgWE1MCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVxdWVzdFhNTCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbGFzdFJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudGx5LWNvbnN0cnVjdGVkL3Byb2Nlc3NlZAogICAgICogWE1MIFNBTUwgcmVzcG9uc2UgKFNBTUxSZXNwb25zZSwgTG9nb3V0UmVzcG9uc2UpLgogICAgICogSWYgdGhlIFNBTUxSZXNwb25zZSB3YXMgZW5jcnlwdGVkLCBieSBkZWZhdWx0IHRyaWVzCiAgICAgKiB0byByZXR1cm4gdGhlIGRlY3J5cHRlZCBYTUwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgUmVzcG9uc2UgWE1MCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2VYTUwoKQogICAgewogICAgICAgICRyZXNwb25zZSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fbGFzdFJlc3BvbnNlKSkgewogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCR0aGlzLT5fbGFzdFJlc3BvbnNlKSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPl9sYXN0UmVzcG9uc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkdGhpcy0+X2xhc3RSZXNwb25zZS0+c2F2ZVhNTCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/AuthnRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7CgovKioKICogU0FNTCAyIEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QKICovCmNsYXNzIEF1dGhuUmVxdWVzdAp7CiAgICAvKioKICAgICAqIE9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNldHRpbmcgaW5mbwogICAgICoKICAgICAqIEB2YXIgU2V0dGluZ3MKICAgICAqLwogICAgcHJvdGVjdGVkICRfc2V0dGluZ3M7CgogICAgLyoqCiAgICAgKiBTQU1MIEF1dGhOUmVxdWVzdCBzdHJpbmcKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfYXV0aG5SZXF1ZXN0OwoKICAgIC8qKgogICAgICogU0FNTCBBdXRoTlJlcXVlc3QgSUQuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkX2lkOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgQXV0aG5SZXF1ZXN0IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNBTUwgVG9vbGtpdCBTZXR0aW5ncwogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlQXV0aG4gV2hlbiB0cnVlIHRoZSBBdXRoTlJldXFlc3Qgd2lsbCBzZXQgdGhlIEZvcmNlQXV0aG49J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQYXNzaXZlIFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXVxZXN0IHdpbGwgc2V0IHRoZSBJc3Bhc3NpdmU9J3RydWUnCiAgICAgKiBAcGFyYW0gYm9vbCAkc2V0TmFtZUlkUG9saWN5IFdoZW4gdHJ1ZSB0aGUgQXV0aE5SZXVxZXN0IHdpbGwgc2V0IGEgbmFtZUlkUG9saWN5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lSWRWYWx1ZVJlcSBJbmRpY2F0ZXMgdG8gdGhlIElkUCB0aGUgc3ViamVjdCB0aGF0IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgJHNldHRpbmdzLCAkZm9yY2VBdXRobiA9IGZhbHNlLCAkaXNQYXNzaXZlID0gZmFsc2UsICRzZXROYW1lSWRQb2xpY3kgPSB0cnVlLCAkbmFtZUlkVmFsdWVSZXEgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRzcERhdGEgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUERhdGEoKTsKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgJGlkID0gVXRpbHM6OmdlbmVyYXRlVW5pcXVlSUQoKTsKICAgICAgICAkaXNzdWVJbnN0YW50ID0gVXRpbHM6OnBhcnNlVGltZTJTQU1MKHRpbWUoKSk7CgogICAgICAgICRzdWJqZWN0U3RyID0gIiI7CiAgICAgICAgaWYgKGlzc2V0KCRuYW1lSWRWYWx1ZVJlcSkpIHsKICAgICAgICAgICAgJHN1YmplY3RTdHIgPSA8PDxTVUJKRUNUCgogICAgIDxzYW1sOlN1YmplY3Q+CiAgICAgICAgPHNhbWw6TmFtZUlEIEZvcm1hdD0ieyRzcERhdGFbJ05hbWVJREZvcm1hdCddfSI+eyRuYW1lSWRWYWx1ZVJlcX08L3NhbWw6TmFtZUlEPgogICAgICAgIDxzYW1sOlN1YmplY3RDb25maXJtYXRpb24gTWV0aG9kPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyIj48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj4KICAgIDwvc2FtbDpTdWJqZWN0PgpTVUJKRUNUOwogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZFBvbGljeVN0ciA9ICcnOwogICAgICAgIGlmICgkc2V0TmFtZUlkUG9saWN5KSB7CiAgICAgICAgICAgICRuYW1lSURQb2xpY3lGb3JtYXQgPSAkc3BEYXRhWydOYW1lSURGb3JtYXQnXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddKSAmJiAkc2VjdXJpdHlbJ3dhbnROYW1lSWRFbmNyeXB0ZWQnXSkgewogICAgICAgICAgICAgICAgJG5hbWVJRFBvbGljeUZvcm1hdCA9IENvbnN0YW50czo6TkFNRUlEX0VOQ1JZUFRFRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5hbWVJZFBvbGljeVN0ciA9IDw8PE5BTUVJRFBPTElDWQoKICAgIDxzYW1scDpOYW1lSURQb2xpY3kKICAgICAgICBGb3JtYXQ9InskbmFtZUlEUG9saWN5Rm9ybWF0fSIKICAgICAgICBBbGxvd0NyZWF0ZT0idHJ1ZSIgLz4KTkFNRUlEUE9MSUNZOwogICAgICAgIH0KCgogICAgICAgICRwcm92aWRlck5hbWVTdHIgPSAnJzsKICAgICAgICAkb3JnYW5pemF0aW9uRGF0YSA9ICRzZXR0aW5ncy0+Z2V0T3JnYW5pemF0aW9uKCk7CiAgICAgICAgaWYgKCFlbXB0eSgkb3JnYW5pemF0aW9uRGF0YSkpIHsKICAgICAgICAgICAgJGxhbmdzID0gYXJyYXlfa2V5cygkb3JnYW5pemF0aW9uRGF0YSk7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgnZW4tVVMnLCAkbGFuZ3MpKSB7CiAgICAgICAgICAgICAgICAkbGFuZyA9ICdlbi1VUyc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbGFuZyA9ICRsYW5nc1swXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddKSAmJiAhZW1wdHkoJG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddKSkgewogICAgICAgICAgICAgICAgJHByb3ZpZGVyTmFtZVN0ciA9IDw8PFBST1ZJREVSTkFNRQogICAgUHJvdmlkZXJOYW1lPSJ7JG9yZ2FuaXphdGlvbkRhdGFbJGxhbmddWydkaXNwbGF5bmFtZSddfSIKUFJPVklERVJOQU1FOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkZm9yY2VBdXRoblN0ciA9ICcnOwogICAgICAgIGlmICgkZm9yY2VBdXRobikgewogICAgICAgICAgICAkZm9yY2VBdXRoblN0ciA9IDw8PEZPUkNFQVVUSE4KCiAgICBGb3JjZUF1dGhuPSJ0cnVlIgpGT1JDRUFVVEhOOwogICAgICAgIH0KCiAgICAgICAgJGlzUGFzc2l2ZVN0ciA9ICcnOwogICAgICAgIGlmICgkaXNQYXNzaXZlKSB7CiAgICAgICAgICAgICRpc1Bhc3NpdmVTdHIgPSA8PDxJU1BBU1NJVkUKCiAgICBJc1Bhc3NpdmU9InRydWUiCklTUEFTU0lWRTsKICAgICAgICB9CgogICAgICAgICRyZXF1ZXN0ZWRBdXRoblN0ciA9ICcnOwogICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddKSAmJiAkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddICE9PSBmYWxzZSkgewogICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uID0gJ2V4YWN0JzsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0Q29tcGFyaXNvbiddKSkgewogICAgICAgICAgICAgICAgJGF1dGhuQ29tcGFyaXNvbiA9ICRzZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0Q29tcGFyaXNvbiddOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uQXR0ciA9ICcnOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRhdXRobkNvbXBhcmlzb24pKSB7CiAgICAgICAgICAgICAgICAkYXV0aG5Db21wYXJpc29uQXR0ciA9IHNwcmludGYoJ0NvbXBhcmlzb249IiVzIicsICRhdXRobkNvbXBhcmlzb24pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHNlY3VyaXR5WydyZXF1ZXN0ZWRBdXRobkNvbnRleHQnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyID0gPDw8UkVRVUVTVEVEQVVUSE4KCiAgICA8c2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0ICRhdXRobkNvbXBhcmlzb25BdHRyPgogICAgICAgIDxzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0PC9zYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPgogICAgPC9zYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHQ+ClJFUVVFU1RFREFVVEhOOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyIC49ICIgICAgPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCAkYXV0aG5Db21wYXJpc29uQXR0cj5cbiI7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddIGFzICRjb250ZXh0VmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXV0aG5TdHIgLj0gIiAgICAgICAgPHNhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+Ii4kY29udGV4dFZhbHVlLiI8L3NhbWw6QXV0aG5Db250ZXh0Q2xhc3NSZWY+XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF1dGhuU3RyIC49ICcgICAgPC9zYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHQ+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNwRW50aXR5SWQgPSBodG1sc3BlY2lhbGNoYXJzKCRzcERhdGFbJ2VudGl0eUlkJ10sIEVOVF9RVU9URVMpOwogICAgICAgICRhY3NVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcERhdGFbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQU1NPVXJsKCk7CiAgICAgICAgJHJlcXVlc3QgPSA8PDxBVVRITlJFUVVFU1QKPHNhbWxwOkF1dGhuUmVxdWVzdAogICAgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIKICAgIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iCiAgICBJRD0iJGlkIgogICAgVmVyc2lvbj0iMi4wIgp7JHByb3ZpZGVyTmFtZVN0cn17JGZvcmNlQXV0aG5TdHJ9eyRpc1Bhc3NpdmVTdHJ9CiAgICBJc3N1ZUluc3RhbnQ9InskaXNzdWVJbnN0YW50fSIKICAgIERlc3RpbmF0aW9uPSJ7JGRlc3RpbmF0aW9ufSIKICAgIFByb3RvY29sQmluZGluZz0ieyRzcERhdGFbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWydiaW5kaW5nJ119IgogICAgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJ7JGFjc1VybH0iPgogICAgPHNhbWw6SXNzdWVyPnskc3BFbnRpdHlJZH08L3NhbWw6SXNzdWVyPnskc3ViamVjdFN0cn17JG5hbWVJZFBvbGljeVN0cn17JHJlcXVlc3RlZEF1dGhuU3RyfQo8L3NhbWxwOkF1dGhuUmVxdWVzdD4KQVVUSE5SRVFVRVNUOwoKICAgICAgICAkdGhpcy0+X2lkID0gJGlkOwogICAgICAgICR0aGlzLT5fYXV0aG5SZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGRlZmxhdGVkLCBiYXNlNjQgZW5jb2RlZCwgdW5zaWduZWQgQXV0aG5SZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBib29sfG51bGwgJGRlZmxhdGUgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkICdnemRlZmxhdGUnIHRoZSByZXF1ZXN0IGJvZHkgYmVmb3JlIHdlIHJldHVybiBpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgkZGVmbGF0ZSA9IG51bGwpCiAgICB7CiAgICAgICAgJHN1YmplY3QgPSAkdGhpcy0+X2F1dGhuUmVxdWVzdDsKCiAgICAgICAgaWYgKGlzX251bGwoJGRlZmxhdGUpKSB7CiAgICAgICAgICAgICRkZWZsYXRlID0gJHRoaXMtPl9zZXR0aW5ncy0+c2hvdWxkQ29tcHJlc3NSZXF1ZXN0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRkZWZsYXRlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gZ3pkZWZsYXRlKCR0aGlzLT5fYXV0aG5SZXF1ZXN0KTsKICAgICAgICB9CgogICAgICAgICRiYXNlNjRSZXF1ZXN0ID0gYmFzZTY0X2VuY29kZSgkc3ViamVjdCk7CiAgICAgICAgcmV0dXJuICRiYXNlNjRSZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgQXV0aE5SZXF1ZXN0IElELgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYTUwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2F1dGhuUmVxdWVzdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Constants.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7CgovKioKICogQ29uc3RhbnRzIG9mIFNBTUwgUEhQIFRvb2xraXQKICoKICogRGVmaW5lcyBhbGwgcmVxdWlyZWQgY29uc3RhbnRzCiAqLwpjbGFzcyBDb25zdGFudHMKewogICAgLy8gVmFsdWUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBpbiB0aW1lIGNvbmRpdGlvbiB2YWxpZGF0aW9ucwogICAgY29uc3QgQUxMT1dFRF9DTE9DS19EUklGVCA9IDE4MDsgIC8vIDMgbWluIGluIHNlY29uZHMKCiAgICAvLyBOYW1lSUQgRm9ybWF0cwogICAgY29uc3QgTkFNRUlEX0VNQUlMX0FERFJFU1MgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXNzJzsKICAgIGNvbnN0IE5BTUVJRF9YNTA5X1NVQkpFQ1RfTkFNRSA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDpYNTA5U3ViamVjdE5hbWUnOwogICAgY29uc3QgTkFNRUlEX1dJTkRPV1NfRE9NQUlOX1FVQUxJRklFRF9OQU1FID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjEuMTpuYW1laWQtZm9ybWF0OldpbmRvd3NEb21haW5RdWFsaWZpZWROYW1lJzsKICAgIGNvbnN0IE5BTUVJRF9VTlNQRUNJRklFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCc7CiAgICBjb25zdCBOQU1FSURfS0VSQkVST1MgICA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDprZXJiZXJvcyc7CiAgICBjb25zdCBOQU1FSURfRU5USVRZICAgICA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHknOwogICAgY29uc3QgTkFNRUlEX1RSQU5TSUVOVCAgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50JzsKICAgIGNvbnN0IE5BTUVJRF9QRVJTSVNURU5UID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQnOwogICAgY29uc3QgTkFNRUlEX0VOQ1JZUFRFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbmNyeXB0ZWQnOwoKICAgIC8vIEF0dHJpYnV0ZSBOYW1lIEZvcm1hdHMKICAgIGNvbnN0IEFUVFJOQU1FX0ZPUk1BVF9VTlNQRUNJRklFRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OnVuc3BlY2lmaWVkJzsKICAgIGNvbnN0IEFUVFJOQU1FX0ZPUk1BVF9VUkkgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDp1cmknOwogICAgY29uc3QgQVRUUk5BTUVfRk9STUFUX0JBU0lDID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphdHRybmFtZS1mb3JtYXQ6YmFzaWMnOwoKICAgIC8vIE5hbWVzcGFjZXMKICAgIGNvbnN0IE5TX1NBTUwgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbic7CiAgICBjb25zdCBOU19TQU1MUCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wnOwogICAgY29uc3QgTlNfU09BUCA9ICdodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyc7CiAgICBjb25zdCBOU19NRCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEnOwogICAgY29uc3QgTlNfWFMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnOwogICAgY29uc3QgTlNfWFNJID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJzsKICAgIGNvbnN0IE5TX1hFTkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJzsKICAgIGNvbnN0IE5TX0RTID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMnOwoKICAgIC8vIEJpbmRpbmdzCiAgICBjb25zdCBCSU5ESU5HX0hUVFBfUE9TVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUJzsKICAgIGNvbnN0IEJJTkRJTkdfSFRUUF9SRURJUkVDVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1SZWRpcmVjdCc7CiAgICBjb25zdCBCSU5ESU5HX0hUVFBfQVJUSUZBQ1QgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtQXJ0aWZhY3QnOwogICAgY29uc3QgQklORElOR19TT0FQID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpTT0FQJzsKICAgIGNvbnN0IEJJTkRJTkdfREVGTEFURSA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6VVJMLUVuY29kaW5nOkRFRkxBVEUnOwoKICAgIC8vIEF1dGggQ29udGV4dCBDbGFzcwogICAgY29uc3QgQUNfVU5TUEVDSUZJRUQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6dW5zcGVjaWZpZWQnOwogICAgY29uc3QgQUNfUEFTU1dPUkQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQnOwogICAgY29uc3QgQUNfUEFTU1dPUkRfUFJPVEVDVEVEID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkUHJvdGVjdGVkVHJhbnNwb3J0JzsKICAgIGNvbnN0IEFDX1g1MDkgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6WDUwOSc7CiAgICBjb25zdCBBQ19TTUFSVENBUkQgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6U21hcnRjYXJkJzsKICAgIGNvbnN0IEFDX1NNQVJUQ0FSRF9QS0kgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6U21hcnRjYXJkUEtJJzsKICAgIGNvbnN0IEFDX0tFUkJFUk9TID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOktlcmJlcm9zJzsKICAgIGNvbnN0IEFDX1dJTkRPV1MgPSAndXJuOmZlZGVyYXRpb246YXV0aGVudGljYXRpb246d2luZG93cyc7CiAgICBjb25zdCBBQ19UTFMgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6VExTQ2xpZW50JzsKICAgIGNvbnN0IEFDX1JTQVRPS0VOID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlRpbWVTeW5jVG9rZW4nOwoKICAgIC8vIFN1YmplY3QgQ29uZmlybWF0aW9uCiAgICBjb25zdCBDTV9CRUFSRVIgPSAndXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlcic7CiAgICBjb25zdCBDTV9IT0xERVJfS0VZID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpob2xkZXItb2Yta2V5JzsKICAgIGNvbnN0IENNX1NFTkRFUl9WT1VDSEVTID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpzZW5kZXItdm91Y2hlcyc7CgogICAgLy8gU3RhdHVzIENvZGVzCiAgICBjb25zdCBTVEFUVVNfU1VDQ0VTUyA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MnOwogICAgY29uc3QgU1RBVFVTX1JFUVVFU1RFUiA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlJlcXVlc3Rlcic7CiAgICBjb25zdCBTVEFUVVNfUkVTUE9OREVSID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6UmVzcG9uZGVyJzsKICAgIGNvbnN0IFNUQVRVU19WRVJTSU9OX01JU01BVENIID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6VmVyc2lvbk1pc21hdGNoJzsKICAgIGNvbnN0IFNUQVRVU19OT19QQVNTSVZFID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6Tm9QYXNzaXZlJzsKICAgIGNvbnN0IFNUQVRVU19QQVJUSUFMX0xPR09VVCA9ICd1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlBhcnRpYWxMb2dvdXQnOwogICAgY29uc3QgU1RBVFVTX1BST1hZX0NPVU5UX0VYQ0VFREVEID0gJ3VybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpzdGF0dXM6UHJveHlDb3VudEV4Y2VlZGVkJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Error.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIEVycm9yIGNsYXNzIG9mIFNBTUwgUEhQIFRvb2xraXQKICoKICogRGVmaW5lcyB0aGUgRXJyb3IgY2xhc3MKICovCmNsYXNzIEVycm9yIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8vIEVycm9ycwogICAgY29uc3QgU0VUVElOR1NfRklMRV9OT1RfRk9VTkQgPSAwOwogICAgY29uc3QgU0VUVElOR1NfSU5WQUxJRF9TWU5UQVggPSAxOwogICAgY29uc3QgU0VUVElOR1NfSU5WQUxJRCA9IDI7CiAgICBjb25zdCBNRVRBREFUQV9TUF9JTlZBTElEID0gMzsKICAgIGNvbnN0IFNQX0NFUlRTX05PVF9GT1VORCA9IDQ7CiAgICAvLyBTUF9DRVJUU19OT1RfRk9VTkQgaXMgZGVwcmVjYXRlZCwgdXNlIENFUlRfTk9UX0ZPVU5EIGluc3RlYWQKICAgIGNvbnN0IENFUlRfTk9UX0ZPVU5EID0gNDsKICAgIGNvbnN0IFJFRElSRUNUX0lOVkFMSURfVVJMID0gNTsKICAgIGNvbnN0IFBVQkxJQ19DRVJUX0ZJTEVfTk9UX0ZPVU5EID0gNjsKICAgIGNvbnN0IFBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5EID0gNzsKICAgIGNvbnN0IFNBTUxfUkVTUE9OU0VfTk9UX0ZPVU5EID0gODsKICAgIGNvbnN0IFNBTUxfTE9HT1VUTUVTU0FHRV9OT1RfRk9VTkQgPSA5OwogICAgY29uc3QgU0FNTF9MT0dPVVRSRVFVRVNUX0lOVkFMSUQgPSAxMDsKICAgIGNvbnN0IFNBTUxfTE9HT1VUUkVTUE9OU0VfSU5WQUxJRCAgPSAxMTsKICAgIGNvbnN0IFNBTUxfU0lOR0xFX0xPR09VVF9OT1RfU1VQUE9SVEVEID0gMTI7CiAgICBjb25zdCBQUklWQVRFX0tFWV9OT1RfRk9VTkQgPSAxMzsKICAgIGNvbnN0IFVOU1VQUE9SVEVEX1NFVFRJTkdTX09CSkVDVCA9IDE0OwogICAgY29uc3QgSU5WQUxJRF9QQVJBTUVURVIgPSAxNTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgJG1zZyAgRGVzY3JpYmVzIHRoZSBlcnJvci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICRjb2RlIFRoZSBjb2RlIGVycm9yIChkZWZpbmVkIGluIHRoZSBlcnJvciBjbGFzcykuCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkYXJncyBBcmd1bWVudHMgdXNlZCBpbiB0aGUgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSA9IDAsICRhcmdzID0gYXJyYXkoKSkKICAgIHsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCRtc2cpKTsKICAgICAgICBhc3NlcnQoaXNfaW50KCRjb2RlKSk7CgogICAgICAgIGlmICghaXNzZXQoJGFyZ3MpKSB7CiAgICAgICAgICAgICRhcmdzID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKGFycmF5KCRtc2cpLCAkYXJncyk7CiAgICAgICAgJG1lc3NhZ2UgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgnc3ByaW50ZicsICRwYXJhbXMpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/IdPMetadataParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBFeGNlcHRpb247CgovKioKICogSWRQIE1ldGFkYXRhIFBhcnNlciBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBJZFBNZXRhZGF0YVBhcnNlcgp7CiAgICAvKioKICAgICAqIEdldCBJZFAgTWV0YWRhdGEgSW5mbyBmcm9tIFVSTAogICAgICoKICAgICAqIFRoaXMgY2xhc3MgZG9lcyBub3QgdmFsaWRhdGUgaW4gYW55IHdheSB0aGUgVVJMIHRoYXQgaXMgaW50cm9kdWNlZCwKICAgICAqIG1ha2Ugc3VyZSB0byB2YWxpZGF0ZSBpdCBwcm9wZXJseSBiZWZvcmUgdXNlIGl0IGluIHRoZSBwYXJzZVJlbW90ZVhNTAogICAgICogbWV0aG9kIGluIG9yZGVyIHRvIGF2b2lkIHNlY3VyaXR5IGlzc3VlcyBsaWtlIFNTUkYgYXR0YWNrcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwgICAgICAgICAgICAgICAgIFVSTCB3aGVyZSB0aGUgSWRQIG1ldGFkYXRhIGlzIHB1Ymxpc2hlZAogICAgICogQHBhcmFtIHN0cmluZyAkZW50aXR5SWQgICAgICAgICAgICBFbnRpdHkgSWQgb2YgdGhlIGRlc2lyZWQgSWRQLCBpZiBubwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkgSWQgaXMgcHJvdmlkZWQgYW5kIHRoZSBYTUwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgY29udGFpbnMgbW9yZSB0aGFuIG9uZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRFBTU09EZXNjcmlwdG9yLCB0aGUgZmlyc3QgaXMgcmV0dXJuZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWROYW1lSWRGb3JtYXQgSWYgYXZhaWxhYmxlIG9uIElkUCBtZXRhZGF0YSwgdXNlIHRoYXQgbmFtZUlkRm9ybWF0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkU1NPQmluZGluZyAgIFBhcnNlIHNwZWNpZmljIGJpbmRpbmcgU1NPIGVuZHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkU0xPQmluZGluZyAgIFBhcnNlIHNwZWNpZmljIGJpbmRpbmcgU0xPIGVuZHBvaW50CiAgICAgKiBAcGFyYW0gYm9vbCAgICR2YWxpZGF0ZVBlZXIgICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIHZhbGlkYXRlIHBlZXIgU1NMIGNlcnRpZmljYXRlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBtZXRhZGF0YSBpbmZvIGluIHBocC1zYW1sIHNldHRpbmdzIGZvcm1hdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlUmVtb3RlWE1MKCR1cmwsICRlbnRpdHlJZCA9IG51bGwsICRkZXNpcmVkTmFtZUlkRm9ybWF0ID0gbnVsbCwgJGRlc2lyZWRTU09CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QsICRkZXNpcmVkU0xPQmluZGluZyA9IENvbnN0YW50czo6QklORElOR19IVFRQX1JFRElSRUNULCAkdmFsaWRhdGVQZWVyID0gZmFsc2UpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhSW5mbyA9IGFycmF5KCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BST1RPQ09MUywgQ1VSTFBST1RPX0hUVFBTIHwgQ1VSTFBST1RPX0hUVFApOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLCBDVVJMUFJPVE9fSFRUUFMgIHwgQ1VSTFBST1RPX0hUVFApOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTUFYUkVESVJTLCA1KTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICJHRVQiKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAkdmFsaWRhdGVQZWVyKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKCiAgICAgICAgICAgICR4bWwgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAgICAgaWYgKCR4bWwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvID0gc2VsZjo6cGFyc2VYTUwoJHhtbCwgJGVudGl0eUlkLCAkZGVzaXJlZE5hbWVJZEZvcm1hdCwgJGRlc2lyZWRTU09CaW5kaW5nLCAkZGVzaXJlZFNMT0JpbmRpbmcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihjdXJsX2Vycm9yKCRjaCksIGN1cmxfZXJybm8oJGNoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3Igb24gcGFyc2VSZW1vdGVYTUwuICcuJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gRmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVwYXRoICAgICAgICAgICAgRmlsZSBwYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHlJZCAgICAgICAgICAgIEVudGl0eSBJZCBvZiB0aGUgZGVzaXJlZCBJZFAsIGlmIG5vCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSBJZCBpcyBwcm92aWRlZCBhbmQgdGhlIFhNTAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSBjb250YWlucyBtb3JlIHRoYW4gb25lCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEUFNTT0Rlc2NyaXB0b3IsIHRoZSBmaXJzdCBpcyByZXR1cm5lZAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZE5hbWVJZEZvcm1hdCBJZiBhdmFpbGFibGUgb24gSWRQIG1ldGFkYXRhLCB1c2UgdGhhdCBuYW1lSWRGb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWRTU09CaW5kaW5nICAgUGFyc2Ugc3BlY2lmaWMgYmluZGluZyBTU08gZW5kcG9pbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lyZWRTTE9CaW5kaW5nICAgUGFyc2Ugc3BlY2lmaWMgYmluZGluZyBTTE8gZW5kcG9pbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG1ldGFkYXRhIGluZm8gaW4gcGhwLXNhbWwgc2V0dGluZ3MgZm9ybWF0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VGaWxlWE1MKCRmaWxlcGF0aCwgJGVudGl0eUlkID0gbnVsbCwgJGRlc2lyZWROYW1lSWRGb3JtYXQgPSBudWxsLCAkZGVzaXJlZFNTT0JpbmRpbmcgPSBDb25zdGFudHM6OkJJTkRJTkdfSFRUUF9SRURJUkVDVCwgJGRlc2lyZWRTTE9CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhSW5mbyA9IGFycmF5KCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZXBhdGgpKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlcGF0aCk7CiAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvID0gc2VsZjo6cGFyc2VYTUwoJGRhdGEsICRlbnRpdHlJZCwgJGRlc2lyZWROYW1lSWRGb3JtYXQsICRkZXNpcmVkU1NPQmluZGluZywgJGRlc2lyZWRTTE9CaW5kaW5nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciBvbiBwYXJzZUZpbGVYTUwuICcuJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IElkUCBNZXRhZGF0YSBJbmZvIGZyb20gVVJMCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkeG1sICAgICAgICAgICAgICAgICBYTUwgdGhhdCBjb250YWlucyBJZFAgbWV0YWRhdGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVudGl0eUlkICAgICAgICAgICAgRW50aXR5IElkIG9mIHRoZSBkZXNpcmVkIElkUCwgaWYgbm8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5IElkIGlzIHByb3ZpZGVkIGFuZCB0aGUgWE1MCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURQU1NPRGVzY3JpcHRvciwgdGhlIGZpcnN0IGlzIHJldHVybmVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNpcmVkTmFtZUlkRm9ybWF0IElmIGF2YWlsYWJsZSBvbiBJZFAgbWV0YWRhdGEsIHVzZSB0aGF0IG5hbWVJZEZvcm1hdAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZFNTT0JpbmRpbmcgICBQYXJzZSBzcGVjaWZpYyBiaW5kaW5nIFNTTyBlbmRwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaXJlZFNMT0JpbmRpbmcgICBQYXJzZSBzcGVjaWZpYyBiaW5kaW5nIFNMTyBlbmRwb2ludAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgbWV0YWRhdGEgaW5mbyBpbiBwaHAtc2FtbCBzZXR0aW5ncyBmb3JtYXQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlWE1MKCR4bWwsICRlbnRpdHlJZCA9IG51bGwsICRkZXNpcmVkTmFtZUlkRm9ybWF0ID0gbnVsbCwgJGRlc2lyZWRTU09CaW5kaW5nID0gQ29uc3RhbnRzOjpCSU5ESU5HX0hUVFBfUkVESVJFQ1QsICRkZXNpcmVkU0xPQmluZGluZyA9IENvbnN0YW50czo6QklORElOR19IVFRQX1JFRElSRUNUKQogICAgewogICAgICAgICRtZXRhZGF0YUluZm8gPSBhcnJheSgpOwoKICAgICAgICAkZG9tID0gbmV3IERPTURvY3VtZW50KCk7CiAgICAgICAgJGRvbS0+cHJlc2VydmVXaGl0ZVNwYWNlID0gZmFsc2U7CiAgICAgICAgJGRvbS0+Zm9ybWF0T3V0cHV0ID0gdHJ1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyBtZXRhZGF0YScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY3VzdG9tSWRQU3RyID0gJyc7CiAgICAgICAgICAgIGlmICghZW1wdHkoJGVudGl0eUlkKSkgewogICAgICAgICAgICAgICAgJGN1c3RvbUlkUFN0ciA9ICdbQGVudGl0eUlEPSInIC4gJGVudGl0eUlkIC4gJyJdJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWRwRGVzY3J5cHRvclhQYXRoID0gJy8vbWQ6RW50aXR5RGVzY3JpcHRvcicgLiAkY3VzdG9tSWRQU3RyIC4gJy9tZDpJRFBTU09EZXNjcmlwdG9yJzsKCiAgICAgICAgICAgICRpZHBEZXNjcmlwdG9yTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJGlkcERlc2NyeXB0b3JYUGF0aCk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGlkcERlc2NyaXB0b3JOb2RlcykgJiYgJGlkcERlc2NyaXB0b3JOb2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ10gPSBhcnJheSgpOwoKICAgICAgICAgICAgICAgICRpZHBEZXNjcmlwdG9yID0gJGlkcERlc2NyaXB0b3JOb2Rlcy0+aXRlbSgwKTsKCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGVudGl0eUlkKSAmJiAkaWRwRGVzY3JpcHRvci0+cGFyZW50Tm9kZS0+aGFzQXR0cmlidXRlKCdlbnRpdHlJRCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVudGl0eUlkID0gJGlkcERlc2NyaXB0b3ItPnBhcmVudE5vZGUtPmdldEF0dHJpYnV0ZSgnZW50aXR5SUQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRlbnRpdHlJZCkpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsnZW50aXR5SWQnXSA9ICRlbnRpdHlJZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc3NvTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy4vbWQ6U2luZ2xlU2lnbk9uU2VydmljZVtAQmluZGluZz0iJy4kZGVzaXJlZFNTT0JpbmRpbmcuJyJdJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgaWYgKCRzc29Ob2Rlcy0+bGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgICAgICRzc29Ob2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpTaW5nbGVTaWduT25TZXJ2aWNlJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzc29Ob2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWydzaW5nbGVTaWduT25TZXJ2aWNlJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJHNzb05vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0xvY2F0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgICAgICdiaW5kaW5nJyA9PiAkc3NvTm9kZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnQmluZGluZycpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc2xvTm9kZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy4vbWQ6U2luZ2xlTG9nb3V0U2VydmljZVtAQmluZGluZz0iJy4kZGVzaXJlZFNMT0JpbmRpbmcuJyJdJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+bGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgICAgICRzbG9Ob2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpTaW5nbGVMb2dvdXRTZXJ2aWNlJywgJGlkcERlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCcgPT4gJHNsb05vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0xvY2F0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgICAgICdiaW5kaW5nJyA9PiAkc2xvTm9kZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnQmluZGluZycpCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzbG9Ob2Rlcy0+aXRlbSgwKS0+aGFzQXR0cmlidXRlKCdSZXNwb25zZUxvY2F0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsncmVzcG9uc2VVcmwnXSA9ICRzbG9Ob2Rlcy0+aXRlbSgwKS0+Z2V0QXR0cmlidXRlKCdSZXNwb25zZUxvY2F0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpLZXlEZXNjcmlwdG9yW25vdChjb250YWlucyhAdXNlLCAiZW5jcnlwdGlvbiIpKV0vZHM6S2V5SW5mby9kczpYNTA5RGF0YS9kczpYNTA5Q2VydGlmaWNhdGUnLCAkaWRwRGVzY3JpcHRvcik7CgogICAgICAgICAgICAgICAgJGtleURlc2NyaXB0b3JDZXJ0RW5jcnlwdGlvbk5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcuL21kOktleURlc2NyaXB0b3Jbbm90KGNvbnRhaW5zKEB1c2UsICJzaWduaW5nIikpXS9kczpLZXlJbmZvL2RzOlg1MDlEYXRhL2RzOlg1MDlDZXJ0aWZpY2F0ZScsICRpZHBEZXNjcmlwdG9yKTsKCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcykgfHwgIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkcEluZm9bJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGtleURlc2NyaXB0b3JDZXJ0U2lnbmluZ05vZGVzIGFzICRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ11bXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRrZXlEZXNjcmlwdG9yQ2VydFNpZ25pbmdOb2RlLT5ub2RlVmFsdWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkcEluZm9bJ3g1MDljZXJ0TXVsdGknXVsnZW5jcnlwdGlvbiddID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGtleURlc2NyaXB0b3JDZXJ0RW5jcnlwdGlvbk5vZGVzIGFzICRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRrZXlEZXNjcmlwdG9yQ2VydEVuY3J5cHRpb25Ob2RlLT5ub2RlVmFsdWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGlkcENlcnRkYXRhID0gJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXTsKICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50KCRpZHBDZXJ0ZGF0YSkgPT0gMSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICgoaXNzZXQoJGlkcENlcnRkYXRhWydzaWduaW5nJ10pIGFuZCBjb3VudCgkaWRwQ2VydGRhdGFbJ3NpZ25pbmcnXSkgPT0gMSkgb3IgKGlzc2V0KCRpZHBDZXJ0ZGF0YVsnZW5jcnlwdGlvbiddKSBhbmQgY291bnQoJGlkcENlcnRkYXRhWydlbmNyeXB0aW9uJ10pID09IDEpKSkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICgoaXNzZXQoJGlkcENlcnRkYXRhWydzaWduaW5nJ10pICYmIGNvdW50KCRpZHBDZXJ0ZGF0YVsnc2lnbmluZyddKSA9PSAxKSAmJiBpc3NldCgkaWRwQ2VydGRhdGFbJ2VuY3J5cHRpb24nXSkgJiYgY291bnQoJGlkcENlcnRkYXRhWydlbmNyeXB0aW9uJ10pID09IDEgJiYgc3RyY21wKCRpZHBDZXJ0ZGF0YVsnc2lnbmluZyddWzBdLCAkaWRwQ2VydGRhdGFbJ2VuY3J5cHRpb24nXVswXSkgPT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXVswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydCddID0gJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddWzBdOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0J10gPSAkbWV0YWRhdGFJbmZvWydpZHAnXVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bMF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRuYW1lSWRGb3JtYXROb2RlcyA9IFV0aWxzOjpxdWVyeSgkZG9tLCAnLi9tZDpOYW1lSURGb3JtYXQnLCAkaWRwRGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICBpZiAoJG5hbWVJZEZvcm1hdE5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhSW5mb1snc3AnXVsnTmFtZUlERm9ybWF0J10gPSAkbmFtZUlkRm9ybWF0Tm9kZXMtPml0ZW0oMCktPm5vZGVWYWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRkZXNpcmVkTmFtZUlkRm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbmFtZUlkRm9ybWF0Tm9kZXMgYXMgJG5hbWVJZEZvcm1hdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoJG5hbWVJZEZvcm1hdE5vZGUtPm5vZGVWYWx1ZSwgJGRlc2lyZWROYW1lSWRGb3JtYXQpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGFJbmZvWydzcCddWydOYW1lSURGb3JtYXQnXSA9ICRuYW1lSWRGb3JtYXROb2RlLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyBtZXRhZGF0YS4gJy4kZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWV0YWRhdGFJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogSW5qZWN0IG1ldGFkYXRhIGluZm8gaW50byBwaHAtc2FtbCBzZXR0aW5ncyBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgICAgIHBocC1zYW1sIHNldHRpbmdzIGFycmF5CiAgICAgKiBAcGFyYW0gYXJyYXkgJG1ldGFkYXRhSW5mbyBhcnJheSBtZXRhZGF0YSBpbmZvCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBzZXR0aW5ncwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluamVjdEludG9TZXR0aW5ncygkc2V0dGluZ3MsICRtZXRhZGF0YUluZm8pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddKSAmJiBpc3NldCgkc2V0dGluZ3NbJ2lkcCddKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSkgJiYgIWVtcHR5KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0J10pKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkc2V0dGluZ3NbJ2lkcCddWyd4NTA5Y2VydCddKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRhZGF0YUluZm9bJ2lkcCddWyd4NTA5Y2VydCddKSAmJiAhZW1wdHkoJG1ldGFkYXRhSW5mb1snaWRwJ11bJ3g1MDljZXJ0J10pICYmIGlzc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRzZXR0aW5nc1snaWRwJ11bJ3g1MDljZXJ0TXVsdGknXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSgkc2V0dGluZ3MsICRtZXRhZGF0YUluZm8pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/LogoutRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCm5hbWVzcGFjZSBPbmVMb2dpblxTYW1sMjsKCnVzZSBSb2JSaWNoYXJkc1xYTUxTZWNMaWJzXFhNTFNlY3VyaXR5S2V5OwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIFNBTUwgMiBMb2dvdXQgUmVxdWVzdAogKi8KY2xhc3MgTG9nb3V0UmVxdWVzdAp7CiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGlkOwoKICAgIC8qKgogICAgICogT2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgc2V0dGluZyBpbmZvCiAgICAgKgogICAgICogQHZhciBTZXR0aW5ncwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9zZXR0aW5nczsKCiAgICAvKioKICAgICAqIFNBTUwgTG9nb3V0IFJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9sb2dvdXRSZXF1ZXN0OwoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgdGhpcyB2YXIgY29udGFpbnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHZhciBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSAkX2Vycm9yOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgTG9nb3V0IFJlcXVlc3Qgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBTZXR0aW5ncyAkc2V0dGluZ3MgICAgICAgICAgICBTZXR0aW5ncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRyZXF1ZXN0ICAgICAgICAgICAgIEEgVVVFbmNvZGVkIExvZ291dCBSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRuYW1lSWQgICAgICAgICAgICAgIFRoZSBOYW1lSUQgdGhhdCB3aWxsIGJlIHNldCBpbiB0aGUgTG9nb3V0UmVxdWVzdC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAgICAgICAgICAkc2Vzc2lvbkluZGV4ICAgICAgICBUaGUgU2Vzc2lvbkluZGV4ICh0YWtlbiBmcm9tIHRoZSBTQU1MIFJlc3BvbnNlIGluIHRoZSBTU08gcHJvY2VzcykuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCAgICAgICAgVGhlIE5hbWVJRCBGb3JtYXQgd2lsbCBiZSBzZXQgaW4gdGhlIExvZ291dFJlcXVlc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgVGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHdpbGwgYmUgc2V0IGluIHRoZSBMb2dvdXRSZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXE9uZUxvZ2luXFNhbWwyXFNldHRpbmdzICRzZXR0aW5ncywgJHJlcXVlc3QgPSBudWxsLCAkbmFtZUlkID0gbnVsbCwgJHNlc3Npb25JbmRleCA9IG51bGwsICRuYW1lSWRGb3JtYXQgPSBudWxsLCAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGwsICRuYW1lSWRTUE5hbWVRdWFsaWZpZXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRiYXNlVVJMID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0QmFzZVVSTCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkwpKSB7CiAgICAgICAgICAgIFV0aWxzOjpzZXRCYXNlVVJMKCRiYXNlVVJMKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHJlcXVlc3QpIHx8IGVtcHR5KCRyZXF1ZXN0KSkgewogICAgICAgICAgICAkc3BEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U1BEYXRhKCk7CiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICRpZCA9IFV0aWxzOjpnZW5lcmF0ZVVuaXF1ZUlEKCk7CiAgICAgICAgICAgICR0aGlzLT5pZCA9ICRpZDsKCiAgICAgICAgICAgICRpc3N1ZUluc3RhbnQgPSBVdGlsczo6cGFyc2VUaW1lMlNBTUwodGltZSgpKTsKCiAgICAgICAgICAgICRjZXJ0ID0gbnVsbDsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pICYmICRzZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICRleGlzdHNNdWx0aVg1MDlFbmMgPSBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddKSAmJiBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pICYmICFlbXB0eSgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzTXVsdGlYNTA5RW5jKSB7CiAgICAgICAgICAgICAgICAgICAgJGNlcnQgPSAkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ11bMF07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjZXJ0ID0gJGlkcERhdGFbJ3g1MDljZXJ0J107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghZW1wdHkoJG5hbWVJZCkpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbmFtZUlkRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICYmICRzcERhdGFbJ05hbWVJREZvcm1hdCddICE9IENvbnN0YW50czo6TkFNRUlEX1VOU1BFQ0lGSUVEKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9ICRzcERhdGFbJ05hbWVJREZvcm1hdCddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG5hbWVJZCA9ICRpZHBEYXRhWydlbnRpdHlJZCddOwogICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9IENvbnN0YW50czo6TkFNRUlEX0VOVElUWTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyogRnJvbSBzYW1sLWNvcmUtMi4wLW9zIDguMy42LCB3aGVuIHRoZSBlbnRpdHkgRm9ybWF0IGlzIHVzZWQ6CiAgICAgICAgICAgICAgICJUaGUgTmFtZVF1YWxpZmllciwgU1BOYW1lUXVhbGlmaWVyLCBhbmQgU1BQcm92aWRlZElEIGF0dHJpYnV0ZXMgTVVTVCBiZSBvbWl0dGVkLgogICAgICAgICAgICAqLwogICAgICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWRGb3JtYXQpICYmICRuYW1lSWRGb3JtYXQgPT0gQ29uc3RhbnRzOjpOQU1FSURfRU5USVRZKSB7CiAgICAgICAgICAgICAgICAkbmFtZUlkTmFtZVF1YWxpZmllciA9IG51bGw7CiAgICAgICAgICAgICAgICAkbmFtZUlkU1BOYW1lUXVhbGlmaWVyID0gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gTmFtZUlEIEZvcm1hdCBVTlNQRUNJRklFRCBvbWl0dGVkCiAgICAgICAgICAgIGlmICghZW1wdHkoJG5hbWVJZEZvcm1hdCkgJiYgJG5hbWVJZEZvcm1hdCA9PSBDb25zdGFudHM6Ok5BTUVJRF9VTlNQRUNJRklFRCkgewogICAgICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRuYW1lSWRPYmogPSBVdGlsczo6Z2VuZXJhdGVOYW1lSWQoCiAgICAgICAgICAgICAgICAkbmFtZUlkLAogICAgICAgICAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciwKICAgICAgICAgICAgICAgICRuYW1lSWRGb3JtYXQsCiAgICAgICAgICAgICAgICAkY2VydCwKICAgICAgICAgICAgICAgICRuYW1lSWROYW1lUXVhbGlmaWVyLAogICAgICAgICAgICAgICAgJHNlY3VyaXR5WydlbmNyeXB0aW9uX2FsZ29yaXRobSddCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkc2Vzc2lvbkluZGV4U3RyID0gaXNzZXQoJHNlc3Npb25JbmRleCkgPyAiPHNhbWxwOlNlc3Npb25JbmRleD57JHNlc3Npb25JbmRleH08L3NhbWxwOlNlc3Npb25JbmRleD4iIDogIiI7CgogICAgICAgICAgICAkc3BFbnRpdHlJZCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNwRGF0YVsnZW50aXR5SWQnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgICAgICRkZXN0aW5hdGlvbiA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUFNMT1VybCgpOwogICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9IDw8PExPR09VVFJFUVVFU1QKPHNhbWxwOkxvZ291dFJlcXVlc3QKICAgIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiCiAgICB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgSUQ9InskaWR9IgogICAgVmVyc2lvbj0iMi4wIgogICAgSXNzdWVJbnN0YW50PSJ7JGlzc3VlSW5zdGFudH0iCiAgICBEZXN0aW5hdGlvbj0ieyRkZXN0aW5hdGlvbn0iPgogICAgPHNhbWw6SXNzdWVyPnskc3BFbnRpdHlJZH08L3NhbWw6SXNzdWVyPgogICAgeyRuYW1lSWRPYmp9CiAgICB7JHNlc3Npb25JbmRleFN0cn0KPC9zYW1scDpMb2dvdXRSZXF1ZXN0PgpMT0dPVVRSRVFVRVNUOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZSgkcmVxdWVzdCk7CiAgICAgICAgICAgIC8vIFdlIHRyeSB0byBpbmZsYXRlCiAgICAgICAgICAgICRpbmZsYXRlZCA9IEBnemluZmxhdGUoJGRlY29kZWQpOwogICAgICAgICAgICBpZiAoJGluZmxhdGVkICE9IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkbG9nb3V0UmVxdWVzdCA9ICRpbmZsYXRlZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRsb2dvdXRSZXF1ZXN0ID0gJGRlY29kZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmlkID0gc3RhdGljOjpnZXRJRCgkbG9nb3V0UmVxdWVzdCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fbG9nb3V0UmVxdWVzdCA9ICRsb2dvdXRSZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgTG9nb3V0IFJlcXVlc3QgZGVmbGF0ZWQsIGJhc2U2NGVuY29kZWQsIHVuc2lnbmVkCiAgICAgKgogICAgICogQHBhcmFtIGJvb2x8bnVsbCAkZGVmbGF0ZSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgJ2d6ZGVmbGF0ZScgdGhlIHJlcXVlc3QgYm9keSBiZWZvcmUgd2UgcmV0dXJuIGl0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIERlZmxhdGVkIGJhc2U2NCBlbmNvZGVkIExvZ291dCBSZXF1ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCRkZWZsYXRlID0gbnVsbCkKICAgIHsKICAgICAgICAkc3ViamVjdCA9ICR0aGlzLT5fbG9nb3V0UmVxdWVzdDsKCiAgICAgICAgaWYgKGlzX251bGwoJGRlZmxhdGUpKSB7CiAgICAgICAgICAgICRkZWZsYXRlID0gJHRoaXMtPl9zZXR0aW5ncy0+c2hvdWxkQ29tcHJlc3NSZXF1ZXN0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRkZWZsYXRlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gZ3pkZWZsYXRlKCR0aGlzLT5fbG9nb3V0UmVxdWVzdCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkc3ViamVjdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkcmVxdWVzdCBMb2dvdXQgUmVxdWVzdCBNZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSUQKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SUQoJHJlcXVlc3QpCiAgICB7CiAgICAgICAgaWYgKCRyZXF1ZXN0IGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXF1ZXN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICRyZXF1ZXN0KTsKICAgICAgICB9CgoKICAgICAgICBpZiAoZmFsc2UgPT09ICRkb20pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgIkxvZ291dFJlcXVlc3QgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICBFcnJvcjo6U0FNTF9MT0dPVVRSRVFVRVNUX0lOVkFMSUQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRpZCA9ICRkb20tPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdJRCcpOwogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgRGF0YSBvZiB0aGUgdGhlIExvZ291dCBSZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHJlcXVlc3QgTG9nb3V0IFJlcXVlc3QgTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAka2V5ICAgICBUaGUgU1Aga2V5CiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBOYW1lIElEIERhdGEgKFZhbHVlLCBGb3JtYXQsIE5hbWVRdWFsaWZpZXIsIFNQTmFtZVF1YWxpZmllcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROYW1lSWREYXRhKCRyZXF1ZXN0LCAka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHJlcXVlc3QgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9tID0gJHJlcXVlc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgJGVuY3J5cHRlZEVudHJpZXMgPSBVdGlsczo6cXVlcnkoJGRvbSwgJy9zYW1scDpMb2dvdXRSZXF1ZXN0L3NhbWw6RW5jcnlwdGVkSUQnKTsKCiAgICAgICAgaWYgKCRlbmNyeXB0ZWRFbnRyaWVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkZW5jcnlwdGVkRGF0YU5vZGVzID0gJGVuY3J5cHRlZEVudHJpZXMtPml0ZW0oMCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFbmNyeXB0ZWREYXRhJyk7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZERhdGFOb2Rlcy0+aXRlbSgwKTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgka2V5KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJQcml2YXRlIEtleSBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkZWNyeXB0IHRoZSBOYW1lSUQsIGNoZWNrIHNldHRpbmdzIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfMV81LCBhcnJheSgndHlwZSc9Pidwcml2YXRlJykpOwogICAgICAgICAgICAkc2Vja2V5LT5sb2FkS2V5KCRrZXkpOwoKICAgICAgICAgICAgJG5hbWVJZCA9IFV0aWxzOjpkZWNyeXB0RWxlbWVudCgkZW5jcnlwdGVkRGF0YSwgJHNlY2tleSk7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRlbnRyaWVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1sOk5hbWVJRCcpOwogICAgICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkbmFtZUlkID0gJGVudHJpZXMtPml0ZW0oMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJG5hbWVJZCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJOYW1lSUQgbm90IGZvdW5kIGluIHRoZSBMb2dvdXQgUmVxdWVzdCIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX05BTUVJRAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZERhdGEgPSBhcnJheSgpOwogICAgICAgICRuYW1lSWREYXRhWydWYWx1ZSddID0gJG5hbWVJZC0+bm9kZVZhbHVlOwogICAgICAgIGZvcmVhY2ggKGFycmF5KCdGb3JtYXQnLCAnU1BOYW1lUXVhbGlmaWVyJywgJ05hbWVRdWFsaWZpZXInKSBhcyAkYXR0cikgewogICAgICAgICAgICBpZiAoJG5hbWVJZC0+aGFzQXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgJG5hbWVJZERhdGFbJGF0dHJdID0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lSWREYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIG9mIHRoZSBMb2dvdXQgUmVxdWVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfERPTURvY3VtZW50ICRyZXF1ZXN0IExvZ291dCBSZXF1ZXN0IE1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAgICAgJGtleSAgICAgVGhlIFNQIGtleQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIE5hbWUgSUQgVmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROYW1lSWQoJHJlcXVlc3QsICRrZXkgPSBudWxsKQogICAgewogICAgICAgICRuYW1lSWQgPSBzZWxmOjpnZXROYW1lSWREYXRhKCRyZXF1ZXN0LCAka2V5KTsKICAgICAgICByZXR1cm4gJG5hbWVJZFsnVmFsdWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElzc3VlciBvZiB0aGUgTG9nb3V0IFJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkcmVxdWVzdCBMb2dvdXQgUmVxdWVzdCBNZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAkaXNzdWVyIFRoZSBJc3N1ZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElzc3VlcigkcmVxdWVzdCkKICAgIHsKICAgICAgICBpZiAoJHJlcXVlc3QgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9tID0gJHJlcXVlc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gVXRpbHM6OmxvYWRYTUwoJGRvbSwgJHJlcXVlc3QpOwogICAgICAgIH0KCiAgICAgICAgJGlzc3VlciA9IG51bGw7CiAgICAgICAgJGlzc3Vlck5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1sOklzc3VlcicpOwogICAgICAgIGlmICgkaXNzdWVyTm9kZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICRpc3N1ZXIgPSAkaXNzdWVyTm9kZXMtPml0ZW0oMCktPnRleHRDb250ZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGlzc3VlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFNlc3Npb25JbmRleGVzIGZyb20gdGhlIExvZ291dCBSZXF1ZXN0LgogICAgICogTm90aWNlOiBPdXIgQ29uc3RydWN0b3Igb25seSBzdXBwb3J0IDEgU2Vzc2lvbkluZGV4IGJ1dCB0aGlzIHBhcnNlcgogICAgICogICAgICAgICBleHRyYWN0cyBhbiBhcnJheSBvZiBhbGwgdGhlICBTZXNzaW9uSW5kZXggZm91bmQgb24gYQogICAgICogICAgICAgICBMb2dvdXQgUmVxdWVzdCwgdGhhdCBjb3VsZCBiZSBtYW55LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHJlcXVlc3QgTG9nb3V0IFJlcXVlc3QgTWVzc2FnZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIFNlc3Npb25JbmRleCB2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4ZXMoJHJlcXVlc3QpCiAgICB7CiAgICAgICAgaWYgKCRyZXF1ZXN0IGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXF1ZXN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICRyZXF1ZXN0KTsKICAgICAgICB9CgogICAgICAgICRzZXNzaW9uSW5kZXhlcyA9IGFycmF5KCk7CiAgICAgICAgJHNlc3Npb25JbmRleE5vZGVzID0gVXRpbHM6OnF1ZXJ5KCRkb20sICcvc2FtbHA6TG9nb3V0UmVxdWVzdC9zYW1scDpTZXNzaW9uSW5kZXgnKTsKICAgICAgICBmb3JlYWNoICgkc2Vzc2lvbkluZGV4Tm9kZXMgYXMgJHNlc3Npb25JbmRleE5vZGUpIHsKICAgICAgICAgICAgJHNlc3Npb25JbmRleGVzW10gPSAkc2Vzc2lvbkluZGV4Tm9kZS0+dGV4dENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2Vzc2lvbkluZGV4ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIExvZ291dCBSZXF1ZXN0IHJlY2VpdmVkIGlzIHZhbGlkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyIFRydWUgaWYgd2Ugd2FudCB0byB1c2UgcGFyYW1ldGVycyBmcm9tICRfU0VSVkVSIHRvIHZhbGlkYXRlIHRoZSBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgSWYgdGhlIExvZ291dCBSZXF1ZXN0IGlzIG9yIG5vdCB2YWxpZAogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlciA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3IgPSBudWxsOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IFV0aWxzOjpsb2FkWE1MKCRkb20sICR0aGlzLT5fbG9nb3V0UmVxdWVzdCk7CgogICAgICAgICAgICAkaWRwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldElkUERhdGEoKTsKICAgICAgICAgICAgJGlkUEVudGl0eUlkID0gJGlkcERhdGFbJ2VudGl0eUlkJ107CgogICAgICAgICAgICBpZiAoJHRoaXMtPl9zZXR0aW5ncy0+aXNTdHJpY3QoKSkgewogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U2VjdXJpdHlEYXRhKCk7CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudFhNTFZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICRyZXMgPSBVdGlsczo6dmFsaWRhdGVYTUwoJGRvbSwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBTQU1MIExvZ291dCBSZXF1ZXN0LiBOb3QgbWF0Y2ggdGhlIHNhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1hNTF9GT1JNQVQKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRVUkwgPSBVdGlsczo6Z2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBOb3RPbk9yQWZ0ZXIKICAgICAgICAgICAgICAgIGlmICgkZG9tLT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnTm90T25PckFmdGVyJykpIHsKICAgICAgICAgICAgICAgICAgICAkbmEgPSBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJGRvbS0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ05vdE9uT3JBZnRlcicpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJG5hIDw9IHRpbWUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IGV4cGlyZWQuIENoZWNrIHN5c3RlbSBjbG9jay4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpSRVNQT05TRV9FWFBJUkVECiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoJGRvbS0+ZG9jdW1lbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoJ0Rlc3RpbmF0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAkZGVzdGluYXRpb24gPSAkZG9tLT5kb2N1bWVudEVsZW1lbnQtPmdldEF0dHJpYnV0ZSgnRGVzdGluYXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIExvZ291dFJlcXVlc3QgaGFzIGFuIGVtcHR5IERlc3RpbmF0aW9uIHZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OkVNUFRZX0RFU1RJTkFUSU9OCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHVybENvbXBhcmlzb25MZW5ndGggPSAkc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPyBzdHJsZW4oJGRlc3RpbmF0aW9uKSA6IHN0cmxlbigkY3VycmVudFVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRkZXN0aW5hdGlvbiwgJGN1cnJlbnRVUkwsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRVUkxOb1JvdXRlZCA9IFV0aWxzOjpnZXRTZWxmVVJMTm9RdWVyeSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybENvbXBhcmlzb25MZW5ndGggPSAkc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPyBzdHJsZW4oJGRlc3RpbmF0aW9uKSA6IHN0cmxlbigkY3VycmVudFVSTE5vUm91dGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRkZXN0aW5hdGlvbiwgJGN1cnJlbnRVUkxOb1JvdXRlZCwgJHVybENvbXBhcmlzb25MZW5ndGgpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBMb2dvdXRSZXF1ZXN0IHdhcyByZWNlaXZlZCBhdCAkY3VycmVudFVSTCBpbnN0ZWFkIG9mICRkZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfREVTVElOQVRJT04KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRuYW1lSWQgPSBzdGF0aWM6OmdldE5hbWVJZCgkZG9tLCAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUGtleSgpKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpc3N1ZXIKICAgICAgICAgICAgICAgICRpc3N1ZXIgPSBzdGF0aWM6OmdldElzc3VlcigkZG9tKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGlzc3VlcikgJiYgJGlzc3VlciAhPSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBpc3N1ZXIgaW4gdGhlIExvZ291dCBSZXF1ZXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JU1NVRVIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkc2VjdXJpdHlbJ3dhbnRNZXNzYWdlc1NpZ25lZCddICYmICFpc3NldCgkX0dFVFsnU2lnbmF0dXJlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNZXNzYWdlIG9mIHRoZSBMb2dvdXQgUmVxdWVzdCBpcyBub3Qgc2lnbmVkIGFuZCB0aGUgU1AgcmVxdWlyZSBpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6Tk9fU0lHTkVEX01FU1NBR0UKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ1NpZ25hdHVyZSddKSkgewogICAgICAgICAgICAgICAgJHNpZ25hdHVyZVZhbGlkID0gVXRpbHM6OnZhbGlkYXRlQmluYXJ5U2lnbigiU0FNTFJlcXVlc3QiLCAkX0dFVCwgJGlkcERhdGEsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyKTsKICAgICAgICAgICAgICAgIGlmICghJHNpZ25hdHVyZVZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZC4gTG9nb3V0IFJlcXVlc3QgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3IgPSAkZTsKICAgICAgICAgICAgJGRlYnVnID0gJHRoaXMtPl9zZXR0aW5ncy0+aXNEZWJ1Z0FjdGl2ZSgpOwogICAgICAgICAgICBpZiAoJGRlYnVnKSB7CiAgICAgICAgICAgICAgICBlY2hvIGh0bWxlbnRpdGllcygkdGhpcy0+X2Vycm9yLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZnRlciBleGVjdXRlIGEgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmYWlscyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBFeGNlcHRpb24gb2YgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb24gQ2F1c2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yRXhjZXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9lcnJvcjsKICAgIH0KCiAgICAvKioKICAgICAqIEFmdGVyIGV4ZWN1dGUgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGZhaWxzIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZyBFcnJvciByZWFzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCkKICAgIHsKICAgICAgICAkZXJyb3JNc2cgPSBudWxsOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2Vycm9yKSkgewogICAgICAgICAgICAkZXJyb3JNc2cgPSBodG1sZW50aXRpZXMoJHRoaXMtPl9lcnJvci0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRlcnJvck1zZzsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFhNTCB0aGF0IHdpbGwgYmUgc2VudCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0CiAgICAgKiBvciB0aGF0IHdhcyByZWNlaXZlZCBhdCB0aGUgU1AKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WE1MKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9sb2dvdXRSZXF1ZXN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/LogoutResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01Ob2RlTGlzdDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiBTQU1MIDIgTG9nb3V0IFJlc3BvbnNlCiAqLwpjbGFzcyBMb2dvdXRSZXNwb25zZQp7CiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRpZDsKCiAgICAvKioKICAgICAqIE9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNldHRpbmcgaW5mbwogICAgICoKICAgICAqIEB2YXIgU2V0dGluZ3MKICAgICAqLwogICAgcHJvdGVjdGVkICRfc2V0dGluZ3M7CgogICAgLyoqCiAgICAgKiBUaGUgZGVjb2RlZCwgdW5wcm9jZXNzZWQgWE1MIHJlc3BvbnNlIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2xvZ291dFJlc3BvbnNlOwoKICAgIC8qKgogICAgICogQSBET01Eb2N1bWVudCBjbGFzcyBsb2FkZWQgZnJvbSB0aGUgU0FNTCBMb2dvdXRSZXNwb25zZS4KICAgICAqCiAgICAgKiBAdmFyIERPTURvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyAkZG9jdW1lbnQ7CgogICAgLyoqCiAgICAgKiBBZnRlciBleGVjdXRlIGEgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBpdCBmYWlscywgdGhpcyB2YXIgY29udGFpbnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHZhciBFeGNlcHRpb258bnVsbAogICAgICovCiAgICBwcml2YXRlICRfZXJyb3I7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdCAoSW5pdGlhbGl6ZSBwYXJhbXMgZnJvbSBzZXR0aW5ncyBhbmQgaWYgcHJvdmlkZWQKICAgICAqIGxvYWQgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICRyZXNwb25zZSBBbiBVVUVuY29kZWQgU0FNTCBMb2dvdXQgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcT25lTG9naW5cU2FtbDJcU2V0dGluZ3MgJHNldHRpbmdzLCAkcmVzcG9uc2UgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fc2V0dGluZ3MgPSAkc2V0dGluZ3M7CgogICAgICAgICRiYXNlVVJMID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0QmFzZVVSTCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkwpKSB7CiAgICAgICAgICAgIFV0aWxzOjpzZXRCYXNlVVJMKCRiYXNlVVJMKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVzcG9uc2UpIHsKICAgICAgICAgICAgJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKCRyZXNwb25zZSk7CiAgICAgICAgICAgICRpbmZsYXRlZCA9IEBnemluZmxhdGUoJGRlY29kZWQpOwogICAgICAgICAgICBpZiAoJGluZmxhdGVkICE9IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2xvZ291dFJlc3BvbnNlID0gJGluZmxhdGVkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPl9sb2dvdXRSZXNwb25zZSA9ICRkZWNvZGVkOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5kb2N1bWVudCA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkdGhpcy0+ZG9jdW1lbnQgPSBVdGlsczo6bG9hZFhNTCgkdGhpcy0+ZG9jdW1lbnQsICR0aGlzLT5fbG9nb3V0UmVzcG9uc2UpOwoKICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+ZG9jdW1lbnQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAiTG9nb3V0UmVzcG9uc2UgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlNBTUxfTE9HT1VUUkVTUE9OU0VfSU5WQUxJRAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5oYXNBdHRyaWJ1dGUoJ0lEJykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pZCA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBJc3N1ZXIgb2YgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsICRpc3N1ZXIgVGhlIElzc3VlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNzdWVyKCkKICAgIHsKICAgICAgICAkaXNzdWVyID0gbnVsbDsKICAgICAgICAkaXNzdWVyTm9kZXMgPSAkdGhpcy0+X3F1ZXJ5KCcvc2FtbHA6TG9nb3V0UmVzcG9uc2Uvc2FtbDpJc3N1ZXInKTsKICAgICAgICBpZiAoJGlzc3Vlck5vZGVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkaXNzdWVyID0gJGlzc3Vlck5vZGVzLT5pdGVtKDApLT50ZXh0Q29udGVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpc3N1ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBTdGF0dXMgb2YgdGhlIExvZ291dCBSZXNwb25zZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBTdGF0dXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1cygpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5KCcvc2FtbHA6TG9nb3V0UmVzcG9uc2Uvc2FtbHA6U3RhdHVzL3NhbWxwOlN0YXR1c0NvZGUnKTsKICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkc3RhdHVzID0gJGVudHJpZXMtPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnVmFsdWUnKTsKICAgICAgICByZXR1cm4gJHN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgdGhlIFNBTUwgTG9nb3V0UmVzcG9uc2UgaXMgdmFsaWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJlcXVlc3RJZCAgICAgICAgICAgICAgICAgICAgVGhlIElEIG9mIHRoZSBMb2dvdXRSZXF1ZXN0IHNlbnQgYnkgdGhpcyBTUCB0byB0aGUgSWRQCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIgVHJ1ZSBpZiB3ZSB3YW50IHRvIHVzZSBwYXJhbWV0ZXJzIGZyb20gJF9TRVJWRVIgdG8gdmFsaWRhdGUgdGhlIHNpZ25hdHVyZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIGlmIHRoZSBTQU1MIExvZ291dFJlc3BvbnNlIGlzIG9yIG5vdCB2YWxpZAogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCRyZXF1ZXN0SWQgPSBudWxsLCAkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlciA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5fZXJyb3IgPSBudWxsOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkaWRQRW50aXR5SWQgPSAkaWRwRGF0YVsnZW50aXR5SWQnXTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpKSB7CiAgICAgICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcyA9IFV0aWxzOjp2YWxpZGF0ZVhNTCgkdGhpcy0+ZG9jdW1lbnQsICdzYW1sLXNjaGVtYS1wcm90b2NvbC0yLjAueHNkJywgJHRoaXMtPl9zZXR0aW5ncy0+aXNEZWJ1Z0FjdGl2ZSgpLCAkdGhpcy0+X3NldHRpbmdzLT5nZXRTY2hlbWFzUGF0aCgpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoISRyZXMgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgU0FNTCBMb2dvdXQgUmVzcG9uc2UuIE5vdCBtYXRjaCB0aGUgc2FtbC1zY2hlbWEtcHJvdG9jb2wtMi4wLnhzZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgSW5SZXNwb25zZVRvIG9mIHRoZSBMb2dvdXQgUmVzcG9uc2UgbWF0Y2hzIHRoZSBJRCBvZiB0aGUgTG9nb3V0IFJlcXVlc3QgKHJlcXVlc3RJZCkgaWYgcHJvdmlkZWQKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcmVxdWVzdElkKSAmJiAkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKSkgewogICAgICAgICAgICAgICAgICAgICRpblJlc3BvbnNlVG8gPSAkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJlcXVlc3RJZCAhPSAkaW5SZXNwb25zZVRvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIEluUmVzcG9uc2VUbyBvZiB0aGUgTG9nb3V0IFJlc3BvbnNlOiAkaW5SZXNwb25zZVRvLCBkb2VzIG5vdCBtYXRjaCB0aGUgSUQgb2YgdGhlIExvZ291dCByZXF1ZXN0IHNlbnQgYnkgdGhlIFNQOiAkcmVxdWVzdElkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlzc3VlcgogICAgICAgICAgICAgICAgJGlzc3VlciA9ICR0aGlzLT5nZXRJc3N1ZXIoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGlzc3VlcikgJiYgJGlzc3VlciAhPSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBpc3N1ZXIgaW4gdGhlIExvZ291dCBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSVNTVUVSCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY3VycmVudFVSTCA9IFV0aWxzOjpnZXRTZWxmUm91dGVkVVJMTm9RdWVyeSgpOwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdEZXN0aW5hdGlvbicpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmdldEF0dHJpYnV0ZSgnRGVzdGluYXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIExvZ291dFJlc3BvbnNlIGhhcyBhbiBlbXB0eSBEZXN0aW5hdGlvbiB2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpFTVBUWV9ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkwpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMLCAkdXJsQ29tcGFyaXNvbkxlbmd0aCkgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50VVJMTm9Sb3V0ZWQgPSBVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkxOb1JvdXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMTm9Sb3V0ZWQsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTG9nb3V0UmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGF0ICRjdXJyZW50VVJMIGluc3RlYWQgb2YgJGRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gJiYgIWlzc2V0KCRfR0VUWydTaWduYXR1cmUnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE1lc3NhZ2Ugb2YgdGhlIExvZ291dCBSZXNwb25zZSBpcyBub3Qgc2lnbmVkIGFuZCB0aGUgU1AgcmVxdWlyZXMgaXQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX1NJR05FRF9NRVNTQUdFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydTaWduYXR1cmUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduYXR1cmVWYWxpZCA9IFV0aWxzOjp2YWxpZGF0ZUJpbmFyeVNpZ24oIlNBTUxSZXNwb25zZSIsICRfR0VULCAkaWRwRGF0YSwgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIpOwogICAgICAgICAgICAgICAgaWYgKCEkc2lnbmF0dXJlVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkLiBMb2dvdXQgUmVzcG9uc2UgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvciA9ICRlOwogICAgICAgICAgICAkZGVidWcgPSAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCk7CiAgICAgICAgICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgICAgIGVjaG8gaHRtbGVudGl0aWVzKCR0aGlzLT5fZXJyb3ItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgbm9kZSBmcm9tIHRoZSBET01Eb2N1bWVudCAoTG9nb3V0IFJlc3BvbnNlIE1lc3NhZ2UpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgWHBhdGggRXhwcmVzc2lvbgogICAgICoKICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgVGhlIHF1ZXJpZWQgbm9kZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9xdWVyeSgkcXVlcnkpCiAgICB7CiAgICAgICAgcmV0dXJuIFV0aWxzOjpxdWVyeSgkdGhpcy0+ZG9jdW1lbnQsICRxdWVyeSk7CgogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgTG9nb3V0IFJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpblJlc3BvbnNlVG8gSW5SZXNwb25zZVRvIHZhbHVlIGZvciB0aGUgTG9nb3V0IFJlc3BvbnNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoJGluUmVzcG9uc2VUbykKICAgIHsKCiAgICAgICAgJHNwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQRGF0YSgpOwoKICAgICAgICAkdGhpcy0+aWQgPSBVdGlsczo6Z2VuZXJhdGVVbmlxdWVJRCgpOwogICAgICAgICRpc3N1ZUluc3RhbnQgPSBVdGlsczo6cGFyc2VUaW1lMlNBTUwodGltZSgpKTsKICAgICAgICAkc3BFbnRpdHlJZCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNwRGF0YVsnZW50aXR5SWQnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgJGRlc3RpbmF0aW9uID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQU0xPUmVzcG9uc2VVcmwoKTsKICAgICAgICAkbG9nb3V0UmVzcG9uc2UgPSA8PDxMT0dPVVRSRVNQT05TRQo8c2FtbHA6TG9nb3V0UmVzcG9uc2UgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIKICAgICAgICAgICAgICAgICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgICAgICAgICAgICAgSUQ9InskdGhpcy0+aWR9IgogICAgICAgICAgICAgICAgICBWZXJzaW9uPSIyLjAiCiAgICAgICAgICAgICAgICAgIElzc3VlSW5zdGFudD0ieyRpc3N1ZUluc3RhbnR9IgogICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbj0ieyRkZXN0aW5hdGlvbn0iCiAgICAgICAgICAgICAgICAgIEluUmVzcG9uc2VUbz0ieyRpblJlc3BvbnNlVG99IgogICAgICAgICAgICAgICAgICA+CiAgICA8c2FtbDpJc3N1ZXI+eyRzcEVudGl0eUlkfTwvc2FtbDpJc3N1ZXI+CiAgICA8c2FtbHA6U3RhdHVzPgogICAgICAgIDxzYW1scDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiIC8+CiAgICA8L3NhbWxwOlN0YXR1cz4KPC9zYW1scDpMb2dvdXRSZXNwb25zZT4KTE9HT1VUUkVTUE9OU0U7CiAgICAgICAgJHRoaXMtPl9sb2dvdXRSZXNwb25zZSA9ICRsb2dvdXRSZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBMb2dvdXQgUmVzcG9uc2Ugb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBib29sfG51bGwgJGRlZmxhdGUgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkICdnemRlZmxhdGUnIHRoZSByZXNwb25zZSBib2R5IGJlZm9yZSB3ZSByZXR1cm4gaXQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgTG9nb3V0IFJlc3BvbnNlIGRlZmxhdGVkIGFuZCBiYXNlNjQgZW5jb2RlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoJGRlZmxhdGUgPSBudWxsKQogICAgewogICAgICAgICRsb2dvdXRSZXNwb25zZSA9ICR0aGlzLT5fbG9nb3V0UmVzcG9uc2U7CgogICAgICAgIGlmIChpc19udWxsKCRkZWZsYXRlKSkgewogICAgICAgICAgICAkZGVmbGF0ZSA9ICR0aGlzLT5fc2V0dGluZ3MtPnNob3VsZENvbXByZXNzUmVzcG9uc2VzKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRlZmxhdGUpIHsKICAgICAgICAgICAgJGxvZ291dFJlc3BvbnNlID0gZ3pkZWZsYXRlKCR0aGlzLT5fbG9nb3V0UmVzcG9uc2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkbG9nb3V0UmVzcG9uc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UuCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBDYXVzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JFeGNlcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nIEVycm9yIHJlYXNvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3IoKQogICAgewogICAgICAgICRlcnJvck1zZyA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fZXJyb3IpKSB7CiAgICAgICAgICAgICRlcnJvck1zZyA9IGh0bWxlbnRpdGllcygkdGhpcy0+X2Vycm9yLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yTXNnOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcgdGhlIElEIG9mIHRoZSBSZXNwb25zZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBYTUwgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcmVzcG9uc2UKICAgICAqIG9yIHRoYXQgd2FzIHJlY2VpdmVkIGF0IHRoZSBTUAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFhNTCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nb3V0UmVzcG9uc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Metadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIE1ldGFkYXRhIGxpYiBvZiBTQU1MIFBIUCBUb29sa2l0CiAqLwpjbGFzcyBNZXRhZGF0YQp7CiAgICBjb25zdCBUSU1FX1ZBTElEID0gMTcyODAwOyAgLy8gMiBkYXlzCiAgICBjb25zdCBUSU1FX0NBQ0hFRCA9IDYwNDgwMDsgLy8gMSB3ZWVrCgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZXMgdGhlIG1ldGFkYXRhIG9mIHRoZSBTUCBiYXNlZCBvbiB0aGUgc2V0dGluZ3MKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAkc3AgICAgICAgICAgICBUaGUgU1AgZGF0YQogICAgICogQHBhcmFtIGJvb2x8c3RyaW5nICAgJGF1dGhuc2lnbiAgICAgYXV0aG5SZXF1ZXN0c1NpZ25lZCBhdHRyaWJ1dGUKICAgICAqIEBwYXJhbSBib29sfHN0cmluZyAgICR3c2lnbiAgICAgICAgIHdhbnRBc3NlcnRpb25zU2lnbmVkIGF0dHJpYnV0ZQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgJHZhbGlkVW50aWwgICAgTWV0YWRhdGEncyB2YWxpZCB0aW1lCiAgICAgKiBAcGFyYW0gaW50fG51bGwgICAgICAkY2FjaGVEdXJhdGlvbiBEdXJhdGlvbiBvZiB0aGUgY2FjaGUgaW4gc2Vjb25kcwogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgJGNvbnRhY3RzICAgICAgQ29udGFjdHMgaW5mbwogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgJG9yZ2FuaXphdGlvbiAgT3JnYW5pemF0aW9uIGluZ28KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICRhdHRyaWJ1dGVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAkaWdub3JlVmFsaWRVbnRpbCBleGNsdWRlIHRoZSB2YWxpZFVudGlsIHRhZyBmcm9tIG1ldGFkYXRhCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU0FNTCBNZXRhZGF0YSBYTUwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZGVyKCRzcCwgJGF1dGhuc2lnbiA9IGZhbHNlLCAkd3NpZ24gPSBmYWxzZSwgJHZhbGlkVW50aWwgPSBudWxsLCAkY2FjaGVEdXJhdGlvbiA9IG51bGwsICRjb250YWN0cyA9IGFycmF5KCksICRvcmdhbml6YXRpb24gPSBhcnJheSgpLCAkYXR0cmlidXRlcyA9IGFycmF5KCksICRpZ25vcmVWYWxpZFVudGlsID0gZmFsc2UpCiAgICB7CgogICAgICAgIGlmICghaXNzZXQoJHZhbGlkVW50aWwpKSB7CiAgICAgICAgICAgICR2YWxpZFVudGlsID0gIHRpbWUoKSArIHNlbGY6OlRJTUVfVkFMSUQ7CiAgICAgICAgfQogICAgICAgICR2YWxpZFVudGlsVGltZSA9ICBVdGlsczo6cGFyc2VUaW1lMlNBTUwoJHZhbGlkVW50aWwpOwoKICAgICAgICBpZiAoIWlzc2V0KCRjYWNoZUR1cmF0aW9uKSkgewogICAgICAgICAgICAkY2FjaGVEdXJhdGlvbiA9IHNlbGY6OlRJTUVfQ0FDSEVEOwogICAgICAgIH0KCiAgICAgICAgJHNscyA9ICcnOwoKICAgICAgICBpZiAoaXNzZXQoJHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pKSB7CiAgICAgICAgICAgICRzbHNVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWyd1cmwnXSwgRU5UX1FVT1RFUyk7CiAgICAgICAgICAgICRzbHMgPSA8PDxTTFNfVEVNUExBVEUKICAgICAgICA8bWQ6U2luZ2xlTG9nb3V0U2VydmljZSBCaW5kaW5nPSJ7JHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ2JpbmRpbmcnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb249Inskc2xzVXJsfSIgLz4KClNMU19URU1QTEFURTsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG5zaWduKSB7CiAgICAgICAgICAgICRzdHJBdXRobnNpZ24gPSAndHJ1ZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHN0ckF1dGhuc2lnbiA9ICdmYWxzZSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHdzaWduKSB7CiAgICAgICAgICAgICRzdHJXc2lnbiA9ICd0cnVlJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc3RyV3NpZ24gPSAnZmFsc2UnOwogICAgICAgIH0KCiAgICAgICAgJHN0ck9yZ2FuaXphdGlvbiA9ICcnOwoKICAgICAgICBpZiAoIWVtcHR5KCRvcmdhbml6YXRpb24pKSB7CiAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvTmFtZXMgPSBhcnJheSgpOwogICAgICAgICAgICAkb3JnYW5pemF0aW9uSW5mb0Rpc3BsYXluYW1lcyA9IGFycmF5KCk7CiAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvVXJscyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcmdhbml6YXRpb24gYXMgJGxhbmcgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvTmFtZXNbXSA9IDw8PE9SR0FOSVpBVElPTl9OQU1FCiAgICAgICA8bWQ6T3JnYW5pemF0aW9uTmFtZSB4bWw6bGFuZz0ieyRsYW5nfSI+eyRpbmZvWyduYW1lJ119PC9tZDpPcmdhbml6YXRpb25OYW1lPgpPUkdBTklaQVRJT05fTkFNRTsKICAgICAgICAgICAgICAgICRvcmdhbml6YXRpb25JbmZvRGlzcGxheW5hbWVzW10gPSA8PDxPUkdBTklaQVRJT05fRElTUExBWQogICAgICAgPG1kOk9yZ2FuaXphdGlvbkRpc3BsYXlOYW1lIHhtbDpsYW5nPSJ7JGxhbmd9Ij57JGluZm9bJ2Rpc3BsYXluYW1lJ119PC9tZDpPcmdhbml6YXRpb25EaXNwbGF5TmFtZT4KT1JHQU5JWkFUSU9OX0RJU1BMQVk7CiAgICAgICAgICAgICAgICAkb3JnYW5pemF0aW9uSW5mb1VybHNbXSA9IDw8PE9SR0FOSVpBVElPTl9VUkwKICAgICAgIDxtZDpPcmdhbml6YXRpb25VUkwgeG1sOmxhbmc9InskbGFuZ30iPnskaW5mb1sndXJsJ119PC9tZDpPcmdhbml6YXRpb25VUkw+Ck9SR0FOSVpBVElPTl9VUkw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9yZ0RhdGEgPSBpbXBsb2RlKCJcbiIsICRvcmdhbml6YXRpb25JbmZvTmFtZXMpLiJcbiIuaW1wbG9kZSgiXG4iLCAkb3JnYW5pemF0aW9uSW5mb0Rpc3BsYXluYW1lcykuIlxuIi5pbXBsb2RlKCJcbiIsICRvcmdhbml6YXRpb25JbmZvVXJscyk7CiAgICAgICAgICAgICRzdHJPcmdhbml6YXRpb24gPSA8PDxPUkdBTklaQVRJT05TVFIKCiAgICA8bWQ6T3JnYW5pemF0aW9uPgp7JG9yZ0RhdGF9CiAgICA8L21kOk9yZ2FuaXphdGlvbj4KT1JHQU5JWkFUSU9OU1RSOwogICAgICAgIH0KCiAgICAgICAgJHN0ckNvbnRhY3RzID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkY29udGFjdHMpKSB7CiAgICAgICAgICAgICRjb250YWN0c0luZm8gPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkY29udGFjdHMgYXMgJHR5cGUgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICRjb250YWN0c0luZm9bXSA9IDw8PENPTlRBQ1QKICAgIDxtZDpDb250YWN0UGVyc29uIGNvbnRhY3RUeXBlPSJ7JHR5cGV9Ij4KICAgICAgICA8bWQ6R2l2ZW5OYW1lPnskaW5mb1snZ2l2ZW5OYW1lJ119PC9tZDpHaXZlbk5hbWU+CiAgICAgICAgPG1kOkVtYWlsQWRkcmVzcz57JGluZm9bJ2VtYWlsQWRkcmVzcyddfTwvbWQ6RW1haWxBZGRyZXNzPgogICAgPC9tZDpDb250YWN0UGVyc29uPgpDT05UQUNUOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdHJDb250YWN0cyA9ICJcbiIuaW1wbG9kZSgiXG4iLCAkY29udGFjdHNJbmZvKTsKICAgICAgICB9CgogICAgICAgICRzdHJBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlID0gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddKSkgewogICAgICAgICAgICAkYXR0ckNzRGVzYyA9ICcnOwogICAgICAgICAgICBpZiAoaXNzZXQoJHNwWydhdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlJ11bJ3NlcnZpY2VEZXNjcmlwdGlvbiddKSkgewogICAgICAgICAgICAgICAgJGF0dHJDc0Rlc2MgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8bWQ6U2VydmljZURlc2NyaXB0aW9uIHhtbDpsYW5nPSJlbiI+JXM8L21kOlNlcnZpY2VEZXNjcmlwdGlvbj4nIC4gUEhQX0VPTCwKICAgICAgICAgICAgICAgICAgICAkc3BbJ2F0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UnXVsnc2VydmljZURlc2NyaXB0aW9uJ10KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpc3NldCgkc3BbJ2F0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UnXVsnc2VydmljZU5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddWydzZXJ2aWNlTmFtZSddID0gJ1NlcnZpY2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ZWRBdHRyaWJ1dGVEYXRhID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNwWydhdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlJ11bJ3JlcXVlc3RlZEF0dHJpYnV0ZXMnXSBhcyAkYXR0cmlidXRlKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyID0gc3ByaW50ZignICAgICAgICAgICAgPG1kOlJlcXVlc3RlZEF0dHJpYnV0ZSBOYW1lPSIlcyInLCAkYXR0cmlidXRlWyduYW1lJ10pOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ25hbWVGb3JtYXQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyIC49IHNwcmludGYoJyBOYW1lRm9ybWF0PSIlcyInLCAkYXR0cmlidXRlWyduYW1lRm9ybWF0J10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2ZyaWVuZGx5TmFtZSddKSkgewogICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0ZWRBdHRyaWJ1dGVTdHIgLj0gc3ByaW50ZignIEZyaWVuZGx5TmFtZT0iJXMiJywgJGF0dHJpYnV0ZVsnZnJpZW5kbHlOYW1lJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2lzUmVxdWlyZWQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVxdWVzdGVkQXR0cmlidXRlU3RyIC49IHNwcmludGYoJyBpc1JlcXVpcmVkPSIlcyInLCAkYXR0cmlidXRlWydpc1JlcXVpcmVkJ10gPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyID0gIiAvPiI7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhdHRyaWJ1dGVbJ2F0dHJpYnV0ZVZhbHVlJ10pICYmICFlbXB0eSgkYXR0cmlidXRlWydhdHRyaWJ1dGVWYWx1ZSddKSkgewogICAgICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyID0gJz4nOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19zdHJpbmcoJGF0dHJpYnV0ZVsnYXR0cmlidXRlVmFsdWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZVsnYXR0cmlidXRlVmFsdWUnXSA9IGFycmF5KCRhdHRyaWJ1dGVbJ2F0dHJpYnV0ZVZhbHVlJ10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXR0cmlidXRlWydhdHRyaWJ1dGVWYWx1ZSddIGFzICRhdHRyVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlcUF0dHJBdXhTdHIgLj08PDxBVFRSSUJVVEVWQUxVRQoKICAgICAgICAgICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPnskYXR0clZhbHVlfTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT4KQVRUUklCVVRFVkFMVUU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRyZXFBdHRyQXV4U3RyIC49ICJcbiAgICAgICAgICAgIDwvbWQ6UmVxdWVzdGVkQXR0cmlidXRlPiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHJlcXVlc3RlZEF0dHJpYnV0ZURhdGFbXSA9ICRyZXF1ZXN0ZWRBdHRyaWJ1dGVTdHIgLiAkcmVxQXR0ckF1eFN0cjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcXVlc3RlZEF0dHJpYnV0ZVN0ciA9IGltcGxvZGUoUEhQX0VPTCwgJHJlcXVlc3RlZEF0dHJpYnV0ZURhdGEpOwogICAgICAgICAgICAkc3RyQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSA9IDw8PE1FVEFEQVRBX1RFTVBMQVRFCgogICAgICAgIDxtZDpBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlIGluZGV4PSIxIj4KICAgICAgICAgICAgPG1kOlNlcnZpY2VOYW1lIHhtbDpsYW5nPSJlbiI+eyRzcFsnYXR0cmlidXRlQ29uc3VtaW5nU2VydmljZSddWydzZXJ2aWNlTmFtZSddfTwvbWQ6U2VydmljZU5hbWU+CnskYXR0ckNzRGVzY317JHJlcXVlc3RlZEF0dHJpYnV0ZVN0cn0KICAgICAgICA8L21kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2U+Ck1FVEFEQVRBX1RFTVBMQVRFOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpZ25vcmVWYWxpZFVudGlsKSB7CiAgICAgICAgICAgICR0aW1lU3RyID0gPDw8VElNRV9URU1QTEFURQpjYWNoZUR1cmF0aW9uPSJQVHskY2FjaGVEdXJhdGlvbn1TIgpUSU1FX1RFTVBMQVRFOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aW1lU3RyID0gPDw8VElNRV9URU1QTEFURQp2YWxpZFVudGlsPSJ7JHZhbGlkVW50aWxUaW1lfSIKICAgICAgICAgICAgICAgICAgICAgY2FjaGVEdXJhdGlvbj0iUFR7JGNhY2hlRHVyYXRpb259UyIKVElNRV9URU1QTEFURTsKICAgICAgICB9CgogICAgICAgICRzcEVudGl0eUlkID0gaHRtbHNwZWNpYWxjaGFycygkc3BbJ2VudGl0eUlkJ10sIEVOVF9RVU9URVMpOwogICAgICAgICRhY3NVcmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ3VybCddLCBFTlRfUVVPVEVTKTsKICAgICAgICAkbWV0YWRhdGEgPSA8PDxNRVRBREFUQV9URU1QTEFURQo8P3htbCB2ZXJzaW9uPSIxLjAiPz4KPG1kOkVudGl0eURlc2NyaXB0b3IgeG1sbnM6bWQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDptZXRhZGF0YSIKICAgICAgICAgICAgICAgICAgICAgeyR0aW1lU3RyfQogICAgICAgICAgICAgICAgICAgICBlbnRpdHlJRD0ieyRzcEVudGl0eUlkfSI+CiAgICA8bWQ6U1BTU09EZXNjcmlwdG9yIEF1dGhuUmVxdWVzdHNTaWduZWQ9Inskc3RyQXV0aG5zaWdufSIgV2FudEFzc2VydGlvbnNTaWduZWQ9Inskc3RyV3NpZ259IiBwcm90b2NvbFN1cHBvcnRFbnVtZXJhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj4KeyRzbHN9ICAgICAgICA8bWQ6TmFtZUlERm9ybWF0Pnskc3BbJ05hbWVJREZvcm1hdCddfTwvbWQ6TmFtZUlERm9ybWF0PgogICAgICAgIDxtZDpBc3NlcnRpb25Db25zdW1lclNlcnZpY2UgQmluZGluZz0ieyRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbj0ieyRhY3NVcmx9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9IjEiIC8+eyRzdHJBdHRyaWJ1dGVDb25zdW1pbmdTZXJ2aWNlfQogICAgPC9tZDpTUFNTT0Rlc2NyaXB0b3I+eyRzdHJPcmdhbml6YXRpb259eyRzdHJDb250YWN0c30KPC9tZDpFbnRpdHlEZXNjcmlwdG9yPgpNRVRBREFUQV9URU1QTEFURTsKICAgICAgICByZXR1cm4gJG1ldGFkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogU2lnbnMgdGhlIG1ldGFkYXRhIHdpdGggdGhlIGtleS9jZXJ0IHByb3ZpZGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0YWRhdGEgICAgICAgIFNBTUwgTWV0YWRhdGEgWE1MCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgICAgICAgeDUwOSBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNlcnQgICAgICAgICAgICB4NTA5IGNlcnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25BbGdvcml0aG0gICBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkZGlnZXN0QWxnb3JpdGhtIERpZ2VzdCBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU2lnbmVkIE1ldGFkYXRhCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduTWV0YWRhdGEoJG1ldGFkYXRhLCAka2V5LCAkY2VydCwgJHNpZ25BbGdvcml0aG0gPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NiwgJGRpZ2VzdEFsZ29yaXRobSA9IFhNTFNlY3VyaXR5RFNpZzo6U0hBMjU2KQogICAgewogICAgICAgIHJldHVybiBVdGlsczo6YWRkU2lnbigkbWV0YWRhdGEsICRrZXksICRjZXJ0LCAkc2lnbkFsZ29yaXRobSwgJGRpZ2VzdEFsZ29yaXRobSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHRoZSB4NTA5IGRlc2NyaXB0b3JzIChzaWduL2VuY3J5cHRpb24pIHRvIHRoZSBtZXRhZGF0YQogICAgICogVGhlIHNhbWUgY2VydCB3aWxsIGJlIHVzZWQgZm9yIHNpZ24vZW5jcnlwdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGFkYXRhICAgICAgIFNBTUwgTWV0YWRhdGEgWE1MCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjZXJ0ICAgICAgICAgICB4NTA5IGNlcnQKICAgICAqIEBwYXJhbSBib29sICAgJHdhbnRzRW5jcnlwdGVkIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgS2V5RGVzY3JpcHRvciBmb3IgZW5jcnlwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIE1ldGFkYXRhIHdpdGggS2V5RGVzY3JpcHRvcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZFg1MDlLZXlEZXNjcmlwdG9ycygkbWV0YWRhdGEsICRjZXJ0LCAkd2FudHNFbmNyeXB0ZWQgPSB0cnVlKQogICAgewogICAgICAgICR4bWwgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkeG1sLT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSBmYWxzZTsKICAgICAgICAkeG1sLT5mb3JtYXRPdXRwdXQgPSB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR4bWwgPSBVdGlsczo6bG9hZFhNTCgkeG1sLCAkbWV0YWRhdGEpOwogICAgICAgICAgICBpZiAoISR4bWwpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIHBhcnNpbmcgbWV0YWRhdGEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvciBwYXJzaW5nIG1ldGFkYXRhLiAnLiRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KCiAgICAgICAgJGZvcm1hdGVkQ2VydCA9IFV0aWxzOjpmb3JtYXRDZXJ0KCRjZXJ0LCBmYWxzZSk7CiAgICAgICAgJHg1MDlDZXJ0aWZpY2F0ZSA9ICR4bWwtPmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHM6Ok5TX0RTLCAnWDUwOUNlcnRpZmljYXRlJywgJGZvcm1hdGVkQ2VydCk7CgogICAgICAgICRrZXlEYXRhID0gJHhtbC0+Y3JlYXRlRWxlbWVudE5TKENvbnN0YW50czo6TlNfRFMsICdkczpYNTA5RGF0YScpOwogICAgICAgICRrZXlEYXRhLT5hcHBlbmRDaGlsZCgkeDUwOUNlcnRpZmljYXRlKTsKCiAgICAgICAgJGtleUluZm8gPSAkeG1sLT5jcmVhdGVFbGVtZW50TlMoQ29uc3RhbnRzOjpOU19EUywgJ2RzOktleUluZm8nKTsKICAgICAgICAka2V5SW5mby0+YXBwZW5kQ2hpbGQoJGtleURhdGEpOwoKICAgICAgICAka2V5RGVzY3JpcHRvciA9ICR4bWwtPmNyZWF0ZUVsZW1lbnROUyhDb25zdGFudHM6Ok5TX01ELCAibWQ6S2V5RGVzY3JpcHRvciIpOwoKICAgICAgICAkU1BTU09EZXNjcmlwdG9yID0gJHhtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ1NQU1NPRGVzY3JpcHRvcicpLT5pdGVtKDApOwogICAgICAgICRTUFNTT0Rlc2NyaXB0b3ItPmluc2VydEJlZm9yZSgka2V5RGVzY3JpcHRvci0+Y2xvbmVOb2RlKCksICRTUFNTT0Rlc2NyaXB0b3ItPmZpcnN0Q2hpbGQpOwogICAgICAgIGlmICgkd2FudHNFbmNyeXB0ZWQgPT09IHRydWUpIHsKICAgICAgICAgICAgJFNQU1NPRGVzY3JpcHRvci0+aW5zZXJ0QmVmb3JlKCRrZXlEZXNjcmlwdG9yLT5jbG9uZU5vZGUoKSwgJFNQU1NPRGVzY3JpcHRvci0+Zmlyc3RDaGlsZCk7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmluZyA9ICR4bWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdLZXlEZXNjcmlwdG9yJyktPml0ZW0oMCk7CiAgICAgICAgJHNpZ25pbmctPnNldEF0dHJpYnV0ZSgndXNlJywgJ3NpZ25pbmcnKTsKICAgICAgICAkc2lnbmluZy0+YXBwZW5kQ2hpbGQoJGtleUluZm8pOwoKICAgICAgICBpZiAoJHdhbnRzRW5jcnlwdGVkID09PSB0cnVlKSB7CiAgICAgICAgICAgICRlbmNyeXB0aW9uID0gJHhtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0tleURlc2NyaXB0b3InKS0+aXRlbSgxKTsKICAgICAgICAgICAgJGVuY3J5cHRpb24tPnNldEF0dHJpYnV0ZSgndXNlJywgJ2VuY3J5cHRpb24nKTsKCiAgICAgICAgICAgICRlbmNyeXB0aW9uLT5hcHBlbmRDaGlsZCgka2V5SW5mby0+Y2xvbmVOb2RlKHRydWUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkeG1sLT5zYXZlWE1MKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Response.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjRW5jOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRE9NTm9kZUxpc3Q7CnVzZSBET01YUGF0aDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiBTQU1MIDIgQXV0aGVudGljYXRpb24gUmVzcG9uc2UKICovCmNsYXNzIFJlc3BvbnNlCnsKICAgIC8qKgogICAgICogU2V0dGluZ3MKICAgICAqCiAgICAgKiBAdmFyIFNldHRpbmdzCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3NldHRpbmdzOwoKICAgIC8qKgogICAgICogVGhlIGRlY29kZWQsIHVucHJvY2Vzc2VkIFhNTCByZXNwb25zZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEEgRE9NRG9jdW1lbnQgY2xhc3MgbG9hZGVkIGZyb20gdGhlIFNBTUwgUmVzcG9uc2UuCiAgICAgKgogICAgICogQHZhciBET01Eb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgJGRvY3VtZW50OwoKICAgIC8qKgogICAgICogQSBET01Eb2N1bWVudCBjbGFzcyBsb2FkZWQgZnJvbSB0aGUgU0FNTCBSZXNwb25zZSAoRGVjcnlwdGVkKS4KICAgICAqCiAgICAgKiBAdmFyIERPTURvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyAkZGVjcnlwdGVkRG9jdW1lbnQ7CgogICAgLyoqCiAgICAgKiBUaGUgcmVzcG9uc2UgY29udGFpbnMgYW4gZW5jcnlwdGVkIGFzc2VydGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRlbmNyeXB0ZWQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFRoZSByZXNwb25zZSBjb250YWlucyBhbiBlbmNyeXB0ZWQgbmFtZUlkIGluIHRoZSBhc3NlcnRpb24uCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkZW5jcnlwdGVkTmFtZUlkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBBZnRlciB2YWxpZGF0aW9uLCBpZiBpdCBmYWlsIHRoaXMgdmFyIGhhcyB0aGUgY2F1c2Ugb2YgdGhlIHByb2JsZW0KICAgICAqCiAgICAgKiBAdmFyIEV4Y2VwdGlvbnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJF9lcnJvcjsKCiAgICAvKioKICAgICAqIE5vdE9uT3JBZnRlciB2YWx1ZSBvZiBhIHZhbGlkIFN1YmplY3RDb25maXJtYXRpb25EYXRhIG5vZGUKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRfdmFsaWRTQ0ROb3RPbk9yQWZ0ZXI7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBTQU1MIFJlc3BvbnNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0dGluZ3MgJHNldHRpbmdzIFNldHRpbmdzLgogICAgICogQHBhcmFtIHN0cmluZyAgICRyZXNwb25zZSBBIFVVRW5jb2RlZCBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxPbmVMb2dpblxTYW1sMlxTZXR0aW5ncyAkc2V0dGluZ3MsICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkdGhpcy0+X3NldHRpbmdzID0gJHNldHRpbmdzOwoKICAgICAgICAkYmFzZVVSTCA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldEJhc2VVUkwoKTsKICAgICAgICBpZiAoIWVtcHR5KCRiYXNlVVJMKSkgewogICAgICAgICAgICBVdGlsczo6c2V0QmFzZVVSTCgkYmFzZVVSTCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSBiYXNlNjRfZGVjb2RlKCRyZXNwb25zZSk7CgogICAgICAgICR0aGlzLT5kb2N1bWVudCA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICR0aGlzLT5kb2N1bWVudCA9IFV0aWxzOjpsb2FkWE1MKCR0aGlzLT5kb2N1bWVudCwgJHRoaXMtPnJlc3BvbnNlKTsKICAgICAgICBpZiAoISR0aGlzLT5kb2N1bWVudCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIlNBTUwgUmVzcG9uc2UgY291bGQgbm90IGJlIHByb2Nlc3NlZCIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUXVpY2sgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBFbmNyeXB0ZWRBc3NlcnRpb24KICAgICAgICAkZW5jcnlwdGVkQXNzZXJ0aW9uTm9kZXMgPSAkdGhpcy0+ZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFbmNyeXB0ZWRBc3NlcnRpb24nKTsKICAgICAgICBpZiAoJGVuY3J5cHRlZEFzc2VydGlvbk5vZGVzLT5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50ID0gY2xvbmUgJHRoaXMtPmRvY3VtZW50OwogICAgICAgICAgICAkdGhpcy0+ZW5jcnlwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50ID0gJHRoaXMtPmRlY3J5cHRBc3NlcnRpb24oJHRoaXMtPmRlY3J5cHRlZERvY3VtZW50KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBTQU1MIFJlc3BvbnNlIGlzIHZhbGlkIHVzaW5nIHRoZSBjZXJ0aWZpY2F0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJlcXVlc3RJZCBUaGUgSUQgb2YgdGhlIEF1dGhOUmVxdWVzdCBzZW50IGJ5IHRoaXMgU1AgdG8gdGhlIElkUAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBWYWxpZGF0ZSB0aGUgZG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoJHJlcXVlc3RJZCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9lcnJvciA9IG51bGw7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gQ2hlY2sgU0FNTCB2ZXJzaW9uCiAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+Z2V0QXR0cmlidXRlKCdWZXJzaW9uJykgIT0gJzIuMCcpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIFNBTUwgdmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpVTlNVUFBPUlRFRF9TQU1MX1ZFUlNJT04KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnSUQnKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBJRCBhdHRyaWJ1dGUgb24gU0FNTCBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0lECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+Y2hlY2tTdGF0dXMoKTsKCiAgICAgICAgICAgICRzaW5nbGVBc3NlcnRpb24gPSAkdGhpcy0+dmFsaWRhdGVOdW1Bc3NlcnRpb25zKCk7CiAgICAgICAgICAgIGlmICghJHNpbmdsZUFzc2VydGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiU0FNTCBSZXNwb25zZSBtdXN0IGNvbnRhaW4gMSBhc3NlcnRpb24iLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfTlVNQkVSX09GX0FTU0VSVElPTlMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpZHBEYXRhID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0SWRQRGF0YSgpOwogICAgICAgICAgICAkaWRQRW50aXR5SWQgPSAkaWRwRGF0YVsnZW50aXR5SWQnXTsKICAgICAgICAgICAgJHNwRGF0YSA9ICR0aGlzLT5fc2V0dGluZ3MtPmdldFNQRGF0YSgpOwogICAgICAgICAgICAkc3BFbnRpdHlJZCA9ICRzcERhdGFbJ2VudGl0eUlkJ107CgogICAgICAgICAgICAkc2lnbmVkRWxlbWVudHMgPSAkdGhpcy0+cHJvY2Vzc1NpZ25lZEVsZW1lbnRzKCk7CgogICAgICAgICAgICAkcmVzcG9uc2VUYWcgPSAneycuQ29uc3RhbnRzOjpOU19TQU1MUC4nfVJlc3BvbnNlJzsKICAgICAgICAgICAgJGFzc2VydGlvblRhZyA9ICd7Jy5Db25zdGFudHM6Ok5TX1NBTUwuJ31Bc3NlcnRpb24nOwoKICAgICAgICAgICAgJGhhc1NpZ25lZFJlc3BvbnNlID0gaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpOwogICAgICAgICAgICAkaGFzU2lnbmVkQXNzZXJ0aW9uID0gaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpKSB7CiAgICAgICAgICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yWG1sTXNnID0gIkludmFsaWQgU0FNTCBSZXNwb25zZS4gTm90IG1hdGNoIHRoZSBzYW1sLXNjaGVtYS1wcm90b2NvbC0yLjAueHNkIjsKICAgICAgICAgICAgICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR0aGlzLT5kb2N1bWVudCwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JYbWxNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfWE1MX0ZPUk1BVAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW5jcnlwdGVkLCBjaGVjayBhbHNvIHRoZSBkZWNyeXB0ZWQgZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmVuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCwgJ3NhbWwtc2NoZW1hLXByb3RvY29sLTIuMC54c2QnLCAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCksICR0aGlzLT5fc2V0dGluZ3MtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRyZXMgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JYbWxNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1hNTF9GT1JNQVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjdXJyZW50VVJMID0gVXRpbHM6OmdldFNlbGZSb3V0ZWRVUkxOb1F1ZXJ5KCk7CgogICAgICAgICAgICAgICAgJHJlc3BvbnNlSW5SZXNwb25zZVRvID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJblJlc3BvbnNlVG8nKSkgewogICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUluUmVzcG9uc2VUbyA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0luUmVzcG9uc2VUbycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlcXVlc3RJZCkgJiYgaXNzZXQoJHJlc3BvbnNlSW5SZXNwb25zZVRvKSAmJiAkc2VjdXJpdHlbJ3JlamVjdFVuc29saWNpdGVkUmVzcG9uc2VzV2l0aEluUmVzcG9uc2VUbyddKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBSZXNwb25zZSBoYXMgYW4gSW5SZXNwb25zZVRvIGF0dHJpYnV0ZTogIiAuICRyZXNwb25zZUluUmVzcG9uc2VUbyAuICIgd2hpbGUgbm8gSW5SZXNwb25zZVRvIHdhcyBleHBlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgSW5SZXNwb25zZVRvIG9mIHRoZSBSZXNwb25zZSBtYXRjaHMgdGhlIElEIG9mIHRoZSBBdXRoTlJlcXVlc3QgKHJlcXVlc3RJZCkgaWYgcHJvdmlkZWQKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcmVxdWVzdElkKSAmJiAkcmVxdWVzdElkICE9ICRyZXNwb25zZUluUmVzcG9uc2VUbykgewogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzcG9uc2VJblJlc3BvbnNlVG8gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIEluUmVzcG9uc2VUbyBhdCB0aGUgUmVzcG9uc2UsIGJ1dCBpdCB3YXMgcHJvdmlkZWQgdGhlIHJlcXVlc3RJZCByZWxhdGVkIHRvIHRoZSBBdXRoTlJlcXVlc3Qgc2VudCBieSB0aGUgU1A6ICRyZXF1ZXN0SWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JTlJFU1BPTlNFVE8KICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBJblJlc3BvbnNlVG8gb2YgdGhlIFJlc3BvbnNlOiAkcmVzcG9uc2VJblJlc3BvbnNlVG8sIGRvZXMgbm90IG1hdGNoIHRoZSBJRCBvZiB0aGUgQXV0aE5SZXF1ZXN0IHNlbnQgYnkgdGhlIFNQOiAkcmVxdWVzdElkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfSU5SRVNQT05TRVRPCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmVuY3J5cHRlZCAmJiAkc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGFzc2VydGlvbiBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IGVuY3J5cHRlZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19FTkNSWVBURURfQVNTRVJUSU9OCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGhpcy0+ZW5jcnlwdGVkTmFtZUlkID0gJHRoaXMtPmVuY3J5cHRlZE5hbWVJZCB8fCAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpTdWJqZWN0L3NhbWw6RW5jcnlwdGVkSUQveGVuYzpFbmNyeXB0ZWREYXRhJyktPmxlbmd0aCA+IDA7CiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5lbmNyeXB0ZWROYW1lSWQgJiYgJHNlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIE5hbWVJRCBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IGVuY3J5cHRlZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19FTkNSWVBURURfTkFNRUlECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBDb25kaXRpb25zIGVsZW1lbnQgZXhpc3RzCiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5jaGVja09uZUNvbmRpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gbXVzdCBpbmNsdWRlIGEgQ29uZGl0aW9ucyBlbGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0NPTkRJVElPTlMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIEFzc2VydGlvbiB0aW1lc3RhbXBzCiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGVUaW1lc3RhbXBzKCk7CgogICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgQXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZQogICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+Y2hlY2tPbmVBdXRoblN0YXRlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gbXVzdCBpbmNsdWRlIGFuIEF1dGhuU3RhdGVtZW50IGVsZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX05VTUJFUl9PRl9BVVRIU1RBVEVNRU5UUwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRW5jcnlwdGVkQXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAogICAgICAgICAgICAgICAgJGVuY3J5cHRlZEF0dHJpYnV0ZU5vZGVzID0gJHRoaXMtPl9xdWVyeUFzc2VydGlvbignL3NhbWw6QXR0cmlidXRlU3RhdGVtZW50L3NhbWw6RW5jcnlwdGVkQXR0cmlidXRlJyk7CiAgICAgICAgICAgICAgICBpZiAoJGVuY3J5cHRlZEF0dHJpYnV0ZU5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZXJlIGlzIGFuIEVuY3J5cHRlZEF0dHJpYnV0ZSBpbiB0aGUgUmVzcG9uc2UgYW5kIHRoaXMgU1Agbm90IHN1cHBvcnQgdGhlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RU5DUllQVEVEX0FUVFJJQlVURVMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgnRGVzdGluYXRpb24nKSkgewogICAgICAgICAgICAgICAgICAgICRkZXN0aW5hdGlvbiA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0Rlc3RpbmF0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRkZXN0aW5hdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gdHJpbSgkZGVzdGluYXRpb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRzZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlc3BvbnNlIGhhcyBhbiBlbXB0eSBEZXN0aW5hdGlvbiB2YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpFTVBUWV9ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkwpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMLCAkdXJsQ29tcGFyaXNvbkxlbmd0aCkgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50VVJMTm9Sb3V0ZWQgPSBVdGlsczo6Z2V0U2VsZlVSTE5vUXVlcnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmxDb21wYXJpc29uTGVuZ3RoID0gJHNlY3VyaXR5WydkZXN0aW5hdGlvblN0cmljdGx5TWF0Y2hlcyddID8gc3RybGVuKCRkZXN0aW5hdGlvbikgOiBzdHJsZW4oJGN1cnJlbnRVUkxOb1JvdXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkZGVzdGluYXRpb24sICRjdXJyZW50VVJMTm9Sb3V0ZWQsICR1cmxDb21wYXJpc29uTGVuZ3RoKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGF0ICRjdXJyZW50VVJMIGluc3RlYWQgb2YgJGRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19ERVNUSU5BVElPTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgYXVkaWVuY2UKICAgICAgICAgICAgICAgICR2YWxpZEF1ZGllbmNlcyA9ICR0aGlzLT5nZXRBdWRpZW5jZXMoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHZhbGlkQXVkaWVuY2VzKSAmJiAhaW5fYXJyYXkoJHNwRW50aXR5SWQsICR2YWxpZEF1ZGllbmNlcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsaWRBdWRpZW5jZXNTdHIgPSBpbXBsb2RlKCcsJywgJHZhbGlkQXVkaWVuY2VzKTsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBhdWRpZW5jZSBmb3IgdGhpcyBSZXNwb25zZSAoZXhwZWN0ZWQgJyIuJHNwRW50aXR5SWQuIicsIGdvdCAnIi4kdmFsaWRBdWRpZW5jZXNTdHIuIicpIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19BVURJRU5DRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGlzc3VlcnMKICAgICAgICAgICAgICAgICRpc3N1ZXJzID0gJHRoaXMtPmdldElzc3VlcnMoKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpc3N1ZXJzIGFzICRpc3N1ZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGlzc3VlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRyaW1tZWRJc3N1ZXIgPSB0cmltKCRpc3N1ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHRyaW1tZWRJc3N1ZXIpIHx8ICR0cmltbWVkSXNzdWVyICE9PSAkaWRQRW50aXR5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgaXNzdWVyIGluIHRoZSBBc3NlcnRpb24vUmVzcG9uc2UgKGV4cGVjdGVkICciLiRpZFBFbnRpdHlJZC4iJywgZ290ICciLiR0cmltbWVkSXNzdWVyLiInKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19JU1NVRVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHNlc3Npb24gRXhwaXJhdGlvbgogICAgICAgICAgICAgICAgJHNlc3Npb25FeHBpcmF0aW9uID0gJHRoaXMtPmdldFNlc3Npb25Ob3RPbk9yQWZ0ZXIoKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNlc3Npb25FeHBpcmF0aW9uKSAmJiAkc2Vzc2lvbkV4cGlyYXRpb24gKyBDb25zdGFudHM6OkFMTE9XRURfQ0xPQ0tfRFJJRlQgPD0gdGltZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBhdHRyaWJ1dGVzIGhhdmUgZXhwaXJlZCwgYmFzZWQgb24gdGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgb2YgdGhlIEF0dHJpYnV0ZVN0YXRlbWVudCBvZiB0aGlzIFJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpTRVNTSU9OX0VYUElSRUQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBTdWJqZWN0Q29uZmlybWF0aW9uLCBhdCBsZWFzdCBvbmUgU3ViamVjdENvbmZpcm1hdGlvbiBtdXN0IGJlIHZhbGlkCiAgICAgICAgICAgICAgICAkYW55U3ViamVjdENvbmZpcm1hdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHN1YmplY3RDb25maXJtYXRpb25Ob2RlcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOlN1YmplY3Qvc2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uJyk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3ViamVjdENvbmZpcm1hdGlvbk5vZGVzIGFzICRzY24pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHNjbi0+aGFzQXR0cmlidXRlKCdNZXRob2QnKSAmJiAkc2NuLT5nZXRBdHRyaWJ1dGUoJ01ldGhvZCcpICE9IENvbnN0YW50czo6Q01fQkVBUkVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2RlcyA9ICRzY24tPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTdWJqZWN0Q29uZmlybWF0aW9uRGF0YScpOwogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2Rlcy0+bGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNjbkRhdGEgPSAkc3ViamVjdENvbmZpcm1hdGlvbkRhdGFOb2Rlcy0+aXRlbSgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzY25EYXRhLT5oYXNBdHRyaWJ1dGUoJ0luUmVzcG9uc2VUbycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5SZXNwb25zZVRvID0gJHNjbkRhdGEtPmdldEF0dHJpYnV0ZSgnSW5SZXNwb25zZVRvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3BvbnNlSW5SZXNwb25zZVRvKSAmJiAkcmVzcG9uc2VJblJlc3BvbnNlVG8gIT0gJGluUmVzcG9uc2VUbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdSZWNpcGllbnQnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY2lwaWVudCA9ICRzY25EYXRhLT5nZXRBdHRyaWJ1dGUoJ1JlY2lwaWVudCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVjaXBpZW50KSAmJiBzdHJwb3MoJHJlY2lwaWVudCwgJGN1cnJlbnRVUkwpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5vYSA9IFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkc2NuRGF0YS0+Z2V0QXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5vYSArIENvbnN0YW50czo6QUxMT1dFRF9DTE9DS19EUklGVCA8PSB0aW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNjbkRhdGEtPmhhc0F0dHJpYnV0ZSgnTm90QmVmb3JlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYiA9IFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkc2NuRGF0YS0+Z2V0QXR0cmlidXRlKCdOb3RCZWZvcmUnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5iID4gdGltZSgpICsgQ29uc3RhbnRzOjpBTExPV0VEX0NMT0NLX0RSSUZUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgTm90T25PckFmdGVyIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NuRGF0YS0+aGFzQXR0cmlidXRlKCdOb3RPbk9yQWZ0ZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl92YWxpZFNDRE5vdE9uT3JBZnRlciA9ICRub2E7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGFueVN1YmplY3RDb25maXJtYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCEkYW55U3ViamVjdENvbmZpcm1hdGlvbikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJBIHZhbGlkIFN1YmplY3RDb25maXJtYXRpb24gd2FzIG5vdCBmb3VuZCBvbiB0aGlzIFJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19TVUJKRUNUQ09ORklSTUFUSU9OCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHNlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddICYmICEkaGFzU2lnbmVkQXNzZXJ0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBc3NlcnRpb24gb2YgdGhlIFJlc3BvbnNlIGlzIG5vdCBzaWduZWQgYW5kIHRoZSBTUCByZXF1aXJlcyBpdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6Tk9fU0lHTkVEX0FTU0VSVElPTgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gJiYgISRoYXNTaWduZWRSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTWVzc2FnZSBvZiB0aGUgUmVzcG9uc2UgaXMgbm90IHNpZ25lZCBhbmQgdGhlIFNQIHJlcXVpcmVzIGl0IiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19TSUdORURfTUVTU0FHRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChlbXB0eSgkc2lnbmVkRWxlbWVudHMpIHx8ICghJGhhc1NpZ25lZFJlc3BvbnNlICYmICEkaGFzU2lnbmVkQXNzZXJ0aW9uKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnTm8gU2lnbmF0dXJlIGZvdW5kLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok5PX1NJR05BVFVSRV9GT1VORAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjZXJ0ID0gJGlkcERhdGFbJ3g1MDljZXJ0J107CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnQgPSAkaWRwRGF0YVsnY2VydEZpbmdlcnByaW50J107CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnRhbGcgPSAkaWRwRGF0YVsnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJ107CgogICAgICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBudWxsOwogICAgICAgICAgICAgICAgJGV4aXN0c011bHRpWDUwOVNpZ24gPSBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddKSAmJiBpc3NldCgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pICYmICFlbXB0eSgkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzTXVsdGlYNTA5U2lnbikgewogICAgICAgICAgICAgICAgICAgICRtdWx0aUNlcnRzID0gJGlkcERhdGFbJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGZpbmQgYSBTaWduYXR1cmUgb24gdGhlIFJlc3BvbnNlLCB2YWxpZGF0ZXMgaXQgY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCiAgICAgICAgICAgICAgICBpZiAoJGhhc1NpZ25lZFJlc3BvbnNlICYmICFVdGlsczo6dmFsaWRhdGVTaWduKCR0aGlzLT5kb2N1bWVudCwgJGNlcnQsICRmaW5nZXJwcmludCwgJGZpbmdlcnByaW50YWxnLCBVdGlsczo6UkVTUE9OU0VfU0lHTkFUVVJFX1hQQVRILCAkbXVsdGlDZXJ0cykpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05BVFVSRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgZmluZCBhIFNpZ25hdHVyZSBvbiB0aGUgQXNzZXJ0aW9uIChkZWNyeXB0ZWQgYXNzZXJ0aW9uIGlmIHdhcyBlbmNyeXB0ZWQpCiAgICAgICAgICAgICAgICAkZG9jdW1lbnRUb0NoZWNrQXNzZXJ0aW9uID0gJHRoaXMtPmVuY3J5cHRlZCA/ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCA6ICR0aGlzLT5kb2N1bWVudDsKICAgICAgICAgICAgICAgIGlmICgkaGFzU2lnbmVkQXNzZXJ0aW9uICYmICFVdGlsczo6dmFsaWRhdGVTaWduKCRkb2N1bWVudFRvQ2hlY2tBc3NlcnRpb24sICRjZXJ0LCAkZmluZ2VycHJpbnQsICRmaW5nZXJwcmludGFsZywgVXRpbHM6OkFTU0VSVElPTl9TSUdOQVRVUkVfWFBBVEgsICRtdWx0aUNlcnRzKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklOVkFMSURfU0lHTkFUVVJFCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvciA9ICRlOwogICAgICAgICAgICAkZGVidWcgPSAkdGhpcy0+X3NldHRpbmdzLT5pc0RlYnVnQWN0aXZlKCk7CiAgICAgICAgICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgICAgIGVjaG8gaHRtbGVudGl0aWVzKCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBJRCBvZiB0aGUgUmVzcG9uc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCkKICAgIHsKICAgICAgICAkaWQgPSBudWxsOwogICAgICAgIGlmICgkdGhpcy0+ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudC0+aGFzQXR0cmlidXRlKCdJRCcpKSB7CiAgICAgICAgICAgICRpZCA9ICR0aGlzLT5kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBJRCBvZiB0aGUgYXNzZXJ0aW9uIGluIHRoZSBSZXNwb25zZQogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBc3NlcnRpb25JZCgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+dmFsaWRhdGVOdW1Bc3NlcnRpb25zKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiU0FNTCBSZXNwb25zZSBtdXN0IGNvbnRhaW4gMSBBc3NlcnRpb24uIiwgVmFsaWRhdGlvbkVycm9yOjpXUk9OR19OVU1CRVJfT0ZfQVNTRVJUSU9OUyk7CiAgICAgICAgfQogICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oIiIpOwogICAgICAgICRpZCA9IG51bGw7CiAgICAgICAgaWYgKCRhc3NlcnRpb25Ob2Rlcy0+bGVuZ3RoID09IDEgJiYgJGFzc2VydGlvbk5vZGVzLT5pdGVtKDApLT5oYXNBdHRyaWJ1dGUoJ0lEJykpIHsKICAgICAgICAgICAgJGlkID0gJGFzc2VydGlvbk5vZGVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ0lEJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludCB0aGUgTm90T25PckFmdGVyIHZhbHVlIG9mIHRoZSB2YWxpZCBTdWJqZWN0Q29uZmlybWF0aW9uRGF0YQogICAgICogbm9kZSBpZiBhbnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFzc2VydGlvbk5vdE9uT3JBZnRlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmFsaWRTQ0ROb3RPbk9yQWZ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIFN0YXR1cyBpcyBzdWNjZXNzCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgSWYgc3RhdHVzIGlzIG5vdCBzdWNjZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1N0YXR1cygpCiAgICB7CiAgICAgICAgJHN0YXR1cyA9IFV0aWxzOjpnZXRTdGF0dXMoJHRoaXMtPmRvY3VtZW50KTsKCiAgICAgICAgaWYgKGlzc2V0KCRzdGF0dXNbJ2NvZGUnXSkgJiYgJHN0YXR1c1snY29kZSddICE9PSBDb25zdGFudHM6OlNUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgICAgICRleHBsb2RlZENvZGUgPSBleHBsb2RlKCc6JywgJHN0YXR1c1snY29kZSddKTsKICAgICAgICAgICAgJHByaW50YWJsZUNvZGUgPSBhcnJheV9wb3AoJGV4cGxvZGVkQ29kZSk7CgogICAgICAgICAgICAkc3RhdHVzRXhjZXB0aW9uTXNnID0gJ1RoZSBzdGF0dXMgY29kZSBvZiB0aGUgUmVzcG9uc2Ugd2FzIG5vdCBTdWNjZXNzLCB3YXMgJy4kcHJpbnRhYmxlQ29kZTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkc3RhdHVzWydtc2cnXSkpIHsKICAgICAgICAgICAgICAgICRzdGF0dXNFeGNlcHRpb25Nc2cgLj0gJyAtPiAnLiRzdGF0dXNbJ21zZyddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAkc3RhdHVzRXhjZXB0aW9uTXNnLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpTVEFUVVNfQ09ERV9JU19OT1RfU1VDQ0VTUwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGF0IHRoZSBzYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbi9zYW1sOkNvbmRpdGlvbnMgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgQ29uZGl0aW9ucyBlbGVtZW50IGV4aXN0cyBhbmQgaXMgdW5pcXVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja09uZUNvbmRpdGlvbigpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCIvc2FtbDpDb25kaXRpb25zIik7CiAgICAgICAgaWYgKCRlbnRyaWVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRoYXQgdGhlIHNhbWxwOlJlc3BvbnNlL3NhbWw6QXNzZXJ0aW9uL3NhbWw6QXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgQXV0aG5TdGF0ZW1lbnQgZWxlbWVudCBleGlzdHMgYW5kIGlzIHVuaXF1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tPbmVBdXRoblN0YXRlbWVudCgpCiAgICB7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCIvc2FtbDpBdXRoblN0YXRlbWVudCIpOwogICAgICAgIGlmICgkZW50cmllcy0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGF1ZGllbmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEBhdWRpZW5jZSBUaGUgdmFsaWQgYXVkaWVuY2VzIG9mIHRoZSByZXNwb25zZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXVkaWVuY2VzKCkKICAgIHsKICAgICAgICAkYXVkaWVuY2VzID0gYXJyYXkoKTsKCiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpDb25kaXRpb25zL3NhbWw6QXVkaWVuY2VSZXN0cmljdGlvbi9zYW1sOkF1ZGllbmNlJyk7CiAgICAgICAgZm9yZWFjaCAoJGVudHJpZXMgYXMgJGVudHJ5KSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRlbnRyeS0+dGV4dENvbnRlbnQ7CiAgICAgICAgICAgIGlmIChpc3NldCgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSB0cmltKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkYXVkaWVuY2VzW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV91bmlxdWUoJGF1ZGllbmNlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBJc3N1ZXJzIChmcm9tIFJlc3BvbnNlIGFuZCBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQGlzc3VlcnMgVGhlIGlzc3VlcnMgb2YgdGhlIGFzc2VydGlvbi9yZXNwb25zZQogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJc3N1ZXJzKCkKICAgIHsKICAgICAgICAkaXNzdWVycyA9IGFycmF5KCk7CgogICAgICAgICRyZXNwb25zZUlzc3VlciA9IFV0aWxzOjpxdWVyeSgkdGhpcy0+ZG9jdW1lbnQsICcvc2FtbHA6UmVzcG9uc2Uvc2FtbDpJc3N1ZXInKTsKICAgICAgICBpZiAoJHJlc3BvbnNlSXNzdWVyLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VJc3N1ZXItPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVyc1tdID0gJHJlc3BvbnNlSXNzdWVyLT5pdGVtKDApLT50ZXh0Q29udGVudDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIklzc3VlciBvZiB0aGUgUmVzcG9uc2UgaXMgbXVsdGlwbGUuIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklTU1VFUl9NVUxUSVBMRV9JTl9SRVNQT05TRQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGFzc2VydGlvbklzc3VlciA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOklzc3VlcicpOwogICAgICAgIGlmICgkYXNzZXJ0aW9uSXNzdWVyLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAkaXNzdWVyc1tdID0gJGFzc2VydGlvbklzc3Vlci0+aXRlbSgwKS0+dGV4dENvbnRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJJc3N1ZXIgb2YgdGhlIEFzc2VydGlvbiBub3QgZm91bmQgb3IgbXVsdGlwbGUuIiwKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6SVNTVUVSX05PVF9GT1VORF9JTl9BU1NFUlRJT04KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV91bmlxdWUoJGlzc3VlcnMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIERhdGEgcHJvdmlkZWQgYnkgdGhlIFNBTUwgcmVzcG9uc2UgZnJvbSB0aGUgSWRQLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgTmFtZSBJRCBEYXRhIChWYWx1ZSwgRm9ybWF0LCBOYW1lUXVhbGlmaWVyLCBTUE5hbWVRdWFsaWZpZXIpCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZERhdGEoKQogICAgewogICAgICAgICRlbmNyeXB0ZWRJZERhdGFFbnRyaWVzID0gJHRoaXMtPl9xdWVyeUFzc2VydGlvbignL3NhbWw6U3ViamVjdC9zYW1sOkVuY3J5cHRlZElEL3hlbmM6RW5jcnlwdGVkRGF0YScpOwoKICAgICAgICBpZiAoJGVuY3J5cHRlZElkRGF0YUVudHJpZXMtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZElkRGF0YUVudHJpZXMtPml0ZW0oMCk7CgogICAgICAgICAgICAkcGVtID0gJHRoaXMtPl9zZXR0aW5ncy0+Z2V0U1BrZXkoKTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgkcGVtKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJObyBwcml2YXRlIGtleSBhdmFpbGFibGUsIGNoZWNrIHNldHRpbmdzIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWNrZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoWE1MU2VjdXJpdHlLZXk6OlJTQV8xXzUsIGFycmF5KCd0eXBlJz0+J3ByaXZhdGUnKSk7CiAgICAgICAgICAgICRzZWNrZXktPmxvYWRLZXkoJHBlbSk7CgogICAgICAgICAgICAkbmFtZUlkID0gVXRpbHM6OmRlY3J5cHRFbGVtZW50KCRlbmNyeXB0ZWREYXRhLCAkc2Vja2V5KTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpTdWJqZWN0L3NhbWw6TmFtZUlEJyk7CiAgICAgICAgICAgIGlmICgkZW50cmllcy0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgICAgICRuYW1lSWQgPSAkZW50cmllcy0+aXRlbSgwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJG5hbWVJZERhdGEgPSBhcnJheSgpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICBpZiAoIWlzc2V0KCRuYW1lSWQpKSB7CiAgICAgICAgICAgIGlmICgkc2VjdXJpdHlbJ3dhbnROYW1lSWQnXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiTmFtZUlEIG5vdCBmb3VuZCBpbiB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBSZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpOT19OQU1FSUQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMtPl9zZXR0aW5ncy0+aXNTdHJpY3QoKSAmJiAkc2VjdXJpdHlbJ3dhbnROYW1lSWQnXSAmJiBlbXB0eSgkbmFtZUlkLT5ub2RlVmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICJBbiBlbXB0eSBOYW1lSUQgdmFsdWUgZm91bmQiLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RU1QVFlfTkFNRUlECiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRuYW1lSWREYXRhWydWYWx1ZSddID0gJG5hbWVJZC0+bm9kZVZhbHVlOwoKICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ0Zvcm1hdCcsICdTUE5hbWVRdWFsaWZpZXInLCAnTmFtZVF1YWxpZmllcicpIGFzICRhdHRyKSB7CiAgICAgICAgICAgICAgICBpZiAoJG5hbWVJZC0+aGFzQXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+X3NldHRpbmdzLT5pc1N0cmljdCgpICYmICRhdHRyID09ICdTUE5hbWVRdWFsaWZpZXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcERhdGEgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUERhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHNwRW50aXR5SWQgPSAkc3BEYXRhWydlbnRpdHlJZCddOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNwRW50aXR5SWQgIT0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIFNQTmFtZVF1YWxpZmllciB2YWx1ZSBtaXNtYXRjaCB0aGUgU1AgZW50aXR5SUQgdmFsdWUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OlNQX05BTUVfUVVBTElGSUVSX05BTUVfTUlTTUFUQ0gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJG5hbWVJZERhdGFbJGF0dHJdID0gJG5hbWVJZC0+Z2V0QXR0cmlidXRlKCRhdHRyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lSWREYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgTmFtZUlEIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWUgSUQgVmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkKCkKICAgIHsKICAgICAgICAkbmFtZUlkdmFsdWUgPSBudWxsOwogICAgICAgICRuYW1lSWREYXRhID0gJHRoaXMtPmdldE5hbWVJZERhdGEoKTsKICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWREYXRhKSAmJiBpc3NldCgkbmFtZUlkRGF0YVsnVmFsdWUnXSkpIHsKICAgICAgICAgICAgJG5hbWVJZHZhbHVlID0gJG5hbWVJZERhdGFbJ1ZhbHVlJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbmFtZUlkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgRm9ybWF0IHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWUgSUQgRm9ybWF0CiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZEZvcm1hdCgpCiAgICB7CiAgICAgICAgJG5hbWVJZEZvcm1hdCA9IG51bGw7CiAgICAgICAgJG5hbWVJZERhdGEgPSAkdGhpcy0+Z2V0TmFtZUlkRGF0YSgpOwogICAgICAgIGlmICghZW1wdHkoJG5hbWVJZERhdGEpICYmIGlzc2V0KCRuYW1lSWREYXRhWydGb3JtYXQnXSkpIHsKICAgICAgICAgICAgJG5hbWVJZEZvcm1hdCA9ICRuYW1lSWREYXRhWydGb3JtYXQnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lSWRGb3JtYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBOYW1lSUQgTmFtZVF1YWxpZmllciBwcm92aWRlZCBieSB0aGUgU0FNTCByZXNwb25zZSBmcm9tIHRoZSBJZFAuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBOYW1lIElEIE5hbWVRdWFsaWZpZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZUlkTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgJG5hbWVJZE5hbWVRdWFsaWZpZXIgPSBudWxsOwogICAgICAgICRuYW1lSWREYXRhID0gJHRoaXMtPmdldE5hbWVJZERhdGEoKTsKICAgICAgICBpZiAoIWVtcHR5KCRuYW1lSWREYXRhKSAmJiBpc3NldCgkbmFtZUlkRGF0YVsnTmFtZVF1YWxpZmllciddKSkgewogICAgICAgICAgICAkbmFtZUlkTmFtZVF1YWxpZmllciA9ICRuYW1lSWREYXRhWydOYW1lUXVhbGlmaWVyJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbmFtZUlkTmFtZVF1YWxpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBTQU1MIHJlc3BvbnNlIGZyb20gdGhlIElkUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIE5hbWVJRCBTUCBOYW1lUXVhbGlmaWVyCiAgICAgKgogICAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVJZFNQTmFtZVF1YWxpZmllcigpCiAgICB7CiAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9IG51bGw7CiAgICAgICAgJG5hbWVJZERhdGEgPSAkdGhpcy0+Z2V0TmFtZUlkRGF0YSgpOwogICAgICAgIGlmICghZW1wdHkoJG5hbWVJZERhdGEpICYmIGlzc2V0KCRuYW1lSWREYXRhWydTUE5hbWVRdWFsaWZpZXInXSkpIHsKICAgICAgICAgICAgJG5hbWVJZFNQTmFtZVF1YWxpZmllciA9ICRuYW1lSWREYXRhWydTUE5hbWVRdWFsaWZpZXInXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lSWRTUE5hbWVRdWFsaWZpZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBTZXNzaW9uTm90T25PckFmdGVyIGZyb20gdGhlIEF1dGhuU3RhdGVtZW50LgogICAgICogQ291bGQgYmUgdXNlZCB0byBzZXQgdGhlIGxvY2FsIHNlc3Npb24gZXhwaXJhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIFNlc3Npb25Ob3RPbk9yQWZ0ZXIgdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbk5vdE9uT3JBZnRlcigpCiAgICB7CiAgICAgICAgJG5vdE9uT3JBZnRlciA9IG51bGw7CiAgICAgICAgJGVudHJpZXMgPSAkdGhpcy0+X3F1ZXJ5QXNzZXJ0aW9uKCcvc2FtbDpBdXRoblN0YXRlbWVudFtAU2Vzc2lvbk5vdE9uT3JBZnRlcl0nKTsKICAgICAgICBpZiAoJGVudHJpZXMtPmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAkbm90T25PckFmdGVyID0gVXRpbHM6OnBhcnNlU0FNTDJUaW1lKCRlbnRyaWVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1Nlc3Npb25Ob3RPbk9yQWZ0ZXInKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbm90T25PckFmdGVyOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgU2Vzc2lvbkluZGV4IGZyb20gdGhlIEF1dGhuU3RhdGVtZW50LgogICAgICogQ291bGQgYmUgdXNlZCB0byBiZSBzdG9yZWQgaW4gdGhlIGxvY2FsIHNlc3Npb24gaW4gb3JkZXIKICAgICAqIHRvIGJlIHVzZWQgaW4gYSBmdXR1cmUgTG9nb3V0IFJlcXVlc3QgdGhhdCB0aGUgU1AgY291bGQKICAgICAqIHNlbmQgdG8gdGhlIFNQLCB0byBzZXQgd2hhdCBzcGVjaWZpYyBzZXNzaW9uIG11c3QgYmUgZGVsZXRlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIFNlc3Npb25JbmRleCB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkluZGV4KCkKICAgIHsKICAgICAgICAkc2Vzc2lvbkluZGV4ID0gbnVsbDsKICAgICAgICAkZW50cmllcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOkF1dGhuU3RhdGVtZW50W0BTZXNzaW9uSW5kZXhdJyk7CiAgICAgICAgaWYgKCRlbnRyaWVzLT5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgJHNlc3Npb25JbmRleCA9ICRlbnRyaWVzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1Nlc3Npb25JbmRleCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHNlc3Npb25JbmRleDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIEF0dHJpYnV0ZXMgZnJvbSB0aGUgQXR0cmlidXRlU3RhdGVtZW50IGVsZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgU0FNTCBBc3NlcnRpb24KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZ2V0QXR0cmlidXRlc0J5S2V5TmFtZSgnTmFtZScpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgQXR0cmlidXRlcyBmcm9tIHRoZSBBdHRyaWJ1dGVTdGF0ZW1lbnQgZWxlbWVudCB1c2luZyB0aGVpciBGcmllbmRseU5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgU0FNTCBBc3NlcnRpb24KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlc1dpdGhGcmllbmRseU5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2dldEF0dHJpYnV0ZXNCeUtleU5hbWUoJ0ZyaWVuZGx5TmFtZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5TmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRBdHRyaWJ1dGVzQnlLZXlOYW1lKCRrZXlOYW1lID0gIk5hbWUiKQogICAgewogICAgICAgICRhdHRyaWJ1dGVzID0gYXJyYXkoKTsKICAgICAgICAkZW50cmllcyA9ICR0aGlzLT5fcXVlcnlBc3NlcnRpb24oJy9zYW1sOkF0dHJpYnV0ZVN0YXRlbWVudC9zYW1sOkF0dHJpYnV0ZScpOwoKICAgICAgICAkc2VjdXJpdHkgPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTZWN1cml0eURhdGEoKTsKICAgICAgICAkYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lID0gJHNlY3VyaXR5WydhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUnXTsKICAgICAgICAvKiogQHZhciAkZW50cnkgRE9NTm9kZSAqLwogICAgICAgIGZvcmVhY2ggKCRlbnRyaWVzIGFzICRlbnRyeSkgewogICAgICAgICAgICAkYXR0cmlidXRlS2V5Tm9kZSA9ICRlbnRyeS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCRrZXlOYW1lKTsKICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVLZXlOb2RlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYXR0cmlidXRlS2V5TmFtZSA9ICRhdHRyaWJ1dGVLZXlOb2RlLT5ub2RlVmFsdWU7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkYXR0cmlidXRlS2V5TmFtZSwgYXJyYXlfa2V5cygkYXR0cmlidXRlcyksIHRydWUpKSB7CiAgICAgICAgICAgICAgICBpZiAoISRhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgYW4gQXR0cmlidXRlIGVsZW1lbnQgd2l0aCBkdXBsaWNhdGVkICIuJGtleU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6RFVQTElDQVRFRF9BVFRSSUJVVEVfTkFNRV9GT1VORAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dHJpYnV0ZVZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRlbnRyeS0+Y2hpbGROb2RlcyBhcyAkY2hpbGROb2RlKSB7CiAgICAgICAgICAgICAgICAkdGFnTmFtZSA9ICgkY2hpbGROb2RlLT5wcmVmaXggPyAkY2hpbGROb2RlLT5wcmVmaXguJzonIDogJycpIC4gJ0F0dHJpYnV0ZVZhbHVlJzsKICAgICAgICAgICAgICAgIGlmICgkY2hpbGROb2RlLT5ub2RlVHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFICYmICRjaGlsZE5vZGUtPnRhZ05hbWUgPT09ICR0YWdOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgJGF0dHJpYnV0ZVZhbHVlc1tdID0gJGNoaWxkTm9kZS0+bm9kZVZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGF0dHJpYnV0ZUtleU5hbWUsIGFycmF5X2tleXMoJGF0dHJpYnV0ZXMpLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJGF0dHJpYnV0ZXNbJGF0dHJpYnV0ZUtleU5hbWVdID0gYXJyYXlfbWVyZ2UoJGF0dHJpYnV0ZXNbJGF0dHJpYnV0ZUtleU5hbWVdLCAkYXR0cmlidXRlVmFsdWVzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRhdHRyaWJ1dGVzWyRhdHRyaWJ1dGVLZXlOYW1lXSA9ICRhdHRyaWJ1dGVWYWx1ZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRhdHRyaWJ1dGVzOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZpZXMgdGhhdCB0aGUgZG9jdW1lbnQgb25seSBjb250YWlucyBhIHNpbmdsZSBBc3NlcnRpb24gKGVuY3J5cHRlZCBvciBub3QpLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIGlmIHRoZSBkb2N1bWVudCBwYXNzZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZU51bUFzc2VydGlvbnMoKQogICAgewogICAgICAgICRlbmNyeXB0ZWRBc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0VuY3J5cHRlZEFzc2VydGlvbicpOwogICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0Fzc2VydGlvbicpOwoKICAgICAgICAkdmFsaWQgPSAkYXNzZXJ0aW9uTm9kZXMtPmxlbmd0aCArICRlbmNyeXB0ZWRBc3NlcnRpb25Ob2Rlcy0+bGVuZ3RoID09IDE7CgogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRhc3NlcnRpb25Ob2RlcyA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0Fzc2VydGlvbicpOwogICAgICAgICAgICAkdmFsaWQgPSAkdmFsaWQgJiYgJGFzc2VydGlvbk5vZGVzLT5sZW5ndGggPT0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGUgc2lnbmF0dXJlIG5vZGVzOgogICAgICogICAtIENoZWNrcyB0aGF0IGFyZSBSZXNwb25zZSBvciBBc3NlcnRpb24KICAgICAqICAgLSBDaGVjayB0aGF0IElEcyBhbmQgcmVmZXJlbmNlIFVSSSBhcmUgdW5pcXVlIGFuZCBjb25zaXN0ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgU2lnbmVkIGVsZW1lbnQgdGFncwogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzU2lnbmVkRWxlbWVudHMoKQogICAgewogICAgICAgICRzaWduZWRFbGVtZW50cyA9IGFycmF5KCk7CiAgICAgICAgJHZlcmlmaWVkU2VpcyA9IGFycmF5KCk7CiAgICAgICAgJHZlcmlmaWVkSWRzID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5lbmNyeXB0ZWQpIHsKICAgICAgICAgICAgJHNpZ25Ob2RlcyA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ1NpZ25hdHVyZScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduTm9kZXMgPSAkdGhpcy0+ZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTaWduYXR1cmUnKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHNpZ25Ob2RlcyBhcyAkc2lnbk5vZGUpIHsKICAgICAgICAgICAgJHJlc3BvbnNlVGFnID0gJ3snLkNvbnN0YW50czo6TlNfU0FNTFAuJ31SZXNwb25zZSc7CiAgICAgICAgICAgICRhc3NlcnRpb25UYWcgPSAneycuQ29uc3RhbnRzOjpOU19TQU1MLid9QXNzZXJ0aW9uJzsKCiAgICAgICAgICAgICRzaWduZWRFbGVtZW50ID0gJ3snLiRzaWduTm9kZS0+cGFyZW50Tm9kZS0+bmFtZXNwYWNlVVJJLid9Jy4kc2lnbk5vZGUtPnBhcmVudE5vZGUtPmxvY2FsTmFtZTsKCiAgICAgICAgICAgIGlmICgkc2lnbmVkRWxlbWVudCAhPSAkcmVzcG9uc2VUYWcgJiYgJHNpZ25lZEVsZW1lbnQgIT0gJGFzc2VydGlvblRhZykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBTaWduYXR1cmUgRWxlbWVudCAkc2lnbmVkRWxlbWVudCBTQU1MIFJlc3BvbnNlIHJlamVjdGVkIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX1NJR05FRF9FTEVNRU5UCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDaGVjayB0aGF0IHJlZmVyZW5jZSBVUkkgbWF0Y2hlcyB0aGUgcGFyZW50IElEIGFuZCBubyBkdXBsaWNhdGUgUmVmZXJlbmNlcyBvciBJRHMKICAgICAgICAgICAgJGlkVmFsdWUgPSAkc2lnbk5vZGUtPnBhcmVudE5vZGUtPmdldEF0dHJpYnV0ZSgnSUQnKTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRpZFZhbHVlKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnU2lnbmVkIEVsZW1lbnQgbXVzdCBjb250YWluIGFuIElELiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OklEX05PVF9GT1VORF9JTl9TSUdORURfRUxFTUVOVAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGluX2FycmF5KCRpZFZhbHVlLCAkdmVyaWZpZWRJZHMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICdEdXBsaWNhdGVkIElELiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OkRVUExJQ0FURURfSURfSU5fU0lHTkVEX0VMRU1FTlRTCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR2ZXJpZmllZElkc1tdID0gJGlkVmFsdWU7CgogICAgICAgICAgICAkcmVmID0gJHNpZ25Ob2RlLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnUmVmZXJlbmNlJyk7CiAgICAgICAgICAgIGlmICgkcmVmLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgICAgJHJlZiA9ICRyZWYtPml0ZW0oMCk7CiAgICAgICAgICAgICAgICAkc2VpID0gJHJlZi0+Z2V0QXR0cmlidXRlKCdVUkknKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNlaSkpIHsKICAgICAgICAgICAgICAgICAgICAkc2VpID0gc3Vic3RyKCRzZWksIDEpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHNlaSAhPSAkaWRWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIGFuIGludmFsaWQgU2lnbmVkIEVsZW1lbnQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05FRF9FTEVNRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHNlaSwgJHZlcmlmaWVkU2VpcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEdXBsaWNhdGVkIFJlZmVyZW5jZSBVUkkuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpEVVBMSUNBVEVEX1JFRkVSRU5DRV9JTl9TSUdORURfRUxFTUVOVFMKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHZlcmlmaWVkU2Vpc1tdID0gJHNlaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgbnVtYmVyIG9mIFJlZmVyZW5jZSBub2RlcyBmb3VuZCBmb3Igc2lnbmF0dXJlLiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkLicsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpVTkVYUEVDVEVEX1JFRkVSRU5DRQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2lnbmVkRWxlbWVudHNbXSA9ICRzaWduZWRFbGVtZW50OwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgU2lnbmVkRWxlbWVudHMKICAgICAgICBpZiAoIWVtcHR5KCRzaWduZWRFbGVtZW50cykgJiYgISR0aGlzLT52YWxpZGF0ZVNpZ25lZEVsZW1lbnRzKCRzaWduZWRFbGVtZW50cykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICdGb3VuZCBhbiB1bmV4cGVjdGVkIFNpZ25hdHVyZSBFbGVtZW50LiBTQU1MIFJlc3BvbnNlIHJlamVjdGVkJywKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6VU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVFMKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzaWduZWRFbGVtZW50czsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlIGRvY3VtZW50IGlzIHN0aWxsIHZhbGlkIGFjY29yZGluZyBDb25kaXRpb25zIEVsZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVRpbWVzdGFtcHMoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRkb2N1bWVudCA9ICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZG9jdW1lbnQgPSAkdGhpcy0+ZG9jdW1lbnQ7CiAgICAgICAgfQoKICAgICAgICAkdGltZXN0YW1wTm9kZXMgPSAkZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdDb25kaXRpb25zJyk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHRpbWVzdGFtcE5vZGVzLT5sZW5ndGg7ICRpKyspIHsKICAgICAgICAgICAgJG5iQXR0cmlidXRlID0gJHRpbWVzdGFtcE5vZGVzLT5pdGVtKCRpKS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCJOb3RCZWZvcmUiKTsKICAgICAgICAgICAgJG5hQXR0cmlidXRlID0gJHRpbWVzdGFtcE5vZGVzLT5pdGVtKCRpKS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCJOb3RPbk9yQWZ0ZXIiKTsKICAgICAgICAgICAgaWYgKCRuYkF0dHJpYnV0ZSAmJiBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJG5iQXR0cmlidXRlLT50ZXh0Q29udGVudCkgPiB0aW1lKCkgKyBDb25zdGFudHM6OkFMTE9XRURfQ0xPQ0tfRFJJRlQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IG5vdCB5ZXQgdmFsaWQuIENoZWNrIHN5c3RlbSBjbG9jay4nLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6QVNTRVJUSU9OX1RPT19FQVJMWQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJG5hQXR0cmlidXRlICYmIFV0aWxzOjpwYXJzZVNBTUwyVGltZSgkbmFBdHRyaWJ1dGUtPnRleHRDb250ZW50KSArIENvbnN0YW50czo6QUxMT1dFRF9DTE9DS19EUklGVCA8PSB0aW1lKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCB2YWxpZGF0ZSB0aW1lc3RhbXA6IGV4cGlyZWQuIENoZWNrIHN5c3RlbSBjbG9jay4nLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6QVNTRVJUSU9OX0VYUElSRUQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBkb2N1bWVudCBoYXMgdGhlIGV4cGVjdGVkIHNpZ25lZCBub2Rlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNpZ25lZEVsZW1lbnRzIFNpZ25lZCBlbGVtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVNpZ25lZEVsZW1lbnRzKCRzaWduZWRFbGVtZW50cykKICAgIHsKICAgICAgICBpZiAoY291bnQoJHNpZ25lZEVsZW1lbnRzKSA+IDIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlVGFnID0gJ3snLkNvbnN0YW50czo6TlNfU0FNTFAuJ31SZXNwb25zZSc7CiAgICAgICAgJGFzc2VydGlvblRhZyA9ICd7Jy5Db25zdGFudHM6Ok5TX1NBTUwuJ31Bc3NlcnRpb24nOwoKICAgICAgICAkb2NjdXJyZW5jZSA9IGFycmF5X2NvdW50X3ZhbHVlcygkc2lnbmVkRWxlbWVudHMpOwogICAgICAgIGlmICgoaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpICYmICRvY2N1cnJlbmNlWyRyZXNwb25zZVRhZ10gPiAxKQogICAgICAgICAgICB8fCAoaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKSAmJiAkb2NjdXJyZW5jZVskYXNzZXJ0aW9uVGFnXSA+IDEpCiAgICAgICAgICAgIHx8ICFpbl9hcnJheSgkcmVzcG9uc2VUYWcsICRzaWduZWRFbGVtZW50cykgJiYgIWluX2FycmF5KCRhc3NlcnRpb25UYWcsICRzaWduZWRFbGVtZW50cykKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2lnbmVkIGVsZW1lbnRzIGZvdW5kIGhlcmUsIGFyZSB0aGUgb25lcyB0aGF0IHdpbGwgYmUgdmVyaWZpZWQKICAgICAgICAvLyBieSBVdGlscy0+dmFsaWRhdGVTaWduKCkKICAgICAgICBpZiAoaW5fYXJyYXkoJHJlc3BvbnNlVGFnLCAkc2lnbmVkRWxlbWVudHMpKSB7CiAgICAgICAgICAgICRleHBlY3RlZFNpZ25hdHVyZU5vZGVzID0gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kb2N1bWVudCwgVXRpbHM6OlJFU1BPTlNFX1NJR05BVFVSRV9YUEFUSCk7CiAgICAgICAgICAgIGlmICgkZXhwZWN0ZWRTaWduYXR1cmVOb2Rlcy0+bGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIFJlc3BvbnNlIHNpZ25hdHVyZXMgZm91bmQuIFNBTUwgUmVzcG9uc2UgcmVqZWN0ZWQuIiwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OldST05HX05VTUJFUl9PRl9TSUdOQVRVUkVTX0lOX1JFU1BPTlNFCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaW5fYXJyYXkoJGFzc2VydGlvblRhZywgJHNpZ25lZEVsZW1lbnRzKSkgewogICAgICAgICAgICAkZXhwZWN0ZWRTaWduYXR1cmVOb2RlcyA9ICR0aGlzLT5fcXVlcnkoVXRpbHM6OkFTU0VSVElPTl9TSUdOQVRVUkVfWFBBVEgpOwogICAgICAgICAgICBpZiAoJGV4cGVjdGVkU2lnbmF0dXJlTm9kZXMtPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIG51bWJlciBvZiBBc3NlcnRpb24gc2lnbmF0dXJlcyBmb3VuZC4gU0FNTCBSZXNwb25zZSByZWplY3RlZC4iLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6V1JPTkdfTlVNQkVSX09GX1NJR05BVFVSRVNfSU5fQVNTRVJUSU9OCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgbm9kZSBmcm9tIHRoZSBET01Eb2N1bWVudCAoQXNzZXJ0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NlcnRpb25YcGF0aCBYcGF0aCBFeHByZXNzaW9uCiAgICAgKgogICAgICogQHJldHVybiBET01Ob2RlTGlzdCBUaGUgcXVlcmllZCBub2RlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcXVlcnlBc3NlcnRpb24oJGFzc2VydGlvblhwYXRoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkdGhpcy0+ZGVjcnlwdGVkRG9jdW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkdGhpcy0+ZG9jdW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2FtbHAnLCBDb25zdGFudHM6Ok5TX1NBTUxQKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzYW1sJywgQ29uc3RhbnRzOjpOU19TQU1MKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdkcycsIENvbnN0YW50czo6TlNfRFMpOwogICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3hlbmMnLCBDb25zdGFudHM6Ok5TX1hFTkMpOwoKICAgICAgICAkYXNzZXJ0aW9uTm9kZSA9ICcvc2FtbHA6UmVzcG9uc2Uvc2FtbDpBc3NlcnRpb24nOwogICAgICAgICRzaWduYXR1cmVRdWVyeSA9ICRhc3NlcnRpb25Ob2RlIC4gJy9kczpTaWduYXR1cmUvZHM6U2lnbmVkSW5mby9kczpSZWZlcmVuY2UnOwogICAgICAgICRhc3NlcnRpb25SZWZlcmVuY2VOb2RlID0gJHhwYXRoLT5xdWVyeSgkc2lnbmF0dXJlUXVlcnkpLT5pdGVtKDApOwogICAgICAgIGlmICghJGFzc2VydGlvblJlZmVyZW5jZU5vZGUpIHsKICAgICAgICAgICAgLy8gaXMgdGhlIHJlc3BvbnNlIHNpZ25lZCBhcyBhIHdob2xlPwogICAgICAgICAgICAkc2lnbmF0dXJlUXVlcnkgPSAnL3NhbWxwOlJlc3BvbnNlL2RzOlNpZ25hdHVyZS9kczpTaWduZWRJbmZvL2RzOlJlZmVyZW5jZSc7CiAgICAgICAgICAgICRyZXNwb25zZVJlZmVyZW5jZU5vZGUgPSAkeHBhdGgtPnF1ZXJ5KCRzaWduYXR1cmVRdWVyeSktPml0ZW0oMCk7CiAgICAgICAgICAgIGlmICgkcmVzcG9uc2VSZWZlcmVuY2VOb2RlKSB7CiAgICAgICAgICAgICAgICAkdXJpID0gJHJlc3BvbnNlUmVmZXJlbmNlTm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdVUkknKS0+bm9kZVZhbHVlOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHJlc3BvbnNlUmVmZXJlbmNlTm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdJRCcpLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRpZCA9IHN1YnN0cigkcmVzcG9uc2VSZWZlcmVuY2VOb2RlLT5hdHRyaWJ1dGVzLT5nZXROYW1lZEl0ZW0oJ1VSSScpLT5ub2RlVmFsdWUsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5hbWVRdWVyeSA9ICIvc2FtbHA6UmVzcG9uc2VbQElEPSckaWQnXS9zYW1sOkFzc2VydGlvbiIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbmFtZVF1ZXJ5ID0gIi9zYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbiIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdXJpID0gJGFzc2VydGlvblJlZmVyZW5jZU5vZGUtPmF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbSgnVVJJJyktPm5vZGVWYWx1ZTsKICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAkaWQgPSAkYXNzZXJ0aW9uUmVmZXJlbmNlTm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+cGFyZW50Tm9kZS0+YXR0cmlidXRlcy0+Z2V0TmFtZWRJdGVtKCdJRCcpLT5ub2RlVmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaWQgPSBzdWJzdHIoJGFzc2VydGlvblJlZmVyZW5jZU5vZGUtPmF0dHJpYnV0ZXMtPmdldE5hbWVkSXRlbSgnVVJJJyktPm5vZGVWYWx1ZSwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5hbWVRdWVyeSA9ICRhc3NlcnRpb25Ob2RlLiJbQElEPSckaWQnXSIgLiAkYXNzZXJ0aW9uWHBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHhwYXRoLT5xdWVyeSgkbmFtZVF1ZXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIG5vZGVzIHRoYXQgbWF0Y2ggdGhlIHF1ZXJ5IGZyb20gdGhlIERPTURvY3VtZW50IChSZXNwb25zZSBNZXNzYWdlKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFhwYXRoIEV4cHJlc3Npb24KICAgICAqCiAgICAgKiBAcmV0dXJuIERPTU5vZGVMaXN0IFRoZSBxdWVyaWVkIG5vZGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3F1ZXJ5KCRxdWVyeSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuY3J5cHRlZCkgewogICAgICAgICAgICByZXR1cm4gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudCwgJHF1ZXJ5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gVXRpbHM6OnF1ZXJ5KCR0aGlzLT5kb2N1bWVudCwgJHF1ZXJ5KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0cyB0aGUgQXNzZXJ0aW9uIChET01Eb2N1bWVudCkKICAgICAqCiAgICAgKiBAcGFyYW0gXERvbU5vZGUgJGRvbSBEb21Eb2N1bWVudAogICAgICoKICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnQgRGVjcnlwdGVkIEFzc2VydGlvbgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZGVjcnlwdEFzc2VydGlvbihcRG9tTm9kZSAkZG9tKQogICAgewogICAgICAgICRwZW0gPSAkdGhpcy0+X3NldHRpbmdzLT5nZXRTUGtleSgpOwoKICAgICAgICBpZiAoZW1wdHkoJHBlbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgIk5vIHByaXZhdGUga2V5IGF2YWlsYWJsZSwgY2hlY2sgc2V0dGluZ3MiLAogICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX05PVF9GT1VORAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkZW5jRGF0YSA9ICRvYmplbmMtPmxvY2F0ZUVuY3J5cHRlZERhdGEoJGRvbSk7CiAgICAgICAgaWYgKCEkZW5jRGF0YSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIkNhbm5vdCBsb2NhdGUgZW5jcnlwdGVkIGFzc2VydGlvbiIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfRU5DUllQVEVEX0VMRU1FTlQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRvYmplbmMtPnNldE5vZGUoJGVuY0RhdGEpOwogICAgICAgICRvYmplbmMtPnR5cGUgPSAkZW5jRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CiAgICAgICAgaWYgKCEkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJVbmtub3duIGFsZ29yaXRobSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBudWxsOwogICAgICAgIGlmICgkb2JqS2V5SW5mbyA9ICRvYmplbmMtPmxvY2F0ZUtleUluZm8oJG9iaktleSkpIHsKICAgICAgICAgICAgaWYgKCRvYmpLZXlJbmZvLT5pc0VuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgJG9iamVuY0tleSA9ICRvYmpLZXlJbmZvLT5lbmNyeXB0ZWRDdHg7CiAgICAgICAgICAgICAgICAkb2JqS2V5SW5mby0+bG9hZEtleSgkcGVtLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgJGtleSA9ICRvYmplbmNLZXktPmRlY3J5cHRLZXkoJG9iaktleUluZm8pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gc3ltbWV0cmljIGVuY3J5cHRpb24ga2V5IHN1cHBvcnQKICAgICAgICAgICAgICAgICRvYmpLZXlJbmZvLT5sb2FkS2V5KCRwZW0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkb2JqS2V5LT5rZXkpKSB7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSk7CiAgICAgICAgfQoKICAgICAgICAkZGVjcnlwdGVkWE1MID0gJG9iamVuYy0+ZGVjcnlwdE5vZGUoJG9iaktleSwgZmFsc2UpOwogICAgICAgICRkZWNyeXB0ZWQgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkY2hlY2sgPSBVdGlsczo6bG9hZFhNTCgkZGVjcnlwdGVkLCAkZGVjcnlwdGVkWE1MKTsKICAgICAgICBpZiAoJGNoZWNrID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFcnJvcjogc3RyaW5nIGZyb20gZGVjcnlwdGVkIGFzc2VydGlvbiBjb3VsZCBub3QgYmUgbG9hZGVkIGludG8gYSBYTUwgZG9jdW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIC8vIGNoZWNrIGlmIHRoZSBkZWNyeXB0ZWQgYXNzZXJ0aW9uIGNvbnRhaW5zIGFuIGVuY3J5cHRlZElECiAgICAgICAgJGVuY3J5cHRlZElEID0gJGRlY3J5cHRlZC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ0VuY3J5cHRlZElEJyktPml0ZW0oMCk7CgogICAgICAgIGlmICgkZW5jcnlwdGVkSUQpIHsKICAgICAgICAgICAgLy8gZGVjcnlwdCB0aGUgZW5jcnlwdGVkSUQKICAgICAgICAgICAgJHRoaXMtPmVuY3J5cHRlZE5hbWVJZCA9IHRydWU7CiAgICAgICAgICAgICRlbmNyeXB0ZWREYXRhID0gJGVuY3J5cHRlZElELT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnRW5jcnlwdGVkRGF0YScpLT5pdGVtKDApOwogICAgICAgICAgICAkbmFtZUlkID0gJHRoaXMtPmRlY3J5cHROYW1lSWQoJGVuY3J5cHRlZERhdGEsICRwZW0pOwogICAgICAgICAgICBVdGlsczo6dHJlZUNvcHlSZXBsYWNlKCRlbmNyeXB0ZWRJRCwgJG5hbWVJZCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGVuY0RhdGEtPnBhcmVudE5vZGUgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICByZXR1cm4gJGRlY3J5cHRlZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGVjcnlwdGVkID0gJGRlY3J5cHRlZC0+ZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgICAkZW5jcnlwdGVkQXNzZXJ0aW9uID0gJGVuY0RhdGEtPnBhcmVudE5vZGU7CiAgICAgICAgICAgICRjb250YWluZXIgPSAkZW5jcnlwdGVkQXNzZXJ0aW9uLT5wYXJlbnROb2RlOwoKICAgICAgICAgICAgLy8gRml4IHBvc3NpYmxlIGlzc3VlIHdpdGggc2FtbCBuYW1lc3BhY2UKICAgICAgICAgICAgaWYgKCEkZGVjcnlwdGVkLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnM6c2FtbCcpCiAgICAgICAgICAgICAgICAmJiAhJGRlY3J5cHRlZC0+aGFzQXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJywgJ3htbG5zOnNhbWwyJykKICAgICAgICAgICAgICAgICYmICEkZGVjcnlwdGVkLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnMnKQogICAgICAgICAgICAgICAgJiYgISRjb250YWluZXItPmhhc0F0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLycsICd4bWxuczpzYW1sJykKICAgICAgICAgICAgICAgICYmICEkY29udGFpbmVyLT5oYXNBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAneG1sbnM6c2FtbDInKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGVuY3J5cHRlZEFzc2VydGlvbi0+dGFnTmFtZSwgJ3NhbWwyOicpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRucyA9ICd4bWxuczpzYW1sMic7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygkZW5jcnlwdGVkQXNzZXJ0aW9uLT50YWdOYW1lLCAnc2FtbDonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkbnMgPSAneG1sbnM6c2FtbCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRucyA9ICd4bWxucyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGVjcnlwdGVkLT5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLCAkbnMsIENvbnN0YW50czo6TlNfU0FNTCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFV0aWxzOjp0cmVlQ29weVJlcGxhY2UoJGVuY3J5cHRlZEFzc2VydGlvbiwgJGRlY3J5cHRlZCk7CgogICAgICAgICAgICAvLyBSZWJ1aWxkIHRoZSBET00gd2lsbCBmaXggaXNzdWVzIHdpdGggbmFtZXNwYWNlcyBhcyB3ZWxsCiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgcmV0dXJuIFV0aWxzOjpsb2FkWE1MKCRkb20sICRjb250YWluZXItPm93bmVyRG9jdW1lbnQtPnNhdmVYTUwoKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBFbmNyeXB0ZWRJRCBlbGVtZW50CiAgICAgKgogICAgICogQHBhcmFtIFxET01FbGVtZW50ICRlbmNyeXB0ZWREYXRhIFRoZSBlbmNyeXB0ZWQgZGF0YS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICRrZXkgICAgICAgICAgICBUaGUgcHJpdmF0ZSBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIFxET01FbGVtZW50ICBUaGUgZGVjcnlwdGVkIGVsZW1lbnQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjcnlwdE5hbWVJZChcRE9NRWxlbWVudCAkZW5jcnlwdGVkRGF0YSwgc3RyaW5nICRwZW0pCiAgICB7CiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkZW5jRGF0YSA9ICRvYmplbmMtPmxvY2F0ZUVuY3J5cHRlZERhdGEoJGVuY3J5cHRlZERhdGEpOwogICAgICAgICRvYmplbmMtPnNldE5vZGUoJGVuY0RhdGEpOwogICAgICAgICRvYmplbmMtPnR5cGUgPSAkZW5jRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CiAgICAgICAgaWYgKCEkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJVbmtub3duIGFsZ29yaXRobSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBudWxsOwogICAgICAgIGlmICgkb2JqS2V5SW5mbyA9ICRvYmplbmMtPmxvY2F0ZUtleUluZm8oJG9iaktleSkpIHsKICAgICAgICAgICAgaWYgKCRvYmpLZXlJbmZvLT5pc0VuY3J5cHRlZCkgewogICAgICAgICAgICAgICAgJG9iamVuY0tleSA9ICRvYmpLZXlJbmZvLT5lbmNyeXB0ZWRDdHg7CiAgICAgICAgICAgICAgICAkb2JqS2V5SW5mby0+bG9hZEtleSgkcGVtLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgJGtleSA9ICRvYmplbmNLZXktPmRlY3J5cHRLZXkoJG9iaktleUluZm8pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gc3ltbWV0cmljIGVuY3J5cHRpb24ga2V5IHN1cHBvcnQKICAgICAgICAgICAgICAgICRvYmpLZXlJbmZvLT5sb2FkS2V5KCRwZW0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkb2JqS2V5LT5rZXkpKSB7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGtleSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gVXRpbHM6OmRlY3J5cHRFbGVtZW50KCRlbmNyeXB0ZWREYXRhLCAkb2JqS2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFmdGVyIGV4ZWN1dGUgYSB2YWxpZGF0aW9uIHByb2Nlc3MsIGlmIGZhaWxzIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNhdXNlCiAgICAgKgogICAgICogQHJldHVybiBFeGNlcHRpb258bnVsbCBDYXVzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JFeGNlcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQWZ0ZXIgZXhlY3V0ZSBhIHZhbGlkYXRpb24gcHJvY2VzcywgaWYgZmFpbHMgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2F1c2UKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZXNjYXBlIEFwcGx5IG9yIG5vdCBodG1sZW50aXRpZXMgdG8gdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZyBFcnJvciByZWFzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCRlc2NhcGUgPSB0cnVlKQogICAgewogICAgICAgICRlcnJvck1zZyA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fZXJyb3IpKSB7CiAgICAgICAgICAgIGlmICgkZXNjYXBlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNc2cgPSBodG1sZW50aXRpZXMoJHRoaXMtPl9lcnJvci0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJvck1zZyA9ICR0aGlzLT5fZXJyb3ItPmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yTXNnOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgU0FNTCBSZXNwb25zZSBkb2N1bWVudCAoSWYgY29udGFpbnMgYW4gZW5jcnlwdGVkIGFzc2VydGlvbiwgZGVjcnlwdHMgaXQpCiAgICAgKgogICAgICogQHJldHVybiBEb21Eb2N1bWVudCBTQU1MIFJlc3BvbnNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYTUxEb2N1bWVudCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5lbmNyeXB0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kZWNyeXB0ZWREb2N1bWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvY3VtZW50OwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-assertion-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgeG1sbnM6eGVuYz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJ4bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ieGVuYy1zY2hlbWEueHNkIi8+CiAgICA8YW5ub3RhdGlvbj4KICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc2FtbC1zY2hlbWEtYXNzZXJ0aW9uLTIuMAogICAgICAgICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICAgICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgICAgICBWMS4wIChOb3ZlbWJlciwgMjAwMik6CiAgICAgICAgICAgICAgSW5pdGlhbCBTdGFuZGFyZCBTY2hlbWEuCiAgICAgICAgICAgIFYxLjEgKFNlcHRlbWJlciwgMjAwMyk6CiAgICAgICAgICAgICAgVXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgVjEuMCBuYW1lc3BhY2UuCiAgICAgICAgICAgIFYyLjAgKE1hcmNoLCAyMDA1KToKICAgICAgICAgICAgICBOZXcgYXNzZXJ0aW9uIHNjaGVtYSBmb3IgU0FNTCBWMi4wIG5hbWVzcGFjZS4KICAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CiAgICA8YXR0cmlidXRlR3JvdXAgbmFtZT0iSUROYW1lUXVhbGlmaWVycyI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lUXVhbGlmaWVyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNQTmFtZVF1YWxpZmllciIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2F0dHJpYnV0ZUdyb3VwPgogICAgPGVsZW1lbnQgbmFtZT0iQmFzZUlEIiB0eXBlPSJzYW1sOkJhc2VJREFic3RyYWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJhc2VJREFic3RyYWN0VHlwZSIgYWJzdHJhY3Q9InRydWUiPgogICAgICAgIDxhdHRyaWJ1dGVHcm91cCByZWY9InNhbWw6SUROYW1lUXVhbGlmaWVycyIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik5hbWVJRCIgdHlwZT0ic2FtbDpOYW1lSURUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlEVHlwZSI+CiAgICAgICAgPHNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGVHcm91cCByZWY9InNhbWw6SUROYW1lUXVhbGlmaWVycyIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJTUFByb3ZpZGVkSUQiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVuY3J5cHRlZEVsZW1lbnRUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ieGVuYzpFbmNyeXB0ZWREYXRhIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ieGVuYzpFbmNyeXB0ZWRLZXkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZElEIiB0eXBlPSJzYW1sOkVuY3J5cHRlZEVsZW1lbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJJc3N1ZXIiIHR5cGU9InNhbWw6TmFtZUlEVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uSURSZWYiIHR5cGU9Ik5DTmFtZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uVVJJUmVmIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IkFzc2VydGlvbiIgdHlwZT0ic2FtbDpBc3NlcnRpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXNzZXJ0aW9uVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6SXNzdWVyIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3QiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6Q29uZGl0aW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBZHZpY2UiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN0YXRlbWVudCIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuU3RhdGVtZW50Ii8+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aHpEZWNpc2lvblN0YXRlbWVudCIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZVN0YXRlbWVudCIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iVmVyc2lvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Iklzc3VlSW5zdGFudCIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0icmVxdWlyZWQiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTdWJqZWN0IiB0eXBlPSJzYW1sOlN1YmplY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3ViamVjdFR5cGUiPgogICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkJhc2VJRCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpOYW1lSUQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkSUQiLz4KICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3ViamVjdENvbmZpcm1hdGlvbiIgdHlwZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlN1YmplY3RDb25maXJtYXRpb25UeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpCYXNlSUQiLz4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpOYW1lSUQiLz4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWV0aG9kIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSIgdHlwZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiIG1peGVkPSJ0cnVlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNhbnkiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOb3RCZWZvcmUiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdE9uT3JBZnRlciIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUmVjaXBpZW50IiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSW5SZXNwb25zZVRvIiB0eXBlPSJOQ05hbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWRkcmVzcyIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJLZXlJbmZvQ29uZmlybWF0aW9uRGF0YVR5cGUiIG1peGVkPSJmYWxzZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uRGF0YVR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJDb25kaXRpb25zIiB0eXBlPSJzYW1sOkNvbmRpdGlvbnNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9uc1R5cGUiPgogICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpDb25kaXRpb24iLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24iLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOk9uZVRpbWVVc2UiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOlByb3h5UmVzdHJpY3Rpb24iLz4KICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdEJlZm9yZSIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5vdE9uT3JBZnRlciIgdHlwZT0iZGF0ZVRpbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJDb25kaXRpb24iIHR5cGU9InNhbWw6Q29uZGl0aW9uQWJzdHJhY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9uQWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXVkaWVuY2VSZXN0cmljdGlvbiIgdHlwZT0ic2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1ZGllbmNlUmVzdHJpY3Rpb25UeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpDb25kaXRpb25BYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBdWRpZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXVkaWVuY2UiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iT25lVGltZVVzZSIgdHlwZT0ic2FtbDpPbmVUaW1lVXNlVHlwZSIgLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJPbmVUaW1lVXNlVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWw6Q29uZGl0aW9uQWJzdHJhY3RUeXBlIi8+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJQcm94eVJlc3RyaWN0aW9uIiB0eXBlPSJzYW1sOlByb3h5UmVzdHJpY3Rpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUHJveHlSZXN0cmljdGlvblR5cGUiPgogICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpDb25kaXRpb25BYnN0cmFjdFR5cGUiPgogICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXVkaWVuY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJDb3VudCIgdHlwZT0ibm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPC9leHRlbnNpb24+Cgk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFkdmljZSIgdHlwZT0ic2FtbDpBZHZpY2VUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQWR2aWNlVHlwZSI+CiAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvbklEUmVmIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBc3NlcnRpb25VUklSZWYiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvbiIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkQXNzZXJ0aW9uIi8+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgICAgIDwvY2hvaWNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZEFzc2VydGlvbiIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdGVtZW50IiB0eXBlPSJzYW1sOlN0YXRlbWVudEFic3RyYWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlN0YXRlbWVudEFic3RyYWN0VHlwZSIgYWJzdHJhY3Q9InRydWUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuU3RhdGVtZW50IiB0eXBlPSJzYW1sOkF1dGhuU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1dGhuU3RhdGVtZW50VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWw6U3RhdGVtZW50QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6U3ViamVjdExvY2FsaXR5IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJBdXRobkluc3RhbnQiIHR5cGU9ImRhdGVUaW1lIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25Ob3RPbk9yQWZ0ZXIiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3ViamVjdExvY2FsaXR5IiB0eXBlPSJzYW1sOlN1YmplY3RMb2NhbGl0eVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdWJqZWN0TG9jYWxpdHlUeXBlIj4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkFkZHJlc3MiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRE5TTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5Db250ZXh0IiB0eXBlPSJzYW1sOkF1dGhuQ29udGV4dFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdXRobkNvbnRleHRUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dERlY2wiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aGVudGljYXRpbmdBdXRob3JpdHkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuQ29udGV4dENsYXNzUmVmIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuQ29udGV4dERlY2xSZWYiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5Db250ZXh0RGVjbCIgdHlwZT0iYW55VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpbmdBdXRob3JpdHkiIHR5cGU9ImFueVVSSSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aHpEZWNpc2lvblN0YXRlbWVudCIgdHlwZT0ic2FtbDpBdXRoekRlY2lzaW9uU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1dGh6RGVjaXNpb25TdGF0ZW1lbnRUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbDpTdGF0ZW1lbnRBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBY3Rpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkV2aWRlbmNlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlJlc291cmNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRGVjaXNpb24iIHR5cGU9InNhbWw6RGVjaXNpb25UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iRGVjaXNpb25UeXBlIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQZXJtaXQiLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJEZW55Ii8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZXRlcm1pbmF0ZSIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBY3Rpb24iIHR5cGU9InNhbWw6QWN0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFjdGlvblR5cGUiPgogICAgICAgIDxzaW1wbGVDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5hbWVzcGFjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvc2ltcGxlQ29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJFdmlkZW5jZSIgdHlwZT0ic2FtbDpFdmlkZW5jZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFdmlkZW5jZVR5cGUiPgogICAgICAgIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uSURSZWYiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkFzc2VydGlvblVSSVJlZiIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRBc3NlcnRpb24iLz4KICAgICAgICA8L2Nob2ljZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVTdGF0ZW1lbnQiIHR5cGU9InNhbWw6QXR0cmlidXRlU3RhdGVtZW50VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVN0YXRlbWVudFR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1sOlN0YXRlbWVudEFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZEF0dHJpYnV0ZSIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXR0cmlidXRlIiB0eXBlPSJzYW1sOkF0dHJpYnV0ZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdHRyaWJ1dGVUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpBdHRyaWJ1dGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik5hbWVGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRnJpZW5kbHlOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0iYW55VHlwZSIgbmlsbGFibGU9InRydWUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkVuY3J5cHRlZEF0dHJpYnV0ZSIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgo8L3NjaGVtYT4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-authn-context-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYyIKICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYyIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIyLjAiPgoKICA8eHM6YW5ub3RhdGlvbj4KICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1hdXRobi1jb250ZXh0LTIuMAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgIFYyLjAgKE1hcmNoLCAyMDA1KToKICAgICAgICAgIE5ldyBjb3JlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgc2NoZW1hIGZvciBTQU1MIFYyLjAuIAogICAgICAgICAgVGhpcyBpcyBqdXN0IGFuIGluY2x1ZGUgb2YgYWxsIHR5cGVzIGZyb20gdGhlIHNjaGVtYQogICAgICAgICAgcmVmZXJyZWQgdG8gaW4gdGhlIGluY2x1ZGUgc3RhdGVtZW50IGJlbG93LgogICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KCiAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLWF1dGhuLWNvbnRleHQtdHlwZXMtMi4wLnhzZCIvPgoKPC94czpzY2hlbWE+]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-authn-context-types-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYQogIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKICB2ZXJzaW9uPSIyLjAiPgoKICA8eHM6YW5ub3RhdGlvbj4KICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1hdXRobi1jb250ZXh0LXR5cGVzLTIuMAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC92Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICAgICAgVjIuMCAoTWFyY2gsIDIwMDUpOgogICAgICAgICAgTmV3IGNvcmUgYXV0aGVudGljYXRpb24gY29udGV4dCBzY2hlbWEgdHlwZXMgZm9yIFNBTUwgVjIuMC4KICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICA8L3hzOmFubm90YXRpb24+CgogIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uQ29udGV4dERlY2xhcmF0aW9uIiB0eXBlPSJBdXRobkNvbnRleHREZWNsYXJhdGlvbkJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBBIHBhcnRpY3VsYXIgYXNzZXJ0aW9uIG9uIGFuIGlkZW50aXR5CiAgICAgICAgcHJvdmlkZXIncyBwYXJ0IHdpdGggcmVzcGVjdCB0byB0aGUgYXV0aGVudGljYXRpb24KICAgICAgICBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCBhbiBhdXRoZW50aWNhdGlvbiBhc3NlcnRpb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IklkZW50aWZpY2F0aW9uIiB0eXBlPSJJZGVudGlmaWNhdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFJlZmVycyB0byB0aG9zZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBkZXNjcmliZSB0aGUKICAgICAgICBwcm9jZXNzZXMgYW5kIG1lY2hhbmlzbXMKICAgICAgICB0aGUgQXV0aGVudGljYXRpb24gQXV0aG9yaXR5IHVzZXMgdG8gaW5pdGlhbGx5IGNyZWF0ZQogICAgICAgIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gYSBQcmluY2lwYWwKICAgICAgICBhbmQgdGhlIGlkZW50aXR5IChvciBuYW1lKSBieSB3aGljaCB0aGUgUHJpbmNpcGFsIHdpbGwKICAgICAgICBiZSBrbm93bgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJQaHlzaWNhbFZlcmlmaWNhdGlvbiI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IGlkZW50aWZpY2F0aW9uIGhhcyBiZWVuCiAgICAgICAgcGVyZm9ybWVkIGluIGEgcGh5c2ljYWwKICAgICAgICBmYWNlLXRvLWZhY2UgbWVldGluZyB3aXRoIHRoZSBwcmluY2lwYWwgYW5kIG5vdCBpbiBhbgogICAgICAgIG9ubGluZSBtYW5uZXIuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjcmVkZW50aWFsTGV2ZWwiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByaW1hcnkiLz4KICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWNvbmRhcnkiLz4KICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0dGVuQ29uc2VudCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGVjaG5pY2FsUHJvdGVjdGlvbiIgdHlwZT0iVGVjaG5pY2FsUHJvdGVjdGlvbkJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBSZWZlcnMgdG8gdGhvc2UgY2hhcmFjdGVyaXN0aWNzIHRoYXQgZGVzY3JpYmUgaG93IHRoZQogICAgICAgICdzZWNyZXQnICh0aGUga25vd2xlZGdlIG9yIHBvc3Nlc3Npb24KICAgICAgICBvZiB3aGljaCBhbGxvd3MgdGhlIFByaW5jaXBhbCB0byBhdXRoZW50aWNhdGUgdG8gdGhlCiAgICAgICAgQXV0aGVudGljYXRpb24gQXV0aG9yaXR5KSBpcyBrZXB0IHNlY3VyZQogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJTZWNyZXRLZXlQcm90ZWN0aW9uIiB0eXBlPSJTZWNyZXRLZXlQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGUgdHlwZXMgYW5kIHN0cmVuZ3RocyBvZgogICAgICAgIGZhY2lsaXRpZXMKICAgICAgICBvZiBhIFVBIHVzZWQgdG8gcHJvdGVjdCBhIHNoYXJlZCBzZWNyZXQga2V5IGZyb20KICAgICAgICB1bmF1dGhvcml6ZWQgYWNjZXNzIGFuZC9vciB1c2UuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlByaXZhdGVLZXlQcm90ZWN0aW9uIiB0eXBlPSJQcml2YXRlS2V5UHJvdGVjdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhlIHR5cGVzIGFuZCBzdHJlbmd0aHMgb2YKICAgICAgICBmYWNpbGl0aWVzCiAgICAgICAgb2YgYSBVQSB1c2VkIHRvIHByb3RlY3QgYSBwcml2YXRlIGtleSBmcm9tCiAgICAgICAgdW5hdXRob3JpemVkIGFjY2VzcyBhbmQvb3IgdXNlLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlBY3RpdmF0aW9uIiB0eXBlPSJLZXlBY3RpdmF0aW9uVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhlIGFjdGlvbnMgdGhhdCBtdXN0IGJlIHBlcmZvcm1lZAogICAgICAgIGJlZm9yZSB0aGUgcHJpdmF0ZSBrZXkgY2FuIGJlIHVzZWQuIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IktleVNoYXJpbmciIHR5cGU9IktleVNoYXJpbmdUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5XaGV0aGVyIG9yIG5vdCB0aGUgcHJpdmF0ZSBrZXkgaXMgc2hhcmVkCiAgICAgICAgd2l0aCB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5LjwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IktleVN0b3JhZ2UiIHR5cGU9IktleVN0b3JhZ2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBJbiB3aGljaCBtZWRpdW0gaXMgdGhlIGtleSBzdG9yZWQuCiAgICAgICAgbWVtb3J5IC0gdGhlIGtleSBpcyBzdG9yZWQgaW4gbWVtb3J5LgogICAgICAgIHNtYXJ0Y2FyZCAtIHRoZSBrZXkgaXMgc3RvcmVkIGluIGEgc21hcnRjYXJkLgogICAgICAgIHRva2VuIC0gdGhlIGtleSBpcyBzdG9yZWQgaW4gYSBoYXJkd2FyZSB0b2tlbi4KICAgICAgICBNb2JpbGVEZXZpY2UgLSB0aGUga2V5IGlzIHN0b3JlZCBpbiBhIG1vYmlsZSBkZXZpY2UuCiAgICAgICAgTW9iaWxlQXV0aENhcmQgLSB0aGUga2V5IGlzIHN0b3JlZCBpbiBhIG1vYmlsZQogICAgICAgIGF1dGhlbnRpY2F0aW9uIGNhcmQuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmliZXJMaW5lTnVtYmVyIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgogIDx4czplbGVtZW50IG5hbWU9IlVzZXJTdWZmaXgiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CgogIDx4czplbGVtZW50IG5hbWU9IlBhc3N3b3JkIiB0eXBlPSJQYXNzd29yZFR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIHBhc3N3b3JkIChvciBwYXNzcGhyYXNlKQogICAgICAgIGhhcyBiZWVuIHVzZWQgdG8KICAgICAgICBhdXRoZW50aWNhdGUgdGhlIFByaW5jaXBhbCB0byBhIHJlbW90ZSBzeXN0ZW0uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25QaW4iIHR5cGU9IkFjdGl2YXRpb25QaW5UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgYSBQaW4gKFBlcnNvbmFsCiAgICAgICAgSWRlbnRpZmljYXRpb24gTnVtYmVyKSBoYXMgYmVlbiB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgUHJpbmNpcGFsIHRvCiAgICAgICAgc29tZSBsb2NhbCBzeXN0ZW0gaW4gb3JkZXIgdG8gYWN0aXZhdGUgYSBrZXkuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlRva2VuIiB0eXBlPSJUb2tlblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlCiAgICAgICAgdG9rZW4gaXMgdXNlZAogICAgICAgIGFzIGEgbWV0aG9kIG9mIGlkZW50aWZ5aW5nIHRoZSBQcmluY2lwYWwuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlRpbWVTeW5jVG9rZW4iIHR5cGU9IlRpbWVTeW5jVG9rZW5UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgYSB0aW1lIHN5bmNocm9uaXphdGlvbgogICAgICAgIHRva2VuIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFByaW5jaXBhbC4gaGFyZHdhcmUgLQogICAgICAgIHRoZSB0aW1lIHN5bmNob25pemF0aW9uCiAgICAgICAgdG9rZW4gaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuIHNvZnR3YXJlIC0gdGhlCiAgICAgICAgdGltZSBzeW5jaHJvbml6YXRpb24KICAgICAgICB0b2tlbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZS4gU2VlZExlbmd0aCAtCiAgICAgICAgdGhlIGxlbmd0aCwgaW4gYml0cywgb2YgdGhlCiAgICAgICAgcmFuZG9tIHNlZWQgdXNlZCBpbiB0aGUgdGltZSBzeW5jaHJvbml6YXRpb24gdG9rZW4uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNtYXJ0Y2FyZCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCBhIHNtYXJ0Y2FyZCBpcyB1c2VkIHRvCiAgICAgICAgaWRlbnRpdHkgdGhlIFByaW5jaXBhbC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGVuZ3RoIiB0eXBlPSJMZW5ndGhUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoZSBtaW5pbXVtIGFuZC9vciBtYXhpbXVtCiAgICAgICAgQVNDSUkgbGVuZ3RoIG9mIHRoZSBwYXNzd29yZCB3aGljaCBpcyBlbmZvcmNlZCAoYnkgdGhlIFVBIG9yIHRoZQogICAgICAgIElkUCkuIEluIG90aGVyIHdvcmRzLCB0aGlzIGlzIHRoZSBtaW5pbXVtIGFuZC9vciBtYXhpbXVtIG51bWJlciBvZgogICAgICAgIEFTQ0lJIGNoYXJhY3RlcnMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IGEgdmFsaWQgcGFzc3dvcmQuCiAgICAgICAgbWluIC0gdGhlIG1pbmltdW0gbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMgcmVxdWlyZWQKICAgICAgICBpbiBhIHZhbGlkIHBhc3N3b3JkLCBhcyBlbmZvcmNlZCBieSB0aGUgVUEgb3IgdGhlIElkUC4KICAgICAgICBtYXggLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycyByZXF1aXJlZAogICAgICAgIGluIGEgdmFsaWQgcGFzc3dvcmQsIGFzIGVuZm9yY2VkIGJ5IHRoZSBVQSBvciB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0aW9uTGltaXQiIHR5cGU9IkFjdGl2YXRpb25MaW1pdFR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aW1lIGZvciB3aGljaCBhbgogICAgICAgIFBJTi1iYXNlZCBhdXRoZW50aWNhdGlvbiBpcyB2YWxpZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJhdGlvbiI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhc3N3b3JkIHdhcyBjaG9zZW4gYnkgdGhlCiAgICAgICAgUHJpbmNpcGFsIG9yIGF1dG8tc3VwcGxpZWQgYnkgdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgICBwcmluY2lwYWxjaG9zZW4gLSB0aGUgUHJpbmNpcGFsIGlzIGFsbG93ZWQgdG8gY2hvb3NlCiAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBwYXNzd29yZC4gVGhpcyBpcyB0cnVlIGV2ZW4gaWYKICAgICAgICB0aGUgaW5pdGlhbCBwYXNzd29yZCBpcyBjaG9zZW4gYXQgcmFuZG9tIGJ5IHRoZSBVQSBvcgogICAgICAgIHRoZSBJZFAgYW5kIHRoZSBQcmluY2lwYWwgaXMgdGhlbiBmcmVlIHRvIGNoYW5nZQogICAgICAgIHRoZSBwYXNzd29yZC4KICAgICAgICBhdXRvbWF0aWMgLSB0aGUgcGFzc3dvcmQgaXMgY2hvc2VuIGJ5IHRoZSBVQSBvciB0aGUKICAgICAgICBJZFAgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIGluIHNvbWUgc2Vuc2UsCiAgICAgICAgb3IgdG8gc2F0aXNmeSBjZXJ0YWluIHBhc3N3b3JkIHJ1bGVzLCBhbmQgdGhhdCB0aGUKICAgICAgICBQcmluY2lwYWwgaXMgbm90IGZyZWUgdG8gY2hhbmdlIGl0IG9yIHRvIGNob29zZSBhIG5ldyBwYXNzd29yZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgoKICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZWNoYW5pc20iIHVzZT0icmVxdWlyZWQiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByaW5jaXBhbGNob3NlbiIvPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImF1dG9tYXRpYyIvPgogICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICAgIDwveHM6YXR0cmlidXRlPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkF1dGhuTWV0aG9kIiB0eXBlPSJBdXRobk1ldGhvZEJhc2VUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBSZWZlcnMgdG8gdGhvc2UgY2hhcmFjdGVyaXN0aWNzIHRoYXQgZGVmaW5lIHRoZQogICAgICAgIG1lY2hhbmlzbXMgYnkgd2hpY2ggdGhlIFByaW5jaXBhbCBhdXRoZW50aWNhdGVzIHRvIHRoZSBBdXRoZW50aWNhdGlvbgogICAgICAgIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJpbmNpcGFsQXV0aGVudGljYXRpb25NZWNoYW5pc20iIHR5cGU9IlByaW5jaXBhbEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhlIG1ldGhvZCB0aGF0IGEgUHJpbmNpcGFsIGVtcGxveXMgdG8gcGVyZm9ybQogICAgICAgIGF1dGhlbnRpY2F0aW9uIHRvIGxvY2FsIHN5c3RlbSBjb21wb25lbnRzLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdG9yIiB0eXBlPSJBdXRoZW50aWNhdG9yQmFzZVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoZSBtZXRob2QgYXBwbGllZCB0byB2YWxpZGF0ZSBhIHByaW5jaXBhbCdzCiAgICAgICAgYXV0aGVudGljYXRpb24gYWNyb3NzIGEgbmV0d29yawogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJDb21wbGV4QXV0aGVudGljYXRvciIgdHlwZT0iQ29tcGxleEF1dGhlbnRpY2F0b3JUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBTdXBwb3J0cyBBdXRoZW50aWNhdG9ycyB3aXRoIG5lc3RlZCBjb21iaW5hdGlvbnMgb2YKICAgICAgICBhZGRpdGlvbmFsIGNvbXBsZXhpdHkuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlByZXZpb3VzU2Vzc2lvbiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBQcmluY2lwYWwgaGFzIGJlZW4gc3Ryb25nbHkKICAgICAgICBhdXRoZW50aWNhdGVkIGluIGEgcHJldmlvdXMgc2Vzc2lvbiBkdXJpbmcgd2hpY2ggdGhlIElkUCBoYXMgc2V0IGEKICAgICAgICBjb29raWUgaW4gdGhlIFVBLiBEdXJpbmcgdGhlIHByZXNlbnQgc2Vzc2lvbiB0aGUgUHJpbmNpcGFsIGhhcyBvbmx5CiAgICAgICAgYmVlbiBhdXRoZW50aWNhdGVkIGJ5IHRoZSBVQSByZXR1cm5pbmcgdGhlIGNvb2tpZSB0byB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bWVTZXNzaW9uIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgUmF0aGVyIGxpa2UgUHJldmlvdXNTZXNzaW9uIGJ1dCB1c2luZyBzdHJvbmdlcgogICAgICAgIHNlY3VyaXR5LiBBIHNlY3JldCB0aGF0IHdhcyBlc3RhYmxpc2hlZCBpbiBhIHByZXZpb3VzIHNlc3Npb24gd2l0aAogICAgICAgIHRoZSBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgaGFzIGJlZW4gY2FjaGVkIGJ5IHRoZSBsb2NhbCBzeXN0ZW0gYW5kCiAgICAgICAgaXMgbm93IHJlLXVzZWQgKGUuZy4gYSBNYXN0ZXIgU2VjcmV0IGlzIHVzZWQgdG8gZGVyaXZlIG5ldyBzZXNzaW9uCiAgICAgICAga2V5cyBpbiBUTFMsIFNTTCwgV1RMUykuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9Ilplcm9Lbm93bGVkZ2UiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIFByaW5jaXBhbCBoYXMgYmVlbgogICAgICAgIGF1dGhlbnRpY2F0ZWQgYnkgYSB6ZXJvIGtub3dsZWRnZSB0ZWNobmlxdWUgYXMgc3BlY2lmaWVkIGluIElTTy9JRUMKICAgICAgICA5Nzk4LTUuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlIiB0eXBlPSJTaGFyZWRTZWNyZXRDaGFsbGVuZ2VSZXNwb25zZVR5cGUiLz4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBQcmluY2lwYWwgaGFzIGJlZW4KICAgICAgICBhdXRoZW50aWNhdGVkIGJ5IGEgY2hhbGxlbmdlLXJlc3BvbnNlIHByb3RvY29sIHV0aWxpemluZyBzaGFyZWQgc2VjcmV0CiAgICAgICAga2V5cyBhbmQgc3ltbWV0cmljIGNyeXB0b2dyYXBoeS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWV0aG9kIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJEaWdTaWciIHR5cGU9IlB1YmxpY0tleVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgUHJpbmNpcGFsIGhhcyBiZWVuCiAgICAgICAgYXV0aGVudGljYXRlZCBieSBhIG1lY2hhbmlzbSB3aGljaCBpbnZvbHZlcyB0aGUgUHJpbmNpcGFsIGNvbXB1dGluZyBhCiAgICAgICAgZGlnaXRhbCBzaWduYXR1cmUgb3ZlciBhdCBsZWFzdCBjaGFsbGVuZ2UgZGF0YSBwcm92aWRlZCBieSB0aGUgSWRQLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBc3ltbWV0cmljRGVjcnlwdGlvbiIgdHlwZT0iUHVibGljS2V5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhlIGxvY2FsIHN5c3RlbSBoYXMgYSBwcml2YXRlIGtleSBidXQgaXQgaXMgdXNlZAogICAgICAgIGluIGRlY3J5cHRpb24gbW9kZSwgcmF0aGVyIHRoYW4gc2lnbmF0dXJlIG1vZGUuIEZvciBleGFtcGxlLCB0aGUKICAgICAgICBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgZ2VuZXJhdGVzIGEgc2VjcmV0IGFuZCBlbmNyeXB0cyBpdCB1c2luZyB0aGUKICAgICAgICBsb2NhbCBzeXN0ZW0ncyBwdWJsaWMga2V5OiB0aGUgbG9jYWwgc3lzdGVtIHRoZW4gcHJvdmVzIGl0IGhhcwogICAgICAgIGRlY3J5cHRlZCB0aGUgc2VjcmV0LgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJBc3ltbWV0cmljS2V5QWdyZWVtZW50IiB0eXBlPSJQdWJsaWNLZXlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgbG9jYWwgc3lzdGVtIGhhcyBhIHByaXZhdGUga2V5IGFuZCB1c2VzIGl0IGZvcgogICAgICAgIHNoYXJlZCBzZWNyZXQga2V5IGFncmVlbWVudCB3aXRoIHRoZSBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgKGUuZy4KICAgICAgICB2aWEgRGlmZmllIEhlbG1hbikuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNLZXlUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImtleVZhbGlkYXRpb24iIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJJUEFkZHJlc3MiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIFByaW5jaXBhbCBoYXMgYmVlbgogICAgICAgIGF1dGhlbnRpY2F0ZWQgdGhyb3VnaCBjb25uZWN0aW9uIGZyb20gYSBwYXJ0aWN1bGFyIElQIGFkZHJlc3MuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlNoYXJlZFNlY3JldER5bmFtaWNQbGFpbnRleHQiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgbG9jYWwgc3lzdGVtIGFuZCBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkKICAgICAgICBzaGFyZSBhIHNlY3JldCBrZXkuIFRoZSBsb2NhbCBzeXN0ZW0gdXNlcyB0aGlzIHRvIGVuY3J5cHQgYQogICAgICAgIHJhbmRvbWlzZWQgc3RyaW5nIHRvIHBhc3MgdG8gdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRvclRyYW5zcG9ydFByb3RvY29sIiB0eXBlPSJBdXRoZW50aWNhdG9yVHJhbnNwb3J0UHJvdG9jb2xUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGUgcHJvdG9jb2wgYWNyb3NzIHdoaWNoIEF1dGhlbnRpY2F0b3IgaW5mb3JtYXRpb24gaXMKICAgICAgICB0cmFuc2ZlcnJlZCB0byBhbiBBdXRoZW50aWNhdGlvbiBBdXRob3JpdHkgdmVyaWZpZXIuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkhUVFAiIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEF1dGhlbnRpY2F0b3IgaGFzIGJlZW4KICAgICAgICB0cmFuc21pdHRlZCB1c2luZyBiYXJlIEhUVFAgdXRpbGl6aW5nIG5vIGFkZGl0aW9uYWwgc2VjdXJpdHkKICAgICAgICBwcm90b2NvbHMuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IklQU2VjIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBBdXRoZW50aWNhdG9yIGhhcyBiZWVuCiAgICAgICAgdHJhbnNtaXR0ZWQgdXNpbmcgYSB0cmFuc3BvcnQgbWVjaGFuaXNtIHByb3RlY3RlZCBieSBhbiBJUFNFQyBzZXNzaW9uLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJXVExTIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgVGhpcyBlbGVtZW50IGluZGljYXRlcyB0aGF0IHRoZSBBdXRoZW50aWNhdG9yIGhhcyBiZWVuCiAgICAgICAgdHJhbnNtaXR0ZWQgdXNpbmcgYSB0cmFuc3BvcnQgbWVjaGFuaXNtIHByb3RlY3RlZCBieSBhIFdUTFMgc2Vzc2lvbi4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9iaWxlTmV0d29ya05vRW5jcnlwdGlvbiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgQXV0aGVudGljYXRvciBoYXMgYmVlbgogICAgICAgIHRyYW5zbWl0dGVkIHNvbGVseSBhY3Jvc3MgYSBtb2JpbGUgbmV0d29yayB1c2luZyBubyBhZGRpdGlvbmFsCiAgICAgICAgc2VjdXJpdHkgbWVjaGFuaXNtLgogICAgICA8L3hzOmRvY3VtZW50YXRpb24+CiAgICA8L3hzOmFubm90YXRpb24+CiAgPC94czplbGVtZW50PgoKICA8eHM6ZWxlbWVudCBuYW1lPSJNb2JpbGVOZXR3b3JrUmFkaW9FbmNyeXB0aW9uIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgogIDx4czplbGVtZW50IG5hbWU9Ik1vYmlsZU5ldHdvcmtFbmRUb0VuZEVuY3J5cHRpb24iIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CgogIDx4czplbGVtZW50IG5hbWU9IlNTTCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgQXV0aGVudGljYXRvciBoYXMgYmVlbgogICAgICAgIHRyYW5zbWl0dGVkIHVzaW5nIGEgdHJhbnNwb3J0IG1lY2hhbmlzbSBwcm90ZWN0ZWQgYnkgYW4gU1NMIG9yIFRMUwogICAgICAgIHNlc3Npb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IlBTVE4iIHR5cGU9IkV4dGVuc2lvbk9ubHlUeXBlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iSVNETiIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJBRFNMIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25hbFByb3RlY3Rpb24iIHR5cGU9Ik9wZXJhdGlvbmFsUHJvdGVjdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFJlZmVycyB0byB0aG9zZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBkZXNjcmliZQogICAgICAgIHByb2NlZHVyYWwgc2VjdXJpdHkgY29udHJvbHMgZW1wbG95ZWQgYnkgdGhlIEF1dGhlbnRpY2F0aW9uIEF1dGhvcml0eS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlBdWRpdCIgdHlwZT0iU2VjdXJpdHlBdWRpdFR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJTd2l0Y2hBdWRpdCIgdHlwZT0iRXh0ZW5zaW9uT25seVR5cGUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFjdGl2YXRpb25DYWxsQ2VudGVyIiB0eXBlPSJFeHRlbnNpb25Pbmx5VHlwZSIvPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzIiB0eXBlPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzVHlwZSI+CiAgICA8eHM6YW5ub3RhdGlvbj4KICAgICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICAgICAgUHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgdG8gZXh0ZXJuYWwgKGxpa2VseQogICAgICAgIGh1bWFuIHJlYWRhYmxlKSBkb2N1bWVudHMgaW4gd2hpY2ggYWRkaXRpb25hbCBidXNpbmVzcyBhZ3JlZW1lbnRzLAogICAgICAgIChlLmcuIGxpYWJpbGl0eSBjb25zdHJhaW50cywgb2JsaWdhdGlvbnMsIGV0YykgY2FuIGJlIHBsYWNlZC4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iR292ZXJuaW5nQWdyZWVtZW50UmVmIiB0eXBlPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWZUeXBlIi8+CgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Im55bVR5cGUiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFub255bWl0eSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InZlcmlueW1pdHkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwc2V1ZG9ueW1pdHkiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5Db250ZXh0RGVjbGFyYXRpb25CYXNlVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iSWRlbnRpZmljYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlRlY2huaWNhbFByb3RlY3Rpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Ik9wZXJhdGlvbmFsUHJvdGVjdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aG5NZXRob2QiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkdvdmVybmluZ0FncmVlbWVudHMiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9InhzOklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IklkZW50aWZpY2F0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUGh5c2ljYWxWZXJpZmljYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IldyaXR0ZW5Db25zZW50IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHb3Zlcm5pbmdBZ3JlZW1lbnRzIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im55bSIgdHlwZT0ibnltVHlwZSI+CiAgICAgIDx4czphbm5vdGF0aW9uPgogICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZQogICAgICAgICAgSWRlbnRpZmljYXRpb24gbWVjaGFuaXNtcyBhbGxvdyB0aGUgYWN0aW9ucyBvZiB0aGUgUHJpbmNpcGFsIHRvIGJlCiAgICAgICAgICBsaW5rZWQgdG8gYW4gYWN0dWFsIGVuZCB1c2VyLgogICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgPC94czphbm5vdGF0aW9uPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRlY2huaWNhbFByb3RlY3Rpb25CYXNlVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlByaXZhdGVLZXlQcm90ZWN0aW9uIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTZWNyZXRLZXlQcm90ZWN0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3BlcmF0aW9uYWxQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2VjdXJpdHlBdWRpdCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRGVhY3RpdmF0aW9uQ2FsbENlbnRlciIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBdXRobk1ldGhvZEJhc2VUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQcmluY2lwYWxBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aGVudGljYXRvciIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXV0aGVudGljYXRvclRyYW5zcG9ydFByb3RvY29sIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdvdmVybmluZ0FncmVlbWVudHNUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHb3Zlcm5pbmdBZ3JlZW1lbnRSZWZUeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ292ZXJuaW5nQWdyZWVtZW50UmVmIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHJpbmNpcGFsQXV0aGVudGljYXRpb25NZWNoYW5pc21UeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUb2tlbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU21hcnRjYXJkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBY3RpdmF0aW9uUGluIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InByZWF1dGgiIHR5cGU9InhzOmludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Z3JvdXAgbmFtZT0iQXV0aGVudGljYXRvckNob2ljZUdyb3VwIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUHJldmlvdXNTZXNzaW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdW1lU2Vzc2lvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkRpZ1NpZyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlBhc3N3b3JkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iWmVyb0tub3dsZWRnZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlNoYXJlZFNlY3JldENoYWxsZW5nZVJlc3BvbnNlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2hhcmVkU2VjcmV0RHluYW1pY1BsYWludGV4dCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IklQQWRkcmVzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFzeW1tZXRyaWNEZWNyeXB0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXN5bW1ldHJpY0tleUFncmVlbWVudCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlN1YnNjcmliZXJMaW5lTnVtYmVyIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iVXNlclN1ZmZpeCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkNvbXBsZXhBdXRoZW50aWNhdG9yIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgoKICA8eHM6Z3JvdXAgbmFtZT0iQXV0aGVudGljYXRvclNlcXVlbmNlR3JvdXAiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlByZXZpb3VzU2Vzc2lvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdW1lU2Vzc2lvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRGlnU2lnIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iUmVzdHJpY3RlZFBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJaZXJvS25vd2xlZGdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTaGFyZWRTZWNyZXRDaGFsbGVuZ2VSZXNwb25zZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU2hhcmVkU2VjcmV0RHluYW1pY1BsYWludGV4dCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iSVBBZGRyZXNzIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBc3ltbWV0cmljRGVjcnlwdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQXN5bW1ldHJpY0tleUFncmVlbWVudCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iU3Vic2NyaWJlckxpbmVOdW1iZXIiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlVzZXJTdWZmaXgiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXV0aGVudGljYXRvckJhc2VUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmdyb3VwIHJlZj0iQXV0aGVudGljYXRvckNob2ljZUdyb3VwIi8+CiAgICAgIDx4czpncm91cCByZWY9IkF1dGhlbnRpY2F0b3JTZXF1ZW5jZUdyb3VwIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb21wbGV4QXV0aGVudGljYXRvclR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJBdXRoZW50aWNhdG9yQ2hvaWNlR3JvdXAiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iQXV0aGVudGljYXRvclNlcXVlbmNlR3JvdXAiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkF1dGhlbnRpY2F0b3JUcmFuc3BvcnRQcm90b2NvbFR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJIVFRQIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTU0wiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtOb0VuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtSYWRpb0VuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vYmlsZU5ldHdvcmtFbmRUb0VuZEVuY3J5cHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IldUTFMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9IklQU2VjIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQU1ROIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJU0ROIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBRFNMIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iS2V5QWN0aXZhdGlvblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25QaW4iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iS2V5U2hhcmluZ1R5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzaGFyaW5nIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlByaXZhdGVLZXlQcm90ZWN0aW9uVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5QWN0aXZhdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5U3RvcmFnZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iS2V5U2hhcmluZyIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXNzd29yZFR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Ikxlbmd0aCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQWxwaGFiZXQiIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkdlbmVyYXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRXh0ZXJuYWxWZXJpZmljYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czplbGVtZW50IG5hbWU9IlJlc3RyaWN0ZWRQYXNzd29yZCIgdHlwZT0iUmVzdHJpY3RlZFBhc3N3b3JkVHlwZSIvPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZFBhc3N3b3JkVHlwZSI+CiAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJQYXNzd29yZFR5cGUiPgogICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxlbmd0aCIgdHlwZT0iUmVzdHJpY3RlZExlbmd0aFR5cGUiIG1pbk9jY3Vycz0iMSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJHZW5lcmF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkV4dGVybmFsVmVyaWZpY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlc3RyaWN0ZWRMZW5ndGhUeXBlIj4KICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Ikxlbmd0aFR5cGUiPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluIiB1c2U9InJlcXVpcmVkIj4KICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50ZWdlciI+CiAgICAgICAgICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMyIvPgogICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgICAgIDwveHM6YXR0cmlidXRlPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF4IiB0eXBlPSJ4czppbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uUGluVHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iTGVuZ3RoIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBbHBoYWJldCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iR2VuZXJhdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iQWN0aXZhdGlvbkxpbWl0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWxwaGFiZXQiIHR5cGU9IkFscGhhYmV0VHlwZSIvPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBbHBoYWJldFR5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZENoYXJzIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZWRDaGFycyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhc2UiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUb2tlblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9IlRpbWVTeW5jVG9rZW4iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRGV2aWNlVHlwZVR5cGUiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhhcmR3YXJlIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic29mdHdhcmUiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgoKICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJib29sZWFuVHlwZSI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJ1ZSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZhbHNlIi8+CiAgICA8L3hzOnJlc3RyaWN0aW9uPgogIDwveHM6c2ltcGxlVHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRpbWVTeW5jVG9rZW5UeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRGV2aWNlVHlwZSIgdHlwZT0iRGV2aWNlVHlwZVR5cGUiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iU2VlZExlbmd0aCIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJEZXZpY2VJbkhhbmQiIHR5cGU9ImJvb2xlYW5UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRpb25MaW1pdFR5cGUiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25MaW1pdFVzYWdlcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9IkFjdGl2YXRpb25MaW1pdFNlc3Npb24iLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25MaW1pdER1cmF0aW9uIiB0eXBlPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvblR5cGUiPgogICAgPHhzOmFubm90YXRpb24+CiAgICAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgICAgIFRoaXMgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgS2V5IEFjdGl2YXRpb24gTGltaXQgaXMKICAgICAgICBkZWZpbmVkIGFzIGEgc3BlY2lmaWMgZHVyYXRpb24gb2YgdGltZS4KICAgICAgPC94czpkb2N1bWVudGF0aW9uPgogICAgPC94czphbm5vdGF0aW9uPgogIDwveHM6ZWxlbWVudD4KCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWN0aXZhdGlvbkxpbWl0VXNhZ2VzIiB0eXBlPSJBY3RpdmF0aW9uTGltaXRVc2FnZXNUeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEtleSBBY3RpdmF0aW9uIExpbWl0IGlzCiAgICAgICAgZGVmaW5lZCBhcyBhIG51bWJlciBvZiB1c2FnZXMuCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRpb25MaW1pdFNlc3Npb24iIHR5cGU9IkFjdGl2YXRpb25MaW1pdFNlc3Npb25UeXBlIj4KICAgIDx4czphbm5vdGF0aW9uPgogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgICAgICBUaGlzIGVsZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEtleSBBY3RpdmF0aW9uIExpbWl0IGlzCiAgICAgICAgdGhlIHNlc3Npb24uCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KICAgIDwveHM6YW5ub3RhdGlvbj4KICA8L3hzOmVsZW1lbnQ+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uTGltaXREdXJhdGlvblR5cGUiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkdXJhdGlvbiIgdHlwZT0ieHM6ZHVyYXRpb24iIHVzZT0icmVxdWlyZWQiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWN0aXZhdGlvbkxpbWl0VXNhZ2VzVHlwZSI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0aW9uTGltaXRTZXNzaW9uVHlwZSIvPgoKICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGVuZ3RoVHlwZSI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbiIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXgiIHR5cGU9InhzOmludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJtZWRpdW1UeXBlIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtZW1vcnkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzbWFydGNhcmQiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b2tlbiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZURldmljZSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZUF1dGhDYXJkIi8+CiAgICA8L3hzOnJlc3RyaWN0aW9uPgogIDwveHM6c2ltcGxlVHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IktleVN0b3JhZ2VUeXBlIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWVkaXVtIiB0eXBlPSJtZWRpdW1UeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlY3JldEtleVByb3RlY3Rpb25UeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJLZXlBY3RpdmF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJLZXlTdG9yYWdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJFeHRlbnNpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlY3VyaXR5QXVkaXRUeXBlIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJTd2l0Y2hBdWRpdCIgbWluT2NjdXJzPSIwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFeHRlbnNpb25Pbmx5VHlwZSI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iRXh0ZW5zaW9uIiBtaW5PY2N1cnM9IjAiICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgoKICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb24iIHR5cGU9IkV4dGVuc2lvblR5cGUiLz4KCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV4dGVuc2lvblR5cGUiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+Cgo8L3hzOnNjaGVtYT4K]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-metadata-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEiCiAgICB4bWxuczptZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm1ldGFkYXRhIgogICAgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICB4bWxuczp4ZW5jPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiCiAgICB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJ4bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ieGVuYy1zY2hlbWEueHNkIi8+CiAgICA8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgICBzY2hlbWFMb2NhdGlvbj0ic2FtbC1zY2hlbWEtYXNzZXJ0aW9uLTIuMC54c2QiLz4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCiAgICAgICAgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICAgIDxhbm5vdGF0aW9uPgogICAgICAgIDxkb2N1bWVudGF0aW9uPgogICAgICAgICAgICBEb2N1bWVudCBpZGVudGlmaWVyOiBzYW1sLXNjaGVtYS1tZXRhZGF0YS0yLjAKICAgICAgICAgICAgTG9jYXRpb246IGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3NlY3VyaXR5L3NhbWwvdjIuMC8KICAgICAgICAgICAgUmV2aXNpb24gaGlzdG9yeToKICAgICAgICAgICAgICBWMi4wIChNYXJjaCwgMjAwNSk6CiAgICAgICAgICAgICAgICBTY2hlbWEgZm9yIFNBTUwgbWV0YWRhdGEsIGZpcnN0IHB1Ymxpc2hlZCBpbiBTQU1MIDIuMC4KICAgICAgICA8L2RvY3VtZW50YXRpb24+CiAgICA8L2Fubm90YXRpb24+CgogICAgPHNpbXBsZVR5cGUgbmFtZT0iZW50aXR5SURUeXBlIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0iYW55VVJJIj4KICAgICAgICAgICAgPG1heExlbmd0aCB2YWx1ZT0iMTAyNCIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxpemVkTmFtZVR5cGUiPgogICAgICAgIDxzaW1wbGVDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9zaW1wbGVDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJsb2NhbGl6ZWRVUklUeXBlIj4KICAgICAgICA8c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJhbnlVUkkiPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvc2ltcGxlQ29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICAKICAgIDxlbGVtZW50IG5hbWU9IkV4dGVuc2lvbnMiIHR5cGU9Im1kOkV4dGVuc2lvbnNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgZmluYWw9IiNhbGwiIG5hbWU9IkV4dGVuc2lvbnNUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIAogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50VHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQmluZGluZyIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJMb2NhdGlvbiIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJSZXNwb25zZUxvY2F0aW9uIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICAKICAgIDxjb21wbGV4VHlwZSBuYW1lPSJJbmRleGVkRW5kcG9pbnRUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ibWQ6RW5kcG9pbnRUeXBlIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHR5cGU9InVuc2lnbmVkU2hvcnQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaXNEZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgCiAgICA8ZWxlbWVudCBuYW1lPSJFbnRpdGllc0Rlc2NyaXB0b3IiIHR5cGU9Im1kOkVudGl0aWVzRGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdGllc0Rlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFeHRlbnNpb25zIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RW50aXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFbnRpdGllc0Rlc2NyaXB0b3IiLz4KICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iRW50aXR5RGVzY3JpcHRvciIgdHlwZT0ibWQ6RW50aXR5RGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdHlEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOlJvbGVEZXNjcmlwdG9yIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpJRFBTU09EZXNjcmlwdG9yIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTUFNTT0Rlc2NyaXB0b3IiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF1dGhuQXV0aG9yaXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6QXR0cmlidXRlQXV0aG9yaXR5RGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6UERQRGVzY3JpcHRvciIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFmZmlsaWF0aW9uRGVzY3JpcHRvciIvPgogICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpPcmdhbml6YXRpb24iIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkNvbnRhY3RQZXJzb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBZGRpdGlvbmFsTWV0YWRhdGFMb2NhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlJRCIgdHlwZT0ibWQ6ZW50aXR5SURUeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWxpZFVudGlsIiB0eXBlPSJkYXRlVGltZSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2FjaGVEdXJhdGlvbiIgdHlwZT0iZHVyYXRpb24iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IklEIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIAogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uIiB0eXBlPSJtZDpPcmdhbml6YXRpb25UeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iT3JnYW5pemF0aW9uVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk9yZ2FuaXphdGlvbk5hbWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6T3JnYW5pemF0aW9uRGlzcGxheU5hbWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6T3JnYW5pemF0aW9uVVJMIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uTmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9Ik9yZ2FuaXphdGlvbkRpc3BsYXlOYW1lIiB0eXBlPSJtZDpsb2NhbGl6ZWROYW1lVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uVVJMIiB0eXBlPSJtZDpsb2NhbGl6ZWRVUklUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJDb250YWN0UGVyc29uIiB0eXBlPSJtZDpDb250YWN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbnRhY3RUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6Q29tcGFueSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6R2l2ZW5OYW1lIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTdXJOYW1lIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpFbWFpbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpUZWxlcGhvbmVOdW1iZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29udGFjdFR5cGUiIHR5cGU9Im1kOkNvbnRhY3RUeXBlVHlwZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkNvbXBhbnkiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iR2l2ZW5OYW1lIiB0eXBlPSJzdHJpbmciLz4KICAgIDxlbGVtZW50IG5hbWU9IlN1ck5hbWUiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iRW1haWxBZGRyZXNzIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IlRlbGVwaG9uZU51bWJlciIgdHlwZT0ic3RyaW5nIi8+CiAgICA8c2ltcGxlVHlwZSBuYW1lPSJDb250YWN0VHlwZVR5cGUiPgogICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9InRlY2huaWNhbCIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9InN1cHBvcnQiLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhZG1pbmlzdHJhdGl2ZSIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9ImJpbGxpbmciLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iQWRkaXRpb25hbE1ldGFkYXRhTG9jYXRpb24iIHR5cGU9Im1kOkFkZGl0aW9uYWxNZXRhZGF0YUxvY2F0aW9uVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFkZGl0aW9uYWxNZXRhZGF0YUxvY2F0aW9uVHlwZSI+CiAgICAgICAgPHNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0iYW55VVJJIj4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9zaW1wbGVDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KCiAgICA8ZWxlbWVudCBuYW1lPSJSb2xlRGVzY3JpcHRvciIgdHlwZT0ibWQ6Um9sZURlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUm9sZURlc2NyaXB0b3JUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6S2V5RGVzY3JpcHRvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk9yZ2FuaXphdGlvbiIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6Q29udGFjdFBlcnNvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvdG9jb2xTdXBwb3J0RW51bWVyYXRpb24iIHR5cGU9Im1kOmFueVVSSUxpc3RUeXBlIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlcnJvclVSTCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iYW55VVJJTGlzdFR5cGUiPgogICAgICAgIDxsaXN0IGl0ZW1UeXBlPSJhbnlVUkkiLz4KICAgIDwvc2ltcGxlVHlwZT4KCiAgICA8ZWxlbWVudCBuYW1lPSJLZXlEZXNjcmlwdG9yIiB0eXBlPSJtZDpLZXlEZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IktleURlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkVuY3J5cHRpb25NZXRob2QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idXNlIiB0eXBlPSJtZDpLZXlUeXBlcyIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxzaW1wbGVUeXBlIG5hbWU9IktleVR5cGVzIj4KICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJlbmNyeXB0aW9uIi8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ic2lnbmluZyIvPgogICAgICAgIDwvcmVzdHJpY3Rpb24+CiAgICA8L3NpbXBsZVR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJFbmNyeXB0aW9uTWV0aG9kIiB0eXBlPSJ4ZW5jOkVuY3J5cHRpb25NZXRob2RUeXBlIi8+CiAgICAKICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTU09EZXNjcmlwdG9yVHlwZSIgYWJzdHJhY3Q9InRydWUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJtZDpSb2xlRGVzY3JpcHRvclR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6QXJ0aWZhY3RSZXNvbHV0aW9uU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6U2luZ2xlTG9nb3V0U2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TWFuYWdlTmFtZUlEU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TmFtZUlERm9ybWF0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFydGlmYWN0UmVzb2x1dGlvblNlcnZpY2UiIHR5cGU9Im1kOkluZGV4ZWRFbmRwb2ludFR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlNpbmdsZUxvZ291dFNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTWFuYWdlTmFtZUlEU2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOYW1lSURGb3JtYXQiIHR5cGU9ImFueVVSSSIvPgoKICAgIDxlbGVtZW50IG5hbWU9IklEUFNTT0Rlc2NyaXB0b3IiIHR5cGU9Im1kOklEUFNTT0Rlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQU1NPRGVzY3JpcHRvclR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJtZDpTU09EZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTaW5nbGVTaWduT25TZXJ2aWNlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibWQ6TmFtZUlETWFwcGluZ1NlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbklEUmVxdWVzdFNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVByb2ZpbGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJXYW50QXV0aG5SZXF1ZXN0c1NpZ25lZCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlNpbmdsZVNpZ25PblNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTmFtZUlETWFwcGluZ1NlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXNzZXJ0aW9uSURSZXF1ZXN0U2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVQcm9maWxlIiB0eXBlPSJhbnlVUkkiLz4KICAgIAogICAgPGVsZW1lbnQgbmFtZT0iU1BTU09EZXNjcmlwdG9yIiB0eXBlPSJtZDpTUFNTT0Rlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU1BTU09EZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlNTT0Rlc2NyaXB0b3JUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbkNvbnN1bWVyU2VydmljZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkF1dGhuUmVxdWVzdHNTaWduZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iV2FudEFzc2VydGlvbnNTaWduZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBc3NlcnRpb25Db25zdW1lclNlcnZpY2UiIHR5cGU9Im1kOkluZGV4ZWRFbmRwb2ludFR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2UiIHR5cGU9Im1kOkF0dHJpYnV0ZUNvbnN1bWluZ1NlcnZpY2VUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZVR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTZXJ2aWNlTmFtZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpTZXJ2aWNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpSZXF1ZXN0ZWRBdHRyaWJ1dGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImluZGV4IiB0eXBlPSJ1bnNpZ25lZFNob3J0IiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc0RlZmF1bHQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlNlcnZpY2VEZXNjcmlwdGlvbiIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4KICAgIDxlbGVtZW50IG5hbWU9IlJlcXVlc3RlZEF0dHJpYnV0ZSIgdHlwZT0ibWQ6UmVxdWVzdGVkQXR0cmlidXRlVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IlJlcXVlc3RlZEF0dHJpYnV0ZVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1sOkF0dHJpYnV0ZVR5cGUiPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpc1JlcXVpcmVkIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogIAogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5BdXRob3JpdHlEZXNjcmlwdG9yIiB0eXBlPSJtZDpBdXRobkF1dGhvcml0eURlc2NyaXB0b3JUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5BdXRob3JpdHlEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlJvbGVEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBdXRoblF1ZXJ5U2VydmljZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFzc2VydGlvbklEUmVxdWVzdFNlcnZpY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOk5hbWVJREZvcm1hdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdXRoblF1ZXJ5U2VydmljZSIgdHlwZT0ibWQ6RW5kcG9pbnRUeXBlIi8+CgogICAgPGVsZW1lbnQgbmFtZT0iUERQRGVzY3JpcHRvciIgdHlwZT0ibWQ6UERQRGVzY3JpcHRvclR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQRFBEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kOlJvbGVEZXNjcmlwdG9yVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBdXRoelNlcnZpY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBc3NlcnRpb25JRFJlcXVlc3RTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpOYW1lSURGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aHpTZXJ2aWNlIiB0eXBlPSJtZDpFbmRwb2ludFR5cGUiLz4KCiAgICA8ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVBdXRob3JpdHlEZXNjcmlwdG9yIiB0eXBlPSJtZDpBdHRyaWJ1dGVBdXRob3JpdHlEZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZUF1dGhvcml0eURlc2NyaXB0b3JUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ibWQ6Um9sZURlc2NyaXB0b3JUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVNlcnZpY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpBc3NlcnRpb25JRFJlcXVlc3RTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJtZDpOYW1lSURGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkF0dHJpYnV0ZVByb2ZpbGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXR0cmlidXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF0dHJpYnV0ZVNlcnZpY2UiIHR5cGU9Im1kOkVuZHBvaW50VHlwZSIvPgogICAKICAgIDxlbGVtZW50IG5hbWU9IkFmZmlsaWF0aW9uRGVzY3JpcHRvciIgdHlwZT0ibWQ6QWZmaWxpYXRpb25EZXNjcmlwdG9yVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFmZmlsaWF0aW9uRGVzY3JpcHRvclR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9Im1kOkFmZmlsaWF0ZU1lbWJlciIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWZmaWxpYXRpb25Pd25lcklEIiB0eXBlPSJtZDplbnRpdHlJRFR5cGUiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9InZhbGlkVW50aWwiIHR5cGU9ImRhdGVUaW1lIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWNoZUR1cmF0aW9uIiB0eXBlPSJkdXJhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSUQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQWZmaWxpYXRlTWVtYmVyIiB0eXBlPSJtZDplbnRpdHlJRFR5cGUiLz4KPC9zY2hlbWE+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/saml-schema-protocol-2.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYQogICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiCiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIgogICAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICAgIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogICAgdmVyc2lvbj0iMi4wIj4KICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIgogICAgICAgIHNjaGVtYUxvY2F0aW9uPSJzYW1sLXNjaGVtYS1hc3NlcnRpb24tMi4wLnhzZCIvPgogICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICAgICAgc2NoZW1hTG9jYXRpb249InhtbGRzaWctY29yZS1zY2hlbWEueHNkIi8+CiAgICA8YW5ub3RhdGlvbj4KICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KICAgICAgICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc2FtbC1zY2hlbWEtcHJvdG9jb2wtMi4wCiAgICAgICAgICAgIExvY2F0aW9uOiBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9zZWN1cml0eS9zYW1sL3YyLjAvCiAgICAgICAgICAgIFJldmlzaW9uIGhpc3Rvcnk6CiAgICAgICAgICAgIFYxLjAgKE5vdmVtYmVyLCAyMDAyKToKICAgICAgICAgICAgICBJbml0aWFsIFN0YW5kYXJkIFNjaGVtYS4KICAgICAgICAgICAgVjEuMSAoU2VwdGVtYmVyLCAyMDAzKToKICAgICAgICAgICAgICBVcGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBWMS4wIG5hbWVzcGFjZS4KICAgICAgICAgICAgVjIuMCAoTWFyY2gsIDIwMDUpOgogICAgICAgICAgICAgIE5ldyBwcm90b2NvbCBzY2hlbWEgYmFzZWQgaW4gYSBTQU1MIFYyLjAgbmFtZXNwYWNlLgogICAgIDwvZG9jdW1lbnRhdGlvbj4KICAgIDwvYW5ub3RhdGlvbj4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXF1ZXN0QWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6SXNzdWVyIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOkV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJRCIgdHlwZT0iSUQiIHVzZT0icmVxdWlyZWQiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSXNzdWVJbnN0YW50IiB0eXBlPSJkYXRlVGltZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRGVzdGluYXRpb24iIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iQ29uc2VudCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iRXh0ZW5zaW9ucyIgdHlwZT0ic2FtbHA6RXh0ZW5zaW9uc1R5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFeHRlbnNpb25zVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzUmVzcG9uc2VUeXBlIj4KICAgIAk8c2VxdWVuY2U+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpJc3N1ZXIiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6RXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6U3RhdHVzIi8+CiAgICAJPC9zZXF1ZW5jZT4KICAgIAk8YXR0cmlidXRlIG5hbWU9IklEIiB0eXBlPSJJRCIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iSW5SZXNwb25zZVRvIiB0eXBlPSJOQ05hbWUiIHVzZT0ib3B0aW9uYWwiLz4KICAgIAk8YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iSXNzdWVJbnN0YW50IiB0eXBlPSJkYXRlVGltZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iRGVzdGluYXRpb24iIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgCTxhdHRyaWJ1dGUgbmFtZT0iQ29uc2VudCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzIiB0eXBlPSJzYW1scDpTdGF0dXNUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlN0YXR1c0NvZGUiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpTdGF0dXNNZXNzYWdlIiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpTdGF0dXNEZXRhaWwiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0ic2FtbHA6U3RhdHVzQ29kZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNDb2RlVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJWYWx1ZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU3RhdHVzTWVzc2FnZSIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJTdGF0dXNEZXRhaWwiIHR5cGU9InNhbWxwOlN0YXR1c0RldGFpbFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNEZXRhaWxUeXBlIj4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkFzc2VydGlvbklEUmVxdWVzdCIgdHlwZT0ic2FtbHA6QXNzZXJ0aW9uSURSZXF1ZXN0VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFzc2VydGlvbklEUmVxdWVzdFR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpSZXF1ZXN0QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uSURSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlN1YmplY3RRdWVyeSIgdHlwZT0ic2FtbHA6U3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iU3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpTdWJqZWN0Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkF1dGhuUXVlcnkiIHR5cGU9InNhbWxwOkF1dGhuUXVlcnlUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5RdWVyeVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdWJqZWN0UXVlcnlBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkQXV0aG5Db250ZXh0IiB0eXBlPSJzYW1scDpSZXF1ZXN0ZWRBdXRobkNvbnRleHRUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVxdWVzdGVkQXV0aG5Db250ZXh0VHlwZSI+CiAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXV0aG5Db250ZXh0RGVjbFJlZiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8L2Nob2ljZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkNvbXBhcmlzb24iIHR5cGU9InNhbWxwOkF1dGhuQ29udGV4dENvbXBhcmlzb25UeXBlIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPHNpbXBsZVR5cGUgbmFtZT0iQXV0aG5Db250ZXh0Q29tcGFyaXNvblR5cGUiPgogICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9ImV4YWN0Ii8+CiAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibWluaW11bSIvPgogICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im1heGltdW0iLz4KICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJiZXR0ZXIiLz4KICAgICAgICA8L3Jlc3RyaWN0aW9uPgogICAgPC9zaW1wbGVUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXR0cmlidXRlUXVlcnkiIHR5cGU9InNhbWxwOkF0dHJpYnV0ZVF1ZXJ5VHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVF1ZXJ5VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlN1YmplY3RRdWVyeUFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJBdXRoekRlY2lzaW9uUXVlcnkiIHR5cGU9InNhbWxwOkF1dGh6RGVjaXNpb25RdWVyeVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBdXRoekRlY2lzaW9uUXVlcnlUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbHA6U3ViamVjdFF1ZXJ5QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QWN0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFdmlkZW5jZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJSZXNvdXJjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXV0aG5SZXF1ZXN0IiB0eXBlPSJzYW1scDpBdXRoblJlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aG5SZXF1ZXN0VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpTdWJqZWN0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOk5hbWVJRFBvbGljeSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkNvbmRpdGlvbnMiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6UmVxdWVzdGVkQXV0aG5Db250ZXh0IiBtaW5PY2N1cnM9IjAiLz4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlNjb3BpbmciIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iRm9yY2VBdXRobiIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJc1Bhc3NpdmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUHJvdG9jb2xCaW5kaW5nIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlSW5kZXgiIHR5cGU9InVuc2lnbmVkU2hvcnQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZUluZGV4IiB0eXBlPSJ1bnNpZ25lZFNob3J0IiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3ZpZGVyTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iTmFtZUlEUG9saWN5IiB0eXBlPSJzYW1scDpOYW1lSURQb2xpY3lUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlEUG9saWN5VHlwZSI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJGb3JtYXQiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iU1BOYW1lUXVhbGlmaWVyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkFsbG93Q3JlYXRlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iU2NvcGluZyIgdHlwZT0ic2FtbHA6U2NvcGluZ1R5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJTY29waW5nVHlwZSI+CiAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOklEUExpc3QiIG1pbk9jY3Vycz0iMCIvPgogICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlJlcXVlc3RlcklEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3h5Q291bnQiIHR5cGU9Im5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlJlcXVlc3RlcklEIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IklEUExpc3QiIHR5cGU9InNhbWxwOklEUExpc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQTGlzdFR5cGUiPgogICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpJRFBFbnRyeSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpHZXRDb21wbGV0ZSIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgPC9zZXF1ZW5jZT4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJJRFBFbnRyeSIgdHlwZT0ic2FtbHA6SURQRW50cnlUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iSURQRW50cnlUeXBlIj4KICAgICAgICA8YXR0cmlidXRlIG5hbWU9IlByb3ZpZGVySUQiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJMb2MiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IkdldENvbXBsZXRlIiB0eXBlPSJhbnlVUkkiLz4KICAgIDxlbGVtZW50IG5hbWU9IlJlc3BvbnNlIiB0eXBlPSJzYW1scDpSZXNwb25zZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXNwb25zZVR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdGF0dXNSZXNwb25zZVR5cGUiPgogICAgICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZEFzc2VydGlvbiIvPgogICAgICAgICAgICAgICAgPC9jaG9pY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgCTwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3RSZXNvbHZlIiB0eXBlPSJzYW1scDpBcnRpZmFjdFJlc29sdmVUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iQXJ0aWZhY3RSZXNvbHZlVHlwZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6QXJ0aWZhY3QiLz4KICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CiAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgogICAgCTwvY29tcGxleENvbnRlbnQ+CiAgICA8L2NvbXBsZXhUeXBlPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3QiIHR5cGU9InN0cmluZyIvPgogICAgPGVsZW1lbnQgbmFtZT0iQXJ0aWZhY3RSZXNwb25zZSIgdHlwZT0ic2FtbHA6QXJ0aWZhY3RSZXNwb25zZVR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBcnRpZmFjdFJlc3BvbnNlVHlwZSI+CiAgICAJPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlN0YXR1c1Jlc3BvbnNlVHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIi8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgIAk8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik1hbmFnZU5hbWVJRFJlcXVlc3QiIHR5cGU9InNhbWxwOk1hbmFnZU5hbWVJRFJlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTWFuYWdlTmFtZUlEUmVxdWVzdFR5cGUiPgogICAgCTxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpSZXF1ZXN0QWJzdHJhY3RUeXBlIj4KICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgICA8Y2hvaWNlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6TmV3SUQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1scDpOZXdFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlRlcm1pbmF0ZSIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAJPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+CiAgICA8ZWxlbWVudCBuYW1lPSJOZXdJRCIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOZXdFbmNyeXB0ZWRJRCIgdHlwZT0ic2FtbDpFbmNyeXB0ZWRFbGVtZW50VHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iVGVybWluYXRlIiB0eXBlPSJzYW1scDpUZXJtaW5hdGVUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iVGVybWluYXRlVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTWFuYWdlTmFtZUlEUmVzcG9uc2UiIHR5cGU9InNhbWxwOlN0YXR1c1Jlc3BvbnNlVHlwZSIvPgogICAgPGVsZW1lbnQgbmFtZT0iTG9nb3V0UmVxdWVzdCIgdHlwZT0ic2FtbHA6TG9nb3V0UmVxdWVzdFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJMb2dvdXRSZXF1ZXN0VHlwZSI+CiAgICAgICAgPGNvbXBsZXhDb250ZW50PgogICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNhbWxwOlJlcXVlc3RBYnN0cmFjdFR5cGUiPgogICAgICAgICAgICAgICAgPHNlcXVlbmNlPgogICAgICAgICAgICAgICAgICAgIDxjaG9pY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpCYXNlSUQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOk5hbWVJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6RW5jcnlwdGVkSUQiLz4KICAgICAgICAgICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWxwOlNlc3Npb25JbmRleCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iUmVhc29uIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTm90T25PckFmdGVyIiB0eXBlPSJkYXRlVGltZSIgdXNlPSJvcHRpb25hbCIvPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9IlNlc3Npb25JbmRleCIgdHlwZT0ic3RyaW5nIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJMb2dvdXRSZXNwb25zZSIgdHlwZT0ic2FtbHA6U3RhdHVzUmVzcG9uc2VUeXBlIi8+CiAgICA8ZWxlbWVudCBuYW1lPSJOYW1lSURNYXBwaW5nUmVxdWVzdCIgdHlwZT0ic2FtbHA6TmFtZUlETWFwcGluZ1JlcXVlc3RUeXBlIi8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmFtZUlETWFwcGluZ1JlcXVlc3RUeXBlIj4KICAgICAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2FtbHA6UmVxdWVzdEFic3RyYWN0VHlwZSI+CiAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkJhc2VJRCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbDpFbmNyeXB0ZWRJRCIvPgogICAgICAgICAgICAgICAgICAgIDwvY2hvaWNlPgogICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2FtbHA6TmFtZUlEUG9saWN5Ii8+CiAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgICAgICA8L2V4dGVuc2lvbj4KICAgICAgICA8L2NvbXBsZXhDb250ZW50PgogICAgPC9jb21wbGV4VHlwZT4KICAgIDxlbGVtZW50IG5hbWU9Ik5hbWVJRE1hcHBpbmdSZXNwb25zZSIgdHlwZT0ic2FtbHA6TmFtZUlETWFwcGluZ1Jlc3BvbnNlVHlwZSIvPgogICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5hbWVJRE1hcHBpbmdSZXNwb25zZVR5cGUiPgogICAgICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzYW1scDpTdGF0dXNSZXNwb25zZVR5cGUiPgogICAgICAgICAgICAgICAgPGNob2ljZT4KICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNhbWw6TmFtZUlEIi8+CiAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkVuY3J5cHRlZElEIi8+CiAgICAgICAgICAgICAgICA8L2Nob2ljZT4KICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgPC9jb21wbGV4Q29udGVudD4KICAgIDwvY29tcGxleFR5cGU+Cjwvc2NoZW1hPgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-metadata-attr.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmF0dHJpYnV0ZSIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICB4bWxuczptZGF0dHI9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmF0dHJpYnV0ZSIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIyLjAiPgoKICA8YW5ub3RhdGlvbj4KICAgIDxkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCB0aXRsZTogU0FNTCBWMi4wIE1ldGFkYXRhIEV4dGVudGlvbiBmb3IgRW50aXR5IEF0dHJpYnV0ZXMgU2NoZW1hCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtbWV0YWRhdGEtYXR0ci54c2QKICAgICAgTG9jYXRpb246IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9kb2N1bWVudHMucGhwP3dnX2FiYnJldj1zZWN1cml0eQogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICBWMS4wIChOb3ZlbWJlciAyMDA4KToKICAgICAgICBJbml0aWFsIHZlcnNpb24uCiAgICA8L2RvY3VtZW50YXRpb24+CiAgPC9hbm5vdGF0aW9uPgoKICA8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIKICAgICAgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLWFzc2VydGlvbi0yLjAueHNkIi8+CgogIDxlbGVtZW50IG5hbWU9IkVudGl0eUF0dHJpYnV0ZXMiIHR5cGU9Im1kYXR0cjpFbnRpdHlBdHRyaWJ1dGVzVHlwZSIvPgogIDxjb21wbGV4VHlwZSBuYW1lPSJFbnRpdHlBdHRyaWJ1dGVzVHlwZSI+CiAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgPGVsZW1lbnQgcmVmPSJzYW1sOkF0dHJpYnV0ZSIvPgogICAgICA8ZWxlbWVudCByZWY9InNhbWw6QXNzZXJ0aW9uIi8+CiAgICA8L2Nob2ljZT4KICA8L2NvbXBsZXhUeXBlPgoKPC9zY2hlbWE+Cgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-attribute-ext.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOmF0dHJpYnV0ZTpleHQiCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogIGVsZW1lbnRGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCiAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGJsb2NrRGVmYXVsdD0ic3Vic3RpdHV0aW9uIgogIHZlcnNpb249IjIuMCI+CgogIDxhbm5vdGF0aW9uPgogICAgPGRvY3VtZW50YXRpb24+CiAgICAgIERvY3VtZW50IHRpdGxlOiBTQU1MIFYyLjAgQXR0cmlidXRlIEV4dGVuc2lvbiBTY2hlbWEKICAgICAgRG9jdW1lbnQgaWRlbnRpZmllcjogc3N0Yy1zYW1sLWF0dHJpYnV0ZS1leHQueHNkCiAgICAgIExvY2F0aW9uOiBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZG9jdW1lbnRzLnBocD93Z19hYmJyZXY9c2VjdXJpdHkKICAgICAgUmV2aXNpb24gaGlzdG9yeToKICAgICAgVjEuMCAoT2N0b2JlciAyMDA4KToKICAgICAgICBJbml0aWFsIHZlcnNpb24uCiAgICA8L2RvY3VtZW50YXRpb24+CiAgPC9hbm5vdGF0aW9uPgoKICA8YXR0cmlidXRlIG5hbWU9Ik9yaWdpbmFsSXNzdWVyIiB0eXBlPSJhbnlVUkkiLz4KICA8YXR0cmlidXRlIG5hbWU9Ikxhc3RNb2RpZmllZCIgdHlwZT0iZGF0ZVRpbWUiLz4KCjwvc2NoZW1hPgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-metadata-algsupport-v1.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNjaGVtYSAKICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmFsZ3N1cHBvcnQiCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogIHhtbG5zOmFsZz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6YWxnc3VwcG9ydCIKICBlbGVtZW50Rm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKICBibG9ja0RlZmF1bHQ9InN1YnN0aXR1dGlvbiIKICB2ZXJzaW9uPSIxLjAiPgoKICA8YW5ub3RhdGlvbj4KICAgIDxkb2N1bWVudGF0aW9uPgogICAgICBEb2N1bWVudCB0aXRsZTogTWV0YWRhdGEgRXh0ZW5zaW9uIFNjaGVtYSBmb3IgU0FNTCBWMi4wIE1ldGFkYXRhIFByb2ZpbGUgZm9yIEFsZ29yaXRobSBTdXBwb3J0IFZlcnNpb24gMS4wCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtc2FtbC1tZXRhZGF0YS1hbGdzdXBwb3J0LnhzZAogICAgICBMb2NhdGlvbjogaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvc2VjdXJpdHkvc2FtbC9Qb3N0Mi4wLwogICAgICBSZXZpc2lvbiBoaXN0b3J5OgogICAgICBWMS4wIChKdW5lIDIwMTApOgogICAgICAgIEluaXRpYWwgdmVyc2lvbi4KICAgIDwvZG9jdW1lbnRhdGlvbj4KICA8L2Fubm90YXRpb24+CgogIDxlbGVtZW50IG5hbWU9IkRpZ2VzdE1ldGhvZCIgdHlwZT0iYWxnOkRpZ2VzdE1ldGhvZFR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iRGlnZXN0TWV0aG9kVHlwZSI+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CiAgPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iU2lnbmluZ01ldGhvZCIgdHlwZT0iYWxnOlNpZ25pbmdNZXRob2RUeXBlIi8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25pbmdNZXRob2RUeXBlIj4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWluS2V5U2l6ZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIi8+CiAgICA8YXR0cmlidXRlIG5hbWU9Ik1heEtleVNpemUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgogIDwvY29tcGxleFR5cGU+Cgo8L3NjaGVtYT4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/sstc-saml-metadata-ui-v1.0.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzY2hlbWEgDQogIHRhcmdldE5hbWVzcGFjZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6dWkiDQogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSINCiAgeG1sbnM6bWQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDptZXRhZGF0YSINCiAgeG1sbnM6bWR1aT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6bWV0YWRhdGE6dWkiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiDQogIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCINCiAgYmxvY2tEZWZhdWx0PSJzdWJzdGl0dXRpb24iDQogIHZlcnNpb249IjEuMCI+DQoNCiAgPGFubm90YXRpb24+DQogICAgPGRvY3VtZW50YXRpb24+DQogICAgICBEb2N1bWVudCB0aXRsZTogTWV0YWRhdGEgRXh0ZW5zaW9uIFNjaGVtYSBmb3IgU0FNTCBWMi4wIE1ldGFkYXRhIEV4dGVuc2lvbnMgZm9yIExvZ2luIGFuZCBEaXNjb3ZlcnkgVXNlciBJbnRlcmZhY2UgVmVyc2lvbiAxLjANCiAgICAgIERvY3VtZW50IGlkZW50aWZpZXI6IHNzdGMtc2FtbC1tZXRhZGF0YS11aS12MS4wLnhzZA0KICAgICAgTG9jYXRpb246IGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3NlY3VyaXR5L3NhbWwvUG9zdDIuMC8NCiAgICAgIFJldmlzaW9uIGhpc3Rvcnk6DQogICAgICAxNiBOb3ZlbWJlciAyMDEwOg0KICAgICAgICBBZGRlZCBLZXl3b3JkcyBlbGVtZW50L3R5cGUuDQogICAgICAwMSBOb3ZlbWJlciAyMDEwDQogICAgICAgIENoYW5nZWQgZmlsZW5hbWUuDQogICAgICBTZXB0ZW1iZXIgMjAxMDoNCiAgICAgICAgSW5pdGlhbCB2ZXJzaW9uLg0KICAgIDwvZG9jdW1lbnRhdGlvbj4NCiAgPC9hbm5vdGF0aW9uPg0KDQogIDxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bWV0YWRhdGEiDQogICAgc2NoZW1hTG9jYXRpb249InNhbWwtc2NoZW1hLW1ldGFkYXRhLTIuMC54c2QiLz4NCiAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSINCiAgICBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPg0KDQogIDxlbGVtZW50IG5hbWU9IlVJSW5mbyIgdHlwZT0ibWR1aTpVSUluZm9UeXBlIiAvPg0KICA8Y29tcGxleFR5cGUgbmFtZT0iVUlJbmZvVHlwZSI+DQogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpEaXNwbGF5TmFtZSIvPg0KICAgICAgPGVsZW1lbnQgcmVmPSJtZHVpOkRlc2NyaXB0aW9uIi8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6S2V5d29yZHMiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpMb2dvIi8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6SW5mb3JtYXRpb25VUkwiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpQcml2YWN5U3RhdGVtZW50VVJMIi8+DQogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCiAgICA8L2Nob2ljZT4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0ibWQ6bG9jYWxpemVkTmFtZVR5cGUiLz4NCiAgPGVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9Im1kOmxvY2FsaXplZE5hbWVUeXBlIi8+DQogIDxlbGVtZW50IG5hbWU9IkluZm9ybWF0aW9uVVJMIiB0eXBlPSJtZDpsb2NhbGl6ZWRVUklUeXBlIi8+DQogIDxlbGVtZW50IG5hbWU9IlByaXZhY3lTdGF0ZW1lbnRVUkwiIHR5cGU9Im1kOmxvY2FsaXplZFVSSVR5cGUiLz4NCg0KICA8ZWxlbWVudCBuYW1lPSJLZXl3b3JkcyIgdHlwZT0ibWR1aTpLZXl3b3Jkc1R5cGUiLz4NCiAgPGNvbXBsZXhUeXBlIG5hbWU9IktleXdvcmRzVHlwZSI+DQogICAgPHNpbXBsZUNvbnRlbnQ+DQogICAgICA8ZXh0ZW5zaW9uIGJhc2U9Im1kdWk6bGlzdE9mU3RyaW5ncyI+DQogICAgICAgIDxhdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIgdXNlPSJyZXF1aXJlZCIvPg0KICAgICAgPC9leHRlbnNpb24+DQogICAgPC9zaW1wbGVDb250ZW50Pg0KICA8L2NvbXBsZXhUeXBlPg0KICANCiAgPHNpbXBsZVR5cGUgbmFtZT0ibGlzdE9mU3RyaW5ncyI+DQogICAgPGxpc3QgaXRlbVR5cGU9InN0cmluZyIvPg0KICA8L3NpbXBsZVR5cGU+DQoNCiAgPGVsZW1lbnQgbmFtZT0iTG9nbyIgdHlwZT0ibWR1aTpMb2dvVHlwZSIvPg0KICA8Y29tcGxleFR5cGUgbmFtZT0iTG9nb1R5cGUiPg0KICAgIDxzaW1wbGVDb250ZW50Pg0KICAgICAgPGV4dGVuc2lvbiBiYXNlPSJhbnlVUkkiPg0KICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImhlaWdodCIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+DQogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0id2lkdGgiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPg0KICAgICAgICA8YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4NCiAgICAgIDwvZXh0ZW5zaW9uPg0KICAgIDwvc2ltcGxlQ29udGVudD4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJEaXNjb0hpbnRzIiB0eXBlPSJtZHVpOkRpc2NvSGludHNUeXBlIi8+DQogIDxjb21wbGV4VHlwZSBuYW1lPSJEaXNjb0hpbnRzVHlwZSI+DQogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpJUEhpbnQiLz4NCiAgICAgIDxlbGVtZW50IHJlZj0ibWR1aTpEb21haW5IaW50Ii8+DQogICAgICA8ZWxlbWVudCByZWY9Im1kdWk6R2VvbG9jYXRpb25IaW50Ii8+DQogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCiAgICA8L2Nob2ljZT4NCiAgPC9jb21wbGV4VHlwZT4NCg0KICA8ZWxlbWVudCBuYW1lPSJJUEhpbnQiIHR5cGU9InN0cmluZyIvPg0KICA8ZWxlbWVudCBuYW1lPSJEb21haW5IaW50IiB0eXBlPSJzdHJpbmciLz4JDQogIDxlbGVtZW50IG5hbWU9Ikdlb2xvY2F0aW9uSGludCIgdHlwZT0iYW55VVJJIi8+DQoNCjwvc2NoZW1hPg0KDQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xenc-schema.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjxzY2hlbWEgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyB2ZXJzaW9uPScxLjAnCiAgICAgICAgeG1sbnM6eGVuYz0naHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJwogICAgICAgIHhtbG5zOmRzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJwogICAgICAgIHRhcmdldE5hbWVzcGFjZT0naHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJwogICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0ncXVhbGlmaWVkJz4KCiAgPGltcG9ydCBuYW1lc3BhY2U9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMnCiAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0neG1sZHNpZy1jb3JlLXNjaGVtYS54c2QnLz4KCiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRlZFR5cGUnIGFic3RyYWN0PSd0cnVlJz4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGlvbk1ldGhvZCcgdHlwZT0neGVuYzpFbmNyeXB0aW9uTWV0aG9kVHlwZScKICAgICAgIG1pbk9jY3Vycz0nMCcvPgogICAgICA8ZWxlbWVudCByZWY9J2RzOktleUluZm8nIG1pbk9jY3Vycz0nMCcvPgogICAgICA8ZWxlbWVudCByZWY9J3hlbmM6Q2lwaGVyRGF0YScvPgogICAgICA8ZWxlbWVudCByZWY9J3hlbmM6RW5jcnlwdGlvblByb3BlcnRpZXMnIG1pbk9jY3Vycz0nMCcvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0nSWQnIHR5cGU9J0lEJyB1c2U9J29wdGlvbmFsJy8+CiAgICA8YXR0cmlidXRlIG5hbWU9J1R5cGUnIHR5cGU9J2FueVVSSScgdXNlPSdvcHRpb25hbCcvPgogICAgPGF0dHJpYnV0ZSBuYW1lPSdNaW1lVHlwZScgdHlwZT0nc3RyaW5nJyB1c2U9J29wdGlvbmFsJy8+CiAgICA8YXR0cmlidXRlIG5hbWU9J0VuY29kaW5nJyB0eXBlPSdhbnlVUkknIHVzZT0nb3B0aW9uYWwnLz4KICA8L2NvbXBsZXhUeXBlPgogIAogIDxjb21wbGV4VHlwZSBuYW1lPSdFbmNyeXB0aW9uTWV0aG9kVHlwZScgbWl4ZWQ9J3RydWUnPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCBuYW1lPSdLZXlTaXplJyBtaW5PY2N1cnM9JzAnIHR5cGU9J3hlbmM6S2V5U2l6ZVR5cGUnLz4KICAgICAgPGVsZW1lbnQgbmFtZT0nT0FFUHBhcmFtcycgbWluT2NjdXJzPScwJyB0eXBlPSdiYXNlNjRCaW5hcnknLz4KICAgICAgPGFueSBuYW1lc3BhY2U9JyMjb3RoZXInIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9J0FsZ29yaXRobScgdHlwZT0nYW55VVJJJyB1c2U9J3JlcXVpcmVkJy8+CiAgPC9jb21wbGV4VHlwZT4KCiAgICA8c2ltcGxlVHlwZSBuYW1lPSdLZXlTaXplVHlwZSc+CiAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJpbnRlZ2VyIi8+CiAgICA8L3NpbXBsZVR5cGU+CgogIDxlbGVtZW50IG5hbWU9J0NpcGhlckRhdGEnIHR5cGU9J3hlbmM6Q2lwaGVyRGF0YVR5cGUnLz4KICA8Y29tcGxleFR5cGUgbmFtZT0nQ2lwaGVyRGF0YVR5cGUnPgogICAgIDxjaG9pY2U+CiAgICAgICA8ZWxlbWVudCBuYW1lPSdDaXBoZXJWYWx1ZScgdHlwZT0nYmFzZTY0QmluYXJ5Jy8+CiAgICAgICA8ZWxlbWVudCByZWY9J3hlbmM6Q2lwaGVyUmVmZXJlbmNlJy8+CiAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgoKICAgPGVsZW1lbnQgbmFtZT0nQ2lwaGVyUmVmZXJlbmNlJyB0eXBlPSd4ZW5jOkNpcGhlclJlZmVyZW5jZVR5cGUnLz4KICAgPGNvbXBsZXhUeXBlIG5hbWU9J0NpcGhlclJlZmVyZW5jZVR5cGUnPgogICAgICAgPGNob2ljZT4KICAgICAgICAgPGVsZW1lbnQgbmFtZT0nVHJhbnNmb3JtcycgdHlwZT0neGVuYzpUcmFuc2Zvcm1zVHlwZScgbWluT2NjdXJzPScwJy8+CiAgICAgICA8L2Nob2ljZT4KICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nVVJJJyB0eXBlPSdhbnlVUkknIHVzZT0ncmVxdWlyZWQnLz4KICAgPC9jb21wbGV4VHlwZT4KCiAgICAgPGNvbXBsZXhUeXBlIG5hbWU9J1RyYW5zZm9ybXNUeXBlJz4KICAgICAgIDxzZXF1ZW5jZT4KICAgICAgICAgPGVsZW1lbnQgcmVmPSdkczpUcmFuc2Zvcm0nIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+CiAgICAgICA8L3NlcXVlbmNlPgogICAgIDwvY29tcGxleFR5cGU+CgoKICA8ZWxlbWVudCBuYW1lPSdFbmNyeXB0ZWREYXRhJyB0eXBlPSd4ZW5jOkVuY3J5cHRlZERhdGFUeXBlJy8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRlZERhdGFUeXBlJz4KICAgIDxjb21wbGV4Q29udGVudD4KICAgICAgPGV4dGVuc2lvbiBiYXNlPSd4ZW5jOkVuY3J5cHRlZFR5cGUnPgogICAgICAgPC9leHRlbnNpb24+CiAgICA8L2NvbXBsZXhDb250ZW50PgogIDwvY29tcGxleFR5cGU+CgogIDwhLS0gQ2hpbGRyZW4gb2YgZHM6S2V5SW5mbyAtLT4KCiAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGVkS2V5JyB0eXBlPSd4ZW5jOkVuY3J5cHRlZEtleVR5cGUnLz4KICA8Y29tcGxleFR5cGUgbmFtZT0nRW5jcnlwdGVkS2V5VHlwZSc+CiAgICA8Y29tcGxleENvbnRlbnQ+CiAgICAgIDxleHRlbnNpb24gYmFzZT0neGVuYzpFbmNyeXB0ZWRUeXBlJz4KICAgICAgICA8c2VxdWVuY2U+CiAgICAgICAgICA8ZWxlbWVudCByZWY9J3hlbmM6UmVmZXJlbmNlTGlzdCcgbWluT2NjdXJzPScwJy8+CiAgICAgICAgICA8ZWxlbWVudCBuYW1lPSdDYXJyaWVkS2V5TmFtZScgdHlwZT0nc3RyaW5nJyBtaW5PY2N1cnM9JzAnLz4KICAgICAgICA8L3NlcXVlbmNlPgogICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nUmVjaXBpZW50JyB0eXBlPSdzdHJpbmcnCiAgICAgICAgIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPC9leHRlbnNpb24+CiAgICA8L2NvbXBsZXhDb250ZW50PgogIDwvY29tcGxleFR5cGU+CgogICAgPGVsZW1lbnQgbmFtZT0iQWdyZWVtZW50TWV0aG9kIiB0eXBlPSJ4ZW5jOkFncmVlbWVudE1ldGhvZFR5cGUiLz4KICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBZ3JlZW1lbnRNZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgICAgIDxzZXF1ZW5jZT4KICAgICAgICA8ZWxlbWVudCBuYW1lPSJLQS1Ob25jZSIgbWluT2NjdXJzPSIwIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KICAgICAgICA8IS0tIDxlbGVtZW50IHJlZj0iZHM6RGlnZXN0TWV0aG9kIiBtaW5PY2N1cnM9IjAiLz4gLS0+CiAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICA8ZWxlbWVudCBuYW1lPSJPcmlnaW5hdG9yS2V5SW5mbyIgbWluT2NjdXJzPSIwIiB0eXBlPSJkczpLZXlJbmZvVHlwZSIvPgogICAgICAgIDxlbGVtZW50IG5hbWU9IlJlY2lwaWVudEtleUluZm8iIG1pbk9jY3Vycz0iMCIgdHlwZT0iZHM6S2V5SW5mb1R5cGUiLz4KICAgICAgPC9zZXF1ZW5jZT4KICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgogICAgPC9jb21wbGV4VHlwZT4KCiAgPCEtLSBFbmQgQ2hpbGRyZW4gb2YgZHM6S2V5SW5mbyAtLT4KCiAgPGVsZW1lbnQgbmFtZT0nUmVmZXJlbmNlTGlzdCc+CiAgICA8Y29tcGxleFR5cGU+CiAgICAgIDxjaG9pY2UgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCc+CiAgICAgICAgPGVsZW1lbnQgbmFtZT0nRGF0YVJlZmVyZW5jZScgdHlwZT0neGVuYzpSZWZlcmVuY2VUeXBlJy8+CiAgICAgICAgPGVsZW1lbnQgbmFtZT0nS2V5UmVmZXJlbmNlJyB0eXBlPSd4ZW5jOlJlZmVyZW5jZVR5cGUnLz4KICAgICAgPC9jaG9pY2U+CiAgICA8L2NvbXBsZXhUeXBlPgogIDwvZWxlbWVudD4KCiAgPGNvbXBsZXhUeXBlIG5hbWU9J1JlZmVyZW5jZVR5cGUnPgogICAgPHNlcXVlbmNlPgogICAgICA8YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgogICAgPC9zZXF1ZW5jZT4KICAgIDxhdHRyaWJ1dGUgbmFtZT0nVVJJJyB0eXBlPSdhbnlVUkknIHVzZT0ncmVxdWlyZWQnLz4KICA8L2NvbXBsZXhUeXBlPgoKCiAgPGVsZW1lbnQgbmFtZT0nRW5jcnlwdGlvblByb3BlcnRpZXMnIHR5cGU9J3hlbmM6RW5jcnlwdGlvblByb3BlcnRpZXNUeXBlJy8+CiAgPGNvbXBsZXhUeXBlIG5hbWU9J0VuY3J5cHRpb25Qcm9wZXJ0aWVzVHlwZSc+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IHJlZj0neGVuYzpFbmNyeXB0aW9uUHJvcGVydHknIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+CiAgICA8L3NlcXVlbmNlPgogICAgPGF0dHJpYnV0ZSBuYW1lPSdJZCcgdHlwZT0nSUQnIHVzZT0nb3B0aW9uYWwnLz4KICA8L2NvbXBsZXhUeXBlPgoKICAgIDxlbGVtZW50IG5hbWU9J0VuY3J5cHRpb25Qcm9wZXJ0eScgdHlwZT0neGVuYzpFbmNyeXB0aW9uUHJvcGVydHlUeXBlJy8+CiAgICA8Y29tcGxleFR5cGUgbmFtZT0nRW5jcnlwdGlvblByb3BlcnR5VHlwZScgbWl4ZWQ9J3RydWUnPgogICAgICA8Y2hvaWNlIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KICAgICAgICA8YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdsYXgnLz4KICAgICAgPC9jaG9pY2U+CiAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nVGFyZ2V0JyB0eXBlPSdhbnlVUkknIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdJZCcgdHlwZT0nSUQnIHVzZT0nb3B0aW9uYWwnLz4KICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIvPgogICAgPC9jb21wbGV4VHlwZT4KCjwvc2NoZW1hPgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xml.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0nMS4wJz8+Cjw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iLi4vMjAwOC8wOS94c2QueHNsIiB0eXBlPSJ0ZXh0L3hzbCI/Pgo8eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAogIHhtbG5zICAgPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgogIHhtbDpsYW5nPSJlbiI+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXY+CiAgICA8aDE+QWJvdXQgdGhlIFhNTCBuYW1lc3BhY2U8L2gxPgoKICAgIDxkaXYgY2xhc3M9ImJvZHl0ZXh0Ij4KICAgICA8cD4KICAgICAgVGhpcyBzY2hlbWEgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBYTUwgbmFtZXNwYWNlLCBpbiBhIGZvcm0KICAgICAgc3VpdGFibGUgZm9yIGltcG9ydCBieSBvdGhlciBzY2hlbWEgZG9jdW1lbnRzLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIj4KICAgICAgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWw8L2E+IGFuZAogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIj4KICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbDwvYT4gZm9yIGluZm9ybWF0aW9uIAogICAgICBhYm91dCB0aGlzIG5hbWVzcGFjZS4KICAgICA8L3A+CiAgICAgPHA+CiAgICAgIE5vdGUgdGhhdCBsb2NhbCBuYW1lcyBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgaW50ZW5kZWQgdG8gYmUKICAgICAgZGVmaW5lZCBvbmx5IGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIG9yIGl0cyBzdWJncm91cHMuCiAgICAgIFRoZSBuYW1lcyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgbGlzdGVkIGJlbG93LgogICAgICBUaGV5IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGNvbmZsaWN0aW5nIHNlbWFudGljcyBieSBhbnkgV29ya2luZwogICAgICBHcm91cCwgc3BlY2lmaWNhdGlvbiwgb3IgZG9jdW1lbnQgaW5zdGFuY2UuCiAgICAgPC9wPgogICAgIDxwPiAgIAogICAgICBTZWUgZnVydGhlciBiZWxvdyBpbiB0aGlzIGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDxhCiAgICAgIGhyZWY9IiN1c2FnZSI+aG93IHRvIHJlZmVyIHRvIHRoaXMgc2NoZW1hIGRvY3VtZW50IGZyb20geW91ciBvd24KICAgICAgWFNEIHNjaGVtYSBkb2N1bWVudHM8L2E+IGFuZCBhYm91dCA8YSBocmVmPSIjbnN2ZXJzaW9uaW5nIj50aGUKICAgICAgbmFtZXNwYWNlLXZlcnNpb25pbmcgcG9saWN5IGdvdmVybmluZyB0aGlzIHNjaGVtYSBkb2N1bWVudDwvYT4uCiAgICAgPC9wPgogICAgPC9kaXY+CiAgIDwvZGl2PgogIDwveHM6ZG9jdW1lbnRhdGlvbj4KIDwveHM6YW5ub3RhdGlvbj4KCiA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciPgogIDx4czphbm5vdGF0aW9uPgogICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgIDxkaXY+CiAgICAgCiAgICAgIDxoMz5sYW5nIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk8L2gzPgogICAgICA8cD4KICAgICAgIGRlbm90ZXMgYW4gYXR0cmlidXRlIHdob3NlIHZhbHVlCiAgICAgICBpcyBhIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBuYXR1cmFsIGxhbmd1YWdlIG9mIHRoZSBjb250ZW50IG9mCiAgICAgICBhbnkgZWxlbWVudDsgaXRzIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZAogICAgICAgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICA8L2Rpdj4KICAgIDxkaXY+CiAgICAgPGg0Pk5vdGVzPC9oND4KICAgICA8cD4KICAgICAgQXR0ZW1wdGluZyB0byBpbnN0YWxsIHRoZSByZWxldmFudCBJU08gMi0gYW5kIDMtbGV0dGVyCiAgICAgIGNvZGVzIGFzIHRoZSBlbnVtZXJhdGVkIHBvc3NpYmxlIHZhbHVlcyBpcyBwcm9iYWJseSBuZXZlcgogICAgICBnb2luZyB0byBiZSBhIHJlYWxpc3RpYyBwb3NzaWJpbGl0eS4gIAogICAgIDwvcD4KICAgICA8cD4KICAgICAgU2VlIEJDUCA0NyBhdCA8YSBocmVmPSJodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9iY3AvYmNwNDcudHh0Ij4KICAgICAgIGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL2JjcC9iY3A0Ny50eHQ8L2E+CiAgICAgIGFuZCB0aGUgSUFOQSBsYW5ndWFnZSBzdWJ0YWcgcmVnaXN0cnkgYXQKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkiPgogICAgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9sYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnk8L2E+CiAgICAgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgVGhlIHVuaW9uIGFsbG93cyBmb3IgdGhlICd1bi1kZWNsYXJhdGlvbicgb2YgeG1sOmxhbmcgd2l0aAogICAgICB0aGUgZW1wdHkgc3RyaW5nLgogICAgIDwvcD4KICAgIDwvZGl2PgogICA8L3hzOmRvY3VtZW50YXRpb24+CiAgPC94czphbm5vdGF0aW9uPgogIDx4czpzaW1wbGVUeXBlPgogICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOmxhbmd1YWdlIj4KICAgIDx4czpzaW1wbGVUeXBlPiAgICAKICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIiLz4KICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgPC94czpzaW1wbGVUeXBlPgogICA8L3hzOnVuaW9uPgogIDwveHM6c2ltcGxlVHlwZT4KIDwveHM6YXR0cmlidXRlPgoKIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2UiPgogIDx4czphbm5vdGF0aW9uPgogICA8eHM6ZG9jdW1lbnRhdGlvbj4KICAgIDxkaXY+CiAgICAgCiAgICAgIDxoMz5zcGFjZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpPC9oMz4KICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZQogICAgICAgdmFsdWUgaXMgYSBrZXl3b3JkIGluZGljYXRpbmcgd2hhdCB3aGl0ZXNwYWNlIHByb2Nlc3NpbmcKICAgICAgIGRpc2NpcGxpbmUgaXMgaW50ZW5kZWQgZm9yIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50OyBpdHMKICAgICAgIHZhbHVlIGlzIGluaGVyaXRlZC4gIFRoaXMgbmFtZSBpcyByZXNlcnZlZCBieSB2aXJ0dWUgb2YgaXRzCiAgICAgICBkZWZpbml0aW9uIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICA8L2Rpdj4KICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KICA8eHM6c2ltcGxlVHlwZT4KICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+CiAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlZmF1bHQiLz4KICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KICAgPC94czpyZXN0cmljdGlvbj4KICA8L3hzOnNpbXBsZVR5cGU+CiA8L3hzOmF0dHJpYnV0ZT4KIAogPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czphbnlVUkkiPiA8eHM6YW5ub3RhdGlvbj4KICAgPHhzOmRvY3VtZW50YXRpb24+CiAgICA8ZGl2PgogICAgIAogICAgICA8aDM+YmFzZSAoYXMgYW4gYXR0cmlidXRlIG5hbWUpPC9oMz4KICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQogICAgICAgcHJvdmlkZXMgYSBVUkkgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW50ZXJwcmV0aW5nIGFueQogICAgICAgcmVsYXRpdmUgVVJJcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggaXQKICAgICAgIGFwcGVhcnM7IGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQuICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQKICAgICAgIGJ5IHZpcnR1ZSBvZiBpdHMgZGVmaW5pdGlvbiBpbiB0aGUgWE1MIEJhc2Ugc3BlY2lmaWNhdGlvbi48L3A+CiAgICAgCiAgICAgPHA+CiAgICAgIFNlZSA8YQogICAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxiYXNlLyI+aHR0cDovL3d3dy53My5vcmcvVFIveG1sYmFzZS88L2E+CiAgICAgIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGF0dHJpYnV0ZS4KICAgICA8L3A+CiAgICA8L2Rpdj4KICAgPC94czpkb2N1bWVudGF0aW9uPgogIDwveHM6YW5ub3RhdGlvbj4KIDwveHM6YXR0cmlidXRlPgogCiA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCI+CiAgPHhzOmFubm90YXRpb24+CiAgIDx4czpkb2N1bWVudGF0aW9uPgogICAgPGRpdj4KICAgICAKICAgICAgPGgzPmlkIChhcyBhbiBhdHRyaWJ1dGUgbmFtZSk8L2gzPiAKICAgICAgPHA+CiAgICAgICBkZW5vdGVzIGFuIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZQogICAgICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGlmIGRlY2xhcmVkIHRvIGJlIG9mIHR5cGUgSUQuCiAgICAgICBUaGlzIG5hbWUgaXMgcmVzZXJ2ZWQgYnkgdmlydHVlIG9mIGl0cyBkZWZpbml0aW9uIGluIHRoZQogICAgICAgeG1sOmlkIHNwZWNpZmljYXRpb24uPC9wPgogICAgIAogICAgIDxwPgogICAgICBTZWUgPGEKICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWlkLyI+aHR0cDovL3d3dy53My5vcmcvVFIveG1sLWlkLzwvYT4KICAgICAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYXR0cmlidXRlLgogICAgIDwvcD4KICAgIDwvZGl2PgogICA8L3hzOmRvY3VtZW50YXRpb24+CiAgPC94czphbm5vdGF0aW9uPgogPC94czphdHRyaWJ1dGU+CgogPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNwZWNpYWxBdHRycyI+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+CiAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIvPgogIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6aWQiLz4KIDwveHM6YXR0cmlidXRlR3JvdXA+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXY+CiAgIAogICAgPGgzPkZhdGhlciAoaW4gYW55IGNvbnRleHQgYXQgYWxsKTwvaDM+IAoKICAgIDxkaXYgY2xhc3M9ImJvZHl0ZXh0Ij4KICAgICA8cD4KICAgICAgZGVub3RlcyBKb24gQm9zYWssIHRoZSBjaGFpciBvZiAKICAgICAgdGhlIG9yaWdpbmFsIFhNTCBXb3JraW5nIEdyb3VwLiAgVGhpcyBuYW1lIGlzIHJlc2VydmVkIGJ5IAogICAgICB0aGUgZm9sbG93aW5nIGRlY2lzaW9uIG9mIHRoZSBXM0MgWE1MIFBsZW5hcnkgYW5kIAogICAgICBYTUwgQ29vcmRpbmF0aW9uIGdyb3VwczoKICAgICA8L3A+CiAgICAgPGJsb2NrcXVvdGU+CiAgICAgICA8cD4KCUluIGFwcHJlY2lhdGlvbiBmb3IgaGlzIHZpc2lvbiwgbGVhZGVyc2hpcCBhbmQKCWRlZGljYXRpb24gdGhlIFczQyBYTUwgUGxlbmFyeSBvbiB0aGlzIDEwdGggZGF5IG9mCglGZWJydWFyeSwgMjAwMCwgcmVzZXJ2ZXMgZm9yIEpvbiBCb3NhayBpbiBwZXJwZXR1aXR5Cgl0aGUgWE1MIG5hbWUgInhtbDpGYXRoZXIiLgogICAgICAgPC9wPgogICAgIDwvYmxvY2txdW90ZT4KICAgIDwvZGl2PgogICA8L2Rpdj4KICA8L3hzOmRvY3VtZW50YXRpb24+CiA8L3hzOmFubm90YXRpb24+CgogPHhzOmFubm90YXRpb24+CiAgPHhzOmRvY3VtZW50YXRpb24+CiAgIDxkaXYgeG1sOmlkPSJ1c2FnZSIgaWQ9InVzYWdlIj4KICAgIDxoMj48YSBuYW1lPSJ1c2FnZSI+QWJvdXQgdGhpcyBzY2hlbWEgZG9jdW1lbnQ8L2E+PC9oMj4KCiAgICA8ZGl2IGNsYXNzPSJib2R5dGV4dCI+CiAgICAgPHA+CiAgICAgIFRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwIHN1aXRhYmxlCiAgICAgIGZvciB1c2UgYnkgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IDxjb2RlPnhtbDpiYXNlPC9jb2RlPiwKICAgICAgPGNvZGU+eG1sOmxhbmc8L2NvZGU+LCA8Y29kZT54bWw6c3BhY2U8L2NvZGU+IG9yCiAgICAgIDxjb2RlPnhtbDppZDwvY29kZT4gYXR0cmlidXRlcyBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KICAgICA8L3A+CiAgICAgPHA+CiAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hIGZvcgogICAgICB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgogICAgIDwvcD4KICAgICA8cHJlPgogICAgICAgICAgJmx0O3NjaGVtYSAuIC4gLj4KICAgICAgICAgICAuIC4gLgogICAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCiAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+CiAgICAgPC9wcmU+CiAgICAgPHA+CiAgICAgIG9yCiAgICAgPC9wPgogICAgIDxwcmU+CiAgICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2QiLz4KICAgICA8L3ByZT4KICAgICA8cD4KICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcyBvciB0aGUKICAgICAgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCiAgICAgPC9wPgogICAgIDxwcmU+CiAgICAgICAgICAmbHQ7dHlwZSAuIC4gLj4KICAgICAgICAgICAuIC4gLgogICAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLz4KICAgICA8L3ByZT4KICAgICA8cD4KICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlIGVsZW1lbnQKICAgICAgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlcy4KICAgICA8L3A+CiAgICA8L2Rpdj4KICAgPC9kaXY+CiAgPC94czpkb2N1bWVudGF0aW9uPgogPC94czphbm5vdGF0aW9uPgoKIDx4czphbm5vdGF0aW9uPgogIDx4czpkb2N1bWVudGF0aW9uPgogICA8ZGl2IGlkPSJuc3ZlcnNpb25pbmciIHhtbDppZD0ibnN2ZXJzaW9uaW5nIj4KICAgIDxoMj48YSBuYW1lPSJuc3ZlcnNpb25pbmciPlZlcnNpb25pbmcgcG9saWN5IGZvciB0aGlzIHNjaGVtYSBkb2N1bWVudDwvYT48L2gyPgogICAgPGRpdiBjbGFzcz0iYm9keXRleHQiPgogICAgIDxwPgogICAgICBJbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCiAgICAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0CiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDkvMDEveG1sLnhzZCI+CiAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2Q8L2E+LgogICAgIDwvcD4KICAgICA8cD4KICAgICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIj4KICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZDwvYT4uCiAgICAgPC9wPgogICAgIDxwPgogICAgICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAogICAgICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwKICAgICAgU2NoZW1hIGl0c2VsZiwgb3Igd2l0aCB0aGUgWE1MIG5hbWVzcGFjZSBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywKICAgICAgaWYgdGhlIFhNTCBTY2hlbWEgb3IgWE1MIG5hbWVzcGFjZXMgY2hhbmdlLCB0aGUgdmVyc2lvbiBvZiB0aGlzCiAgICAgIGRvY3VtZW50IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCI+CiAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QgCiAgICAgIDwvYT4gCiAgICAgIHdpbGwgY2hhbmdlIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdCAKICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMjAwOS8wMS94bWwueHNkIj4KICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDkvMDEveG1sLnhzZCAKICAgICAgPC9hPiAKICAgICAgd2lsbCBub3QgY2hhbmdlLgogICAgIDwvcD4KICAgICA8cD4KICAgICAgUHJldmlvdXMgZGF0ZWQgKGFuZCB1bmNoYW5naW5nKSB2ZXJzaW9ucyBvZiB0aGlzIHNjaGVtYSAKICAgICAgZG9jdW1lbnQgYXJlIGF0OgogICAgIDwvcD4KICAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA5LzAxL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwOS8wMS94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA3LzA4L3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwNy8wOC94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwNC8xMC94bWwueHNkPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzAzL3htbC54c2QiPgoJaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkPC9hPjwvbGk+CiAgICAgPC91bD4KICAgIDwvZGl2PgogICA8L2Rpdj4KICA8L3hzOmRvY3VtZW50YXRpb24+CiA8L3hzOmFubm90YXRpb24+Cgo8L3hzOnNjaGVtYT4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/schemas/xmldsig-core-schema.xsd</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KCjwhLS0gU2NoZW1hIGZvciBYTUwgU2lnbmF0dXJlcwogICAgaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIwogICAgJFJldmlzaW9uOiAxLjEgJCBvbiAkRGF0ZTogMjAwMi8wMi8wOCAyMDozMjoyNiAkIGJ5ICRBdXRob3I6IHJlYWdsZSAkCgogICAgQ29weXJpZ2h0IDIwMDEgVGhlIEludGVybmV0IFNvY2lldHkgYW5kIFczQyAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUKICAgIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KICAgIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KCiAgICBUaGlzIGRvY3VtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBXM0MgU29mdHdhcmUgTGljZW5zZSBbMV0gYXMgZGVzY3JpYmVkCiAgICBpbiB0aGUgRkFRIFsyXS4KCiAgICBbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjAKICAgIFsyXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL0lQUi1GQVEtMjAwMDA2MjAuaHRtbCNEVEQKLS0+CgoKPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgICAgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCiAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgogICAgICAgIHZlcnNpb249IjAuMSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPiAKCjwhLS0gQmFzaWMgVHlwZXMgRGVmaW5lZCBmb3IgU2lnbmF0dXJlcyAtLT4KCjxzaW1wbGVUeXBlIG5hbWU9IkNyeXB0b0JpbmFyeSI+CiAgPHJlc3RyaWN0aW9uIGJhc2U9ImJhc2U2NEJpbmFyeSI+CiAgPC9yZXN0cmljdGlvbj4KPC9zaW1wbGVUeXBlPgoKPCEtLSBTdGFydCBTaWduYXR1cmUgLS0+Cgo8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmUiIHR5cGU9ImRzOlNpZ25hdHVyZVR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVR5cGUiPgogIDxzZXF1ZW5jZT4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25lZEluZm8iLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVZhbHVlIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIiBtaW5PY2N1cnM9IjAiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOk9iamVjdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKICA8L3NlcXVlbmNlPiAgCiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlVmFsdWUiIHR5cGU9ImRzOlNpZ25hdHVyZVZhbHVlVHlwZSIvPiAKICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlVmFsdWVUeXBlIj4KICAgIDxzaW1wbGVDb250ZW50PgogICAgICA8ZXh0ZW5zaW9uIGJhc2U9ImJhc2U2NEJpbmFyeSI+CiAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KICAgICAgPC9leHRlbnNpb24+CiAgICA8L3NpbXBsZUNvbnRlbnQ+CiAgPC9jb21wbGV4VHlwZT4KCjwhLS0gU3RhcnQgU2lnbmVkSW5mbyAtLT4KCjxlbGVtZW50IG5hbWU9IlNpZ25lZEluZm8iIHR5cGU9ImRzOlNpZ25lZEluZm9UeXBlIi8+Cjxjb21wbGV4VHlwZSBuYW1lPSJTaWduZWRJbmZvVHlwZSI+CiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlTWV0aG9kIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAogIDwvc2VxdWVuY2U+ICAKICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iQ2Fub25pY2FsaXphdGlvbk1ldGhvZCIgdHlwZT0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZFR5cGUiLz4gCiAgPGNvbXBsZXhUeXBlIG5hbWU9IkNhbm9uaWNhbGl6YXRpb25NZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICA8IS0tICgwLHVuYm91bmRlZCkgZWxlbWVudHMgZnJvbSAoMSwxKSBuYW1lc3BhY2UgLS0+CiAgICA8L3NlcXVlbmNlPgogICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKICA8L2NvbXBsZXhUeXBlPgoKICA8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVNZXRob2QiIHR5cGU9ImRzOlNpZ25hdHVyZU1ldGhvZFR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlTWV0aG9kVHlwZSIgbWl4ZWQ9InRydWUiPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCBuYW1lPSJITUFDT3V0cHV0TGVuZ3RoIiBtaW5PY2N1cnM9IjAiIHR5cGU9ImRzOkhNQUNPdXRwdXRMZW5ndGhUeXBlIi8+CiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICAgIDwhLS0gKDAsdW5ib3VuZGVkKSBlbGVtZW50cyBmcm9tICgxLDEpIGV4dGVybmFsIG5hbWVzcGFjZSAtLT4KICAgIDwvc2VxdWVuY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAogIDwvY29tcGxleFR5cGU+Cgo8IS0tIFN0YXJ0IFJlZmVyZW5jZSAtLT4KCjxlbGVtZW50IG5hbWU9IlJlZmVyZW5jZSIgdHlwZT0iZHM6UmVmZXJlbmNlVHlwZSIvPgo8Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZSI+CiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6VHJhbnNmb3JtcyIgbWluT2NjdXJzPSIwIi8+IAogICAgPGVsZW1lbnQgcmVmPSJkczpEaWdlc3RNZXRob2QiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOkRpZ2VzdFZhbHVlIi8+IAogIDwvc2VxdWVuY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCiAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iVHJhbnNmb3JtcyIgdHlwZT0iZHM6VHJhbnNmb3Jtc1R5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3Jtc1R5cGUiPgogICAgPHNlcXVlbmNlPgogICAgICA8ZWxlbWVudCByZWY9ImRzOlRyYW5zZm9ybSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gIAogICAgPC9zZXF1ZW5jZT4KICA8L2NvbXBsZXhUeXBlPgoKICA8ZWxlbWVudCBuYW1lPSJUcmFuc2Zvcm0iIHR5cGU9ImRzOlRyYW5zZm9ybVR5cGUiLz4KICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3JtVHlwZSIgbWl4ZWQ9InRydWUiPgogICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4gCiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgogICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgogICAgICA8ZWxlbWVudCBuYW1lPSJYUGF0aCIgdHlwZT0ic3RyaW5nIi8+IAogICAgPC9jaG9pY2U+CiAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAogIDwvY29tcGxleFR5cGU+Cgo8IS0tIEVuZCBSZWZlcmVuY2UgLS0+Cgo8ZWxlbWVudCBuYW1lPSJEaWdlc3RNZXRob2QiIHR5cGU9ImRzOkRpZ2VzdE1ldGhvZFR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IkRpZ2VzdE1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4gCiAgPHNlcXVlbmNlPgogICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgPC9zZXF1ZW5jZT4gICAgCiAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKPC9jb21wbGV4VHlwZT4KCjxlbGVtZW50IG5hbWU9IkRpZ2VzdFZhbHVlIiB0eXBlPSJkczpEaWdlc3RWYWx1ZVR5cGUiLz4KPHNpbXBsZVR5cGUgbmFtZT0iRGlnZXN0VmFsdWVUeXBlIj4KICA8cmVzdHJpY3Rpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ii8+Cjwvc2ltcGxlVHlwZT4KCjwhLS0gRW5kIFNpZ25lZEluZm8gLS0+Cgo8IS0tIFN0YXJ0IEtleUluZm8gLS0+Cgo8ZWxlbWVudCBuYW1lPSJLZXlJbmZvIiB0eXBlPSJkczpLZXlJbmZvVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9IktleUluZm9UeXBlIiBtaXhlZD0idHJ1ZSI+CiAgPGNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+ICAgICAKICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5TmFtZSIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5VmFsdWUiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlJldHJpZXZhbE1ldGhvZCIvPiAKICAgIDxlbGVtZW50IHJlZj0iZHM6WDUwOURhdGEiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlBHUERhdGEiLz4gCiAgICA8ZWxlbWVudCByZWY9ImRzOlNQS0lEYXRhIi8+CiAgICA8ZWxlbWVudCByZWY9ImRzOk1nbXREYXRhIi8+CiAgICA8YW55IHByb2Nlc3NDb250ZW50cz0ibGF4IiBuYW1lc3BhY2U9IiMjb3RoZXIiLz4KICAgIDwhLS0gKDEsMSkgZWxlbWVudHMgZnJvbSAoMCx1bmJvdW5kZWQpIG5hbWVzcGFjZXMgLS0+CiAgPC9jaG9pY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCjwvY29tcGxleFR5cGU+CgogIDxlbGVtZW50IG5hbWU9IktleU5hbWUiIHR5cGU9InN0cmluZyIvPgogIDxlbGVtZW50IG5hbWU9Ik1nbXREYXRhIiB0eXBlPSJzdHJpbmciLz4KCiAgPGVsZW1lbnQgbmFtZT0iS2V5VmFsdWUiIHR5cGU9ImRzOktleVZhbHVlVHlwZSIvPiAKICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5VmFsdWVUeXBlIiBtaXhlZD0idHJ1ZSI+CiAgIDxjaG9pY2U+CiAgICAgPGVsZW1lbnQgcmVmPSJkczpEU0FLZXlWYWx1ZSIvPgogICAgIDxlbGVtZW50IHJlZj0iZHM6UlNBS2V5VmFsdWUiLz4KICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICAgPC9jaG9pY2U+CiAgPC9jb21wbGV4VHlwZT4KCiAgPGVsZW1lbnQgbmFtZT0iUmV0cmlldmFsTWV0aG9kIiB0eXBlPSJkczpSZXRyaWV2YWxNZXRob2RUeXBlIi8+IAogIDxjb21wbGV4VHlwZSBuYW1lPSJSZXRyaWV2YWxNZXRob2RUeXBlIj4KICAgIDxzZXF1ZW5jZT4KICAgICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4gCiAgICA8L3NlcXVlbmNlPiAgCiAgICA8YXR0cmlidXRlIG5hbWU9IlVSSSIgdHlwZT0iYW55VVJJIi8+CiAgICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgogIDwvY29tcGxleFR5cGU+Cgo8IS0tIFN0YXJ0IFg1MDlEYXRhIC0tPgoKPGVsZW1lbnQgbmFtZT0iWDUwOURhdGEiIHR5cGU9ImRzOlg1MDlEYXRhVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlEYXRhVHlwZSI+CiAgPHNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgIDxjaG9pY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWwiIHR5cGU9ImRzOlg1MDlJc3N1ZXJTZXJpYWxUeXBlIi8+CiAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlTS0kiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U3ViamVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q2VydGlmaWNhdGUiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q1JMIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICA8L2Nob2ljZT4KICA8L3NlcXVlbmNlPgo8L2NvbXBsZXhUeXBlPgoKPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWxUeXBlIj4gCiAgPHNlcXVlbmNlPiAKICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJOYW1lIiB0eXBlPSJzdHJpbmciLz4gCiAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U2VyaWFsTnVtYmVyIiB0eXBlPSJzdHJpbmciLz4gCiAgPC9zZXF1ZW5jZT4KPC9jb21wbGV4VHlwZT4KCjwhLS0gRW5kIFg1MDlEYXRhIC0tPgoKPCEtLSBCZWdpbiBQR1BEYXRhIC0tPgoKPGVsZW1lbnQgbmFtZT0iUEdQRGF0YSIgdHlwZT0iZHM6UEdQRGF0YVR5cGUiLz4gCjxjb21wbGV4VHlwZSBuYW1lPSJQR1BEYXRhVHlwZSI+IAogIDxjaG9pY2U+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleUlEIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4gCiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleVBhY2tldCIgdHlwZT0iYmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4gCiAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgogICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8c2VxdWVuY2U+CiAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleVBhY2tldCIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+IAogICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CiAgICA8L3NlcXVlbmNlPgogIDwvY2hvaWNlPgo8L2NvbXBsZXhUeXBlPgoKPCEtLSBFbmQgUEdQRGF0YSAtLT4KCjwhLS0gQmVnaW4gU1BLSURhdGEgLS0+Cgo8ZWxlbWVudCBuYW1lPSJTUEtJRGF0YSIgdHlwZT0iZHM6U1BLSURhdGFUeXBlIi8+IAo8Y29tcGxleFR5cGUgbmFtZT0iU1BLSURhdGFUeXBlIj4KICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgPGVsZW1lbnQgbmFtZT0iU1BLSVNleHAiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgogICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiLz4KICA8L3NlcXVlbmNlPgo8L2NvbXBsZXhUeXBlPiAKCjwhLS0gRW5kIFNQS0lEYXRhIC0tPgoKPCEtLSBFbmQgS2V5SW5mbyAtLT4KCjwhLS0gU3RhcnQgT2JqZWN0IChNYW5pZmVzdCwgU2lnbmF0dXJlUHJvcGVydHkpIC0tPgoKPGVsZW1lbnQgbmFtZT0iT2JqZWN0IiB0eXBlPSJkczpPYmplY3RUeXBlIi8+IAo8Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0VHlwZSIgbWl4ZWQ9InRydWUiPgogIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KICA8L3NlcXVlbmNlPgogIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IAogIDxhdHRyaWJ1dGUgbmFtZT0iTWltZVR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPiA8IS0tIGFkZCBhIGdyZXAgZmFjZXQgLS0+CiAgPGF0dHJpYnV0ZSBuYW1lPSJFbmNvZGluZyIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+IAo8L2NvbXBsZXhUeXBlPgoKPGVsZW1lbnQgbmFtZT0iTWFuaWZlc3QiIHR5cGU9ImRzOk1hbmlmZXN0VHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9Ik1hbmlmZXN0VHlwZSI+CiAgPHNlcXVlbmNlPgogICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAogIDwvc2VxdWVuY2U+CiAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCjwvY29tcGxleFR5cGU+Cgo8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0aWVzIiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0aWVzVHlwZSIvPiAKPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnRpZXNUeXBlIj4KICA8c2VxdWVuY2U+CiAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVByb3BlcnR5IiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKICA8L3NlcXVlbmNlPgogIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IAo8L2NvbXBsZXhUeXBlPgoKICAgPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlUHJvcGVydHkiIHR5cGU9ImRzOlNpZ25hdHVyZVByb3BlcnR5VHlwZSIvPiAKICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5VHlwZSIgbWl4ZWQ9InRydWUiPgogICAgIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CiAgICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDEsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgogICAgIDwvY2hvaWNlPgogICAgIDxhdHRyaWJ1dGUgbmFtZT0iVGFyZ2V0IiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4gCiAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCiAgIDwvY29tcGxleFR5cGU+Cgo8IS0tIEVuZCBPYmplY3QgKE1hbmlmZXN0LCBTaWduYXR1cmVQcm9wZXJ0eSkgLS0+Cgo8IS0tIFN0YXJ0IEFsZ29yaXRobSBQYXJhbWV0ZXJzIC0tPgoKPHNpbXBsZVR5cGUgbmFtZT0iSE1BQ091dHB1dExlbmd0aFR5cGUiPgogIDxyZXN0cmljdGlvbiBiYXNlPSJpbnRlZ2VyIi8+Cjwvc2ltcGxlVHlwZT4KCjwhLS0gU3RhcnQgS2V5VmFsdWUgRWxlbWVudC10eXBlcyAtLT4KCjxlbGVtZW50IG5hbWU9IkRTQUtleVZhbHVlIiB0eXBlPSJkczpEU0FLZXlWYWx1ZVR5cGUiLz4KPGNvbXBsZXhUeXBlIG5hbWU9IkRTQUtleVZhbHVlVHlwZSI+CiAgPHNlcXVlbmNlPgogICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgIDxlbGVtZW50IG5hbWU9IlAiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJRIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4KICAgIDwvc2VxdWVuY2U+CiAgICA8ZWxlbWVudCBuYW1lPSJHIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiIG1pbk9jY3Vycz0iMCIvPgogICAgPGVsZW1lbnQgbmFtZT0iWSIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+CiAgICA8ZWxlbWVudCBuYW1lPSJKIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiIG1pbk9jY3Vycz0iMCIvPgogICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgIDxlbGVtZW50IG5hbWU9IlNlZWQiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgogICAgICA8ZWxlbWVudCBuYW1lPSJQZ2VuQ291bnRlciIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+CiAgICA8L3NlcXVlbmNlPgogIDwvc2VxdWVuY2U+CjwvY29tcGxleFR5cGU+Cgo8ZWxlbWVudCBuYW1lPSJSU0FLZXlWYWx1ZSIgdHlwZT0iZHM6UlNBS2V5VmFsdWVUeXBlIi8+Cjxjb21wbGV4VHlwZSBuYW1lPSJSU0FLZXlWYWx1ZVR5cGUiPgogIDxzZXF1ZW5jZT4KICAgIDxlbGVtZW50IG5hbWU9Ik1vZHVsdXMiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPiAKICAgIDxlbGVtZW50IG5hbWU9IkV4cG9uZW50IiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4gCiAgPC9zZXF1ZW5jZT4KPC9jb21wbGV4VHlwZT4gCgo8IS0tIEVuZCBLZXlWYWx1ZSBFbGVtZW50LXR5cGVzIC0tPgoKPCEtLSBFbmQgU2lnbmF0dXJlIC0tPgoKPC9zY2hlbWE+Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwoKdXNlIERPTURvY3VtZW50Owp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIFNBTUwgUEhQIFRvb2xraXQKICovCmNsYXNzIFNldHRpbmdzCnsKICAgIC8qKgogICAgICogTGlzdCBvZiBwYXRocy4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9wYXRocyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRfYmFzZXVybDsKCiAgICAvKioKICAgICAqIFN0cmljdC4gSWYgYWN0aXZlLCBQSFAgVG9vbGtpdCB3aWxsIHJlamVjdCB1bnNpZ25lZCBvciB1bmVuY3J5cHRlZCBtZXNzYWdlcwogICAgICogaWYgaXQgZXhwZWN0cyB0aGVtIHNpZ25lZCBvciBlbmNyeXB0ZWQuIElmIG5vdCwgdGhlIG1lc3NhZ2VzIHdpbGwgYmUgYWNjZXB0ZWQKICAgICAqIGFuZCBzb21lIHNlY3VyaXR5IGlzc3VlcyB3aWxsIGJlIGFsc28gcmVsYXhlZC4KICAgICAqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkX3N0cmljdCA9IHRydWU7CgogICAgLyoqCiAgICAgKiBBY3RpdmF0ZSBkZWJ1ZyBtb2RlCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJF9kZWJ1ZyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogU1AgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9zcCA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBJZFAgZGF0YS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9pZHAgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQ29tcHJlc3Npb24gc2V0dGluZ3MgdGhhdCBkZXRlcm1pbmUKICAgICAqIHdoZXRoZXIgZ3ppcCBjb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlZC4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJF9jb21wcmVzcyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBTZWN1cml0eSBJbmZvIHJlbGF0ZWQgdG8gdGhlIFNQLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX3NlY3VyaXR5ID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIFNldHRpbmcgY29udGFjdHMuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfY29udGFjdHMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogU2V0dGluZyBvcmdhbml6YXRpb24uCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfb3JnYW5pemF0aW9uID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIFNldHRpbmcgZXJyb3JzLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX2Vycm9ycyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBWYWxpdGF0ZSBTUCBkYXRhIG9ubHkgZmxhZwogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRfc3BWYWxpZGF0aW9uT25seSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZXMgdGhlIHNldHRpbmdzOgogICAgICogLSBTZXRzIHRoZSBwYXRocyBvZiB0aGUgZGlmZmVyZW50IGZvbGRlcnMKICAgICAqIC0gTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHNldHRpbmdzIGZpbGUgb3IgYXJyYXkvb2JqZWN0IHByb3ZpZGVkCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHNldHRpbmdzICAgICAgICAgU0FNTCBUb29sa2l0IFNldHRpbmdzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAkc3BWYWxpZGF0aW9uT25seSBWYWxpZGF0ZSBvciBub3QgdGhlIElkUCBkYXRhCiAgICAgKgogICAgICogQHRocm93cyBFcnJvciBJZiBhbnkgc2V0dGluZ3MgcGFyYW1ldGVyIGlzIGludmFsaWQKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIElmIFNldHRpbmdzIGlzIGluY29ycmVjdGx5IHN1cHBsaWVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/YXJyYXkgJHNldHRpbmdzID0gbnVsbCxib29sICRzcFZhbGlkYXRpb25Pbmx5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zcFZhbGlkYXRpb25Pbmx5ID0gJHNwVmFsaWRhdGlvbk9ubHk7CiAgICAgICAgJHRoaXMtPl9sb2FkUGF0aHMoKTsKCiAgICAgICAgaWYgKCFpc3NldCgkc2V0dGluZ3MpKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl9sb2FkU2V0dGluZ3NGcm9tRmlsZSgpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgZmlsZSBzZXR0aW5nczogJXMnLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19JTlZBTElELAogICAgICAgICAgICAgICAgICAgIGFycmF5KGltcGxvZGUoJywgJywgJHRoaXMtPl9lcnJvcnMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+X2FkZERlZmF1bHRWYWx1ZXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoISR0aGlzLT5fbG9hZFNldHRpbmdzRnJvbUFycmF5KCRzZXR0aW5ncykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBhcnJheSBzZXR0aW5nczogJXMnLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19JTlZBTElELAogICAgICAgICAgICAgICAgICAgIGFycmF5KGltcGxvZGUoJywgJywgJHRoaXMtPl9lcnJvcnMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmZvcm1hdElkUENlcnQoKTsKICAgICAgICAkdGhpcy0+Zm9ybWF0U1BDZXJ0KCk7CiAgICAgICAgJHRoaXMtPmZvcm1hdFNQS2V5KCk7CiAgICAgICAgJHRoaXMtPmZvcm1hdFNQQ2VydE5ldygpOwogICAgICAgICR0aGlzLT5mb3JtYXRJZFBDZXJ0TXVsdGkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHBhdGhzIG9mIHRoZSBkaWZmZXJlbnQgZm9sZGVycwogICAgICogQHN1cHByZXNzIFBoYW5VbmRlY2xhcmVkQ29uc3RhbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFBhdGhzKCkKICAgIHsKICAgICAgICAkYmFzZVBhdGggPSBkaXJuYW1lKGRpcm5hbWUoX19ESVJfXykpIC4gJy8nOwogICAgICAgICR0aGlzLT5fcGF0aHMgPSBhcnJheSgKICAgICAgICAgICAgJ2Jhc2UnID0+ICRiYXNlUGF0aCwKICAgICAgICAgICAgJ2NvbmZpZycgPT4gJGJhc2VQYXRoLAogICAgICAgICAgICAnY2VydCcgPT4gJGJhc2VQYXRoLidjZXJ0cy8nLAogICAgICAgICAgICAnbGliJyA9PiBfX0RJUl9fIC4gJy8nLAogICAgICAgICk7CgogICAgICAgIGlmIChkZWZpbmVkKCdPTkVMT0dJTl9DVVNUT01QQVRIJykpIHsKICAgICAgICAgICAgJHRoaXMtPl9wYXRoc1snY29uZmlnJ10gPSBPTkVMT0dJTl9DVVNUT01QQVRIOwogICAgICAgICAgICAkdGhpcy0+X3BhdGhzWydjZXJ0J10gPSBPTkVMT0dJTl9DVVNUT01QQVRIIC4gJ2NlcnRzLyc7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBiYXNlIHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgIFRoZSBiYXNlIHRvb2xraXQgZm9sZGVyIHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhc2VQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snYmFzZSddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjZXJ0IHBhdGguCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGNlcnQgZm9sZGVyIHBhdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snY2VydCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjb25maWcgcGF0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgY29uZmlnIGZvbGRlciBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWdQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snY29uZmlnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGxpYiBwYXRoLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBsaWJyYXJ5IGZvbGRlciBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWJQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXRoc1snbGliJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHNjaGVtYSBwYXRoLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICBUaGUgZXh0ZXJuYWwgbGlicmFyeSBmb2xkZXIgcGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1hc1BhdGgoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3BhdGhzWydzY2hlbWFzJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX0RJUl9fIC4gJy9zY2hlbWFzLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgc2NoZW1hcyBwYXRoCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2NoZW1hc1BhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9wYXRoc1snc2NoZW1hcyddID0gJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyBzZXR0aW5ncyBpbmZvIGZyb20gYSBzZXR0aW5ncyBBcnJheQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgU0FNTCBUb29sa2l0IFNldHRpbmdzCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgdmFsaWQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFNldHRpbmdzRnJvbUFycmF5KGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydzcCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NwID0gJHNldHRpbmdzWydzcCddOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydpZHAnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHAgPSAkc2V0dGluZ3NbJ2lkcCddOwogICAgICAgIH0KCiAgICAgICAgJGVycm9ycyA9ICR0aGlzLT5jaGVja1NldHRpbmdzKCRzZXR0aW5ncyk7CiAgICAgICAgaWYgKGVtcHR5KCRlcnJvcnMpKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ3N0cmljdCddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9zdHJpY3QgPSAkc2V0dGluZ3NbJ3N0cmljdCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ2RlYnVnJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHNldHRpbmdzWydkZWJ1ZyddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydiYXNldXJsJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jhc2V1cmwgPSAkc2V0dGluZ3NbJ2Jhc2V1cmwnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snY29tcHJlc3MnXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fY29tcHJlc3MgPSAkc2V0dGluZ3NbJ2NvbXByZXNzJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ3NlY3VyaXR5J10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5ID0gJHNldHRpbmdzWydzZWN1cml0eSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2NvbnRhY3RzID0gJHNldHRpbmdzWydjb250YWN0UGVyc29uJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ29yZ2FuaXphdGlvbiddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9vcmdhbml6YXRpb24gPSAkc2V0dGluZ3NbJ29yZ2FuaXphdGlvbiddOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+X2FkZERlZmF1bHRWYWx1ZXMoKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJvcnMgPSAkZXJyb3JzOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTG9hZHMgc2V0dGluZ3MgaW5mbyBmcm9tIHRoZSBzZXR0aW5ncyBmaWxlCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgdmFsaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKgogICAgICogQHN1cHByZXNzIFBoYW5VbmRlY2xhcmVkVmFyaWFibGUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZFNldHRpbmdzRnJvbUZpbGUoKQogICAgewogICAgICAgICRmaWxlbmFtZSA9ICR0aGlzLT5nZXRDb25maWdQYXRoKCkuJ3NldHRpbmdzLnBocCc7CgogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGZpbGVuYW1lKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnU2V0dGluZ3MgZmlsZSBub3QgZm91bmQ6ICVzJywKICAgICAgICAgICAgICAgIEVycm9yOjpTRVRUSU5HU19GSUxFX05PVF9GT1VORCwKICAgICAgICAgICAgICAgIGFycmF5KCRmaWxlbmFtZSkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRzZXR0aW5ncyAqLwogICAgICAgIGluY2x1ZGUgJGZpbGVuYW1lOwoKICAgICAgICAvLyBBZGQgYWR2YW5jZV9zZXR0aW5ncyBpZiBleGlzdHMKICAgICAgICAkYWR2YW5jZWRGaWxlbmFtZSA9ICR0aGlzLT5nZXRDb25maWdQYXRoKCkuJ2FkdmFuY2VkX3NldHRpbmdzLnBocCc7CgogICAgICAgIGlmIChmaWxlX2V4aXN0cygkYWR2YW5jZWRGaWxlbmFtZSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXkgJGFkdmFuY2VkU2V0dGluZ3MgKi8KICAgICAgICAgICAgaW5jbHVkZSAkYWR2YW5jZWRGaWxlbmFtZTsKICAgICAgICAgICAgJHNldHRpbmdzID0gYXJyYXlfbWVyZ2UoJHNldHRpbmdzLCAkYWR2YW5jZWRTZXR0aW5ncyk7CiAgICAgICAgfQoKCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9hZFNldHRpbmdzRnJvbUFycmF5KCRzZXR0aW5ncyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgZGVmYXVsdCB2YWx1ZXMgaWYgdGhlIHNldHRpbmdzIGluZm8gaXMgbm90IGNvbXBsZXRlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2FkZERlZmF1bHRWYWx1ZXMoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ2JpbmRpbmcnXSA9IENvbnN0YW50czo6QklORElOR19IVFRQX1BPU1Q7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmICFpc3NldCgkdGhpcy0+X3NwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ2JpbmRpbmcnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWydiaW5kaW5nJ10gPSBDb25zdGFudHM6OkJJTkRJTkdfSFRUUF9SRURJUkVDVDsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fY29tcHJlc3NbJ3Jlc3BvbnNlcyddKSkgewogICAgICAgICAgICAkdGhpcy0+X2NvbXByZXNzWydyZXNwb25zZXMnXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWxhdGVkIHRvIG5hbWVJRAogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zcFsnTmFtZUlERm9ybWF0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ05hbWVJREZvcm1hdCddID0gQ29uc3RhbnRzOjpOQU1FSURfVU5TUEVDSUZJRUQ7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnbmFtZUlkRW5jcnlwdGVkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ25hbWVJZEVuY3J5cHRlZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVxdWVzdGVkQXV0aG5Db250ZXh0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3JlcXVlc3RlZEF1dGhuQ29udGV4dCddID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIHNpZ24gcHJvdmlkZWQKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXF1ZXN0U2lnbmVkJ10gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBzaWduIGV4cGVjdGVkCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TWVzc2FnZXNTaWduZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnd2FudE1lc3NhZ2VzU2lnbmVkJ10gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBOYW1lSUQgZWxlbWVudCBleHBlY3RlZAogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TmFtZUlkJ10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVsYXggRGVzdGluYXRpb24gdmFsaWRhdGlvbgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsncmVsYXhEZXN0aW5hdGlvblZhbGlkYXRpb24nXSA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gU3RyaWN0IERlc3RpbmF0aW9uIG1hdGNoIHZhbGlkYXRpb24KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ2Rlc3RpbmF0aW9uU3RyaWN0bHlNYXRjaGVzJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEFsbG93IGR1cGxpY2F0ZWQgQXR0cmlidXRlIE5hbWVzCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5WydhbGxvd1JlcGVhdEF0dHJpYnV0ZU5hbWUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnYWxsb3dSZXBlYXRBdHRyaWJ1dGVOYW1lJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEluUmVzcG9uc2VUbwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsncmVqZWN0VW5zb2xpY2l0ZWRSZXNwb25zZXNXaXRoSW5SZXNwb25zZVRvJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3JlamVjdFVuc29saWNpdGVkUmVzcG9uc2VzV2l0aEluUmVzcG9uc2VUbyddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBlbmNyeXB0IGV4cGVjdGVkCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIFhNTCB2YWxpZGF0aW9uCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50WE1MVmFsaWRhdGlvbiddID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFNpZ25hdHVyZUFsZ29yaXRobQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbmF0dXJlQWxnb3JpdGhtJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTY7CiAgICAgICAgfQoKICAgICAgICAvLyBEaWdlc3RBbGdvcml0aG0KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ2RpZ2VzdEFsZ29yaXRobSddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5WydkaWdlc3RBbGdvcml0aG0nXSA9IFhNTFNlY3VyaXR5RFNpZzo6U0hBMjU2OwogICAgICAgIH0KCiAgICAgICAgLy8gRW5jcnlwdGlvbkFsZ29yaXRobQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnZW5jcnlwdGlvbl9hbGdvcml0aG0nXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZWN1cml0eVsnZW5jcnlwdGlvbl9hbGdvcml0aG0nXSA9IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NlY3VyaXR5Wydsb3dlcmNhc2VVcmxlbmNvZGluZyddID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBDZXJ0aWZpY2F0ZXMgLyBQcml2YXRlIGtleSAvRmluZ2VycHJpbnQKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydCddKSkgewogICAgICAgICAgICAkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSA9ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5faWRwWydjZXJ0RmluZ2VycHJpbnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHBbJ2NlcnRGaW5nZXJwcmludCddID0gJyc7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPl9pZHBbJ2NlcnRGaW5nZXJwcmludEFsZ29yaXRobSddKSkgewogICAgICAgICAgICAkdGhpcy0+X2lkcFsnY2VydEZpbmdlcnByaW50QWxnb3JpdGhtJ10gPSAnc2hhMSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ3g1MDljZXJ0J10gPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+X3NwWydwcml2YXRlS2V5J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGUgc2V0dGluZ3MgaW5mby4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNldHRpbmdzIEFycmF5IHdpdGggc2V0dGluZ3MgZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgJGVycm9ycyAgRXJyb3JzIGZvdW5kIG9uIHRoZSBzZXR0aW5ncyBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1NldHRpbmdzKGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHNldHRpbmdzKSkgewogICAgICAgICAgICAkZXJyb3JzID0gYXJyYXkoJ2ludmFsaWRfc3ludGF4Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVycm9ycyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl9zcFZhbGlkYXRpb25Pbmx5KSB7CiAgICAgICAgICAgICAgICAkaWRwRXJyb3JzID0gJHRoaXMtPmNoZWNrSWRQU2V0dGluZ3MoJHNldHRpbmdzKTsKICAgICAgICAgICAgICAgICRlcnJvcnMgPSBhcnJheV9tZXJnZSgkaWRwRXJyb3JzLCAkZXJyb3JzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3BFcnJvcnMgPSAkdGhpcy0+Y2hlY2tTUFNldHRpbmdzKCRzZXR0aW5ncyk7CiAgICAgICAgICAgICRlcnJvcnMgPSBhcnJheV9tZXJnZSgkc3BFcnJvcnMsICRlcnJvcnMpOwoKICAgICAgICAgICAgJGNvbXByZXNzRXJyb3JzID0gJHRoaXMtPmNoZWNrQ29tcHJlc3Npb25TZXR0aW5ncygkc2V0dGluZ3MpOwogICAgICAgICAgICAkZXJyb3JzID0gYXJyYXlfbWVyZ2UoJGNvbXByZXNzRXJyb3JzLCAkZXJyb3JzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXJyb3JzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRoZSBjb21wcmVzc2lvbiBzZXR0aW5ncyBpbmZvLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc2V0dGluZ3MgQXJyYXkgd2l0aCBzZXR0aW5ncyBkYXRhCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAkZXJyb3JzICBFcnJvcnMgZm91bmQgb24gdGhlIHNldHRpbmdzIGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrQ29tcHJlc3Npb25TZXR0aW5ncygkc2V0dGluZ3MpCiAgICB7CiAgICAgICAgJGVycm9ycyA9IGFycmF5KCk7CgogICAgICAgIGlmIChpc3NldCgkc2V0dGluZ3NbJ2NvbXByZXNzJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJHNldHRpbmdzWydjb21wcmVzcyddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gImludmFsaWRfc3ludGF4IjsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc3NldCgkc2V0dGluZ3NbJ2NvbXByZXNzJ11bJ3JlcXVlc3RzJ10pCiAgICAgICAgICAgICAgICAmJiAkc2V0dGluZ3NbJ2NvbXByZXNzJ11bJ3JlcXVlc3RzJ10gIT09IHRydWUKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVxdWVzdHMnXSAhPT0gZmFsc2UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAiJ2NvbXByZXNzJz0+J3JlcXVlc3RzJyB2YWx1ZXMgbXVzdCBiZSB0cnVlIG9yIGZhbHNlLiI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNzZXQoJHNldHRpbmdzWydjb21wcmVzcyddWydyZXNwb25zZXMnXSkKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVzcG9uc2VzJ10gIT09IHRydWUKICAgICAgICAgICAgICAgICYmICRzZXR0aW5nc1snY29tcHJlc3MnXVsncmVzcG9uc2VzJ10gIT09IGZhbHNlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gIidjb21wcmVzcyc9PidyZXNwb25zZXMnIHZhbHVlcyBtdXN0IGJlIHRydWUgb3IgZmFsc2UuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB0aGUgSWRQIHNldHRpbmdzIGluZm8uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZXR0aW5ncyBBcnJheSB3aXRoIHNldHRpbmdzIGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRlcnJvcnMgIEVycm9ycyBmb3VuZCBvbiB0aGUgSWRQIHNldHRpbmdzIGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrSWRQU2V0dGluZ3MoYXJyYXkgJHNldHRpbmdzKQogICAgewogICAgICAgIGlmIChlbXB0eSgkc2V0dGluZ3MpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnaW52YWxpZF9zeW50YXgnKTsKICAgICAgICB9CgogICAgICAgICRlcnJvcnMgPSBhcnJheSgpOwoKICAgICAgICBpZiAoIWlzc2V0KCRzZXR0aW5nc1snaWRwJ10pIHx8IGVtcHR5KCRzZXR0aW5nc1snaWRwJ10pKSB7CiAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfbm90X2ZvdW5kJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaWRwID0gJHNldHRpbmdzWydpZHAnXTsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaWRwWydlbnRpdHlJZCddKSB8fCBlbXB0eSgkaWRwWydlbnRpdHlJZCddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2lkcF9lbnRpdHlJZF9ub3RfZm91bmQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRpZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXSkKICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkaWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICAgICAgfHwgZW1wdHkoJGlkcFsnc2luZ2xlU2lnbk9uU2VydmljZSddWyd1cmwnXSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAnaWRwX3Nzb19ub3RfZm91bmQnOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWx0ZXJfdmFyKCRpZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXVsndXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JzW10gPSAnaWRwX3Nzb191cmxfaW52YWxpZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICAgICAgJiYgIWVtcHR5KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3ZhcigkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddLCBGSUxURVJfVkFMSURBVEVfVVJMKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfc2xvX3VybF9pbnZhbGlkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXSkKICAgICAgICAgICAgICAgICYmIGlzc2V0KCRpZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsncmVzcG9uc2VVcmwnXSkKICAgICAgICAgICAgICAgICYmICFlbXB0eSgkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3ZhcigkaWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2lkcF9zbG9fcmVzcG9uc2VfdXJsX2ludmFsaWQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXhpc3RzWDUwOSA9IGlzc2V0KCRpZHBbJ3g1MDljZXJ0J10pICYmICFlbXB0eSgkaWRwWyd4NTA5Y2VydCddKTsKICAgICAgICAgICAgJGV4aXN0c011bHRpWDUwOVNpZ24gPSBpc3NldCgkaWRwWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBbJ3g1MDljZXJ0TXVsdGknXVsnc2lnbmluZyddKSAmJiAhZW1wdHkoJGlkcFsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ10pOwogICAgICAgICAgICAkZXhpc3RzRmluZ2VycHJpbnQgPSBpc3NldCgkaWRwWydjZXJ0RmluZ2VycHJpbnQnXSkgJiYgIWVtcHR5KCRpZHBbJ2NlcnRGaW5nZXJwcmludCddKTsKICAgICAgICAgICAgaWYgKCEoJGV4aXN0c1g1MDkgfHwgJGV4aXN0c0ZpbmdlcnByaW50IHx8ICRleGlzdHNNdWx0aVg1MDlTaWduKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfY2VydF9vcl9maW5nZXJwcmludF9ub3RfZm91bmRfYW5kX3JlcXVpcmVkJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snc2VjdXJpdHknXSkpIHsKICAgICAgICAgICAgICAgICRleGlzdHNNdWx0aVg1MDlFbmMgPSBpc3NldCgkaWRwWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBbJ3g1MDljZXJ0TXVsdGknXVsnZW5jcnlwdGlvbiddKSAmJiAhZW1wdHkoJGlkcFsneDUwOWNlcnRNdWx0aSddWydlbmNyeXB0aW9uJ10pOwoKICAgICAgICAgICAgICAgIGlmICgoaXNzZXQoJHNldHRpbmdzWydzZWN1cml0eSddWyduYW1lSWRFbmNyeXB0ZWQnXSkgJiYgJHNldHRpbmdzWydzZWN1cml0eSddWyduYW1lSWRFbmNyeXB0ZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICYmICEoJGV4aXN0c1g1MDkgfHwgJGV4aXN0c011bHRpWDUwOUVuYykKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdpZHBfY2VydF9ub3RfZm91bmRfYW5kX3JlcXVpcmVkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhlIFNQIHNldHRpbmdzIGluZm8uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRzZXR0aW5ncyBBcnJheSB3aXRoIHNldHRpbmdzIGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRlcnJvcnMgIEVycm9ycyBmb3VuZCBvbiB0aGUgU1Agc2V0dGluZ3MgZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tTUFNldHRpbmdzKGFycmF5ICRzZXR0aW5ncykKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHNldHRpbmdzKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2ludmFsaWRfc3ludGF4Jyk7CiAgICAgICAgfQoKICAgICAgICAkZXJyb3JzID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCFpc3NldCgkc2V0dGluZ3NbJ3NwJ10pIHx8IGVtcHR5KCRzZXR0aW5nc1snc3AnXSkpIHsKICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX25vdF9mb3VuZCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNwID0gJHNldHRpbmdzWydzcCddOwogICAgICAgICAgICAkc2VjdXJpdHkgPSBhcnJheSgpOwogICAgICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydzZWN1cml0eSddKSkgewogICAgICAgICAgICAgICAgJHNlY3VyaXR5ID0gJHNldHRpbmdzWydzZWN1cml0eSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRzcFsnZW50aXR5SWQnXSkgfHwgZW1wdHkoJHNwWydlbnRpdHlJZCddKSkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX2VudGl0eUlkX25vdF9mb3VuZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghaXNzZXQoJHNwWydhc3NlcnRpb25Db25zdW1lclNlcnZpY2UnXSkKICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkc3BbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSkKICAgICAgICAgICAgICAgIHx8IGVtcHR5KCRzcFsnYXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlJ11bJ3VybCddKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9hY3Nfbm90X2ZvdW5kJzsKICAgICAgICAgICAgfSBlbHNlIGlmICghZmlsdGVyX3Zhcigkc3BbJ2Fzc2VydGlvbkNvbnN1bWVyU2VydmljZSddWyd1cmwnXSwgRklMVEVSX1ZBTElEQVRFX1VSTCkpIHsKICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9hY3NfdXJsX2ludmFsaWQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHNwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkc3BbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10pCiAgICAgICAgICAgICAgICAmJiAhZmlsdGVyX3Zhcigkc3BbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ10sIEZJTFRFUl9WQUxJREFURV9VUkwpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX3Nsc191cmxfaW52YWxpZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddKSAmJiBpc19hcnJheSgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddKSkgewogICAgICAgICAgICAgICAgaWYgKCghaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsna2V5RmlsZU5hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsnY2VydEZpbGVOYW1lJ10pKSAmJgogICAgICAgICAgICAgICAgICAgICghaXNzZXQoJHNlY3VyaXR5WydzaWduTWV0YWRhdGEnXVsncHJpdmF0ZUtleSddKQogICAgICAgICAgICAgICAgICAgIHx8ICFpc3NldCgkc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWyd4NTA5Y2VydCddKSkKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcnNbXSA9ICdzcF9zaWduTWV0YWRhdGFfaW52YWxpZCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgoKGlzc2V0KCRzZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2F1dGhuUmVxdWVzdHNTaWduZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgfHwgKGlzc2V0KCRzZWN1cml0eVsnbG9nb3V0UmVxdWVzdFNpZ25lZCddKSAmJiAkc2VjdXJpdHlbJ2xvZ291dFJlcXVlc3RTaWduZWQnXSA9PSB0cnVlKQogICAgICAgICAgICAgICAgfHwgKGlzc2V0KCRzZWN1cml0eVsnbG9nb3V0UmVzcG9uc2VTaWduZWQnXSkgJiYgJHNlY3VyaXR5Wydsb2dvdXRSZXNwb25zZVNpZ25lZCddID09IHRydWUpCiAgICAgICAgICAgICAgICB8fCAoaXNzZXQoJHNlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc0VuY3J5cHRlZCddKSAmJiAkc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10gPT0gdHJ1ZSkKICAgICAgICAgICAgICAgIHx8IChpc3NldCgkc2VjdXJpdHlbJ3dhbnROYW1lSWRFbmNyeXB0ZWQnXSkgJiYgJHNlY3VyaXR5Wyd3YW50TmFtZUlkRW5jcnlwdGVkJ10gPT0gdHJ1ZSkpCiAgICAgICAgICAgICAgICAmJiAhJHRoaXMtPmNoZWNrU1BDZXJ0cygpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ3NwX2NlcnRzX25vdF9mb3VuZF9hbmRfcmVxdWlyZWQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pKSB7CiAgICAgICAgICAgICR0eXBlcyA9IGFycmF5X2tleXMoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10pOwogICAgICAgICAgICAkdmFsaWRUeXBlcyA9IGFycmF5KCd0ZWNobmljYWwnLCAnc3VwcG9ydCcsICdhZG1pbmlzdHJhdGl2ZScsICdiaWxsaW5nJywgJ290aGVyJyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0eXBlcyBhcyAkdHlwZSkgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgJHZhbGlkVHlwZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2NvbnRhY3RfdHlwZV9pbnZhbGlkJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yZWFjaCAoJHNldHRpbmdzWydjb250YWN0UGVyc29uJ10gYXMgJHR5cGUgPT4gJGNvbnRhY3QpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGNvbnRhY3RbJ2dpdmVuTmFtZSddKSB8fCBlbXB0eSgkY29udGFjdFsnZ2l2ZW5OYW1lJ10pCiAgICAgICAgICAgICAgICAgICAgfHwgIWlzc2V0KCRjb250YWN0WydlbWFpbEFkZHJlc3MnXSkgfHwgZW1wdHkoJGNvbnRhY3RbJ2VtYWlsQWRkcmVzcyddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2NvbnRhY3Rfbm90X2Vub3VnaF9kYXRhJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snb3JnYW5pemF0aW9uJ10pKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzZXR0aW5nc1snb3JnYW5pemF0aW9uJ10gYXMgJG9yZ2FuaXphdGlvbikgewogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkb3JnYW5pemF0aW9uWyduYW1lJ10pIHx8IGVtcHR5KCRvcmdhbml6YXRpb25bJ25hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJG9yZ2FuaXphdGlvblsnZGlzcGxheW5hbWUnXSkgfHwgZW1wdHkoJG9yZ2FuaXphdGlvblsnZGlzcGxheW5hbWUnXSkKICAgICAgICAgICAgICAgICAgICB8fCAhaXNzZXQoJG9yZ2FuaXphdGlvblsndXJsJ10pIHx8IGVtcHR5KCRvcmdhbml6YXRpb25bJ3VybCddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ29yZ2FuaXphdGlvbl9ub3RfZW5vdWdoX2RhdGEnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgeDUwOSBjZXJ0cyBvZiB0aGUgU1AgZXhpc3RzIGFuZCBhcmUgdmFsaWQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1NQQ2VydHMoKQogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+Z2V0U1BrZXkoKTsKICAgICAgICAkY2VydCA9ICR0aGlzLT5nZXRTUGNlcnQoKTsKICAgICAgICByZXR1cm4gKCFlbXB0eSgka2V5KSAmJiAhZW1wdHkoJGNlcnQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHg1MDkgcHJpdmF0ZSBrZXkgb2YgdGhlIFNQLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFNQIHByaXZhdGUga2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUGtleSgpCiAgICB7CiAgICAgICAgJGtleSA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkgJiYgIWVtcHR5KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkpIHsKICAgICAgICAgICAgJGtleSA9ICR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAka2V5RmlsZSA9ICR0aGlzLT5fcGF0aHNbJ2NlcnQnXS4nc3Aua2V5JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygka2V5RmlsZSkpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBmaWxlX2dldF9jb250ZW50cygka2V5RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRrZXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB4NTA5IHB1YmxpYyBjZXJ0IG9mIHRoZSBTUC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBTUCBwdWJsaWMgY2VydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U1BjZXJ0KCkKICAgIHsKICAgICAgICAkY2VydCA9IG51bGw7CgogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWyd4NTA5Y2VydCddKSAmJiAhZW1wdHkoJHRoaXMtPl9zcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJGNlcnQgPSAkdGhpcy0+X3NwWyd4NTA5Y2VydCddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjZXJ0RmlsZSA9ICR0aGlzLT5fcGF0aHNbJ2NlcnQnXS4nc3AuY3J0JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2VydEZpbGUpKSB7CiAgICAgICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjZXJ0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgeDUwOSBwdWJsaWMgb2YgdGhlIFNQIHRoYXQgaXMKICAgICAqIHBsYW5lZCB0byBiZSB1c2VkIHNvb24gaW5zdGVhZCB0aGUgb3RoZXIKICAgICAqIHB1YmxpYyBjZXJ0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgU1AgcHVibGljIGNlcnQgTmV3CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUGNlcnROZXcoKQogICAgewogICAgICAgICRjZXJ0ID0gbnVsbDsKCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0TmV3J10pICYmICFlbXB0eSgkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddKSkgewogICAgICAgICAgICAkY2VydCA9ICR0aGlzLT5fc3BbJ3g1MDljZXJ0TmV3J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNlcnRGaWxlID0gJHRoaXMtPl9wYXRoc1snY2VydCddLidzcF9uZXcuY3J0JzsKCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2VydEZpbGUpKSB7CiAgICAgICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0RmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjZXJ0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgSWRQIGluZm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUERhdGEoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2lkcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFNQIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgU1AgaW5mbwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U1BEYXRhKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgc2VjdXJpdHkgZGF0YS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICBTUCBpbmZvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN1cml0eURhdGEoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3NlY3VyaXR5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyBjb250YWN0IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSAgU1AgaW5mbwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGFjdHMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbnRhY3RzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyBvcmdhbml6YXRpb24gZGF0YS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICBTUCBpbmZvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X29yZ2FuaXphdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBTQU1MIHJlcXVlc3RzIGJlIGNvbXByZXNzZWQ/CiAgICAgKgogICAgICogQHJldHVybiBib29sIFllcy9ObyBhcyBUcnVlL0ZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG91bGRDb21wcmVzc1JlcXVlc3RzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb21wcmVzc1sncmVxdWVzdHMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBTQU1MIHJlc3BvbnNlcyBiZSBjb21wcmVzc2VkPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBZZXMvTm8gYXMgVHJ1ZS9GYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hvdWxkQ29tcHJlc3NSZXNwb25zZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbXByZXNzWydyZXNwb25zZXMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIElkUCBTU08gdXJsLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHVybCBvZiB0aGUgSWRQIFNpbmdsZSBTaWduIE9uIFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUFNTT1VybCgpCiAgICB7CiAgICAgICAgJHNzb1VybCA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVTaWduT25TZXJ2aWNlJ11bJ3VybCddKSkgewogICAgICAgICAgICAkc3NvVXJsID0gJHRoaXMtPl9pZHBbJ3NpbmdsZVNpZ25PblNlcnZpY2UnXVsndXJsJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3NvVXJsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcmVxdWVzdCB1cmwgb2YgdGhlIElkUCBTaW5nbGUgTG9nb3V0IFNlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkUFNMT1VybCgpCiAgICB7CiAgICAgICAgJHNsb1VybCA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3VybCddKSkgewogICAgICAgICAgICAkc2xvVXJsID0gJHRoaXMtPl9pZHBbJ3NpbmdsZUxvZ291dFNlcnZpY2UnXVsndXJsJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2xvVXJsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgSWRQIFNMTyByZXNwb25zZSB1cmwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcmVzcG9uc2UgdXJsIG9mIHRoZSBJZFAgU2luZ2xlIExvZ291dCBTZXJ2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZFBTTE9SZXNwb25zZVVybCgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ10pICYmIGlzc2V0KCR0aGlzLT5faWRwWydzaW5nbGVMb2dvdXRTZXJ2aWNlJ11bJ3Jlc3BvbnNlVXJsJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2lkcFsnc2luZ2xlTG9nb3V0U2VydmljZSddWydyZXNwb25zZVVybCddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPmdldElkUFNMT1VybCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgU1AgbWV0YWRhdGEuIFRoZSBYTUwgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGFsd2F5c1B1Ymxpc2hFbmNyeXB0aW9uQ2VydCBXaGVuICd0cnVlJywgdGhlIHJldHVybmVkCiAgICAgKiBtZXRhZGF0YSB3aWxsIGFsd2F5cyBpbmNsdWRlIGFuICdlbmNyeXB0aW9uJyBLZXlEZXNjcmlwdG9yLiBPdGhlcndpc2UsCiAgICAgKiB0aGUgJ2VuY3J5cHRpb24nIEtleURlc2NyaXB0b3Igd2lsbCBvbmx5IGJlIGluY2x1ZGVkIGlmCiAgICAgKiAkYWR2YW5jZWRTZXR0aW5nc1snc2VjdXJpdHknXVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIG9yCiAgICAgKiAkYWR2YW5jZWRTZXR0aW5nc1snc2VjdXJpdHknXVsnd2FudEFzc2VydGlvbnNFbmNyeXB0ZWQnXSBhcmUgZW5hYmxlZC4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAgICAgICR2YWxpZFVudGlsICAgIE1ldGFkYXRhJ3MgdmFsaWQgdGltZQogICAgICogQHBhcmFtIGludHxudWxsICAgICAgJGNhY2hlRHVyYXRpb24gRHVyYXRpb24gb2YgdGhlIGNhY2hlIGluIHNlY29uZHMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICRpZ25vcmVWYWxpZFVudGlsIGV4Y2x1ZGUgdGhlIHZhbGlkVW50aWwgdGFnIGZyb20gbWV0YWRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgU1AgbWV0YWRhdGEgKHhtbCkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUE1ldGFkYXRhKCRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgPSBmYWxzZSwgJHZhbGlkVW50aWwgPSBudWxsLCAkY2FjaGVEdXJhdGlvbiA9IG51bGwsICRpZ25vcmVWYWxpZFVudGlsID0gZmFsc2UpCiAgICB7CiAgICAgICAgJG1ldGFkYXRhID0gTWV0YWRhdGE6OmJ1aWxkZXIoJHRoaXMtPl9zcCwgJHRoaXMtPl9zZWN1cml0eVsnYXV0aG5SZXF1ZXN0c1NpZ25lZCddLCAkdGhpcy0+X3NlY3VyaXR5Wyd3YW50QXNzZXJ0aW9uc1NpZ25lZCddLCAkdmFsaWRVbnRpbCwgJGNhY2hlRHVyYXRpb24sICR0aGlzLT5nZXRDb250YWN0cygpLCAkdGhpcy0+Z2V0T3JnYW5pemF0aW9uKCksIFtdLCAkaWdub3JlVmFsaWRVbnRpbCk7CgogICAgICAgICRjZXJ0TmV3ID0gJHRoaXMtPmdldFNQY2VydE5ldygpOwogICAgICAgIGlmICghZW1wdHkoJGNlcnROZXcpKSB7CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjphZGRYNTA5S2V5RGVzY3JpcHRvcnMoCiAgICAgICAgICAgICAgICAkbWV0YWRhdGEsCiAgICAgICAgICAgICAgICAkY2VydE5ldywKICAgICAgICAgICAgICAgICRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgfHwgJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIHx8ICR0aGlzLT5fc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRjZXJ0ID0gJHRoaXMtPmdldFNQY2VydCgpOwogICAgICAgIGlmICghZW1wdHkoJGNlcnQpKSB7CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjphZGRYNTA5S2V5RGVzY3JpcHRvcnMoCiAgICAgICAgICAgICAgICAkbWV0YWRhdGEsCiAgICAgICAgICAgICAgICAkY2VydCwKICAgICAgICAgICAgICAgICRhbHdheXNQdWJsaXNoRW5jcnlwdGlvbkNlcnQgfHwgJHRoaXMtPl9zZWN1cml0eVsnd2FudE5hbWVJZEVuY3J5cHRlZCddIHx8ICR0aGlzLT5fc2VjdXJpdHlbJ3dhbnRBc3NlcnRpb25zRW5jcnlwdGVkJ10KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8vU2lnbiBNZXRhZGF0YQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NlY3VyaXR5WydzaWduTWV0YWRhdGEnXSkgJiYgJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ10gIT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAka2V5TWV0YWRhdGEgPSAkdGhpcy0+Z2V0U1BrZXkoKTsKICAgICAgICAgICAgICAgICRjZXJ0TWV0YWRhdGEgPSAkY2VydDsKCiAgICAgICAgICAgICAgICBpZiAoISRrZXlNZXRhZGF0YSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ1NQIFByaXZhdGUga2V5IG5vdCBmb3VuZC4nLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFJJVkFURV9LRVlfRklMRV9OT1RfRk9VTkQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJGNlcnRNZXRhZGF0YSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ1NQIFB1YmxpYyBjZXJ0IG5vdCBmb3VuZC4nLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFVCTElDX0NFUlRfRklMRV9OT1RfRk9VTkQKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWydrZXlGaWxlTmFtZSddKSAmJgogICAgICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2NlcnRGaWxlTmFtZSddKSkgewogICAgICAgICAgICAgICAgJGtleUZpbGVOYW1lID0gJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2tleUZpbGVOYW1lJ107CiAgICAgICAgICAgICAgICAkY2VydEZpbGVOYW1lID0gJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ2NlcnRGaWxlTmFtZSddOwoKICAgICAgICAgICAgICAgICRrZXlNZXRhZGF0YUZpbGUgPSAkdGhpcy0+X3BhdGhzWydjZXJ0J10uJGtleUZpbGVOYW1lOwogICAgICAgICAgICAgICAgJGNlcnRNZXRhZGF0YUZpbGUgPSAkdGhpcy0+X3BhdGhzWydjZXJ0J10uJGNlcnRGaWxlTmFtZTsKCiAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRrZXlNZXRhZGF0YUZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAnU1AgUHJpdmF0ZSBrZXkgZmlsZSBub3QgZm91bmQ6ICVzJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5ELAogICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgka2V5TWV0YWRhdGFGaWxlKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkY2VydE1ldGFkYXRhRmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdTUCBQdWJsaWMgY2VydCBmaWxlIG5vdCBmb3VuZDogJXMnLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6UFVCTElDX0NFUlRfRklMRV9OT1RfRk9VTkQsCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCRjZXJ0TWV0YWRhdGFGaWxlKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAka2V5TWV0YWRhdGEgPSBmaWxlX2dldF9jb250ZW50cygka2V5TWV0YWRhdGFGaWxlKTsKICAgICAgICAgICAgICAgICRjZXJ0TWV0YWRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkY2VydE1ldGFkYXRhRmlsZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNzZXQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3ByaXZhdGVLZXknXSkgJiYKICAgICAgICAgICAgICAgIGlzc2V0KCR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25NZXRhZGF0YSddWyd4NTA5Y2VydCddKSkgewogICAgICAgICAgICAgICAgJGtleU1ldGFkYXRhID0gVXRpbHM6OmZvcm1hdFByaXZhdGVLZXkoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3ByaXZhdGVLZXknXSk7CiAgICAgICAgICAgICAgICAkY2VydE1ldGFkYXRhID0gVXRpbHM6OmZvcm1hdENlcnQoJHRoaXMtPl9zZWN1cml0eVsnc2lnbk1ldGFkYXRhJ11bJ3g1MDljZXJ0J10pOwogICAgICAgICAgICAgICAgaWYgKCEka2V5TWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdQcml2YXRlIGtleSBub3QgZm91bmQuJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBSSVZBVEVfS0VZX0ZJTEVfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoISRjZXJ0TWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICdQdWJsaWMgY2VydCBub3QgZm91bmQuJywKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlBVQkxJQ19DRVJUX0ZJTEVfTk9UX0ZPVU5ECiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBTZXR0aW5nOiBzaWduTWV0YWRhdGEgdmFsdWUgb2YgdGhlIHNwIGlzIG5vdCB2YWxpZCcsCiAgICAgICAgICAgICAgICAgICAgRXJyb3I6OlNFVFRJTkdTX0lOVkFMSURfU1lOVEFYCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNpZ25hdHVyZUFsZ29yaXRobSA9ICR0aGlzLT5fc2VjdXJpdHlbJ3NpZ25hdHVyZUFsZ29yaXRobSddOwogICAgICAgICAgICAkZGlnZXN0QWxnb3JpdGhtID0gJHRoaXMtPl9zZWN1cml0eVsnZGlnZXN0QWxnb3JpdGhtJ107CiAgICAgICAgICAgICRtZXRhZGF0YSA9IE1ldGFkYXRhOjpzaWduTWV0YWRhdGEoJG1ldGFkYXRhLCAka2V5TWV0YWRhdGEsICRjZXJ0TWV0YWRhdGEsICRzaWduYXR1cmVBbGdvcml0aG0sICRkaWdlc3RBbGdvcml0aG0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG1ldGFkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGFuIFhNTCBTUCBNZXRhZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4bWwgTWV0YWRhdGEncyBYTUwgdGhhdCB3aWxsIGJlIHZhbGlkYXRlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgbGlzdCBvZiBmb3VuZCBlcnJvcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVNZXRhZGF0YSgkeG1sKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHhtbCkpOwoKICAgICAgICAkZXJyb3JzID0gYXJyYXkoKTsKICAgICAgICAkcmVzID0gVXRpbHM6OnZhbGlkYXRlWE1MKCR4bWwsICdzYW1sLXNjaGVtYS1tZXRhZGF0YS0yLjAueHNkJywgJHRoaXMtPl9kZWJ1ZywgJHRoaXMtPmdldFNjaGVtYXNQYXRoKCkpOwogICAgICAgIGlmICghJHJlcyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRlcnJvcnNbXSA9ICRyZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9ICRyZXM7CiAgICAgICAgICAgICRlbGVtZW50ID0gJGRvbS0+ZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgICBpZiAoJGVsZW1lbnQtPnRhZ05hbWUgIT09ICdtZDpFbnRpdHlEZXNjcmlwdG9yJykgewogICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ25vRW50aXR5RGVzY3JpcHRvcl94bWwnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHZhbGlkVW50aWwgPSAkY2FjaGVEdXJhdGlvbiA9ICRleHBpcmVUaW1lID0gbnVsbDsKCiAgICAgICAgICAgICAgICBpZiAoJGVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgndmFsaWRVbnRpbCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbGlkVW50aWwgPSBVdGlsczo6cGFyc2VTQU1MMlRpbWUoJGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgndmFsaWRVbnRpbCcpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkZWxlbWVudC0+aGFzQXR0cmlidXRlKCdjYWNoZUR1cmF0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAkY2FjaGVEdXJhdGlvbiA9ICRlbGVtZW50LT5nZXRBdHRyaWJ1dGUoJ2NhY2hlRHVyYXRpb24nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZXhwaXJlVGltZSA9IFV0aWxzOjpnZXRFeHBpcmVUaW1lKCRjYWNoZUR1cmF0aW9uLCAkdmFsaWRVbnRpbCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGV4cGlyZVRpbWUpICYmIHRpbWUoKSA+ICRleHBpcmVUaW1lKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yc1tdID0gJ2V4cGlyZWRfeG1sJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBNZXRhZGF0YSBTaWduIFZhbGlkYXRpb24KCiAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRzIHRoZSBJZFAgY2VydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZvcm1hdElkUENlcnQoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9pZHBbJ3g1MDljZXJ0J10gPSBVdGlsczo6Zm9ybWF0Q2VydCgkdGhpcy0+X2lkcFsneDUwOWNlcnQnXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0cyB0aGUgTXVsdGlwbGUgSWRQIGNlcnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0SWRQQ2VydE11bHRpKCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9pZHBbJ3g1MDljZXJ0TXVsdGknXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSBhcyAkaSA9PiAkY2VydCkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXVskaV0gPSBVdGlsczo6Zm9ybWF0Q2VydCgkY2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXSBhcyAkaSA9PiAkY2VydCkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5faWRwWyd4NTA5Y2VydE11bHRpJ11bJ2VuY3J5cHRpb24nXVskaV0gPSBVdGlsczo6Zm9ybWF0Q2VydCgkY2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRzIHRoZSBTUCBjZXJ0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0U1BDZXJ0KCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9zcFsneDUwOWNlcnQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsneDUwOWNlcnQnXSA9IFV0aWxzOjpmb3JtYXRDZXJ0KCR0aGlzLT5fc3BbJ3g1MDljZXJ0J10pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZvcm1hdHMgdGhlIFNQIGNlcnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRTUENlcnROZXcoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddKSkgewogICAgICAgICAgICAkdGhpcy0+X3NwWyd4NTA5Y2VydE5ldyddID0gVXRpbHM6OmZvcm1hdENlcnQoJHRoaXMtPl9zcFsneDUwOWNlcnROZXcnXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRm9ybWF0cyB0aGUgU1AgcHJpdmF0ZSBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRTUEtleSgpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fc3BbJ3ByaXZhdGVLZXknXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zcFsncHJpdmF0ZUtleSddID0gVXRpbHM6OmZvcm1hdFByaXZhdGVLZXkoJHRoaXMtPl9zcFsncHJpdmF0ZUtleSddKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGVycm9ycywgdGhlIGFycmF5IGlzIGVtcHR5IHdoZW4gdGhlIHNldHRpbmdzIGlzIG9rLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgRXJyb3JzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm9yczsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgc3RyaWN0IG1vZGUuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlIFN0cmljdCBwYXJhbWV0ZXIKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RyaWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWlzX2Jvb2woJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byBzZXRTdHJpY3QoKScpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9zdHJpY3QgPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIHRoZSAnc3RyaWN0JyBtb2RlIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgU3RyaWN0IHBhcmFtZXRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdHJpY3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3N0cmljdDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgaWYgdGhlIGRlYnVnIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgRGVidWcgcGFyYW1ldGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0RlYnVnQWN0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kZWJ1ZzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIGJhc2V1cmwgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZXVybCBCYXNlIFVSTC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEJhc2VVUkwoJGJhc2V1cmwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9iYXNldXJsID0gJGJhc2V1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBiYXNldXJsIHNldCBvbiB0aGUgc2V0dGluZ3MgaWYgYW55LgogICAgICoKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcgVGhlIGJhc2V1cmwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhc2VVUkwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Jhc2V1cmw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBJZFAgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydCBJZFAgY2VydGlmaWNhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElkUENlcnQoJGNlcnQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9pZHBbJ3g1MDljZXJ0J10gPSAkY2VydDsKICAgICAgICAkdGhpcy0+Zm9ybWF0SWRQQ2VydCgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWNFbmM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZUxpc3Q7CnVzZSBEb21Ob2RlOwp1c2UgRE9NWFBhdGg7CnVzZSBFeGNlcHRpb247CgovKioKICogVXRpbHMgb2YgU0FNTCBQSFAgVG9vbGtpdAogKgogKiBEZWZpbmVzIHNldmVyYWwgb2Z0ZW4gdXNlZCBtZXRob2RzCiAqLwpjbGFzcyBVdGlscwp7CiAgICBjb25zdCBSRVNQT05TRV9TSUdOQVRVUkVfWFBBVEggPSAiL3NhbWxwOlJlc3BvbnNlL2RzOlNpZ25hdHVyZSI7CiAgICBjb25zdCBBU1NFUlRJT05fU0lHTkFUVVJFX1hQQVRIID0gIi9zYW1scDpSZXNwb25zZS9zYW1sOkFzc2VydGlvbi9kczpTaWduYXR1cmUiOwoKICAgIC8qKgogICAgICogQHZhciBib29sIENvbnRyb2wgaWYgdGhlIGBGb3J3YXJkZWQtRm9yLSpgIGhlYWRlcnMgYXJlIHVzZWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9wcm94eVZhcnMgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9ob3N0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3Byb3RvY29sOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9wcm90b2NvbFJlZ2V4ID0gJ0BeaHR0cHM/Oi8vQGknOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3BvcnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRfYmFzZXVybHBhdGg7CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGxvYWQgYW4gWE1MIHN0cmluZyBpbiBhIHNhdmUgd2F5LgogICAgICogUHJldmVudCBYRUUvWFhFIEF0dGFja3MKICAgICAqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJGRvbSBUaGUgZG9jdW1lbnQgd2hlcmUgbG9hZCB0aGUgeG1sLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR4bWwgVGhlIFhNTCBzdHJpbmcgdG8gYmUgbG9hZGVkLgogICAgICoKICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8ZmFsc2UgJGRvbSBUaGUgcmVzdWx0IG9mIGxvYWQgdGhlIFhNTCBhdCB0aGUgRE9NRG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRYTUwoRE9NRG9jdW1lbnQgJGRvbSwgJHhtbCkKICAgIHsKICAgICAgICBhc3NlcnQoJGRvbSBpbnN0YW5jZW9mIERPTURvY3VtZW50KTsKICAgICAgICBhc3NlcnQoaXNfc3RyaW5nKCR4bWwpKTsKCiAgICAgICAgJG9sZEVudGl0eUxvYWRlciA9IG51bGw7CiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKICAgICAgICAgICAgJG9sZEVudGl0eUxvYWRlciA9IGxpYnhtbF9kaXNhYmxlX2VudGl0eV9sb2FkZXIodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gJGRvbS0+bG9hZFhNTCgkeG1sKTsKCiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKICAgICAgICAgICAgbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcigkb2xkRW50aXR5TG9hZGVyKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRkb20tPmNoaWxkTm9kZXMgYXMgJGNoaWxkKSB7CiAgICAgICAgICAgIGlmICgkY2hpbGQtPm5vZGVUeXBlID09PSBYTUxfRE9DVU1FTlRfVFlQRV9OT0RFKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdEZXRlY3RlZCB1c2Ugb2YgRE9DVFlQRS9FTlRJVFkgaW4gWE1MLCBkaXNhYmxlZCB0byBwcmV2ZW50IFhYRS9YRUUgYXR0YWNrcycKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJHJlcykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRkb207CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byB2YWxpZGF0ZSBhbiBYTUwgc3RyaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBzY2hlbWEuCiAgICAgKgogICAgICogSXQgd2lsbCBwYXJzZSB0aGUgc3RyaW5nIGludG8gYSBET01Eb2N1bWVudCBhbmQgdmFsaWRhdGUgdGhpcyBkb2N1bWVudCBhZ2FpbnN0IHRoZSBzY2hlbWEuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xET01Eb2N1bWVudCAkeG1sICAgIFRoZSBYTUwgc3RyaW5nIG9yIGRvY3VtZW50IHdoaWNoIHNob3VsZCBiZSB2YWxpZGF0ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICRzY2hlbWEgVGhlIHNjaGVtYSBmaWxlbmFtZSB3aGljaCBzaG91bGQgYmUgdXNlZC4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgJGRlYnVnICBUbyBkaXNhYmxlL2VuYWJsZSB0aGUgZGVidWcgbW9kZQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkc2NoZW1hUGF0aCBDaGFuZ2Ugc2NoZW1hIHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xET01Eb2N1bWVudCAkZG9tICBzdHJpbmcgdGhhdCBleHBsYWlucyB0aGUgcHJvYmxlbSBvciB0aGUgRE9NRG9jdW1lbnQKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZhbGlkYXRlWE1MKCR4bWwsICRzY2hlbWEsICRkZWJ1ZyA9IGZhbHNlLCAkc2NoZW1hUGF0aCA9IG51bGwpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkeG1sKSB8fCAkeG1sIGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpOwogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHNjaGVtYSkpOwoKICAgICAgICBsaWJ4bWxfY2xlYXJfZXJyb3JzKCk7CiAgICAgICAgbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnModHJ1ZSk7CgogICAgICAgIGlmICgkeG1sIGluc3RhbmNlb2YgRE9NRG9jdW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9ICR4bWw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudDsKICAgICAgICAgICAgJGRvbSA9IHNlbGY6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgcmV0dXJuICd1bmxvYWRlZF94bWwnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHNjaGVtYVBhdGgpKSB7CiAgICAgICAgICAgICRzY2hlbWFGaWxlID0gJHNjaGVtYVBhdGggLiAkc2NoZW1hOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzY2hlbWFGaWxlID0gX19ESVJfXyAuICcvc2NoZW1hcy8nIC4gJHNjaGVtYTsKICAgICAgICB9CgogICAgICAgICRvbGRFbnRpdHlMb2FkZXIgPSBudWxsOwogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA8IDgwMDAwKSB7CiAgICAgICAgICAgICRvbGRFbnRpdHlMb2FkZXIgPSBsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgJHJlcyA9ICRkb20tPnNjaGVtYVZhbGlkYXRlKCRzY2hlbWFGaWxlKTsKICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgICAgICAgICBsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyKCRvbGRFbnRpdHlMb2FkZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoISRyZXMpIHsKICAgICAgICAgICAgJHhtbEVycm9ycyA9IGxpYnhtbF9nZXRfZXJyb3JzKCk7CiAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgJ0Vycm9yIHZhbGlkYXRpbmcgdGhlIG1ldGFkYXRhOiAnLnZhcl9leHBvcnQoJHhtbEVycm9ycywgdHJ1ZSkpOwoKICAgICAgICAgICAgaWYgKCRkZWJ1ZykgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHhtbEVycm9ycyBhcyAkZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxlbnRpdGllcygkZXJyb3ItPm1lc3NhZ2UpLiJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkX3htbCc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRvbTsKICAgIH0KCiAgICAvKioKICAgICAqIEltcG9ydCBhIG5vZGUgdHJlZSBpbnRvIGEgdGFyZ2V0IGRvY3VtZW50CiAgICAgKiBDb3B5IGl0IGJlZm9yZSBhIHJlZmVyZW5jZSBub2RlIGFzIGEgc2libGluZwogICAgICogYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcmVtb3ZlCiAgICAgKiB0aGUgcmVmZXJlbmNlIG5vZGUgaW4gdGhlIHRhcmdldCBkb2N1bWVudAogICAgICogQXMgaXQgd2VyZSAncmVwbGFjaW5nJyBpdAogICAgICogTGVhdmluZyBuZXN0ZWQgZGVmYXVsdCBuYW1lc3BhY2VzIGFsb25lCiAgICAgKiAoU3RhbmRhcmQgaW1wb3J0Tm9kZSB3aXRoIGRlZXAgY29weQogICAgICogIG1hbmdsZXMgbmVzdGVkIGRlZmF1bHQgbmFtZXNwYWNlcykKICAgICAqCiAgICAgKiBUaGUgcmVmZXJlbmNlIG5vZGUgbXVzdCBub3QgYmUgYSBEb21Eb2N1bWVudAogICAgICogSXQgQ0FOIGJlIHRoZSB0b3AgZWxlbWVudCBvZiBhIGRvY3VtZW50CiAgICAgKiBSZXR1cm5zIHRoZSBjb3BpZWQgbm9kZSBpbiB0aGUgdGFyZ2V0IGRvY3VtZW50CiAgICAgKgogICAgICogQHBhcmFtIERvbU5vZGUgJHRhcmdldE5vZGUKICAgICAqIEBwYXJhbSBEb21Ob2RlICRzb3VyY2VOb2RlCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVjdXJzZQogICAgICogQHJldHVybiBET01Ob2RlCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyZWVDb3B5UmVwbGFjZShEb21Ob2RlICR0YXJnZXROb2RlLCBEb21Ob2RlICRzb3VyY2VOb2RlLCAkcmVjdXJzZSA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkdGFyZ2V0Tm9kZS0+cGFyZW50Tm9kZSA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbGxlZ2FsIGFyZ3VtZW50IHRhcmdldE5vZGUuIEl0IGhhcyBubyBwYXJlbnROb2RlLicpOwogICAgICAgIH0KICAgICAgICAkY2xvbmVkTm9kZSA9ICR0YXJnZXROb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRzb3VyY2VOb2RlLCBmYWxzZSk7CiAgICAgICAgaWYgKCRyZWN1cnNlKSB7CiAgICAgICAgICAgICRyZXN1bHROb2RlID0gJHRhcmdldE5vZGUtPmFwcGVuZENoaWxkKCRjbG9uZWROb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVzdWx0Tm9kZSA9ICR0YXJnZXROb2RlLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJGNsb25lZE5vZGUsICR0YXJnZXROb2RlKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRzb3VyY2VOb2RlLT5jaGlsZE5vZGVzICE9PSBudWxsKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzb3VyY2VOb2RlLT5jaGlsZE5vZGVzIGFzICRjaGlsZCkgewogICAgICAgICAgICAgICAgc2VsZjo6dHJlZUNvcHlSZXBsYWNlKCRyZXN1bHROb2RlLCAkY2hpbGQsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghJHJlY3Vyc2UpIHsKICAgICAgICAgICAgJHRhcmdldE5vZGUtPnBhcmVudE5vZGUtPnJlbW92ZUNoaWxkKCR0YXJnZXROb2RlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHROb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHg1MDkgY2VydCAoYWRkaW5nIGhlYWRlciAmIGZvb3RlciBpZiByZXF1aXJlZCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkeDUwOWNlcnQgIEEgeDUwOSB1bmZvcm1hdGVkIGNlcnQKICAgICAqIEBwYXJhbSBib29sICAgJGhlYWRzICAgICBUcnVlIGlmIHdlIHdhbnQgdG8gaW5jbHVkZSBoZWFkIGFuZCBmb290ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkeDUwOSBGb3JtYXR0ZWQgY2VydAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdENlcnQoJHg1MDljZXJ0LCAkaGVhZHMgPSB0cnVlKQogICAgewogICAgICAgIGlmIChpc19udWxsKCR4NTA5Y2VydCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJHg1MDljZXJ0LCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICR4NTA5Y2VydCA9IHN0YXRpYzo6Z2V0U3RyaW5nQmV0d2VlbigkeDUwOWNlcnQsICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0nLCAnLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLScpOwogICAgICAgIH0KCiAgICAgICAgJHg1MDljZXJ0ID0gc3RyX3JlcGxhY2UoWyJceDBkIiwgIlxyIiwgIlxuIiwgIiAiXSwgJycsICR4NTA5Y2VydCk7CgogICAgICAgIGlmICgkaGVhZHMgJiYgJHg1MDljZXJ0ICE9PSAnJykgewogICAgICAgICAgICAkeDUwOWNlcnQgPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iLmNodW5rX3NwbGl0KCR4NTA5Y2VydCwgNjQsICJcbiIpLiItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4NTA5Y2VydDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBwcml2YXRlIGtleSAoYWRkaW5nIGhlYWRlciAmIGZvb3RlciBpZiByZXF1aXJlZCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5ICAgQSBwcml2YXRlIGtleQogICAgICogQHBhcmFtIGJvb2wgICAkaGVhZHMgVHJ1ZSBpZiB3ZSB3YW50IHRvIGluY2x1ZGUgaGVhZCBhbmQgZm9vdGVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgJHJzYUtleSBGb3JtYXR0ZWQgcHJpdmF0ZSBrZXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRQcml2YXRlS2V5KCRrZXksICRoZWFkcyA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZShhcnJheSgiXHgwRCIsICJcciIsICJcbiIpLCAiIiwgJGtleSk7CiAgICAgICAgaWYgKCFlbXB0eSgka2V5KSkgewogICAgICAgICAgICBpZiAoc3RycG9zKCRrZXksICctLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBVdGlsczo6Z2V0U3RyaW5nQmV0d2Vlbigka2V5LCAnLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tJywgJy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0nKTsKICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZSgnICcsICcnLCAka2V5KTsKCiAgICAgICAgICAgICAgICBpZiAoJGhlYWRzKSB7CiAgICAgICAgICAgICAgICAgICAgJGtleSA9ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIuY2h1bmtfc3BsaXQoJGtleSwgNjQsICJcbiIpLiItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygka2V5LCAnLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLScpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJGtleSA9IFV0aWxzOjpnZXRTdHJpbmdCZXR3ZWVuKCRrZXksICctLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tJywgJy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tJyk7CiAgICAgICAgICAgICAgICAka2V5ID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgJGtleSk7CgogICAgICAgICAgICAgICAgaWYgKCRoZWFkcykgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSAiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxuIi5jaHVua19zcGxpdCgka2V5LCA2NCwgIlxuIikuIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKCcgJywgJycsICRrZXkpOwoKICAgICAgICAgICAgICAgIGlmICgkaGVhZHMpIHsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiIuY2h1bmtfc3BsaXQoJGtleSwgNjQsICJcbiIpLiItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgc3Vic3RyaW5nIGJldHdlZW4gMiBtYXJrcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciAgIFRoZSB0YXJnZXQgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFydCBUaGUgaW5pdGlhbCBtYXJrCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmQgICBUaGUgZW5kIG1hcmsKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIHN1YnN0cmluZyBvciBhbiBlbXB0eSBzdHJpbmcgaWYgaXMgbm90IGFibGUgdG8gZmluZCB0aGUgbWFya3MKICAgICAqICAgICAgICAgICAgICAgIG9yIGlmIHRoZXJlIGlzIG5vIHN0cmluZyBiZXR3ZWVuIHRoZSBtYXJrcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN0cmluZ0JldHdlZW4oJHN0ciwgJHN0YXJ0LCAkZW5kKQogICAgewogICAgICAgICRzdHIgPSAnICcgLiAkc3RyOwogICAgICAgICRpbmkgPSBzdHJwb3MoJHN0ciwgJHN0YXJ0KTsKCiAgICAgICAgaWYgKCRpbmkgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkaW5pICs9IHN0cmxlbigkc3RhcnQpOwogICAgICAgICRsZW4gPSBzdHJwb3MoJHN0ciwgJGVuZCwgJGluaSkgLSAkaW5pOwogICAgICAgIHJldHVybiBzdWJzdHIoJHN0ciwgJGluaSwgJGxlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBhIHJlZGlyZWN0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwgKG9yIHJldHVybiB0aGUgdGFyZ2V0IHVybCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsICAgICAgICBUaGUgdGFyZ2V0IHVybAogICAgICogQHBhcmFtIGFycmF5ICAkcGFyYW1ldGVycyBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBhcyBwYXJ0IG9mIHRoZSB1cmwKICAgICAqIEBwYXJhbSBib29sICAgJHN0YXkgICAgICAgVHJ1ZSBpZiB3ZSB3YW50IHRvIHN0YXkgKHJldHVybnMgdGhlIHVybCBzdHJpbmcpIEZhbHNlIHRvIHJlZGlyZWN0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCAkdXJsCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gKCRzdGF5IGlzIHRydWUgPyBzdHJpbmcgOiBuZXZlcikKICAgICAqCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVkaXJlY3QoJHVybCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBhcnJheSgpLCAkc3RheSA9IGZhbHNlKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJHVybCkpOwoKICAgICAgICBpZiAoc3Vic3RyKCR1cmwsIDAsIDEpID09PSAnLycpIHsKICAgICAgICAgICAgJHVybCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCkgLiAkdXJsOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogVmVyaWZ5IHRoYXQgdGhlIFVSTCBtYXRjaGVzIHRoZSByZWdleCBmb3IgdGhlIHByb3RvY29sLgogICAgICAgICAqIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGNoZWNrIGZvciBodHRwIGFuZCBodHRwcwogICAgICAgICAqLwogICAgICAgIGlmIChpc3NldChzZWxmOjokX3Byb3RvY29sUmVnZXgpKSB7CiAgICAgICAgICAgICRwcm90b2NvbCA9IHNlbGY6OiRfcHJvdG9jb2xSZWdleDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAiIjsKICAgICAgICB9CiAgICAgICAgJHdyb25nUHJvdG9jb2wgPSAhcHJlZ19tYXRjaCgkcHJvdG9jb2wsICR1cmwpOwogICAgICAgICR1cmwgPSBmaWx0ZXJfdmFyKCR1cmwsIEZJTFRFUl9WQUxJREFURV9VUkwpOwogICAgICAgIGlmICgkd3JvbmdQcm90b2NvbCB8fCBlbXB0eSgkdXJsKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAnUmVkaXJlY3QgdG8gaW52YWxpZCBVUkw6ICcgLiAkdXJsLAogICAgICAgICAgICAgICAgRXJyb3I6OlJFRElSRUNUX0lOVkFMSURfVVJMCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvKiBBZGQgZW5jb2RlZCBwYXJhbWV0ZXJzICovCiAgICAgICAgaWYgKHN0cnBvcygkdXJsLCAnPycpID09PSBmYWxzZSkgewogICAgICAgICAgICAkcGFyYW1QcmVmaXggPSAnPyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmFtUHJlZml4ID0gJyYnOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRwYXJhbSA9IHVybGVuY29kZSgkbmFtZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgJHBhcmFtID0gIiI7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJHZhbCkgewogICAgICAgICAgICAgICAgICAgICRwYXJhbSAuPSB1cmxlbmNvZGUoJG5hbWUpIC4gIltdPSIgLiB1cmxlbmNvZGUoJHZhbCkuICcmJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHBhcmFtKSkgewogICAgICAgICAgICAgICAgICAgICRwYXJhbSA9IHN1YnN0cigkcGFyYW0sIDAsIC0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYXJhbSA9IHVybGVuY29kZSgkbmFtZSkgLiAnPScgLiB1cmxlbmNvZGUoJHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFlbXB0eSgkcGFyYW0pKSB7CiAgICAgICAgICAgICAgICAkdXJsIC49ICRwYXJhbVByZWZpeCAuICRwYXJhbTsKICAgICAgICAgICAgICAgICRwYXJhbVByZWZpeCA9ICcmJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRzdGF5KSB7CiAgICAgICAgICAgIHJldHVybiAkdXJsOwogICAgICAgIH0KCiAgICAgICAgaGVhZGVyKCdQcmFnbWE6IG5vLWNhY2hlJyk7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlJyk7CiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICR1cmwpOwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAgLyoqCiAgICAgKiBAcGFyYW0gJHByb3RvY29sUmVnZXggc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UHJvdG9jb2xSZWdleCgkcHJvdG9jb2xSZWdleCkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCRwcm90b2NvbFJlZ2V4KSkgewogICAgICAgICAgICBzZWxmOjokX3Byb3RvY29sUmVnZXggPSAkcHJvdG9jb2xSZWdleDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIEJhc2UgVVJMIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJhc2V1cmwgVGhlIGJhc2UgdXJsIHRvIGJlIHVzZWQgd2hlbiBjb25zdHJ1Y3RpbmcgVVJMcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEJhc2VVUkwoJGJhc2V1cmwpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkYmFzZXVybCkpIHsKICAgICAgICAgICAgJGJhc2V1cmxwYXRoID0gJy8nOwogICAgICAgICAgICAkbWF0Y2hlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcjXmh0dHBzPzovLyhbXi9dKikvPyguKikjaScsICRiYXNldXJsLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGJhc2V1cmwsICdodHRwczovLycpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIHNlbGY6OnNldFNlbGZQcm90b2NvbCgnaHR0cCcpOwogICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJzgwJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c2V0U2VsZlByb3RvY29sKCdodHRwcycpOwogICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJzQ0Myc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICAgICBpZiAoZmFsc2UgIT09IHN0cnBvcygkY3VycmVudEhvc3QsICc6JykpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRjdXJyZW50SG9zdCwgJHBvc3NpYmxlUG9ydCkgPSBleHBsb2RlKCc6JywgJG1hdGNoZXNbMV0sIDIpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRwb3NzaWJsZVBvcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwb3J0ID0gJHBvc3NpYmxlUG9ydDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiAhZW1wdHkoJG1hdGNoZXNbMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2V1cmxwYXRoID0gJG1hdGNoZXNbMl07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZjo6c2V0U2VsZkhvc3QoJGN1cnJlbnRIb3N0KTsKICAgICAgICAgICAgICAgIHNlbGY6OnNldFNlbGZQb3J0KCRwb3J0KTsKICAgICAgICAgICAgICAgIHNlbGY6OnNldEJhc2VVUkxQYXRoKCRiYXNldXJscGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc2VsZjo6JF9ob3N0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHNlbGY6OiRfcHJvdG9jb2wgPSBudWxsOwogICAgICAgICAgICAgICAgc2VsZjo6JF9wb3J0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRwcm94eVZhcnMgV2hldGhlciB0byB1c2UgYFgtRm9yd2FyZGVkLSpgIGhlYWRlcnMgdG8gZGV0ZXJtaW5lIHBvcnQvZG9tYWluL3Byb3RvY29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UHJveHlWYXJzKCRwcm94eVZhcnMpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wcm94eVZhcnMgPSAoYm9vbCkkcHJveHlWYXJzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJveHlWYXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JF9wcm94eVZhcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwcm90b2NvbCArIHRoZSBjdXJyZW50IGhvc3QgKyB0aGUgcG9ydCAoaWYgZGlmZmVyZW50IHRoYW4KICAgICAqIGNvbW1vbiBwb3J0cykuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSTAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZVUkxob3N0KCkKICAgIHsKICAgICAgICAkY3VycmVudGhvc3QgPSBzZWxmOjpnZXRTZWxmSG9zdCgpOwoKICAgICAgICAkcG9ydCA9ICcnOwoKICAgICAgICBpZiAoc2VsZjo6aXNIVFRQUygpKSB7CiAgICAgICAgICAgICRwcm90b2NvbCA9ICdodHRwcyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHByb3RvY29sID0gJ2h0dHAnOwogICAgICAgIH0KCiAgICAgICAgJHBvcnRudW1iZXIgPSBzZWxmOjpnZXRTZWxmUG9ydCgpOwoKICAgICAgICBpZiAoaXNzZXQoJHBvcnRudW1iZXIpICYmICgkcG9ydG51bWJlciAhPSAnODAnKSAmJiAoJHBvcnRudW1iZXIgIT0gJzQ0MycpKSB7CiAgICAgICAgICAgICRwb3J0ID0gJzonIC4gJHBvcnRudW1iZXI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHByb3RvY29sLiI6Ly8iIC4gJGN1cnJlbnRob3N0IC4gJHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBob3N0IHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0U2VsZkhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgc2VsZjo6JF9ob3N0ID0gJGhvc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiYXNldXJscGF0aCBUaGUgYmFzZXVybCBwYXRoIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0QmFzZVVSTFBhdGgoJGJhc2V1cmxwYXRoKQogICAgewogICAgICAgIGlmIChlbXB0eSgkYmFzZXVybHBhdGgpKSB7CiAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSBudWxsOwogICAgICAgIH0gZWxzZSBpZiAoJGJhc2V1cmxwYXRoID09ICcvJykgewogICAgICAgICAgICBzZWxmOjokX2Jhc2V1cmxwYXRoID0gJy8nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGY6OiRfYmFzZXVybHBhdGggPSAnLycgLiB0cmltKCRiYXNldXJscGF0aCwgJy8nKSAuICcvJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgYmFzZXVybHBhdGggdG8gYmUgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmFzZVVSTFBhdGgoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjokX2Jhc2V1cmxwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHJhdyBob3N0IG5hbWUKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdIb3N0KCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JF9ob3N0KSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OiRfaG9zdDsKICAgICAgICB9IGVsc2VpZiAoc2VsZjo6Z2V0UHJveHlWYXJzKCkgJiYgYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9IT1NUJywgJF9TRVJWRVIpKSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IGV4cGxvZGUoJywnLCAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9IT1NUJ10pWzBdOwogICAgICAgIH0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0hPU1QnLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwogICAgICAgIH0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCdTRVJWRVJfTkFNRScsICRfU0VSVkVSKSkgewogICAgICAgICAgICAkY3VycmVudEhvc3QgPSAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdnZXRob3N0bmFtZScpKSB7CiAgICAgICAgICAgICAgICAkY3VycmVudEhvc3QgPSBnZXRob3N0bmFtZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGN1cnJlbnRIb3N0ID0gcGhwX3VuYW1lKCJuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjdXJyZW50SG9zdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgbnVtYmVyIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBVUkxzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0U2VsZlBvcnQoJHBvcnQpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wb3J0ID0gJHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm90b2NvbCBUaGUgcHJvdG9jb2wgdG8gaWRlbnRpZnkgYXMgdXNpbmcsIHVzdWFsbHkgaHR0cCBvciBodHRwcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFNlbGZQcm90b2NvbCgkcHJvdG9jb2wpCiAgICB7CiAgICAgICAgc2VsZjo6JF9wcm90b2NvbCA9ICRwcm90b2NvbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nIGh0dHB8aHR0cHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxmUHJvdG9jb2woKQogICAgewogICAgICAgICRwcm90b2NvbCA9ICdodHRwJzsKICAgICAgICBpZiAoc2VsZjo6JF9wcm90b2NvbCkgewogICAgICAgICAgICAkcHJvdG9jb2wgPSBzZWxmOjokX3Byb3RvY29sOwogICAgICAgIH0gZWxzZWlmIChzZWxmOjpnZXRTZWxmUG9ydCgpID09IDQ0MykgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAnaHR0cHMnOwogICAgICAgIH0gZWxzZWlmIChzZWxmOjpnZXRQcm94eVZhcnMoKSAmJiBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSkgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddOwogICAgICAgIH0gZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddICE9PSAnb2ZmJykgewogICAgICAgICAgICAkcHJvdG9jb2wgPSAnaHR0cHMnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHByb3RvY29sOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBob3N0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRjdXJyZW50SG9zdCBUaGUgY3VycmVudCBob3N0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZkhvc3QoKQogICAgewogICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OmdldFJhd0hvc3QoKTsKCiAgICAgICAgLy8gc3RyaXAgdGhlIHBvcnQKICAgICAgICBpZiAoZmFsc2UgIT09IHN0cnBvcygkY3VycmVudEhvc3QsICc6JykpIHsKICAgICAgICAgICAgbGlzdCgkY3VycmVudEhvc3QsICRwb3J0KSA9IGV4cGxvZGUoJzonLCAkY3VycmVudEhvc3QsIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjdXJyZW50SG9zdDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcgVGhlIHBvcnQgbnVtYmVyIHVzZWQgZm9yIHRoZSByZXF1ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZlBvcnQoKQogICAgewogICAgICAgICRwb3J0bnVtYmVyID0gbnVsbDsKICAgICAgICBpZiAoc2VsZjo6JF9wb3J0KSB7CiAgICAgICAgICAgICRwb3J0bnVtYmVyID0gc2VsZjo6JF9wb3J0OwogICAgICAgIH0gZWxzZSBpZiAoc2VsZjo6Z2V0UHJveHlWYXJzKCkgJiYgaXNzZXQoJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfUE9SVCJdKSkgewogICAgICAgICAgICAkcG9ydG51bWJlciA9ICRfU0VSVkVSWyJIVFRQX1hfRk9SV0FSREVEX1BPUlQiXTsKICAgICAgICB9IGVsc2UgaWYgKGlzc2V0KCRfU0VSVkVSWyJTRVJWRVJfUE9SVCJdKSkgewogICAgICAgICAgICAkcG9ydG51bWJlciA9ICRfU0VSVkVSWyJTRVJWRVJfUE9SVCJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdXJyZW50SG9zdCA9IHNlbGY6OmdldFJhd0hvc3QoKTsKCiAgICAgICAgICAgIC8vIHN0cmlwIHRoZSBwb3J0CiAgICAgICAgICAgIGlmIChmYWxzZSAhPT0gc3RycG9zKCRjdXJyZW50SG9zdCwgJzonKSkgewogICAgICAgICAgICAgICAgbGlzdCgkY3VycmVudEhvc3QsICRwb3J0KSA9IGV4cGxvZGUoJzonLCAkY3VycmVudEhvc3QsIDIpOwogICAgICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJHBvcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvcnRudW1iZXIgPSAkcG9ydDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHBvcnRudW1iZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgaHR0cHMgb3IgaHR0cC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgJGlzSHR0cHMgRmFsc2UgaWYgaHR0cHMgaXMgbm90IGFjdGl2ZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSFRUUFMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZXRTZWxmUHJvdG9jb2woKSA9PSAnaHR0cHMnOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxmVVJMTm9RdWVyeSgpCiAgICB7CiAgICAgICAgJHNlbGZVUkxOb1F1ZXJ5ID0gc2VsZjo6Z2V0U2VsZlVSTGhvc3QoKTsKCiAgICAgICAgJGluZm9XaXRoQmFzZVVSTFBhdGggPSBzZWxmOjpidWlsZFdpdGhCYXNlVVJMUGF0aCgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSk7CiAgICAgICAgaWYgKCFlbXB0eSgkaW5mb1dpdGhCYXNlVVJMUGF0aCkpIHsKICAgICAgICAgICAgJHNlbGZVUkxOb1F1ZXJ5IC49ICRpbmZvV2l0aEJhc2VVUkxQYXRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzZWxmVVJMTm9RdWVyeSAuPSAkX1NFUlZFUlsnU0NSSVBUX05BTUUnXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnUEFUSF9JTkZPJ10pKSB7CiAgICAgICAgICAgICRzZWxmVVJMTm9RdWVyeSAuPSAkX1NFUlZFUlsnUEFUSF9JTkZPJ107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZVUkxOb1F1ZXJ5OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcm91dGVkIFVSTCBvZiB0aGUgY3VycmVudCBob3N0ICsgY3VycmVudCB2aWV3LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZlJvdXRlZFVSTE5vUXVlcnkoKQogICAgewogICAgICAgICRzZWxmVVJMaG9zdCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCk7CiAgICAgICAgJHJvdXRlID0gJyc7CgogICAgICAgIGlmICghZW1wdHkoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKSB7CiAgICAgICAgICAgICRyb3V0ZSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSkpIHsKICAgICAgICAgICAgICAgICRyb3V0ZSA9IHNlbGY6OnN0ckxyZXBsYWNlKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgJycsICRyb3V0ZSk7CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRyb3V0ZSwgLTEpID09ICc/JykgewogICAgICAgICAgICAgICAgICAgICRyb3V0ZSA9IHN1YnN0cigkcm91dGUsIDAsIC0xKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGluZm9XaXRoQmFzZVVSTFBhdGggPSBzZWxmOjpidWlsZFdpdGhCYXNlVVJMUGF0aCgkcm91dGUpOwogICAgICAgIGlmICghZW1wdHkoJGluZm9XaXRoQmFzZVVSTFBhdGgpKSB7CiAgICAgICAgICAgICRyb3V0ZSA9ICRpbmZvV2l0aEJhc2VVUkxQYXRoOwogICAgICAgIH0KCiAgICAgICAgJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5ID0gJHNlbGZVUkxob3N0IC4gJHJvdXRlOwoKICAgICAgICAkcG9zID0gc3RycG9zKCRzZWxmUm91dGVkVVJMTm9RdWVyeSwgIj8iKTsKICAgICAgICBpZiAoJHBvcyAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5ID0gc3Vic3RyKCRzZWxmUm91dGVkVVJMTm9RdWVyeSwgMCwgJHBvcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZSb3V0ZWRVUkxOb1F1ZXJ5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyTHJlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICRzdWJqZWN0KQogICAgewogICAgICAgICRwb3MgPSBzdHJycG9zKCRzdWJqZWN0LCAkc2VhcmNoKTsKCiAgICAgICAgaWYgKCRwb3MgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRzdWJqZWN0ID0gc3Vic3RyX3JlcGxhY2UoJHN1YmplY3QsICRyZXBsYWNlLCAkcG9zLCBzdHJsZW4oJHNlYXJjaCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdWJqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IGhvc3QgKyBjdXJyZW50IHZpZXcgKyBxdWVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZVUkwoKQogICAgewogICAgICAgICRzZWxmVVJMaG9zdCA9IHNlbGY6OmdldFNlbGZVUkxob3N0KCk7CgogICAgICAgICRyZXF1ZXN0VVJJID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICAgICAgJHJlcXVlc3RVUkkgPSAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgICAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwogICAgICAgICAgICBpZiAoJHJlcXVlc3RVUklbMF0gIT09ICcvJyAmJiBwcmVnX21hdGNoKCcjXmh0dHBzPzovL1teL10qKC8uKikjaScsICRyZXF1ZXN0VVJJLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgICRyZXF1ZXN0VVJJID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRpbmZvV2l0aEJhc2VVUkxQYXRoID0gc2VsZjo6YnVpbGRXaXRoQmFzZVVSTFBhdGgoJHJlcXVlc3RVUkkpOwogICAgICAgIGlmICghZW1wdHkoJGluZm9XaXRoQmFzZVVSTFBhdGgpKSB7CiAgICAgICAgICAgICRyZXF1ZXN0VVJJID0gJGluZm9XaXRoQmFzZVVSTFBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlbGZVUkxob3N0IC4gJHJlcXVlc3RVUkk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwYXJ0IG9mIHRoZSBVUkwgd2l0aCB0aGUgQmFzZVVSTFBhdGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5mbyBDb250YWlucyBwYXRoIGluZm8KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkV2l0aEJhc2VVUkxQYXRoKCRpbmZvKQogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAkYmFzZVVSTFBhdGggPSBzZWxmOjpnZXRCYXNlVVJMUGF0aCgpOwogICAgICAgIGlmICghZW1wdHkoJGJhc2VVUkxQYXRoKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJGJhc2VVUkxQYXRoOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRpbmZvKSkgewogICAgICAgICAgICAgICAgJGV4dHJhY3RlZEluZm8gPSAkaW5mbzsKICAgICAgICAgICAgICAgIGlmICgkYmFzZVVSTFBhdGggIT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJhc2UgcGF0aCBmcm9tIHRoZSBwYXRoIGluZm8uCiAgICAgICAgICAgICAgICAgICAgJGV4dHJhY3RlZEluZm8gPSBzdHJfcmVwbGFjZSgkYmFzZVVSTFBhdGgsICcnLCAkaW5mbyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc3RhcnRpbmcgYW5kIGVuZGluZyBzbGFzaC4KICAgICAgICAgICAgICAgICRleHRyYWN0ZWRJbmZvID0gdHJpbSgkZXh0cmFjdGVkSW5mbywgJy8nKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGV4dHJhY3RlZEluZm8pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAkZXh0cmFjdGVkSW5mbzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgYSBxdWVyeSBwYXJhbSAtIGFzIGl0IHdhcyBzZW50IC0gZnJvbSAkX1NFUlZFUltRVUVSWV9TVFJJTkddCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgcGFyYW0gdG8tYmUgZXh0cmFjdGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0T3JpZ2luYWxRdWVyeVBhcmFtKCRuYW1lKQogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKSB8fCBlbXB0eSgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRpbmRleCA9IHN0cnBvcygkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10sICRuYW1lLic9Jyk7CiAgICAgICAgJHN1YnN0cmluZyA9IHN1YnN0cigkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10sICRpbmRleCArIHN0cmxlbigkbmFtZSkgKyAxKTsKICAgICAgICAkZW5kID0gc3RycG9zKCRzdWJzdHJpbmcsICcmJyk7CiAgICAgICAgcmV0dXJuICRlbmQgPyBzdWJzdHIoJHN1YnN0cmluZywgMCwgc3RycG9zKCRzdWJzdHJpbmcsICcmJykpIDogJHN1YnN0cmluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhbiB1bmlxdWUgc3RyaW5nICh1c2VkIGZvciBleGFtcGxlIGFzIElEIGZvciBhc3NlcnRpb25zKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgQSB1bmlxdWUgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVJRCgpCiAgICB7CiAgICAgICAgcmV0dXJuICdPTkVMT0dJTl8nIC4gc2hhMShyYW5kb21fYnl0ZXMoMjApKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgVU5JWCB0aW1lc3RhbXAgdG8gU0FNTDIgdGltZXN0YW1wIG9uIHRoZSBmb3JtCiAgICAgKiB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1ouCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRpbWUgVGhlIHRpbWUgd2Ugc2hvdWxkIGNvbnZlcnQgKERhdGVUaW1lKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkdGltZXN0YW1wIFNBTUwyIHRpbWVzdGFtcC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVRpbWUyU0FNTCgkdGltZSkKICAgIHsKICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoIkAkdGltZSIsIG5ldyBcRGF0ZVRpbWVab25lKCdVVEMnKSk7CiAgICAgICAgJHRpbWVzdGFtcCA9ICRkYXRlLT5mb3JtYXQoIlktbS1kXFRIOmk6c1xaIik7CiAgICAgICAgcmV0dXJuICR0aW1lc3RhbXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIFNBTUwyIHRpbWVzdGFtcCBvbiB0aGUgZm9ybSB5eXl5LW1tLWRkVGhoOm1tOnNzKFwucyspP1oKICAgICAqIHRvIGEgVU5JWCB0aW1lc3RhbXAuIFRoZSBzdWItc2Vjb25kIHBhcnQgaXMgaWdub3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aW1lIFRoZSB0aW1lIHdlIHNob3VsZCBjb252ZXJ0IChTQU1MIFRpbWVzdGFtcCkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgJHRpbWVzdGFtcCAgQ29udmVydGVkIHRvIGEgdW5peCB0aW1lc3RhbXAuCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVNBTUwyVGltZSgkdGltZSkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRpbWUpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRtYXRjaGVzID0gYXJyYXkoKTsKCiAgICAgICAgLyogV2UgdXNlIGEgdmVyeSBzdHJpY3QgcmVnZXggdG8gcGFyc2UgdGhlIHRpbWVzdGFtcC4gKi8KICAgICAgICAkZXhwMSA9ICcvXihcXGRcXGRcXGRcXGQpLShcXGRcXGQpLShcXGRcXGQpJzsKICAgICAgICAkZXhwMiA9ICdUKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoPzpcXC5cXGQrKT9aJC9EJzsKICAgICAgICBpZiAocHJlZ19tYXRjaCgkZXhwMSAuICRleHAyLCAkdGltZSwgJG1hdGNoZXMpID09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIFNBTUwyIHRpbWVzdGFtcCBwYXNzZWQgdG8nIC4KICAgICAgICAgICAgICAgICcgcGFyc2VTQU1MMlRpbWU6ICcgLiAkdGltZQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLyogRXh0cmFjdCB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgb2YgdGhlIHRpbWUgZnJvbSB0aGUKICAgICAgICAgKiBtYXRjaGVzIGluIHRoZSByZWdleC4gaW50IGNhc3Qgd2lsbCBpZ25vcmUgbGVhZGluZyB6ZXJvZXMKICAgICAgICAgKiBpbiB0aGUgc3RyaW5nLgogICAgICAgICAqLwogICAgICAgICR5ZWFyID0gKGludCkgJG1hdGNoZXNbMV07CiAgICAgICAgJG1vbnRoID0gKGludCkgJG1hdGNoZXNbMl07CiAgICAgICAgJGRheSA9IChpbnQpICRtYXRjaGVzWzNdOwogICAgICAgICRob3VyID0gKGludCkgJG1hdGNoZXNbNF07CiAgICAgICAgJG1pbnV0ZSA9IChpbnQpICRtYXRjaGVzWzVdOwogICAgICAgICRzZWNvbmQgPSAoaW50KSAkbWF0Y2hlc1s2XTsKCiAgICAgICAgLyogV2UgdXNlIGdtbWt0aW1lIGJlY2F1c2UgdGhlIHRpbWVzdGFtcCB3aWxsIGFsd2F5cyBiZSBnaXZlbgogICAgICAgICAqIGluIFVUQy4KICAgICAgICAgKi8KICAgICAgICAkdHMgPSBnbW1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCwgJG1vbnRoLCAkZGF5LCAkeWVhcik7CgogICAgICAgIHJldHVybiAkdHM7CiAgICB9CgoKICAgIC8qKgogICAgICogSW50ZXJwcmV0cyBhIElTTzg2MDEgZHVyYXRpb24gdmFsdWUgcmVsYXRpdmUgdG8gYSBnaXZlbiB0aW1lc3RhbXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRkdXJhdGlvbiAgVGhlIGR1cmF0aW9uLCBhcyBhIHN0cmluZy4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkdGltZXN0YW1wIFRoZSB1bml4IHRpbWVzdGFtcCB3ZSBzaG91bGQgYXBwbHkgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiB0by4gT3B0aW9uYWwsIGRlZmF1bHQgdG8gdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIG5ldyB0aW1lc3RhbXAsIGFmdGVyIHRoZSBkdXJhdGlvbiBpcyBhcHBsaWVkLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbigkZHVyYXRpb24sICR0aW1lc3RhbXAgPSBudWxsKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGR1cmF0aW9uKSk7CiAgICAgICAgYXNzZXJ0KGlzX251bGwoJHRpbWVzdGFtcCkgfHwgaXNfaW50KCR0aW1lc3RhbXApKTsKCiAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwoKICAgICAgICAvKiBQYXJzZSB0aGUgZHVyYXRpb24uIFdlIHVzZSBhIHZlcnkgc3RyaWN0IHBhdHRlcm4uICovCiAgICAgICAgJGR1cmF0aW9uUmVnRXggPSAnI14oLT8pUCg/Oig/Oig/OihcXGQrKVkpPyg/OihcXGQrKU0pPyg/OihcXGQrKUQpPyg/OlQoPzooXFxkKylIKT8oPzooXFxkKylNKT8oPzooXFxkKylTKT8pPyl8KD86KFxcZCspVykpJCNEJzsKICAgICAgICBpZiAoIXByZWdfbWF0Y2goJGR1cmF0aW9uUmVnRXgsICRkdXJhdGlvbiwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgSVNPIDg2MDEgZHVyYXRpb246ICcgLiAkZHVyYXRpb24pOwogICAgICAgIH0KCiAgICAgICAgJGR1clllYXJzID0gKGVtcHR5KCRtYXRjaGVzWzJdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzJdKTsKICAgICAgICAkZHVyTW9udGhzID0gKGVtcHR5KCRtYXRjaGVzWzNdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzNdKTsKICAgICAgICAkZHVyRGF5cyA9IChlbXB0eSgkbWF0Y2hlc1s0XSkgPyAwIDogKGludCkkbWF0Y2hlc1s0XSk7CiAgICAgICAgJGR1ckhvdXJzID0gKGVtcHR5KCRtYXRjaGVzWzVdKSA/IDAgOiAoaW50KSRtYXRjaGVzWzVdKTsKICAgICAgICAkZHVyTWludXRlcyA9IChlbXB0eSgkbWF0Y2hlc1s2XSkgPyAwIDogKGludCkkbWF0Y2hlc1s2XSk7CiAgICAgICAgJGR1clNlY29uZHMgPSAoZW1wdHkoJG1hdGNoZXNbN10pID8gMCA6IChpbnQpJG1hdGNoZXNbN10pOwogICAgICAgICRkdXJXZWVrcyA9IChlbXB0eSgkbWF0Y2hlc1s4XSkgPyAwIDogKGludCkkbWF0Y2hlc1s4XSk7CgogICAgICAgIGlmICghZW1wdHkoJG1hdGNoZXNbMV0pKSB7CiAgICAgICAgICAgIC8qIE5lZ2F0aXZlICovCiAgICAgICAgICAgICRkdXJZZWFycyA9IC0kZHVyWWVhcnM7CiAgICAgICAgICAgICRkdXJNb250aHMgPSAtJGR1ck1vbnRoczsKICAgICAgICAgICAgJGR1ckRheXMgPSAtJGR1ckRheXM7CiAgICAgICAgICAgICRkdXJIb3VycyA9IC0kZHVySG91cnM7CiAgICAgICAgICAgICRkdXJNaW51dGVzID0gLSRkdXJNaW51dGVzOwogICAgICAgICAgICAkZHVyU2Vjb25kcyA9IC0kZHVyU2Vjb25kczsKICAgICAgICAgICAgJGR1cldlZWtzID0gLSRkdXJXZWVrczsKICAgICAgICB9CgogICAgICAgIGlmICgkdGltZXN0YW1wID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aW1lc3RhbXAgPSB0aW1lKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGR1clllYXJzICE9PSAwIHx8ICRkdXJNb250aHMgIT09IDApIHsKICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBvZiBtb250aHMgYW5kIHllYXJzLCBzaW5jZSB0aGV5IGFyZW4ndCBhIHNwZWNpZmljIGludGVydmFsLCBidXQKICAgICAgICAgICAgICogaW5zdGVhZCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgdGltZS4KICAgICAgICAgICAgICovCgogICAgICAgICAgICAvKiBXZSBuZWVkIHRoZSB5ZWFyIGFuZCBtb250aCBmcm9tIHRoZSB0aW1lc3RhbXAuIFVuZm9ydHVuYXRlbHksIFBIUCBkb2Vzbid0IGhhdmUgdGhlCiAgICAgICAgICAgICAqIGdtdGltZSBmdW5jdGlvbi4gSW5zdGVhZCB3ZSB1c2UgdGhlIGdtZGF0ZSBmdW5jdGlvbiwgYW5kIHNwbGl0IHRoZSByZXN1bHQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkeWVhcm1vbnRoID0gZXhwbG9kZSgnOicsIGdtZGF0ZSgnWTpuJywgJHRpbWVzdGFtcCkpOwogICAgICAgICAgICAkeWVhciA9IChpbnQpJHllYXJtb250aFswXTsKICAgICAgICAgICAgJG1vbnRoID0gKGludCkkeWVhcm1vbnRoWzFdOwoKICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSB5ZWFyIGFuZCBtb250aCBmcm9tIHRoZSB0aW1lc3RhbXAuICovCiAgICAgICAgICAgICR0aW1lc3RhbXAgLT0gZ21ta3RpbWUoMCwgMCwgMCwgJG1vbnRoLCAxLCAkeWVhcik7CgogICAgICAgICAgICAvKiBBZGQgeWVhcnMgYW5kIG1vbnRocywgYW5kIG5vcm1hbGl6ZSB0aGUgbnVtYmVycyBhZnRlcndhcmRzLiAqLwogICAgICAgICAgICAkeWVhciArPSAkZHVyWWVhcnM7CiAgICAgICAgICAgICRtb250aCArPSAkZHVyTW9udGhzOwogICAgICAgICAgICB3aGlsZSAoJG1vbnRoID4gMTIpIHsKICAgICAgICAgICAgICAgICR5ZWFyICs9IDE7CiAgICAgICAgICAgICAgICAkbW9udGggLT0gMTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKCRtb250aCA8IDEpIHsKICAgICAgICAgICAgICAgICR5ZWFyIC09IDE7CiAgICAgICAgICAgICAgICAkbW9udGggKz0gMTI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIEFkZCB5ZWFyIGFuZCBtb250aCBiYWNrIGludG8gdGltZXN0YW1wLiAqLwogICAgICAgICAgICAkdGltZXN0YW1wICs9IGdtbWt0aW1lKDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIpOwogICAgICAgIH0KCiAgICAgICAgLyogQWRkIHRoZSBvdGhlciBlbGVtZW50cy4gKi8KICAgICAgICAkdGltZXN0YW1wICs9ICRkdXJXZWVrcyAqIDcgKiAyNCAqIDYwICogNjA7CiAgICAgICAgJHRpbWVzdGFtcCArPSAkZHVyRGF5cyAqIDI0ICogNjAgKiA2MDsKICAgICAgICAkdGltZXN0YW1wICs9ICRkdXJIb3VycyAqIDYwICogNjA7CiAgICAgICAgJHRpbWVzdGFtcCArPSAkZHVyTWludXRlcyAqIDYwOwogICAgICAgICR0aW1lc3RhbXAgKz0gJGR1clNlY29uZHM7CgogICAgICAgIHJldHVybiAkdGltZXN0YW1wOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZXMgMiBkYXRlcyBhbmQgcmV0dXJucyB0aGUgZWFybGllc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAkY2FjaGVEdXJhdGlvbiBUaGUgZHVyYXRpb24sIGFzIGEgc3RyaW5nLgogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8bnVsbCAkdmFsaWRVbnRpbCAgICBUaGUgdmFsaWQgdW50aWwgZGF0ZSwgYXMgYSBzdHJpbmcgb3IgYXMgYSB0aW1lc3RhbXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsICRleHBpcmVUaW1lICBUaGUgZXhwaXJhdGlvbiB0aW1lLgogICAgICogQHBocHN0YW4tcmV0dXJuICgkY2FjaGVEdXJhdGlvbiBpcyB0cnVlID8gc3RyaW5nIDogbmV2ZXIpCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHBpcmVUaW1lKCRjYWNoZUR1cmF0aW9uID0gbnVsbCwgJHZhbGlkVW50aWwgPSBudWxsKQogICAgewogICAgICAgICRleHBpcmVUaW1lID0gbnVsbDsKCiAgICAgICAgaWYgKCRjYWNoZUR1cmF0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgICRleHBpcmVUaW1lID0gc2VsZjo6cGFyc2VEdXJhdGlvbigkY2FjaGVEdXJhdGlvbiwgdGltZSgpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdmFsaWRVbnRpbCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoaXNfaW50KCR2YWxpZFVudGlsKSkgewogICAgICAgICAgICAgICAgJHZhbGlkVW50aWxUaW1lID0gJHZhbGlkVW50aWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFsaWRVbnRpbFRpbWUgPSBzZWxmOjpwYXJzZVNBTUwyVGltZSgkdmFsaWRVbnRpbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRleHBpcmVUaW1lID09PSBudWxsIHx8ICRleHBpcmVUaW1lID4gJHZhbGlkVW50aWxUaW1lKSB7CiAgICAgICAgICAgICAgICAkZXhwaXJlVGltZSA9ICR2YWxpZFVudGlsVGltZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRleHBpcmVUaW1lOwogICAgfQoKCiAgICAvKioKICAgICAqIEV4dHJhY3RzIG5vZGVzIGZyb20gdGhlIERPTURvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudCAgICAgICRkb20gICAgIFRoZSBET01Eb2N1bWVudAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgJHF1ZXJ5ICAgXFhwYXRoIEV4cHJlc3Npb24KICAgICAqIEBwYXJhbSBET01FbGVtZW50fG51bGwgICRjb250ZXh0IENvbnRleHQgTm9kZSAoRE9NRWxlbWVudCkKICAgICAqCiAgICAgKiBAcmV0dXJuIERPTU5vZGVMaXN0IFRoZSBxdWVyaWVkIG5vZGVzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcXVlcnkoRE9NRG9jdW1lbnQgJGRvbSwgJHF1ZXJ5LCA/RE9NRWxlbWVudCAkY29udGV4dCA9IG51bGwpCiAgICB7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRkb20pOwogICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NhbWxwJywgQ29uc3RhbnRzOjpOU19TQU1MUCk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2FtbCcsIENvbnN0YW50czo6TlNfU0FNTCk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnZHMnLCBDb25zdGFudHM6Ok5TX0RTKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4ZW5jJywgQ29uc3RhbnRzOjpOU19YRU5DKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4c2knLCBDb25zdGFudHM6Ok5TX1hTSSk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgneHMnLCBDb25zdGFudHM6Ok5TX1hTKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdtZCcsIENvbnN0YW50czo6TlNfTUQpOwoKICAgICAgICBpZiAoaXNzZXQoJGNvbnRleHQpKSB7CiAgICAgICAgICAgICRyZXMgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJGNvbnRleHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXMgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQgb3Igbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBzZXNzw61vbiBpcyBzdGFydGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNTZXNzaW9uU3RhcnRlZCgpCiAgICB7CiAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEID49IDUwNDAwKSB7CiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uX3N0YXR1cygpID09PSBQSFBfU0VTU0lPTl9BQ1RJVkUgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25faWQoKSA9PT0gJycgPyBmYWxzZSA6IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlcyB0aGUgbG9jYWwgc2Vzc2lvbi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVMb2NhbFNlc3Npb24oKQogICAgewogICAgICAgIGlmIChVdGlsczo6aXNTZXNzaW9uU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHNlc3Npb25fdW5zZXQoKTsKICAgICAgICAgICAgc2Vzc2lvbl9kZXN0cm95KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJF9TRVNTSU9OID0gYXJyYXkoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmaW5nZXJwcmludCBvZiBhIHg1MDljZXJ0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHg1MDljZXJ0IHg1MDkgY2VydCBmb3JtYXR0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZyAgICAgIEFsZ29yaXRobSB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgZmluZ2VycHJpbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nIEZvcm1hdHRlZCBmaW5nZXJwcmludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludCgkeDUwOWNlcnQsICRhbGcgPSAnc2hhMScpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkeDUwOWNlcnQpKTsKCiAgICAgICAgJGFyQ2VydCA9IGV4cGxvZGUoIlxuIiwgJHg1MDljZXJ0KTsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgICRpbkRhdGEgPSBmYWxzZTsKCiAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBhcyAkY3VyRGF0YSkgewogICAgICAgICAgICBpZiAoISAkaW5EYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUnLCAyMikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBQVUJMSUMgS0VZJywgMjEpID09IDApIHx8IChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVknLCAyNikgPT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzbid0IGFuIFg1MDkgY2VydGlmaWNhdGUuICovCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tRU5EIENFUlRJRklDQVRFJywgMjApID09IDApIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY3VyRGF0YSkpIHsKICAgICAgICAgICAgICAgICAgICAkY3VyRGF0YSA9IHRyaW0oJGN1ckRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGRhdGEgLj0gJGN1ckRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkZGF0YSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkZGVjb2RlZERhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsKCiAgICAgICAgc3dpdGNoICgkYWxnKSB7CiAgICAgICAgICAgIGNhc2UgJ3NoYTUxMic6CiAgICAgICAgICAgIGNhc2UgJ3NoYTM4NCc6CiAgICAgICAgICAgIGNhc2UgJ3NoYTI1Nic6CiAgICAgICAgICAgICAgICAkZmluZ2VycHJpbnQgPSBoYXNoKCRhbGcsICRkZWNvZGVkRGF0YSwgZmFsc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NoYTEnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJGZpbmdlcnByaW50ID0gc3RydG9sb3dlcihzaGExKCRkZWNvZGVkRGF0YSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmluZ2VycHJpbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JtYXRlcyBhIGZpbmdlcnByaW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbmdlcnByaW50IGZpbmdlcnByaW50CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgRm9ybWF0dGVkIGZpbmdlcnByaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0RmluZ2VyUHJpbnQoJGZpbmdlcnByaW50KQogICAgewogICAgICAgIGlmIChpc19udWxsKCRmaW5nZXJwcmludCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkZm9ybWF0ZWRGaW5nZXJwcmludCA9IHN0cl9yZXBsYWNlKCc6JywgJycsICRmaW5nZXJwcmludCk7CiAgICAgICAgJGZvcm1hdGVkRmluZ2VycHJpbnQgPSBzdHJ0b2xvd2VyKCRmb3JtYXRlZEZpbmdlcnByaW50KTsKICAgICAgICByZXR1cm4gJGZvcm1hdGVkRmluZ2VycHJpbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZXMgYSBuYW1lSUQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR2YWx1ZSAgZmluZ2VycHJpbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkc3BucSAgIFNQIE5hbWUgUXVhbGlmaWVyCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGZvcm1hdCBTUCBGb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY2VydCAgIElkUCBQdWJsaWMgY2VydCB0byBlbmNyeXB0IHRoZSBuYW1lSUQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbnEgICAgIElkUCBOYW1lIFF1YWxpZmllcgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNBbGcgRW5jcnlwdGlvbiBhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkbmFtZUlERWxlbWVudCBET01FbGVtZW50IHwgWE1MU2VjIG5hbWVJRAogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lSWQoJHZhbHVlLCAkc3BucSwgJGZvcm1hdCA9IG51bGwsICRjZXJ0ID0gbnVsbCwgJG5xID0gbnVsbCwgJGVuY0FsZyA9IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDKQogICAgewoKICAgICAgICAkZG9jID0gbmV3IERPTURvY3VtZW50KCk7CgogICAgICAgICRuYW1lSWQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCdzYW1sOk5hbWVJRCcpOwogICAgICAgIGlmIChpc3NldCgkc3BucSkpIHsKICAgICAgICAgICAgJG5hbWVJZC0+c2V0QXR0cmlidXRlKCdTUE5hbWVRdWFsaWZpZXInLCAkc3BucSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkbnEpKSB7CiAgICAgICAgICAgICRuYW1lSWQtPnNldEF0dHJpYnV0ZSgnTmFtZVF1YWxpZmllcicsICRucSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkZm9ybWF0KSkgewogICAgICAgICAgICAkbmFtZUlkLT5zZXRBdHRyaWJ1dGUoJ0Zvcm1hdCcsICRmb3JtYXQpOwogICAgICAgIH0KICAgICAgICAkbmFtZUlkLT5hcHBlbmRDaGlsZCgkZG9jLT5jcmVhdGVUZXh0Tm9kZSgkdmFsdWUpKTsKCiAgICAgICAgJGRvYy0+YXBwZW5kQ2hpbGQoJG5hbWVJZCk7CgogICAgICAgIGlmICghZW1wdHkoJGNlcnQpKSB7CiAgICAgICAgICAgIGlmICgkZW5jQWxnID09IFhNTFNlY3VyaXR5S2V5OjpBRVMxMjhfQ0JDKSB7CiAgICAgICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfMV81LCBhcnJheSgndHlwZSc9PidwdWJsaWMnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2Vja2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUCwgYXJyYXkoJ3R5cGUnPT4ncHVibGljJykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWNrZXktPmxvYWRLZXkoJGNlcnQpOwoKICAgICAgICAgICAgJGVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAgICAgJGVuYy0+c2V0Tm9kZSgkbmFtZUlkKTsKICAgICAgICAgICAgJGVuYy0+dHlwZSA9IFhNTFNlY0VuYzo6RWxlbWVudDsKCiAgICAgICAgICAgICRzeW1tZXRyaWNLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoJGVuY0FsZyk7CiAgICAgICAgICAgICRzeW1tZXRyaWNLZXktPmdlbmVyYXRlU2Vzc2lvbktleSgpOwogICAgICAgICAgICAkZW5jLT5lbmNyeXB0S2V5KCRzZWNrZXksICRzeW1tZXRyaWNLZXkpOwoKICAgICAgICAgICAgJGVuY3J5cHRlZERhdGEgPSAkZW5jLT5lbmNyeXB0Tm9kZSgkc3ltbWV0cmljS2V5KTsKCiAgICAgICAgICAgICRuZXdkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKCiAgICAgICAgICAgICRlbmNyeXB0ZWRJRCA9ICRuZXdkb2MtPmNyZWF0ZUVsZW1lbnQoJ3NhbWw6RW5jcnlwdGVkSUQnKTsKCiAgICAgICAgICAgICRuZXdkb2MtPmFwcGVuZENoaWxkKCRlbmNyeXB0ZWRJRCk7CgogICAgICAgICAgICAkZW5jcnlwdGVkSUQtPmFwcGVuZENoaWxkKCRlbmNyeXB0ZWRJRC0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZW5jcnlwdGVkRGF0YSwgdHJ1ZSkpOwoKICAgICAgICAgICAgcmV0dXJuICRuZXdkb2MtPnNhdmVYTUwoJGVuY3J5cHRlZElEKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRvYy0+c2F2ZVhNTCgkbmFtZUlkKTsKICAgICAgICB9CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0cyBTdGF0dXMgZnJvbSBhIFJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudCAkZG9tIFRoZSBSZXNwb25zZSBhcyBYTUwKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5ICRzdGF0dXMgVGhlIFN0YXR1cywgYW4gYXJyYXkgd2l0aCB0aGUgY29kZSBhbmQgYSBtZXNzYWdlLgogICAgICoKICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3RhdHVzKERPTURvY3VtZW50ICRkb20pCiAgICB7CiAgICAgICAgJHN0YXR1cyA9IGFycmF5KCk7CgogICAgICAgICRzdGF0dXNFbnRyeSA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvc2FtbHA6UmVzcG9uc2Uvc2FtbHA6U3RhdHVzJyk7CiAgICAgICAgaWYgKCRzdGF0dXNFbnRyeS0+bGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICJNaXNzaW5nIFN0YXR1cyBvbiByZXNwb25zZSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfU1RBVFVTCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkY29kZUVudHJ5ID0gc2VsZjo6cXVlcnkoJGRvbSwgJy9zYW1scDpSZXNwb25zZS9zYW1scDpTdGF0dXMvc2FtbHA6U3RhdHVzQ29kZScsICRzdGF0dXNFbnRyeS0+aXRlbSgwKSk7CiAgICAgICAgaWYgKCRjb2RlRW50cnktPmxlbmd0aCAhPSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAiTWlzc2luZyBTdGF0dXMgQ29kZSBvbiByZXNwb25zZSIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6Ok1JU1NJTkdfU1RBVFVTX0NPREUKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGNvZGUgPSAkY29kZUVudHJ5LT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ1ZhbHVlJyk7CiAgICAgICAgJHN0YXR1c1snY29kZSddID0gJGNvZGU7CgogICAgICAgICRzdGF0dXNbJ21zZyddID0gJyc7CiAgICAgICAgJG1lc3NhZ2VFbnRyeSA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvc2FtbHA6UmVzcG9uc2Uvc2FtbHA6U3RhdHVzL3NhbWxwOlN0YXR1c01lc3NhZ2UnLCAkc3RhdHVzRW50cnktPml0ZW0oMCkpOwogICAgICAgIGlmICgkbWVzc2FnZUVudHJ5LT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAkc3ViQ29kZUVudHJ5ID0gc2VsZjo6cXVlcnkoJGRvbSwgJy9zYW1scDpSZXNwb25zZS9zYW1scDpTdGF0dXMvc2FtbHA6U3RhdHVzQ29kZS9zYW1scDpTdGF0dXNDb2RlJywgJHN0YXR1c0VudHJ5LT5pdGVtKDApKTsKICAgICAgICAgICAgaWYgKCRzdWJDb2RlRW50cnktPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgICAkc3RhdHVzWydtc2cnXSA9ICRzdWJDb2RlRW50cnktPml0ZW0oMCktPmdldEF0dHJpYnV0ZSgnVmFsdWUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoJG1lc3NhZ2VFbnRyeS0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgJG1zZyA9ICRtZXNzYWdlRW50cnktPml0ZW0oMCktPnRleHRDb250ZW50OwogICAgICAgICAgICAkc3RhdHVzWydtc2cnXSA9ICRtc2c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHRzIGFuIGVuY3J5cHRlZCBlbGVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBET01FbGVtZW50ICAgICAkZW5jcnlwdGVkRGF0YSBUaGUgZW5jcnlwdGVkIGRhdGEuCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJGlucHV0S2V5ICAgICAgVGhlIGRlY3J5cHRpb24ga2V5LgogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICRmb3JtYXRPdXRwdXQgIEZvcm1hdCBvciBub3QgdGhlIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQgIFRoZSBkZWNyeXB0ZWQgZWxlbWVudC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRFbGVtZW50KERPTUVsZW1lbnQgJGVuY3J5cHRlZERhdGEsIFhNTFNlY3VyaXR5S2V5ICRpbnB1dEtleSwgJGZvcm1hdE91dHB1dCA9IHRydWUpCiAgICB7CgogICAgICAgICRlbmMgPSBuZXcgWE1MU2VjRW5jKCk7CgogICAgICAgICRlbmMtPnNldE5vZGUoJGVuY3J5cHRlZERhdGEpOwogICAgICAgICRlbmMtPnR5cGUgPSAkZW5jcnlwdGVkRGF0YS0+Z2V0QXR0cmlidXRlKCJUeXBlIik7CgogICAgICAgICRzeW1tZXRyaWNLZXkgPSAkZW5jLT5sb2NhdGVLZXkoJGVuY3J5cHRlZERhdGEpOwogICAgICAgIGlmICghJHN5bW1ldHJpY0tleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBsb2NhdGUga2V5IGFsZ29yaXRobSBpbiBlbmNyeXB0ZWQgZGF0YS4nLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpLRVlfQUxHT1JJVEhNX0VSUk9SCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkc3ltbWV0cmljS2V5SW5mbyA9ICRlbmMtPmxvY2F0ZUtleUluZm8oJHN5bW1ldHJpY0tleSk7CiAgICAgICAgaWYgKCEkc3ltbWV0cmljS2V5SW5mbykgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgPGRzaWc6S2V5SW5mbz4gZm9yIHRoZSBlbmNyeXB0ZWQga2V5LiIsCiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWUlORk9fTk9UX0ZPVU5EX0lOX0VOQ1JZUFRFRF9EQVRBCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkaW5wdXRLZXlBbGdvID0gJGlucHV0S2V5LT5nZXRBbGdvcml0aG0oKTsKICAgICAgICBpZiAoJHN5bW1ldHJpY0tleUluZm8tPmlzRW5jcnlwdGVkKSB7CiAgICAgICAgICAgICRzeW1LZXlJbmZvQWxnbyA9ICRzeW1tZXRyaWNLZXlJbmZvLT5nZXRBbGdvcml0aG0oKTsKCiAgICAgICAgICAgIGlmICgkc3ltS2V5SW5mb0FsZ28gPT09IFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUCAmJiAkaW5wdXRLZXlBbGdvID09PSBYTUxTZWN1cml0eUtleTo6UlNBXzFfNSkgewogICAgICAgICAgICAgICAgJGlucHV0S2V5QWxnbyA9IFhNTFNlY3VyaXR5S2V5OjpSU0FfT0FFUF9NR0YxUDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpbnB1dEtleUFsZ28gIT09ICRzeW1LZXlJbmZvQWxnbykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnQWxnb3JpdGhtIG1pc21hdGNoIGJldHdlZW4gaW5wdXQga2V5IGFuZCBrZXkgdXNlZCB0byBlbmNyeXB0ICcgLgogICAgICAgICAgICAgICAgICAgICcgdGhlIHN5bW1ldHJpYyBrZXkgZm9yIHRoZSBtZXNzYWdlLiBLZXkgd2FzOiAnIC4KICAgICAgICAgICAgICAgICAgICB2YXJfZXhwb3J0KCRpbnB1dEtleUFsZ28sIHRydWUpIC4gJzsgbWVzc2FnZSB3YXM6ICcgLgogICAgICAgICAgICAgICAgICAgIHZhcl9leHBvcnQoJHN5bUtleUluZm9BbGdvLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6OktFWV9BTEdPUklUSE1fRVJST1IKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRlbmNLZXkgPSAkc3ltbWV0cmljS2V5SW5mby0+ZW5jcnlwdGVkQ3R4OwogICAgICAgICAgICAkc3ltbWV0cmljS2V5SW5mby0+a2V5ID0gJGlucHV0S2V5LT5rZXk7CiAgICAgICAgICAgICRrZXlTaXplID0gJHN5bW1ldHJpY0tleS0+Z2V0U3ltbWV0cmljS2V5U2l6ZSgpOwogICAgICAgICAgICBpZiAoJGtleVNpemUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIC8vIFRvIHByb3RlY3QgYWdhaW5zdCAia2V5IG9yYWNsZSIgYXR0YWNrcwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnVW5rbm93biBrZXkgc2l6ZSBmb3IgZW5jcnlwdGlvbiBhbGdvcml0aG06ICcgLiB2YXJfZXhwb3J0KCRzeW1tZXRyaWNLZXktPnR5cGUsIHRydWUpLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6S0VZX0FMR09SSVRITV9FUlJPUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGtleSA9ICRlbmNLZXktPmRlY3J5cHRLZXkoJHN5bW1ldHJpY0tleUluZm8pOwogICAgICAgICAgICBpZiAoc3RybGVuKCRrZXkpICE9ICRrZXlTaXplKSB7CiAgICAgICAgICAgICAgICAkZW5jcnlwdGVkS2V5ID0gJGVuY0tleS0+Z2V0Q2lwaGVyVmFsdWUoKTsKICAgICAgICAgICAgICAgICRwa2V5ID0gb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRzeW1tZXRyaWNLZXlJbmZvLT5rZXkpOwogICAgICAgICAgICAgICAgJHBrZXkgPSBzaGExKHNlcmlhbGl6ZSgkcGtleSksIHRydWUpOwogICAgICAgICAgICAgICAgJGtleSA9IHNoYTEoJGVuY3J5cHRlZEtleSAuICRwa2V5LCB0cnVlKTsKCiAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUga2V5IGhhcyB0aGUgY29ycmVjdCBsZW5ndGguICovCiAgICAgICAgICAgICAgICBpZiAoc3RybGVuKCRrZXkpID4gJGtleVNpemUpIHsKICAgICAgICAgICAgICAgICAgICAka2V5ID0gc3Vic3RyKCRrZXksIDAsICRrZXlTaXplKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJsZW4oJGtleSkgPCAka2V5U2l6ZSkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcGFkKCRrZXksICRrZXlTaXplKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ltbWV0cmljS2V5LT5sb2FkS2V5KCRrZXkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzeW1LZXlBbGdvID0gJHN5bW1ldHJpY0tleS0+Z2V0QWxnb3JpdGhtKCk7CiAgICAgICAgICAgIGlmICgkaW5wdXRLZXlBbGdvICE9PSAkc3ltS2V5QWxnbykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAnQWxnb3JpdGhtIG1pc21hdGNoIGJldHdlZW4gaW5wdXQga2V5IGFuZCBrZXkgaW4gbWVzc2FnZS4gJyAuCiAgICAgICAgICAgICAgICAgICAgJ0tleSB3YXM6ICcgLiB2YXJfZXhwb3J0KCRpbnB1dEtleUFsZ28sIHRydWUpIC4gJzsgbWVzc2FnZSB3YXM6ICcgLgogICAgICAgICAgICAgICAgICAgIHZhcl9leHBvcnQoJHN5bUtleUFsZ28sIHRydWUpLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6S0VZX0FMR09SSVRITV9FUlJPUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3ltbWV0cmljS2V5ID0gJGlucHV0S2V5OwogICAgICAgIH0KCiAgICAgICAgJGRlY3J5cHRlZCA9ICRlbmMtPmRlY3J5cHROb2RlKCRzeW1tZXRyaWNLZXksIGZhbHNlKTsKCiAgICAgICAgJHhtbCA9ICc8cm9vdCB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4nLiRkZWNyeXB0ZWQuJzwvcm9vdD4nOwogICAgICAgICRuZXdEb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICBpZiAoJGZvcm1hdE91dHB1dCkgewogICAgICAgICAgICAkbmV3RG9jLT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgJG5ld0RvYy0+Zm9ybWF0T3V0cHV0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgJG5ld0RvYyA9IHNlbGY6OmxvYWRYTUwoJG5ld0RvYywgJHhtbCk7CiAgICAgICAgaWYgKCEkbmV3RG9jKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIGRlY3J5cHRlZCBYTUwuJywKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvcjo6SU5WQUxJRF9YTUxfRk9STUFUCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkZGVjcnlwdGVkRWxlbWVudCA9ICRuZXdEb2MtPmZpcnN0Q2hpbGQtPmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKCRkZWNyeXB0ZWRFbGVtZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAnTWlzc2luZyBlbmNyeXB0ZWQgZWxlbWVudC4nLAogICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpNSVNTSU5HX0VOQ1JZUFRFRF9FTEVNRU5UCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlY3J5cHRlZEVsZW1lbnQ7CiAgICB9CgogICAgIC8qKgogICAgICAqIENvbnZlcnRzIGEgWE1MU2VjdXJpdHlLZXkgdG8gdGhlIGNvcnJlY3QgYWxnb3JpdGhtLgogICAgICAqCiAgICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRrZXkgICAgICAgVGhlIGtleS4KICAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgJGFsZ29yaXRobSBUaGUgZGVzaXJlZCBhbGdvcml0aG0uCiAgICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICR0eXBlICAgICAgUHVibGljIG9yIHByaXZhdGUga2V5LCBkZWZhdWx0cyB0byBwdWJsaWMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFhNTFNlY3VyaXR5S2V5IFRoZSBuZXcga2V5LgogICAgICAqCiAgICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEtleShYTUxTZWN1cml0eUtleSAka2V5LCAkYWxnb3JpdGhtLCAkdHlwZSA9ICdwdWJsaWMnKQogICAgewogICAgICAgIGFzc2VydChpc19zdHJpbmcoJGFsZ29yaXRobSkpOwogICAgICAgIGFzc2VydCgkdHlwZSA9PT0gJ3B1YmxpYycgfHwgJHR5cGUgPT09ICdwcml2YXRlJyk7CgogICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgYWxnb3JpdGhtIGlzIGFscmVhZHkgdGhlIHR5cGUgb2YgdGhlIGtleQogICAgICAgIGlmICgka2V5LT50eXBlID09PSAkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgIHJldHVybiAka2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCFVdGlsczo6aXNTdXBwb3J0ZWRTaWduaW5nQWxnb3JpdGhtKCRhbGdvcml0aG0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIHNpZ25pbmcgYWxnb3JpdGhtLicpOwogICAgICAgIH0KCiAgICAgICAgJGtleUluZm8gPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJGtleS0+a2V5KTsKICAgICAgICBpZiAoJGtleUluZm8gPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQga2V5IGRldGFpbHMgZnJvbSBYTUxTZWN1cml0eUtleS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgka2V5SW5mb1sna2V5J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3Npbmcga2V5IGluIHB1YmxpYyBrZXkgZGV0YWlscy4nKTsKICAgICAgICB9CiAgICAgICAgJG5ld0tleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYWxnb3JpdGhtLCBhcnJheSgndHlwZSc9PiR0eXBlKSk7CiAgICAgICAgJG5ld0tleS0+bG9hZEtleSgka2V5SW5mb1sna2V5J10pOwogICAgICAgIHJldHVybiAkbmV3S2V5OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRhbGdvcml0aG0KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1N1cHBvcnRlZFNpZ25pbmdBbGdvcml0aG0oJGFsZ29yaXRobSkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoCiAgICAgICAgICAgICRhbGdvcml0aG0sCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgWE1MU2VjdXJpdHlLZXk6OlJTQV8xXzUsCiAgICAgICAgICAgICAgICBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTEsCiAgICAgICAgICAgICAgICBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTI1NiwKICAgICAgICAgICAgICAgIFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMzg0LAogICAgICAgICAgICAgICAgWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEE1MTIKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHNpZ25hdHVyZSBrZXkgYW5kIHNlbmRlcnMgY2VydGlmaWNhdGUgdG8gYW4gZWxlbWVudCAoTWVzc2FnZSBvciBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8RE9NRG9jdW1lbnQgJHhtbCAgICAgICAgICAgICBUaGUgZWxlbWVudCB3ZSBzaG91bGQgc2lnbgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAka2V5ICAgICAgICAgICAgIFRoZSBwcml2YXRlIGtleQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkY2VydCAgICAgICAgICAgIFRoZSBwdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgJHNpZ25BbGdvcml0aG0gICBTaWduYXR1cmUgYWxnb3JpdGhtIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAkZGlnZXN0QWxnb3JpdGhtIERpZ2VzdCBhbGdvcml0aG0gbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZFNpZ24oJHhtbCwgJGtleSwgJGNlcnQsICRzaWduQWxnb3JpdGhtID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTYsICRkaWdlc3RBbGdvcml0aG0gPSBYTUxTZWN1cml0eURTaWc6OlNIQTI1NikKICAgIHsKICAgICAgICBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb20gPSAkeG1sOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb20gPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgJGRvbSA9IHNlbGY6OmxvYWRYTUwoJGRvbSwgJHhtbCk7CiAgICAgICAgICAgIGlmICghJGRvbSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRXJyb3IgcGFyc2luZyB4bWwgc3RyaW5nJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIExvYWQgdGhlIHByaXZhdGUga2V5LiAqLwogICAgICAgICRvYmpLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoJHNpZ25BbGdvcml0aG0sIGFycmF5KCd0eXBlJyA9PiAncHJpdmF0ZScpKTsKICAgICAgICAkb2JqS2V5LT5sb2FkS2V5KCRrZXksIGZhbHNlKTsKCiAgICAgICAgLyogR2V0IHRoZSBFbnRpdHlEZXNjcmlwdG9yIG5vZGUgd2Ugc2hvdWxkIHNpZ24uICovCiAgICAgICAgJHJvb3ROb2RlID0gJGRvbS0+Zmlyc3RDaGlsZDsKCiAgICAgICAgLyogU2lnbiB0aGUgbWV0YWRhdGEgd2l0aCBvdXIgcHJpdmF0ZSBrZXkuICovCiAgICAgICAgJG9ialhNTFNlY0RTaWcgPSBuZXcgWE1MU2VjdXJpdHlEU2lnKCk7CiAgICAgICAgJG9ialhNTFNlY0RTaWctPnNldENhbm9uaWNhbE1ldGhvZChYTUxTZWN1cml0eURTaWc6OkVYQ19DMTROKTsKCiAgICAgICAgJG9ialhNTFNlY0RTaWctPmFkZFJlZmVyZW5jZUxpc3QoCiAgICAgICAgICAgIGFycmF5KCRyb290Tm9kZSksCiAgICAgICAgICAgICRkaWdlc3RBbGdvcml0aG0sCiAgICAgICAgICAgIGFycmF5KCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZScsIFhNTFNlY3VyaXR5RFNpZzo6RVhDX0MxNE4pLAogICAgICAgICAgICBhcnJheSgnaWRfbmFtZScgPT4gJ0lEJykKICAgICAgICApOwoKICAgICAgICAkb2JqWE1MU2VjRFNpZy0+c2lnbigkb2JqS2V5KTsKCiAgICAgICAgLyogQWRkIHRoZSBjZXJ0aWZpY2F0ZSB0byB0aGUgc2lnbmF0dXJlLiAqLwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5hZGQ1MDlDZXJ0KCRjZXJ0LCB0cnVlKTsKCiAgICAgICAgJGluc2VydEJlZm9yZSA9ICRyb290Tm9kZS0+Zmlyc3RDaGlsZDsKICAgICAgICAkbWVzc2FnZVR5cGVzID0gYXJyYXkoJ0F1dGhuUmVxdWVzdCcsICdSZXNwb25zZScsICdMb2dvdXRSZXF1ZXN0JywnTG9nb3V0UmVzcG9uc2UnKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJHJvb3ROb2RlLT5sb2NhbE5hbWUsICRtZXNzYWdlVHlwZXMpKSB7CiAgICAgICAgICAgICRpc3N1ZXJOb2RlcyA9IHNlbGY6OnF1ZXJ5KCRkb20sICcvJy4kcm9vdE5vZGUtPnRhZ05hbWUuJy9zYW1sOklzc3VlcicpOwogICAgICAgICAgICBpZiAoJGlzc3Vlck5vZGVzLT5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgICAgJGluc2VydEJlZm9yZSA9ICRpc3N1ZXJOb2Rlcy0+aXRlbSgwKS0+bmV4dFNpYmxpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIEFkZCB0aGUgc2lnbmF0dXJlLiAqLwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5pbnNlcnRTaWduYXR1cmUoJHJvb3ROb2RlLCAkaW5zZXJ0QmVmb3JlKTsKCiAgICAgICAgLyogUmV0dXJuIHRoZSBET00gdHJlZSBhcyBhIHN0cmluZy4gKi8KICAgICAgICAkc2lnbmVkeG1sID0gJGRvbS0+c2F2ZVhNTCgpOwoKICAgICAgICByZXR1cm4gJHNpZ25lZHhtbDsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIHNpZ25hdHVyZSAoTWVzc2FnZSBvciBBc3NlcnRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8XERvbU5vZGUgICAkeG1sICAgICAgICAgICAgVGhlIGVsZW1lbnQgd2Ugc2hvdWxkIHZhbGlkYXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJGNlcnQgICAgICAgICAgIFRoZSBwdWJsaWMgY2VydAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICRmaW5nZXJwcmludCAgICBUaGUgZmluZ2VycHJpbnQgb2YgdGhlIHB1YmxpYyBjZXJ0CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJGZpbmdlcnByaW50YWxnIFRoZSBhbGdvcml0aG0gdXNlZCB0byBnZXQgdGhlIGZpbmdlcnByaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgJHhwYXRoICAgICAgICAgIFRoZSB4cGF0aCBvZiB0aGUgc2lnbmVkIGVsZW1lbnQKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAgICAgICAkbXVsdGlDZXJ0cyAgICAgTXVsdGlwbGUgcHVibGljIGNlcnRzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZVNpZ24oJHhtbCwgJGNlcnQgPSBudWxsLCAkZmluZ2VycHJpbnQgPSBudWxsLCAkZmluZ2VycHJpbnRhbGcgPSAnc2hhMScsICR4cGF0aCA9IG51bGwsICRtdWx0aUNlcnRzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb20gPSBjbG9uZSAkeG1sOwogICAgICAgIH0gZWxzZSBpZiAoJHhtbCBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgJGRvbSA9IGNsb25lICR4bWwtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICAgICAkZG9tID0gc2VsZjo6bG9hZFhNTCgkZG9tLCAkeG1sKTsKICAgICAgICB9CgogICAgICAgICRvYmpYTUxTZWNEU2lnID0gbmV3IFhNTFNlY3VyaXR5RFNpZygpOwogICAgICAgICRvYmpYTUxTZWNEU2lnLT5pZEtleXMgPSBhcnJheSgnSUQnKTsKCiAgICAgICAgaWYgKCR4cGF0aCkgewogICAgICAgICAgICAkbm9kZXNldCA9IFV0aWxzOjpxdWVyeSgkZG9tLCAkeHBhdGgpOwogICAgICAgICAgICAkb2JqRFNpZyA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgICAgICAkb2JqWE1MU2VjRFNpZy0+c2lnTm9kZSA9ICRvYmpEU2lnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvYmpEU2lnID0gJG9ialhNTFNlY0RTaWctPmxvY2F0ZVNpZ25hdHVyZSgkZG9tKTsKICAgICAgICB9CgogICAgICAgIGlmICghJG9iakRTaWcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2Fubm90IGxvY2F0ZSBTaWduYXR1cmUgTm9kZScpOwogICAgICAgIH0KCiAgICAgICAgJG9iaktleSA9ICRvYmpYTUxTZWNEU2lnLT5sb2NhdGVLZXkoKTsKICAgICAgICBpZiAoISRvYmpLZXkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignV2UgaGF2ZSBubyBpZGVhIGFib3V0IHRoZSBrZXknKTsKICAgICAgICB9CgogICAgICAgIGlmICghVXRpbHM6OmlzU3VwcG9ydGVkU2lnbmluZ0FsZ29yaXRobSgkb2JqS2V5LT50eXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBzaWduaW5nIGFsZ29yaXRobS4nKTsKICAgICAgICB9CgogICAgICAgICRvYmpYTUxTZWNEU2lnLT5jYW5vbmljYWxpemVTaWduZWRJbmZvKCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXRWYWwgPSAkb2JqWE1MU2VjRFNpZy0+dmFsaWRhdGVSZWZlcmVuY2UoKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgfQoKICAgICAgICBYTUxTZWNFbmM6OnN0YXRpY0xvY2F0ZUtleUluZm8oJG9iaktleSwgJG9iakRTaWcpOwoKICAgICAgICBpZiAoIWVtcHR5KCRtdWx0aUNlcnRzKSkgewogICAgICAgICAgICAvLyBJZiBtdWx0aXBsZSBjZXJ0cyBhcmUgcHJvdmlkZWQsIEkgbWF5IGlnbm9yZSAkY2VydCBhbmQKICAgICAgICAgICAgLy8gJGZpbmdlcnByaW50IHByb3ZpZGVkIGJ5IHRoZSBtZXRob2QgYW5kIGp1c3QgY2hlY2sgdGhlCiAgICAgICAgICAgIC8vIGNlcnRzIG9uIHRoZSBhcnJheQogICAgICAgICAgICAkZmluZ2VycHJpbnQgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGVsc2UgSSBhZGQgdGhlIGNlcnQgdG8gdGhlIGFycmF5IGluIG9yZGVyIHRvIGNoZWNrCiAgICAgICAgICAgIC8vIHZhbGlkYXRlIHNpZ25hdHVyZXMgd2l0aCBpdCBhbmQgdGhlIHdpdGggaXQgYW5kIHRoZQogICAgICAgICAgICAvLyAkZmluZ2VycHJpbnQgdmFsdWUKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBhcnJheSgkY2VydCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsaWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICgkbXVsdGlDZXJ0cyBhcyAkY2VydCkgewogICAgICAgICAgICBpZiAoIWVtcHR5KCRjZXJ0KSkgewogICAgICAgICAgICAgICAgJG9iaktleS0+bG9hZEtleSgkY2VydCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKCRvYmpYTUxTZWNEU2lnLT52ZXJpZnkoJG9iaktleSkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmluZ2VycHJpbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRvbUNlcnQgPSAkb2JqS2V5LT5nZXRYNTA5Q2VydGlmaWNhdGUoKTsKICAgICAgICAgICAgICAgICAgICAkZG9tQ2VydEZpbmdlcnByaW50ID0gVXRpbHM6OmNhbGN1bGF0ZVg1MDlGaW5nZXJwcmludCgkZG9tQ2VydCwgJGZpbmdlcnByaW50YWxnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHM6OmZvcm1hdEZpbmdlclByaW50KCRmaW5nZXJwcmludCkgPT0gJGRvbUNlcnRGaW5nZXJwcmludCkgewogICAgICAgICAgICAgICAgICAgICAgICAkb2JqS2V5LT5sb2FkS2V5KCRkb21DZXJ0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb2JqWE1MU2VjRFNpZy0+dmVyaWZ5KCRvYmpLZXkpID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWxpZDsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIGJpbmFyeSBzaWduYXR1cmUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlVHlwZSAgICAgICAgICAgICAgICAgICAgVHlwZSBvZiBTQU1MIE1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGdldERhdGEgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIEdFVCBhcnJheQogICAgICogQHBhcmFtIGFycmF5ICAkaWRwRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIElkUCBzZXR0aW5nIGRhdGEKICAgICAqIEBwYXJhbSBib29sICAgJHJldHJpZXZlUGFyYW1ldGVyc0Zyb21TZXJ2ZXIgICBJbmRpY2F0ZXMgd2hlcmUgdG8gZ2V0IHRoZSB2YWx1ZXMgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIFNpZ24sIGZyb20gZ2V0RGF0YSBvciBmcm9tICRfU0VSVkVSCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUJpbmFyeVNpZ24oJG1lc3NhZ2VUeXBlLCAkZ2V0RGF0YSwgJGlkcERhdGEsICRyZXRyaWV2ZVBhcmFtZXRlcnNGcm9tU2VydmVyID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkZ2V0RGF0YVsnU2lnQWxnJ10pKSB7CiAgICAgICAgICAgICRzaWduQWxnID0gWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEExOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzaWduQWxnID0gJGdldERhdGFbJ1NpZ0FsZyddOwogICAgICAgIH0KCgogICAgICAgIGlmICgkcmV0cmlldmVQYXJhbWV0ZXJzRnJvbVNlcnZlcikgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSkgfHwgZW1wdHkoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJObyBxdWVyeSBzdHJpbmcgcHJvdmlkZWQiLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpJTlZBTElEX1BBUkFNRVRFUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAka2V5cyA9IFsiU0FNTFJlcXVlc3QiLCAiU0FNTFJlc3BvbnNlIiwgIlJlbGF5U3RhdGUiLCAiU2lnQWxnIiwgIlNpZ25hdHVyZSJdOwogICAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyX2NvdW50KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgJGtleSkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiRHVwbGljYXRlIHBhcmFtZXRlciBpbiBxdWVyeSBzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcjo6SU5WQUxJRF9QQVJBTUVURVIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdWJzdHJfY291bnQoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddLCAiU0FNTFJlcXVlc3QiKSA+IDAgJiYgc3Vic3RyX2NvdW50KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgIlNBTUxSZXNwb25zZSIpID4gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICAgICAgICJCb3RoIFNBTUxSZXF1ZXN0IGFuZCBTQU1MUmVzcG9uc2UgcHJvdmlkZWQiLAogICAgICAgICAgICAgICAgICAgIEVycm9yOjpJTlZBTElEX1BBUkFNRVRFUgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNpZ25lZFF1ZXJ5ID0gJG1lc3NhZ2VUeXBlLic9Jy5VdGlsczo6ZXh0cmFjdE9yaWdpbmFsUXVlcnlQYXJhbSgkbWVzc2FnZVR5cGUpOwogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlJlbGF5U3RhdGU9Jy5VdGlsczo6ZXh0cmFjdE9yaWdpbmFsUXVlcnlQYXJhbSgnUmVsYXlTdGF0ZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlNpZ0FsZz0nLlV0aWxzOjpleHRyYWN0T3JpZ2luYWxRdWVyeVBhcmFtKCdTaWdBbGcnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1NBTUxSZXF1ZXN0J10pICYmIGlzc2V0KCRnZXREYXRhWydTQU1MUmVzcG9uc2UnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAiQm90aCBTQU1MUmVxdWVzdCBhbmQgU0FNTFJlc3BvbnNlIHByb3ZpZGVkIiwKICAgICAgICAgICAgICAgICAgICBFcnJvcjo6SU5WQUxJRF9QQVJBTUVURVIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzaWduZWRRdWVyeSA9ICRtZXNzYWdlVHlwZS4nPScudXJsZW5jb2RlKCRnZXREYXRhWyRtZXNzYWdlVHlwZV0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSkpIHsKICAgICAgICAgICAgICAgICRzaWduZWRRdWVyeSAuPSAnJlJlbGF5U3RhdGU9Jy51cmxlbmNvZGUoJGdldERhdGFbJ1JlbGF5U3RhdGUnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpZ25lZFF1ZXJ5IC49ICcmU2lnQWxnPScudXJsZW5jb2RlKCRzaWduQWxnKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWVzc2FnZVR5cGUgPT0gIlNBTUxSZXF1ZXN0IikgewogICAgICAgICAgICAkc3RyTWVzc2FnZVR5cGUgPSAiTG9nb3V0IFJlcXVlc3QiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzdHJNZXNzYWdlVHlwZSA9ICJMb2dvdXQgUmVzcG9uc2UiOwogICAgICAgIH0KICAgICAgICAkZXhpc3RzTXVsdGlYNTA5U2lnbiA9IGlzc2V0KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ10pICYmIGlzc2V0KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSkgJiYgIWVtcHR5KCRpZHBEYXRhWyd4NTA5Y2VydE11bHRpJ11bJ3NpZ25pbmcnXSk7CiAgICAgICAgaWYgKCghaXNzZXQoJGlkcERhdGFbJ3g1MDljZXJ0J10pIHx8IGVtcHR5KCRpZHBEYXRhWyd4NTA5Y2VydCddKSkgJiYgISRleGlzdHNNdWx0aVg1MDlTaWduKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICJJbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgc2lnbiBvbiB0aGUgIi4kc3RyTWVzc2FnZVR5cGUuIiwgdGhlIHg1MDljZXJ0IG9mIHRoZSBJZFAgaXMgcmVxdWlyZWQiLAogICAgICAgICAgICAgICAgRXJyb3I6OkNFUlRfTk9UX0ZPVU5ECiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4aXN0c011bHRpWDUwOVNpZ24pIHsKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSAkaWRwRGF0YVsneDUwOWNlcnRNdWx0aSddWydzaWduaW5nJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG11bHRpQ2VydHMgPSBhcnJheSgkaWRwRGF0YVsneDUwOWNlcnQnXSk7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmF0dXJlVmFsaWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICgkbXVsdGlDZXJ0cyBhcyAkY2VydCkgewogICAgICAgICAgICAkb2JqS2V5ID0gbmV3IFhNTFNlY3VyaXR5S2V5KFhNTFNlY3VyaXR5S2V5OjpSU0FfU0hBMSwgYXJyYXkoJ3R5cGUnID0+ICdwdWJsaWMnKSk7CiAgICAgICAgICAgICRvYmpLZXktPmxvYWRLZXkoJGNlcnQsIGZhbHNlLCB0cnVlKTsKCiAgICAgICAgICAgIGlmICgkc2lnbkFsZyAhPSBYTUxTZWN1cml0eUtleTo6UlNBX1NIQTEpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IFV0aWxzOjpjYXN0S2V5KCRvYmpLZXksICRzaWduQWxnLCAncHVibGljJyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkZXggPSBuZXcgVmFsaWRhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBzaWduQWxnIGluIHRoZSByZWNlaXZlZCAiLiRzdHJNZXNzYWdlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOjpJTlZBTElEX1NJR05BVFVSRQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KCRtdWx0aUNlcnRzKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICRleDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkb2JqS2V5LT52ZXJpZnlTaWduYXR1cmUoJHNpZ25lZFF1ZXJ5LCBiYXNlNjRfZGVjb2RlKCRnZXREYXRhWydTaWduYXR1cmUnXSkpID09PSAxKSB7CiAgICAgICAgICAgICAgICAkc2lnbmF0dXJlVmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzaWduYXR1cmVWYWxpZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/ValidationError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHBocC1zYW1sLgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQHBhY2thZ2UgT25lTG9naW4KICogQGF1dGhvciAgU2l4dG8gTWFydGluIDxzaXh0by5tYXJ0aW4uZ2FyY2lhQGdtYWlsLmNvbT4KICogQGxpY2Vuc2UgTUlUIGh0dHBzOi8vZ2l0aHViLmNvbS9TQU1MLVRvb2xraXRzL3BocC1zYW1sL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL1NBTUwtVG9vbGtpdHMvcGhwLXNhbWwKICovCgpuYW1lc3BhY2UgT25lTG9naW5cU2FtbDI7Cgp1c2UgRXhjZXB0aW9uOwoKLyoqCiAqIFZhbGlkYXRpb25FcnJvciBjbGFzcyBvZiBTQU1MIFBIUCBUb29sa2l0CiAqCiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbm90aGVyIGN1c3RvbSBFeGNlcHRpb24gaGFuZGxlciwKICogcmVsYXRlZCB0byBleGNlcHRpb25zIHRoYXQgaGFwcGVucyBkdXJpbmcgdmFsaWRhdGlvbiBwcm9jZXNzLgogKi8KY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8vIFZhbGlkYXRpb24gRXJyb3JzCiAgICBjb25zdCBVTlNVUFBPUlRFRF9TQU1MX1ZFUlNJT04gPSAwOwogICAgY29uc3QgTUlTU0lOR19JRCA9IDE7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfQVNTRVJUSU9OUyA9IDI7CiAgICBjb25zdCBNSVNTSU5HX1NUQVRVUyA9IDM7CiAgICBjb25zdCBNSVNTSU5HX1NUQVRVU19DT0RFID0gNDsKICAgIGNvbnN0IFNUQVRVU19DT0RFX0lTX05PVF9TVUNDRVNTID0gNTsKICAgIGNvbnN0IFdST05HX1NJR05FRF9FTEVNRU5UID0gNjsKICAgIGNvbnN0IElEX05PVF9GT1VORF9JTl9TSUdORURfRUxFTUVOVCA9IDc7CiAgICBjb25zdCBEVVBMSUNBVEVEX0lEX0lOX1NJR05FRF9FTEVNRU5UUyA9IDg7CiAgICBjb25zdCBJTlZBTElEX1NJR05FRF9FTEVNRU5UID0gOTsKICAgIGNvbnN0IERVUExJQ0FURURfUkVGRVJFTkNFX0lOX1NJR05FRF9FTEVNRU5UUyA9IDEwOwogICAgY29uc3QgVU5FWFBFQ1RFRF9TSUdORURfRUxFTUVOVFMgPSAxMTsKICAgIGNvbnN0IFdST05HX05VTUJFUl9PRl9TSUdOQVRVUkVTX0lOX1JFU1BPTlNFID0gMTI7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfU0lHTkFUVVJFU19JTl9BU1NFUlRJT04gPSAxMzsKICAgIGNvbnN0IElOVkFMSURfWE1MX0ZPUk1BVCA9IDE0OwogICAgY29uc3QgV1JPTkdfSU5SRVNQT05TRVRPID0gMTU7CiAgICBjb25zdCBOT19FTkNSWVBURURfQVNTRVJUSU9OID0gMTY7CiAgICBjb25zdCBOT19FTkNSWVBURURfTkFNRUlEID0gMTc7CiAgICBjb25zdCBNSVNTSU5HX0NPTkRJVElPTlMgPSAxODsKICAgIGNvbnN0IEFTU0VSVElPTl9UT09fRUFSTFkgPSAxOTsKICAgIGNvbnN0IEFTU0VSVElPTl9FWFBJUkVEID0gMjA7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfQVVUSFNUQVRFTUVOVFMgPSAyMTsKICAgIGNvbnN0IE5PX0FUVFJJQlVURVNUQVRFTUVOVCA9IDIyOwogICAgY29uc3QgRU5DUllQVEVEX0FUVFJJQlVURVMgPSAyMzsKICAgIGNvbnN0IFdST05HX0RFU1RJTkFUSU9OID0gMjQ7CiAgICBjb25zdCBFTVBUWV9ERVNUSU5BVElPTiA9IDI1OwogICAgY29uc3QgV1JPTkdfQVVESUVOQ0UgPSAyNjsKICAgIGNvbnN0IElTU1VFUl9NVUxUSVBMRV9JTl9SRVNQT05TRSA9IDI3OwogICAgY29uc3QgSVNTVUVSX05PVF9GT1VORF9JTl9BU1NFUlRJT04gPSAyODsKICAgIGNvbnN0IFdST05HX0lTU1VFUiA9IDI5OwogICAgY29uc3QgU0VTU0lPTl9FWFBJUkVEID0gMzA7CiAgICBjb25zdCBXUk9OR19TVUJKRUNUQ09ORklSTUFUSU9OID0gMzE7CiAgICBjb25zdCBOT19TSUdORURfTUVTU0FHRSA9IDMyOwogICAgY29uc3QgTk9fU0lHTkVEX0FTU0VSVElPTiA9IDMzOwogICAgY29uc3QgTk9fU0lHTkFUVVJFX0ZPVU5EID0gMzQ7CiAgICBjb25zdCBLRVlJTkZPX05PVF9GT1VORF9JTl9FTkNSWVBURURfREFUQSA9IDM1OwogICAgY29uc3QgQ0hJTERSRU5fTk9ERV9OT1RfRk9VTkRfSU5fS0VZSU5GTyA9IDM2OwogICAgY29uc3QgVU5TVVBQT1JURURfUkVUUklFVkFMX01FVEhPRCA9IDM3OwogICAgY29uc3QgTk9fTkFNRUlEID0gMzg7CiAgICBjb25zdCBFTVBUWV9OQU1FSUQgPSAzOTsKICAgIGNvbnN0IFNQX05BTUVfUVVBTElGSUVSX05BTUVfTUlTTUFUQ0ggPSA0MDsKICAgIGNvbnN0IERVUExJQ0FURURfQVRUUklCVVRFX05BTUVfRk9VTkQgPSA0MTsKICAgIGNvbnN0IElOVkFMSURfU0lHTkFUVVJFID0gNDI7CiAgICBjb25zdCBXUk9OR19OVU1CRVJfT0ZfU0lHTkFUVVJFUyA9IDQzOwogICAgY29uc3QgUkVTUE9OU0VfRVhQSVJFRCA9IDQ0OwogICAgY29uc3QgVU5FWFBFQ1RFRF9SRUZFUkVOQ0UgPSA0NTsKICAgIGNvbnN0IE5PVF9TVVBQT1JURUQgPSA0NjsKICAgIGNvbnN0IEtFWV9BTEdPUklUSE1fRVJST1IgPSA0NzsKICAgIGNvbnN0IE1JU1NJTkdfRU5DUllQVEVEX0VMRU1FTlQgPSA0ODsKCgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICRtc2cgIERlc2NyaWJlcyB0aGUgZXJyb3IuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAkY29kZSBUaGUgY29kZSBlcnJvciAoZGVmaW5lZCBpbiB0aGUgZXJyb3IgY2xhc3MpLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJGFyZ3MgQXJndW1lbnRzIHVzZWQgaW4gdGhlIG1lc3NhZ2UgdGhhdCBkZXNjcmliZXMgdGhlIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZywgJGNvZGUgPSAwLCAkYXJncyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgYXNzZXJ0KGlzX3N0cmluZygkbXNnKSk7CiAgICAgICAgYXNzZXJ0KGlzX2ludCgkY29kZSkpOwoKICAgICAgICBpZiAoIWlzc2V0KCRhcmdzKSkgewogICAgICAgICAgICAkYXJncyA9IGFycmF5KCk7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJGFyZ3MpKSB7CiAgICAgICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZShhcnJheSgkbXNnKSwgJGFyZ3MpOwogICAgICAgICAgICAkbWVzc2FnZSA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCdzcHJpbnRmJywgJHBhcmFtcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAkbXNnOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGNvZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/src/Saml2/version.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInBocC1zYW1sIjogewogICAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKICAgICAgICAicmVsZWFzZWQiOiAiMDgvMDUvMjAyNiIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/onelogin/php-saml/_toolkit_loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIENyZWF0ZSBhbiBfX2F1dG9sb2FkIGZ1bmN0aW9uCi8vIChjYW4gY29uZmxpY3RzIG90aGVyIGF1dG9sb2FkZXJzKQovLyBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5hdXRvbG9hZC5waHAKCi8vIExvYWQgY29tcG9zZXIgdmVuZG9yIGZvbGRlciBpZiBhbnkKaWYgKGZpbGVfZXhpc3RzKF9fRElSX18gLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnKSkgewogICAgcmVxdWlyZSBfX0RJUl9fIC4gJy92ZW5kb3IvYXV0b2xvYWQucGhwJzsKfQoKLyoKLy8gTG9hZCB4bWxzZWNsaWJzCgokeG1sc2VjbGlic1NyY0RpciA9ICcnOwoKaW5jbHVkZV9vbmNlICR4bWxzZWNsaWJzU3JjRGlyLicvWE1MU2VjRW5jLnBocCc7CmluY2x1ZGVfb25jZSAkeG1sc2VjbGlic1NyY0Rpci4nL1hNTFNlY3VyaXR5RFNpZy5waHAnOwppbmNsdWRlX29uY2UgJHhtbHNlY2xpYnNTcmNEaXIuJy9YTUxTZWN1cml0eUtleS5waHAnOwppbmNsdWRlX29uY2UgJHhtbHNlY2xpYnNTcmNEaXIuJy9VdGlscy9YUGF0aC5waHAnOwoqLwoKCi8vIExvYWQgcGhwLXNhbWwKJGxpYkRpciA9IF9fRElSX18gLiAnL3NyYy9TYW1sMi8nOwoKJGZvbGRlckluZm8gPSBzY2FuZGlyKCRsaWJEaXIpOwoKZm9yZWFjaCAoJGZvbGRlckluZm8gYXMgJGVsZW1lbnQpIHsKICAgIGlmIChpc19maWxlKCRsaWJEaXIuJGVsZW1lbnQpICYmIChzdWJzdHIoJGVsZW1lbnQsIC00KSA9PT0gJy5waHAnKSkgewogICAgICAgIGluY2x1ZGVfb25jZSAkbGliRGlyLiRlbGVtZW50OwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjMKCkFkZCBgc291cmNlYCBsaW5rIGluIGNvbXBvc2VyLmpzb24uIE5vIGNvZGUgY2hhbmdlcy4KCiMjIDEuMC4yCgpBbGxvdyBQU1ItNyAocHNyL2h0dHAtbWVzc2FnZSkgMi4wLiBObyBjb2RlIGNoYW5nZXMuCgojIyAxLjAuMQoKQWxsb3cgaW5zdGFsbGF0aW9uIHdpdGggUEhQIDguIE5vIGNvZGUgY2hhbmdlcy4KCiMjIDEuMC4wCgpGaXJzdCBzdGFibGUgcmVsZWFzZS4gTm8gY2hhbmdlcyBzaW5jZSAwLjMuMC4KCiMjIDAuMy4wCgpBZGRlZCBJbnRlcmZhY2Ugc3VmZml4IG9uIGV4Y2VwdGlvbnMKIAojIyAwLjIuMCAKCkFsbCBleGNlcHRpb25zIGFyZSBpbiBgUHNyXEh0dHBcQ2xpZW50YCBuYW1lc3BhY2UKCiMjIDAuMS4wCgpGaXJzdCByZWxlYXNlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtY2xpZW50IiwKICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBIVFRQIGNsaWVudHMiLAogICAgImtleXdvcmRzIjogWyJwc3IiLCAicHNyLTE4IiwgImh0dHAiLCAiaHR0cC1jbGllbnQiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICB9CiAgICBdLAogICAgInN1cHBvcnQiOiB7CiAgICAgICAgInNvdXJjZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLWNsaWVudCIKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjAgfHwgXjguMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAiXjEuMCB8fCBeMi4wIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJQc3JcXEh0dHBcXENsaWVudFxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE3IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SFRUUCBDbGllbnQKPT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBob2xkcyBhbGwgdGhlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gW1BTUi0xOCAoSFRUUCBDbGllbnQpXVtwc3ItdXJsXS4KCk5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIEhUVFAgQ2xpZW50IGltcGxlbWVudGF0aW9uIG9mIGl0cyBvd24uIEl0IGlzIG1lcmVseSBhYnN0cmFjdGlvbnMgdGhhdCBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBvZiBhIEhUVFAgQ2xpZW50LgoKVGhlIGluc3RhbGxhYmxlIFtwYWNrYWdlXVtwYWNrYWdlLXVybF0gYW5kIFtpbXBsZW1lbnRhdGlvbnNdW2ltcGxlbWVudGF0aW9uLXVybF0gYXJlIGxpc3RlZCBvbiBQYWNrYWdpc3QuCgpbcHNyLXVybF06IGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItMTgKW3BhY2thZ2UtdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3Bzci9odHRwLWNsaWVudApbaW1wbGVtZW50YXRpb24tdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3Byb3ZpZGVycy9wc3IvaHR0cC1jbGllbnQtaW1wbGVtZW50YXRpb24K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/ClientExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7CgovKioKICogRXZlcnkgSFRUUCBjbGllbnQgcmVsYXRlZCBleGNlcHRpb24gTVVTVCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCiAqLwppbnRlcmZhY2UgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgXFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/ClientInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCmludGVyZmFjZSBDbGllbnRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBTZW5kcyBhIFBTUi03IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQU1ItNyByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFxQc3JcSHR0cFxDbGllbnRcQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlIElmIGFuIGVycm9yIGhhcHBlbnMgd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiBSZXNwb25zZUludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/NetworkExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSBvZiBuZXR3b3JrIGlzc3Vlcy4KICoKICogVGhlcmUgaXMgbm8gcmVzcG9uc2Ugb2JqZWN0IGFzIHRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLgogKgogKiBFeGFtcGxlOiB0aGUgdGFyZ2V0IGhvc3QgbmFtZSBjYW4gbm90IGJlIHJlc29sdmVkIG9yIHRoZSBjb25uZWN0aW9uIGZhaWxlZC4KICovCmludGVyZmFjZSBOZXR3b3JrRXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCBvYmplY3QgTUFZIGJlIGEgZGlmZmVyZW50IG9iamVjdCBmcm9tIHRoZSBvbmUgcGFzc2VkIHRvIENsaWVudEludGVyZmFjZTo6c2VuZFJlcXVlc3QoKQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-client/src/RequestExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxDbGllbnQ7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiBmb3Igd2hlbiBhIHJlcXVlc3QgZmFpbGVkLgogKgogKiBFeGFtcGxlczoKICogICAgICAtIFJlcXVlc3QgaXMgaW52YWxpZCAoZS5nLiBtZXRob2QgaXMgbWlzc2luZykKICogICAgICAtIFJ1bnRpbWUgcmVxdWVzdCBlcnJvcnMgKGUuZy4gdGhlIGJvZHkgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSkKICovCmludGVyZmFjZSBSZXF1ZXN0RXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQ2xpZW50RXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCBvYmplY3QgTUFZIGJlIGEgZGlmZmVyZW50IG9iamVjdCBmcm9tIHRoZSBvbmUgcGFzc2VkIHRvIENsaWVudEludGVyZmFjZTo6c2VuZFJlcXVlc3QoKQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtZmFjdG9yeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTE3OiBDb21tb24gaW50ZXJmYWNlcyBmb3IgUFNSLTcgSFRUUCBtZXNzYWdlIGZhY3RvcmllcyIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgInBzciIsCiAgICAgICAgInBzci03IiwKICAgICAgICAicHNyLTE3IiwKICAgICAgICAiaHR0cCIsCiAgICAgICAgImZhY3RvcnkiLAogICAgICAgICJtZXNzYWdlIiwKICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgInJlc3BvbnNlIgogICAgXSwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgIH0KICAgIF0sCiAgICAic3VwcG9ydCI6IHsKICAgICAgICAic291cmNlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtZmFjdG9yeSIKICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49Ny4xIiwKICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJeMS4wIHx8IF4yLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBQSFAtRklHCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SFRUUCBGYWN0b3JpZXMKPT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBob2xkcyBhbGwgaW50ZXJmYWNlcyByZWxhdGVkIHRvIFtQU1ItMTcgKEhUVFAgRmFjdG9yaWVzKV1bcHNyLXVybF0uCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGludGVyZmFjZXMgdGhhdCBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBvZiBhIEhUVFAgRmFjdG9yeS4KClRoZSBpbnN0YWxsYWJsZSBbcGFja2FnZV1bcGFja2FnZS11cmxdIGFuZCBbaW1wbGVtZW50YXRpb25zXVtpbXBsZW1lbnRhdGlvbi11cmxdIGFyZSBsaXN0ZWQgb24gUGFja2FnaXN0LgoKW3Bzci11cmxdOiBodHRwczovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTE3LwpbcGFja2FnZS11cmxdOiBodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcHNyL2h0dHAtZmFjdG9yeQpbaW1wbGVtZW50YXRpb24tdXJsXTogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3Byb3ZpZGVycy9wc3IvaHR0cC1mYWN0b3J5LWltcGxlbWVudGF0aW9uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/RequestFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kIFRoZSBIVFRQIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlfHN0cmluZyAkdXJpIFRoZSBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LiBJZgogICAgICogICAgIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgdGhlIGZhY3RvcnkgTVVTVCBjcmVhdGUgYSBVcmlJbnRlcmZhY2UKICAgICAqICAgICBpbnN0YW5jZSBiYXNlZCBvbiBpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmkpOiBSZXF1ZXN0SW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/ResponseFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFJlc3BvbnNlRmFjdG9yeUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyByZXNwb25zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIEhUVFAgc3RhdHVzIGNvZGU7IGRlZmF1bHRzIHRvIDIwMAogICAgICogQHBhcmFtIHN0cmluZyAkcmVhc29uUGhyYXNlIFJlYXNvbiBwaHJhc2UgdG8gYXNzb2NpYXRlIHdpdGggc3RhdHVzIGNvZGUKICAgICAqICAgICBpbiBnZW5lcmF0ZWQgcmVzcG9uc2U7IGlmIG5vbmUgaXMgcHJvdmlkZWQgaW1wbGVtZW50YXRpb25zIE1BWSB1c2UKICAgICAqICAgICB0aGUgZGVmYXVsdHMgYXMgc3VnZ2VzdGVkIGluIHRoZSBIVFRQIHNwZWNpZmljYXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoaW50ICRjb2RlID0gMjAwLCBzdHJpbmcgJHJlYXNvblBocmFzZSA9ICcnKTogUmVzcG9uc2VJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFNlcnZlclJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IHNlcnZlciByZXF1ZXN0LgogICAgICoKICAgICAqIE5vdGUgdGhhdCBzZXJ2ZXItcGFyYW1zIGFyZSB0YWtlbiBwcmVjaXNlbHkgYXMgZ2l2ZW4gLSBubyBwYXJzaW5nL3Byb2Nlc3NpbmcKICAgICAqIG9mIHRoZSBnaXZlbiB2YWx1ZXMgaXMgcGVyZm9ybWVkLCBhbmQsIGluIHBhcnRpY3VsYXIsIG5vIGF0dGVtcHQgaXMgbWFkZSB0bwogICAgICogZGV0ZXJtaW5lIHRoZSBIVFRQIG1ldGhvZCBvciBVUkksIHdoaWNoIG11c3QgYmUgcHJvdmlkZWQgZXhwbGljaXRseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIEhUVFAgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2V8c3RyaW5nICR1cmkgVGhlIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIElmCiAgICAgKiAgICAgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGUgZmFjdG9yeSBNVVNUIGNyZWF0ZSBhIFVyaUludGVyZmFjZQogICAgICogICAgIGluc3RhbmNlIGJhc2VkIG9uIGl0LgogICAgICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJQYXJhbXMgQXJyYXkgb2YgU0FQSSBwYXJhbWV0ZXJzIHdpdGggd2hpY2ggdG8gc2VlZAogICAgICogICAgIHRoZSBnZW5lcmF0ZWQgcmVxdWVzdCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVNlcnZlclJlcXVlc3Qoc3RyaW5nICRtZXRob2QsICR1cmksIGFycmF5ICRzZXJ2ZXJQYXJhbXMgPSBbXSk6IFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/StreamFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFN0cmVhbUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc3RyZWFtIGZyb20gYSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHN0cmVhbSBTSE9VTEQgYmUgY3JlYXRlZCB3aXRoIGEgdGVtcG9yYXJ5IHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgU3RyaW5nIGNvbnRlbnQgd2l0aCB3aGljaCB0byBwb3B1bGF0ZSB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEByZXR1cm4gU3RyZWFtSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW0oc3RyaW5nICRjb250ZW50ID0gJycpOiBTdHJlYW1JbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBzdHJlYW0gZnJvbSBhbiBleGlzdGluZyBmaWxlLgogICAgICoKICAgICAqIFRoZSBmaWxlIE1VU1QgYmUgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBtb2RlLCB3aGljaCBtYXkgYmUgYW55IG1vZGUKICAgICAqIHN1cHBvcnRlZCBieSB0aGUgYGZvcGVuYCBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBUaGUgYCRmaWxlbmFtZWAgTUFZIGJlIGFueSBzdHJpbmcgc3VwcG9ydGVkIGJ5IGBmb3BlbigpYC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlbmFtZSBvciBzdHJlYW0gVVJJIHRvIHVzZSBhcyBiYXNpcyBvZiBzdHJlYW0uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlIE1vZGUgd2l0aCB3aGljaCB0byBvcGVuIHRoZSB1bmRlcmx5aW5nIGZpbGVuYW1lL3N0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBtb2RlIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW1Gcm9tRmlsZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJG1vZGUgPSAncicpOiBTdHJlYW1JbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc3RyZWFtIGZyb20gYW4gZXhpc3RpbmcgcmVzb3VyY2UuCiAgICAgKgogICAgICogVGhlIHN0cmVhbSBNVVNUIGJlIHJlYWRhYmxlIGFuZCBtYXkgYmUgd3JpdGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRyZXNvdXJjZSBQSFAgcmVzb3VyY2UgdG8gdXNlIGFzIGJhc2lzIG9mIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlU3RyZWFtRnJvbVJlc291cmNlKCRyZXNvdXJjZSk6IFN0cmVhbUludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFVwbG9hZGVkRmlsZUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBJZiBhIHNpemUgaXMgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGUgc2l6ZSBvZgogICAgICogdGhlIGZpbGUuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZmVhdHVyZXMuZmlsZS11cGxvYWQucG9zdC1tZXRob2QucGhwCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9mZWF0dXJlcy5maWxlLXVwbG9hZC5lcnJvcnMucGhwCiAgICAgKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFVuZGVybHlpbmcgc3RyZWFtIHJlcHJlc2VudGluZyB0aGUKICAgICAqICAgICB1cGxvYWRlZCBmaWxlIGNvbnRlbnQuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJHNpemUgaW4gYnl0ZXMKICAgICAqIEBwYXJhbSBpbnQgJGVycm9yIFBIUCBmaWxlIHVwbG9hZCBlcnJvcgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjbGllbnRGaWxlbmFtZSBGaWxlbmFtZSBhcyBwcm92aWRlZCBieSB0aGUgY2xpZW50LCBpZiBhbnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZSBNZWRpYSB0eXBlIGFzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQsIGlmIGFueS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVwbG9hZGVkRmlsZUludGVyZmFjZQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZmlsZSByZXNvdXJjZSBpcyBub3QgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVVcGxvYWRlZEZpbGUoCiAgICAgICAgU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sCiAgICAgICAgP2ludCAkc2l6ZSA9IG51bGwsCiAgICAgICAgaW50ICRlcnJvciA9IFxVUExPQURfRVJSX09LLAogICAgICAgID9zdHJpbmcgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRjbGllbnRNZWRpYVR5cGUgPSBudWxsCiAgICApOiBVcGxvYWRlZEZpbGVJbnRlcmZhY2U7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-factory/src/UriFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKaW50ZXJmYWNlIFVyaUZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBnaXZlbiBVUkkgY2Fubm90IGJlIHBhcnNlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVVyaShzdHJpbmcgJHVyaSA9ICcnKTogVXJpSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjEgLSAyMDE2LTA4LTA2CgojIyMgQWRkZWQKCi0gTm90aGluZy4KCiMjIyBEZXByZWNhdGVkCgotIE5vdGhpbmcuCgojIyMgUmVtb3ZlZAoKLSBOb3RoaW5nLgoKIyMjIEZpeGVkCgotIFVwZGF0ZWQgYWxsIGBAcmV0dXJuIHNlbGZgIGFubm90YXRpb24gcmVmZXJlbmNlcyBpbiBpbnRlcmZhY2VzIHRvIHVzZQogIGBAcmV0dXJuIHN0YXRpY2AsIHdoaWNoIG1vcmUgY2xvc2VsbHkgZm9sbG93cyB0aGUgc2VtYW50aWNzIG9mIHRoZQogIHNwZWNpZmljYXRpb24uCi0gVXBkYXRlZCB0aGUgYE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcnMoKWAgcmV0dXJuIGFubm90YXRpb24gdG8gdXNlIHRoZQogIHZhbHVlIGBzdHJpbmdbXVtdYCwgaW5kaWNhdGluZyB0aGUgZm9ybWF0IGlzIGEgbmVzdGVkIGFycmF5IG9mIHN0cmluZ3MuCi0gVXBkYXRlZCB0aGUgYEBsaW5rYCBhbm5vdGF0aW9uIGZvciBgUmVxdWVzdEludGVyZmFjZTo6d2l0aFJlcXVlc3RUYXJnZXQoKWAKICB0byBwb2ludCB0byB0aGUgY29ycmVjdCBzZWN0aW9uIG9mIFJGQyA3MjMwLgotIFVwZGF0ZWQgdGhlIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRoVXBsb2FkZWRGaWxlcygpYCBwYXJhbWV0ZXIgYW5ub3RhdGlvbgogIHRvIGFkZCB0aGUgcGFyYW1ldGVyIG5hbWUgKGAkdXBsb2FkZWRGaWxlc2ApLgotIFVwZGF0ZWQgYSBgQHRocm93c2AgYW5ub3RhdGlvbiBmb3IgdGhlIGBVcGxvYWRlZEZpbGVJbnRlcmZhY2U6Om1vdmVUbygpYAogIG1ldGhvZCB0byBjb3JyZWN0bHkgcmVmZXJlbmNlIHRoZSBtZXRob2QgcGFyYW1ldGVyIChpdCB3YXMgcmVmZXJlbmNpbmcgYW4KICBpbmNvcnJlY3QgcGFyYW1ldGVyIG5hbWUgcHJldmlvdXNseSkuCgojIyAxLjAuMCAtIDIwMTYtMDUtMTgKCkluaXRpYWwgc3RhYmxlIHJlbGVhc2U7IHJlZmxlY3RzIGFjY2VwdGVkIFBTUi03IHNwZWNpZmljYXRpb24uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAia2V5d29yZHMiOiBbInBzciIsICJwc3ItNyIsICJodHRwIiwgImh0dHAtbWVzc2FnZSIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuMiB8fCBeOC4wIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJQc3JcXEh0dHBcXE1lc3NhZ2VcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4xLngtZGV2IgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/PSR7-Interfaces.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBJbnRlcmZhY2VzCgpUaGUgcHVycG9zZSBvZiB0aGlzIGxpc3QgaXMgdG8gaGVscCBpbiBmaW5kaW5nIHRoZSBtZXRob2RzIHdoZW4gd29ya2luZyB3aXRoIFBTUi03LiBUaGlzIGNhbiBiZSBjb25zaWRlcmVkIGFzIGEgY2hlYXRzaGVldCBmb3IgUFNSLTcgaW50ZXJmYWNlcy4KClRoZSBpbnRlcmZhY2VzIGRlZmluZWQgaW4gUFNSLTcgYXJlIHRoZSBmb2xsb3dpbmc6Cgp8IENsYXNzIE5hbWUgfCBEZXNjcmlwdGlvbiB8CnwtLS18LS0tfAp8IFtQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZW1lc3NhZ2VpbnRlcmZhY2UpIHwgUmVwcmVzZW50YXRpb24gb2YgYSBIVFRQIG1lc3NhZ2UgfAp8IFtQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXJlcXVlc3RpbnRlcmZhY2UpIHwgUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIGNsaWVudC1zaWRlIHJlcXVlc3QuIHwKfCBbUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlXShodHRwOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNy8jcHNyaHR0cG1lc3NhZ2VzZXJ2ZXJyZXF1ZXN0aW50ZXJmYWNlKSB8IFJlcHJlc2VudGF0aW9uIG9mIGFuIGluY29taW5nLCBzZXJ2ZXItc2lkZSBIVFRQIHJlcXVlc3QuIHwgCnwgW1BzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXJlc3BvbnNlaW50ZXJmYWNlKSB8IFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBzZXJ2ZXItc2lkZSByZXNwb25zZS4gfAp8IFtQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZV0oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvI3Bzcmh0dHBtZXNzYWdlc3RyZWFtaW50ZXJmYWNlKSB8IERlc2NyaWJlcyBhIGRhdGEgc3RyZWFtIHwKfCBbUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VdKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LyNwc3JodHRwbWVzc2FnZXVyaWludGVyZmFjZSkgfCBWYWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgVVJJLiB8CnwgW1BzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlXShodHRwOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItNy8jcHNyaHR0cG1lc3NhZ2V1cGxvYWRlZGZpbGVpbnRlcmZhY2UpIHwgVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgdXBsb2FkZWQgdGhyb3VnaCBhbiBIVFRQIHJlcXVlc3QuIHwKCiMjIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIE1ldGhvZHMKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0UHJvdG9jb2xWZXJzaW9uKClgICAgICAgICAgICAgIHwgUmV0cmlldmUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uICAgICAgICAgIHwgIDEuMCBvciAxLjEgfAp8IGB3aXRoUHJvdG9jb2xWZXJzaW9uKCR2ZXJzaW9uKWAgICAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBwcm90b2NvbCB2ZXJzaW9uICAgICAgICAgIHwgICAgICB8CnwgYGdldEhlYWRlcnMoKWAgICAgICAgICAgICAgICAgICAgICB8IFJldHJpZXZlIGFsbCBIVFRQIEhlYWRlcnMgICAgICAgICAgICAgICB8IFtSZXF1ZXN0IEhlYWRlciBMaXN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0hUVFBfaGVhZGVyX2ZpZWxkcyNSZXF1ZXN0X2ZpZWxkcyksIFtSZXNwb25zZSBIZWFkZXIgTGlzdF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9IVFRQX2hlYWRlcl9maWVsZHMjUmVzcG9uc2VfZmllbGRzKSAgICAgIHwKfCBgaGFzSGVhZGVyKCRuYW1lKWAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIGlmIEhUVFAgSGVhZGVyIHdpdGggZ2l2ZW4gbmFtZSBleGlzdHMgIHwgfAp8IGBnZXRIZWFkZXIoJG5hbWUpYCAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgYSBhcnJheSB3aXRoIHRoZSB2YWx1ZXMgZm9yIGEgc2luZ2xlIGhlYWRlciB8IHwKfCBgZ2V0SGVhZGVyTGluZSgkbmFtZSlgICAgICAgICAgICAgIHwgUmV0cmlldmVzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiB0aGUgdmFsdWVzIGZvciBhIHNpbmdsZSBoZWFkZXIgfCAgfAp8IGB3aXRoSGVhZGVyKCRuYW1lLCAkdmFsdWUpYCAgICAgICAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBIZWFkZXIgfCBpZiB0aGUgaGVhZGVyIGV4aXN0ZWQgaW4gdGhlIG9yaWdpbmFsIGluc3RhbmNlLCByZXBsYWNlcyB0aGUgaGVhZGVyIHZhbHVlIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2l0aCB0aGUgdmFsdWUgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGUgbmV3IGluc3RhbmNlLiB8CnwgYHdpdGhBZGRlZEhlYWRlcigkbmFtZSwgJHZhbHVlKWAgICB8IFJldHVybnMgbmV3IG1lc3NhZ2UgaW5zdGFuY2Ugd2l0aCBhcHBlbmRlZCB2YWx1ZSB0byBnaXZlbiBoZWFkZXIgfCBJZiBoZWFkZXIgYWxyZWFkeSBleGlzdHMgdmFsdWUgd2lsbCBiZSBhcHBlbmRlZCwgaWYgbm90IGEgbmV3IGhlYWRlciB3aWxsIGJlIGNyZWF0ZWQgfAp8IGB3aXRob3V0SGVhZGVyKCRuYW1lKWAgICAgICAgICAgICAgfCBSZW1vdmVzIEhUVFAgSGVhZGVyIHdpdGggZ2l2ZW4gbmFtZXwgfAp8IGBnZXRCb2R5KClgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIEhUVFAgTWVzc2FnZSBCb2R5IHwgUmV0dXJucyBvYmplY3QgaW1wbGVtZW50aW5nIGBTdHJlYW1JbnRlcmZhY2VgfAp8IGB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpYCAgfCBSZXR1cm5zIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggZ2l2ZW4gSFRUUCBNZXNzYWdlIEJvZHkgfCB8CgoKIyMgYFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAgTWV0aG9kcwoKU2FtZSBtZXRob2RzIGFzIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgICArIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0UmVxdWVzdFRhcmdldCgpYCAgICAgICAgICAgICAgICB8IFJldHJpZXZlcyB0aGUgbWVzc2FnZSdzIHJlcXVlc3QgdGFyZ2V0ICAgICAgICAgICAgICB8IG9yaWdpbi1mb3JtLCBhYnNvbHV0ZS1mb3JtLCBhdXRob3JpdHktZm9ybSwgYXN0ZXJpc2stZm9ybSAoW1JGQzcyMzBdKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwLnR4dCkpIHwKfCBgd2l0aFJlcXVlc3RUYXJnZXQoJHJlcXVlc3RUYXJnZXQpYCB8IFJldHVybiBhIG5ldyBtZXNzYWdlIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVlc3QtdGFyZ2V0IHwgICAgICB8CnwgYGdldE1ldGhvZCgpYCAgICAgICAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0LiAgfCAgR0VULCBIRUFELCBQT1NULCBQVVQsIERFTEVURSwgQ09OTkVDVCwgT1BUSU9OUywgVFJBQ0UgKGRlZmluZWQgaW4gW1JGQzcyMzFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxKSksIFBBVENIIChkZWZpbmVkIGluIFtSRkM1Nzg5XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTc4OSkpIHwKfCBgd2l0aE1ldGhvZCgkbWV0aG9kKWAgICAgICAgICAgICAgICB8IFJldHVybnMgYSBuZXcgbWVzc2FnZSBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBIVFRQIG1ldGhvZCAgfCB8CnwgYGdldFVyaSgpYCAgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZXMgdGhlIFVSSSBpbnN0YW5jZSB8IHwKfCBgd2l0aFVyaShVcmlJbnRlcmZhY2UgJHVyaSwgJHByZXNlcnZlSG9zdCA9IGZhbHNlKWAgfCBSZXR1cm5zIGEgbmV3IG1lc3NhZ2UgaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgVVJJIHwgIHwKCgojIyBgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCBNZXRob2RzCgpTYW1lIG1ldGhvZHMgYXMgYFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAgICsgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTZXJ2ZXJQYXJhbXMoKSBgICAgICAgICAgICAgICAgfCBSZXRyaWV2ZSBzZXJ2ZXIgcGFyYW1ldGVycyAgfCBUeXBpY2FsbHkgZGVyaXZlZCBmcm9tIGAkX1NFUlZFUmAgIHwKfCBgZ2V0Q29va2llUGFyYW1zKClgICAgICAgICAgICAgICAgIHwgUmV0cmlldmVzIGNvb2tpZXMgc2VudCBieSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIHwgVHlwaWNhbGx5IGRlcml2ZWQgZnJvbSBgJF9DT09LSUVTYCB8CnwgYHdpdGhDb29raWVQYXJhbXMoYXJyYXkgJGNvb2tpZXMpYCB8ICBSZXR1cm5zIGEgbmV3IHJlcXVlc3QgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGNvb2tpZXMgICAgICB8ICAgfCAKfCBgd2l0aFF1ZXJ5UGFyYW1zKGFycmF5ICRxdWVyeSlgIHwgUmV0dXJucyBhIG5ldyByZXF1ZXN0IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzICB8ICB8CnwgYGdldFVwbG9hZGVkRmlsZXMoKWAgfCBSZXRyaWV2ZSBub3JtYWxpemVkIGZpbGUgdXBsb2FkIGRhdGEgIHwgIHwKfCBgd2l0aFVwbG9hZGVkRmlsZXMoYXJyYXkgJHVwbG9hZGVkRmlsZXMpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXBsb2FkZWQgZmlsZXMgIHwgIHwKfCBgZ2V0UGFyc2VkQm9keSgpYCB8IFJldHJpZXZlIGFueSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgIHwgIHwKfCBgd2l0aFBhcnNlZEJvZHkoJGRhdGEpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgYm9keSBwYXJhbWV0ZXJzICB8ICB8CnwgYGdldEF0dHJpYnV0ZXMoKWAgfCBSZXRyaWV2ZSBhdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdCAgfCAgfAp8IGBnZXRBdHRyaWJ1dGUoJG5hbWUsICRkZWZhdWx0ID0gbnVsbClgIHwgUmV0cmlldmUgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAp8IGB3aXRoQXR0cmlidXRlKCRuYW1lLCAkdmFsdWUpYCB8IFJldHVybnMgYSBuZXcgcmVxdWVzdCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAp8IGB3aXRob3V0QXR0cmlidXRlKCRuYW1lKWAgfCBSZXR1cm5zIGEgbmV3IHJlcXVlc3QgaW5zdGFuY2UgdGhhdCB3aXRob3V0IHRoZSBzcGVjaWZpZWQgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSAgfCAgfAoKIyMgYFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VgIE1ldGhvZHM6CgpTYW1lIG1ldGhvZHMgYXMgYFBzclxIdHRwXE1lc3NhZ2VcTWVzc2FnZUludGVyZmFjZWAgICsgdGhlIGZvbGxvd2luZyBtZXRob2RzOgoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTdGF0dXNDb2RlKClgIHwgR2V0cyB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuIHwgfAp8IGB3aXRoU3RhdHVzKCRjb2RlLCAkcmVhc29uUGhyYXNlID0gJycpYCB8IFJldHVybnMgYSBuZXcgcmVzcG9uc2UgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXR1cyBjb2RlIGFuZCwgb3B0aW9uYWxseSwgcmVhc29uIHBocmFzZS4gfCB8CnwgYGdldFJlYXNvblBocmFzZSgpYCB8IEdldHMgdGhlIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4gfCB8CgojIyAgYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYCBNZXRob2RzCgp8IE1ldGhvZCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiB8IE5vdGVzIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tLS0gfCAtLS0tLSB8CnwgYF9fdG9TdHJpbmcoKWAgfCBSZWFkcyBhbGwgZGF0YSBmcm9tIHRoZSBzdHJlYW0gaW50byBhIHN0cmluZywgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIGVuZC4gfCB8CnwgYGNsb3NlKClgIHwgQ2xvc2VzIHRoZSBzdHJlYW0gYW5kIGFueSB1bmRlcmx5aW5nIHJlc291cmNlcy4gfCB8CnwgYGRldGFjaCgpYCB8IFNlcGFyYXRlcyBhbnkgdW5kZXJseWluZyByZXNvdXJjZXMgZnJvbSB0aGUgc3RyZWFtLiB8IHwKfCBgZ2V0U2l6ZSgpYCB8IEdldCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGlmIGtub3duLiB8IHwKfCBgZW9mKClgIHwgUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLnwgfAp8IGBpc1NlZWthYmxlKClgIHwgIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyBzZWVrYWJsZS4gfCB8CnwgYHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKWAgfCBTZWVrIHRvIGEgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4gfCB8CnwgYHJld2luZCgpYCB8IFNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLiB8IHwKfCBgaXNXcml0YWJsZSgpYCB8IFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyB3cml0YWJsZS4gfCB8CnwgYHdyaXRlKCRzdHJpbmcpYCB8IFdyaXRlIGRhdGEgdG8gdGhlIHN0cmVhbS4gfCB8CnwgYGlzUmVhZGFibGUoKWAgfCBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJlYW0gaXMgcmVhZGFibGUuIHwgfAp8IGByZWFkKCRsZW5ndGgpYCB8IFJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0uIHwgfAp8IGBnZXRDb250ZW50cygpYCB8IFJldHVybnMgdGhlIHJlbWFpbmluZyBjb250ZW50cyBpbiBhIHN0cmluZyB8IHwKfCBgZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpKClgIHwgR2V0IHN0cmVhbSBtZXRhZGF0YSBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvciByZXRyaWV2ZSBhIHNwZWNpZmljIGtleS4gfCB8CgojIyBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIE1ldGhvZHMKCnwgTWV0aG9kIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uIHwgTm90ZXMgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBgZ2V0U2NoZW1lKClgIHwgUmV0cmlldmUgdGhlIHNjaGVtZSBjb21wb25lbnQgb2YgdGhlIFVSSS4gfCB8CnwgYGdldEF1dGhvcml0eSgpYCB8IFJldHJpZXZlIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IG9mIHRoZSBVUkkuIHwgfAp8IGBnZXRVc2VySW5mbygpYCB8IFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0SG9zdCgpYCB8IFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UG9ydCgpYCB8IFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UGF0aCgpYCB8IFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLiB8IHwKfCBgZ2V0UXVlcnkoKWAgfCBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuIHwgfAp8IGBnZXRGcmFnbWVudCgpYCB8IFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4gfCB8CnwgYHdpdGhTY2hlbWUoJHNjaGVtZSlgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuIHwgfAp8IGB3aXRoVXNlckluZm8oJHVzZXIsICRwYXNzd29yZCA9IG51bGwpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4gfCB8CnwgYHdpdGhIb3N0KCRob3N0KWAgfCBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhvc3QuIHwgfAp8IGB3aXRoUG9ydCgkcG9ydClgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LiB8IHwKfCBgd2l0aFBhdGgoJHBhdGgpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4gfCB8CnwgYHdpdGhRdWVyeSgkcXVlcnkpYCB8IFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLiB8IHwKfCBgd2l0aEZyYWdtZW50KCRmcmFnbWVudClgIHwgUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuIHwgfAp8IGBfX3RvU3RyaW5nKClgIHwgUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSBVUkkgcmVmZXJlbmNlLiB8IHwKCiMjIGBQc3JcSHR0cFxNZXNzYWdlXFVwbG9hZGVkRmlsZUludGVyZmFjZWAgTWV0aG9kcwoKfCBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gfCBOb3RlcyB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLS0tIHwgLS0tLS0gfAp8IGBnZXRTdHJlYW0oKWAgfCBSZXRyaWV2ZSBhIHN0cmVhbSByZXByZXNlbnRpbmcgdGhlIHVwbG9hZGVkIGZpbGUuIHwgfAp8IGBtb3ZlVG8oJHRhcmdldFBhdGgpYCB8IE1vdmUgdGhlIHVwbG9hZGVkIGZpbGUgdG8gYSBuZXcgbG9jYXRpb24uIHwgfAp8IGBnZXRTaXplKClgIHwgUmV0cmlldmUgdGhlIGZpbGUgc2l6ZS4gfCB8CnwgYGdldEVycm9yKClgIHwgUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4gfCB8CnwgYGdldENsaWVudEZpbGVuYW1lKClgIHwgUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4gfCB8CnwgYGdldENsaWVudE1lZGlhVHlwZSgpYCB8IFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4gfCB8Cgo+IGBSZXF1ZXN0SW50ZXJmYWNlYCwgYFNlcnZlclJlcXVlc3RJbnRlcmZhY2VgLCBgUmVzcG9uc2VJbnRlcmZhY2VgIGV4dGVuZCBgTWVzc2FnZUludGVyZmFjZWAgIGJlY2F1c2UgdGhlIGBSZXF1ZXN0YCBhbmQgdGhlIGBSZXNwb25zZWAgYXJlIGBIVFRQIE1lc3NhZ2VzYC4KPiBXaGVuIHVzaW5nIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCwgYm90aCBgUmVxdWVzdEludGVyZmFjZWAgYW5kIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIG1ldGhvZHMgYXJlIGNvbnNpZGVyZWQuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/docs/PSR7-Usage.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMjIFBTUi03IFVzYWdlCgpBbGwgUFNSLTcgYXBwbGljYXRpb25zIGNvbXBseSB3aXRoIHRoZXNlIGludGVyZmFjZXMgClRoZXkgd2VyZSBjcmVhdGVkIHRvIGVzdGFibGlzaCBhIHN0YW5kYXJkIGJldHdlZW4gbWlkZGxld2FyZSBpbXBsZW1lbnRhdGlvbnMuCgo+IGBSZXF1ZXN0SW50ZXJmYWNlYCwgYFNlcnZlclJlcXVlc3RJbnRlcmZhY2VgLCBgUmVzcG9uc2VJbnRlcmZhY2VgIGV4dGVuZCBgTWVzc2FnZUludGVyZmFjZWAgIGJlY2F1c2UgdGhlIGBSZXF1ZXN0YCBhbmQgdGhlIGBSZXNwb25zZWAgYXJlIGBIVFRQIE1lc3NhZ2VzYC4KPiBXaGVuIHVzaW5nIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlYCwgYm90aCBgUmVxdWVzdEludGVyZmFjZWAgYW5kIGBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2VgIG1ldGhvZHMgYXJlIGNvbnNpZGVyZWQuCgoKVGhlIGZvbGxvd2luZyBleGFtcGxlcyB3aWxsIGlsbHVzdHJhdGUgaG93IGJhc2ljIG9wZXJhdGlvbnMgYXJlIGRvbmUgaW4gUFNSLTcuCgojIyMjIyBFeGFtcGxlcwoKCkZvciB0aGlzIGV4YW1wbGVzIHRvIHdvcmsgKGF0IGxlYXN0KSBhIFBTUi03IGltcGxlbWVudGF0aW9uIHBhY2thZ2UgaXMgcmVxdWlyZWQuIChlZzogemVuZGZyYW1ld29yay96ZW5kLWRpYWN0b3JvcywgZ3V6emxlaHR0cC9wc3I3LCBzbGltL3NsaW0sIGV0YykKQWxsIFBTUi03IGltcGxlbWVudGF0aW9ucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIuCgpUaGUgZm9sbG93aW5nIHdpbGwgYmUgYXNzdW1lZDogCmAkcmVxdWVzdGAgaXMgYW4gb2JqZWN0IG9mIGBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VgIGFuZAoKYCRyZXNwb25zZWAgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyBgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlYAoKCiMjIyBXb3JraW5nIHdpdGggSFRUUCBIZWFkZXJzCgojIyMjIEFkZGluZyBoZWFkZXJzIHRvIHJlc3BvbnNlOgoKYGBgcGhwCiRyZXNwb25zZS0+d2l0aEhlYWRlcignTXktQ3VzdG9tLUhlYWRlcicsICdNeSBDdXN0b20gTWVzc2FnZScpOwpgYGAKCiMjIyMgQXBwZW5kaW5nIHZhbHVlcyB0byBoZWFkZXJzCgpgYGBwaHAKJHJlc3BvbnNlLT53aXRoQWRkZWRIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInLCAnVGhlIHNlY29uZCBtZXNzYWdlJyk7CmBgYAoKIyMjIyBDaGVja2luZyBpZiBoZWFkZXIgZXhpc3RzOgoKYGBgcGhwCiRyZXF1ZXN0LT5oYXNIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInKTsgLy8gd2lsbCByZXR1cm4gZmFsc2UKJHJlc3BvbnNlLT5oYXNIZWFkZXIoJ015LUN1c3RvbS1IZWFkZXInKTsgLy8gd2lsbCByZXR1cm4gdHJ1ZQpgYGAKCj4gTm90ZTogTXktQ3VzdG9tLUhlYWRlciB3YXMgb25seSBhZGRlZCBpbiB0aGUgUmVzcG9uc2UKCiMjIyMgR2V0dGluZyBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzIGZyb20gYSBoZWFkZXIgKGFsc28gYXBwbGllcyB0byByZXF1ZXN0KQoKYGBgcGhwCi8vIGdldHRpbmcgdmFsdWUgZnJvbSByZXF1ZXN0IGhlYWRlcnMKJHJlcXVlc3QtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtVHlwZScpOyAvLyB3aWxsIHJldHVybjogInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIKLy8gZ2V0dGluZyB2YWx1ZSBmcm9tIHJlc3BvbnNlIGhlYWRlcnMKJHJlc3BvbnNlLT5nZXRIZWFkZXJMaW5lKCdNeS1DdXN0b20tSGVhZGVyJyk7IC8vIHdpbGwgcmV0dXJuOiAgIk15IEN1c3RvbSBNZXNzYWdlOyBUaGUgc2Vjb25kIG1lc3NhZ2UiCmBgYAoKIyMjIyBHZXR0aW5nIGFycmF5IG9mIHZhbHVlIGZyb20gYSBoZWFkZXIgKGFsc28gYXBwbGllcyB0byByZXF1ZXN0KQpgYGBwaHAKLy8gZ2V0dGluZyB2YWx1ZSBmcm9tIHJlcXVlc3QgaGVhZGVycwokcmVxdWVzdC0+Z2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTsgLy8gd2lsbCByZXR1cm46IFsidGV4dC9odG1sIiwgImNoYXJzZXQ9VVRGLTgiXQovLyBnZXR0aW5nIHZhbHVlIGZyb20gcmVzcG9uc2UgaGVhZGVycwokcmVzcG9uc2UtPmdldEhlYWRlcignTXktQ3VzdG9tLUhlYWRlcicpOyAvLyB3aWxsIHJldHVybjogIFsiTXkgQ3VzdG9tIE1lc3NhZ2UiLCAgIlRoZSBzZWNvbmQgbWVzc2FnZSJdCmBgYAoKIyMjIyBSZW1vdmluZyBoZWFkZXJzIGZyb20gSFRUUCBNZXNzYWdlcwpgYGBwaHAKLy8gcmVtb3ZpbmcgYSBoZWFkZXIgZnJvbSBSZXF1ZXN0LCByZW1vdmluZyBkZXByZWNhdGVkICJDb250ZW50LU1ENSIgaGVhZGVyCiRyZXF1ZXN0LT53aXRob3V0SGVhZGVyKCdDb250ZW50LU1ENScpOyAKCi8vIHJlbW92aW5nIGEgaGVhZGVyIGZyb20gUmVzcG9uc2UKLy8gZWZmZWN0OiB0aGUgYnJvd3NlciB3b24ndCBrbm93IHRoZSBzaXplIG9mIHRoZSBzdHJlYW0KLy8gdGhlIGJyb3dzZXIgd2lsbCBkb3dubG9hZCB0aGUgc3RyZWFtIHRpbGwgaXQgZW5kcwokcmVzcG9uc2UtPndpdGhvdXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJyk7CmBgYAoKIyMjIFdvcmtpbmcgd2l0aCBIVFRQIE1lc3NhZ2UgQm9keQoKV2hlbiB3b3JraW5nIHdpdGggdGhlIFBTUi03IHRoZXJlIGFyZSB0d28gbWV0aG9kcyBvZiBpbXBsZW1lbnRhdGlvbjoKIyMjIyAxLiBHZXR0aW5nIHRoZSBib2R5IHNlcGFyYXRlbHkKCj4gVGhpcyBtZXRob2QgbWFrZXMgdGhlIGJvZHkgaGFuZGxpbmcgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIGlzIHVzZWZ1bCB3aGVuIHJlcGVhdGVkbHkgY2FsbGluZyBib2R5IG1ldGhvZHMuIChZb3Ugb25seSBjYWxsIGBnZXRCb2R5KClgIG9uY2UpLiBVc2luZyB0aGlzIG1ldGhvZCBtaXN0YWtlcyBsaWtlIGAkcmVzcG9uc2UtPndyaXRlKClgIGFyZSBhbHNvIHByZXZlbnRlZC4KCmBgYHBocAokYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwovLyBvcGVyYXRpb25zIG9uIGJvZHksIGVnLiByZWFkLCB3cml0ZSwgc2VlawovLyAuLi4KLy8gcmVwbGFjaW5nIHRoZSBvbGQgYm9keQokcmVzcG9uc2UtPndpdGhCb2R5KCRib2R5KTsgCi8vIHRoaXMgbGFzdCBzdGF0ZW1lbnQgaXMgb3B0aW9uYWwgYXMgd2Ugd29ya2luZyB3aXRoIG9iamVjdHMKLy8gaW4gdGhpcyBjYXNlIHRoZSAibmV3IiBib2R5IGlzIHNhbWUgd2l0aCB0aGUgIm9sZCIgb25lCi8vIHRoZSAkYm9keSB2YXJpYWJsZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIG9uZSBpbiAkcmVxdWVzdCwgb25seSB0aGUgcmVmZXJlbmNlIGlzIHBhc3NlZApgYGAKCiMjIyMgMi4gV29ya2luZyBkaXJlY3RseSBvbiByZXNwb25zZQoKPiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbiBvbmx5IHBlcmZvcm1pbmcgZmV3IG9wZXJhdGlvbnMgYXMgdGhlIGAkcmVxdWVzdC0+Z2V0Qm9keSgpYCBzdGF0ZW1lbnQgZnJhZ21lbnQgaXMgcmVxdWlyZWQKCmBgYHBocAokcmVzcG9uc2UtPmdldEJvZHkoKS0+d3JpdGUoJ2hlbGxvJyk7CmBgYAoKIyMjIEdldHRpbmcgdGhlIGJvZHkgY29udGVudHMKClRoZSBmb2xsb3dpbmcgc25pcHBldCBnZXRzIHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBjb250ZW50cy4KPiBOb3RlOiBTdHJlYW1zIG11c3QgYmUgcmV3aW5kZWQsIGlmIGNvbnRlbnQgd2FzIHdyaXR0ZW4gaW50byBzdHJlYW1zLCBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiBjYWxsaW5nIGBnZXRDb250ZW50cygpYCBiZWNhdXNlIHRoZSBzdHJlYW0gcG9pbnRlciBpcyBzZXQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyLCB3aGljaCBpcyBgXDBgIC0gbWVhbmluZyBlbmQgb2Ygc3RyZWFtLgpgYGBwaHAgCiRib2R5ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCk7CiRib2R5LT5yZXdpbmQoKTsgLy8gb3IgJGJvZHktPnNlZWsoMCk7CiRib2R5VGV4dCA9ICRib2R5LT5nZXRDb250ZW50cygpOwpgYGAKPiBOb3RlOiBJZiBgJGJvZHktPnNlZWsoMSlgIGlzIGNhbGxlZCBiZWZvcmUgYCRib2R5LT5nZXRDb250ZW50cygpYCwgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIG9tbWl0ZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50ZXIgaXMgc2V0IHRvIGAxYCwgbm90IGAwYC4gVGhpcyBpcyB3aHkgdXNpbmcgYCRib2R5LT5yZXdpbmQoKWAgaXMgcmVjb21tZW5kZWQuCgojIyMgQXBwZW5kIHRvIGJvZHkKCmBgYHBocAokcmVzcG9uc2UtPmdldEJvZHkoKS0+d3JpdGUoJ0hlbGxvJyk7IC8vIHdyaXRpbmcgZGlyZWN0bHkKJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOyAvLyB3aGljaCBpcyBhIGBTdHJlYW1JbnRlcmZhY2VgCiRib2R5LT53cml0ZSgneHh4eHgnKTsKYGBgCgojIyMgUHJlcGVuZCB0byBib2R5ClByZXBlbmRpbmcgaXMgZGlmZmVyZW50IHdoZW4gaXQgY29tZXMgdG8gc3RyZWFtcy4gVGhlIGNvbnRlbnQgbXVzdCBiZSBjb3BpZWQgYmVmb3JlIHdyaXRpbmcgdGhlIGNvbnRlbnQgdG8gYmUgcHJlcGVuZGVkLgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgd2lsbCBleHBsYWluIHRoZSBiZWhhdmlvdXIgb2Ygc3RyZWFtcy4KCmBgYHBocAovLyBhc3N1bWluZyBvdXIgcmVzcG9uc2UgaXMgaW5pdGlhbGx5IGVtcHR5CiRib2R5ID0gJHJlcHNvbnNlLT5nZXRCb2R5KCk7Ci8vIHdyaXRpbmcgdGhlIHN0cmluZyAiYWJjZCIKJGJvZHktPndyaXRlKCdhYmNkJyk7CgovLyBzZWVraW5nIHRvIHN0YXJ0IG9mIHN0cmVhbQokYm9keS0+c2VlaygwKTsKLy8gd3JpdGluZyAnZWYnCiRib2R5LT53cml0ZSgnZWYnKTsgLy8gYXQgdGhpcyBwb2ludCB0aGUgc3RyZWFtIGNvbnRhaW5zICJlZmNkIgpgYGAKCiMjIyMgUHJlcGVuZGluZyBieSByZXdyaXRpbmcgc2VwYXJhdGVseQoKYGBgcGhwCi8vIGFzc3VtaW5nIG91ciByZXNwb25zZSBib2R5IHN0cmVhbSBvbmx5IGNvbnRhaW5zOiAiYWJjZCIKJGJvZHkgPSAkcmVzcG9uc2UtPmdldEJvZHkoKTsKJGJvZHktPnJld2luZCgpOwokY29udGVudHMgPSAkYm9keS0+Z2V0Q29udGVudHMoKTsgLy8gYWJjZAovLyBzZWVraW5nIHRoZSBzdHJlYW0gdG8gYmVnaW5uaW5nCiRib2R5LT5yZXdpbmQoKTsKJGJvZHktPndyaXRlKCdlZicpOyAvLyBzdHJlYW0gY29udGFpbnMgImVmY2QiCiRib2R5LT53cml0ZSgkY29udGVudHMpOyAvLyBzdHJlYW0gY29udGFpbnMgImVmYWJjZCIKYGBgCgo+IE5vdGU6IGBnZXRDb250ZW50cygpYCBzZWVrcyB0aGUgc3RyZWFtIHdoaWxlIHJlYWRpbmcgaXQsIHRoZXJlZm9yZSBpZiB0aGUgc2Vjb25kIGByZXdpbmQoKWAgbWV0aG9kIGNhbGwgd2FzIG5vdCBwcmVzZW50IHRoZSBzdHJlYW0gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBgYWJjZGVmYWJjZGAgYmVjYXVzZSB0aGUgYHdyaXRlKClgIG1ldGhvZCBhcHBlbmRzIHRvIHN0cmVhbSBpZiBub3QgcHJlY2VlZGVkIGJ5IGByZXdpbmQoKWAgb3IgYHNlZWsoMClgLgoKIyMjIyBQcmVwZW5kaW5nIGJ5IHVzaW5nIGNvbnRlbnRzIGFzIGEgc3RyaW5nCmBgYHBocAokYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwokYm9keS0+cmV3aW5kKCk7CiRjb250ZW50cyA9ICRib2R5LT5nZXRDb250ZW50cygpOyAvLyBlZmFiY2QKJGNvbnRlbnRzID0gJ2VmJy4kY29udGVudHM7CiRib2R5LT5yZXdpbmQoKTsKJGJvZHktPndyaXRlKCRjb250ZW50cyk7CmBgYAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE0IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UFNSIEh0dHAgTWVzc2FnZQo9PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTddKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuCmludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIEhUVFAgbWVzc2FnZS4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpVc2FnZQotLS0tLQoKQmVmb3JlIHJlYWRpbmcgdGhlIHVzYWdlIGd1aWRlIHdlIHJlY29tbWVuZCByZWFkaW5nIHRoZSBQU1ItNyBpbnRlcmZhY2VzIG1ldGhvZCBsaXN0OgoKKiBbYFBTUi03IEludGVyZmFjZXMgTWV0aG9kIExpc3RgXShkb2NzL1BTUjctSW50ZXJmYWNlcy5tZCkKKiBbYFBTUi03IFVzYWdlIEd1aWRlYF0oZG9jcy9QU1I3LVVzYWdlLm1kKQ==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/MessageInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogSFRUUCBtZXNzYWdlcyBjb25zaXN0IG9mIHJlcXVlc3RzIGZyb20gYSBjbGllbnQgdG8gYSBzZXJ2ZXIgYW5kIHJlc3BvbnNlcwogKiBmcm9tIGEgc2VydmVyIHRvIGEgY2xpZW50LiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIHRoZSBtZXRob2RzIGNvbW1vbiB0bwogKiBlYWNoLgogKgogKiBNZXNzYWdlcyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICoKICogQGxpbmsgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNzIzMC50eHQKICogQGxpbmsgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNzIzMS50eHQKICovCmludGVyZmFjZSBNZXNzYWdlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBIVFRQIHByb3RvY29sIHZlcnNpb24gYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHN0cmluZyBNVVNUIGNvbnRhaW4gb25seSB0aGUgSFRUUCB2ZXJzaW9uIG51bWJlciAoZS5nLiwgIjEuMSIsICIxLjAiKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVFRQIHByb3RvY29sIHZlcnNpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm90b2NvbFZlcnNpb24oKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIFRoZSB2ZXJzaW9uIHN0cmluZyBNVVNUIGNvbnRhaW4gb25seSB0aGUgSFRUUCB2ZXJzaW9uIG51bWJlciAoZS5nLiwKICAgICAqICIxLjEiLCAiMS4wIikuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IHByb3RvY29sIHZlcnNpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbiBIVFRQIHByb3RvY29sIHZlcnNpb24KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUHJvdG9jb2xWZXJzaW9uKHN0cmluZyAkdmVyc2lvbik7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYWxsIG1lc3NhZ2UgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUga2V5cyByZXByZXNlbnQgdGhlIGhlYWRlciBuYW1lIGFzIGl0IHdpbGwgYmUgc2VudCBvdmVyIHRoZSB3aXJlLCBhbmQKICAgICAqIGVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiAgICAgLy8gUmVwcmVzZW50IHRoZSBoZWFkZXJzIGFzIGEgc3RyaW5nCiAgICAgKiAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgKiAgICAgICAgIGVjaG8gJG5hbWUgLiAiOiAiIC4gaW1wbG9kZSgiLCAiLCAkdmFsdWVzKTsKICAgICAqICAgICB9CiAgICAgKgogICAgICogICAgIC8vIEVtaXQgaGVhZGVycyBpdGVyYXRpdmVseToKICAgICAqICAgICBmb3JlYWNoICgkbWVzc2FnZS0+Z2V0SGVhZGVycygpIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAqICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAqICAgICAgICAgICAgIGhlYWRlcihzcHJpbnRmKCclczogJXMnLCAkbmFtZSwgJHZhbHVlKSwgZmFsc2UpOwogICAgICogICAgICAgICB9CiAgICAgKiAgICAgfQogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBnZXRIZWFkZXJzKCkgd2lsbCBwcmVzZXJ2ZSB0aGUKICAgICAqIGV4YWN0IGNhc2UgaW4gd2hpY2ggaGVhZGVycyB3ZXJlIG9yaWdpbmFsbHkgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW11bXSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBtZXNzYWdlJ3MgaGVhZGVycy4gRWFjaAogICAgICogICAgIGtleSBNVVNUIGJlIGEgaGVhZGVyIG5hbWUsIGFuZCBlYWNoIHZhbHVlIE1VU1QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICogICAgIGZvciB0aGF0IGhlYWRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKTsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIGhlYWRlciBleGlzdHMgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIGFueSBoZWFkZXIgbmFtZXMgbWF0Y2ggdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgIG5hbWUgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uLiBSZXR1cm5zIGZhbHNlIGlmCiAgICAgKiAgICAgbm8gbWF0Y2hpbmcgaGVhZGVyIG5hbWUgaXMgZm91bmQgaW4gdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoc3RyaW5nICRuYW1lKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIG1lc3NhZ2UgaGVhZGVyIHZhbHVlIGJ5IHRoZSBnaXZlbiBjYXNlLWluc2Vuc2l0aXZlIG5hbWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIGhlYWRlciB2YWx1ZXMgb2YgdGhlIGdpdmVuCiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBuYW1lLgogICAgICoKICAgICAqIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbgogICAgICogZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGFzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4KICAgICAqICAgIGhlYWRlci4gSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QKICAgICAqICAgIHJldHVybiBhbiBlbXB0eSBhcnJheS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcihzdHJpbmcgJG5hbWUpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBvZiB0aGUgdmFsdWVzIGZvciBhIHNpbmdsZSBoZWFkZXIuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbGwgb2YgdGhlIGhlYWRlciB2YWx1ZXMgb2YgdGhlIGdpdmVuCiAgICAgKiBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBuYW1lIGFzIGEgc3RyaW5nIGNvbmNhdGVuYXRlZCB0b2dldGhlciB1c2luZwogICAgICogYSBjb21tYS4KICAgICAqCiAgICAgKiBOT1RFOiBOb3QgYWxsIGhlYWRlciB2YWx1ZXMgbWF5IGJlIGFwcHJvcHJpYXRlbHkgcmVwcmVzZW50ZWQgdXNpbmcKICAgICAqIGNvbW1hIGNvbmNhdGVuYXRpb24uIEZvciBzdWNoIGhlYWRlcnMsIHVzZSBnZXRIZWFkZXIoKSBpbnN0ZWFkCiAgICAgKiBhbmQgc3VwcGx5IHlvdXIgb3duIGRlbGltaXRlciB3aGVuIGNvbmNhdGVuYXRpbmcuCiAgICAgKgogICAgICogSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuCiAgICAgKiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgb2YgdmFsdWVzIGFzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4gaGVhZGVyCiAgICAgKiAgICBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdXNpbmcgYSBjb21tYS4gSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4KICAgICAqICAgIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJMaW5lKHN0cmluZyAkbmFtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUgcmVwbGFjaW5nIHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgdGhlIGNhc2luZyBvZiB0aGUgaGVhZGVyIHdpbGwKICAgICAqIGJlIHByZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgcmV0dXJuZWQgZnJvbSBnZXRIZWFkZXJzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGFuZC9vciB1cGRhdGVkIGhlYWRlciBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkdmFsdWUgSGVhZGVyIHZhbHVlKHMpLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBoZWFkZXIgbmFtZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcihzdHJpbmcgJG5hbWUsICR2YWx1ZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhlYWRlciBhcHBlbmRlZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAqCiAgICAgKiBFeGlzdGluZyB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgaGVhZGVyIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhlIG5ldwogICAgICogdmFsdWUocykgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZXhpc3RpbmcgbGlzdC4gSWYgdGhlIGhlYWRlciBkaWQgbm90CiAgICAgKiBleGlzdCBwcmV2aW91c2x5LCBpdCB3aWxsIGJlIGFkZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBoZWFkZXIgYW5kL29yIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZSB0byBhZGQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICR2YWx1ZSBIZWFkZXIgdmFsdWUocykuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIGhlYWRlciBuYW1lcyBvciB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQWRkZWRIZWFkZXIoc3RyaW5nICRuYW1lLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCBoZWFkZXIuCiAgICAgKgogICAgICogSGVhZGVyIHJlc29sdXRpb24gTVVTVCBiZSBkb25lIHdpdGhvdXQgY2FzZS1zZW5zaXRpdml0eS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCByZW1vdmVzCiAgICAgKiB0aGUgbmFtZWQgaGVhZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZSB0byByZW1vdmUuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEhlYWRlcihzdHJpbmcgJG5hbWUpOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZSBSZXR1cm5zIHRoZSBib2R5IGFzIGEgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogVGhlIGJvZHkgTVVTVCBiZSBhIFN0cmVhbUludGVyZmFjZSBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGJvZHkgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJGJvZHkgQm9keS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gV2hlbiB0aGUgYm9keSBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/RequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIGNsaWVudC1zaWRlIHJlcXVlc3QuCiAqCiAqIFBlciB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLCB0aGlzIGludGVyZmFjZSBpbmNsdWRlcyBwcm9wZXJ0aWVzIGZvcgogKiBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIC0gUHJvdG9jb2wgdmVyc2lvbgogKiAtIEhUVFAgbWV0aG9kCiAqIC0gVVJJCiAqIC0gSGVhZGVycwogKiAtIE1lc3NhZ2UgYm9keQogKgogKiBEdXJpbmcgY29uc3RydWN0aW9uLCBpbXBsZW1lbnRhdGlvbnMgTVVTVCBhdHRlbXB0IHRvIHNldCB0aGUgSG9zdCBoZWFkZXIgZnJvbQogKiBhIHByb3ZpZGVkIFVSSSBpZiBubyBIb3N0IGhlYWRlciBpcyBwcm92aWRlZC4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgUmVxdWVzdEludGVyZmFjZSBleHRlbmRzIE1lc3NhZ2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UncyByZXF1ZXN0IHRhcmdldC4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UncyByZXF1ZXN0LXRhcmdldCBlaXRoZXIgYXMgaXQgd2lsbCBhcHBlYXIgKGZvcgogICAgICogY2xpZW50cyksIGFzIGl0IGFwcGVhcmVkIGF0IHJlcXVlc3QgKGZvciBzZXJ2ZXJzKSwgb3IgYXMgaXQgd2FzCiAgICAgKiBzcGVjaWZpZWQgZm9yIHRoZSBpbnN0YW5jZSAoc2VlIHdpdGhSZXF1ZXN0VGFyZ2V0KCkpLgogICAgICoKICAgICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luLWZvcm0gb2YgdGhlIGNvbXBvc2VkIFVSSSwKICAgICAqIHVubGVzcyBhIHZhbHVlIHdhcyBwcm92aWRlZCB0byB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gKHNlZQogICAgICogd2l0aFJlcXVlc3RUYXJnZXQoKSBiZWxvdykuCiAgICAgKgogICAgICogSWYgbm8gVVJJIGlzIGF2YWlsYWJsZSwgYW5kIG5vIHJlcXVlc3QtdGFyZ2V0IGhhcyBiZWVuIHNwZWNpZmljYWxseQogICAgICogcHJvdmlkZWQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIHRoZSBzdHJpbmcgIi8iLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VGFyZ2V0KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWMgcmVxdWVzdC10YXJnZXQuCiAgICAgKgogICAgICogSWYgdGhlIHJlcXVlc3QgbmVlZHMgYSBub24tb3JpZ2luLWZvcm0gcmVxdWVzdC10YXJnZXQg4oCUIGUuZy4sIGZvcgogICAgICogc3BlY2lmeWluZyBhbiBhYnNvbHV0ZS1mb3JtLCBhdXRob3JpdHktZm9ybSwgb3IgYXN0ZXJpc2stZm9ybSDigJQKICAgICAqIHRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQKICAgICAqIHJlcXVlc3QtdGFyZ2V0LCB2ZXJiYXRpbS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiBjaGFuZ2VkIHJlcXVlc3QgdGFyZ2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi01LjMgKGZvciB0aGUgdmFyaW91cwogICAgICogICAgIHJlcXVlc3QtdGFyZ2V0IGZvcm1zIGFsbG93ZWQgaW4gcmVxdWVzdCBtZXNzYWdlcykKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RUYXJnZXQKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUmVxdWVzdFRhcmdldChzdHJpbmcgJHJlcXVlc3RUYXJnZXQpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBIVFRQIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZXF1ZXN0IG1ldGhvZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGhvZCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHByb3ZpZGVkIEhUVFAgbWV0aG9kLgogICAgICoKICAgICAqIFdoaWxlIEhUVFAgbWV0aG9kIG5hbWVzIGFyZSB0eXBpY2FsbHkgYWxsIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLCBIVFRQCiAgICAgKiBtZXRob2QgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCB0aHVzIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UCiAgICAgKiBtb2RpZnkgdGhlIGdpdmVuIHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiBjaGFuZ2VkIHJlcXVlc3QgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBDYXNlLXNlbnNpdGl2ZSBtZXRob2QuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIEhUVFAgbWV0aG9kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhNZXRob2Qoc3RyaW5nICRtZXRob2QpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBVUkkgaW5zdGFuY2UuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMwogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UgUmV0dXJucyBhIFVyaUludGVyZmFjZSBpbnN0YW5jZQogICAgICogICAgIHJlcHJlc2VudGluZyB0aGUgVVJJIG9mIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXJpKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIHdpdGggdGhlIHByb3ZpZGVkIFVSSS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHVwZGF0ZSB0aGUgSG9zdCBoZWFkZXIgb2YgdGhlIHJldHVybmVkIHJlcXVlc3QgYnkKICAgICAqIGRlZmF1bHQgaWYgdGhlIFVSSSBjb250YWlucyBhIGhvc3QgY29tcG9uZW50LiBJZiB0aGUgVVJJIGRvZXMgbm90CiAgICAgKiBjb250YWluIGEgaG9zdCBjb21wb25lbnQsIGFueSBwcmUtZXhpc3RpbmcgSG9zdCBoZWFkZXIgTVVTVCBiZSBjYXJyaWVkCiAgICAgKiBvdmVyIHRvIHRoZSByZXR1cm5lZCByZXF1ZXN0LgogICAgICoKICAgICAqIFlvdSBjYW4gb3B0LWluIHRvIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBIb3N0IGhlYWRlciBieQogICAgICogc2V0dGluZyBgJHByZXNlcnZlSG9zdGAgdG8gYHRydWVgLiBXaGVuIGAkcHJlc2VydmVIb3N0YCBpcyBzZXQgdG8KICAgICAqIGB0cnVlYCwgdGhpcyBtZXRob2QgaW50ZXJhY3RzIHdpdGggdGhlIEhvc3QgaGVhZGVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKICAgICAqCiAgICAgKiAtIElmIHRoZSBIb3N0IGhlYWRlciBpcyBtaXNzaW5nIG9yIGVtcHR5LCBhbmQgdGhlIG5ldyBVUkkgY29udGFpbnMKICAgICAqICAgYSBob3N0IGNvbXBvbmVudCwgdGhpcyBtZXRob2QgTVVTVCB1cGRhdGUgdGhlIEhvc3QgaGVhZGVyIGluIHRoZSByZXR1cm5lZAogICAgICogICByZXF1ZXN0LgogICAgICogLSBJZiB0aGUgSG9zdCBoZWFkZXIgaXMgbWlzc2luZyBvciBlbXB0eSwgYW5kIHRoZSBuZXcgVVJJIGRvZXMgbm90IGNvbnRhaW4gYQogICAgICogICBob3N0IGNvbXBvbmVudCwgdGhpcyBtZXRob2QgTVVTVCBOT1QgdXBkYXRlIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgcmV0dXJuZWQKICAgICAqICAgcmVxdWVzdC4KICAgICAqIC0gSWYgYSBIb3N0IGhlYWRlciBpcyBwcmVzZW50IGFuZCBub24tZW1wdHksIHRoaXMgbWV0aG9kIE1VU1QgTk9UIHVwZGF0ZQogICAgICogICB0aGUgSG9zdCBoZWFkZXIgaW4gdGhlIHJldHVybmVkIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IFVyaUludGVyZmFjZSBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkgTmV3IHJlcXVlc3QgVVJJIHRvIHVzZS4KICAgICAqIEBwYXJhbSBib29sICRwcmVzZXJ2ZUhvc3QgUHJlc2VydmUgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBIb3N0IGhlYWRlci4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXJpKFVyaUludGVyZmFjZSAkdXJpLCBib29sICRwcmVzZXJ2ZUhvc3QgPSBmYWxzZSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ResponseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gb3V0Z29pbmcsIHNlcnZlci1zaWRlIHJlc3BvbnNlLgogKgogKiBQZXIgdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiwgdGhpcyBpbnRlcmZhY2UgaW5jbHVkZXMgcHJvcGVydGllcyBmb3IKICogZWFjaCBvZiB0aGUgZm9sbG93aW5nOgogKgogKiAtIFByb3RvY29sIHZlcnNpb24KICogLSBTdGF0dXMgY29kZSBhbmQgcmVhc29uIHBocmFzZQogKiAtIEhlYWRlcnMKICogLSBNZXNzYWdlIGJvZHkKICoKICogUmVzcG9uc2VzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgTVVTVAogKiBiZSBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgdGhleSByZXRhaW4gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjdXJyZW50CiAqIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFJlc3BvbnNlSW50ZXJmYWNlIGV4dGVuZHMgTWVzc2FnZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEdldHMgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIFRoZSBzdGF0dXMgY29kZSBpcyBhIDMtZGlnaXQgaW50ZWdlciByZXN1bHQgY29kZSBvZiB0aGUgc2VydmVyJ3MgYXR0ZW1wdAogICAgICogdG8gdW5kZXJzdGFuZCBhbmQgc2F0aXNmeSB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBTdGF0dXMgY29kZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c0NvZGUoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdHVzIGNvZGUgYW5kLCBvcHRpb25hbGx5LCByZWFzb24gcGhyYXNlLgogICAgICoKICAgICAqIElmIG5vIHJlYXNvbiBwaHJhc2UgaXMgc3BlY2lmaWVkLCBpbXBsZW1lbnRhdGlvbnMgTUFZIGNob29zZSB0byBkZWZhdWx0CiAgICAgKiB0byB0aGUgUkZDIDcyMzEgb3IgSUFOQSByZWNvbW1lbmRlZCByZWFzb24gcGhyYXNlIGZvciB0aGUgcmVzcG9uc2UncwogICAgICogc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBzdGF0dXMgYW5kIHJlYXNvbiBwaHJhc2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1zdGF0dXMtY29kZXMvaHR0cC1zdGF0dXMtY29kZXMueGh0bWwKICAgICAqIEBwYXJhbSBpbnQgJGNvZGUgVGhlIDMtZGlnaXQgaW50ZWdlciByZXN1bHQgY29kZSB0byBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFzb25QaHJhc2UgVGhlIHJlYXNvbiBwaHJhc2UgdG8gdXNlIHdpdGggdGhlCiAgICAgKiAgICAgcHJvdmlkZWQgc3RhdHVzIGNvZGU7IGlmIG5vbmUgaXMgcHJvdmlkZWQsIGltcGxlbWVudGF0aW9ucyBNQVkKICAgICAqICAgICB1c2UgdGhlIGRlZmF1bHRzIGFzIHN1Z2dlc3RlZCBpbiB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBGb3IgaW52YWxpZCBzdGF0dXMgY29kZSBhcmd1bWVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoU3RhdHVzKGludCAkY29kZSwgc3RyaW5nICRyZWFzb25QaHJhc2UgPSAnJyk7CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSByZXNwb25zZSByZWFzb24gcGhyYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogQmVjYXVzZSBhIHJlYXNvbiBwaHJhc2UgaXMgbm90IGEgcmVxdWlyZWQgZWxlbWVudCBpbiBhIHJlc3BvbnNlCiAgICAgKiBzdGF0dXMgbGluZSwgdGhlIHJlYXNvbiBwaHJhc2UgdmFsdWUgTUFZIGJlIG51bGwuIEltcGxlbWVudGF0aW9ucyBNQVkKICAgICAqIGNob29zZSB0byByZXR1cm4gdGhlIGRlZmF1bHQgUkZDIDcyMzEgcmVjb21tZW5kZWQgcmVhc29uIHBocmFzZSAob3IgdGhvc2UKICAgICAqIGxpc3RlZCBpbiB0aGUgSUFOQSBIVFRQIFN0YXR1cyBDb2RlIFJlZ2lzdHJ5KSBmb3IgdGhlIHJlc3BvbnNlJ3MKICAgICAqIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02CiAgICAgKiBAbGluayBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2h0dHAtc3RhdHVzLWNvZGVzL2h0dHAtc3RhdHVzLWNvZGVzLnhodG1sCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZWFzb24gcGhyYXNlOyBtdXN0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgbm9uZSBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uUGhyYXNlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ServerRequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYW4gaW5jb21pbmcsIHNlcnZlci1zaWRlIEhUVFAgcmVxdWVzdC4KICoKICogUGVyIHRoZSBIVFRQIHNwZWNpZmljYXRpb24sIHRoaXMgaW50ZXJmYWNlIGluY2x1ZGVzIHByb3BlcnRpZXMgZm9yCiAqIGVhY2ggb2YgdGhlIGZvbGxvd2luZzoKICoKICogLSBQcm90b2NvbCB2ZXJzaW9uCiAqIC0gSFRUUCBtZXRob2QKICogLSBVUkkKICogLSBIZWFkZXJzCiAqIC0gTWVzc2FnZSBib2R5CiAqCiAqIEFkZGl0aW9uYWxseSwgaXQgZW5jYXBzdWxhdGVzIGFsbCBkYXRhIGFzIGl0IGhhcyBhcnJpdmVkIHRvIHRoZQogKiBhcHBsaWNhdGlvbiBmcm9tIHRoZSBDR0kgYW5kL29yIFBIUCBlbnZpcm9ubWVudCwgaW5jbHVkaW5nOgogKgogKiAtIFRoZSB2YWx1ZXMgcmVwcmVzZW50ZWQgaW4gJF9TRVJWRVIuCiAqIC0gQW55IGNvb2tpZXMgcHJvdmlkZWQgKGdlbmVyYWxseSB2aWEgJF9DT09LSUUpCiAqIC0gUXVlcnkgc3RyaW5nIGFyZ3VtZW50cyAoZ2VuZXJhbGx5IHZpYSAkX0dFVCwgb3IgYXMgcGFyc2VkIHZpYSBwYXJzZV9zdHIoKSkKICogLSBVcGxvYWQgZmlsZXMsIGlmIGFueSAoYXMgcmVwcmVzZW50ZWQgYnkgJF9GSUxFUykKICogLSBEZXNlcmlhbGl6ZWQgYm9keSBwYXJhbWV0ZXJzIChnZW5lcmFsbHkgZnJvbSAkX1BPU1QpCiAqCiAqICRfU0VSVkVSIHZhbHVlcyBNVVNUIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlLCBhcyB0aGV5IHJlcHJlc2VudCBhcHBsaWNhdGlvbgogKiBzdGF0ZSBhdCB0aGUgdGltZSBvZiByZXF1ZXN0OyBhcyBzdWNoLCBubyBtZXRob2RzIGFyZSBwcm92aWRlZCB0byBhbGxvdwogKiBtb2RpZmljYXRpb24gb2YgdGhvc2UgdmFsdWVzLiBUaGUgb3RoZXIgdmFsdWVzIHByb3ZpZGUgc3VjaCBtZXRob2RzLCBhcyB0aGV5CiAqIGNhbiBiZSByZXN0b3JlZCBmcm9tICRfU0VSVkVSIG9yIHRoZSByZXF1ZXN0IGJvZHksIGFuZCBtYXkgbmVlZCB0cmVhdG1lbnQKICogZHVyaW5nIHRoZSBhcHBsaWNhdGlvbiAoZS5nLiwgYm9keSBwYXJhbWV0ZXJzIG1heSBiZSBkZXNlcmlhbGl6ZWQgYmFzZWQgb24KICogY29udGVudCB0eXBlKS4KICoKICogQWRkaXRpb25hbGx5LCB0aGlzIGludGVyZmFjZSByZWNvZ25pemVzIHRoZSB1dGlsaXR5IG9mIGludHJvc3BlY3RpbmcgYQogKiByZXF1ZXN0IHRvIGRlcml2ZSBhbmQgbWF0Y2ggYWRkaXRpb25hbCBwYXJhbWV0ZXJzIChlLmcuLCB2aWEgVVJJIHBhdGgKICogbWF0Y2hpbmcsIGRlY3J5cHRpbmcgY29va2llIHZhbHVlcywgZGVzZXJpYWxpemluZyBub24tZm9ybS1lbmNvZGVkIGJvZHkKICogY29udGVudCwgbWF0Y2hpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXJzIHRvIHVzZXJzLCBldGMpLiBUaGVzZSBwYXJhbWV0ZXJzCiAqIGFyZSBzdG9yZWQgaW4gYW4gImF0dHJpYnV0ZXMiIHByb3BlcnR5LgogKgogKiBSZXF1ZXN0cyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmludGVyZmFjZSBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlIGV4dGVuZHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIHNlcnZlciBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIFJldHJpZXZlcyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGluY29taW5nIHJlcXVlc3QgZW52aXJvbm1lbnQsCiAgICAgKiB0eXBpY2FsbHkgZGVyaXZlZCBmcm9tIFBIUCdzICRfU0VSVkVSIHN1cGVyZ2xvYmFsLiBUaGUgZGF0YSBJUyBOT1QKICAgICAqIFJFUVVJUkVEIHRvIG9yaWdpbmF0ZSBmcm9tICRfU0VSVkVSLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgY29va2llcy4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgY29va2llcyBzZW50IGJ5IHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiBUaGUgZGF0YSBNVVNUIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RydWN0dXJlIG9mIHRoZSAkX0NPT0tJRQogICAgICogc3VwZXJnbG9iYWwuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llUGFyYW1zKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGNvb2tpZXMuCiAgICAgKgogICAgICogVGhlIGRhdGEgSVMgTk9UIFJFUVVJUkVEIHRvIGNvbWUgZnJvbSB0aGUgJF9DT09LSUUgc3VwZXJnbG9iYWwsIGJ1dCBNVVNUCiAgICAgKiBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0cnVjdHVyZSBvZiAkX0NPT0tJRS4gVHlwaWNhbGx5LCB0aGlzIGRhdGEgd2lsbAogICAgICogYmUgaW5qZWN0ZWQgYXQgaW5zdGFudGlhdGlvbi4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIE5PVCB1cGRhdGUgdGhlIHJlbGF0ZWQgQ29va2llIGhlYWRlciBvZiB0aGUgcmVxdWVzdAogICAgICogaW5zdGFuY2UsIG5vciByZWxhdGVkIHZhbHVlcyBpbiB0aGUgc2VydmVyIHBhcmFtcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGNvb2tpZSB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb29raWVzIEFycmF5IG9mIGtleS92YWx1ZSBwYWlycyByZXByZXNlbnRpbmcgY29va2llcy4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQ29va2llUGFyYW1zKGFycmF5ICRjb29raWVzKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogUmV0cmlldmVzIHRoZSBkZXNlcmlhbGl6ZWQgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cywgaWYgYW55LgogICAgICoKICAgICAqIE5vdGU6IHRoZSBxdWVyeSBwYXJhbXMgbWlnaHQgbm90IGJlIGluIHN5bmMgd2l0aCB0aGUgVVJJIG9yIHNlcnZlcgogICAgICogcGFyYW1zLiBJZiB5b3UgbmVlZCB0byBlbnN1cmUgeW91IGFyZSBvbmx5IGdldHRpbmcgdGhlIG9yaWdpbmFsCiAgICAgKiB2YWx1ZXMsIHlvdSBtYXkgbmVlZCB0byBwYXJzZSB0aGUgcXVlcnkgc3RyaW5nIGZyb20gYGdldFVyaSgpLT5nZXRRdWVyeSgpYAogICAgICogb3IgZnJvbSB0aGUgYFFVRVJZX1NUUklOR2Agc2VydmVyIHBhcmFtLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogVGhlc2UgdmFsdWVzIFNIT1VMRCByZW1haW4gaW1tdXRhYmxlIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgaW5jb21pbmcKICAgICAqIHJlcXVlc3QuIFRoZXkgTUFZIGJlIGluamVjdGVkIGR1cmluZyBpbnN0YW50aWF0aW9uLCBzdWNoIGFzIGZyb20gUEhQJ3MKICAgICAqICRfR0VUIHN1cGVyZ2xvYmFsLCBvciBNQVkgYmUgZGVyaXZlZCBmcm9tIHNvbWUgb3RoZXIgdmFsdWUgc3VjaCBhcyB0aGUKICAgICAqIFVSSS4gSW4gY2FzZXMgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGZyb20gdGhlIFVSSSwgdGhlIGRhdGEKICAgICAqIE1VU1QgYmUgY29tcGF0aWJsZSB3aXRoIHdoYXQgUEhQJ3MgcGFyc2Vfc3RyKCkgd291bGQgcmV0dXJuIGZvcgogICAgICogcHVycG9zZXMgb2YgaG93IGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLCBhbmQgaG93IG5lc3RlZAogICAgICogc2V0cyBhcmUgaGFuZGxlZC4KICAgICAqCiAgICAgKiBTZXR0aW5nIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMgTVVTVCBOT1QgY2hhbmdlIHRoZSBVUkkgc3RvcmVkIGJ5IHRoZQogICAgICogcmVxdWVzdCwgbm9yIHRoZSB2YWx1ZXMgaW4gdGhlIHNlcnZlciBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcXVlcnkgQXJyYXkgb2YgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cywgdHlwaWNhbGx5IGZyb20KICAgICAqICAgICAkX0dFVC4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUXVlcnlQYXJhbXMoYXJyYXkgJHF1ZXJ5KTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIG5vcm1hbGl6ZWQgZmlsZSB1cGxvYWQgZGF0YS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHVwbG9hZCBtZXRhZGF0YSBpbiBhIG5vcm1hbGl6ZWQgdHJlZSwgd2l0aCBlYWNoIGxlYWYKICAgICAqIGFuIGluc3RhbmNlIG9mIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlLgogICAgICoKICAgICAqIFRoZXNlIHZhbHVlcyBNQVkgYmUgcHJlcGFyZWQgZnJvbSAkX0ZJTEVTIG9yIHRoZSBtZXNzYWdlIGJvZHkgZHVyaW5nCiAgICAgKiBpbnN0YW50aWF0aW9uLCBvciBNQVkgYmUgaW5qZWN0ZWQgdmlhIHdpdGhVcGxvYWRlZEZpbGVzKCkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSB0cmVlIG9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXM7IGFuIGVtcHR5CiAgICAgKiAgICAgYXJyYXkgTVVTVCBiZSByZXR1cm5lZCBpZiBubyBkYXRhIGlzIHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGxvYWRlZEZpbGVzKCk7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVwbG9hZGVkIGZpbGVzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgYm9keSBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkdXBsb2FkZWRGaWxlcyBBbiBhcnJheSB0cmVlIG9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXMuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFuIGludmFsaWQgc3RydWN0dXJlIGlzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVwbG9hZGVkRmlsZXMoYXJyYXkgJHVwbG9hZGVkRmlsZXMpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW55IHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBDb250ZW50LVR5cGUgaXMgZWl0aGVyIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAogICAgICogb3IgbXVsdGlwYXJ0L2Zvcm0tZGF0YSwgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBQT1NULCB0aGlzIG1ldGhvZCBNVVNUCiAgICAgKiByZXR1cm4gdGhlIGNvbnRlbnRzIG9mICRfUE9TVC4KICAgICAqCiAgICAgKiBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gYW55IHJlc3VsdHMgb2YgZGVzZXJpYWxpemluZwogICAgICogdGhlIHJlcXVlc3QgYm9keSBjb250ZW50OyBhcyBwYXJzaW5nIHJldHVybnMgc3RydWN0dXJlZCBjb250ZW50LCB0aGUKICAgICAqIHBvdGVudGlhbCB0eXBlcyBNVVNUIGJlIGFycmF5cyBvciBvYmplY3RzIG9ubHkuIEEgbnVsbCB2YWx1ZSBpbmRpY2F0ZXMKICAgICAqIHRoZSBhYnNlbmNlIG9mIGJvZHkgY29udGVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8YXJyYXl8b2JqZWN0IFRoZSBkZXNlcmlhbGl6ZWQgYm9keSBwYXJhbWV0ZXJzLCBpZiBhbnkuCiAgICAgKiAgICAgVGhlc2Ugd2lsbCB0eXBpY2FsbHkgYmUgYW4gYXJyYXkgb3Igb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkQm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBib2R5IHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhlc2UgTUFZIGJlIGluamVjdGVkIGR1cmluZyBpbnN0YW50aWF0aW9uLgogICAgICoKICAgICAqIElmIHRoZSByZXF1ZXN0IENvbnRlbnQtVHlwZSBpcyBlaXRoZXIgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkCiAgICAgKiBvciBtdWx0aXBhcnQvZm9ybS1kYXRhLCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGlzIFBPU1QsIHVzZSB0aGlzIG1ldGhvZAogICAgICogT05MWSB0byBpbmplY3QgdGhlIGNvbnRlbnRzIG9mICRfUE9TVC4KICAgICAqCiAgICAgKiBUaGUgZGF0YSBJUyBOT1QgUkVRVUlSRUQgdG8gY29tZSBmcm9tICRfUE9TVCwgYnV0IE1VU1QgYmUgdGhlIHJlc3VsdHMgb2YKICAgICAqIGRlc2VyaWFsaXppbmcgdGhlIHJlcXVlc3QgYm9keSBjb250ZW50LiBEZXNlcmlhbGl6YXRpb24vcGFyc2luZyByZXR1cm5zCiAgICAgKiBzdHJ1Y3R1cmVkIGRhdGEsIGFuZCwgYXMgc3VjaCwgdGhpcyBtZXRob2QgT05MWSBhY2NlcHRzIGFycmF5cyBvciBvYmplY3RzLAogICAgICogb3IgYSBudWxsIHZhbHVlIGlmIG5vdGhpbmcgd2FzIGF2YWlsYWJsZSB0byBwYXJzZS4KICAgICAqCiAgICAgKiBBcyBhbiBleGFtcGxlLCBpZiBjb250ZW50IG5lZ290aWF0aW9uIGRldGVybWluZXMgdGhhdCB0aGUgcmVxdWVzdCBkYXRhCiAgICAgKiBpcyBhIEpTT04gcGF5bG9hZCwgdGhpcyBtZXRob2QgY291bGQgYmUgdXNlZCB0byBjcmVhdGUgYSByZXF1ZXN0CiAgICAgKiBpbnN0YW5jZSB3aXRoIHRoZSBkZXNlcmlhbGl6ZWQgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGJvZHkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheXxvYmplY3QgJGRhdGEgVGhlIGRlc2VyaWFsaXplZCBib2R5IGRhdGEuIFRoaXMgd2lsbAogICAgICogICAgIHR5cGljYWxseSBiZSBpbiBhbiBhcnJheSBvciBvYmplY3QuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGFuIHVuc3VwcG9ydGVkIGFyZ3VtZW50IHR5cGUgaXMKICAgICAqICAgICBwcm92aWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXJzZWRCb2R5KCRkYXRhKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGF0dHJpYnV0ZXMgZGVyaXZlZCBmcm9tIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIFRoZSByZXF1ZXN0ICJhdHRyaWJ1dGVzIiBtYXkgYmUgdXNlZCB0byBhbGxvdyBpbmplY3Rpb24gb2YgYW55CiAgICAgKiBwYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdDogZS5nLiwgdGhlIHJlc3VsdHMgb2YgcGF0aAogICAgICogbWF0Y2ggb3BlcmF0aW9uczsgdGhlIHJlc3VsdHMgb2YgZGVjcnlwdGluZyBjb29raWVzOyB0aGUgcmVzdWx0cyBvZgogICAgICogZGVzZXJpYWxpemluZyBub24tZm9ybS1lbmNvZGVkIG1lc3NhZ2UgYm9kaWVzOyBldGMuIEF0dHJpYnV0ZXMKICAgICAqIHdpbGwgYmUgYXBwbGljYXRpb24gYW5kIHJlcXVlc3Qgc3BlY2lmaWMsIGFuZCBDQU4gYmUgbXV0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEF0dHJpYnV0ZXMgZGVyaXZlZCBmcm9tIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpOwoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgZGVyaXZlZCByZXF1ZXN0IGF0dHJpYnV0ZSBhcyBkZXNjcmliZWQgaW4KICAgICAqIGdldEF0dHJpYnV0ZXMoKS4gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBzZXQsIHJldHVybnMKICAgICAqIHRoZSBkZWZhdWx0IHZhbHVlIGFzIHByb3ZpZGVkLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIG9idmlhdGVzIHRoZSBuZWVkIGZvciBhIGhhc0F0dHJpYnV0ZSgpIG1ldGhvZCwgYXMgaXQgYWxsb3dzCiAgICAgKiBzcGVjaWZ5aW5nIGEgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0IERlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QgZXhpc3QuCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoc3RyaW5nICRuYW1lLCAkZGVmYXVsdCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyBzZXR0aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQXR0cmlidXRlKHN0cmluZyAkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB0aGF0IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyByZW1vdmluZyBhIHNpbmdsZSBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlIGFzCiAgICAgKiBkZXNjcmliZWQgaW4gZ2V0QXR0cmlidXRlcygpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IHJlbW92ZXMKICAgICAqIHRoZSBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRBdHRyaWJ1dGUoc3RyaW5nICRuYW1lKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/StreamInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogRGVzY3JpYmVzIGEgZGF0YSBzdHJlYW0uCiAqCiAqIFR5cGljYWxseSwgYW4gaW5zdGFuY2Ugd2lsbCB3cmFwIGEgUEhQIHN0cmVhbTsgdGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMKICogYSB3cmFwcGVyIGFyb3VuZCB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucywgaW5jbHVkaW5nIHNlcmlhbGl6YXRpb24gb2YKICogdGhlIGVudGlyZSBzdHJlYW0gdG8gYSBzdHJpbmcuCiAqLwppbnRlcmZhY2UgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmVhZHMgYWxsIGRhdGEgZnJvbSB0aGUgc3RyZWFtIGludG8gYSBzdHJpbmcsIGZyb20gdGhlIGJlZ2lubmluZyB0byBlbmQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBhdHRlbXB0IHRvIHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIGJlZm9yZQogICAgICogcmVhZGluZyBkYXRhIGFuZCByZWFkIHRoZSBzdHJlYW0gdW50aWwgdGhlIGVuZCBpcyByZWFjaGVkLgogICAgICoKICAgICAqIFdhcm5pbmc6IFRoaXMgY291bGQgYXR0ZW1wdCB0byBsb2FkIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEgaW50byBtZW1vcnkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBOT1QgcmFpc2UgYW4gZXhjZXB0aW9uIGluIG9yZGVyIHRvIGNvbmZvcm0gd2l0aCBQSFAncwogICAgICogc3RyaW5nIGNhc3Rpbmcgb3BlcmF0aW9ucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5vb3A1Lm1hZ2ljLnBocCNvYmplY3QudG9zdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7CgogICAgLyoqCiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbSBhbmQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTsKCiAgICAvKioKICAgICAqIFNlcGFyYXRlcyBhbnkgdW5kZXJseWluZyByZXNvdXJjZXMgZnJvbSB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEFmdGVyIHRoZSBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBzdHJlYW0gaXMgaW4gYW4gdW51c2FibGUgc3RhdGUuCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZXxudWxsIFVuZGVybHlpbmcgUEhQIHN0cmVhbSwgaWYgYW55CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGlmIGtub3duLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgUmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBpZiBrbm93biwgb3IgbnVsbCBpZiB1bmtub3duLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgZmlsZSByZWFkL3dyaXRlIHBvaW50ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBQb3NpdGlvbiBvZiB0aGUgZmlsZSBwb2ludGVyCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJlYW0gaXMgc2Vla2FibGUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCk7CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIGEgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZzZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IFN0cmVhbSBvZmZzZXQKICAgICAqIEBwYXJhbSBpbnQgJHdoZW5jZSBTcGVjaWZpZXMgaG93IHRoZSBjdXJzb3IgcG9zaXRpb24gd2lsbCBiZSBjYWxjdWxhdGVkCiAgICAgKiAgICAgYmFzZWQgb24gdGhlIHNlZWsgb2Zmc2V0LiBWYWxpZCB2YWx1ZXMgYXJlIGlkZW50aWNhbCB0byB0aGUgYnVpbHQtaW4KICAgICAqICAgICBQSFAgJHdoZW5jZSB2YWx1ZXMgZm9yIGBmc2VlaygpYC4gIFNFRUtfU0VUOiBTZXQgcG9zaXRpb24gZXF1YWwgdG8KICAgICAqICAgICBvZmZzZXQgYnl0ZXMgU0VFS19DVVI6IFNldCBwb3NpdGlvbiB0byBjdXJyZW50IGxvY2F0aW9uIHBsdXMgb2Zmc2V0CiAgICAgKiAgICAgU0VFS19FTkQ6IFNldCBwb3NpdGlvbiB0byBlbmQtb2Ytc3RyZWFtIHBsdXMgb2Zmc2V0LgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VlayhpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UgPSBTRUVLX1NFVCk7CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBJZiB0aGUgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSwgdGhpcyBtZXRob2Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb247CiAgICAgKiBvdGhlcndpc2UsIGl0IHdpbGwgcGVyZm9ybSBhIHNlZWsoMCkuCiAgICAgKgogICAgICogQHNlZSBzZWVrKCkKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZnNlZWsucGhwCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyB3cml0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKTsKCiAgICAvKioKICAgICAqIFdyaXRlIGRhdGEgdG8gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyB0aGF0IGlzIHRvIGJlIHdyaXR0ZW4uCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoc3RyaW5nICRzdHJpbmcpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHJlYWRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpOwoKICAgIC8qKgogICAgICogUmVhZCBkYXRhIGZyb20gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggUmVhZCB1cCB0byAkbGVuZ3RoIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuCiAgICAgKiAgICAgdGhlbS4gRmV3ZXIgdGhhbiAkbGVuZ3RoIGJ5dGVzIG1heSBiZSByZXR1cm5lZCBpZiB1bmRlcmx5aW5nIHN0cmVhbQogICAgICogICAgIGNhbGwgcmV0dXJucyBmZXdlciBieXRlcy4KICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRhdGEgcmVhZCBmcm9tIHRoZSBzdHJlYW0sIG9yIGFuIGVtcHR5IHN0cmluZwogICAgICogICAgIGlmIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoaW50ICRsZW5ndGgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGNvbnRlbnRzIGluIGEgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgb3IgYW4gZXJyb3Igb2NjdXJzIHdoaWxlCiAgICAgKiAgICAgcmVhZGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk7CgogICAgLyoqCiAgICAgKiBHZXQgc3RyZWFtIG1ldGFkYXRhIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9yIHJldHJpZXZlIGEgc3BlY2lmaWMga2V5LgogICAgICoKICAgICAqIFRoZSBrZXlzIHJldHVybmVkIGFyZSBpZGVudGljYWwgdG8gdGhlIGtleXMgcmV0dXJuZWQgZnJvbSBQSFAncwogICAgICogc3RyZWFtX2dldF9tZXRhX2RhdGEoKSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZWFtLWdldC1tZXRhLWRhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleSBTcGVjaWZpYyBtZXRhZGF0YSB0byByZXRyaWV2ZS4KICAgICAqIEByZXR1cm4gYXJyYXl8bWl4ZWR8bnVsbCBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGlmIG5vIGtleSBpcwogICAgICogICAgIHByb3ZpZGVkLiBSZXR1cm5zIGEgc3BlY2lmaWMga2V5IHZhbHVlIGlmIGEga2V5IGlzIHByb3ZpZGVkIGFuZCB0aGUKICAgICAqICAgICB2YWx1ZSBpcyBmb3VuZCwgb3IgbnVsbCBpZiB0aGUga2V5IGlzIG5vdCBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKD9zdHJpbmcgJGtleSA9IG51bGwpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UploadedFileInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgdXBsb2FkZWQgdGhyb3VnaCBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgVXBsb2FkZWRGaWxlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzdHJlYW0gcmVwcmVzZW50aW5nIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgU3RyZWFtSW50ZXJmYWNlIGluc3RhbmNlLCByZXByZXNlbnRpbmcgdGhlCiAgICAgKiB1cGxvYWRlZCBmaWxlLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBhbGxvdyB1dGlsaXppbmcgbmF0aXZlIFBIUAogICAgICogc3RyZWFtIGZ1bmN0aW9uYWxpdHkgdG8gbWFuaXB1bGF0ZSB0aGUgZmlsZSB1cGxvYWQsIHN1Y2ggYXMKICAgICAqIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgpICh0aG91Z2ggdGhlIHJlc3VsdCB3aWxsIG5lZWQgdG8gYmUgZGVjb3JhdGVkIGluIGEKICAgICAqIG5hdGl2ZSBQSFAgc3RyZWFtIHdyYXBwZXIgdG8gd29yayB3aXRoIHN1Y2ggZnVuY3Rpb25zKS4KICAgICAqCiAgICAgKiBJZiB0aGUgbW92ZVRvKCkgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBwcmV2aW91c2x5LCB0aGlzIG1ldGhvZCBNVVNUIHJhaXNlCiAgICAgKiBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UgU3RyZWFtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpbiBjYXNlcyB3aGVuIG5vIHN0cmVhbSBpcyBhdmFpbGFibGUgb3IgY2FuIGJlCiAgICAgKiAgICAgY3JlYXRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbSgpOwoKICAgIC8qKgogICAgICogTW92ZSB0aGUgdXBsb2FkZWQgZmlsZSB0byBhIG5ldyBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBVc2UgdGhpcyBtZXRob2QgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gbW92ZV91cGxvYWRlZF9maWxlKCkuIFRoaXMgbWV0aG9kIGlzCiAgICAgKiBndWFyYW50ZWVkIHRvIHdvcmsgaW4gYm90aCBTQVBJIGFuZCBub24tU0FQSSBlbnZpcm9ubWVudHMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBkZXRlcm1pbmUgd2hpY2ggZW52aXJvbm1lbnQgdGhleSBhcmUgaW4sIGFuZCB1c2UgdGhlCiAgICAgKiBhcHByb3ByaWF0ZSBtZXRob2QgKG1vdmVfdXBsb2FkZWRfZmlsZSgpLCByZW5hbWUoKSwgb3IgYSBzdHJlYW0KICAgICAqIG9wZXJhdGlvbikgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgogICAgICoKICAgICAqICR0YXJnZXRQYXRoIG1heSBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBvciBhIHJlbGF0aXZlIHBhdGguIElmIGl0IGlzIGEKICAgICAqIHJlbGF0aXZlIHBhdGgsIHJlc29sdXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgUEhQJ3MgcmVuYW1lKCkKICAgICAqIGZ1bmN0aW9uLgogICAgICoKICAgICAqIFRoZSBvcmlnaW5hbCBmaWxlIG9yIHN0cmVhbSBNVVNUIGJlIHJlbW92ZWQgb24gY29tcGxldGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UsIGFueSBzdWJzZXF1ZW50IGNhbGxzIE1VU1QgcmFpc2UKICAgICAqIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBXaGVuIHVzZWQgaW4gYW4gU0FQSSBlbnZpcm9ubWVudCB3aGVyZSAkX0ZJTEVTIGlzIHBvcHVsYXRlZCwgd2hlbiB3cml0aW5nCiAgICAgKiBmaWxlcyB2aWEgbW92ZVRvKCksIGlzX3VwbG9hZGVkX2ZpbGUoKSBhbmQgbW92ZV91cGxvYWRlZF9maWxlKCkgU0hPVUxEIGJlCiAgICAgKiB1c2VkIHRvIGVuc3VyZSBwZXJtaXNzaW9ucyBhbmQgdXBsb2FkIHN0YXR1cyBhcmUgdmVyaWZpZWQgY29ycmVjdGx5LgogICAgICoKICAgICAqIElmIHlvdSB3aXNoIHRvIG1vdmUgdG8gYSBzdHJlYW0sIHVzZSBnZXRTdHJlYW0oKSwgYXMgU0FQSSBvcGVyYXRpb25zCiAgICAgKiBjYW5ub3QgZ3VhcmFudGVlIHdyaXRpbmcgdG8gc3RyZWFtIGRlc3RpbmF0aW9ucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L2lzX3VwbG9hZGVkX2ZpbGUKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbW92ZV91cGxvYWRlZF9maWxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXRQYXRoIFBhdGggdG8gd2hpY2ggdG8gbW92ZSB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgJHRhcmdldFBhdGggc3BlY2lmaWVkIGlzIGludmFsaWQuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGFueSBlcnJvciBkdXJpbmcgdGhlIG1vdmUgb3BlcmF0aW9uLCBvciBvbgogICAgICogICAgIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBjYWxsIHRvIHRoZSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG8oc3RyaW5nICR0YXJnZXRQYXRoKTsKICAgIAogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZmlsZSBzaXplLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJzaXplIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5IGlmIGF2YWlsYWJsZSwgYXMgUEhQIGNhbGN1bGF0ZXMgdGhpcyBiYXNlZAogICAgICogb24gdGhlIGFjdHVhbCBzaXplIHRyYW5zbWl0dGVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIGZpbGUgc2l6ZSBpbiBieXRlcyBvciBudWxsIGlmIHVua25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIE1VU1QgYmUgb25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlsZSB3YXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogVVBMT0FEX0VSUl9PSy4KICAgICAqCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgU0hPVUxEIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSAiZXJyb3IiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZmVhdHVyZXMuZmlsZS11cGxvYWQuZXJyb3JzLnBocAogICAgICogQHJldHVybiBpbnQgT25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBmaWxlbmFtZSB3aXRoIHRoZSBpbnRlbnRpb24gdG8gY29ycnVwdCBvciBoYWNrIHlvdXIKICAgICAqIGFwcGxpY2F0aW9uLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJuYW1lIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudCBvciBudWxsIGlmIG5vbmUKICAgICAqICAgICB3YXMgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOwogICAgCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBtZWRpYSB0eXBlIHdpdGggdGhlIGludGVudGlvbiB0byBjb3JydXB0IG9yIGhhY2sgeW91cgogICAgICogYXBwbGljYXRpb24uCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIFNIT1VMRCByZXR1cm4gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgInR5cGUiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbWVkaWEgdHlwZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UriInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIFVSSS4KICoKICogVGhpcyBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gcmVwcmVzZW50IFVSSXMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2IGFuZCB0bwogKiBwcm92aWRlIG1ldGhvZHMgZm9yIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMuIEFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBmb3IKICogd29ya2luZyB3aXRoIFVSSXMgY2FuIGJlIHByb3ZpZGVkIG9uIHRvcCBvZiB0aGUgaW50ZXJmYWNlIG9yIGV4dGVybmFsbHkuCiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgSFRUUCByZXF1ZXN0cywgYnV0IG1heSBhbHNvIGJlIHVzZWQgaW4gb3RoZXIKICogY29udGV4dHMuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqCiAqIFR5cGljYWxseSB0aGUgSG9zdCBoZWFkZXIgd2lsbCBiZSBhbHNvIGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KICogRm9yIHNlcnZlci1zaWRlIHJlcXVlc3RzLCB0aGUgc2NoZW1lIHdpbGwgdHlwaWNhbGx5IGJlIGRpc2NvdmVyYWJsZSBpbiB0aGUKICogc2VydmVyIHBhcmFtZXRlcnMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgKHRoZSBVUkkgc3BlY2lmaWNhdGlvbikKICovCmludGVyZmFjZSBVcmlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgc2NoZW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGF1dGhvcml0eSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eQogICAgICogc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBhdXRob3JpdHkgc3ludGF4IG9mIHRoZSBVUkkgaXM6CiAgICAgKgogICAgICogPHByZT4KICAgICAqIFt1c2VyLWluZm9AXWhvc3RbOnBvcnRdCiAgICAgKiA8L3ByZT4KICAgICAqCiAgICAgKiBJZiB0aGUgcG9ydCBjb21wb25lbnQgaXMgbm90IHNldCBvciBpcyB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhlIGN1cnJlbnQKICAgICAqIHNjaGVtZSwgaXQgU0hPVUxEIE5PVCBiZSBpbmNsdWRlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIGF1dGhvcml0eSwgaW4gIlt1c2VyLWluZm9AXWhvc3RbOnBvcnRdIiBmb3JtYXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpdHkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHVzZXIgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkKICAgICAqIHN0cmluZy4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSB1c2VyIGluZm9ybWF0aW9uLCBpbiAidXNlcm5hbWVbOnBhc3N3b3JkXSIgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGhvc3QgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlLCBwZXIgUkZDIDM5ODYKICAgICAqIFNlY3Rpb24gMy4yLjIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgaG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIGEgcG9ydCBpcyBwcmVzZW50LCBhbmQgaXQgaXMgbm9uLXN0YW5kYXJkIGZvciB0aGUgY3VycmVudCBzY2hlbWUsCiAgICAgKiB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBpdCBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgcG9ydCBpcyB0aGUgc3RhbmRhcmQgcG9ydAogICAgICogdXNlZCB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSwgdGhpcyBtZXRob2QgU0hPVUxEIHJldHVybiBudWxsLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYW5kIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYnV0IGEgc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1BWSByZXR1cm4KICAgICAqIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGF0IHNjaGVtZSwgYnV0IFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8aW50IFRoZSBVUkkgcG9ydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIE5vcm1hbGx5LCB0aGUgZW1wdHkgcGF0aCAiIiBhbmQgYWJzb2x1dGUgcGF0aCAiLyIgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYXMKICAgICAqIGRlZmluZWQgaW4gUkZDIDcyMzAgU2VjdGlvbiAyLjcuMy4gQnV0IHRoaXMgbWV0aG9kIE1VU1QgTk9UIGF1dG9tYXRpY2FsbHkKICAgICAqIGRvIHRoaXMgbm9ybWFsaXphdGlvbiBiZWNhdXNlIGluIGNvbnRleHRzIHdpdGggYSB0cmltbWVkIGJhc2UgcGF0aCwgZS5nLgogICAgICogdGhlIGZyb250IGNvbnRyb2xsZXIsIHRoaXMgZGlmZmVyZW5jZSBiZWNvbWVzIHNpZ25pZmljYW50LiBJdCdzIHRoZSB0YXNrCiAgICAgKiBvZiB0aGUgdXNlciB0byBoYW5kbGUgYm90aCAiIiBhbmQgIi8iLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4zLgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBzaG91bGQgaW5jbHVkZSBhIHNsYXNoICgiLyIpIG5vdCBpbnRlbmRlZCBhcwogICAgICogZGVsaW1pdGVyIGJldHdlZW4gcGF0aCBzZWdtZW50cywgdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkCiAgICAgKiBmb3JtIChlLmcuLCAiJTJGIikgdG8gdGhlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcXVlcnkgc3RyaW5nIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgcXVlcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UXVlcnkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBmcmFnbWVudCBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIGxlYWRpbmcgIiMiIGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgZnJhZ21lbnQgYW5kIE1VU1QgTk9UIGJlCiAgICAgKiBhZGRlZC4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuNS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuNQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNjaGVtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCB0aGUgc2NoZW1lcyAiaHR0cCIgYW5kICJodHRwcyIgY2FzZQogICAgICogaW5zZW5zaXRpdmVseSwgYW5kIE1BWSBhY2NvbW1vZGF0ZSBvdGhlciBzY2hlbWVzIGlmIHJlcXVpcmVkLgogICAgICoKICAgICAqIEFuIGVtcHR5IHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lIFRoZSBzY2hlbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgc2NoZW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoc3RyaW5nICRzY2hlbWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1c2VyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogUGFzc3dvcmQgaXMgb3B0aW9uYWwsIGJ1dCB0aGUgdXNlciBpbmZvcm1hdGlvbiBNVVNUIGluY2x1ZGUgdGhlCiAgICAgKiB1c2VyOyBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSB1c2VyIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdXNlcgogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlciBUaGUgdXNlciBuYW1lIHRvIHVzZSBmb3IgYXV0aG9yaXR5LgogICAgICogQHBhcmFtIG51bGx8c3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoICR1c2VyLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXNlckluZm8oc3RyaW5nICR1c2VyLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogQW4gZW1wdHkgaG9zdCB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBob3N0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgVGhlIGhvc3RuYW1lIHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgaG9zdC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBob3N0bmFtZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoSG9zdChzdHJpbmcgJGhvc3QpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHBvcnQuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1QgcmFpc2UgYW4gZXhjZXB0aW9uIGZvciBwb3J0cyBvdXRzaWRlIHRoZQogICAgICogZXN0YWJsaXNoZWQgVENQIGFuZCBVRFAgcG9ydCByYW5nZXMuCiAgICAgKgogICAgICogQSBudWxsIHZhbHVlIHByb3ZpZGVkIGZvciB0aGUgcG9ydCBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBwb3J0CiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxpbnQgJHBvcnQgVGhlIHBvcnQgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZTsgYSBudWxsIHZhbHVlCiAgICAgKiAgICAgcmVtb3ZlcyB0aGUgcG9ydCBpbmZvcm1hdGlvbi4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIHBvcnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBvcnQoP2ludCAkcG9ydCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGUgcGF0aCBjYW4gZWl0aGVyIGJlIGVtcHR5IG9yIGFic29sdXRlIChzdGFydGluZyB3aXRoIGEgc2xhc2gpIG9yCiAgICAgKiByb290bGVzcyAobm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkuIEltcGxlbWVudGF0aW9ucyBNVVNUIHN1cHBvcnQgYWxsCiAgICAgKiB0aHJlZSBzeW50YXhlcy4KICAgICAqCiAgICAgKiBJZiB0aGUgcGF0aCBpcyBpbnRlbmRlZCB0byBiZSBkb21haW4tcmVsYXRpdmUgcmF0aGVyIHRoYW4gcGF0aCByZWxhdGl2ZSB0aGVuCiAgICAgKiBpdCBtdXN0IGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKS4gUGF0aHMgbm90IHN0YXJ0aW5nIHdpdGggYSBzbGFzaCAoIi8iKQogICAgICogYXJlIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gc29tZSBiYXNlIHBhdGgga25vd24gdG8gdGhlIGFwcGxpY2F0aW9uIG9yCiAgICAgKiBjb25zdW1lci4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgcGF0aCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRQYXRoKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgcGF0aHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGF0aChzdHJpbmcgJHBhdGgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBxdWVyeSBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRRdWVyeSgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IHF1ZXJ5IHN0cmluZyB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBxdWVyeSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBxdWVyeSBzdHJpbmdzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5KHN0cmluZyAkcXVlcnkpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBmcmFnbWVudCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRGcmFnbWVudCgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IGZyYWdtZW50IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGZyYWdtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyYWdtZW50IFRoZSBmcmFnbWVudCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZyYWdtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KHN0cmluZyAkZnJhZ21lbnQpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSBVUkkgcmVmZXJlbmNlLgogICAgICoKICAgICAqIERlcGVuZGluZyBvbiB3aGljaCBjb21wb25lbnRzIG9mIHRoZSBVUkkgYXJlIHByZXNlbnQsIHRoZSByZXN1bHRpbmcKICAgICAqIHN0cmluZyBpcyBlaXRoZXIgYSBmdWxsIFVSSSBvciByZWxhdGl2ZSByZWZlcmVuY2UgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LAogICAgICogU2VjdGlvbiA0LjEuIFRoZSBtZXRob2QgY29uY2F0ZW5hdGVzIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIFVSSSwKICAgICAqIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXJzOgogICAgICoKICAgICAqIC0gSWYgYSBzY2hlbWUgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBzdWZmaXhlZCBieSAiOiIuCiAgICAgKiAtIElmIGFuIGF1dGhvcml0eSBpcyBwcmVzZW50LCBpdCBNVVNUIGJlIHByZWZpeGVkIGJ5ICIvLyIuCiAgICAgKiAtIFRoZSBwYXRoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aG91dCBkZWxpbWl0ZXJzLiBCdXQgdGhlcmUgYXJlIHR3bwogICAgICogICBjYXNlcyB3aGVyZSB0aGUgcGF0aCBoYXMgdG8gYmUgYWRqdXN0ZWQgdG8gbWFrZSB0aGUgVVJJIHJlZmVyZW5jZQogICAgICogICB2YWxpZCBhcyBQSFAgZG9lcyBub3QgYWxsb3cgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluIF9fdG9TdHJpbmcoKToKICAgICAqICAgICAtIElmIHRoZSBwYXRoIGlzIHJvb3RsZXNzIGFuZCBhbiBhdXRob3JpdHkgaXMgcHJlc2VudCwgdGhlIHBhdGggTVVTVAogICAgICogICAgICAgYmUgcHJlZml4ZWQgYnkgIi8iLgogICAgICogICAgIC0gSWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBtb3JlIHRoYW4gb25lICIvIiBhbmQgbm8gYXV0aG9yaXR5IGlzCiAgICAgKiAgICAgICBwcmVzZW50LCB0aGUgc3RhcnRpbmcgc2xhc2hlcyBNVVNUIGJlIHJlZHVjZWQgdG8gb25lLgogICAgICogLSBJZiBhIHF1ZXJ5IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIj8iLgogICAgICogLSBJZiBhIGZyYWdtZW50IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIiMiLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2xvZyIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgbG9nZ2luZyBsaWJyYXJpZXMiLAogICAgImtleXdvcmRzIjogWyJwc3IiLCAicHNyLTMiLCAibG9nIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvbG9nIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49NS4zLjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlBzclxcTG9nXFwiOiAiUHNyL0xvZy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjEueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyIFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/AbstractLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgaXMgYSBzaW1wbGUgTG9nZ2VyIGltcGxlbWVudGF0aW9uIHRoYXQgb3RoZXIgTG9nZ2VycyBjYW4gaW5oZXJpdCBmcm9tLgogKgogKiBJdCBzaW1wbHkgZGVsZWdhdGVzIGFsbCBsb2ctbGV2ZWwtc3BlY2lmaWMgbWV0aG9kcyB0byB0aGUgYGxvZ2AgbWV0aG9kIHRvCiAqIHJlZHVjZSBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgYSBzaW1wbGUgTG9nZ2VyIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZyB3aXRoCiAqIG1lc3NhZ2VzIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIGxldmVsIGhhcyB0byBpbXBsZW1lbnQuCiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFN5c3RlbSBpcyB1bnVzYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVtZXJnZW5jeSgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkVNRVJHRU5DWSwgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIEV4YW1wbGU6IEVudGlyZSB3ZWJzaXRlIGRvd24sIGRhdGFiYXNlIHVuYXZhaWxhYmxlLCBldGMuIFRoaXMgc2hvdWxkCiAgICAgKiB0cmlnZ2VyIHRoZSBTTVMgYWxlcnRzIGFuZCB3YWtlIHlvdSB1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsZXJ0KCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6QUxFUlQsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcml0aWNhbCBjb25kaXRpb25zLgogICAgICoKICAgICAqIEV4YW1wbGU6IEFwcGxpY2F0aW9uIGNvbXBvbmVudCB1bmF2YWlsYWJsZSwgdW5leHBlY3RlZCBleGNlcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcml0aWNhbCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkNSSVRJQ0FMLCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUnVudGltZSBlcnJvcnMgdGhhdCBkbyBub3QgcmVxdWlyZSBpbW1lZGlhdGUgYWN0aW9uIGJ1dCBzaG91bGQgdHlwaWNhbGx5CiAgICAgKiBiZSBsb2dnZWQgYW5kIG1vbml0b3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6RVJST1IsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb25hbCBvY2N1cnJlbmNlcyB0aGF0IGFyZSBub3QgZXJyb3JzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZSBvZiBkZXByZWNhdGVkIEFQSXMsIHBvb3IgdXNlIG9mIGFuIEFQSSwgdW5kZXNpcmFibGUgdGhpbmdzCiAgICAgKiB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgd3JvbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YXJuaW5nKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6V0FSTklORywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIE5vcm1hbCBidXQgc2lnbmlmaWNhbnQgZXZlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWNlKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6Tk9USUNFLCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogSW50ZXJlc3RpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZXIgbG9ncyBpbiwgU1FMIGxvZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6SU5GTywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFpbGVkIGRlYnVnIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nKExvZ0xldmVsOjpERUJVRywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerAwareInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBhIGxvZ2dlci1hd2FyZSBpbnN0YW5jZS4KICovCmludGVyZmFjZSBMb2dnZXJBd2FyZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFNldHMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gdGhlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerAwareTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIEJhc2ljIEltcGxlbWVudGF0aW9uIG9mIExvZ2dlckF3YXJlSW50ZXJmYWNlLgogKi8KdHJhaXQgTG9nZ2VyQXdhcmVUcmFpdAp7CiAgICAvKioKICAgICAqIFRoZSBsb2dnZXIgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHZhciBMb2dnZXJJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGxvZ2dlcjsKCiAgICAvKioKICAgICAqIFNldHMgYSBsb2dnZXIuCiAgICAgKgogICAgICogQHBhcmFtIExvZ2dlckludGVyZmFjZSAkbG9nZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2dnZXIoTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBhIGxvZ2dlciBpbnN0YW5jZS4KICoKICogVGhlIG1lc3NhZ2UgTVVTVCBiZSBhIHN0cmluZyBvciBvYmplY3QgaW1wbGVtZW50aW5nIF9fdG9TdHJpbmcoKS4KICoKICogVGhlIG1lc3NhZ2UgTUFZIGNvbnRhaW4gcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtOiB7Zm9vfSB3aGVyZSBmb28KICogd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgY29udGV4dCBkYXRhIGluIGtleSAiZm9vIi4KICoKICogVGhlIGNvbnRleHQgYXJyYXkgY2FuIGNvbnRhaW4gYXJiaXRyYXJ5IGRhdGEuIFRoZSBvbmx5IGFzc3VtcHRpb24gdGhhdAogKiBjYW4gYmUgbWFkZSBieSBpbXBsZW1lbnRvcnMgaXMgdGhhdCBpZiBhbiBFeGNlcHRpb24gaW5zdGFuY2UgaXMgZ2l2ZW4KICogdG8gcHJvZHVjZSBhIHN0YWNrIHRyYWNlLCBpdCBNVVNUIGJlIGluIGEga2V5IG5hbWVkICJleGNlcHRpb24iLgogKgogKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItMy1sb2dnZXItaW50ZXJmYWNlLm1kCiAqIGZvciB0aGUgZnVsbCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KICovCmludGVyZmFjZSBMb2dnZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBTeXN0ZW0gaXMgdW51c2FibGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbWVyZ2VuY3koJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSk7CgogICAgLyoqCiAgICAgKiBBY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBFbnRpcmUgd2Vic2l0ZSBkb3duLCBkYXRhYmFzZSB1bmF2YWlsYWJsZSwgZXRjLiBUaGlzIHNob3VsZAogICAgICogdHJpZ2dlciB0aGUgU01TIGFsZXJ0cyBhbmQgd2FrZSB5b3UgdXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGVydCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIENyaXRpY2FsIGNvbmRpdGlvbnMuCiAgICAgKgogICAgICogRXhhbXBsZTogQXBwbGljYXRpb24gY29tcG9uZW50IHVuYXZhaWxhYmxlLCB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyaXRpY2FsKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogUnVudGltZSBlcnJvcnMgdGhhdCBkbyBub3QgcmVxdWlyZSBpbW1lZGlhdGUgYWN0aW9uIGJ1dCBzaG91bGQgdHlwaWNhbGx5CiAgICAgKiBiZSBsb2dnZWQgYW5kIG1vbml0b3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogRXhjZXB0aW9uYWwgb2NjdXJyZW5jZXMgdGhhdCBhcmUgbm90IGVycm9ycy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBVc2Ugb2YgZGVwcmVjYXRlZCBBUElzLCBwb29yIHVzZSBvZiBhbiBBUEksIHVuZGVzaXJhYmxlIHRoaW5ncwogICAgICogdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5IHdyb25nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIE5vcm1hbCBidXQgc2lnbmlmaWNhbnQgZXZlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWNlKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogSW50ZXJlc3RpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZXIgbG9ncyBpbiwgU1FMIGxvZ3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwoKICAgIC8qKgogICAgICogRGV0YWlsZWQgZGVidWcgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBtaXhlZFtdICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWJ1ZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKTsKCiAgICAvKioKICAgICAqIExvZ3Mgd2l0aCBhbiBhcmJpdHJhcnkgbGV2ZWwuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICAgJGxldmVsCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkbWVzc2FnZQogICAgICogQHBhcmFtIG1peGVkW10gJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxQc3JcTG9nXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRsZXZlbCwgJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LoggerTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgaXMgYSBzaW1wbGUgTG9nZ2VyIHRyYWl0IHRoYXQgY2xhc3NlcyB1bmFibGUgdG8gZXh0ZW5kIEFic3RyYWN0TG9nZ2VyCiAqIChiZWNhdXNlIHRoZXkgZXh0ZW5kIGFub3RoZXIgY2xhc3MsIGV0YykgY2FuIGluY2x1ZGUuCiAqCiAqIEl0IHNpbXBseSBkZWxlZ2F0ZXMgYWxsIGxvZy1sZXZlbC1zcGVjaWZpYyBtZXRob2RzIHRvIHRoZSBgbG9nYCBtZXRob2QgdG8KICogcmVkdWNlIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCBhIHNpbXBsZSBMb2dnZXIgdGhhdCBkb2VzIHRoZSBzYW1lIHRoaW5nIHdpdGgKICogbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgbGV2ZWwgaGFzIHRvIGltcGxlbWVudC4KICovCnRyYWl0IExvZ2dlclRyYWl0CnsKICAgIC8qKgogICAgICogU3lzdGVtIGlzIHVudXNhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVtZXJnZW5jeSgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkVNRVJHRU5DWSwgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIEV4YW1wbGU6IEVudGlyZSB3ZWJzaXRlIGRvd24sIGRhdGFiYXNlIHVuYXZhaWxhYmxlLCBldGMuIFRoaXMgc2hvdWxkCiAgICAgKiB0cmlnZ2VyIHRoZSBTTVMgYWxlcnRzIGFuZCB3YWtlIHlvdSB1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGVydCgkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OkFMRVJULCAkbWVzc2FnZSwgJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JpdGljYWwgY29uZGl0aW9ucy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBBcHBsaWNhdGlvbiBjb21wb25lbnQgdW5hdmFpbGFibGUsIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyaXRpY2FsKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6Q1JJVElDQUwsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW50aW1lIGVycm9ycyB0aGF0IGRvIG5vdCByZXF1aXJlIGltbWVkaWF0ZSBhY3Rpb24gYnV0IHNob3VsZCB0eXBpY2FsbHkKICAgICAqIGJlIGxvZ2dlZCBhbmQgbW9uaXRvcmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6RVJST1IsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGNlcHRpb25hbCBvY2N1cnJlbmNlcyB0aGF0IGFyZSBub3QgZXJyb3JzLgogICAgICoKICAgICAqIEV4YW1wbGU6IFVzZSBvZiBkZXByZWNhdGVkIEFQSXMsIHBvb3IgdXNlIG9mIGFuIEFQSSwgdW5kZXNpcmFibGUgdGhpbmdzCiAgICAgKiB0aGF0IGFyZSBub3QgbmVjZXNzYXJpbHkgd3JvbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIGFycmF5ICAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5sb2coTG9nTGV2ZWw6OldBUk5JTkcsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBOb3JtYWwgYnV0IHNpZ25pZmljYW50IGV2ZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3RpY2UoJG1lc3NhZ2UsIGFycmF5ICRjb250ZXh0ID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nKExvZ0xldmVsOjpOT1RJQ0UsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnRlcmVzdGluZyBldmVudHMuCiAgICAgKgogICAgICogRXhhbXBsZTogVXNlciBsb2dzIGluLCBTUUwgbG9ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6SU5GTywgJG1lc3NhZ2UsICRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFpbGVkIGRlYnVnIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAgJGNvbnRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZyhMb2dMZXZlbDo6REVCVUcsICRtZXNzYWdlLCAkY29udGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2dzIHdpdGggYW4gYXJiaXRyYXJ5IGxldmVsLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgJGxldmVsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb250ZXh0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBcUHNyXExvZ1xJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGxvZygkbGV2ZWwsICRtZXNzYWdlLCBhcnJheSAkY29udGV4dCA9IGFycmF5KCkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/LogLevel.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIERlc2NyaWJlcyBsb2cgbGV2ZWxzLgogKi8KY2xhc3MgTG9nTGV2ZWwKewogICAgY29uc3QgRU1FUkdFTkNZID0gJ2VtZXJnZW5jeSc7CiAgICBjb25zdCBBTEVSVCAgICAgPSAnYWxlcnQnOwogICAgY29uc3QgQ1JJVElDQUwgID0gJ2NyaXRpY2FsJzsKICAgIGNvbnN0IEVSUk9SICAgICA9ICdlcnJvcic7CiAgICBjb25zdCBXQVJOSU5HICAgPSAnd2FybmluZyc7CiAgICBjb25zdCBOT1RJQ0UgICAgPSAnbm90aWNlJzsKICAgIGNvbnN0IElORk8gICAgICA9ICdpbmZvJzsKICAgIGNvbnN0IERFQlVHICAgICA9ICdkZWJ1Zyc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/NullLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nOwoKLyoqCiAqIFRoaXMgTG9nZ2VyIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGNvbmRpdGlvbmFsIGxvZyBjYWxscy4KICoKICogTG9nZ2luZyBzaG91bGQgYWx3YXlzIGJlIG9wdGlvbmFsLCBhbmQgaWYgbm8gbG9nZ2VyIGlzIHByb3ZpZGVkIHRvIHlvdXIKICogbGlicmFyeSBjcmVhdGluZyBhIE51bGxMb2dnZXIgaW5zdGFuY2UgdG8gaGF2ZSBzb21ldGhpbmcgdG8gdGhyb3cgbG9ncyBhdAogKiBpcyBhIGdvb2Qgd2F5IHRvIGF2b2lkIGxpdHRlcmluZyB5b3VyIGNvZGUgd2l0aCBgaWYgKCR0aGlzLT5sb2dnZXIpIHsgfWAKICogYmxvY2tzLgogKi8KY2xhc3MgTnVsbExvZ2dlciBleHRlbmRzIEFic3RyYWN0TG9nZ2VyCnsKICAgIC8qKgogICAgICogTG9ncyB3aXRoIGFuIGFyYml0cmFyeSBsZXZlbC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgICRsZXZlbAogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIGFycmF5ICAkY29udGV4dAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgXFBzclxMb2dcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2coJGxldmVsLCAkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBhcnJheSgpKQogICAgewogICAgICAgIC8vIG5vb3AKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/DummyTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7CgovKioKICogVGhpcyBjbGFzcyBpcyBpbnRlcm5hbCBhbmQgZG9lcyBub3QgZm9sbG93IHRoZSBCQyBwcm9taXNlLgogKgogKiBEbyBOT1QgdXNlIHRoaXMgY2xhc3MgaW4gYW55IHdheS4KICoKICogQGludGVybmFsCiAqLwpjbGFzcyBEdW1teVRlc3QKewogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAnRHVtbXlUZXN0JzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7Cgp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ0xldmVsOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogUHJvdmlkZXMgYSBiYXNlIHRlc3QgY2xhc3MgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTG9nZ2VySW50ZXJmYWNlLgogKgogKiBJbXBsZW1lbnRvcnMgY2FuIGV4dGVuZCB0aGUgY2xhc3MgYW5kIGltcGxlbWVudCBhYnN0cmFjdCBtZXRob2RzIHRvIHJ1biB0aGlzCiAqIGFzIHBhcnQgb2YgdGhlaXIgdGVzdCBzdWl0ZS4KICovCmFic3RyYWN0IGNsYXNzIExvZ2dlckludGVyZmFjZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEByZXR1cm4gTG9nZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRMb2dnZXIoKTsKCiAgICAvKioKICAgICAqIFRoaXMgbXVzdCByZXR1cm4gdGhlIGxvZyBtZXNzYWdlcyBpbiBvcmRlci4KICAgICAqCiAgICAgKiBUaGUgc2ltcGxlIGZvcm1hdHRpbmcgb2YgdGhlIG1lc3NhZ2VzIGlzOiAiPExPRyBMRVZFTD4gPE1FU1NBR0U+Ii4KICAgICAqCiAgICAgKiBFeGFtcGxlIC0+ZXJyb3IoJ0ZvbycpIHdvdWxkIHlpZWxkICJlcnJvciBGb28iLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldExvZ3MoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEltcGxlbWVudHMoKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdQc3JcTG9nXExvZ2dlckludGVyZmFjZScsICR0aGlzLT5nZXRMb2dnZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVMZXZlbHNBbmRNZXNzYWdlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdExvZ3NBdEFsbExldmVscygkbGV2ZWwsICRtZXNzYWdlKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+eyRsZXZlbH0oJG1lc3NhZ2UsIGFycmF5KCd1c2VyJyA9PiAnQm9iJykpOwogICAgICAgICRsb2dnZXItPmxvZygkbGV2ZWwsICRtZXNzYWdlLCBhcnJheSgndXNlcicgPT4gJ0JvYicpKTsKCiAgICAgICAgJGV4cGVjdGVkID0gYXJyYXkoCiAgICAgICAgICAgICRsZXZlbC4nIG1lc3NhZ2Ugb2YgbGV2ZWwgJy4kbGV2ZWwuJyB3aXRoIGNvbnRleHQ6IEJvYicsCiAgICAgICAgICAgICRsZXZlbC4nIG1lc3NhZ2Ugb2YgbGV2ZWwgJy4kbGV2ZWwuJyB3aXRoIGNvbnRleHQ6IEJvYicsCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZCwgJHRoaXMtPmdldExvZ3MoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHByb3ZpZGVMZXZlbHNBbmRNZXNzYWdlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBMb2dMZXZlbDo6RU1FUkdFTkNZID0+IGFycmF5KExvZ0xldmVsOjpFTUVSR0VOQ1ksICdtZXNzYWdlIG9mIGxldmVsIGVtZXJnZW5jeSB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6QUxFUlQgPT4gYXJyYXkoTG9nTGV2ZWw6OkFMRVJULCAnbWVzc2FnZSBvZiBsZXZlbCBhbGVydCB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6Q1JJVElDQUwgPT4gYXJyYXkoTG9nTGV2ZWw6OkNSSVRJQ0FMLCAnbWVzc2FnZSBvZiBsZXZlbCBjcml0aWNhbCB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6RVJST1IgPT4gYXJyYXkoTG9nTGV2ZWw6OkVSUk9SLCAnbWVzc2FnZSBvZiBsZXZlbCBlcnJvciB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6V0FSTklORyA9PiBhcnJheShMb2dMZXZlbDo6V0FSTklORywgJ21lc3NhZ2Ugb2YgbGV2ZWwgd2FybmluZyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6Tk9USUNFID0+IGFycmF5KExvZ0xldmVsOjpOT1RJQ0UsICdtZXNzYWdlIG9mIGxldmVsIG5vdGljZSB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6SU5GTyA9PiBhcnJheShMb2dMZXZlbDo6SU5GTywgJ21lc3NhZ2Ugb2YgbGV2ZWwgaW5mbyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICAgICBMb2dMZXZlbDo6REVCVUcgPT4gYXJyYXkoTG9nTGV2ZWw6OkRFQlVHLCAnbWVzc2FnZSBvZiBsZXZlbCBkZWJ1ZyB3aXRoIGNvbnRleHQ6IHt1c2VyfScpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXFBzclxMb2dcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VGhyb3dzT25JbnZhbGlkTGV2ZWwoKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+bG9nKCdpbnZhbGlkIGxldmVsJywgJ0ZvbycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGV4dFJlcGxhY2VtZW50KCkKICAgIHsKICAgICAgICAkbG9nZ2VyID0gJHRoaXMtPmdldExvZ2dlcigpOwogICAgICAgICRsb2dnZXItPmluZm8oJ3tNZXNzYWdlIHtub3RoaW5nfSB7dXNlcn0ge2Zvby5iYXJ9IGF9JywgYXJyYXkoJ3VzZXInID0+ICdCb2InLCAnZm9vLmJhcicgPT4gJ0JhcicpKTsKCiAgICAgICAgJGV4cGVjdGVkID0gYXJyYXkoJ2luZm8ge01lc3NhZ2Uge25vdGhpbmd9IEJvYiBCYXIgYX0nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZCwgJHRoaXMtPmdldExvZ3MoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RPYmplY3RDYXN0VG9TdHJpbmcoKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAnY3JlYXRlUGFydGlhbE1vY2snKSkgewogICAgICAgICAgICAkZHVtbXkgPSAkdGhpcy0+Y3JlYXRlUGFydGlhbE1vY2soJ1BzclxMb2dcVGVzdFxEdW1teVRlc3QnLCBhcnJheSgnX190b1N0cmluZycpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZHVtbXkgPSAkdGhpcy0+Z2V0TW9jaygnUHNyXExvZ1xUZXN0XER1bW15VGVzdCcsIGFycmF5KCdfX3RvU3RyaW5nJykpOwogICAgICAgIH0KICAgICAgICAkZHVtbXktPmV4cGVjdHMoJHRoaXMtPm9uY2UoKSkKICAgICAgICAgICAgLT5tZXRob2QoJ19fdG9TdHJpbmcnKQogICAgICAgICAgICAtPndpbGwoJHRoaXMtPnJldHVyblZhbHVlKCdEVU1NWScpKTsKCiAgICAgICAgJHRoaXMtPmdldExvZ2dlcigpLT53YXJuaW5nKCRkdW1teSk7CgogICAgICAgICRleHBlY3RlZCA9IGFycmF5KCd3YXJuaW5nIERVTU1ZJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWQsICR0aGlzLT5nZXRMb2dzKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGV4dENhbkNvbnRhaW5Bbnl0aGluZygpCiAgICB7CiAgICAgICAgJGNsb3NlZCA9IGZvcGVuKCdwaHA6Ly9tZW1vcnknLCAncicpOwogICAgICAgIGZjbG9zZSgkY2xvc2VkKTsKCiAgICAgICAgJGNvbnRleHQgPSBhcnJheSgKICAgICAgICAgICAgJ2Jvb2wnID0+IHRydWUsCiAgICAgICAgICAgICdudWxsJyA9PiBudWxsLAogICAgICAgICAgICAnc3RyaW5nJyA9PiAnRm9vJywKICAgICAgICAgICAgJ2ludCcgPT4gMCwKICAgICAgICAgICAgJ2Zsb2F0JyA9PiAwLjUsCiAgICAgICAgICAgICduZXN0ZWQnID0+IGFycmF5KCd3aXRoIG9iamVjdCcgPT4gbmV3IER1bW15VGVzdCksCiAgICAgICAgICAgICdvYmplY3QnID0+IG5ldyBcRGF0ZVRpbWUsCiAgICAgICAgICAgICdyZXNvdXJjZScgPT4gZm9wZW4oJ3BocDovL21lbW9yeScsICdyJyksCiAgICAgICAgICAgICdjbG9zZWQnID0+ICRjbG9zZWQsCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmdldExvZ2dlcigpLT53YXJuaW5nKCdDcmF6eSBjb250ZXh0IGRhdGEnLCAkY29udGV4dCk7CgogICAgICAgICRleHBlY3RlZCA9IGFycmF5KCd3YXJuaW5nIENyYXp5IGNvbnRleHQgZGF0YScpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkLCAkdGhpcy0+Z2V0TG9ncygpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRleHRFeGNlcHRpb25LZXlDYW5CZUV4Y2VwdGlvbk9yT3RoZXJWYWx1ZXMoKQogICAgewogICAgICAgICRsb2dnZXIgPSAkdGhpcy0+Z2V0TG9nZ2VyKCk7CiAgICAgICAgJGxvZ2dlci0+d2FybmluZygnUmFuZG9tIG1lc3NhZ2UnLCBhcnJheSgnZXhjZXB0aW9uJyA9PiAnb29wcycpKTsKICAgICAgICAkbG9nZ2VyLT5jcml0aWNhbCgnVW5jYXVnaHQgRXhjZXB0aW9uIScsIGFycmF5KCdleGNlcHRpb24nID0+IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ZhaWwnKSkpOwoKICAgICAgICAkZXhwZWN0ZWQgPSBhcnJheSgKICAgICAgICAgICAgJ3dhcm5pbmcgUmFuZG9tIG1lc3NhZ2UnLAogICAgICAgICAgICAnY3JpdGljYWwgVW5jYXVnaHQgRXhjZXB0aW9uIScKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkLCAkdGhpcy0+Z2V0TG9ncygpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/Psr/Log/Test/TestLogger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcTG9nXFRlc3Q7Cgp1c2UgUHNyXExvZ1xBYnN0cmFjdExvZ2dlcjsKCi8qKgogKiBVc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogKgogKiBJdCByZWNvcmRzIGFsbCByZWNvcmRzIGFuZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZW0gZm9yIHZlcmlmaWNhdGlvbi4KICoKICogQG1ldGhvZCBib29sIGhhc0VtZXJnZW5jeSgkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzQWxlcnQoJHJlY29yZCkKICogQG1ldGhvZCBib29sIGhhc0NyaXRpY2FsKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNFcnJvcigkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzV2FybmluZygkcmVjb3JkKQogKiBAbWV0aG9kIGJvb2wgaGFzTm90aWNlKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNJbmZvKCRyZWNvcmQpCiAqIEBtZXRob2QgYm9vbCBoYXNEZWJ1ZygkcmVjb3JkKQogKgogKiBAbWV0aG9kIGJvb2wgaGFzRW1lcmdlbmN5UmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFJlY29yZHMoKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxSZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0Vycm9yUmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nUmVjb3JkcygpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VSZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0luZm9SZWNvcmRzKCkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnUmVjb3JkcygpCiAqCiAqIEBtZXRob2QgYm9vbCBoYXNFbWVyZ2VuY3lUaGF0Q29udGFpbnMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFRoYXRDb250YWlucygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0NyaXRpY2FsVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzRXJyb3JUaGF0Q29udGFpbnMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzTm90aWNlVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzSW5mb1RoYXRDb250YWlucygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnVGhhdENvbnRhaW5zKCRtZXNzYWdlKQogKgogKiBAbWV0aG9kIGJvb2wgaGFzRW1lcmdlbmN5VGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNBbGVydFRoYXRNYXRjaGVzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxUaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0Vycm9yVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNXYXJuaW5nVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VUaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0luZm9UaGF0TWF0Y2hlcygkbWVzc2FnZSkKICogQG1ldGhvZCBib29sIGhhc0RlYnVnVGhhdE1hdGNoZXMoJG1lc3NhZ2UpCiAqCiAqIEBtZXRob2QgYm9vbCBoYXNFbWVyZ2VuY3lUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQWxlcnRUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzQ3JpdGljYWxUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzRXJyb3JUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzV2FybmluZ1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNOb3RpY2VUaGF0UGFzc2VzKCRtZXNzYWdlKQogKiBAbWV0aG9kIGJvb2wgaGFzSW5mb1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqIEBtZXRob2QgYm9vbCBoYXNEZWJ1Z1RoYXRQYXNzZXMoJG1lc3NhZ2UpCiAqLwpjbGFzcyBUZXN0TG9nZ2VyIGV4dGVuZHMgQWJzdHJhY3RMb2dnZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkcmVjb3JkcyA9IFtdOwoKICAgIHB1YmxpYyAkcmVjb3Jkc0J5TGV2ZWwgPSBbXTsKCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2coJGxldmVsLCAkbWVzc2FnZSwgYXJyYXkgJGNvbnRleHQgPSBbXSkKICAgIHsKICAgICAgICAkcmVjb3JkID0gWwogICAgICAgICAgICAnbGV2ZWwnID0+ICRsZXZlbCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAnY29udGV4dCcgPT4gJGNvbnRleHQsCiAgICAgICAgXTsKCiAgICAgICAgJHRoaXMtPnJlY29yZHNCeUxldmVsWyRyZWNvcmRbJ2xldmVsJ11dW10gPSAkcmVjb3JkOwogICAgICAgICR0aGlzLT5yZWNvcmRzW10gPSAkcmVjb3JkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmRzKCRsZXZlbCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPnJlY29yZHNCeUxldmVsWyRsZXZlbF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmQoJHJlY29yZCwgJGxldmVsKQogICAgewogICAgICAgIGlmIChpc19zdHJpbmcoJHJlY29yZCkpIHsKICAgICAgICAgICAgJHJlY29yZCA9IFsnbWVzc2FnZScgPT4gJHJlY29yZF07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+aGFzUmVjb3JkVGhhdFBhc3NlcyhmdW5jdGlvbiAoJHJlYykgdXNlICgkcmVjb3JkKSB7CiAgICAgICAgICAgIGlmICgkcmVjWydtZXNzYWdlJ10gIT09ICRyZWNvcmRbJ21lc3NhZ2UnXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVjb3JkWydjb250ZXh0J10pICYmICRyZWNbJ2NvbnRleHQnXSAhPT0gJHJlY29yZFsnY29udGV4dCddKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSwgJGxldmVsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVjb3JkVGhhdENvbnRhaW5zKCRtZXNzYWdlLCAkbGV2ZWwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXNSZWNvcmRUaGF0UGFzc2VzKGZ1bmN0aW9uICgkcmVjKSB1c2UgKCRtZXNzYWdlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJwb3MoJHJlY1snbWVzc2FnZSddLCAkbWVzc2FnZSkgIT09IGZhbHNlOwogICAgICAgIH0sICRsZXZlbCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhc1JlY29yZFRoYXRNYXRjaGVzKCRyZWdleCwgJGxldmVsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzUmVjb3JkVGhhdFBhc3NlcyhmdW5jdGlvbiAoJHJlYykgdXNlICgkcmVnZXgpIHsKICAgICAgICAgICAgcmV0dXJuIHByZWdfbWF0Y2goJHJlZ2V4LCAkcmVjWydtZXNzYWdlJ10pID4gMDsKICAgICAgICB9LCAkbGV2ZWwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNSZWNvcmRUaGF0UGFzc2VzKGNhbGxhYmxlICRwcmVkaWNhdGUsICRsZXZlbCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5yZWNvcmRzQnlMZXZlbFskbGV2ZWxdKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yZWNvcmRzQnlMZXZlbFskbGV2ZWxdIGFzICRpID0+ICRyZWMpIHsKICAgICAgICAgICAgaWYgKGNhbGxfdXNlcl9mdW5jKCRwcmVkaWNhdGUsICRyZWMsICRpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJGFyZ3MpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8oLiopKERlYnVnfEluZm98Tm90aWNlfFdhcm5pbmd8RXJyb3J8Q3JpdGljYWx8QWxlcnR8RW1lcmdlbmN5KSguKikvJywgJG1ldGhvZCwgJG1hdGNoZXMpID4gMCkgewogICAgICAgICAgICAkZ2VuZXJpY01ldGhvZCA9ICRtYXRjaGVzWzFdIC4gKCdSZWNvcmRzJyAhPT0gJG1hdGNoZXNbM10gPyAnUmVjb3JkJyA6ICcnKSAuICRtYXRjaGVzWzNdOwogICAgICAgICAgICAkbGV2ZWwgPSBzdHJ0b2xvd2VyKCRtYXRjaGVzWzJdKTsKICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICRnZW5lcmljTWV0aG9kKSkgewogICAgICAgICAgICAgICAgJGFyZ3NbXSA9ICRsZXZlbDsKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICRnZW5lcmljTWV0aG9kXSwgJGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kICcgLiBnZXRfY2xhc3MoJHRoaXMpIC4gJzo6JyAuICRtZXRob2QgLiAnKCknKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQogICAgewogICAgICAgICR0aGlzLT5yZWNvcmRzID0gW107CiAgICAgICAgJHRoaXMtPnJlY29yZHNCeUxldmVsID0gW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/log/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UFNSIExvZwo9PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2ZpZy1zdGFuZGFyZHMvYmxvYi9tYXN0ZXIvYWNjZXB0ZWQvUFNSLTMtbG9nZ2VyLWludGVyZmFjZS5tZCkuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBsb2dnZXIgb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuIGludGVyZmFjZSB0aGF0CmRlc2NyaWJlcyBhIGxvZ2dlci4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgcHNyL2xvZwpgYGAKClVzYWdlCi0tLS0tCgpJZiB5b3UgbmVlZCBhIGxvZ2dlciwgeW91IGNhbiB1c2UgdGhlIGludGVyZmFjZSBsaWtlIHRoaXM6CgpgYGBwaHAKPD9waHAKCnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKCmNsYXNzIEZvbwp7CiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KExvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+bG9nZ2VyKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0RvaW5nIHdvcmsnKTsKICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPmRvU29tZXRoaW5nRWxzZSgpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdPaCBubyEnLCBhcnJheSgnZXhjZXB0aW9uJyA9PiAkZXhjZXB0aW9uKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBkbyBzb21ldGhpbmcgdXNlZnVsCiAgICB9Cn0KYGBgCgpZb3UgY2FuIHRoZW4gcGljayBvbmUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIHRvIGdldCBhIGxvZ2dlci4KCklmIHlvdSB3YW50IHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlLCB5b3UgY2FuIHJlcXVpcmUgdGhpcyBwYWNrYWdlIGFuZAppbXBsZW1lbnQgYFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlYCBpbiB5b3VyIGNvZGUuIFBsZWFzZSByZWFkIHRoZQpbc3BlY2lmaWNhdGlvbiB0ZXh0XShodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0zLWxvZ2dlci1pbnRlcmZhY2UubWQpCmZvciBkZXRhaWxzLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewoJIm5hbWUiOiAicmFsb3VwaGllL2dldGFsbGhlYWRlcnMiLAoJImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKCSJsaWNlbnNlIjogIk1JVCIsCgkiYXV0aG9ycyI6IFsKCQl7CgkJCSJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAoJCQkiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCgkJfQoJXSwKCSJyZXF1aXJlIjogewoJCSJwaHAiOiAiPj01LjYiCgl9LAoJInJlcXVpcmUtZGV2IjogewoJCSJwaHB1bml0L3BocHVuaXQiOiAiXjUgfHwgXjYuNSIsCgkJInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4xIgoJfSwKCSJhdXRvbG9hZCI6IHsKCQkiZmlsZXMiOiBbInNyYy9nZXRhbGxoZWFkZXJzLnBocCJdCgl9LAoJImF1dG9sb2FkLWRldiI6IHsKCQkicHNyLTQiOiB7CgkJCSJnZXRhbGxoZWFkZXJzXFxUZXN0c1xcIjogInRlc3RzLyIKCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQgUmFscGggS2hhdHRhcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Z2V0YWxsaGVhZGVycwo9PT09PT09PT09PT09CgpQSFAgYGdldGFsbGhlYWRlcnMoKWAgcG9seWZpbGwuIENvbXBhdGlibGUgd2l0aCBQSFAgPj0gNS4zLgoKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0NvdmVyYWdlIFN0YXR1c10oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vcmVwb3MvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvYmFkZ2UucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL2NvdmVyYWxscy5pby9yL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzP2JyYW5jaD1tYXN0ZXIpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy92L3N0YWJsZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0xhdGVzdCBVbnN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3YvdW5zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL2xpY2Vuc2UucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQoKClRoaXMgaXMgYSBzaW1wbGUgcG9seWZpbGwgZm9yIFtgZ2V0YWxsaGVhZGVycygpYF0oaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXRhbGxoZWFkZXJzLnBocCkuCgojIyBJbnN0YWxsCgpGb3IgUEhQIHZlcnNpb24gKipgPj0gNS42YCoqOgoKYGBgCmNvbXBvc2VyIHJlcXVpcmUgcmFsb3VwaGllL2dldGFsbGhlYWRlcnMKYGBgCgpGb3IgUEhQIHZlcnNpb24gKipgPCA1LjZgKio6CgpgYGAKY29tcG9zZXIgcmVxdWlyZSByYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyAiXjIiCmBgYAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/getallheaders.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpIHsKCiAgICAvKioKICAgICAqIEdldCBhbGwgSFRUUCBoZWFkZXIga2V5L3ZhbHVlcyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tzdHJpbmddIFRoZSBIVFRQIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldGFsbGhlYWRlcnMoKQogICAgewogICAgICAgICRoZWFkZXJzID0gYXJyYXkoKTsKCiAgICAgICAgJGNvcHlfc2VydmVyID0gYXJyYXkoCiAgICAgICAgICAgICdDT05URU5UX1RZUEUnICAgPT4gJ0NvbnRlbnQtVHlwZScsCiAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCcgPT4gJ0NvbnRlbnQtTGVuZ3RoJywKICAgICAgICAgICAgJ0NPTlRFTlRfTUQ1JyAgICA9PiAnQ29udGVudC1NZDUnLAogICAgICAgICk7CgogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChzdWJzdHIoJGtleSwgMCwgNSkgPT09ICdIVFRQXycpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBzdWJzdHIoJGtleSwgNSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkgfHwgIWlzc2V0KCRfU0VSVkVSWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCAka2V5KSkpKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWyRjb3B5X3NlcnZlclska2V5XV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydSRURJUkVDVF9IVFRQX0FVVEhPUklaQVRJT04nXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAkX1NFUlZFUlsnUkVESVJFQ1RfSFRUUF9BVVRIT1JJWkFUSU9OJ107CiAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSkgewogICAgICAgICAgICAgICAgJGJhc2ljX3Bhc3MgPSBpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgPyAkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSA6ICcnOwogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnIC4gYmFzZTY0X2VuY29kZSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddIC4gJzonIC4gJGJhc2ljX3Bhc3MpOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicmFtc2V5L2NvbGxlY3Rpb24iLAogICAgImRlc2NyaXB0aW9uIjogIkEgUEhQIGxpYnJhcnkgZm9yIHJlcHJlc2VudGluZyBhbmQgbWFuaXB1bGF0aW5nIGNvbGxlY3Rpb25zLiIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAiY29sbGVjdGlvbiIsCiAgICAgICAgImhhc2giLAogICAgICAgICJtYXAiLAogICAgICAgICJxdWV1ZSIsCiAgICAgICAgInNldCIKICAgIF0sCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkJlbiBSYW1zZXkiLAogICAgICAgICAgICAiZW1haWwiOiAiYmVuQGJlbnJhbXNleS5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9iZW5yYW1zZXkuY29tIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjQgfHwgXjguMCIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODEiOiAiXjEuMjMiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJjYXB0YWluaG9vay9wbHVnaW4tY29tcG9zZXIiOiAiXjUuMyIsCiAgICAgICAgImVyZ2VibmlzL2NvbXBvc2VyLW5vcm1hbGl6ZSI6ICJeMi4yOC4zIiwKICAgICAgICAiZmFrZXJwaHAvZmFrZXIiOiAiXjEuMjEiLAogICAgICAgICJoYW1jcmVzdC9oYW1jcmVzdC1waHAiOiAiXjIuMCIsCiAgICAgICAgImphbmdyZWdvci9waHBzdGFuLXByb3BoZWN5IjogIl4xLjAiLAogICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuNSIsCiAgICAgICAgInBocC1wYXJhbGxlbC1saW50L3BocC1jb25zb2xlLWhpZ2hsaWdodGVyIjogIl4xLjAiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS4zIiwKICAgICAgICAicGhwY3NzdGFuZGFyZHMvcGhwY3N1dGlscyI6ICJeMS4wLjAtcmMxIiwKICAgICAgICAicGhwc3BlYy9wcm9waGVjeS1waHB1bml0IjogIl4yLjAiLAogICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMS45IiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjEuMSIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1waHB1bml0IjogIl4xLjMiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjkuNSIsCiAgICAgICAgInBzYWxtL3BsdWdpbi1tb2NrZXJ5IjogIl4xLjEiLAogICAgICAgICJwc2FsbS9wbHVnaW4tcGhwdW5pdCI6ICJeMC4xOC40IiwKICAgICAgICAicmFtc2V5L2NvZGluZy1zdGFuZGFyZCI6ICJeMi4wLjMiLAogICAgICAgICJyYW1zZXkvY29udmVudGlvbmFsLWNvbW1pdHMiOiAiXjEuMyIsCiAgICAgICAgInZpbWVvL3BzYWxtIjogIl41LjQiCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogIlJDIiwKICAgICJwcmVmZXItc3RhYmxlIjogdHJ1ZSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJSYW1zZXlcXENvbGxlY3Rpb25cXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlJhbXNleVxcQ29sbGVjdGlvblxcVGVzdFxcIjogInRlc3RzLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFRlc3RcXEdlbmVyaWNzXFwiOiAidGVzdHMvZ2VuZXJpY3MvIgogICAgICAgIH0sCiAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAidmVuZG9yL2hhbWNyZXN0L2hhbWNyZXN0LXBocC9oYW1jcmVzdC9IYW1jcmVzdC5waHAiCiAgICAgICAgXQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgImFsbG93LXBsdWdpbnMiOiB7CiAgICAgICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogdHJ1ZSwKICAgICAgICAgICAgImVyZ2VibmlzL2NvbXBvc2VyLW5vcm1hbGl6ZSI6IHRydWUsCiAgICAgICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiB0cnVlLAogICAgICAgICAgICAiY2FwdGFpbmhvb2svcGx1Z2luLWNvbXBvc2VyIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJjYXB0YWluaG9vayI6IHsKICAgICAgICAgICAgImZvcmNlLWluc3RhbGwiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicmFtc2V5L2NvbnZlbnRpb25hbC1jb21taXRzIjogewogICAgICAgICAgICAiY29uZmlnRmlsZSI6ICJjb252ZW50aW9uYWwtY29tbWl0cy5qc29uIgogICAgICAgIH0KICAgIH0sCiAgICAic2NyaXB0cyI6IHsKICAgICAgICAiZGV2OmFuYWx5emUiOiBbCiAgICAgICAgICAgICJAZGV2OmFuYWx5emU6cGhwc3RhbiIsCiAgICAgICAgICAgICJAZGV2OmFuYWx5emU6cHNhbG0iCiAgICAgICAgXSwKICAgICAgICAiZGV2OmFuYWx5emU6cGhwc3RhbiI6ICJwaHBzdGFuIGFuYWx5c2UgLS1hbnNpIC0tbWVtb3J5LWxpbWl0PTFHIiwKICAgICAgICAiZGV2OmFuYWx5emU6cHNhbG0iOiAicHNhbG0iLAogICAgICAgICJkZXY6YnVpbGQ6Y2xlYW4iOiAiZ2l0IGNsZWFuIC1mWCBidWlsZC8iLAogICAgICAgICJkZXY6bGludCI6IFsKICAgICAgICAgICAgIkBkZXY6bGludDpzeW50YXgiLAogICAgICAgICAgICAiQGRldjpsaW50OnN0eWxlIgogICAgICAgIF0sCiAgICAgICAgImRldjpsaW50OmZpeCI6ICJwaHBjYmYiLAogICAgICAgICJkZXY6bGludDpzdHlsZSI6ICJwaHBjcyAtLWNvbG9ycyIsCiAgICAgICAgImRldjpsaW50OnN5bnRheCI6ICJwYXJhbGxlbC1saW50IC0tY29sb3JzIHNyYy8gdGVzdHMvIiwKICAgICAgICAiZGV2OnRlc3QiOiBbCiAgICAgICAgICAgICJAZGV2OmxpbnQiLAogICAgICAgICAgICAiQGRldjphbmFseXplIiwKICAgICAgICAgICAgIkBkZXY6dGVzdDp1bml0IgogICAgICAgIF0sCiAgICAgICAgImRldjp0ZXN0OmNvdmVyYWdlOmNpIjogInBocHVuaXQgLS1jb2xvcnM9YWx3YXlzIC0tY292ZXJhZ2UtdGV4dCAtLWNvdmVyYWdlLWNsb3ZlciBidWlsZC9jb3ZlcmFnZS9jbG92ZXIueG1sIC0tY292ZXJhZ2UtY29iZXJ0dXJhIGJ1aWxkL2NvdmVyYWdlL2NvYmVydHVyYS54bWwgLS1jb3ZlcmFnZS1jcmFwNGogYnVpbGQvY292ZXJhZ2UvY3JhcDRqLnhtbCAtLWNvdmVyYWdlLXhtbCBidWlsZC9jb3ZlcmFnZS9jb3ZlcmFnZS14bWwgLS1sb2ctanVuaXQgYnVpbGQvanVuaXQueG1sIiwKICAgICAgICAiZGV2OnRlc3Q6Y292ZXJhZ2U6aHRtbCI6ICJwaHB1bml0IC0tY29sb3JzPWFsd2F5cyAtLWNvdmVyYWdlLWh0bWwgYnVpbGQvY292ZXJhZ2UvY292ZXJhZ2UtaHRtbC8iLAogICAgICAgICJkZXY6dGVzdDp1bml0IjogInBocHVuaXQgLS1jb2xvcnM9YWx3YXlzIiwKICAgICAgICAidGVzdCI6ICJAZGV2OnRlc3QiCiAgICB9LAogICAgInNjcmlwdHMtZGVzY3JpcHRpb25zIjogewogICAgICAgICJkZXY6YW5hbHl6ZSI6ICJSdW5zIGFsbCBzdGF0aWMgYW5hbHlzaXMgY2hlY2tzLiIsCiAgICAgICAgImRldjphbmFseXplOnBocHN0YW4iOiAiUnVucyB0aGUgUEhQU3RhbiBzdGF0aWMgYW5hbHl6ZXIuIiwKICAgICAgICAiZGV2OmFuYWx5emU6cHNhbG0iOiAiUnVucyB0aGUgUHNhbG0gc3RhdGljIGFuYWx5emVyLiIsCiAgICAgICAgImRldjpidWlsZDpjbGVhbiI6ICJDbGVhbnMgdGhlIGJ1aWxkLyBkaXJlY3RvcnkuIiwKICAgICAgICAiZGV2OmxpbnQiOiAiUnVucyBhbGwgbGludGluZyBjaGVja3MuIiwKICAgICAgICAiZGV2OmxpbnQ6Zml4IjogIkF1dG8tZml4ZXMgY29kaW5nIHN0YW5kYXJkcyBpc3N1ZXMsIGlmIHBvc3NpYmxlLiIsCiAgICAgICAgImRldjpsaW50OnN0eWxlIjogIkNoZWNrcyBmb3IgY29kaW5nIHN0YW5kYXJkcyBpc3N1ZXMuIiwKICAgICAgICAiZGV2OmxpbnQ6c3ludGF4IjogIkNoZWNrcyBmb3Igc3ludGF4IGVycm9ycy4iLAogICAgICAgICJkZXY6dGVzdCI6ICJSdW5zIGxpbnRpbmcsIHN0YXRpYyBhbmFseXNpcywgYW5kIHVuaXQgdGVzdHMuIiwKICAgICAgICAiZGV2OnRlc3Q6Y292ZXJhZ2U6Y2kiOiAiUnVucyB1bml0IHRlc3RzIGFuZCBnZW5lcmF0ZXMgQ0kgY292ZXJhZ2UgcmVwb3J0cy4iLAogICAgICAgICJkZXY6dGVzdDpjb3ZlcmFnZTpodG1sIjogIlJ1bnMgdW5pdCB0ZXN0cyBhbmQgZ2VuZXJhdGVzIEhUTUwgY292ZXJhZ2UgcmVwb3J0LiIsCiAgICAgICAgImRldjp0ZXN0OnVuaXQiOiAiUnVucyB1bml0IHRlc3RzLiIsCiAgICAgICAgInRlc3QiOiAiUnVucyBsaW50aW5nLCBzdGF0aWMgYW5hbHlzaXMsIGFuZCB1bml0IHRlc3RzLiIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/conventional-commits.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInR5cGVDYXNlIjogImtlYmFiIiwKICAgICJ0eXBlcyI6IFsKICAgICAgICAiY2hvcmUiLAogICAgICAgICJjaSIsCiAgICAgICAgImRvY3MiLAogICAgICAgICJmZWF0IiwKICAgICAgICAiZml4IiwKICAgICAgICAicmVmYWN0b3IiLAogICAgICAgICJzZWN1cml0eSIsCiAgICAgICAgInN0eWxlIiwKICAgICAgICAidGVzdCIKICAgIF0sCiAgICAic2NvcGVDYXNlIjogImtlYmFiIiwKICAgICJzY29wZVJlcXVpcmVkIjogZmFsc2UsCiAgICAic2NvcGVzIjogW10sCiAgICAiZGVzY3JpcHRpb25DYXNlIjogbnVsbCwKICAgICJkZXNjcmlwdGlvbkVuZE1hcmsiOiAiIiwKICAgICJib2R5UmVxdWlyZWQiOiBmYWxzZSwKICAgICJib2R5V3JhcFdpZHRoIjogNzIsCiAgICAicmVxdWlyZWRGb290ZXJzIjogW10KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1LTIwMjIgQmVuIFJhbXNleSA8YmVuQGJlbnJhbXNleS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxIGFsaWduPSJjZW50ZXIiPnJhbXNleS9jb2xsZWN0aW9uPC9oMT4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPHN0cm9uZz5BIFBIUCBsaWJyYXJ5IGZvciByZXByZXNlbnRpbmcgYW5kIG1hbmlwdWxhdGluZyBjb2xsZWN0aW9ucy48L3N0cm9uZz4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+CiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24iPjxpbWcgc3JjPSJodHRwOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2Uvc291cmNlLXJhbXNleS9jb2xsZWN0aW9uLWJsdWUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IlNvdXJjZSBDb2RlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcmFtc2V5L2NvbGxlY3Rpb24iPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC92L3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZsYWJlbD1yZWxlYXNlIiBhbHQ9IkRvd25sb2FkIFBhY2thZ2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vcGhwLm5ldCI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L3BocC12L3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZjb2xvckI9JTIzODg5MkJGIiBhbHQ9IlBIUCBQcm9ncmFtbWluZyBMYW5ndWFnZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9sL3JhbXNleS9jb2xsZWN0aW9uLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSZjb2xvckI9ZGFya2N5YW4iIGFsdD0iUmVhZCBMaWNlbnNlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L2NvbGxlY3Rpb24vYWN0aW9ucy93b3JrZmxvd3MvY29udGludW91cy1pbnRlZ3JhdGlvbi55bWwiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9hY3Rpb25zL3dvcmtmbG93L3N0YXR1cy9yYW1zZXkvY29sbGVjdGlvbi9jb250aW51b3VzLWludGVncmF0aW9uLnltbD9icmFuY2g9bWFpbiZsb2dvPWdpdGh1YiZzdHlsZT1mbGF0LXNxdWFyZSIgYWx0PSJCdWlsZCBTdGF0dXMiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vY29kZWNvdi5pby9naC9yYW1zZXkvY29sbGVjdGlvbiI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vY29kZWNvdi9jL2doL3JhbXNleS9jb2xsZWN0aW9uP2xhYmVsPWNvZGVjb3YmbG9nbz1jb2RlY292JnN0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IkNvZGVjb3YgQ29kZSBDb3ZlcmFnZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9zaGVwaGVyZC5kZXYvZ2l0aHViL3JhbXNleS9jb2xsZWN0aW9uIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9lbmRwb2ludD9zdHlsZT1mbGF0LXNxdWFyZSZ1cmw9aHR0cHMlM0ElMkYlMkZzaGVwaGVyZC5kZXYlMkZnaXRodWIlMkZyYW1zZXklMkZjb2xsZWN0aW9uJTJGY292ZXJhZ2UiIGFsdD0iUHNhbG0gVHlwZSBDb3ZlcmFnZSI+PC9hPgo8L3A+CgojIyBBYm91dAoKcmFtc2V5L2NvbGxlY3Rpb24gaXMgYSBQSFAgbGlicmFyeSBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29sbGVjdGlvbnMuCgpNdWNoIGluc3BpcmF0aW9uIGZvciB0aGlzIGxpYnJhcnkgY2FtZSBmcm9tIHRoZSBbSmF2YSBDb2xsZWN0aW9ucyBGcmFtZXdvcmtdW2phdmFdLgoKVGhpcyBwcm9qZWN0IGFkaGVyZXMgdG8gYSBbY29kZSBvZiBjb25kdWN0XShDT0RFX09GX0NPTkRVQ1QubWQpLgpCeSBwYXJ0aWNpcGF0aW5nIGluIHRoaXMgcHJvamVjdCBhbmQgaXRzIGNvbW11bml0eSwgeW91IGFyZSBleHBlY3RlZCB0bwp1cGhvbGQgdGhpcyBjb2RlLgoKIyMgSW5zdGFsbGF0aW9uCgpJbnN0YWxsIHRoaXMgcGFja2FnZSBhcyBhIGRlcGVuZGVuY3kgdXNpbmcgW0NvbXBvc2VyXShodHRwczovL2dldGNvbXBvc2VyLm9yZykuCgpgYGAgYmFzaApjb21wb3NlciByZXF1aXJlIHJhbXNleS9jb2xsZWN0aW9uCmBgYAoKIyMgVXNhZ2UKCkV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBsaWJyYXJ5IG1heSBiZSBmb3VuZCBpbiB0aGUKW1dpa2kgcGFnZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbi93aWtpL0V4YW1wbGVzKS4KCiMjIENvbnRyaWJ1dGluZwoKQ29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSEgVG8gY29udHJpYnV0ZSwgcGxlYXNlIGZhbWlsaWFyaXplIHlvdXJzZWxmIHdpdGgKW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKS4KCiMjIENvb3JkaW5hdGVkIERpc2Nsb3N1cmUKCktlZXBpbmcgdXNlciBpbmZvcm1hdGlvbiBzYWZlIGFuZCBzZWN1cmUgaXMgYSB0b3AgcHJpb3JpdHksIGFuZCB3ZSB3ZWxjb21lIHRoZQpjb250cmlidXRpb24gb2YgZXh0ZXJuYWwgc2VjdXJpdHkgcmVzZWFyY2hlcnMuIElmIHlvdSBiZWxpZXZlIHlvdSd2ZSBmb3VuZCBhCnNlY3VyaXR5IGlzc3VlIGluIHNvZnR3YXJlIHRoYXQgaXMgbWFpbnRhaW5lZCBpbiB0aGlzIHJlcG9zaXRvcnksIHBsZWFzZSByZWFkCltTRUNVUklUWS5tZF1bXSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHN1Ym1pdHRpbmcgYSB2dWxuZXJhYmlsaXR5IHJlcG9ydC4KCiMjIHJhbXNleS9jb2xsZWN0aW9uIGZvciBFbnRlcnByaXNlCgpBdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgVGlkZWxpZnQgU3Vic2NyaXB0aW9uLgoKVGhlIG1haW50YWluZXJzIG9mIHJhbXNleS9jb2xsZWN0aW9uIGFuZCB0aG91c2FuZHMgb2Ygb3RoZXIgcGFja2FnZXMgYXJlIHdvcmtpbmcKd2l0aCBUaWRlbGlmdCB0byBkZWxpdmVyIGNvbW1lcmNpYWwgc3VwcG9ydCBhbmQgbWFpbnRlbmFuY2UgZm9yIHRoZSBvcGVuIHNvdXJjZQpwYWNrYWdlcyB5b3UgdXNlIHRvIGJ1aWxkIHlvdXIgYXBwbGljYXRpb25zLiBTYXZlIHRpbWUsIHJlZHVjZSByaXNrLCBhbmQgaW1wcm92ZQpjb2RlIGhlYWx0aCwgd2hpbGUgcGF5aW5nIHRoZSBtYWludGFpbmVycyBvZiB0aGUgZXhhY3QgcGFja2FnZXMgeW91IHVzZS4KW0xlYXJuIG1vcmUuXShodHRwczovL3RpZGVsaWZ0LmNvbS9zdWJzY3JpcHRpb24vcGtnL3BhY2thZ2lzdC1yYW1zZXktY29sbGVjdGlvbj91dG1fc291cmNlPXVuZGVmaW5lZCZ1dG1fbWVkaXVtPXJlZmVycmFsJnV0bV9jYW1wYWlnbj1lbnRlcnByaXNlJnV0bV90ZXJtPXJlcG8pCgojIyBDb3B5cmlnaHQgYW5kIExpY2Vuc2UKClRoZSByYW1zZXkvY29sbGVjdGlvbiBsaWJyYXJ5IGlzIGNvcHlyaWdodCDCqSBbQmVuIFJhbXNleV0oaHR0cHM6Ly9iZW5yYW1zZXkuY29tKQphbmQgbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCk1JVCBMaWNlbnNlIChNSVQpLiBQbGVhc2Ugc2VlIFtMSUNFTlNFXShMSUNFTlNFKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgpbamF2YV06IGh0dHA6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzgvZG9jcy90ZWNobm90ZXMvZ3VpZGVzL2NvbGxlY3Rpb25zL2luZGV4Lmh0bWwKW3NlY3VyaXR5Lm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS9jb2xsZWN0aW9uL2Jsb2IvbWFpbi9TRUNVUklUWS5tZAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/SECURITY.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLQogICAgVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIEhhY2tlck9uZSBQb2xpY3kgQnVpbGRlciBbMV0sCiAgICB3aXRoIGd1aWRhbmNlIGZyb20gdGhlIE5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9ucyBhbmQgSW5mb3JtYXRpb24KICAgIEFkbWluaXN0cmF0aW9uIENvb3JkaW5hdGVkIFZ1bG5lcmFiaWxpdHkgRGlzY2xvc3VyZSBUZW1wbGF0ZSBbMl0uCiAtLT4KCiMgVnVsbmVyYWJpbGl0eSBEaXNjbG9zdXJlIFBvbGljeSAoVkRQKQoKIyMgQnJhbmQgUHJvbWlzZQoKPCEtLQogICAgVGhpcyBpcyB5b3VyIGJyYW5kIHByb21pc2UuIEl0cyBvYmplY3RpdmUgaXMgdG8gImRlbW9uc3RyYXRlIGEgY2xlYXIsIGdvb2QKICAgIGZhaXRoIGNvbW1pdG1lbnQgdG8gY3VzdG9tZXJzIGFuZCBvdGhlciBzdGFrZWhvbGRlcnMgcG90ZW50aWFsbHkgaW1wYWN0ZWQgYnkKICAgIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyIgWzJdLgotLT4KCktlZXBpbmcgdXNlciBpbmZvcm1hdGlvbiBzYWZlIGFuZCBzZWN1cmUgaXMgYSB0b3AgcHJpb3JpdHksIGFuZCB3ZSB3ZWxjb21lIHRoZQpjb250cmlidXRpb24gb2YgZXh0ZXJuYWwgc2VjdXJpdHkgcmVzZWFyY2hlcnMuCgojIyBTY29wZQoKPCEtLQogICAgVGhpcyBpcyB5b3VyIGluaXRpYWwgc2NvcGUuIEl0IHRlbGxzIHZ1bG5lcmFiaWxpdHkgZmluZGVycyBhbmQgcmVwb3J0ZXJzCiAgICAid2hpY2ggc3lzdGVtcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSAnZmFpciBnYW1lJyB2ZXJzdXMgJ29mZiBsaW1pdHMnIiBbMl0uCiAgICBGb3Igc29mdHdhcmUgcGFja2FnZXMsIHRoaXMgaXMgb2Z0ZW4gYSBsaXN0IG9mIGN1cnJlbnRseSBtYWludGFpbmVkIHZlcnNpb25zCiAgICBvZiB0aGUgcGFja2FnZS4KLS0+CgpJZiB5b3UgYmVsaWV2ZSB5b3UndmUgZm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBzb2Z0d2FyZSB0aGF0IGlzIG1haW50YWluZWQgaW4KdGhpcyByZXBvc2l0b3J5LCB3ZSBlbmNvdXJhZ2UgeW91IHRvIG5vdGlmeSB1cy4KCnwgVmVyc2lvbiB8IEluIHNjb3BlIHwgU291cmNlIGNvZGUgfAp8IC0tLS0tLS0gfCA6LS0tLS0tOiB8IC0tLS0tLS0tLS0tIHwKfCBsYXRlc3QgIHwg4pyFICAgICAgICB8IGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvY29sbGVjdGlvbiB8CgojIyBIb3cgdG8gU3VibWl0IGEgUmVwb3J0Cgo8IS0tCiAgICBUaGlzIGlzIHlvdXIgY29tbXVuaWNhdGlvbiBwcm9jZXNzLiBJdCB0ZWxscyBzZWN1cml0eSByZXNlYXJjaGVycyBob3cgdG8KICAgIGNvbnRhY3QgeW91IHRvIHJlcG9ydCBhIHZ1bG5lcmFiaWxpdHkuIEl0IG1heSBiZSBhIGxpbmsgdG8gYSB3ZWIgZm9ybSB0aGF0CiAgICB1c2VzIEhUVFBTIGZvciBzZWN1cmUgY29tbXVuaWNhdGlvbiwgb3IgaXQgbWF5IGJlIGFuIGVtYWlsIGFkZHJlc3MuCiAgICBPcHRpb25hbGx5LCB5b3UgbWF5IGNob29zZSB0byBpbmNsdWRlIGEgUEdQIHB1YmxpYyBrZXksIHNvIHRoYXQgcmVzZWFyY2hlcnMKICAgIG1heSBzZW5kIHlvdSBlbmNyeXB0ZWQgbWVzc2FnZXMuCi0tPgoKVG8gc3VibWl0IGEgdnVsbmVyYWJpbGl0eSByZXBvcnQsIHBsZWFzZSBjb250YWN0IHVzIGF0IHNlY3VyaXR5QHJhbXNleS5kZXYuCllvdXIgc3VibWlzc2lvbiB3aWxsIGJlIHJldmlld2VkIGFuZCB2YWxpZGF0ZWQgYnkgYSBtZW1iZXIgb2Ygb3VyIHRlYW0uCgojIyBTYWZlIEhhcmJvcgoKPCEtLQogICAgVGhpcyBzZWN0aW9uIGFzc3VyZXMgdnVsbmVyYWJpbGl0eSBmaW5kZXJzIGFuZCByZXBvcnRlcnMgdGhhdCB0aGV5IHdpbGwKICAgIHJlY2VpdmUgZ29vZCBmYWl0aCByZXNwb25zZXMgdG8gdGhlaXIgZ29vZCBmYWl0aCBhY3RzLiBJbiBvdGhlciB3b3JkcywKICAgICJ3ZSB3aWxsIG5vdCB0YWtlIGxlZ2FsIGFjdGlvbiBpZi4uLiIgWzJdLgotLT4KCldlIHN1cHBvcnQgc2FmZSBoYXJib3IgZm9yIHNlY3VyaXR5IHJlc2VhcmNoZXJzIHdobzoKCiogTWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGF2b2lkIHByaXZhY3kgdmlvbGF0aW9ucywgZGVzdHJ1Y3Rpb24gb2YgZGF0YSwgYW5kCiAgaW50ZXJydXB0aW9uIG9yIGRlZ3JhZGF0aW9uIG9mIG91ciBzZXJ2aWNlcy4KKiBPbmx5IGludGVyYWN0IHdpdGggYWNjb3VudHMgeW91IG93biBvciB3aXRoIGV4cGxpY2l0IHBlcm1pc3Npb24gb2YgdGhlIGFjY291bnQKICBob2xkZXIuIElmIHlvdSBkbyBlbmNvdW50ZXIgUGVyc29uYWxseSBJZGVudGlmaWFibGUgSW5mb3JtYXRpb24gKFBJSSkgY29udGFjdAogIHVzIGltbWVkaWF0ZWx5LCBkbyBub3QgcHJvY2VlZCB3aXRoIGFjY2VzcywgYW5kIGltbWVkaWF0ZWx5IHB1cmdlIGFueSBsb2NhbAogIGluZm9ybWF0aW9uLgoqIFByb3ZpZGUgdXMgd2l0aCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgdG8gcmVzb2x2ZSB2dWxuZXJhYmlsaXRpZXMgcHJpb3IKICB0byBhbnkgZGlzY2xvc3VyZSB0byB0aGUgcHVibGljIG9yIGEgdGhpcmQgcGFydHkuCgpXZSB3aWxsIGNvbnNpZGVyIGFjdGl2aXRpZXMgY29uZHVjdGVkIGNvbnNpc3RlbnQgd2l0aCB0aGlzIHBvbGljeSB0byBjb25zdGl0dXRlCiJhdXRob3JpemVkIiBjb25kdWN0IGFuZCB3aWxsIG5vdCBwdXJzdWUgY2l2aWwgYWN0aW9uIG9yIGluaXRpYXRlIGEgY29tcGxhaW50IHRvCmxhdyBlbmZvcmNlbWVudC4gV2Ugd2lsbCBoZWxwIHRvIHRoZSBleHRlbnQgd2UgY2FuIGlmIGxlZ2FsIGFjdGlvbiBpcyBpbml0aWF0ZWQKYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHlvdS4KClBsZWFzZSBzdWJtaXQgYSByZXBvcnQgdG8gdXMgYmVmb3JlIGVuZ2FnaW5nIGluIGNvbmR1Y3QgdGhhdCBtYXkgYmUgaW5jb25zaXN0ZW50CndpdGggb3IgdW5hZGRyZXNzZWQgYnkgdGhpcyBwb2xpY3kuCgojIyBQcmVmZXJlbmNlcwoKPCEtLQogICAgVGhlIHByZWZlcmVuY2VzIHNlY3Rpb24gc2V0cyBleHBlY3RhdGlvbnMgYmFzZWQgb24gcHJpb3JpdHkgYW5kIHN1Ym1pc3Npb24KICAgIHZvbHVtZSwgcmF0aGVyIHRoYW4gbGVnYWwgb2JqZWN0aW9uIG9yIHJlc3RyaWN0aW9uIFsyXS4KCiAgICBBY2NvcmRpbmcgdG8gdGhlIE5USUEgWzJdOgoKICAgICAgICBUaGlzIHNlY3Rpb24gaXMgYSBsaXZpbmcgZG9jdW1lbnQgdGhhdCBzZXRzIGV4cGVjdGF0aW9ucyBmb3IgcHJlZmVyZW5jZXMKICAgICAgICBhbmQgcHJpb3JpdGllcywgdHlwaWNhbGx5IG1haW50YWluZWQgYnkgdGhlIHN1cHBvcnQgYW5kIGVuZ2luZWVyaW5nCiAgICAgICAgdGVhbS4gVGhpcyBjYW4gb3V0bGluZSBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdGllcywgcmVwb3J0aW5nIHN0eWxlCiAgICAgICAgKGNyYXNoIGR1bXBzLCBDVlNTIHNjb3JpbmcsIHByb29mLW9mLWNvbmNlcHQsIGV0Yy4pLCB0b29scywgZXRjLiBUb28KICAgICAgICBtYW55IHByZWZlcmVuY2VzIGNhbiBzZXQgdGhlIHdyb25nIHRvbmUgb3IgbWFrZSByZXBvcnRpbmcgZmluZGluZ3MKICAgICAgICBkaWZmaWN1bHQgdG8gbmF2aWdhdGUuIFRoaXMgc2VjdGlvbiBhbHNvIHNldHMgZXhwZWN0YXRpb25zIHRvIHRoZQogICAgICAgIHJlc2VhcmNoZXIgY29tbXVuaXR5IGZvciB3aGF0IHR5cGVzIG9mIGlzc3VlcyBhcmUgY29uc2lkZXJlZCBpbXBvcnRhbnQKICAgICAgICBvciBub3QuCi0tPgoKKiBQbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCByZXBvcnRzIHdpdGggcmVwcm9kdWNpYmxlIHN0ZXBzIGFuZCBhIGNsZWFybHkgZGVmaW5lZAogIGltcGFjdC4KKiBJbmNsdWRlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgdnVsbmVyYWJsZSBwYWNrYWdlIGluIHlvdXIgcmVwb3J0CiogU29jaWFsIGVuZ2luZWVyaW5nIChlLmcuIHBoaXNoaW5nLCB2aXNoaW5nLCBzbWlzaGluZykgaXMgcHJvaGliaXRlZC4KCjwhLS0KICAgIFJlZmVyZW5jZXMKCiAgICBbMV0gSGFja2VyT25lLiBQb2xpY3kgYnVpbGRlci4gUmV0cmlldmVkIGZyb20gaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3BvbGljeS1idWlsZGVyLwoKICAgIFsyXSBOVElBIFNhZmV0eSBXb3JraW5nIEdyb3VwLiAyMDE2LiAiRWFybHkgc3RhZ2UiIGNvb3JkaW5hdGVkIHZ1bG5lcmFiaWxpdHkKICAgIGRpc2Nsb3N1cmUgdGVtcGxhdGU6IFZlcnNpb24gMS4xLiAoMTUgRGVjZW1iZXIgMjAxNikuIFJldHJpZXZlZCBmcm9tCiAgICBodHRwczovL3d3dy5udGlhLmRvYy5nb3YvZmlsZXMvbnRpYS9wdWJsaWNhdGlvbnMvbnRpYV92dWxuX2Rpc2Nsb3N1cmVfZWFybHlfc3RhZ2VfdGVtcGxhdGUucGRmCi0tPgoKIyMgRW5jcnlwdGlvbiBLZXkgZm9yIHNlY3VyaXR5QHJhbXNleS5kZXYKCkZvciBpbmNyZWFzZWQgcHJpdmFjeSB3aGVuIHJlcG9ydGluZyBzZW5zaXRpdmUgaXNzdWVzLCB5b3UgbWF5IGVuY3J5cHQgeW91cgptZXNzYWdlIHVzaW5nIHRoZSBmb2xsb3dpbmcgcHVibGljIGtleToKCmBgYAotLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KCm1RSU5CRitaOWdFQkVBQ2JUL3BJeDhSUjBLMTh0OFoyckRubUVWNDRZZFQ3SE5zTWRxK0Q2U0FseDhVVWI2QVUKakdJYlY5ZGdCZ0dOdE9MVTFweGxvYUp3TDliV0lSYmorWC9RYjJXTklQLy9WejFZNDBveDFkU3BmQ1VyaXpYeAprYjRwNThYbWwwUHNCOGRnM2I0UkRVZ0t3R0MzN25lNXhtRG5pZ3lKUGJpQjJYSjZYYzQ2b1BDamg4NlhST1RLCndFQkIybFk2N0NsQmxTbHZDMlY5S21iVGJvUlFrTGRRRGhPYVVvc01iOTl6UmIwRVdxRExhRmtaVmpZNUhJN2kKMHBUdmVFNmRJMTJOZkhoVHdLalo1cFVpQVpRR2xLQTZKMWRNalkydW54SFprUWo1TWxNZnJMU3lKSFp4Y2NkSgp4RDk0VDZPVGNUSHQvWG1NcEkyQU9icGV3WkRkQ2hEUW1jWURaWEdmQWhGb0ptYnZYc21MTUdYS2d6S29aL2xzClJtTHNRaGg3Ky9yOEUrUG41citBNkhoNHVBYzE0QXB5RVAwY2tLZUlYdzFDNnBlcEhNNEU4VEVYVnIvSUE2Sy8KejZqbEhPUml4SUZYN2lOT25mSGgrcXdPZ1p3NDBENkpuQmZFempGaStUMkN5K0p6TjJ1eTdJOFVuZWNUTUdvMwo1dDZhc3RQeTZ4Y0g2a1pZekZUVjdYRVJSNkxJSVZ5TEFpTUZkOGtGNU1iSjhONUVsUkZzRkhQVys4Mk4ySERYCmM2MGlTYVRCODVrNlI2eGQ4SklLRGlhS0U0c1N1dzJ3SEZDS3EzM2QvR2FtWWV6cDF3TytiVlVRZzg4ZWZsakMKMkpORnlEK3ZsMzBqb3NxaHcxSGNtYkUxVFAzRGxZZUlMNWpRT2x4Q01zZ2FpNkp0VGZIRk0vNU1Zd0FSQVFBQgp0Qk56WldOMWNtbDBlVUJ5WVcxelpYa3VaR1YyaVFKVUJCTUJDQUErRmlFRTRkclBEKy9vZlo1NzBmQVlxMGJ2CnZYUUN5d0lGQWwrWjlnRUNHd01GQ1FlR0g0QUZDd2tJQndJR0ZRb0pDQXNDQkJZQ0F3RUNIZ0VDRjRBQUNna1EKcTBidnZYUUN5d0lrRUEvL1Fjd3Y4TXRUQ3kwMUxIWmQ5YzdWc2x3aE5kWFFEWXltY1R5amNZdzh4N08yMm00QgozaFhFNnZxQXBsRmhWeHhrcVhCMmVmMHRRdXp4aFBITkpna0NFNFdxNGkrVjZxR3BhU1ZIUVQyVzZETi9OSWhMCnZTOE9kU2NjNnpkZG1JYklrU3J6VlZBdGp3ZWhGTkVJclgzRG5iYmJLK0lrdTd2c0tUNUVjbE9sdUlzamxZb1gKZ29XOEllUmV5REJxT2UySDNob0NHdzZFQTBEL05ZVjJiSm5meTUzclhWSXlhcnNYWGVPTHA3ZU5FSDZUZDdhVwpQVlNyTVpKZTF0K2tuckVHbkVkclhXemxnNGxDSkpDdGVtR3YrcEtCVW9tbnlJU1hTZHF5b1JDQ3p2UWpxeWlnCjJrUmViVVg4QlhQVzMzcDRPWFBqOXNJYm9VT2pad29ybVd3cXFiRk1PK0o0VGlWQ1VvRW9oZUk3ZW1QRlJjTk4KUXRQSnJqYlkxKytPem5CYzBHUnBmZVVrR29VMWNiUmwxYm5lcG5GSVpNVERMa3JWVzZJMVk0cThaVndYM0JrRQpOODFjdEZyUnBIQmxVMzZFZEh2alBRbUd0dWlMNzdRcTNmV21Ndjd5VHZLMXdISkFYZkViMFpKV0haQ2JjazN3CmwwQ1ZxMForVVVBT004UnAxTjBOOG05Mnh0YXBhdjBxQ0ZVOXF6ZjJKNXFYNkdSbVd2K2QyOXdQZ0ZIekRXQm0Kbm5yWVlJQTR3Skx4MDBVNlNNY1ZCU25OZTkxQitSZkdZNVhRaGJXUGpRUWVjT0dDU0RzeGFGQXEyTWVPVkp5WgpiSWpMWWZHOUd4b0xLcjVSN29MUkp2Wkk0bktLQmMxS2NpL2NyWmJkaVNkUWhTUUdsRHo4OEYxT0hlQ0lkUVFRCkVRZ0FIUlloQk9oZEF4SGQrbHVzODZZUTU3QXRsNWljakFjYkJRSmZtZmRJQUFvSkVMQXRsNWljakFjYkZWY0EKLzFMcUIzWmpzblhEQXZ2QVhaVmpTUHFvZlNscE1MZVJRUDZJTS9BOU9kcTBBUUNacnRaYzFrbk9NR0VjanBwSwpSaytzeS9SME1zaHk4VER1YVpJUmdoMlV4N2tDRFFSZm1mWUJBUkFBbWNoS3p6Vno3SWFFcTdQblpEYjNzelFzClQvK0U5RjNtMzl5T3BWNGZFQjFZek9ib25GYWtYTlQ3R3cydFpFeDBlaXRVTXFRLzEzampmdTNVZHpsS2wyYlIKcUE4THJTUVJoQitQVEM5QTFYdnd4Q1VZaGhqR2lMeko5Q1pMNmhCUUI0M3FIT21FOVhKUG1lOTBnZUxzRitnSwp1MzlXYWoxU05XendHZytHeTFHbDVmMkFKb0RUeHpucmVDdUZHaitWZmFjenQvaGxmZ3FwT2RiOWpzbWRvRTd0CjNEU1dwcEE5ZFJIV3dRU2dFNkoyOHJSNFF5U0JjcXlYUzZJTXlrcWFKbjdaMjZ5TklhSVRMbkhDWk9TWTh6aFAKaGE3R0ZzTjU0OUVPQ2dFQ2JyblB0OWRtSTIraFFFMFJPMGU3U09CTnNJZjVzei9pN3VyaHd1ajBDYk9xaGpjMgpYMUFFVk5GQ1ZjYjZIUGkvQVdlZmRGQ1J1MGdhV1F4bjVnKzlua3E1c2xFZ3Z6Q0NpS1l6YUJJY3I4cVI2SGI0CkZhT1BWUHhPOHZuZFJvdXE1N1dzOFhwQXdiUHR0aW9GdUNxRjR1OUsrdEsvOGUyL1I4UWdSWUpzRTNDei9GdTgKK3BaRnBNbnFiREViSzNETDNzcysxZWQxc2t5K21EVjhxWFhlSTMzWFc1aE1GbmsxSldzaFVqSE5sUW1FNmZ0QwpVMHhTVE1WVXR3Smh6SDJ6RHA4bEVkdTdxaTNFc05VTE9sNjhvekRyNnNvV0F2Q2JIUGVUZFRPbkZ5U0dDbGVHCi8zVG9uc29aSnMvc1NQUEpueEZRMUR0Z1FMNkViaEl3YTBad1U0ZUtZVkhaOXRqeHVNWDN0ZUZ6UnZPckpqZ3MKK3l3R2xzSVVSdEVja1Q1WTZuTUFFUUVBQVlrQ1BBUVlBUWdBSmhZaEJPSGF6dy92NkgyZWU5SHdHS3RHNzcxMApBc3NDQlFKZm1mWUJBaHNNQlFrSGhoK0FBQW9KRUt0Rzc3MTBBc3NDOE5jUC9pREFjeTFhWkZ2a0EwRWJaODVwCmk3Lyt5d3RFLzF3RjRVNC85T3VMY29za3FHR25sMXBKTlBvb01PU0JDZnJlb1RCOEhpbVQwRmxuMENvYU9tNFEKcFNjTnEzOUpYbWY0VnhhdXFVSlZBUkJ5UDZ6VWZnWWFycW9hWk5ldUZGMFM0QVpKMkhoR3phUVBqRHoxdUtWTQpQRTZ0UVNnUWtGemRaOUF0UkE0dkVsVEg2eVJBZ21lcFVzT2loazBiMGdVdFZud3RSWVo4ZTBRdDNpZTk3YTczCkR4TGdBZ2VkRlJVYkxSWWlUMHZOYVliYWluQnNMV0twTi9UOG9kd0lnL3NtUDBLaGpwL2NrVjYwY1pUZEJpUFIKc3pCVFBKRVNNVVR1MFZQbnRjNGdXd0dzbWhaSmcvVHQvcVAwOFhZbzNWeE5ZQmVneXVXd05SNjZ6RFd2d3ZHSAptdU12NVVjaHVEeHA2UnQzSmtJTzR2b01UMUpTald5OXA4a3JrUEVFNFY2UHhBYWdMamRaU2t0OTJ3VkxpSzV4Cnk1Z05ydFBoVTQ1WWRSQUtIcjM2T3ZKQkpRNDJDRGFaNm56cnpnaGNJcDlDWjdBTkhySStRTFJNL2NzeitBR0EKc3pTcDZTNG1jMWxueHhmYk9oUFBwZWJaUG4wbklBWG9abm5vVktkcnhCVmVkUFFIVDU5WkZ2S1RROUZzN2dkMwpzWU51Yzd0SkdGR0MyQ3hCSDRBTkRwT1FrYzVxOUpKMUhTR3JYVTNqdXhJaVJnZkEyNlEyMlM5YzcxZFhqRWx3ClJpNTg0UUgrYkw2a2tZbW04eHBLRjZUVndod3U1eHgvakJQcmJXcUZydGJ2TE5ybmZQb2FwVGloQmZkSWhrVDYKbm1nYXdiQkhBMDJENXhFcUI1U1UzV0p1Cj1lSk54Ci0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KYGBgCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBUcmF2ZXJzYWJsZTsKCnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIHNlcmlhbGl6ZTsKdXNlIGZ1bmN0aW9uIHVuc2VyaWFsaXplOwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgQXJyYXlJbnRlcmZhY2VgLCB0byBtaW5pbWl6ZQogKiB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIFQKICogQGltcGxlbWVudHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0QXJyYXkgaW1wbGVtZW50cyBBcnJheUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBpdGVtcyBvZiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEB2YXIgYXJyYXk8YXJyYXkta2V5LCBUPgogICAgICovCiAgICBwcm90ZWN0ZWQgYXJyYXkgJGRhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBuZXcgYXJyYXkgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhIFRoZSBpbml0aWFsIGl0ZW1zIHRvIGFkZCB0byB0aGlzIGFycmF5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAvLyBJbnZva2Ugb2Zmc2V0U2V0KCkgZm9yIGVhY2ggdmFsdWUgYWRkZWQ7IGluIHRoaXMgd2F5LCBzdWItY2xhc3NlcwogICAgICAgIC8vIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgYWJvdXQgdmFsdWVzIGFkZGVkIHRvIHRoZSBhcnJheSBvYmplY3QuCiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhpcyBhcnJheS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3JhZ2dyZWdhdGUuZ2V0aXRlcmF0b3IucGhwIEl0ZXJhdG9yQWdncmVnYXRlOjpnZXRJdGVyYXRvcigpCiAgICAgKgogICAgICogQHJldHVybiBUcmF2ZXJzYWJsZTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBUcmF2ZXJzYWJsZQogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gb2Zmc2V0IGV4aXN0cyBpbiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXRleGlzdHMucGhwIEFycmF5QWNjZXNzOjpvZmZzZXRFeGlzdHMoKQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJG9mZnNldCBUaGUgb2Zmc2V0IHRvIGNoZWNrLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5kYXRhWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXRnZXQucGhwIEFycmF5QWNjZXNzOjpvZmZzZXRHZXQoKQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJG9mZnNldCBUaGUgb2Zmc2V0IGZvciB3aGljaCBhIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdmFsdWUgc3RvcmVkIGF0IHRoZSBvZmZzZXQsIG9yIG51bGwgaWYgdGhlIG9mZnNldAogICAgICogICAgIGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0gLy8gcGhwY3M6aWdub3JlCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRvZmZzZXRdID8/IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0IGluIHRoZSBhcnJheS4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlhY2Nlc3Mub2Zmc2V0c2V0LnBocCBBcnJheUFjY2Vzczo6b2Zmc2V0U2V0KCkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5fG51bGwgJG9mZnNldCBUaGUgb2Zmc2V0IHRvIHNldC4gSWYgYG51bGxgLCB0aGUgdmFsdWUgbWF5IGJlCiAgICAgKiAgICAgc2V0IGF0IGEgbnVtZXJpY2FsbHktaW5kZXhlZCBvZmZzZXQuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+ZGF0YVtdID0gJHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIG9mZnNldCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXR1bnNldC5waHAgQXJyYXlBY2Nlc3M6Om9mZnNldFVuc2V0KCkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5ICRvZmZzZXQgVGhlIG9mZnNldCB0byByZW1vdmUgZnJvbSB0aGUgYXJyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KTogdm9pZAogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGFycmF5IG9iamVjdC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgU2VyaWFsaXphYmxlIGludGVyZmFjZSB3aWxsIGdvIGF3YXkgaW4gUEhQIDkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL3NlcmlhbGl6YWJsZS5zZXJpYWxpemUucGhwIFNlcmlhbGl6YWJsZTo6c2VyaWFsaXplKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIFBIUCBzZXJpYWxpemVkIHN0cmluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VyaWFsaXplKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgZGF0YSBzdWl0YWJsZSBmb3IgUEhQIHNlcmlhbGl6YXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5tYWdpYy5waHAjbGFuZ3VhZ2Uub29wNS5tYWdpYy5zZXJpYWxpemUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvc2VyaWFsaXplCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW50byBhbiBpbnN0YW5jZSBvYmplY3QuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIFNlcmlhbGl6YWJsZSBpbnRlcmZhY2Ugd2lsbCBnbyBhd2F5IGluIFBIUCA5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9zZXJpYWxpemFibGUudW5zZXJpYWxpemUucGhwIFNlcmlhbGl6YWJsZTo6dW5zZXJpYWxpemUoKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgQSBQSFAgc2VyaWFsaXplZCBzdHJpbmcgdG8gdW5zZXJpYWxpemUuCiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWydhbGxvd2VkX2NsYXNzZXMnID0+IGZhbHNlXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHVuc2VyaWFsaXplZCBkYXRhIHRvIHRoZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIGFycmF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9jb3VudGFibGUuY291bnQucGhwIENvdW50YWJsZTo6Y291bnQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5kYXRhID0gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5kYXRhKSA9PT0gMDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIENsb3N1cmU7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkU29ydE9yZGVyRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXE91dE9mQm91bmRzRXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlRXh0cmFjdG9yVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiBhcnJheV9maWx0ZXI7CnVzZSBmdW5jdGlvbiBhcnJheV9tYXA7CnVzZSBmdW5jdGlvbiBhcnJheV9tZXJnZTsKdXNlIGZ1bmN0aW9uIGFycmF5X3NlYXJjaDsKdXNlIGZ1bmN0aW9uIGFycmF5X3VkaWZmOwp1c2UgZnVuY3Rpb24gYXJyYXlfdWludGVyc2VjdDsKdXNlIGZ1bmN0aW9uIGN1cnJlbnQ7CnVzZSBmdW5jdGlvbiBlbmQ7CnVzZSBmdW5jdGlvbiBpbl9hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIHJlc2V0Owp1c2UgZnVuY3Rpb24gc3BsX29iamVjdF9pZDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiB1bnNlcmlhbGl6ZTsKdXNlIGZ1bmN0aW9uIHVzb3J0OwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgQ29sbGVjdGlvbkludGVyZmFjZWAsIHRvCiAqIG1pbmltaXplIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlCiAqCiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFic3RyYWN0QXJyYXk8VD4KICogQGltcGxlbWVudHMgQ29sbGVjdGlvbkludGVyZmFjZTxUPgogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb2xsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBcnJheSBpbXBsZW1lbnRzIENvbGxlY3Rpb25JbnRlcmZhY2UKewogICAgdXNlIFR5cGVUcmFpdDsKICAgIHVzZSBWYWx1ZVRvU3RyaW5nVHJhaXQ7CiAgICB1c2UgVmFsdWVFeHRyYWN0b3JUcmFpdDsKCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXNbXSA9ICRlbGVtZW50OwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWlucygkZWxlbWVudCwgYm9vbCAkc3RyaWN0ID0gdHJ1ZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoJGVsZW1lbnQsICR0aGlzLT5kYXRhLCAkc3RyaWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tUeXBlKCR0aGlzLT5nZXRUeXBlKCksICR2YWx1ZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVmFsdWUgbXVzdCBiZSBvZiB0eXBlICcgLiAkdGhpcy0+Z2V0VHlwZSgpIC4gJzsgdmFsdWUgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJHZhbHVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkb2Zmc2V0ID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5kYXRhW10gPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJG9mZnNldF0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoKCRwb3NpdGlvbiA9IGFycmF5X3NlYXJjaCgkZWxlbWVudCwgJHRoaXMtPmRhdGEsIHRydWUpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXNbJHBvc2l0aW9uXSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW4oc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kKTogYXJyYXkKICAgIHsKICAgICAgICAkdGVtcCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkaXRlbSkgewogICAgICAgICAgICAvKiogQHZhciBtaXhlZCAkdmFsdWUgKi8KICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPmV4dHJhY3RWYWx1ZSgkaXRlbSwgJHByb3BlcnR5T3JNZXRob2QpOwoKICAgICAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQgKi8KICAgICAgICAgICAgJHRlbXBbXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGVtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE91dE9mQm91bmRzRXhjZXB0aW9uKCdDYW5cJ3QgZGV0ZXJtaW5lIGZpcnN0IGl0ZW0uIENvbGxlY3Rpb24gaXMgZW1wdHknKTsKICAgICAgICB9CgogICAgICAgIHJlc2V0KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgLyoqIEB2YXIgVCAkZmlyc3QgKi8KICAgICAgICAkZmlyc3QgPSBjdXJyZW50KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICRmaXJzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsYXN0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzRW1wdHkoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ0NhblwndCBkZXRlcm1pbmUgbGFzdCBpdGVtLiBDb2xsZWN0aW9uIGlzIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBUICRpdGVtICovCiAgICAgICAgJGl0ZW0gPSBlbmQoJHRoaXMtPmRhdGEpOwogICAgICAgIHJlc2V0KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICRpdGVtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KHN0cmluZyAkcHJvcGVydHlPck1ldGhvZCwgc3RyaW5nICRvcmRlciA9IHNlbGY6OlNPUlRfQVNDKTogQ29sbGVjdGlvbkludGVyZmFjZQogICAgewogICAgICAgIGlmICghaW5fYXJyYXkoJG9yZGVyLCBbc2VsZjo6U09SVF9BU0MsIHNlbGY6OlNPUlRfREVTQ10sIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkU29ydE9yZGVyRXhjZXB0aW9uKCdJbnZhbGlkIHNvcnQgb3JkZXIgZ2l2ZW46ICcgLiAkb3JkZXIpOwogICAgICAgIH0KCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjbG9uZSAkdGhpczsKCiAgICAgICAgdXNvcnQoCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5kYXRhLAogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBhcmFtIFQgJGEKICAgICAgICAgICAgICogQHBhcmFtIFQgJGIKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uICgkYSwgJGIpIHVzZSAoJHByb3BlcnR5T3JNZXRob2QsICRvcmRlcik6IGludCB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBtaXhlZCAkYVZhbHVlICovCiAgICAgICAgICAgICAgICAkYVZhbHVlID0gJHRoaXMtPmV4dHJhY3RWYWx1ZSgkYSwgJHByb3BlcnR5T3JNZXRob2QpOwoKICAgICAgICAgICAgICAgIC8qKiBAdmFyIG1peGVkICRiVmFsdWUgKi8KICAgICAgICAgICAgICAgICRiVmFsdWUgPSAkdGhpcy0+ZXh0cmFjdFZhbHVlKCRiLCAkcHJvcGVydHlPck1ldGhvZCk7CgogICAgICAgICAgICAgICAgcmV0dXJuICgkYVZhbHVlIDw9PiAkYlZhbHVlKSAqICgkb3JkZXIgPT09IHNlbGY6OlNPUlRfREVTQyA/IC0xIDogMSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmaWx0ZXIoY2FsbGFibGUgJGNhbGxiYWNrKTogQ29sbGVjdGlvbkludGVyZmFjZQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGNvbGxlY3Rpb24tPmRhdGEgPSBhcnJheV9tZXJnZShbXSwgYXJyYXlfZmlsdGVyKCRjb2xsZWN0aW9uLT5kYXRhLCAkY2FsbGJhY2spKTsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2hlcmUoc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kLCAkdmFsdWUpOiBDb2xsZWN0aW9uSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXIoZnVuY3Rpb24gKCRpdGVtKSB1c2UgKCRwcm9wZXJ0eU9yTWV0aG9kLCAkdmFsdWUpIHsKICAgICAgICAgICAgLyoqIEB2YXIgbWl4ZWQgJGFjY2Vzc29yVmFsdWUgKi8KICAgICAgICAgICAgJGFjY2Vzc29yVmFsdWUgPSAkdGhpcy0+ZXh0cmFjdFZhbHVlKCRpdGVtLCAkcHJvcGVydHlPck1ldGhvZCk7CgogICAgICAgICAgICByZXR1cm4gJGFjY2Vzc29yVmFsdWUgPT09ICR2YWx1ZTsKICAgICAgICB9KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwKGNhbGxhYmxlICRjYWxsYmFjayk6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oJ21peGVkJywgYXJyYXlfbWFwKCRjYWxsYmFjaywgJHRoaXMtPmRhdGEpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlmZihDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+Y29tcGFyZUNvbGxlY3Rpb25UeXBlcygkb3RoZXIpOwoKICAgICAgICAkZGlmZkF0b0IgPSBhcnJheV91ZGlmZigkdGhpcy0+ZGF0YSwgJG90aGVyLT50b0FycmF5KCksICR0aGlzLT5nZXRDb21wYXJhdG9yKCkpOwogICAgICAgICRkaWZmQnRvQSA9IGFycmF5X3VkaWZmKCRvdGhlci0+dG9BcnJheSgpLCAkdGhpcy0+ZGF0YSwgJHRoaXMtPmdldENvbXBhcmF0b3IoKSk7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGFycmF5LWtleSwgVD4gJGRpZmYgKi8KICAgICAgICAkZGlmZiA9IGFycmF5X21lcmdlKCRkaWZmQXRvQiwgJGRpZmZCdG9BKTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjbG9uZSAkdGhpczsKICAgICAgICAkY29sbGVjdGlvbi0+ZGF0YSA9ICRkaWZmOwoKICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGludGVyc2VjdChDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGhpcy0+Y29tcGFyZUNvbGxlY3Rpb25UeXBlcygkb3RoZXIpOwoKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRpbnRlcnNlY3QgKi8KICAgICAgICAkaW50ZXJzZWN0ID0gYXJyYXlfdWludGVyc2VjdCgkdGhpcy0+ZGF0YSwgJG90aGVyLT50b0FycmF5KCksICR0aGlzLT5nZXRDb21wYXJhdG9yKCkpOwoKICAgICAgICAkY29sbGVjdGlvbiA9IGNsb25lICR0aGlzOwogICAgICAgICRjb2xsZWN0aW9uLT5kYXRhID0gJGludGVyc2VjdDsKCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtZXJnZShDb2xsZWN0aW9uSW50ZXJmYWNlIC4uLiRjb2xsZWN0aW9ucyk6IENvbGxlY3Rpb25JbnRlcmZhY2UKICAgIHsKICAgICAgICAkbWVyZ2VkQ29sbGVjdGlvbiA9IGNsb25lICR0aGlzOwoKICAgICAgICBmb3JlYWNoICgkY29sbGVjdGlvbnMgYXMgJGluZGV4ID0+ICRjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgIGlmICghJGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBzdGF0aWMpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb2xsZWN0aW9uTWlzbWF0Y2hFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignQ29sbGVjdGlvbiB3aXRoIGluZGV4ICVkIG11c3QgYmUgb2YgdHlwZSAlcycsICRpbmRleCwgc3RhdGljOjpjbGFzcyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGdlbmVyaWNzIChDb2xsZWN0aW9uLnBocCwgU2V0LnBocCwgZXRjKSwKICAgICAgICAgICAgLy8gd2UgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCB0eXBlcyBtYXRjaCBlYWNoIG90aGVyCiAgICAgICAgICAgIGlmICgkdGhpcy0+Z2V0VW5pZm9ybVR5cGUoJGNvbGxlY3Rpb24pICE9PSAkdGhpcy0+Z2V0VW5pZm9ybVR5cGUoJHRoaXMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgIHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb2xsZWN0aW9uIGl0ZW1zIGluIGNvbGxlY3Rpb24gd2l0aCBpbmRleCAlZCBtdXN0IGJlIG9mIHR5cGUgJXMnLAogICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb2xsZWN0aW9uIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNfaW50KCRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lcmdlZENvbGxlY3Rpb25bXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG1lcmdlZENvbGxlY3Rpb25bJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbWVyZ2VkQ29sbGVjdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWydhbGxvd2VkX2NsYXNzZXMnID0+IFskdGhpcy0+Z2V0VHlwZSgpXV0pOwoKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gJG90aGVyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY29tcGFyZUNvbGxlY3Rpb25UeXBlcyhDb2xsZWN0aW9uSW50ZXJmYWNlICRvdGhlcik6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISRvdGhlciBpbnN0YW5jZW9mIHN0YXRpYykgewogICAgICAgICAgICB0aHJvdyBuZXcgQ29sbGVjdGlvbk1pc21hdGNoRXhjZXB0aW9uKCdDb2xsZWN0aW9uIG11c3QgYmUgb2YgdHlwZSAnIC4gc3RhdGljOjpjbGFzcyk7CiAgICAgICAgfQoKICAgICAgICAvLyBXaGVuIHVzaW5nIGdlbmVyaWNzIChDb2xsZWN0aW9uLnBocCwgU2V0LnBocCwgZXRjKSwKICAgICAgICAvLyB3ZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGludGVybmFsIHR5cGVzIG1hdGNoIGVhY2ggb3RoZXIKICAgICAgICBpZiAoJHRoaXMtPmdldFVuaWZvcm1UeXBlKCRvdGhlcikgIT09ICR0aGlzLT5nZXRVbmlmb3JtVHlwZSgkdGhpcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IENvbGxlY3Rpb25NaXNtYXRjaEV4Y2VwdGlvbignQ29sbGVjdGlvbiBpdGVtcyBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENvbXBhcmF0b3IoKTogQ2xvc3VyZQogICAgewogICAgICAgIHJldHVybiAvKioKICAgICAgICAgICAgICogQHBhcmFtIFQgJGEKICAgICAgICAgICAgICogQHBhcmFtIFQgJGIKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uICgkYSwgJGIpOiBpbnQgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR3byB2YWx1ZXMgYXJlIG9iamVjdCwgd2UgY29udmVydCB0aGVtIHRvIHVuaXF1ZSBzY2FsYXJzLgogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgbWl4ZWQgdmFsdWVzICh1bmxpa2VseSkgd2hlcmUgc29tZSBhcmUgb2JqZWN0cwogICAgICAgICAgICAgICAgLy8gYW5kIHNvbWUgYXJlIG5vdCwgd2UgbGVhdmUgdGhlbSBhcyB0aGV5IGFyZS4KICAgICAgICAgICAgICAgIC8vIFRoZSBjb21wYXJhdG9yIHNob3VsZCBzdGlsbCB3b3JrIGFuZCB0aGUgcmVzdWx0IG9mICRhIDwgJGIgc2hvdWxkCiAgICAgICAgICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGJ1dCB1bnByZWRpY3RhYmxlIHNpbmNlIG5vdCBkb2N1bWVudGVkLgogICAgICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkYSkgJiYgaXNfb2JqZWN0KCRiKSkgewogICAgICAgICAgICAgICAgICAgICRhID0gc3BsX29iamVjdF9pZCgkYSk7CiAgICAgICAgICAgICAgICAgICAgJGIgPSBzcGxfb2JqZWN0X2lkKCRiKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJGEgPT09ICRiID8gMCA6ICgkYSA8ICRiID8gMSA6IC0xKTsKICAgICAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBDb2xsZWN0aW9uSW50ZXJmYWNlPG1peGVkPiAkY29sbGVjdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFVuaWZvcm1UeXBlKENvbGxlY3Rpb25JbnRlcmZhY2UgJGNvbGxlY3Rpb24pOiBzdHJpbmcKICAgIHsKICAgICAgICBzd2l0Y2ggKCRjb2xsZWN0aW9uLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2ludCc7CiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgICAgcmV0dXJuICdib29sJzsKICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAgIHJldHVybiAnZmxvYXQnOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLT5nZXRUeXBlKCk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/AbstractSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGEgY29sbGVjdGlvbiB0aGF0IGRvZXMgbm90CiAqIGFsbG93IGR1cGxpY2F0ZWQgdmFsdWVzIChhIHNldCksIHRvIG1pbmltaXplIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50CiAqIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBjb2xsZWN0aW9uLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb248VD4KICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2V0IGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uCnsKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zKCRlbGVtZW50KSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcGFyZW50OjphZGQoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb250YWlucygkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6b2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/ArrayInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIEFycmF5QWNjZXNzOwp1c2UgQ291bnRhYmxlOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBTZXJpYWxpemFibGU7CgovKioKICogYEFycmF5SW50ZXJmYWNlYCBwcm92aWRlcyB0cmF2ZXJzYWJsZSBhcnJheSBmdW5jdGlvbmFsaXR5IHRvIGRhdGEgdHlwZXMuCiAqCiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFycmF5QWNjZXNzPGFycmF5LWtleSwgVD4KICogQGV4dGVuZHMgSXRlcmF0b3JBZ2dyZWdhdGU8YXJyYXkta2V5LCBUPgogKi8KaW50ZXJmYWNlIEFycmF5SW50ZXJmYWNlIGV4dGVuZHMKICAgIEFycmF5QWNjZXNzLAogICAgQ291bnRhYmxlLAogICAgSXRlcmF0b3JBZ2dyZWdhdGUsCiAgICBTZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBSZW1vdmVzIGFsbCBpdGVtcyBmcm9tIHRoaXMgYXJyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpOiB2b2lkOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5hdGl2ZSBQSFAgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBhcnJheSBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxhcnJheS1rZXksIFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5OwoKICAgIC8qKgogICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBhcnJheSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Collection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgY29sbGVjdGlvbiByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygb2JqZWN0cy4KICoKICogRWFjaCBvYmplY3QgaW4gdGhlIGNvbGxlY3Rpb24gaXMgb2YgYSBzcGVjaWZpYywgZGVmaW5lZCB0eXBlLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IGltcGxlbWVudGF0aW9uIG9mIGBDb2xsZWN0aW9uSW50ZXJmYWNlYCwgcHJvdmlkZWQgZm9yCiAqIHRoZSBzYWtlIG9mIGNvbnZlbmllbmNlLgogKgogKiBFeGFtcGxlIHVzYWdlOgogKgogKiBgYGAgcGhwCiAqICRjb2xsZWN0aW9uID0gbmV3IFxSYW1zZXlcQ29sbGVjdGlvblxDb2xsZWN0aW9uKCdNeVxcRm9vJyk7CiAqICRjb2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqICRjb2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqCiAqIGZvcmVhY2ggKCRjb2xsZWN0aW9uIGFzICRmb28pIHsKICogICAgIC8vIERvIHNvbWV0aGluZyB3aXRoICRmb28KICogfQogKiBgYGAKICoKICogSXQgaXMgcHJlZmVyYWJsZSB0byBzdWJjbGFzcyBgQWJzdHJhY3RDb2xsZWN0aW9uYCB0byBjcmVhdGUgeW91ciBvd24gdHlwZWQKICogY29sbGVjdGlvbnMuIEZvciBleGFtcGxlOgogKgogKiBgYGAgcGhwCiAqIG5hbWVzcGFjZSBNeVxGb287CiAqCiAqIGNsYXNzIEZvb0NvbGxlY3Rpb24gZXh0ZW5kcyBcUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uCiAqIHsKICogICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICogICAgIHsKICogICAgICAgICByZXR1cm4gJ015XFxGb28nOwogKiAgICAgfQogKiB9CiAqIGBgYAogKgogKiBBbmQgdGhlbiB1c2UgaXQgc2ltaWxhcmx5IHRvIHRoZSBlYXJsaWVyIGV4YW1wbGU6CiAqCiAqIGBgYCBwaHAKICogJGZvb0NvbGxlY3Rpb24gPSBuZXcgXE15XEZvb1xGb29Db2xsZWN0aW9uKCk7CiAqICRmb29Db2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqICRmb29Db2xsZWN0aW9uLT5hZGQobmV3IFxNeVxGb28oKSk7CiAqCiAqIGZvcmVhY2ggKCRmb29Db2xsZWN0aW9uIGFzICRmb28pIHsKICogICAgIC8vIERvIHNvbWV0aGluZyB3aXRoICRmb28KICogfQogKiBgYGAKICoKICogVGhlIGJlbmVmaXQgd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgeW91IG1heSBkbyB0eXBlLWNoZWNraW5nIG9uIHRoZQogKiBjb2xsZWN0aW9uIG9iamVjdDoKICoKICogYGBgIHBocAogKiBpZiAoJGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBcTXlcRm9vXEZvb0NvbGxlY3Rpb24pIHsKICogICAgIC8vIHRoZSBjb2xsZWN0aW9uIGlzIGEgY29sbGVjdGlvbiBvZiBNeVxGb28gb2JqZWN0cwogKiB9CiAqIGBgYAogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb248VD4KICovCmNsYXNzIENvbGxlY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEEgY29sbGVjdGlvbidzIHR5cGUgaXMgaW1tdXRhYmxlIG9uY2UgaXQgaXMgc2V0LiBGb3IgdGhpcyByZWFzb24sIHRoaXMKICAgICAqIHByb3BlcnR5IGlzIHNldCBwcml2YXRlLgogICAgICovCiAgICBwcml2YXRlIHN0cmluZyAkY29sbGVjdGlvblR5cGU7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgY29sbGVjdGlvbiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xsZWN0aW9uVHlwZSBUaGUgdHlwZSAoRlFDTikgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAgICAqICAgICBjb2xsZWN0aW9uLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEgVGhlIGluaXRpYWwgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGNvbGxlY3Rpb25UeXBlLCBhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5jb2xsZWN0aW9uVHlwZSA9ICRjb2xsZWN0aW9uVHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbGxlY3Rpb25UeXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/CollectionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgY29sbGVjdGlvbiByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygb2JqZWN0cywga25vd24gYXMgaXRzIGVsZW1lbnRzLgogKgogKiBTb21lIGNvbGxlY3Rpb25zIGFsbG93IGR1cGxpY2F0ZSBlbGVtZW50cyBhbmQgb3RoZXJzIGRvIG5vdC4gU29tZSBhcmUgb3JkZXJlZAogKiBhbmQgb3RoZXJzIHVub3JkZXJlZC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBDb2xsZWN0aW9uSW50ZXJmYWNlIGV4dGVuZHMgQXJyYXlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBBc2NlbmRpbmcgc29ydCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09SVF9BU0MgPSAnYXNjJzsKCiAgICAvKioKICAgICAqIERlc2NlbmRpbmcgc29ydCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09SVF9ERVNDID0gJ2Rlc2MnOwoKICAgIC8qKgogICAgICogRW5zdXJlcyB0aGF0IHRoaXMgY29sbGVjdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgKG9wdGlvbmFsCiAgICAgKiBvcGVyYXRpb24pLgogICAgICoKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsLgogICAgICogKFJldHVybnMgYGZhbHNlYCBpZiB0aGlzIGNvbGxlY3Rpb24gZG9lcyBub3QgcGVybWl0IGR1cGxpY2F0ZXMgYW5kCiAgICAgKiBhbHJlYWR5IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4pCiAgICAgKgogICAgICogQ29sbGVjdGlvbnMgdGhhdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIG1heSBwbGFjZSBsaW1pdGF0aW9ucyBvbiB3aGF0CiAgICAgKiBlbGVtZW50cyBtYXkgYmUgYWRkZWQgdG8gdGhpcyBjb2xsZWN0aW9uLiBJbiBwYXJ0aWN1bGFyLCBzb21lCiAgICAgKiBjb2xsZWN0aW9ucyB3aWxsIHJlZnVzZSB0byBhZGQgYG51bGxgIGVsZW1lbnRzLCBhbmQgb3RoZXJzIHdpbGwgaW1wb3NlCiAgICAgKiByZXN0cmljdGlvbnMgb24gdGhlIHR5cGUgb2YgZWxlbWVudHMgdGhhdCBtYXkgYmUgYWRkZWQuIENvbGxlY3Rpb24KICAgICAqIGNsYXNzZXMgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSBpbiB0aGVpciBkb2N1bWVudGF0aW9uIGFueSByZXN0cmljdGlvbnMKICAgICAqIG9uIHdoYXQgZWxlbWVudHMgbWF5IGJlIGFkZGVkLgogICAgICoKICAgICAqIElmIGEgY29sbGVjdGlvbiByZWZ1c2VzIHRvIGFkZCBhIHBhcnRpY3VsYXIgZWxlbWVudCBmb3IgYW55IHJlYXNvbiBvdGhlcgogICAgICogdGhhbiB0aGF0IGl0IGFscmVhZHkgY29udGFpbnMgdGhlIGVsZW1lbnQsIGl0IG11c3QgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgKiAocmF0aGVyIHRoYW4gcmV0dXJuaW5nIGBmYWxzZWApLiBUaGlzIHByZXNlcnZlcyB0aGUgaW52YXJpYW50IHRoYXQgYQogICAgICogY29sbGVjdGlvbiBhbHdheXMgY29udGFpbnMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgY29sbGVjdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2sgd2hldGhlciB0aGUgY29sbGVjdGlvbiBjb250YWlucy4KICAgICAqIEBwYXJhbSBib29sICRzdHJpY3QgV2hldGhlciB0byBwZXJmb3JtIGEgc3RyaWN0IHR5cGUgY2hlY2sgb24gdGhlIHZhbHVlLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMoJGVsZW1lbnQsIGJvb2wgJHN0cmljdCA9IHRydWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2xsZWN0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIHRoaXMgY29sbGVjdGlvbiwKICAgICAqIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gcmVtb3ZlIGZyb20gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiBhbiBlbGVtZW50IHdhcyByZW1vdmVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QgVGhlIHByb3BlcnR5IG9yIG1ldGhvZCBuYW1lIHRvIGZpbHRlciBieS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGxpc3Q8bWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW4oc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gVAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxhc3QgaXRlbSBvZiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3QoKTsKCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGNvbGxlY3Rpb24gYnkgYSBwcm9wZXJ0eSBvciBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gc29ydCBvcmRlci4KICAgICAqCiAgICAgKiBUaGlzIHdpbGwgYWx3YXlzIGxlYXZlIHRoZSBvcmlnaW5hbCBjb2xsZWN0aW9uIHVudG91Y2hlZCBhbmQgd2lsbCByZXR1cm4KICAgICAqIGEgbmV3IG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kIFRoZSBwcm9wZXJ0eSBvciBtZXRob2QgdG8gc29ydCBieS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZGVyIFRoZSBzb3J0IG9yZGVyIGZvciB0aGUgcmVzdWx0aW5nIGNvbGxlY3Rpb24gKG9uZSBvZgogICAgICogICAgIHRoaXMgaW50ZXJmYWNlJ3MgYFNPUlRfKmAgY29uc3RhbnRzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnQoc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kLCBzdHJpbmcgJG9yZGVyID0gc2VsZjo6U09SVF9BU0MpOiBzZWxmOwoKICAgIC8qKgogICAgICogRmlsdGVyIG91dCBpdGVtcyBvZiB0aGUgY29sbGVjdGlvbiB3aGljaCBkb24ndCBtYXRjaCB0aGUgY3JpdGVyaWEgb2YKICAgICAqIGdpdmVuIGNhbGxiYWNrLgogICAgICoKICAgICAqIFRoaXMgd2lsbCBhbHdheXMgbGVhdmUgdGhlIG9yaWdpbmFsIGNvbGxlY3Rpb24gdW50b3VjaGVkIGFuZCB3aWxsIHJldHVybgogICAgICogYSBuZXcgb25lLgogICAgICoKICAgICAqIFNlZSB0aGUge0BsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcnJheS1maWx0ZXIucGhwIFBIUCBhcnJheV9maWx0ZXIoKSBkb2N1bWVudGF0aW9ufQogICAgICogZm9yIGV4YW1wbGVzIG9mIGhvdyB0aGUgYCRjYWxsYmFja2AgcGFyYW1ldGVyIHdvcmtzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUKTpib29sICRjYWxsYmFjayBBIGNhbGxhYmxlIHRvIHVzZSBmb3IgZmlsdGVyaW5nIGVsZW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gQ29sbGVjdGlvbkludGVyZmFjZTxUPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKGNhbGxhYmxlICRjYWxsYmFjayk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgY29sbGVjdGlvbiB3aGVyZSBpdGVtcyBtYXRjaCB0aGUgY3JpdGVyaWEgb2YgZ2l2ZW4gY2FsbGJhY2suCiAgICAgKgogICAgICogVGhpcyB3aWxsIGFsd2F5cyBsZWF2ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbiB1bnRvdWNoZWQgYW5kIHdpbGwgcmV0dXJuCiAgICAgKiBhIG5ldyBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlPck1ldGhvZCBUaGUgcHJvcGVydHkgb3IgbWV0aG9kIHRvIGV2YWx1YXRlLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+CiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZShzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QsICR2YWx1ZSk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBBcHBseSBhIGdpdmVuIGNhbGxiYWNrIG1ldGhvZCBvbiBlYWNoIGl0ZW0gb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogVGhpcyB3aWxsIGFsd2F5cyBsZWF2ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbiB1bnRvdWNoZWQuIFRoZSBuZXcKICAgICAqIGNvbGxlY3Rpb24gaXMgY3JlYXRlZCBieSBtYXBwaW5nIHRoZSBjYWxsYmFjayB0byBlYWNoIGl0ZW0gb2YgdGhlCiAgICAgKiBvcmlnaW5hbCBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIFNlZSB0aGUge0BsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcnJheS1tYXAucGhwIFBIUCBhcnJheV9tYXAoKSBkb2N1bWVudGF0aW9ufQogICAgICogZm9yIGV4YW1wbGVzIG9mIGhvdyB0aGUgYCRjYWxsYmFja2AgcGFyYW1ldGVyIHdvcmtzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUKTpUQ2FsbGJhY2tSZXR1cm4gJGNhbGxiYWNrIEEgY2FsbGFibGUgdG8gYXBwbHkgdG8gZWFjaAogICAgICogICAgIGl0ZW0gb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFRDYWxsYmFja1JldHVybj4KICAgICAqCiAgICAgKiBAdGVtcGxhdGUgVENhbGxiYWNrUmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXAoY2FsbGFibGUgJGNhbGxiYWNrKTogc2VsZjsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBjb2xsZWN0aW9uIHdpdGggZGl2ZXJnZW50IGl0ZW1zIGJldHdlZW4gY3VycmVudCBhbmQgZ2l2ZW4KICAgICAqIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gJG90aGVyIFRoZSBjb2xsZWN0aW9uIHRvIGNoZWNrIGZvciBkaXZlcmdlbnQKICAgICAqICAgICBpdGVtcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmYoQ29sbGVjdGlvbkludGVyZmFjZSAkb3RoZXIpOiBzZWxmOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBpbnRlcnNlY3RpbmcgaXRlbSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGdpdmVuCiAgICAgKiBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+ICRvdGhlciBUaGUgY29sbGVjdGlvbiB0byBjaGVjayBmb3IKICAgICAqICAgICBpbnRlcnNlY3RpbmcgaXRlbXMuCiAgICAgKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uSW50ZXJmYWNlPFQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3QoQ29sbGVjdGlvbkludGVyZmFjZSAkb3RoZXIpOiBzZWxmOwoKICAgIC8qKgogICAgICogTWVyZ2UgY3VycmVudCBpdGVtcyBhbmQgaXRlbXMgb2YgZ2l2ZW4gY29sbGVjdGlvbnMgaW50byBhIG5ldyBvbmUuCiAgICAgKgogICAgICogQHBhcmFtIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4gLi4uJGNvbGxlY3Rpb25zIFRoZSBjb2xsZWN0aW9ucyB0byBtZXJnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25JbnRlcmZhY2U8VD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlKENvbGxlY3Rpb25JbnRlcmZhY2UgLi4uJGNvbGxlY3Rpb25zKTogc2VsZjsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/DoubleEndedQueue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2VgLCB0bwogKiBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgUXVldWU8VD4KICogQGltcGxlbWVudHMgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZTxUPgogKi8KY2xhc3MgRG91YmxlRW5kZWRRdWV1ZSBleHRlbmRzIFF1ZXVlIGltcGxlbWVudHMgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEluZGV4IG9mIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwcml2YXRlIGludCAkdGFpbCA9IC0xOwoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnRhaWwrKzsKCiAgICAgICAgJHRoaXMtPmRhdGFbJHRoaXMtPnRhaWxdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgJGVsZW1lbnQgaXMgb2YgdGhlIHdyb25nIHR5cGUKICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRmlyc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJGVsZW1lbnQpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1ZhbHVlIG11c3QgYmUgb2YgdHlwZSAnIC4gJHRoaXMtPmdldFR5cGUoKSAuICc7IHZhbHVlIGlzICcKICAgICAgICAgICAgICAgIC4gJHRoaXMtPnRvb2xWYWx1ZVRvU3RyaW5nKCRlbGVtZW50KSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5pbmRleC0tOwoKICAgICAgICAkdGhpcy0+ZGF0YVskdGhpcy0+aW5kZXhdID0gJGVsZW1lbnQ7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZExhc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyRmlyc3QoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRGaXJzdCgkZWxlbWVudCk7CiAgICAgICAgfSBjYXRjaCAoSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2ZmZXJMYXN0KCRlbGVtZW50KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2ZmZXIoJGVsZW1lbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpcnN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlbW92ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUxhc3QoKQogICAgewogICAgICAgICR0YWlsID0gJHRoaXMtPnBvbGxMYXN0KCk7CgogICAgICAgIGlmICgkdGFpbCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbignQ2FuXCd0IHJldHVybiBlbGVtZW50IGZyb20gUXVldWUuIFF1ZXVlIGlzIGVtcHR5LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0YWlsOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbGxGaXJzdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb2xsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbExhc3QoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y291bnQoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICR0YWlsID0gJHRoaXNbJHRoaXMtPnRhaWxdOwoKICAgICAgICB1bnNldCgkdGhpc1skdGhpcy0+dGFpbF0pOwogICAgICAgICR0aGlzLT50YWlsLS07CgogICAgICAgIHJldHVybiAkdGFpbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdEVsZW1lbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWxlbWVudCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RFbGVtZW50KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvdW50KCkgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oJ0NhblwndCByZXR1cm4gZWxlbWVudCBmcm9tIFF1ZXVlLiBRdWV1ZSBpcyBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskdGhpcy0+dGFpbF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVla0ZpcnN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBlZWsoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrTGFzdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyR0aGlzLT50YWlsXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBBIGxpbmVhciBjb2xsZWN0aW9uIHRoYXQgc3VwcG9ydHMgZWxlbWVudCBpbnNlcnRpb24gYW5kIHJlbW92YWwgYXQgYm90aCBlbmRzLgogKgogKiBNb3N0IGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgcGxhY2Ugbm8gZml4ZWQgbGltaXRzIG9uIHRoZQogKiBudW1iZXIgb2YgZWxlbWVudHMgdGhleSBtYXkgY29udGFpbiwgYnV0IHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzCiAqIGNhcGFjaXR5LXJlc3RyaWN0ZWQgZG91YmxlLWVuZGVkIHF1ZXVlcyBhcyB3ZWxsIGFzIHRob3NlIHdpdGggbm8gZml4ZWQgc2l6ZQogKiBsaW1pdC4KICoKICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBtZXRob2RzIHRvIGFjY2VzcyB0aGUgZWxlbWVudHMgYXQgYm90aCBlbmRzIG9mIHRoZQogKiBkb3VibGUtZW5kZWQgcXVldWUuIE1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGluc2VydCwgcmVtb3ZlLCBhbmQgZXhhbWluZSB0aGUKICogZWxlbWVudC4gRWFjaCBvZiB0aGVzZSBtZXRob2RzIGV4aXN0cyBpbiB0d28gZm9ybXM6IG9uZSB0aHJvd3MgYW4gZXhjZXB0aW9uCiAqIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIHRoZSBvdGhlciByZXR1cm5zIGEgc3BlY2lhbCB2YWx1ZSAoZWl0aGVyIGBudWxsYCBvcgogKiBgZmFsc2VgLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbikuIFRoZSBsYXR0ZXIgZm9ybSBvZiB0aGUgaW5zZXJ0IG9wZXJhdGlvbgogKiBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoIGNhcGFjaXR5LXJlc3RyaWN0ZWQgaW1wbGVtZW50YXRpb25zOyBpbgogKiBtb3N0IGltcGxlbWVudGF0aW9ucywgaW5zZXJ0IG9wZXJhdGlvbnMgY2Fubm90IGZhaWwuCiAqCiAqIFRoZSB0d2VsdmUgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUgYXJlIHN1bW1hcml6ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5TdW1tYXJ5IG9mIERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2UgbWV0aG9kczwvY2FwdGlvbj4KICogPHRoZWFkPgogKiA8dHI+CiAqIDx0aD48L3RoPgogKiA8dGggY29sc3Bhbj0yPkZpcnN0IEVsZW1lbnQgKEhlYWQpPC90aD4KICogPHRoIGNvbHNwYW49Mj5MYXN0IEVsZW1lbnQgKFRhaWwpPC90aD4KICogPC90cj4KICogPHRyPgogKiA8dGQ+PC90ZD4KICogPHRkPjxlbT5UaHJvd3MgZXhjZXB0aW9uPC9lbT48L3RkPgogKiA8dGQ+PGVtPlNwZWNpYWwgdmFsdWU8L2VtPjwvdGQ+CiAqIDx0ZD48ZW0+VGhyb3dzIGV4Y2VwdGlvbjwvZW0+PC90ZD4KICogPHRkPjxlbT5TcGVjaWFsIHZhbHVlPC9lbT48L3RkPgogKiA8L3RyPgogKiA8L3RoZWFkPgogKiA8dGJvZHk+CiAqIDx0cj4KICogPHRoPkluc2VydDwvdGg+CiAqIDx0ZD48Y29kZT5hZGRGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5vZmZlckZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPmFkZExhc3QoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+b2ZmZXJMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+UmVtb3ZlPC90aD4KICogPHRkPjxjb2RlPnJlbW92ZUZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBvbGxGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVMYXN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBvbGxMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+RXhhbWluZTwvdGg+CiAqIDx0ZD48Y29kZT5maXJzdEVsZW1lbnQoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+cGVla0ZpcnN0KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPmxhc3RFbGVtZW50KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWtMYXN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPC90Ym9keT4KICogPC90YWJsZT4KICoKICogVGhpcyBpbnRlcmZhY2UgZXh0ZW5kcyB0aGUgYFF1ZXVlSW50ZXJmYWNlYC4gV2hlbiBhIGRvdWJsZS1lbmRlZCBxdWV1ZSBpcwogKiB1c2VkIGFzIGEgcXVldWUsIEZJRk8gKGZpcnN0LWluLWZpcnN0LW91dCkgYmVoYXZpb3IgcmVzdWx0cy4gRWxlbWVudHMgYXJlCiAqIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGRvdWJsZS1lbmRlZCBxdWV1ZSBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBiZWdpbm5pbmcuCiAqIFRoZSBtZXRob2RzIGluaGVyaXRlZCBmcm9tIHRoZSBgUXVldWVJbnRlcmZhY2VgIGFyZSBwcmVjaXNlbHkgZXF1aXZhbGVudCB0bwogKiBgRG91YmxlRW5kZWRRdWV1ZUludGVyZmFjZWAgbWV0aG9kcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5Db21wYXJpc29uIG9mIFF1ZXVlSW50ZXJmYWNlIGFuZCBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGg+UXVldWVJbnRlcmZhY2UgTWV0aG9kPC90aD4KICogPHRoPkRvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2UgTWV0aG9kPC90aD4KICogPC90cj4KICogPC90aGVhZD4KICogPHRib2R5PgogKiA8dHI+CiAqIDx0ZD48Y29kZT5hZGQoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+YWRkTGFzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPm9mZmVyKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPm9mZmVyTGFzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPnJlbW92ZSgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxjb2RlPnBvbGwoKTwvY29kZT48L3RkPgogKiA8dGQ+PGNvZGU+cG9sbEZpcnN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGQ+PGNvZGU+ZWxlbWVudCgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5maXJzdEVsZW1lbnQoKTwvY29kZT48L3RkPgogKiA8L3RyPgogKiA8dHI+CiAqIDx0ZD48Y29kZT5wZWVrKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWtGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDwvdGJvZHk+CiAqIDwvdGFibGU+CiAqCiAqIERvdWJsZS1lbmRlZCBxdWV1ZXMgY2FuIGFsc28gYmUgdXNlZCBhcyBMSUZPIChsYXN0LWluLWZpcnN0LW91dCkgc3RhY2tzLiBXaGVuCiAqIGEgZG91YmxlLWVuZGVkIHF1ZXVlIGlzIHVzZWQgYXMgYSBzdGFjaywgZWxlbWVudHMgYXJlIHB1c2hlZCBhbmQgcG9wcGVkIGZyb20KICogdGhlIGJlZ2lubmluZyBvZiB0aGUgZG91YmxlLWVuZGVkIHF1ZXVlLiBTdGFjayBjb25jZXB0cyBhcmUgcHJlY2lzZWx5CiAqIGVxdWl2YWxlbnQgdG8gYERvdWJsZUVuZGVkUXVldWVJbnRlcmZhY2VgIG1ldGhvZHMgYXMgaW5kaWNhdGVkIGluIHRoZSB0YWJsZQogKiBiZWxvdzoKICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5Db21wYXJpc29uIG9mIHN0YWNrIGNvbmNlcHRzIGFuZCBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGg+U3RhY2sgY29uY2VwdDwvdGg+CiAqIDx0aD5Eb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIE1ldGhvZDwvdGg+CiAqIDwvdHI+CiAqIDwvdGhlYWQ+CiAqIDx0Ym9keT4KICogPHRyPgogKiA8dGQ+PGVtPnB1c2g8L2VtPjwvdGQ+CiAqIDx0ZD48Y29kZT5hZGRGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxlbT5wb3A8L2VtPjwvdGQ+CiAqIDx0ZD48Y29kZT5yZW1vdmVGaXJzdCgpPC9jb2RlPjwvdGQ+CiAqIDwvdHI+CiAqIDx0cj4KICogPHRkPjxlbT5wZWVrPC9lbT48L3RkPgogKiA8dGQ+PGNvZGU+cGVla0ZpcnN0KCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPC90Ym9keT4KICogPC90YWJsZT4KICoKICogTm90ZSB0aGF0IHRoZSBgcGVlaygpYCBtZXRob2Qgd29ya3MgZXF1YWxseSB3ZWxsIHdoZW4gYSBkb3VibGUtZW5kZWQgcXVldWUgaXMKICogdXNlZCBhcyBhIHF1ZXVlIG9yIGEgc3RhY2s7IGluIGVpdGhlciBjYXNlLCBlbGVtZW50cyBhcmUgZHJhd24gZnJvbSB0aGUKICogYmVnaW5uaW5nIG9mIHRoZSBkb3VibGUtZW5kZWQgcXVldWUuCiAqCiAqIFdoaWxlIGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBzdHJpY3RseSByZXF1aXJlZAogKiB0byBwcm9oaWJpdCB0aGUgaW5zZXJ0aW9uIG9mIGBudWxsYCBlbGVtZW50cywgdGhleSBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0bwogKiBkbyBzby4gVXNlcnMgb2YgYW55IGBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBhbGxvdwogKiBgbnVsbGAgZWxlbWVudHMgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgKm5vdCogdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCiAqIGFiaWxpdHkgdG8gaW5zZXJ0IG51bGxzLiBUaGlzIGlzIHNvIGJlY2F1c2UgYG51bGxgIGlzIHVzZWQgYXMgYSBzcGVjaWFsCiAqIHJldHVybiB2YWx1ZSBieSB2YXJpb3VzIG1ldGhvZHMgdG8gaW5kaWNhdGVkIHRoYXQgdGhlIGRvdWJsZS1lbmRlZCBxdWV1ZSBpcwogKiBlbXB0eS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgUXVldWVJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBEb3VibGVFbmRlZFF1ZXVlSW50ZXJmYWNlIGV4dGVuZHMgUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhpcyBxdWV1ZSBpZiBpdCBpcwogICAgICogcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkgd2l0aG91dCB2aW9sYXRpbmcgY2FwYWNpdHkgcmVzdHJpY3Rpb25zLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgYSBjYXBhY2l0eS1yZXN0cmljdGVkIGRvdWJsZS1lbmRlZCBxdWV1ZSwgaXQgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYG9mZmVyRmlyc3QoKWAgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgZnJvbnQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgYHRydWVgIGlmIHRoaXMgcXVldWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2FsbC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgYSBxdWV1ZSByZWZ1c2VzIHRvIGFkZCBhIHBhcnRpY3VsYXIgZWxlbWVudAogICAgICogICAgIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gdGhhdCBpdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBlbGVtZW50LgogICAgICogICAgIEltcGxlbWVudGF0aW9ucyBzaG91bGQgdXNlIGEgbW9yZS1zcGVjaWZpYyBleGNlcHRpb24gdGhhdCBleHRlbmRzCiAgICAgKiAgICAgYFxSdW50aW1lRXhjZXB0aW9uYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIGFkZEZpcnN0KCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIEluc2VydHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhpcyBxdWV1ZSBpZiBpdCBpcyBwb3NzaWJsZQogICAgICogdG8gZG8gc28gaW1tZWRpYXRlbHkgd2l0aG91dCB2aW9sYXRpbmcgY2FwYWNpdHkgcmVzdHJpY3Rpb25zLgogICAgICoKICAgICAqIFdoZW4gdXNpbmcgYSBjYXBhY2l0eS1yZXN0cmljdGVkIGRvdWJsZS1lbmRlZCBxdWV1ZSwgaXQgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYG9mZmVyTGFzdCgpYCBtZXRob2QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgYWRkKClgLgogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgZW5kIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQKICAgICAqICAgICBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoYXQgaXQgYWxyZWFkeSBjb250YWlucyB0aGUgZWxlbWVudC4KICAgICAqICAgICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBhIG1vcmUtc3BlY2lmaWMgZXhjZXB0aW9uIHRoYXQgZXh0ZW5kcwogICAgICogICAgIGBcUnVudGltZUV4Y2VwdGlvbmAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRMYXN0KCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIEluc2VydHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGlzIHF1ZXVlIGlmIGl0IGlzCiAgICAgKiBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseSB3aXRob3V0IHZpb2xhdGluZyBjYXBhY2l0eSByZXN0cmljdGlvbnMuCiAgICAgKgogICAgICogV2hlbiB1c2luZyBhIGNhcGFjaXR5LXJlc3RyaWN0ZWQgcXVldWUsIHRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseQogICAgICogcHJlZmVyYWJsZSB0byBgYWRkRmlyc3QoKWAsIHdoaWNoIGNhbiBmYWlsIHRvIGluc2VydCBhbiBlbGVtZW50IG9ubHkgYnkKICAgICAqIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQgdG8gdGhlIGZyb250IG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGUgZWxlbWVudCB3YXMgYWRkZWQgdG8gdGhpcyBxdWV1ZSwgZWxzZSBgZmFsc2VgLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gb2ZmZXJGaXJzdCgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoaXMgcXVldWUgaWYgaXQgaXMgcG9zc2libGUKICAgICAqIHRvIGRvIHNvIGltbWVkaWF0ZWx5IHdpdGhvdXQgdmlvbGF0aW5nIGNhcGFjaXR5IHJlc3RyaWN0aW9ucy4KICAgICAqCiAgICAgKiBXaGVuIHVzaW5nIGEgY2FwYWNpdHktcmVzdHJpY3RlZCBxdWV1ZSwgdGhpcyBtZXRob2QgaXMgZ2VuZXJhbGx5CiAgICAgKiBwcmVmZXJhYmxlIHRvIGBhZGRMYXN0KClgIHdoaWNoIGNhbiBmYWlsIHRvIGluc2VydCBhbiBlbGVtZW50IG9ubHkgYnkKICAgICAqIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQgdG8gdGhlIGVuZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvIHRoaXMgcXVldWUsIGVsc2UgYGZhbHNlYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyTGFzdCgkZWxlbWVudCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGxGaXJzdCgpYCBvbmx5IGluIHRoYXQgaXQgdGhyb3dzIGFuCiAgICAgKiBleGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpcnN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGxMYXN0KClgIG9ubHkgaW4gdGhhdCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgKiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHRocm93cyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVMYXN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAgaWYgdGhpcwogICAgICogcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2xsRmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLCBvciByZXR1cm5zIGBudWxsYCBpZiB0aGlzCiAgICAgKiBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLCBvciBgbnVsbGAgaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbGxMYXN0KCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMsIGJ1dCBkb2VzIG5vdCByZW1vdmUsIHRoZSBoZWFkIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBwZWVrRmlyc3QoKWAgb25seSBpbiB0aGF0IGl0IHRocm93cyBhbgogICAgICogZXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUIHRoZSBoZWFkIG9mIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHRocm93cyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdEVsZW1lbnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBlZWtMYXN0KClgIG9ubHkgaW4gdGhhdCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgKiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgdGFpbCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdEVsZW1lbnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrRmlyc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIHRhaWwgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZWVrTGFzdCgpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gb3BlcmF0ZSBvbiBjb2xsZWN0aW9ucyBvZiBkaWZmZXJpbmcgdHlwZXMuCiAqLwpjbGFzcyBDb2xsZWN0aW9uTWlzbWF0Y2hFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgYW4gYXJndW1lbnQgaXMgbm90IG9mIHRoZSBleHBlY3RlZCB0eXBlLgogKi8KY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIGEgc29ydCBvcmRlciB0aGF0IGlzIG5vdCByZWNvZ25pemVkLgogKi8KY2xhc3MgSW52YWxpZFNvcnRPcmRlckV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/NoSuchElementException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGFuIGVsZW1lbnQgdGhhdCBkb2VzIG5vdCBleGlzdC4KICovCmNsYXNzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBhbiBlbGVtZW50IG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGNvbGxlY3Rpb24uCiAqLwpjbGFzcyBPdXRPZkJvdW5kc0V4Y2VwdGlvbiBleHRlbmRzIFxPdXRPZkJvdW5kc0V4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCiAqLwpjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Exception/ValueExtractionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gZXh0cmFjdCBhIHZhbHVlIGZvciBhIG1ldGhvZCBvciBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IGV4aXN0LgogKi8KY2xhc3MgVmFsdWVFeHRyYWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/GenericArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIGBHZW5lcmljQXJyYXlgIHJlcHJlc2VudHMgYSBzdGFuZGFyZCBhcnJheSBvYmplY3QuCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0QXJyYXk8bWl4ZWQ+CiAqLwpjbGFzcyBHZW5lcmljQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdEFycmF5CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AbstractMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxBYnN0cmFjdEFycmF5Owp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5czsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gdmFyX2V4cG9ydDsKCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYE1hcEludGVyZmFjZWAsIHRvIG1pbmltaXplIHRoZQogKiBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdEFycmF5PFQ+CiAqIEBpbXBsZW1lbnRzIE1hcEludGVyZmFjZTxUPgogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RNYXAgZXh0ZW5kcyBBYnN0cmFjdEFycmF5IGltcGxlbWVudHMgTWFwSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRvZmZzZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNYXAgZWxlbWVudHMgYXJlIGtleS92YWx1ZSBwYWlyczsgYSBrZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgJwogICAgICAgICAgICAgICAgLiAndmFsdWUgJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zS2V5KCRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zVmFsdWUoJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkdmFsdWUsICR0aGlzLT5kYXRhLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgka2V5LCAkZGVmYXVsdFZhbHVlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jb250YWluc0tleSgka2V5KSkgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpc1ska2V5XTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXQoJGtleSwgJHZhbHVlKQogICAgewogICAgICAgICRwcmV2aW91c1ZhbHVlID0gJHRoaXMtPmdldCgka2V5KTsKICAgICAgICAkdGhpc1ska2V5XSA9ICR2YWx1ZTsKCiAgICAgICAgcmV0dXJuICRwcmV2aW91c1ZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dElmQWJzZW50KCRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICAkY3VycmVudFZhbHVlID0gJHRoaXMtPmdldCgka2V5KTsKCiAgICAgICAgaWYgKCRjdXJyZW50VmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN1cnJlbnRWYWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGtleSkKICAgIHsKICAgICAgICAkcHJldmlvdXNWYWx1ZSA9ICR0aGlzLT5nZXQoJGtleSk7CiAgICAgICAgdW5zZXQoJHRoaXNbJGtleV0pOwoKICAgICAgICByZXR1cm4gJHByZXZpb3VzVmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlSWYoJGtleSwgJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+Z2V0KCRrZXkpID09PSAkdmFsdWUpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXNbJGtleV0pOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZSgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgJGN1cnJlbnRWYWx1ZSA9ICR0aGlzLT5nZXQoJGtleSk7CgogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNLZXkoJGtleSkpIHsKICAgICAgICAgICAgJHRoaXNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN1cnJlbnRWYWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlSWYoJGtleSwgJG9sZFZhbHVlLCAkbmV3VmFsdWUpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5nZXQoJGtleSkgPT09ICRvbGRWYWx1ZSkgewogICAgICAgICAgICAkdGhpc1ska2V5XSA9ICRuZXdWYWx1ZTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AbstractTypedMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiB2YXJfZXhwb3J0OwoKLyoqCiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgVHlwZWRNYXBJbnRlcmZhY2VgLCB0bwogKiBtaW5pbWl6ZSB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHRlbXBsYXRlIEsgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUCiAqIEBleHRlbmRzIEFic3RyYWN0TWFwPFQ+CiAqIEBpbXBsZW1lbnRzIFR5cGVkTWFwSW50ZXJmYWNlPFQ+CiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR5cGVkTWFwIGV4dGVuZHMgQWJzdHJhY3RNYXAgaW1wbGVtZW50cyBUeXBlZE1hcEludGVyZmFjZQp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBLfG51bGwgJG9mZnNldAogICAgICogQHBhcmFtIFQgJHZhbHVlCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCRvZmZzZXQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdNYXAgZWxlbWVudHMgYXJlIGtleS92YWx1ZSBwYWlyczsgYSBrZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgJwogICAgICAgICAgICAgICAgLiAndmFsdWUgJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tUeXBlKCR0aGlzLT5nZXRLZXlUeXBlKCksICRvZmZzZXQpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0tleSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRLZXlUeXBlKCkgLiAnOyBrZXkgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJG9mZnNldCksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmNoZWNrVHlwZSgkdGhpcy0+Z2V0VmFsdWVUeXBlKCksICR2YWx1ZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVmFsdWUgbXVzdCBiZSBvZiB0eXBlICcgLiAkdGhpcy0+Z2V0VmFsdWVUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCi8qKgogKiBgQXNzb2NpYXRpdmVBcnJheU1hcGAgcmVwcmVzZW50cyBhIHN0YW5kYXJkIGFzc29jaWF0aXZlIGFycmF5IG9iamVjdC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQWJzdHJhY3RNYXA8VD4KICovCmNsYXNzIEFzc29jaWF0aXZlQXJyYXlNYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcAp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/MapInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxBcnJheUludGVyZmFjZTsKCi8qKgogKiBBbiBvYmplY3QgdGhhdCBtYXBzIGtleXMgdG8gdmFsdWVzLgogKgogKiBBIG1hcCBjYW5ub3QgY29udGFpbiBkdXBsaWNhdGUga2V5czsgZWFjaCBrZXkgY2FuIG1hcCB0byBhdCBtb3N0IG9uZSB2YWx1ZS4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBNYXBJbnRlcmZhY2UgZXh0ZW5kcyBBcnJheUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFwIGNvbnRhaW5zIGEgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gY2hlY2sgaW4gdGhlIG1hcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zS2V5KCRrZXkpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXAgbWFwcyBvbmUgb3IgbW9yZSBrZXlzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBwZXJmb3JtcyBhIHN0cmljdCB0eXBlIGNoZWNrIG9uIHRoZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrIGluIHRoZSBtYXAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc1ZhbHVlKCR2YWx1ZSk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGtleXMgY29udGFpbmVkIGluIHRoaXMgbWFwLgogICAgICoKICAgICAqIEByZXR1cm4gbGlzdDxhcnJheS1rZXk+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCk6IGFycmF5OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgdG8gd2hpY2ggdGhlIHNwZWNpZmllZCBrZXkgaXMgbWFwcGVkLCBgbnVsbGAgaWYgdGhpcwogICAgICogbWFwIGNvbnRhaW5zIG5vIG1hcHBpbmcgZm9yIHRoZSBrZXksIG9yIChvcHRpb25hbGx5KSBgJGRlZmF1bHRWYWx1ZWAgaWYKICAgICAqIHRoaXMgbWFwIGNvbnRhaW5zIG5vIG1hcHBpbmcgZm9yIHRoZSBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmV0dXJuIGZyb20gdGhlIG1hcC4KICAgICAqIEBwYXJhbSBUfG51bGwgJGRlZmF1bHRWYWx1ZSBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgYCRrZXlgIGlzIG5vdCBmb3VuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgdmFsdWUgb3IgYG51bGxgIGlmIHRoZSBrZXkgY291bGQgbm90IGJlIGZvdW5kLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXksICRkZWZhdWx0VmFsdWUgPSBudWxsKTsKCiAgICAvKioKICAgICAqIEFzc29jaWF0ZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGluIHRoaXMgbWFwLgogICAgICoKICAgICAqIElmIHRoZSBtYXAgcHJldmlvdXNseSBjb250YWluZWQgYSBtYXBwaW5nIGZvciB0aGUga2V5LCB0aGUgb2xkIHZhbHVlIGlzCiAgICAgKiByZXBsYWNlZCBieSB0aGUgc3BlY2lmaWVkIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheS1rZXkgJGtleSBUaGUga2V5IHRvIHB1dCBvciByZXBsYWNlIGluIHRoZSBtYXAuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHN0b3JlIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgka2V5LCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogQXNzb2NpYXRlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhpcyBtYXAgb25seSBpZgogICAgICogaXQgaXMgbm90IGFscmVhZHkgc2V0LgogICAgICoKICAgICAqIElmIHRoZXJlIGlzIGFscmVhZHkgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYCRrZXlgLCB0aGlzIHJldHVybnMgdGhhdAogICAgICogdmFsdWUgd2l0aG91dCByZXBsYWNpbmcgaXQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcHV0IGluIHRoZSBtYXAuCiAgICAgKiBAcGFyYW0gVCAkdmFsdWUgVGhlIHZhbHVlIHRvIHN0b3JlIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHB1dElmQWJzZW50KCRrZXksICR2YWx1ZSk7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZvciBhIGtleSBmcm9tIHRoaXMgbWFwIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgka2V5KTsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGtleSBvbmx5IGlmIGl0IGlzIGN1cnJlbnRseSBtYXBwZWQgdG8KICAgICAqIHRoZSBzcGVjaWZpZWQgdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBwZXJmb3JtcyBhIHN0cmljdCB0eXBlIGNoZWNrIG9uIHRoZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkta2V5ICRrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgbWFwLgogICAgICogQHBhcmFtIFQgJHZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHJlbW92ZWQuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVJZigka2V5LCAkdmFsdWUpOiBib29sOwoKICAgIC8qKgogICAgICogUmVwbGFjZXMgdGhlIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGtleSBvbmx5IGlmIGl0IGlzIGN1cnJlbnRseSBtYXBwZWQKICAgICAqIHRvIHNvbWUgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVwbGFjZS4KICAgICAqIEBwYXJhbSBUICR2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgcHJldmlvdXMgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleSwgb3IgYG51bGxgIGlmCiAgICAgKiAgICAgdGhlcmUgd2FzIG5vIG1hcHBpbmcgZm9yIGAka2V5YC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2UoJGtleSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJlcGxhY2VzIHRoZSBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgb25seSBpZiBjdXJyZW50bHkgbWFwcGVkIHRvIHRoZQogICAgICogc3BlY2lmaWVkIHZhbHVlLgogICAgICoKICAgICAqIFRoaXMgcGVyZm9ybXMgYSBzdHJpY3QgdHlwZSBjaGVjayBvbiB0aGUgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5LWtleSAka2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG1hcC4KICAgICAqIEBwYXJhbSBUICRvbGRWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guCiAgICAgKiBAcGFyYW0gVCAkbmV3VmFsdWUgVGhlIHZhbHVlIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgcmVwbGFjZWQuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlSWYoJGtleSwgJG9sZFZhbHVlLCAkbmV3VmFsdWUpOiBib29sOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/NamedParameterMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxUeXBlVHJhaXQ7CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFZhbHVlVG9TdHJpbmdUcmFpdDsKCnVzZSBmdW5jdGlvbiBhcnJheV9jb21iaW5lOwp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIHZhcl9leHBvcnQ7CgovKioKICogYE5hbWVkUGFyYW1ldGVyTWFwYCByZXByZXNlbnRzIGEgbWFwcGluZyBvZiB2YWx1ZXMgdG8gYSBzZXQgb2YgbmFtZWQga2V5cwogKiB0aGF0IG1heSBvcHRpb25hbGx5IGJlIHR5cGVkCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0TWFwPG1peGVkPgogKi8KY2xhc3MgTmFtZWRQYXJhbWV0ZXJNYXAgZXh0ZW5kcyBBYnN0cmFjdE1hcAp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIE5hbWVkIHBhcmFtZXRlcnMgZGVmaW5lZCBmb3IgdGhpcyBtYXAuCiAgICAgKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJvdGVjdGVkIGFycmF5ICRuYW1lZFBhcmFtZXRlcnM7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBOYW1lZFBhcmFtZXRlck1hcGAuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgc3RyaW5nPiAkbmFtZWRQYXJhbWV0ZXJzIFRoZSBuYW1lZCBwYXJhbWV0ZXJzIGRlZmluZWQgZm9yIHRoaXMgbWFwLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgbWl4ZWQ+ICRkYXRhIEFuIGluaXRpYWwgc2V0IG9mIGRhdGEgdG8gc2V0IG9uIHRoaXMgbWFwLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG5hbWVkUGFyYW1ldGVycywgYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+bmFtZWRQYXJhbWV0ZXJzID0gJHRoaXMtPmZpbHRlck5hbWVkUGFyYW1ldGVycygkbmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgbmFtZWQgcGFyYW1ldGVycyBzZXQgZm9yIHRoaXMgYE5hbWVkUGFyYW1ldGVyTWFwYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgc3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZWRQYXJhbWV0ZXJzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5uYW1lZFBhcmFtZXRlcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ01hcCBlbGVtZW50cyBhcmUga2V5L3ZhbHVlIHBhaXJzOyBhIGtleSBtdXN0IGJlIHByb3ZpZGVkIGZvciAnCiAgICAgICAgICAgICAgICAuICd2YWx1ZSAnIC4gdmFyX2V4cG9ydCgkdmFsdWUsIHRydWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRvZmZzZXQsICR0aGlzLT5uYW1lZFBhcmFtZXRlcnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyB0byBzZXQgdmFsdWUgZm9yIHVuY29uZmlndXJlZCBwYXJhbWV0ZXIgXCcnCiAgICAgICAgICAgICAgICAuICRvZmZzZXQgLiAnXCcnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPm5hbWVkUGFyYW1ldGVyc1skb2Zmc2V0XSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBmb3IgXCcnIC4gJG9mZnNldCAuICdcJyBtdXN0IGJlIG9mIHR5cGUgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+bmFtZWRQYXJhbWV0ZXJzWyRvZmZzZXRdIC4gJzsgdmFsdWUgaXMgJwogICAgICAgICAgICAgICAgLiAkdGhpcy0+dG9vbFZhbHVlVG9TdHJpbmcoJHZhbHVlKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gYXJyYXkgb2YgbmFtZWQgcGFyYW1ldGVycywgY29uc3RydWN0cyBhIHByb3BlciBtYXBwaW5nIG9mCiAgICAgKiBuYW1lZCBwYXJhbWV0ZXJzIHRvIHR5cGVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIHN0cmluZz4gJG5hbWVkUGFyYW1ldGVycyBUaGUgbmFtZWQgcGFyYW1ldGVycyB0byBmaWx0ZXIuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIHN0cmluZz4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbHRlck5hbWVkUGFyYW1ldGVycyhhcnJheSAkbmFtZWRQYXJhbWV0ZXJzKTogYXJyYXkKICAgIHsKICAgICAgICAkbmFtZXMgPSBbXTsKICAgICAgICAkdHlwZXMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJG5hbWVkUGFyYW1ldGVycyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoaXNfaW50KCRrZXkpKSB7CiAgICAgICAgICAgICAgICAkbmFtZXNbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgICR0eXBlc1tdID0gJ21peGVkJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRuYW1lc1tdID0gJGtleTsKICAgICAgICAgICAgICAgICR0eXBlc1tdID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXlfY29tYmluZSgkbmFtZXMsICR0eXBlcykgPzogW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/TypedMap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCnVzZSBSYW1zZXlcQ29sbGVjdGlvblxUb29sXFR5cGVUcmFpdDsKCi8qKgogKiBBIGBUeXBlZE1hcGAgcmVwcmVzZW50cyBhIG1hcCBvZiBlbGVtZW50cyB3aGVyZSBrZXkgYW5kIHZhbHVlIGFyZSB0eXBlZC4KICoKICogRWFjaCBlbGVtZW50IGlzIGlkZW50aWZpZWQgYnkgYSBrZXkgd2l0aCBkZWZpbmVkIHR5cGUgYW5kIGEgdmFsdWUgb2YgZGVmaW5lZAogKiB0eXBlLiBUaGUga2V5cyBvZiB0aGUgbWFwIG11c3QgYmUgdW5pcXVlLiBUaGUgdmFsdWVzIG9uIHRoZSBtYXAgY2FuIGJlCiAqIHJlcGVhdGVkIGJ1dCBlYWNoIHdpdGggaXRzIG93biBkaWZmZXJlbnQga2V5LgogKgogKiBUaGUgbW9zdCBjb21tb24gY2FzZSBpcyB0byB1c2UgYSBzdHJpbmcgdHlwZSBrZXksIGJ1dCBpdCdzIG5vdCBsaW1pdGVkIHRvCiAqIHRoaXMgdHlwZSBvZiBrZXlzLgogKgogKiBUaGlzIGlzIGEgZGlyZWN0IGltcGxlbWVudGF0aW9uIG9mIGBUeXBlZE1hcEludGVyZmFjZWAsIHByb3ZpZGVkIGZvciB0aGUgc2FrZQogKiBvZiBjb252ZW5pZW5jZS4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogYGBgcGhwCiAqICRtYXAgPSBuZXcgVHlwZWRNYXAoJ3N0cmluZycsIEZvbzo6Y2xhc3MpOwogKiAkbWFwWyd4J10gPSBuZXcgRm9vKCk7CiAqIGZvcmVhY2ggKCRtYXAgYXMgJGtleSA9PiAkdmFsdWUpIHsKICogICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoICRrZXksIGl0IHdpbGwgYmUgYSBGb286OmNsYXNzCiAqIH0KICoKICogLy8gdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBzaW5jZSBrZXkgbXVzdCBiZSBzdHJpbmcKICogJG1hcFsxMF0gPSBuZXcgRm9vKCk7CiAqCiAqIC8vIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gc2luY2UgdmFsdWUgbXVzdCBiZSBhIEZvbwogKiAkbWFwWydiYXInXSA9ICdiYXInOwogKgogKiAvLyBpbml0aWFsaXplIG1hcCB3aXRoIGNvbnRlbnRzCiAqICRtYXAgPSBuZXcgVHlwZWRNYXAoJ3N0cmluZycsIEZvbzo6Y2xhc3MsIFsKICogICAgIG5ldyBGb28oKSwgbmV3IEZvbygpLCBuZXcgRm9vKCkKICogXSk7CiAqIGBgYAogKgogKiBJdCBpcyBwcmVmZXJhYmxlIHRvIHN1YmNsYXNzIGBBYnN0cmFjdFR5cGVkTWFwYCB0byBjcmVhdGUgeW91ciBvd24gdHlwZWQgbWFwCiAqIGltcGxlbWVudGF0aW9uOgogKgogKiBgYGBwaHAKICogY2xhc3MgRm9vVHlwZWRNYXAgZXh0ZW5kcyBBYnN0cmFjdFR5cGVkTWFwCiAqIHsKICogICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlUeXBlKCkKICogICAgIHsKICogICAgICAgICByZXR1cm4gJ2ludCc7CiAqICAgICB9CiAqCiAqICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVUeXBlKCkKICogICAgIHsKICogICAgICAgICAgcmV0dXJuIEZvbzo6Y2xhc3M7CiAqICAgICB9CiAqIH0KICogYGBgCiAqCiAqIOKApiBidXQgeW91IGFsc28gbWF5IHVzZSB0aGUgYFR5cGVkTWFwYCBjbGFzczoKICoKICogYGBgcGhwCiAqIGNsYXNzIEZvb1R5cGVkTWFwIGV4dGVuZHMgVHlwZWRNYXAKICogewogKiAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0b3IoYXJyYXkgJGRhdGEgPSBbXSkKICogICAgIHsKICogICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCdpbnQnLCBGb286OmNsYXNzLCAkZGF0YSk7CiAqICAgICB9CiAqIH0KICogYGBgCiAqCiAqIEB0ZW1wbGF0ZSBLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdFR5cGVkTWFwPEssIFQ+CiAqLwpjbGFzcyBUeXBlZE1hcCBleHRlbmRzIEFic3RyYWN0VHlwZWRNYXAKewogICAgdXNlIFR5cGVUcmFpdDsKCiAgICAvKioKICAgICAqIFRoZSBkYXRhIHR5cGUgb2Yga2V5cyBzdG9yZWQgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEEgbWFwIGtleSdzIHR5cGUgaXMgaW1tdXRhYmxlIG9uY2UgaXQgaXMgc2V0LiBGb3IgdGhpcyByZWFzb24sIHRoaXMKICAgICAqIHByb3BlcnR5IGlzIHNldCBwcml2YXRlLgogICAgICovCiAgICBwcml2YXRlIHN0cmluZyAka2V5VHlwZTsKCiAgICAvKioKICAgICAqIFRoZSBkYXRhIHR5cGUgb2YgdmFsdWVzIHN0b3JlZCBpbiB0aGlzIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQSBtYXAgdmFsdWUncyB0eXBlIGlzIGltbXV0YWJsZSBvbmNlIGl0IGlzIHNldC4gRm9yIHRoaXMgcmVhc29uLCB0aGlzCiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHZhbHVlVHlwZTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBtYXAgb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQga2V5IGFuZCB2YWx1ZSB0eXBlcywKICAgICAqIG9wdGlvbmFsbHkgd2l0aCB0aGUgc3BlY2lmaWVkIGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5VHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBtYXAncyBrZXlzLgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWVUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG1hcCdzIHZhbHVlcy4KICAgICAqIEBwYXJhbSBhcnJheTxLLCBUPiAkZGF0YSBUaGUgaW5pdGlhbCBkYXRhIHRvIHNldCBmb3IgdGhpcyBtYXAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGtleVR5cGUsIHN0cmluZyAkdmFsdWVUeXBlLCBhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5rZXlUeXBlID0gJGtleVR5cGU7CiAgICAgICAgJHRoaXMtPnZhbHVlVHlwZSA9ICR2YWx1ZVR5cGU7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRLZXlUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+a2V5VHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVUeXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Map/TypedMapInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXE1hcDsKCi8qKgogKiBBIGBUeXBlZE1hcEludGVyZmFjZWAgcmVwcmVzZW50cyBhIG1hcCBvZiBlbGVtZW50cyB3aGVyZSBrZXkgYW5kIHZhbHVlIGFyZQogKiB0eXBlZC4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgTWFwSW50ZXJmYWNlPFQ+CiAqLwppbnRlcmZhY2UgVHlwZWRNYXBJbnRlcmZhY2UgZXh0ZW5kcyBNYXBJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHR5cGUgdXNlZCBvbiB0aGUga2V5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5VHlwZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHR5cGUgZm9yY2VkIG9uIHRoZSB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZVR5cGUoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Queue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcQ29sbGVjdGlvblxFeGNlcHRpb25cTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2xcVHlwZVRyYWl0Owp1c2UgUmFtc2V5XENvbGxlY3Rpb25cVG9vbFxWYWx1ZVRvU3RyaW5nVHJhaXQ7CgovKioKICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGBRdWV1ZUludGVyZmFjZWAsIHRvIG1pbmltaXplCiAqIHRoZSBlZmZvcnQgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdEFycmF5PFQ+CiAqIEBpbXBsZW1lbnRzIFF1ZXVlSW50ZXJmYWNlPFQ+CiAqLwpjbGFzcyBRdWV1ZSBleHRlbmRzIEFic3RyYWN0QXJyYXkgaW1wbGVtZW50cyBRdWV1ZUludGVyZmFjZQp7CiAgICB1c2UgVHlwZVRyYWl0OwogICAgdXNlIFZhbHVlVG9TdHJpbmdUcmFpdDsKCiAgICAvKioKICAgICAqIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEEgcXVldWUncyB0eXBlIGlzIGltbXV0YWJsZSBvbmNlIGl0IGlzIHNldC4gRm9yIHRoaXMgcmVhc29uLCB0aGlzCiAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHF1ZXVlVHlwZTsKCiAgICAvKioKICAgICAqIFRoZSBpbmRleCBvZiB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCiAgICAgKi8KICAgIHByb3RlY3RlZCBpbnQgJGluZGV4ID0gMDsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBxdWV1ZSBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWV1ZVR5cGUgVGhlIHR5cGUgKEZRQ04pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlLgogICAgICogQHBhcmFtIGFycmF5PGFycmF5LWtleSwgVD4gJGRhdGEgVGhlIGluaXRpYWwgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHF1ZXVlVHlwZSwgYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+cXVldWVUeXBlID0gJHF1ZXVlVHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqCiAgICAgKiBTaW5jZSBhcmJpdHJhcnkgb2Zmc2V0cyBtYXkgbm90IGJlIG1hbmlwdWxhdGVkIGluIGEgcXVldWUsIHRoaXMgbWV0aG9kCiAgICAgKiBzZXJ2ZXMgb25seSB0byBmdWxmaWxsIHRoZSBgQXJyYXlBY2Nlc3NgIGludGVyZmFjZSByZXF1aXJlbWVudHMuIEl0IGlzCiAgICAgKiBpbnZva2VkIGJ5IG90aGVyIG9wZXJhdGlvbnMgd2hlbiBhZGRpbmcgdmFsdWVzIHRvIHRoZSBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiAkdmFsdWUgaXMgb2YgdGhlIHdyb25nIHR5cGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVja1R5cGUoJHRoaXMtPmdldFR5cGUoKSwgJHZhbHVlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIG9mIHR5cGUgJyAuICR0aGlzLT5nZXRUeXBlKCkgLiAnOyB2YWx1ZSBpcyAnCiAgICAgICAgICAgICAgICAuICR0aGlzLT50b29sVmFsdWVUb1N0cmluZygkdmFsdWUpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmICR2YWx1ZSBpcyBvZiB0aGUgd3JvbmcgdHlwZQogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXNbXSA9ICRlbGVtZW50OwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbGVtZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9ICR0aGlzLT5wZWVrKCk7CgogICAgICAgIGlmICgkZWxlbWVudCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdDYW5cJ3QgcmV0dXJuIGVsZW1lbnQgZnJvbSBRdWV1ZS4gUXVldWUgaXMgZW1wdHkuJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZWxlbWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZlcigkZWxlbWVudCk6IGJvb2wKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmFkZCgkZWxlbWVudCk7CiAgICAgICAgfSBjYXRjaCAoSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVlaygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzWyR0aGlzLT5pbmRleF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jb3VudCgpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGhlYWQgPSAkdGhpc1skdGhpcy0+aW5kZXhdOwoKICAgICAgICB1bnNldCgkdGhpc1skdGhpcy0+aW5kZXhdKTsKICAgICAgICAkdGhpcy0+aW5kZXgrKzsKCiAgICAgICAgcmV0dXJuICRoZWFkOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgpCiAgICB7CiAgICAgICAgJGhlYWQgPSAkdGhpcy0+cG9sbCgpOwoKICAgICAgICBpZiAoJGhlYWQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oJ0NhblwndCByZXR1cm4gZWxlbWVudCBmcm9tIFF1ZXVlLiBRdWV1ZSBpcyBlbXB0eS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGVhZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXVlVHlwZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/QueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKdXNlIFJhbXNleVxDb2xsZWN0aW9uXEV4Y2VwdGlvblxOb1N1Y2hFbGVtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBBIHF1ZXVlIGlzIGEgY29sbGVjdGlvbiBpbiB3aGljaCB0aGUgZW50aXRpZXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIGtlcHQgaW4KICogb3JkZXIuCiAqCiAqIFRoZSBwcmluY2lwYWwgb3BlcmF0aW9ucyBvbiB0aGUgcXVldWUgYXJlIHRoZSBhZGRpdGlvbiBvZiBlbnRpdGllcyB0byB0aGUgZW5kCiAqICh0YWlsKSwgYWxzbyBrbm93biBhcyAqZW5xdWV1ZSosIGFuZCByZW1vdmFsIG9mIGVudGl0aWVzIGZyb20gdGhlIGZyb250CiAqIChoZWFkKSwgYWxzbyBrbm93biBhcyAqZGVxdWV1ZSouIFRoaXMgbWFrZXMgdGhlIHF1ZXVlIGEgZmlyc3QtaW4tZmlyc3Qtb3V0CiAqIChGSUZPKSBkYXRhIHN0cnVjdHVyZS4KICoKICogQmVzaWRlcyBiYXNpYyBhcnJheSBvcGVyYXRpb25zLCBxdWV1ZXMgcHJvdmlkZSBhZGRpdGlvbmFsIGluc2VydGlvbiwKICogZXh0cmFjdGlvbiwgYW5kIGluc3BlY3Rpb24gb3BlcmF0aW9ucy4gRWFjaCBvZiB0aGVzZSBtZXRob2RzIGV4aXN0cyBpbiB0d28KICogZm9ybXM6IG9uZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIHRoZSBvdGhlciByZXR1cm5zIGEKICogc3BlY2lhbCB2YWx1ZSAoZWl0aGVyIGBudWxsYCBvciBgZmFsc2VgLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbikuIFRoZQogKiBsYXR0ZXIgZm9ybSBvZiB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIHVzZSB3aXRoCiAqIGNhcGFjaXR5LXJlc3RyaWN0ZWQgYFF1ZXVlSW50ZXJmYWNlYCBpbXBsZW1lbnRhdGlvbnM7IGluIG1vc3QKICogaW1wbGVtZW50YXRpb25zLCBpbnNlcnQgb3BlcmF0aW9ucyBjYW5ub3QgZmFpbC4KICoKICogPHRhYmxlPgogKiA8Y2FwdGlvbj5TdW1tYXJ5IG9mIFF1ZXVlSW50ZXJmYWNlIG1ldGhvZHM8L2NhcHRpb24+CiAqIDx0aGVhZD4KICogPHRyPgogKiA8dGQ+PC90ZD4KICogPHRkPjxlbT5UaHJvd3MgZXhjZXB0aW9uPC9lbT48L3RkPgogKiA8dGQ+PGVtPlJldHVybnMgc3BlY2lhbCB2YWx1ZTwvZW0+PC90ZD4KICogPC90cj4KICogPC90aGVhZD4KICogPHRib2R5PgogKiA8dHI+CiAqIDx0aD5JbnNlcnQ8L3RoPgogKiA8dGQ+PGNvZGU+YWRkKCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPm9mZmVyKCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+UmVtb3ZlPC90aD4KICogPHRkPjxjb2RlPnJlbW92ZSgpPC9jb2RlPjwvdGQ+CiAqIDx0ZD48Y29kZT5wb2xsKCk8L2NvZGU+PC90ZD4KICogPC90cj4KICogPHRyPgogKiA8dGg+RXhhbWluZTwvdGg+CiAqIDx0ZD48Y29kZT5lbGVtZW50KCk8L2NvZGU+PC90ZD4KICogPHRkPjxjb2RlPnBlZWsoKTwvY29kZT48L3RkPgogKiA8L3RyPgogKiA8L3Rib2R5PgogKiA8L3RhYmxlPgogKgogKiBRdWV1ZXMgdHlwaWNhbGx5LCBidXQgZG8gbm90IG5lY2Vzc2FyaWx5LCBvcmRlciBlbGVtZW50cyBpbiBhIEZJRk8KICogKGZpcnN0LWluLWZpcnN0LW91dCkgbWFubmVyLiBBbW9uZyB0aGUgZXhjZXB0aW9ucyBhcmUgcHJpb3JpdHkgcXVldWVzLCB3aGljaAogKiBvcmRlciBlbGVtZW50cyBhY2NvcmRpbmcgdG8gYSBzdXBwbGllZCBjb21wYXJhdG9yLCBvciB0aGUgZWxlbWVudHMnIG5hdHVyYWwKICogb3JkZXJpbmcsIGFuZCBMSUZPIHF1ZXVlcyAob3Igc3RhY2tzKSB3aGljaCBvcmRlciB0aGUgZWxlbWVudHMgTElGTwogKiAobGFzdC1pbi1maXJzdC1vdXQpLiBXaGF0ZXZlciB0aGUgb3JkZXJpbmcgdXNlZCwgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGlzCiAqIHRoYXQgZWxlbWVudCB3aGljaCB3b3VsZCBiZSByZW1vdmVkIGJ5IGEgY2FsbCB0byByZW1vdmUoKSBvciBwb2xsKCkuIEluIGEKICogRklGTyBxdWV1ZSwgYWxsIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgYXQgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlLiBPdGhlcgogKiBraW5kcyBvZiBxdWV1ZXMgbWF5IHVzZSBkaWZmZXJlbnQgcGxhY2VtZW50IHJ1bGVzLiBFdmVyeSBgUXVldWVJbnRlcmZhY2VgCiAqIGltcGxlbWVudGF0aW9uIG11c3Qgc3BlY2lmeSBpdHMgb3JkZXJpbmcgcHJvcGVydGllcy4KICoKICogVGhlIGBvZmZlcigpYCBtZXRob2QgaW5zZXJ0cyBhbiBlbGVtZW50IGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgcmV0dXJuaW5nCiAqIGBmYWxzZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgYWRkKClgIG1ldGhvZCwgd2hpY2ggY2FuIGZhaWwgdG8gYWRkIGFuCiAqIGVsZW1lbnQgb25seSBieSB0aHJvd2luZyBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uLiBUaGUgYG9mZmVyKClgIG1ldGhvZCBpcwogKiBkZXNpZ25lZCBmb3IgdXNlIHdoZW4gZmFpbHVyZSBpcyBhIG5vcm1hbCwgcmF0aGVyIHRoYW4gZXhjZXB0aW9uYWwKICogb2NjdXJyZW5jZSwgZm9yIGV4YW1wbGUsIGluIGZpeGVkLWNhcGFjaXR5IChvciAiYm91bmRlZCIpIHF1ZXVlcy4KICoKICogVGhlIGByZW1vdmUoKWAgYW5kIGBwb2xsKClgIG1ldGhvZHMgcmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgogKiBFeGFjdGx5IHdoaWNoIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBxdWV1ZSdzCiAqIG9yZGVyaW5nIHBvbGljeSwgd2hpY2ggZGlmZmVycyBmcm9tIGltcGxlbWVudGF0aW9uIHRvIGltcGxlbWVudGF0aW9uLiBUaGUKICogYHJlbW92ZSgpYCBhbmQgYHBvbGwoKWAgbWV0aG9kcyBkaWZmZXIgb25seSBpbiB0aGVpciBiZWhhdmlvciB3aGVuIHRoZSBxdWV1ZQogKiBpcyBlbXB0eTogdGhlIGByZW1vdmUoKWAgbWV0aG9kIHRocm93cyBhbiBleGNlcHRpb24sIHdoaWxlIHRoZSBgcG9sbCgpYAogKiBtZXRob2QgcmV0dXJucyBgbnVsbGAuCiAqCiAqIFRoZSBgZWxlbWVudCgpYCBhbmQgYHBlZWsoKWAgbWV0aG9kcyByZXR1cm4sIGJ1dCBkbyBub3QgcmVtb3ZlLCB0aGUgaGVhZCBvZgogKiB0aGUgcXVldWUuCiAqCiAqIGBRdWV1ZUludGVyZmFjZWAgaW1wbGVtZW50YXRpb25zIGdlbmVyYWxseSBkbyBub3QgYWxsb3cgaW5zZXJ0aW9uIG9mIGBudWxsYAogKiBlbGVtZW50cywgYWx0aG91Z2ggc29tZSBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHByb2hpYml0IGluc2VydGlvbiBvZiBgbnVsbGAuCiAqIEV2ZW4gaW4gdGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IHBlcm1pdCBpdCwgYG51bGxgIHNob3VsZCBub3QgYmUgaW5zZXJ0ZWQKICogaW50byBhIHF1ZXVlLCBhcyBgbnVsbGAgaXMgYWxzbyB1c2VkIGFzIGEgc3BlY2lhbCByZXR1cm4gdmFsdWUgYnkgdGhlCiAqIGBwb2xsKClgIG1ldGhvZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBxdWV1ZSBjb250YWlucyBubyBlbGVtZW50cy4KICoKICogQHRlbXBsYXRlIFQKICogQGV4dGVuZHMgQXJyYXlJbnRlcmZhY2U8VD4KICovCmludGVyZmFjZSBRdWV1ZUludGVyZmFjZSBleHRlbmRzIEFycmF5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogRW5zdXJlcyB0aGF0IHRoaXMgcXVldWUgY29udGFpbnMgdGhlIHNwZWNpZmllZCBlbGVtZW50IChvcHRpb25hbAogICAgICogb3BlcmF0aW9uKS4KICAgICAqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuIChSZXR1cm5zCiAgICAgKiBgZmFsc2VgIGlmIHRoaXMgcXVldWUgZG9lcyBub3QgcGVybWl0IGR1cGxpY2F0ZXMgYW5kIGFscmVhZHkgY29udGFpbnMgdGhlCiAgICAgKiBzcGVjaWZpZWQgZWxlbWVudC4pCiAgICAgKgogICAgICogUXVldWVzIHRoYXQgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiBtYXkgcGxhY2UgbGltaXRhdGlvbnMgb24gd2hhdCBlbGVtZW50cwogICAgICogbWF5IGJlIGFkZGVkIHRvIHRoaXMgcXVldWUuIEluIHBhcnRpY3VsYXIsIHNvbWUgcXVldWVzIHdpbGwgcmVmdXNlIHRvIGFkZAogICAgICogYG51bGxgIGVsZW1lbnRzLCBhbmQgb3RoZXJzIHdpbGwgaW1wb3NlIHJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZSBvZgogICAgICogZWxlbWVudHMgdGhhdCBtYXkgYmUgYWRkZWQuIFF1ZXVlIGNsYXNzZXMgc2hvdWxkIGNsZWFybHkgc3BlY2lmeSBpbiB0aGVpcgogICAgICogZG9jdW1lbnRhdGlvbiBhbnkgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZWxlbWVudHMgbWF5IGJlIGFkZGVkLgogICAgICoKICAgICAqIElmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbgogICAgICogdGhhdCBpdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBlbGVtZW50LCBpdCBtdXN0IHRocm93IGFuIGV4Y2VwdGlvbiAocmF0aGVyCiAgICAgKiB0aGFuIHJldHVybmluZyBgZmFsc2VgKS4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGludmFyaWFudCB0aGF0IGEgcXVldWUgYWx3YXlzCiAgICAgKiBjb250YWlucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjpvZmZlcigpCiAgICAgKgogICAgICogQHBhcmFtIFQgJGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gYWRkIHRvIHRoaXMgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIGB0cnVlYCBpZiB0aGlzIHF1ZXVlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIGEgcXVldWUgcmVmdXNlcyB0byBhZGQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQKICAgICAqICAgICBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoYXQgaXQgYWxyZWFkeSBjb250YWlucyB0aGUgZWxlbWVudC4KICAgICAqICAgICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBhIG1vcmUtc3BlY2lmaWMgZXhjZXB0aW9uIHRoYXQgZXh0ZW5kcwogICAgICogICAgIGBcUnVudGltZUV4Y2VwdGlvbmAuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJGVsZW1lbnQpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzLCBidXQgZG9lcyBub3QgcmVtb3ZlLCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgcGVlaygpYCBvbmx5IGluIHRoYXQgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZgogICAgICogdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OnBlZWsoKQogICAgICoKICAgICAqIEByZXR1cm4gVCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEB0aHJvd3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiB0aGlzIHF1ZXVlIGlzIGVtcHR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWxlbWVudCgpOwoKICAgIC8qKgogICAgICogSW5zZXJ0cyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaW50byB0aGlzIHF1ZXVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGRvIHNvCiAgICAgKiBpbW1lZGlhdGVseSB3aXRob3V0IHZpb2xhdGluZyBjYXBhY2l0eSByZXN0cmljdGlvbnMuCiAgICAgKgogICAgICogV2hlbiB1c2luZyBhIGNhcGFjaXR5LXJlc3RyaWN0ZWQgcXVldWUsIHRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseQogICAgICogcHJlZmVyYWJsZSB0byBgYWRkKClgLCB3aGljaCBjYW4gZmFpbCB0byBpbnNlcnQgYW4gZWxlbWVudCBvbmx5IGJ5CiAgICAgKiB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogQHNlZSBzZWxmOjphZGQoKQogICAgICoKICAgICAqIEBwYXJhbSBUICRlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGlzIHF1ZXVlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvIHRoaXMgcXVldWUsIGVsc2UgYGZhbHNlYC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHVibGljIGZ1bmN0aW9uIG9mZmVyKCRlbGVtZW50KTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcywgYnV0IGRvZXMgbm90IHJlbW92ZSwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgcmV0dXJucyBgbnVsbGAKICAgICAqIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjplbGVtZW50KCkKICAgICAqCiAgICAgKiBAcmV0dXJuIFR8bnVsbCB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLCBvciBgbnVsbGAgaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBlZWsoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyB0aGUgaGVhZCBvZiB0aGlzIHF1ZXVlLCBvciByZXR1cm5zIGBudWxsYAogICAgICogaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OnJlbW92ZSgpCiAgICAgKgogICAgICogQHJldHVybiBUfG51bGwgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZSwgb3IgYG51bGxgIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2xsKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYHBvbGwoKWAgb25seSBpbiB0aGF0IGl0IHRocm93cyBhbiBleGNlcHRpb24gaWYKICAgICAqIHRoaXMgcXVldWUgaXMgZW1wdHkuCiAgICAgKgogICAgICogQHNlZSBzZWxmOjpwb2xsKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIFQgdGhlIGhlYWQgb2YgdGhpcyBxdWV1ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgdGhpcyBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Set.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uOwoKLyoqCiAqIEEgc2V0IGlzIGEgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIG5vIGR1cGxpY2F0ZSBlbGVtZW50cy4KICoKICogR3JlYXQgY2FyZSBtdXN0IGJlIGV4ZXJjaXNlZCBpZiBtdXRhYmxlIG9iamVjdHMgYXJlIHVzZWQgYXMgc2V0IGVsZW1lbnRzLgogKiBUaGUgYmVoYXZpb3Igb2YgYSBzZXQgaXMgbm90IHNwZWNpZmllZCBpZiB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGNoYW5nZWQKICogaW4gYSBtYW5uZXIgdGhhdCBhZmZlY3RzIGVxdWFscyBjb21wYXJpc29ucyB3aGlsZSB0aGUgb2JqZWN0IGlzIGFuIGVsZW1lbnQgaW4KICogdGhlIHNldC4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogYGBgIHBocAogKiAkZm9vID0gbmV3IFxNeVxGb28oKTsKICogJHNldCA9IG5ldyBTZXQoXE15XEZvbzo6Y2xhc3MpOwogKgogKiAkc2V0LT5hZGQoJGZvbyk7IC8vIHJldHVybnMgVFJVRSwgdGhlIGVsZW1lbnQgZG9uJ3QgZXhpc3RzCiAqICRzZXQtPmFkZCgkZm9vKTsgLy8gcmV0dXJucyBGQUxTRSwgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMKICoKICogJGJhciA9IG5ldyBcTXlcRm9vKCk7CiAqICRzZXQtPmFkZCgkYmFyKTsgLy8gcmV0dXJucyBUUlVFLCAkYmFyICE9PSAkZm9vCiAqIGBgYAogKgogKiBAdGVtcGxhdGUgVAogKiBAZXh0ZW5kcyBBYnN0cmFjdFNldDxUPgogKi8KY2xhc3MgU2V0IGV4dGVuZHMgQWJzdHJhY3RTZXQKewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhpcyBzZXQKICAgICAqCiAgICAgKiBBIHNldCdzIHR5cGUgaXMgaW1tdXRhYmxlLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgcHJvcGVydHkgaXMgcHJpdmF0ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdHJpbmcgJHNldFR5cGU7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgc2V0IG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIG9wdGlvbmFsbHkgd2l0aCB0aGUKICAgICAqIHNwZWNpZmllZCBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNldFR5cGUgVGhlIHR5cGUgKEZRQ04pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNldC4KICAgICAqIEBwYXJhbSBhcnJheTxhcnJheS1rZXksIFQ+ICRkYXRhIFRoZSBpbml0aWFsIGl0ZW1zIHRvIHN0b3JlIGluIHRoZSBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHNldFR5cGUsIGFycmF5ICRkYXRhID0gW10pCiAgICB7CiAgICAgICAgJHRoaXMtPnNldFR5cGUgPSAkc2V0VHlwZTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldFR5cGU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/TypeTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBmdW5jdGlvbiBpc19ib29sOwp1c2UgZnVuY3Rpb24gaXNfY2FsbGFibGU7CnVzZSBmdW5jdGlvbiBpc19mbG9hdDsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIGZ1bmN0aW9uIGlzX251bWVyaWM7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBpc19yZXNvdXJjZTsKdXNlIGZ1bmN0aW9uIGlzX3NjYWxhcjsKdXNlIGZ1bmN0aW9uIGlzX3N0cmluZzsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIHZhbHVlcyBmb3Igc3BlY2lmaWMgdHlwZXMuCiAqLwp0cmFpdCBUeXBlVHJhaXQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB2YWx1ZSBpcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgdHlwZSB0byBjaGVjayB0aGUgdmFsdWUgYWdhaW5zdC4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgogICAgICovCiAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tUeXBlKHN0cmluZyAkdHlwZSwgJHZhbHVlKTogYm9vbAogICAgewogICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnYXJyYXknOgogICAgICAgICAgICAgICAgcmV0dXJuIGlzX2FycmF5KCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOgogICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19ib29sKCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ2NhbGxhYmxlJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19jYWxsYWJsZSgkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdmbG9hdCc6CiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfZmxvYXQoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnaW50JzoKICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfaW50KCR2YWx1ZSk7CiAgICAgICAgICAgIGNhc2UgJ251bGwnOgogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA9PT0gbnVsbDsKICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfbnVtZXJpYygkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgICAgICAgICAgcmV0dXJuIGlzX29iamVjdCgkdmFsdWUpOwogICAgICAgICAgICBjYXNlICdyZXNvdXJjZSc6CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfcmVzb3VyY2UoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnc2NhbGFyJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19zY2FsYXIoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgIHJldHVybiBpc19zdHJpbmcoJHZhbHVlKTsKICAgICAgICAgICAgY2FzZSAnbWl4ZWQnOgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlIGluc3RhbmNlb2YgJHR5cGU7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cRXhjZXB0aW9uXFZhbHVlRXh0cmFjdGlvbkV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBnZXRfY2xhc3M7CnVzZSBmdW5jdGlvbiBpc19vYmplY3Q7CnVzZSBmdW5jdGlvbiBtZXRob2RfZXhpc3RzOwp1c2UgZnVuY3Rpb24gcHJvcGVydHlfZXhpc3RzOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGV4dHJhY3QgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb3IgbWV0aG9kIGZyb20gYW4gb2JqZWN0LgogKi8KdHJhaXQgVmFsdWVFeHRyYWN0b3JUcmFpdAp7CiAgICAvKioKICAgICAqIEV4dHJhY3RzIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgbWV0aG9kIGZyb20gdGhlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9iamVjdCBUaGUgb2JqZWN0IHRvIGV4dHJhY3QgdGhlIHZhbHVlIGZyb20uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eU9yTWV0aG9kIFRoZSBwcm9wZXJ0eSBvciBtZXRob2QgZm9yIHdoaWNoIHRoZQogICAgICogICAgIHZhbHVlIHNob3VsZCBiZSBleHRyYWN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCB0aGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvciBtZXRob2QuCiAgICAgKgogICAgICogQHRocm93cyBWYWx1ZUV4dHJhY3Rpb25FeGNlcHRpb24gaWYgdGhlIG1ldGhvZCBvciBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZC4KICAgICAqLwogICAgLy8gcGhwY3M6aWdub3JlIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJhY3RWYWx1ZSgkb2JqZWN0LCBzdHJpbmcgJHByb3BlcnR5T3JNZXRob2QpCiAgICB7CiAgICAgICAgaWYgKCFpc19vYmplY3QoJG9iamVjdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXh0cmFjdGlvbkV4Y2VwdGlvbignVW5hYmxlIHRvIGV4dHJhY3QgYSB2YWx1ZSBmcm9tIGEgbm9uLW9iamVjdCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHByb3BlcnR5X2V4aXN0cygkb2JqZWN0LCAkcHJvcGVydHlPck1ldGhvZCkpIHsKICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPiRwcm9wZXJ0eU9yTWV0aG9kOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJHByb3BlcnR5T3JNZXRob2QpKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT57JHByb3BlcnR5T3JNZXRob2R9KCk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgVmFsdWVFeHRyYWN0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5DbGFzc2VzLk1vZGVybkNsYXNzTmFtZVJlZmVyZW5jZS5DbGFzc05hbWVSZWZlcmVuY2VkVmlhRnVuY3Rpb25DYWxsCiAgICAgICAgICAgIHNwcmludGYoJ01ldGhvZCBvciBwcm9wZXJ0eSAiJXMiIG5vdCBkZWZpbmVkIGluICVzJywgJHByb3BlcnR5T3JNZXRob2QsIGdldF9jbGFzcygkb2JqZWN0KSksCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L2NvbGxlY3Rpb24gbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxDb2xsZWN0aW9uXFRvb2w7Cgp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gZ2V0X2NsYXNzOwp1c2UgZnVuY3Rpb24gZ2V0X3Jlc291cmNlX3R5cGU7CnVzZSBmdW5jdGlvbiBpc19hcnJheTsKdXNlIGZ1bmN0aW9uIGlzX2Jvb2w7CnVzZSBmdW5jdGlvbiBpc19jYWxsYWJsZTsKdXNlIGZ1bmN0aW9uIGlzX29iamVjdDsKdXNlIGZ1bmN0aW9uIGlzX3Jlc291cmNlOwp1c2UgZnVuY3Rpb24gaXNfc2NhbGFyOwp1c2UgZnVuY3Rpb24gdmFyX2V4cG9ydDsKCi8qKgogKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGV4cHJlc3MgYSB2YWx1ZSBhcyBzdHJpbmcKICovCnRyYWl0IFZhbHVlVG9TdHJpbmdUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLgogICAgICoKICAgICAqIC0gbnVsbCB2YWx1ZTogYCdOVUxMJ2AKICAgICAqIC0gYm9vbGVhbjogYCdUUlVFJ2AsIGAnRkFMU0UnYAogICAgICogLSBhcnJheTogYCdBcnJheSdgCiAgICAgKiAtIHNjYWxhcjogY29udmVydGVkLXZhbHVlCiAgICAgKiAtIHJlc291cmNlOiBgJyh0eXBlIHJlc291cmNlICNudW1iZXIpJ2AKICAgICAqIC0gb2JqZWN0IHdpdGggYF9fdG9TdHJpbmcoKWA6IHJlc3VsdCBvZiBgX190b1N0cmluZygpYAogICAgICogLSBvYmplY3QgRGF0ZVRpbWU6IElTTyA4NjAxIGRhdGUKICAgICAqIC0gb2JqZWN0OiBgJyhjbGFzc05hbWUgT2JqZWN0KSdgCiAgICAgKiAtIGFub255bW91cyBmdW5jdGlvbjogc2FtZSBhcyBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byByZXR1cm4gYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIC8vIHBocGNzOmlnbm9yZSBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB0b29sVmFsdWVUb1N0cmluZygkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyBudWxsCiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJ05VTEwnOwogICAgICAgIH0KCiAgICAgICAgLy8gYm9vbGVhbiBjb25zdGFudHMKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOwogICAgICAgIH0KCiAgICAgICAgLy8gYXJyYXkKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJ0FycmF5JzsKICAgICAgICB9CgogICAgICAgIC8vIHNjYWxhciB0eXBlcyAoaW50ZWdlciwgZmxvYXQsIHN0cmluZykKICAgICAgICBpZiAoaXNfc2NhbGFyKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIC8vIHJlc291cmNlCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICcoJyAuIGdldF9yZXNvdXJjZV90eXBlKCR2YWx1ZSkgLiAnIHJlc291cmNlICMnIC4gKGludCkgJHZhbHVlIC4gJyknOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzLCB1c2UgdmFyX2V4cG9ydCgpLgogICAgICAgIGlmICghaXNfb2JqZWN0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICcoJyAuIHZhcl9leHBvcnQoJHZhbHVlLCB0cnVlKSAuICcpJzsKICAgICAgICB9CgogICAgICAgIC8vIEZyb20gaGVyZSwgJHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QuCgogICAgICAgIC8vIF9fdG9TdHJpbmcoKSBpcyBpbXBsZW1lbnRlZAogICAgICAgIGlmIChpc19jYWxsYWJsZShbJHZhbHVlLCAnX190b1N0cmluZyddKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlLT5fX3RvU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBvYmplY3Qgb2YgdHlwZSBcRGF0ZVRpbWUKICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgRGF0ZVRpbWVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+Zm9ybWF0KCdjJyk7CiAgICAgICAgfQoKICAgICAgICAvLyB1bmtub3duIHR5cGUKICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5DbGFzc2VzLk1vZGVybkNsYXNzTmFtZVJlZmVyZW5jZS5DbGFzc05hbWVSZWZlcmVuY2VkVmlhRnVuY3Rpb25DYWxsCiAgICAgICAgcmV0dXJuICcoJyAuIGdldF9jbGFzcygkdmFsdWUpIC4gJyBPYmplY3QpJzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicmFtc2V5L3V1aWQiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgbGlicmFyeSBmb3IgZ2VuZXJhdGluZyBhbmQgd29ya2luZyB3aXRoIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVycyAoVVVJRHMpLiIsCiAgICAia2V5d29yZHMiOiBbCiAgICAgICAgInV1aWQiLAogICAgICAgICJpZGVudGlmaWVyIiwKICAgICAgICAiZ3VpZCIKICAgIF0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICJeNy4yIHx8IF44LjAiLAogICAgICAgICJleHQtanNvbiI6ICIqIiwKICAgICAgICAiYnJpY2svbWF0aCI6ICJeMC44IHx8IF4wLjkiLAogICAgICAgICJyYW1zZXkvY29sbGVjdGlvbiI6ICJeMS4wIiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSI6ICJeMS44IiwKICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCI6ICJeMS4xNCIKICAgIH0sCiAgICAicmVwbGFjZSI6IHsKICAgICAgICAicmh1bXNhYS91dWlkIjogInNlbGYudmVyc2lvbiIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImNhcHRhaW5ob29rL2NhcHRhaW5ob29rIjogIl41LjEwIiwKICAgICAgICAiY2FwdGFpbmhvb2svcGx1Z2luLWNvbXBvc2VyIjogIl41LjMiLAogICAgICAgICJkZWFsZXJkaXJlY3QvcGhwY29kZXNuaWZmZXItY29tcG9zZXItaW5zdGFsbGVyIjogIl4wLjcuMCIsCiAgICAgICAgImRvY3RyaW5lL2Fubm90YXRpb25zIjogIl4xLjgiLAogICAgICAgICJlcmdlYm5pcy9jb21wb3Nlci1ub3JtYWxpemUiOiAiXjIuMTUiLAogICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMyIsCiAgICAgICAgIm1vb250b2FzdC9tYXRoIjogIl4xLjEiLAogICAgICAgICJwYXJhZ29uaWUvcmFuZG9tLWxpYiI6ICJeMiIsCiAgICAgICAgInBocC1tb2NrL3BocC1tb2NrIjogIl4yLjIiLAogICAgICAgICJwaHAtbW9jay9waHAtbW9jay1tb2NrZXJ5IjogIl4xLjMiLAogICAgICAgICJwaHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCI6ICJeMS4xIiwKICAgICAgICAicGhwYmVuY2gvcGhwYmVuY2giOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vZXh0ZW5zaW9uLWluc3RhbGxlciI6ICJeMS4wIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuIjogIl4wLjEyIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLW1vY2tlcnkiOiAiXjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMC4xMiIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOC41IHx8IF45IiwKICAgICAgICAic2xldm9tYXQvY29kaW5nLXN0YW5kYXJkIjogIl43LjAiLAogICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjUiLAogICAgICAgICJ2aW1lby9wc2FsbSI6ICJeNC45IgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtYmNtYXRoIjogIkVuYWJsZXMgZmFzdGVyIG1hdGggd2l0aCBhcmJpdHJhcnktcHJlY2lzaW9uIGludGVnZXJzIHVzaW5nIEJDTWF0aC4iLAogICAgICAgICJleHQtY3R5cGUiOiAiRW5hYmxlcyBmYXN0ZXIgcHJvY2Vzc2luZyBvZiBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdXNpbmcgY3R5cGUgZnVuY3Rpb25zLiIsCiAgICAgICAgImV4dC1nbXAiOiAiRW5hYmxlcyBmYXN0ZXIgbWF0aCB3aXRoIGFyYml0cmFyeS1wcmVjaXNpb24gaW50ZWdlcnMgdXNpbmcgR01QLiIsCiAgICAgICAgImV4dC11dWlkIjogIkVuYWJsZXMgdGhlIHVzZSBvZiBQZWNsVXVpZFRpbWVHZW5lcmF0b3IgYW5kIFBlY2xVdWlkUmFuZG9tR2VuZXJhdG9yLiIsCiAgICAgICAgInBhcmFnb25pZS9yYW5kb20tbGliIjogIlByb3ZpZGVzIFJhbmRvbUxpYiBmb3IgdXNlIHdpdGggdGhlIFJhbmRvbUxpYkFkYXB0ZXIiLAogICAgICAgICJyYW1zZXkvdXVpZC1kb2N0cmluZSI6ICJBbGxvd3MgdGhlIHVzZSBvZiBSYW1zZXlcXFV1aWRcXFV1aWQgYXMgRG9jdHJpbmUgZmllbGQgdHlwZS4iCiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYWluIjogIjQueC1kZXYiCiAgICAgICAgfSwKICAgICAgICAiY2FwdGFpbmhvb2siOiB7CiAgICAgICAgICAgICJmb3JjZS1pbnN0YWxsIjogdHJ1ZQogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiUmFtc2V5XFxVdWlkXFwiOiAic3JjLyIKICAgICAgICB9LAogICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgInNyYy9mdW5jdGlvbnMucGhwIgogICAgICAgIF0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIlJhbXNleVxcVXVpZFxcQmVuY2htYXJrXFwiOiAidGVzdHMvYmVuY2htYXJrLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFV1aWRcXFN0YXRpY0FuYWx5c2lzXFwiOiAidGVzdHMvc3RhdGljLWFuYWx5c2lzLyIsCiAgICAgICAgICAgICJSYW1zZXlcXFV1aWRcXFRlc3RcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgInByZWZlci1zdGFibGUiOiB0cnVlLAogICAgInNjcmlwdHMiOiB7CiAgICAgICAgImFuYWx5emUiOiBbCiAgICAgICAgICAgICJAcGhwc3RhbiIsCiAgICAgICAgICAgICJAcHNhbG0iCiAgICAgICAgXSwKICAgICAgICAiYnVpbGQ6Y2xlYW4iOiAiZ2l0IGNsZWFuIC1mWCBidWlsZC8iLAogICAgICAgICJsaW50IjogInBhcmFsbGVsLWxpbnQgc3JjIHRlc3RzIiwKICAgICAgICAibGludDpwYXRocyI6ICJwYXJhbGxlbC1saW50IiwKICAgICAgICAicGhwYmVuY2giOiAicGhwYmVuY2ggcnVuIiwKICAgICAgICAicGhwY2JmIjogInBocGNiZiAtdnB3IC0tY2FjaGU9YnVpbGQvY2FjaGUvcGhwY3MuY2FjaGUiLAogICAgICAgICJwaHBjcyI6ICJwaHBjcyAtLWNhY2hlPWJ1aWxkL2NhY2hlL3BocGNzLmNhY2hlIiwKICAgICAgICAicGhwc3RhbiI6IFsKICAgICAgICAgICAgInBocHN0YW4gYW5hbHlzZSAtLW5vLXByb2dyZXNzIiwKICAgICAgICAgICAgInBocHN0YW4gYW5hbHlzZSAtYyBwaHBzdGFuLXRlc3RzLm5lb24gLS1uby1wcm9ncmVzcyIKICAgICAgICBdLAogICAgICAgICJwaHB1bml0IjogInBocHVuaXQgLS12ZXJib3NlIC0tY29sb3JzPWFsd2F5cyIsCiAgICAgICAgInBocHVuaXQtY292ZXJhZ2UiOiAicGhwdW5pdCAtLXZlcmJvc2UgLS1jb2xvcnM9YWx3YXlzIC0tY292ZXJhZ2UtaHRtbCBidWlsZC9jb3ZlcmFnZSIsCiAgICAgICAgInBzYWxtIjogInBzYWxtIC0tc2hvdy1pbmZvPWZhbHNlIC0tY29uZmlnPXBzYWxtLnhtbCIsCiAgICAgICAgInRlc3QiOiBbCiAgICAgICAgICAgICJAbGludCIsCiAgICAgICAgICAgICJAcGhwYmVuY2giLAogICAgICAgICAgICAiQHBocGNzIiwKICAgICAgICAgICAgIkBwaHBzdGFuIiwKICAgICAgICAgICAgIkBwc2FsbSIsCiAgICAgICAgICAgICJAcGhwdW5pdCIKICAgICAgICBdCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyLTIwMjEgQmVuIFJhbXNleSA8YmVuQGJlbnJhbXNleS5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxIGFsaWduPSJjZW50ZXIiPnJhbXNleS91dWlkPC9oMT4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPHN0cm9uZz5BIFBIUCBsaWJyYXJ5IGZvciBnZW5lcmF0aW5nIGFuZCB3b3JraW5nIHdpdGggVVVJRHMuPC9zdHJvbmc+CjwvcD4KCjxwIGFsaWduPSJjZW50ZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cDovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3NvdXJjZS1yYW1zZXkvdXVpZC1ibHVlLnN2Zz9zdHlsZT1mbGF0LXNxdWFyZSIgYWx0PSJTb3VyY2UgQ29kZSI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9wYWNrYWdpc3Qvdi9yYW1zZXkvdXVpZC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUmbGFiZWw9cmVsZWFzZSIgYWx0PSJEb3dubG9hZCBQYWNrYWdlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3BocC5uZXQiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9waHAtdi9yYW1zZXkvdXVpZC5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUmY29sb3JCPSUyMzg4OTJCRiIgYWx0PSJQSFAgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9ibG9iL21haW4vTElDRU5TRSI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2wvcmFtc2V5L3V1aWQuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlJmNvbG9yQj1kYXJrY3lhbiIgYWx0PSJSZWFkIExpY2Vuc2UiPjwvYT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9hY3Rpb25zL3dvcmtmbG93cy9jb250aW51b3VzLWludGVncmF0aW9uLnltbCI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3dvcmtmbG93L3N0YXR1cy9yYW1zZXkvdXVpZC9idWlsZC9tYWluP2xvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlIiBhbHQ9IkJ1aWxkIFN0YXR1cyI+PC9hPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9jb2RlY292LmlvL2doL3JhbXNleS91dWlkIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb2RlY292L2MvZ2gvcmFtc2V5L3V1aWQ/bGFiZWw9Y29kZWNvdiZsb2dvPWNvZGVjb3Ymc3R5bGU9ZmxhdC1zcXVhcmUiIGFsdD0iQ29kZWNvdiBDb2RlIENvdmVyYWdlIj48L2E+CiAgICA8YSBocmVmPSJodHRwczovL3NoZXBoZXJkLmRldi9naXRodWIvcmFtc2V5L3V1aWQiPjxpbWcgc3JjPSJodHRwczovL2ltZy5zaGllbGRzLmlvL2VuZHBvaW50P3N0eWxlPWZsYXQtc3F1YXJlJnVybD1odHRwcyUzQSUyRiUyRnNoZXBoZXJkLmRldiUyRmdpdGh1YiUyRnJhbXNleSUyRnV1aWQlMkZjb3ZlcmFnZSIgYWx0PSJQc2FsbSBUeXBlIENvdmVyYWdlIj48L2E+CjwvcD4KCnJhbXNleS91dWlkIGlzIGEgUEhQIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYW5kIHdvcmtpbmcgd2l0aCB1bml2ZXJzYWxseSB1bmlxdWUKaWRlbnRpZmllcnMgKFVVSURzKS4KClRoaXMgcHJvamVjdCBhZGhlcmVzIHRvIGEgW2NvZGUgb2YgY29uZHVjdF0oQ09ERV9PRl9DT05EVUNULm1kKS4KQnkgcGFydGljaXBhdGluZyBpbiB0aGlzIHByb2plY3QgYW5kIGl0cyBjb21tdW5pdHksIHlvdSBhcmUgZXhwZWN0ZWQgdG8KdXBob2xkIHRoaXMgY29kZS4KCk11Y2ggaW5zcGlyYXRpb24gZm9yIHRoaXMgbGlicmFyeSBjYW1lIGZyb20gdGhlIFtKYXZhXVtqYXZhdXVpZF0gYW5kCltQeXRob25dW3B5dXVpZF0gVVVJRCBsaWJyYXJpZXMuCgojIyBJbnN0YWxsYXRpb24KClRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGluc3RhbGxhdGlvbiBpcyB2aWEgW0NvbXBvc2VyXVtdLiBSdW4gdGhlIGZvbGxvd2luZwpjb21tYW5kIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYW5kIGFkZCBpdCBhcyBhIHJlcXVpcmVtZW50IHRvIHlvdXIgcHJvamVjdCdzCmBjb21wb3Nlci5qc29uYDoKCmBgYGJhc2gKY29tcG9zZXIgcmVxdWlyZSByYW1zZXkvdXVpZApgYGAKCiMjIFVwZ3JhZGluZyB0byBWZXJzaW9uIDQKClNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYSB0aG9yb3VnaCB1cGdyYWRlIGd1aWRlOgoKKiBbVXBncmFkaW5nIHJhbXNleS91dWlkIFZlcnNpb24gMyB0byA0XShodHRwczovL3V1aWQucmFtc2V5LmRldi9lbi9sYXRlc3QvdXBncmFkaW5nLzMtdG8tNC5odG1sKQoKIyMgRG9jdW1lbnRhdGlvbgoKUGxlYXNlIHNlZSA8aHR0cHM6Ly91dWlkLnJhbXNleS5kZXY+IGZvciBkb2N1bWVudGF0aW9uLCB0aXBzLCBleGFtcGxlcywgYW5kCmZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zLgoKIyMgQ29udHJpYnV0aW5nCgpDb250cmlidXRpb25zIGFyZSB3ZWxjb21lISBUbyBjb250cmlidXRlLCBwbGVhc2UgZmFtaWxpYXJpemUgeW91cnNlbGYgd2l0aApbQ09OVFJJQlVUSU5HLm1kXShDT05UUklCVVRJTkcubWQpLgoKIyMgQ29vcmRpbmF0ZWQgRGlzY2xvc3VyZQoKS2VlcGluZyB1c2VyIGluZm9ybWF0aW9uIHNhZmUgYW5kIHNlY3VyZSBpcyBhIHRvcCBwcmlvcml0eSwgYW5kIHdlIHdlbGNvbWUgdGhlCmNvbnRyaWJ1dGlvbiBvZiBleHRlcm5hbCBzZWN1cml0eSByZXNlYXJjaGVycy4gSWYgeW91IGJlbGlldmUgeW91J3ZlIGZvdW5kIGEKc2VjdXJpdHkgaXNzdWUgaW4gc29mdHdhcmUgdGhhdCBpcyBtYWludGFpbmVkIGluIHRoaXMgcmVwb3NpdG9yeSwgcGxlYXNlIHJlYWQKW1NFQ1VSSVRZLm1kXVtdIGZvciBpbnN0cnVjdGlvbnMgb24gc3VibWl0dGluZyBhIHZ1bG5lcmFiaWxpdHkgcmVwb3J0LgoKIyMgcmFtc2V5L3V1aWQgZm9yIEVudGVycHJpc2UKCkF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBUaWRlbGlmdCBTdWJzY3JpcHRpb24uCgpUaGUgbWFpbnRhaW5lcnMgb2YgcmFtc2V5L3V1aWQgYW5kIHRob3VzYW5kcyBvZiBvdGhlciBwYWNrYWdlcyBhcmUgd29ya2luZyB3aXRoClRpZGVsaWZ0IHRvIGRlbGl2ZXIgY29tbWVyY2lhbCBzdXBwb3J0IGFuZCBtYWludGVuYW5jZSBmb3IgdGhlIG9wZW4gc291cmNlCnBhY2thZ2VzIHlvdSB1c2UgdG8gYnVpbGQgeW91ciBhcHBsaWNhdGlvbnMuIFNhdmUgdGltZSwgcmVkdWNlIHJpc2ssIGFuZCBpbXByb3ZlCmNvZGUgaGVhbHRoLCB3aGlsZSBwYXlpbmcgdGhlIG1haW50YWluZXJzIG9mIHRoZSBleGFjdCBwYWNrYWdlcyB5b3UgdXNlLgpbTGVhcm4gbW9yZS5dKGh0dHBzOi8vdGlkZWxpZnQuY29tL3N1YnNjcmlwdGlvbi9wa2cvcGFja2FnaXN0LXJhbXNleS11dWlkP3V0bV9zb3VyY2U9dW5kZWZpbmVkJnV0bV9tZWRpdW09cmVmZXJyYWwmdXRtX2NhbXBhaWduPWVudGVycHJpc2UmdXRtX3Rlcm09cmVwbykKCiMjIENvcHlyaWdodCBhbmQgTGljZW5zZQoKVGhlIHJhbXNleS91dWlkIGxpYnJhcnkgaXMgY29weXJpZ2h0IMKpIFtCZW4gUmFtc2V5XShodHRwczovL2JlbnJhbXNleS5jb20vKSBhbmQKbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCkuIFBsZWFzZSBzZWUgW0xJQ0VOU0VdW10gZm9yIG1vcmUKaW5mb3JtYXRpb24uCgpbcmZjNDEyMl06IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIKW2NvbmR1Y3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmFtc2V5L3V1aWQvYmxvYi9tYWluL0NPREVfT0ZfQ09ORFVDVC5tZApbamF2YXV1aWRdOiBodHRwOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS82L2RvY3MvYXBpL2phdmEvdXRpbC9VVUlELmh0bWwKW3B5dXVpZF06IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbApbY29tcG9zZXJdOiBodHRwOi8vZ2V0Y29tcG9zZXIub3JnLwpbY29udHJpYnV0aW5nLm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL2Jsb2IvbWFpbi9DT05UUklCVVRJTkcubWQKW3NlY3VyaXR5Lm1kXTogaHR0cHM6Ly9naXRodWIuY29tL3JhbXNleS91dWlkL2Jsb2IvbWFpbi9TRUNVUklUWS5tZApbbGljZW5zZV06IGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1zZXkvdXVpZC9ibG9iL21haW4vTElDRU5TRQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/BinaryUtils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKLyoqCiAqIFByb3ZpZGVzIGJpbmFyeSBtYXRoIHV0aWxpdGllcwogKi8KY2xhc3MgQmluYXJ5VXRpbHMKewogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBSRkMgNDEyMiB2YXJpYW50IGZpZWxkIHRvIHRoZSAxNi1iaXQgY2xvY2sgc2VxdWVuY2UKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKgogICAgICogQHBhcmFtIGludCAkY2xvY2tTZXEgVGhlIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSB2YWx1ZSBiZWZvcmUgdGhlIFJGQyA0MTIyCiAgICAgKiAgICAgdmFyaWFudCBpcyBhcHBsaWVkCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSBtdWx0aXBsZXhlZCB3aXRoIHRoZSBVVUlEIHZhcmlhbnQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFwcGx5VmFyaWFudChpbnQgJGNsb2NrU2VxKTogaW50CiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gJGNsb2NrU2VxICYgMHgzZmZmOwogICAgICAgICRjbG9ja1NlcSB8PSAweDgwMDA7CgogICAgICAgIHJldHVybiAkY2xvY2tTZXE7CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBSRkMgNDEyMiB2ZXJzaW9uIG51bWJlciB0byB0aGUgMTYtYml0IGB0aW1lX2hpX2FuZF92ZXJzaW9uYCBmaWVsZAogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lSGkgVGhlIHZhbHVlIG9mIHRoZSAxNi1iaXQgYHRpbWVfaGlfYW5kX3ZlcnNpb25gIGZpZWxkCiAgICAgKiAgICAgYmVmb3JlIHRoZSBSRkMgNDEyMiB2ZXJzaW9uIGlzIGFwcGxpZWQKICAgICAqIEBwYXJhbSBpbnQgJHZlcnNpb24gVGhlIFJGQyA0MTIyIHZlcnNpb24gdG8gYXBwbHkgdG8gdGhlIGB0aW1lX2hpYCBmaWVsZAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSAxNi1iaXQgdGltZV9oaSBmaWVsZCBvZiB0aGUgdGltZXN0YW1wIG11bHRpcGxleGVkIHdpdGgKICAgICAqICAgICB0aGUgVVVJRCB2ZXJzaW9uIG51bWJlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwbHlWZXJzaW9uKGludCAkdGltZUhpLCBpbnQgJHZlcnNpb24pOiBpbnQKICAgIHsKICAgICAgICAkdGltZUhpID0gJHRpbWVIaSAmIDB4MGZmZjsKICAgICAgICAkdGltZUhpIHw9ICR2ZXJzaW9uIDw8IDEyOwoKICAgICAgICByZXR1cm4gJHRpbWVIaTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/BuilderCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlclxHZW5lcmljTnVtYmVyQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcR2VuZXJpY1RpbWVDb252ZXJ0ZXI7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZVxQaHBUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcR3VpZFxHdWlkQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIGFzIE5vbnN0YW5kYXJkVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRCdWlsZGVyIGFzIFJmYzQxMjJVdWlkQnVpbGRlcjsKdXNlIFRyYXZlcnNhYmxlOwoKLyoqCiAqIEEgY29sbGVjdGlvbiBvZiBVdWlkQnVpbGRlckludGVyZmFjZSBvYmplY3RzCiAqCiAqIEBleHRlbmRzIEFic3RyYWN0Q29sbGVjdGlvbjxVdWlkQnVpbGRlckludGVyZmFjZT4KICovCmNsYXNzIEJ1aWxkZXJDb2xsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdWlkQnVpbGRlckludGVyZmFjZTo6Y2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICogQHBzYWxtLXN1cHByZXNzIEltcHVyZU1ldGhvZENhbGwKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbnZhbGlkVGVtcGxhdGVQYXJhbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogVHJhdmVyc2FibGUKICAgIHsKICAgICAgICByZXR1cm4gcGFyZW50OjpnZXRJdGVyYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogUmUtY29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gaXRzIHNlcmlhbGl6ZWQgZm9ybQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6ZWQgUEhQIHN0cmluZyB0byB1bnNlcmlhbGl6ZSBpbnRvCiAgICAgKiAgICAgYSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgUmVkdW5kYW50Q29uZGl0aW9uR2l2ZW5Eb2NibG9ja1R5cGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCRzZXJpYWxpemVkKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIGFycmF5PGFycmF5LWtleSwgVXVpZEJ1aWxkZXJJbnRlcmZhY2U+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWwogICAgICAgICAgICAnYWxsb3dlZF9jbGFzc2VzJyA9PiBbCiAgICAgICAgICAgICAgICBCcmlja01hdGhDYWxjdWxhdG9yOjpjbGFzcywKICAgICAgICAgICAgICAgIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgR2VuZXJpY1RpbWVDb252ZXJ0ZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgR3VpZEJ1aWxkZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgTm9uc3RhbmRhcmRVdWlkQnVpbGRlcjo6Y2xhc3MsCiAgICAgICAgICAgICAgICBQaHBUaW1lQ29udmVydGVyOjpjbGFzcywKICAgICAgICAgICAgICAgIFJmYzQxMjJVdWlkQnVpbGRlcjo6Y2xhc3MsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfZmlsdGVyKAogICAgICAgICAgICAkZGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKCR1bnNlcmlhbGl6ZWQpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdW5zZXJpYWxpemVkIGluc3RhbmNlb2YgVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkQnVpbGRlciBhcyBSZmM0MTIyVXVpZEJ1aWxkZXI7CgovKioKICogQGRlcHJlY2F0ZWQgVHJhbnNpdGlvbiB0byB7QHNlZSBSZmM0MTIyVXVpZEJ1aWxkZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBEZWZhdWx0VXVpZEJ1aWxkZXIgZXh0ZW5kcyBSZmM0MTIyVXVpZEJ1aWxkZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcRGVncmFkZWRUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxEZWdyYWRlZFV1aWQ7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkcyBhcyBSZmM0MTIyRmllbGRzOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCi8qKgogKiBAZGVwcmVjYXRlZCBEZWdyYWRlZFV1aWQgaW5zdGFuY2VzIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgMzItYml0CiAqICAgICBzeXN0ZW1zLiBUcmFuc2l0aW9uIHRvIHtAc2VlIERlZmF1bHRVdWlkQnVpbGRlcn0uCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIERlZ3JhZGVkVXVpZEJ1aWxkZXIgaW1wbGVtZW50cyBVdWlkQnVpbGRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lQ29udmVydGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvCiAgICAgKiAgICAgdXNlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBEZWdyYWRlZFV1aWQKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlfG51bGwgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgP1RpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyID0gJG51bWJlckNvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlciA9ICR0aW1lQ29udmVydGVyID86IG5ldyBEZWdyYWRlZFRpbWVDb252ZXJ0ZXIoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIERlZ3JhZGVkVXVpZAogICAgICoKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhpcyBEZWdyYWRlZFV1aWQgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIERlZ3JhZGVkVXVpZCBUaGUgRGVncmFkZWRVdWlkQnVpbGQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSYW1zZXlcVXVpZFxEZWdyYWRlZFV1aWQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiBuZXcgRGVncmFkZWRVdWlkKAogICAgICAgICAgICBuZXcgUmZjNDEyMkZpZWxkcygkYnl0ZXMpLAogICAgICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyLAogICAgICAgICAgICAkY29kZWMsCiAgICAgICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cQnVpbGRlck5vdEZvdW5kRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCi8qKgogKiBGYWxsYmFja0J1aWxkZXIgYnVpbGRzIGEgVVVJRCBieSBzdGVwcGluZyB0aHJvdWdoIGEgbGlzdCBvZiBVVUlEIGJ1aWxkZXJzCiAqIHVudGlsIGEgVVVJRCBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aG91dCBleGNlcHRpb25zCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEZhbGxiYWNrQnVpbGRlciBpbXBsZW1lbnRzIFV1aWRCdWlsZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBCdWlsZGVyQ29sbGVjdGlvbgogICAgICovCiAgICBwcml2YXRlICRidWlsZGVyczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBCdWlsZGVyQ29sbGVjdGlvbiAkYnVpbGRlcnMgQW4gYXJyYXkgb2YgVVVJRCBidWlsZGVycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQnVpbGRlckNvbGxlY3Rpb24gJGJ1aWxkZXJzKQogICAgewogICAgICAgICR0aGlzLT5idWlsZGVycyA9ICRidWlsZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdXNpbmcgdGhlIGZpcnN0IGJ1aWxkZXIgdGhhdAogICAgICogc3VjY2VlZHMKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgYW4gaW5zdGFuY2Ugb2YgYSBVVUlEIG9iamVjdAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZChDb2RlY0ludGVyZmFjZSAkY29kZWMsIHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGxhc3RCdWlsZGVyRXhjZXB0aW9uID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJ1aWxkZXJzIGFzICRidWlsZGVyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGJ1aWxkZXItPmJ1aWxkKCRjb2RlYywgJGJ5dGVzKTsKICAgICAgICAgICAgfSBjYXRjaCAoVW5hYmxlVG9CdWlsZFV1aWRFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgJGxhc3RCdWlsZGVyRXhjZXB0aW9uID0gJGV4Y2VwdGlvbjsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkZXJOb3RGb3VuZEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgYnVpbGRlciBmb3IgdGhlIHByb3ZpZGVkIGNvZGVjIGFuZCBmaWVsZHMnLAogICAgICAgICAgICAwLAogICAgICAgICAgICAkbGFzdEJ1aWxkZXJFeGNlcHRpb24KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEJ1aWxkZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwoKLyoqCiAqIEEgVVVJRCBidWlsZGVyIGJ1aWxkcyBpbnN0YW5jZXMgb2YgVXVpZEludGVyZmFjZQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBCdWlsZHMgYW5kIHJldHVybnMgYSBVdWlkSW50ZXJmYWNlCiAgICAgKgogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIGZvciBidWlsZGluZyB0aGlzIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgdG8gcmV0dXJuIG1vcmUgc3BlY2lmaWMKICAgICAqICAgICBpbnN0YW5jZXMgb2YgVVVJRHMgdGhhdCBpbXBsZW1lbnQgVXVpZEludGVyZmFjZQogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZChDb2RlY0ludGVyZmFjZSAkY29kZWMsIHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/CodecInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CgovKioKICogQSBjb2RlYyBlbmNvZGVzIGFuZCBkZWNvZGVzIGEgVVVJRCBhY2NvcmRpbmcgdG8gZGVmaW5lZCBydWxlcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgQ29kZWNJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgVXVpZEludGVyZmFjZQogICAgICoKICAgICAqIEBwYXJhbSBVdWlkSW50ZXJmYWNlICR1dWlkIFRoZSBVVUlEIGZvciB3aGljaCB0byBjcmVhdGUgYSBoZXhhZGVjaW1hbAogICAgICogICAgIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQKICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVdWlkSW50ZXJmYWNlCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRJbnRlcmZhY2UgJHV1aWQgVGhlIFVVSUQgZm9yIHdoaWNoIHRvIGNyZWF0ZSBhIGJpbmFyeSBzdHJpbmcKICAgICAqICAgICByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGVCaW5hcnkoVXVpZEludGVyZmFjZSAkdXVpZCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBVdWlkSW50ZXJmYWNlIGRlcml2ZWQgZnJvbSBhIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kZWRVdWlkIFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8KICAgICAqICAgICBjb252ZXJ0IGludG8gYSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEFuIGluc3RhbmNlIG9mIGEgVVVJRCBkZWNvZGVkIGZyb20gYSBoZXhhZGVjaW1hbAogICAgICogICAgIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgZGVyaXZlZCBmcm9tIGEgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGNvbnZlcnQgaW50byBhCiAgICAgKiAgICAgVXVpZEludGVyZmFjZSBpbnN0YW5jZQogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBhIFVVSUQgZGVjb2RlZCBmcm9tIGEgYmluYXJ5IHN0cmluZwogICAgICogICAgIHJlcHJlc2VudGF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEd1aWRcR3VpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCi8qKgogKiBHdWlkU3RyaW5nQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllcnMgKEdVSUQpCiAqCiAqIEBzZWUgR3VpZAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBHdWlkU3RyaW5nQ29kZWMgZXh0ZW5kcyBTdHJpbmdDb2RlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGJ5dGVzID0gJHRoaXMtPmdldEJ5dGVzKCRlbmNvZGVkVXVpZCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QnVpbGRlcigpLT5idWlsZCgkdGhpcywgJHRoaXMtPnN3YXBCeXRlcygkYnl0ZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAvLyBTcGVjaWZpY2FsbHkgY2FsbCBwYXJlbnQ6OmRlY29kZSB0byBwcmVzZXJ2ZSBjb3JyZWN0IGJ5dGUgb3JkZXIKICAgICAgICByZXR1cm4gcGFyZW50OjpkZWNvZGUoYmluMmhleCgkYnl0ZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN3YXBzIGJ5dGVzIGFjY29yZGluZyB0byB0aGUgR1VJRCBydWxlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN3YXBCeXRlcyhzdHJpbmcgJGJ5dGVzKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICRieXRlc1szXSAuICRieXRlc1syXSAuICRieXRlc1sxXSAuICRieXRlc1swXQogICAgICAgICAgICAuICRieXRlc1s1XSAuICRieXRlc1s0XQogICAgICAgICAgICAuICRieXRlc1s3XSAuICRieXRlc1s2XQogICAgICAgICAgICAuIHN1YnN0cigkYnl0ZXMsIDgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKLyoqCiAqIE9yZGVyZWRUaW1lQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBhIFVVSUQsIG9wdGltaXppbmcgdGhlIGJ5dGUgb3JkZXIgZm9yCiAqIG1vcmUgZWZmaWNpZW50IHN0b3JhZ2UKICoKICogRm9yIGJpbmFyeSByZXByZXNlbnRhdGlvbnMgb2YgdmVyc2lvbiAxIFVVSUQsIHRoaXMgY29kZWMgbWF5IGJlIHVzZWQgdG8KICogcmVvcmdhbml6ZSB0aGUgdGltZSBmaWVsZHMsIG1ha2luZyB0aGUgVVVJRCBjbG9zZXIgdG8gc2VxdWVudGlhbCB3aGVuIHN0b3JpbmcKICogdGhlIGJ5dGVzLiBBY2NvcmRpbmcgdG8gUGVyY29uYSwgdGhpcyBvcHRpbWl6YXRpb24gY2FuIGltcHJvdmUgZGF0YWJhc2UKICogSU5TRVJUcyBhbmQgU0VMRUNUcyB1c2luZyB0aGUgVVVJRCBjb2x1bW4gYXMgYSBrZXkuCiAqCiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVVSUQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLiBPbmx5IHRoZSBiaW5hcnkKICogcmVwcmVzZW50YXRpb24gaXMgcmVvcmRlcmVkLgogKgogKiAqKlBMRUFTRSBOT1RFOioqIEJpbmFyeSByZXByZXNlbnRhdGlvbnMgb2YgVVVJRHMgZW5jb2RlZCB3aXRoIHRoaXMgY29kZWMgbXVzdAogKiBiZSBkZWNvZGVkIHdpdGggdGhpcyBjb2RlYy4gRGVjb2RpbmcgdXNpbmcgYW5vdGhlciBjb2RlYyBjYW4gcmVzdWx0IGluCiAqIG1hbGZvcm1lZCBVVUlEcy4KICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGVyY29uYS5jb20vYmxvZy8yMDE0LzEyLzE5L3N0b3JlLXV1aWQtb3B0aW1pemVkLXdheS8gU3RvcmluZyBVVUlEIFZhbHVlcyBpbiBNeVNRTAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBPcmRlcmVkVGltZUNvZGVjIGV4dGVuZHMgU3RyaW5nQ29kZWMKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQsIHdpdGggdGhlIHRpbWVzdGFtcAogICAgICogZmllbGRzIHJlYXJyYW5nZWQgZm9yIG9wdGltaXplZCBzdG9yYWdlCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZUJpbmFyeShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCR1dWlkLT5nZXRGaWVsZHMoKSBpbnN0YW5jZW9mIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UpCiAgICAgICAgICAgIHx8ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0V4cGVjdGVkIFJGQyA0MTIyIHZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRieXRlcyA9ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKTsKCiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICRieXRlc1s2XSAuICRieXRlc1s3XQogICAgICAgICAgICAuICRieXRlc1s0XSAuICRieXRlc1s1XQogICAgICAgICAgICAuICRieXRlc1swXSAuICRieXRlc1sxXSAuICRieXRlc1syXSAuICRieXRlc1szXQogICAgICAgICAgICAuIHN1YnN0cigkYnl0ZXMsIDgpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIFV1aWRJbnRlcmZhY2UgZGVyaXZlZCBmcm9tIGFuIG9yZGVyZWQtdGltZSBiaW5hcnkgc3RyaW5nCiAgICAgKiByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmICRieXRlcyBpcyBhbiBpbnZhbGlkIGxlbmd0aAogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICckYnl0ZXMgc3RyaW5nIHNob3VsZCBjb250YWluIDE2IGNoYXJhY3RlcnMuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVhcnJhbmdlIHRoZSBieXRlcyB0byB0aGVpciBvcmlnaW5hbCBvcmRlci4KICAgICAgICAkcmVhcnJhbmdlZEJ5dGVzID0gJGJ5dGVzWzRdIC4gJGJ5dGVzWzVdIC4gJGJ5dGVzWzZdIC4gJGJ5dGVzWzddCiAgICAgICAgICAgIC4gJGJ5dGVzWzJdIC4gJGJ5dGVzWzNdCiAgICAgICAgICAgIC4gJGJ5dGVzWzBdIC4gJGJ5dGVzWzFdCiAgICAgICAgICAgIC4gc3Vic3RyKCRieXRlcywgOCk7CgogICAgICAgICR1dWlkID0gcGFyZW50OjpkZWNvZGVCeXRlcygkcmVhcnJhbmdlZEJ5dGVzKTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCR1dWlkLT5nZXRGaWVsZHMoKSBpbnN0YW5jZW9mIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UpCiAgICAgICAgICAgIHx8ICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyB0byBkZWNvZGUgYSBub24tdGltZS1iYXNlZCBVVUlEIHVzaW5nICcKICAgICAgICAgICAgICAgIC4gJ09yZGVyZWRUaW1lQ29kZWMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHV1aWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/StringCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRVdWlkU3RyaW5nRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKCnVzZSBmdW5jdGlvbiBoZXgyYmluOwp1c2UgZnVuY3Rpb24gaW1wbG9kZTsKdXNlIGZ1bmN0aW9uIHN0cl9yZXBsYWNlOwp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKLyoqCiAqIFN0cmluZ0NvZGVjIGVuY29kZXMgYW5kIGRlY29kZXMgUkZDIDQxMjIgVVVJRHMKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBTdHJpbmdDb2RlYyBpbXBsZW1lbnRzIENvZGVjSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBVdWlkQnVpbGRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRidWlsZGVyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIFN0cmluZ0NvZGVjCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRCdWlsZGVySW50ZXJmYWNlICRidWlsZGVyIFRoZSBidWlsZGVyIHRvIHVzZSB3aGVuIGVuY29kaW5nIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVdWlkQnVpbGRlckludGVyZmFjZSAkYnVpbGRlcikKICAgIHsKICAgICAgICAkdGhpcy0+YnVpbGRlciA9ICRidWlsZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGUoVXVpZEludGVyZmFjZSAkdXVpZCk6IHN0cmluZwogICAgewogICAgICAgIC8qKiBAdmFyIEZpZWxkc0ludGVyZmFjZSAkZmllbGRzICovCiAgICAgICAgJGZpZWxkcyA9ICR1dWlkLT5nZXRGaWVsZHMoKTsKCiAgICAgICAgcmV0dXJuICRmaWVsZHMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldFRpbWVIaUFuZFZlcnNpb24oKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpLT50b1N0cmluZygpCiAgICAgICAgICAgIC4gJGZpZWxkcy0+Z2V0Q2xvY2tTZXFMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuICRmaWVsZHMtPmdldE5vZGUoKS0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZUJpbmFyeShVdWlkSW50ZXJmYWNlICR1dWlkKTogc3RyaW5nCiAgICB7CiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZFV1aWRTdHJpbmdFeGNlcHRpb24KICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZW5jb2RlZFV1aWQpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZGVyLT5idWlsZCgkdGhpcywgJHRoaXMtPmdldEJ5dGVzKCRlbmNvZGVkVXVpZCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICckYnl0ZXMgc3RyaW5nIHNob3VsZCBjb250YWluIDE2IGNoYXJhY3RlcnMuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5idWlsZGVyLT5idWlsZCgkdGhpcywgJGJ5dGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFVVSUQgYnVpbGRlcgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBieXRlIHN0cmluZyBvZiB0aGUgVVVJRAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Qnl0ZXMoc3RyaW5nICRlbmNvZGVkVXVpZCk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWRVdWlkID0gc3RyX3JlcGxhY2UoCiAgICAgICAgICAgIFsndXJuOicsICd1dWlkOicsICdVUk46JywgJ1VVSUQ6JywgJ3snLCAnfScsICctJ10sCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAkZW5jb2RlZFV1aWQKICAgICAgICApOwoKICAgICAgICAkY29tcG9uZW50cyA9IFsKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCAwLCA4KSwKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCA4LCA0KSwKICAgICAgICAgICAgc3Vic3RyKCRwYXJzZWRVdWlkLCAxMiwgNCksCiAgICAgICAgICAgIHN1YnN0cigkcGFyc2VkVXVpZCwgMTYsIDQpLAogICAgICAgICAgICBzdWJzdHIoJHBhcnNlZFV1aWQsIDIwKSwKICAgICAgICBdOwoKICAgICAgICBpZiAoIVV1aWQ6OmlzVmFsaWQoaW1wbG9kZSgnLScsICRjb21wb25lbnRzKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRVdWlkU3RyaW5nRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ludmFsaWQgVVVJRCBzdHJpbmc6ICcgLiAkZW5jb2RlZFV1aWQKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSBoZXgyYmluKCRwYXJzZWRVdWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkVXVpZFN0cmluZ0V4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CnVzZSBmdW5jdGlvbiBzdWJzdHJfcmVwbGFjZTsKCi8qKgogKiBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBlbmNvZGVzIGFuZCBkZWNvZGVzIENPTUJzLCB3aXRoIHRoZSB0aW1lc3RhbXAgYXMgdGhlCiAqIGZpcnN0IDQ4IGJpdHMKICoKICogSW4gY29udHJhc3Qgd2l0aCB0aGUgVGltZXN0YW1wTGFzdENvbWJDb2RlYywgdGhlIFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjCiAqIGFkZHMgdGhlIHRpbWVzdGFtcCB0byB0aGUgZmlyc3QgNDggYml0cyBvZiB0aGUgQ09NQi4gVG8gZ2VuZXJhdGUgYQogKiB0aW1lc3RhbXAtZmlyc3QgQ09NQiwgc2V0IHRoZSBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBhcyB0aGUgY29kZWMsIGFsb25nCiAqIHdpdGggdGhlIENvbWJHZW5lcmF0b3IgYXMgdGhlIHJhbmRvbSBnZW5lcmF0b3IuCiAqCiAqIGBgYCBwaHAKICogJGZhY3RvcnkgPSBuZXcgVXVpZEZhY3RvcnkoKTsKICoKICogJGZhY3RvcnktPnNldENvZGVjKG5ldyBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYygkZmFjdG9yeS0+Z2V0VXVpZEJ1aWxkZXIoKSkpOwogKgogKiAkZmFjdG9yeS0+c2V0UmFuZG9tR2VuZXJhdG9yKG5ldyBDb21iR2VuZXJhdG9yKAogKiAgICAgJGZhY3RvcnktPmdldFJhbmRvbUdlbmVyYXRvcigpLAogKiAgICAgJGZhY3RvcnktPmdldE51bWJlckNvbnZlcnRlcigpCiAqICkpOwogKgogKiAkdGltZXN0YW1wRmlyc3RDb21iID0gJGZhY3RvcnktPnV1aWQ0KCk7CiAqIGBgYAogKgogKiBAbGluayBodHRwczovL3d3dy5pbmZvcm1pdC5jb20vYXJ0aWNsZXMvcHJpbnRlcmZyaWVuZGx5LzI1ODYyIFRoZSBDb3N0IG9mIEdVSURzIGFzIFByaW1hcnkgS2V5cwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBUaW1lc3RhbXBGaXJzdENvbWJDb2RlYyBleHRlbmRzIFN0cmluZ0NvZGVjCnsKICAgIC8qKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZSB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudCB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKFV1aWRJbnRlcmZhY2UgJHV1aWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+c3dhcEJ5dGVzKCR1dWlkLT5nZXRGaWVsZHMoKS0+Z2V0Qnl0ZXMoKSk7CgogICAgICAgIHJldHVybiBzcHJpbnRmKAogICAgICAgICAgICAnJTA4cy0lMDRzLSUwNHMtJTA0cy0lMDEycycsCiAgICAgICAgICAgIGJpbjJoZXgoc3Vic3RyKCRieXRlcywgMCwgNCkpLAogICAgICAgICAgICBiaW4yaGV4KHN1YnN0cigkYnl0ZXMsIDQsIDIpKSwKICAgICAgICAgICAgYmluMmhleChzdWJzdHIoJGJ5dGVzLCA2LCAyKSksCiAgICAgICAgICAgIGJpbjJoZXgoc3Vic3RyKCRieXRlcywgOCwgMikpLAogICAgICAgICAgICBiaW4yaGV4KHN1YnN0cigkYnl0ZXMsIDEwKSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTW9yZVNwZWNpZmljUmV0dXJuVHlwZSB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICogQHBzYWxtLXN1cHByZXNzIExlc3NTcGVjaWZpY1JldHVyblN0YXRlbWVudCB3ZSBrbm93IHRoYXQgdGhlIHJldHJpZXZlZCBgc3RyaW5nYCBpcyBuZXZlciBlbXB0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlQmluYXJ5KFV1aWRJbnRlcmZhY2UgJHV1aWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHBocHN0YW4taWdub3JlLW5leHQtbGluZSBQSFBTdGFuIGNvbXBsYWlucyB0aGF0IHRoaXMgaXMgbm90IGEgbm9uLWVtcHR5LXN0cmluZy4gKi8KICAgICAgICByZXR1cm4gJHRoaXMtPnN3YXBCeXRlcygkdXVpZC0+Z2V0RmllbGRzKCktPmdldEJ5dGVzKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkVXVpZFN0cmluZ0V4Y2VwdGlvbgogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRlbmNvZGVkVXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+Z2V0Qnl0ZXMoJGVuY29kZWRVdWlkKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRCdWlsZGVyKCktPmJ1aWxkKCR0aGlzLCAkdGhpcy0+c3dhcEJ5dGVzKCRieXRlcykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVCeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QnVpbGRlcigpLT5idWlsZCgkdGhpcywgJHRoaXMtPnN3YXBCeXRlcygkYnl0ZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN3YXBzIGJ5dGVzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wLWZpcnN0IENPTUIgcnVsZXMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzd2FwQnl0ZXMoc3RyaW5nICRieXRlcyk6IHN0cmluZwogICAgewogICAgICAgICRmaXJzdDQ4Qml0cyA9IHN1YnN0cigkYnl0ZXMsIDAsIDYpOwogICAgICAgICRsYXN0NDhCaXRzID0gc3Vic3RyKCRieXRlcywgLTYpOwoKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRsYXN0NDhCaXRzLCAwLCA2KTsKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRmaXJzdDQ4Qml0cywgLTYpOwoKICAgICAgICByZXR1cm4gJGJ5dGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvZGVjOwoKLyoqCiAqIFRpbWVzdGFtcExhc3RDb21iQ29kZWMgZW5jb2RlcyBhbmQgZGVjb2RlcyBDT01Ccywgd2l0aCB0aGUgdGltZXN0YW1wIGFzIHRoZQogKiBsYXN0IDQ4IGJpdHMKICoKICogVGhlIENvbWJHZW5lcmF0b3Igd2hlbiB1c2VkIHdpdGggdGhlIFN0cmluZ0NvZGVjIChhbmQsIGJ5IHByb3h5LCB0aGUKICogVGltZXN0YW1wTGFzdENvbWJDb2RlYykgYWRkcyB0aGUgdGltZXN0YW1wIHRvIHRoZSBsYXN0IDQ4IGJpdHMgb2YgdGhlIENPTUIuCiAqIFRoZSBUaW1lc3RhbXBMYXN0Q29tYkNvZGVjIGlzIHByb3ZpZGVkIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeS4gSW4KICogcHJhY3RpY2UsIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgU3RyaW5nQ29kZWMgYnV0LCBpdCBtYXkgYmUgdXNlZAogKiB3aXRoIHRoZSBDb21iR2VuZXJhdG9yIGZvciBhZGRpdGlvbmFsIGNvbnRleHQgd2hlbiByZWFkaW5nIGNvZGUuCiAqCiAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZS4gQnkgZGVmYXVsdCwgdGhlIGNvZGVjIHVzZWQgYnkgVXVpZEZhY3RvcnkgaXMgdGhlCiAqIFN0cmluZ0NvZGVjLCBidXQgaGVyZSwgd2UgZXhwbGljaXRseSBzZXQgdGhlIFRpbWVzdGFtcExhc3RDb21iQ29kZWMuIEl0IGlzCiAqIHJlZHVuZGFudCwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgd2UgaW50ZW5kIHRoaXMgQ09NQiB0byBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUKICogdGltZXN0YW1wIGFwcGVhcmluZyBhdCB0aGUgZW5kLgogKgogKiBgYGAgcGhwCiAqICRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAqCiAqICRmYWN0b3J5LT5zZXRDb2RlYyhuZXcgVGltZXN0YW1wTGFzdENvbWJDb2RlYygkZmFjdG9yeS0+Z2V0VXVpZEJ1aWxkZXIoKSkpOwogKgogKiAkZmFjdG9yeS0+c2V0UmFuZG9tR2VuZXJhdG9yKG5ldyBDb21iR2VuZXJhdG9yKAogKiAgICAgJGZhY3RvcnktPmdldFJhbmRvbUdlbmVyYXRvcigpLAogKiAgICAgJGZhY3RvcnktPmdldE51bWJlckNvbnZlcnRlcigpCiAqICkpOwogKgogKiAkdGltZXN0YW1wTGFzdENvbWIgPSAkZmFjdG9yeS0+dXVpZDQoKTsKICogYGBgCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LmluZm9ybWl0LmNvbS9hcnRpY2xlcy9wcmludGVyZnJpZW5kbHkvMjU4NjIgVGhlIENvc3Qgb2YgR1VJRHMgYXMgUHJpbWFyeSBLZXlzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFRpbWVzdGFtcExhc3RDb21iQ29kZWMgZXh0ZW5kcyBTdHJpbmdDb2RlYwp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKCi8qKgogKiBQcmV2aW91c2x5IHVzZWQgdG8gaW50ZWdyYXRlIG1vb250b2FzdC9tYXRoIGFzIGEgYmlnbnVtIGFyaXRobWV0aWMgbGlicmFyeSwKICogQmlnTnVtYmVyQ29udmVydGVyIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgR2VuZXJpY051bWJlckNvbnZlcnRlcgogKgogKiBAZGVwcmVjYXRlZCBUcmFuc2l0aW9uIHRvIHtAc2VlIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBCaWdOdW1iZXJDb252ZXJ0ZXIgaW1wbGVtZW50cyBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjb252ZXJ0ZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udmVydGVyID0gbmV3IEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXIobmV3IEJyaWNrTWF0aENhbGN1bGF0b3IoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21IZXgoc3RyaW5nICRoZXgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRlci0+ZnJvbUhleCgkaGV4KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXgoc3RyaW5nICRudW1iZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRlci0+dG9IZXgoJG51bWJlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7CgovKioKICogQGRlcHJlY2F0ZWQgRGVncmFkZWROdW1iZXJDb252ZXJ0ZXIgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBmb3IgY29udmVydGluZwogKiAgICAgbnVtYmVycyBvbiAzMi1iaXQgc3lzdGVtcy4gVHJhbnNpdGlvbiB0byB7QHNlZSBHZW5lcmljTnVtYmVyQ29udmVydGVyfS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgRGVncmFkZWROdW1iZXJDb252ZXJ0ZXIgZXh0ZW5kcyBCaWdOdW1iZXJDb252ZXJ0ZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQ2FsY3VsYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0OwoKLyoqCiAqIEdlbmVyaWNOdW1iZXJDb252ZXJ0ZXIgdXNlcyB0aGUgcHJvdmlkZWQgY2FsY3VsYXRvciB0byBjb252ZXJ0IGRlY2ltYWwKICogbnVtYmVycyB0byBhbmQgZnJvbSBoZXhhZGVjaW1hbCB2YWx1ZXMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgR2VuZXJpY051bWJlckNvbnZlcnRlciBpbXBsZW1lbnRzIE51bWJlckNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ2FsY3VsYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjYWxjdWxhdG9yOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKQogICAgewogICAgICAgICR0aGlzLT5jYWxjdWxhdG9yID0gJGNhbGN1bGF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1yZXR1cm4gbnVtZXJpYy1zdHJpbmcKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlIHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50IHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tSGV4KHN0cmluZyAkaGV4KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yLT5mcm9tQmFzZSgkaGV4LCAxNiktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICogQHBzYWxtLXB1cmUKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSGV4KHN0cmluZyAkbnVtYmVyKTogc3RyaW5nCiAgICB7CiAgICAgICAgLyoqIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUgUEhQU3RhbiBjb21wbGFpbnMgdGhhdCB0aGlzIGlzIG5vdCBhIG5vbi1lbXB0eS1zdHJpbmcuICovCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yLT50b0Jhc2UobmV3IEludGVnZXJPYmplY3QoJG51bWJlciksIDE2KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlcjsKCi8qKgogKiBBIG51bWJlciBjb252ZXJ0ZXIgY29udmVydHMgVVVJRHMgZnJvbSBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzIGludG8KICogcmVwcmVzZW50YXRpb25zIG9mIGludGVnZXJzIGFuZCB2aWNlIHZlcnNhCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIGhleGFkZWNpbWFsIG51bWJlciBpbnRvIGFuIHN0cmluZyBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mCiAgICAgKiB0aGUgbnVtYmVyCiAgICAgKgogICAgICogVGhlIGludGVnZXIgcmVwcmVzZW50YXRpb24gcmV0dXJuZWQgaXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCiAgICAgKiBpbnRlZ2VyLCB0byBhY2NvbW1vZGF0ZSB1bnNpZ25lZCBpbnRlZ2VycyBncmVhdGVyIHRoYW4gUEhQX0lOVF9NQVguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGV4IFRoZSBoZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gY29udmVydAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBudW1lcmljLXN0cmluZwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tSGV4KHN0cmluZyAkaGV4KTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBzdHJpbmcgaW50ZWdlciByZXByZXNlbnRhdGlvbiBpbnRvIGEgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbnVtYmVyIEEgc3RyaW5nIGludGVnZXIgcmVwcmVzZW50YXRpb24gdG8gY29udmVydDsgdGhpcwogICAgICogICAgIG11c3QgYmUgYSBudW1lcmljIHN0cmluZyB0byBhY2NvbW1vZGF0ZSB1bnNpZ25lZCBpbnRlZ2VycyBncmVhdGVyCiAgICAgKiAgICAgdGhhbiBQSFBfSU5UX01BWC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXgoc3RyaW5nICRudW1iZXIpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxCcmlja01hdGhDYWxjdWxhdG9yOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcVGltZTsKCi8qKgogKiBQcmV2aW91c2x5IHVzZWQgdG8gaW50ZWdyYXRlIG1vb250b2FzdC9tYXRoIGFzIGEgYmlnbnVtIGFyaXRobWV0aWMgbGlicmFyeSwKICogQmlnTnVtYmVyVGltZUNvbnZlcnRlciBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIEdlbmVyaWNUaW1lQ29udmVydGVyCiAqCiAqIEBkZXByZWNhdGVkIFRyYW5zaXRpb24gdG8ge0BzZWUgR2VuZXJpY1RpbWVDb252ZXJ0ZXJ9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBCaWdOdW1iZXJUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRjb252ZXJ0ZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udmVydGVyID0gbmV3IEdlbmVyaWNUaW1lQ29udmVydGVyKG5ldyBCcmlja01hdGhDYWxjdWxhdG9yKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udmVydGVyLT5jYWxjdWxhdGVUaW1lKCRzZWNvbmRzLCAkbWljcm9zZWNvbmRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRpbWUoSGV4YWRlY2ltYWwgJHV1aWRUaW1lc3RhbXApOiBUaW1lCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR1dWlkVGltZXN0YW1wKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKLyoqCiAqIEBkZXByZWNhdGVkIERlZ3JhZGVkVGltZUNvbnZlcnRlciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IGZvciBjb252ZXJ0aW5nCiAqICAgICB0aW1lIG9uIDMyLWJpdCBzeXN0ZW1zLiBUcmFuc2l0aW9uIHRvIHtAc2VlIEdlbmVyaWNUaW1lQ29udmVydGVyfS4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgRGVncmFkZWRUaW1lQ29udmVydGVyIGV4dGVuZHMgQmlnTnVtYmVyVGltZUNvbnZlcnRlcgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxDYWxjdWxhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxSb3VuZGluZ01vZGU7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7Cgp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIEdlbmVyaWNUaW1lQ29udmVydGVyIHVzZXMgdGhlIHByb3ZpZGVkIGNhbGN1bGF0b3IgdG8gY2FsY3VsYXRlIGFuZCBjb252ZXJ0CiAqIHRpbWUgdmFsdWVzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEdlbmVyaWNUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBlcG9jaAogICAgICogdG8gdGhlIFVuaXggZXBvY2guCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgR1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTID0gJzEyMjE5MjkyODAwMDAwMDAwMCc7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBpbiBvbmUgc2Vjb25kLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFNFQ09ORF9JTlRFUlZBTFMgPSAnMTAwMDAwMDAnOwoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgaW4gb25lIG1pY3Jvc2Vjb25kLgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IE1JQ1JPU0VDT05EX0lOVEVSVkFMUyA9ICcxMCc7CgogICAgLyoqCiAgICAgKiBAdmFyIENhbGN1bGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FsY3VsYXRvcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ2FsY3VsYXRvckludGVyZmFjZSAkY2FsY3VsYXRvcikKICAgIHsKICAgICAgICAkdGhpcy0+Y2FsY3VsYXRvciA9ICRjYWxjdWxhdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICR0aW1lc3RhbXAgPSBuZXcgVGltZSgkc2Vjb25kcywgJG1pY3Jvc2Vjb25kcyk7CgogICAgICAgIC8vIENvbnZlcnQgdGhlIHNlY29uZHMgaW50byBhIGNvdW50IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscy4KICAgICAgICAkc2VjID0gJHRoaXMtPmNhbGN1bGF0b3ItPm11bHRpcGx5KAogICAgICAgICAgICAkdGltZXN0YW1wLT5nZXRTZWNvbmRzKCksCiAgICAgICAgICAgIG5ldyBJbnRlZ2VyT2JqZWN0KHNlbGY6OlNFQ09ORF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgbWljcm9zZWNvbmRzIGludG8gYSBjb3VudCBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMuCiAgICAgICAgJHVzZWMgPSAkdGhpcy0+Y2FsY3VsYXRvci0+bXVsdGlwbHkoCiAgICAgICAgICAgICR0aW1lc3RhbXAtPmdldE1pY3Jvc2Vjb25kcygpLAogICAgICAgICAgICBuZXcgSW50ZWdlck9iamVjdChzZWxmOjpNSUNST1NFQ09ORF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29tYmluZSB0aGUgc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzIGludGVydmFscyBhbmQgYWRkIHRoZSBjb3VudCBvZgogICAgICAgIC8vIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBmcm9tIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZXBvY2ggdG8gdGhlCiAgICAgICAgLy8gVW5peCBlcG9jaC4gVGhpcyBnaXZlcyB1cyB0aGUgY29ycmVjdCBjb3VudCBvZiAxMDAtbmFub3NlY29uZAogICAgICAgIC8vIGludGVydmFscyBzaW5jZSB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGVwb2NoIGZvciB0aGUgZ2l2ZW4gc2Vjb25kcwogICAgICAgIC8vIGFuZCBtaWNyb3NlY29uZHMuCiAgICAgICAgLyoqIEB2YXIgSW50ZWdlck9iamVjdCAkdXVpZFRpbWUgKi8KICAgICAgICAkdXVpZFRpbWUgPSAkdGhpcy0+Y2FsY3VsYXRvci0+YWRkKAogICAgICAgICAgICAkc2VjLAogICAgICAgICAgICAkdXNlYywKICAgICAgICAgICAgbmV3IEludGVnZXJPYmplY3Qoc2VsZjo6R1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTKQogICAgICAgICk7CgogICAgICAgICR1dWlkVGltZUhleCA9IHN0cl9wYWQoCiAgICAgICAgICAgICR0aGlzLT5jYWxjdWxhdG9yLT50b0hleGFkZWNpbWFsKCR1dWlkVGltZSktPnRvU3RyaW5nKCksCiAgICAgICAgICAgIDE2LAogICAgICAgICAgICAnMCcsCiAgICAgICAgICAgIFNUUl9QQURfTEVGVAogICAgICAgICk7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoJHV1aWRUaW1lSGV4KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRpbWUoSGV4YWRlY2ltYWwgJHV1aWRUaW1lc3RhbXApOiBUaW1lCiAgICB7CiAgICAgICAgLy8gRnJvbSB0aGUgdG90YWwsIHN1YnRyYWN0IHRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20KICAgICAgICAvLyB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGVwb2NoIHRvIHRoZSBVbml4IGVwb2NoLiBUaGlzIGdpdmVzIHVzIHRoZQogICAgICAgIC8vIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgZnJvbSB0aGUgVW5peCBlcG9jaCwgd2hpY2ggYWxzbwogICAgICAgIC8vIGluY2x1ZGVzIHRoZSBtaWNyb3RpbWUuCiAgICAgICAgJGVwb2NoTmFub3NlY29uZHMgPSAkdGhpcy0+Y2FsY3VsYXRvci0+c3VidHJhY3QoCiAgICAgICAgICAgICR0aGlzLT5jYWxjdWxhdG9yLT50b0ludGVnZXIoJHV1aWRUaW1lc3RhbXApLAogICAgICAgICAgICBuZXcgSW50ZWdlck9iamVjdChzZWxmOjpHUkVHT1JJQU5fVE9fVU5JWF9JTlRFUlZBTFMpCiAgICAgICAgKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGludG8gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogICAgICAgICR1bml4VGltZXN0YW1wID0gJHRoaXMtPmNhbGN1bGF0b3ItPmRpdmlkZSgKICAgICAgICAgICAgUm91bmRpbmdNb2RlOjpIQUxGX1VQLAogICAgICAgICAgICA2LAogICAgICAgICAgICAkZXBvY2hOYW5vc2Vjb25kcywKICAgICAgICAgICAgbmV3IEludGVnZXJPYmplY3Qoc2VsZjo6U0VDT05EX0lOVEVSVkFMUykKICAgICAgICApOwoKICAgICAgICAkc3BsaXQgPSBleHBsb2RlKCcuJywgKHN0cmluZykgJHVuaXhUaW1lc3RhbXAsIDIpOwoKICAgICAgICByZXR1cm4gbmV3IFRpbWUoJHNwbGl0WzBdLCAkc3BsaXRbMV0gPz8gMCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lOwoKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxCcmlja01hdGhDYWxjdWxhdG9yOwp1c2UgUmFtc2V5XFV1aWRcTWF0aFxDYWxjdWxhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGlzX2Zsb2F0Owp1c2UgZnVuY3Rpb24gaXNfaW50Owp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CnVzZSBjb25zdCBTVFJfUEFEX1JJR0hUOwoKLyoqCiAqIFBocFRpbWVDb252ZXJ0ZXIgdXNlcyBidWlsdC1pbiBQSFAgZnVuY3Rpb25zIGFuZCBzdGFuZGFyZCBtYXRoIG9wZXJhdGlvbnMKICogYXZhaWxhYmxlIHRvIHRoZSBQSFAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gcHJvdmlkZSBmYWNpbGl0aWVzIGZvcgogKiBjb252ZXJ0aW5nIHBhcnRzIG9mIHRpbWUgaW50byByZXByZXNlbnRhdGlvbnMgdGhhdCBtYXkgYmUgdXNlZCBpbiBVVUlEcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBQaHBUaW1lQ29udmVydGVyIGltcGxlbWVudHMgVGltZUNvbnZlcnRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGZyb20gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBlcG9jaAogICAgICogdG8gdGhlIFVuaXggZXBvY2guCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgR1JFR09SSUFOX1RPX1VOSVhfSU5URVJWQUxTID0gMHgwMWIyMWRkMjEzODE0MDAwOwoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgaW4gb25lIHNlY29uZC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTRUNPTkRfSU5URVJWQUxTID0gMTAwMDAwMDA7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBpbiBvbmUgbWljcm9zZWNvbmQuCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgTUlDUk9TRUNPTkRfSU5URVJWQUxTID0gMTA7CgogICAgLyoqCiAgICAgKiBAdmFyIENhbGN1bGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2FsY3VsYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRmYWxsYmFja0NvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHBocFByZWNpc2lvbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP0NhbGN1bGF0b3JJbnRlcmZhY2UgJGNhbGN1bGF0b3IgPSBudWxsLAogICAgICAgID9UaW1lQ29udmVydGVySW50ZXJmYWNlICRmYWxsYmFja0NvbnZlcnRlciA9IG51bGwKICAgICkgewogICAgICAgIGlmICgkY2FsY3VsYXRvciA9PT0gbnVsbCkgewogICAgICAgICAgICAkY2FsY3VsYXRvciA9IG5ldyBCcmlja01hdGhDYWxjdWxhdG9yKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZhbGxiYWNrQ29udmVydGVyID09PSBudWxsKSB7CiAgICAgICAgICAgICRmYWxsYmFja0NvbnZlcnRlciA9IG5ldyBHZW5lcmljVGltZUNvbnZlcnRlcigkY2FsY3VsYXRvcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2FsY3VsYXRvciA9ICRjYWxjdWxhdG9yOwogICAgICAgICR0aGlzLT5mYWxsYmFja0NvbnZlcnRlciA9ICRmYWxsYmFja0NvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+cGhwUHJlY2lzaW9uID0gKGludCkgaW5pX2dldCgncHJlY2lzaW9uJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbGN1bGF0ZVRpbWUoc3RyaW5nICRzZWNvbmRzLCBzdHJpbmcgJG1pY3Jvc2Vjb25kcyk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJHNlY29uZHMgPSBuZXcgSW50ZWdlck9iamVjdCgkc2Vjb25kcyk7CiAgICAgICAgJG1pY3Jvc2Vjb25kcyA9IG5ldyBJbnRlZ2VyT2JqZWN0KCRtaWNyb3NlY29uZHMpOwoKICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvdW50IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBzaW5jZSB0aGUgR3JlZ29yaWFuCiAgICAgICAgLy8gY2FsZW5kYXIgZXBvY2ggZm9yIHRoZSBnaXZlbiBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMuCiAgICAgICAgJHV1aWRUaW1lID0gKChpbnQpICRzZWNvbmRzLT50b1N0cmluZygpICogc2VsZjo6U0VDT05EX0lOVEVSVkFMUykKICAgICAgICAgICAgKyAoKGludCkgJG1pY3Jvc2Vjb25kcy0+dG9TdHJpbmcoKSAqIHNlbGY6Ok1JQ1JPU0VDT05EX0lOVEVSVkFMUykKICAgICAgICAgICAgKyBzZWxmOjpHUkVHT1JJQU5fVE9fVU5JWF9JTlRFUlZBTFM7CgogICAgICAgIC8vIENoZWNrIHRvIHNlZSB3aGV0aGVyIHdlJ3ZlIG92ZXJmbG93ZWQgdGhlIG1heC9taW4gaW50ZWdlciBzaXplLgogICAgICAgIC8vIElmIHNvLCB3ZSB3aWxsIGRlZmF1bHQgdG8gYSBkaWZmZXJlbnQgdGltZSBjb252ZXJ0ZXIuCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb24gKi8KICAgICAgICBpZiAoIWlzX2ludCgkdXVpZFRpbWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tDb252ZXJ0ZXItPmNhbGN1bGF0ZVRpbWUoCiAgICAgICAgICAgICAgICAkc2Vjb25kcy0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICRtaWNyb3NlY29uZHMtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChkZWNoZXgoJHV1aWRUaW1lKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUaW1lKEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wKTogVGltZQogICAgewogICAgICAgICR0aW1lc3RhbXAgPSAkdGhpcy0+Y2FsY3VsYXRvci0+dG9JbnRlZ2VyKCR1dWlkVGltZXN0YW1wKTsKCiAgICAgICAgLy8gQ29udmVydCB0aGUgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIGludG8gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogICAgICAgICRzcGxpdFRpbWUgPSAkdGhpcy0+c3BsaXRUaW1lKAogICAgICAgICAgICAoKGludCkgJHRpbWVzdGFtcC0+dG9TdHJpbmcoKSAtIHNlbGY6OkdSRUdPUklBTl9UT19VTklYX0lOVEVSVkFMUykKICAgICAgICAgICAgLyBzZWxmOjpTRUNPTkRfSU5URVJWQUxTCiAgICAgICAgKTsKCiAgICAgICAgaWYgKGNvdW50KCRzcGxpdFRpbWUpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tDb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR1dWlkVGltZXN0YW1wKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgVGltZSgkc3BsaXRUaW1lWydzZWMnXSwgJHNwbGl0VGltZVsndXNlYyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJHRpbWUgVGhlIHRpbWUgdG8gc3BsaXQgaW50byBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3BsaXRUaW1lKCR0aW1lKTogYXJyYXkKICAgIHsKICAgICAgICAkc3BsaXQgPSBleHBsb2RlKCcuJywgKHN0cmluZykgJHRpbWUsIDIpOwoKICAgICAgICAvLyBJZiB0aGUgJHRpbWUgdmFsdWUgaXMgYSBmbG9hdCBidXQgJHNwbGl0IG9ubHkgaGFzIDEgZWxlbWVudCwgdGhlbiB0aGUKICAgICAgICAvLyBmbG9hdCBtYXRoIHdhcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHNlY29uZCwgc28gd2Ugd2FudCB0byByZXR1cm4KICAgICAgICAvLyBhbiBlbXB0eSBhcnJheSB0byBhbGxvdyB1c2Ugb2YgdGhlIGZhbGxiYWNrIGNvbnZlcnRlci4KICAgICAgICBpZiAoaXNfZmxvYXQoJHRpbWUpICYmIGNvdW50KCRzcGxpdCkgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvdW50KCRzcGxpdCkgPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdzZWMnID0+ICRzcGxpdFswXSwKICAgICAgICAgICAgICAgICd1c2VjJyA9PiAnMCcsCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgbWljcm9zZWNvbmRzIGFyZSBsZXNzIHRoYW4gc2l4IGNoYXJhY3RlcnMgQU5EIHRoZSBsZW5ndGggb2YKICAgICAgICAvLyB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgUEhQIHByZWNpc2lvbiwgdGhlbiBpdCdzCiAgICAgICAgLy8gcG9zc2libGUgdGhhdCB3ZSBsb3N0IHNvbWUgcHJlY2lzaW9uIGZvciB0aGUgbWljcm9zZWNvbmRzLiBSZXR1cm4gYW4KICAgICAgICAvLyBlbXB0eSBhcnJheSwgc28gdGhhdCB3ZSBjYW4gY2hvb3NlIHRvIHVzZSB0aGUgZmFsbGJhY2sgY29udmVydGVyLgogICAgICAgIGlmIChzdHJsZW4oJHNwbGl0WzFdKSA8IDYgJiYgc3RybGVuKChzdHJpbmcpICR0aW1lKSA+PSAkdGhpcy0+cGhwUHJlY2lzaW9uKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgICRtaWNyb3NlY29uZHMgPSAkc3BsaXRbMV07CgogICAgICAgIC8vIEVuc3VyZSB0aGUgbWljcm9zZWNvbmRzIGFyZSBubyBsb25nZXIgdGhhbiA2IGRpZ2l0cy4gSWYgdGhleSBhcmUsCiAgICAgICAgLy8gdHJ1bmNhdGUgdGhlIG51bWJlciB0byB0aGUgZmlyc3QgNiBkaWdpdHMgYW5kIHJvdW5kIHVwLCBpZiBuZWVkZWQuCiAgICAgICAgaWYgKHN0cmxlbigkbWljcm9zZWNvbmRzKSA+IDYpIHsKICAgICAgICAgICAgJHJvdW5kaW5nRGlnaXQgPSAoaW50KSBzdWJzdHIoJG1pY3Jvc2Vjb25kcywgNiwgMSk7CiAgICAgICAgICAgICRtaWNyb3NlY29uZHMgPSAoaW50KSBzdWJzdHIoJG1pY3Jvc2Vjb25kcywgMCwgNik7CgogICAgICAgICAgICBpZiAoJHJvdW5kaW5nRGlnaXQgPj0gNSkgewogICAgICAgICAgICAgICAgJG1pY3Jvc2Vjb25kcysrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2VjJyA9PiAkc3BsaXRbMF0sCiAgICAgICAgICAgICd1c2VjJyA9PiBzdHJfcGFkKChzdHJpbmcpICRtaWNyb3NlY29uZHMsIDYsICcwJywgU1RSX1BBRF9SSUdIVCksCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXENvbnZlcnRlcjsKCnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKLyoqCiAqIEEgdGltZSBjb252ZXJ0ZXIgY29udmVydHMgdGltZXN0YW1wcyBpbnRvIHJlcHJlc2VudGF0aW9ucyB0aGF0IG1heSBiZSB1c2VkCiAqIGluIFVVSURzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBUaW1lQ29udmVydGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogVXNlcyB0aGUgcHJvdmlkZWQgc2Vjb25kcyBhbmQgbWljcm8tc2Vjb25kcyB0byBjYWxjdWxhdGUgdGhlIGNvdW50IG9mCiAgICAgKiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMgc2luY2UgVVRDIDAwOjAwOjAwLjAwLCAxNSBPY3RvYmVyIDE1ODIsIGZvcgogICAgICogUkZDIDQxMjIgdmFyaWFudCBVVUlEcwogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjIuMiBSRkMgNDEyMiwgwqcgNC4yLjI6IEdlbmVyYXRpb24gRGV0YWlscwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY29uZHMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBvZiBzZWNvbmRzCiAgICAgKiAgICAgc2luY2UgdGhlIFVuaXggZXBvY2ggZm9yIHRoZSB0aW1lIHRvIGNhbGN1bGF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkbWljcm9zZWNvbmRzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtaWNyby1zZWNvbmRzCiAgICAgKiAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aW1lIHRvIGNhbGN1bGF0ZQogICAgICoKICAgICAqIEByZXR1cm4gSGV4YWRlY2ltYWwgVGhlIGZ1bGwgVVVJRCB0aW1lc3RhbXAgYXMgYSBIZXhhZGVjaW1hbCB2YWx1ZQogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVUaW1lKHN0cmluZyAkc2Vjb25kcywgc3RyaW5nICRtaWNyb3NlY29uZHMpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgdGltZXN0YW1wIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byBhIFVuaXggdGltZXN0YW1wCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wIEEgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKiAgICAgdGltZXN0YW1wOyBhIFVVSUQgdGltZXN0YW1wIGlzIGEgY291bnQgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzCiAgICAgKiAgICAgc2luY2UgVVRDIDAwOjAwOjAwLjAwLCAxNSBPY3RvYmVyIDE1ODIuCiAgICAgKgogICAgICogQHJldHVybiBUaW1lIEFuIGluc3RhbmNlIG9mIHtAc2VlIFRpbWV9CiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUaW1lKEhleGFkZWNpbWFsICR1dWlkVGltZXN0YW1wKTogVGltZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DegradedUuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKLyoqCiAqIEBkZXByZWNhdGVkIERlZ3JhZGVkVXVpZCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCBVVUlEcyBvbiAzMi1iaXQKICogICAgIHN5c3RlbXMuIFRyYW5zaXRpb24gdHlwZWhpbnRzIHRvIHtAc2VlIFV1aWRJbnRlcmZhY2V9LgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpjbGFzcyBEZWdyYWRlZFV1aWQgZXh0ZW5kcyBVdWlkCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKCi8qKgogKiBUaGlzIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgZGVwcmVjYXRlZCBtZXRob2RzIGZvciByYW1zZXkvdXVpZDsgdGhpcwogKiBpbnRlcmZhY2UgYW5kIGl0cyBtZXRob2RzIHdpbGwgYmUgcmVtb3ZlZCBpbiByYW1zZXkvdXVpZCA1LjAuMC4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIERlcHJlY2F0ZWRVdWlkSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBhbHRlcm5hdGl2ZQogICAgICogICAgIHJlY29tbWVuZGF0aW9uLCBzbyBwbGFuIGFjY29yZGluZ2x5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWRIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxTG93KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXF1ZW5jZUhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBJbiByYW1zZXkvdXVpZCB2ZXJzaW9uIDUuMC4wLCB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZQogICAgICogICAgIGludGVyZmFjZS4gSXQgaXMgYXZhaWxhYmxlIGF0IHtAc2VlIFV1aWRWMTo6Z2V0RGF0ZVRpbWUoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlVGltZSgpOiBEYXRlVGltZUludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiA1LjAuMC4gVGhlcmUgaXMgbm8gZGlyZWN0CiAgICAgKiAgICAgYWx0ZXJuYXRpdmUsIGJ1dCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBtYXkgYmUgb2J0YWluZWQgYnkgc3BsaXR0aW5nCiAgICAgKiAgICAgaW4gaGFsZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0SGV4KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXROb2RlKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZUhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUhpQW5kVmVyc2lvbigpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVIaUFuZFZlcnNpb25IZXgoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLCB5b3UgbWF5IGNhbGwKICAgICAqICAgICB7QHNlZSBcUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93SGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lTWlkKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZEhleCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZXN0YW1wKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wSGV4KCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIEluIHJhbXNleS91dWlkIHZlcnNpb24gNS4wLjAsIHRoaXMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhpcwogICAgICogICAgIGludGVyZmFjZS4gSXQgaGFzIG1vdmVkIHRvIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRJbnRlcmZhY2U6OmdldFVybigpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybigpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYQogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UsIHlvdSBtYXkgY2FsbAogICAgICogICAgIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTo6Z2V0VmFyaWFudCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhcmlhbnQoKTogP2ludDsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWZXJzaW9uKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cRGF0ZVRpbWVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIFRoaXMgdHJhaXQgZW5jYXBzdWxhdGVzIGRlcHJlY2F0ZWQgbWV0aG9kcyBmb3IgcmFtc2V5L3V1aWQ7IHRoaXMgdHJhaXQgYW5kCiAqIGl0cyBtZXRob2RzIHdpbGwgYmUgcmVtb3ZlZCBpbiByYW1zZXkvdXVpZCA1LjAuMC4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KdHJhaXQgRGVwcmVjYXRlZFV1aWRNZXRob2RzVHJhaXQKewogICAgLyoqCiAgICAgKiBAdmFyIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRmaWVsZHM7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJHRpbWVDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxSGlBbmRSZXNlcnZlZEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT5mcm9tSGV4KCR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxTG93KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXEoKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxdWVuY2UoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXEoKS0+dG9TdHJpbmcoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXEoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcXVlbmNlSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRDbG9ja1NlcSgpLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBhbHRlcm5hdGl2ZQogICAgICogICAgIHJlY29tbWVuZGF0aW9uLCBzbyBwbGFuIGFjY29yZGluZ2x5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgSW4gcmFtc2V5L3V1aWQgdmVyc2lvbiA1LjAuMCwgdGhpcyB3aWxsIGJlIHJlbW92ZWQuCiAgICAgKiAgICAgSXQgaXMgYXZhaWxhYmxlIGF0IHtAc2VlIFV1aWRWMTo6Z2V0RGF0ZVRpbWUoKX0uCiAgICAgKgogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZSBBbiBpbW11dGFibGUgaW5zdGFuY2Ugb2YgRGF0ZVRpbWVJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIFVVSUQgaXMgbm90IHRpbWUtYmFzZWQKICAgICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgRGF0ZVRpbWUgdGhyb3dzIGFuIGV4Y2VwdGlvbi9lcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0aW1lX2xvdycgPT4gJHRoaXMtPmZpZWxkcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpLAogICAgICAgICAgICAndGltZV9taWQnID0+ICR0aGlzLT5maWVsZHMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ3RpbWVfaGlfYW5kX3ZlcnNpb24nID0+ICR0aGlzLT5maWVsZHMtPmdldFRpbWVIaUFuZFZlcnNpb24oKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ2Nsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWQnID0+ICR0aGlzLT5maWVsZHMtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAnY2xvY2tfc2VxX2xvdycgPT4gJHRoaXMtPmZpZWxkcy0+Z2V0Q2xvY2tTZXFMb3coKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ25vZGUnID0+ICR0aGlzLT5maWVsZHMtPmdldE5vZGUoKS0+dG9TdHJpbmcoKSwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZWFzdFNpZ25pZmljYW50Qml0cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkbGVhc3RTaWduaWZpY2FudEhleCA9IHN1YnN0cigkdGhpcy0+Z2V0SGV4KCktPnRvU3RyaW5nKCksIDE2KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJGxlYXN0U2lnbmlmaWNhbnRIZXgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZWFzdFNpZ25pZmljYW50Qml0c0hleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3Vic3RyKCR0aGlzLT5nZXRIZXgoKS0+dG9TdHJpbmcoKSwgMTYpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzKCk6IHN0cmluZwogICAgewogICAgICAgICRtb3N0U2lnbmlmaWNhbnRIZXggPSBzdWJzdHIoJHRoaXMtPmdldEhleCgpLT50b1N0cmluZygpLCAwLCAxNik7CgogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT5mcm9tSGV4KCRtb3N0U2lnbmlmaWNhbnRIZXgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIDUuMC4wLiBUaGVyZSBpcyBubyBkaXJlY3QKICAgICAqICAgICBhbHRlcm5hdGl2ZSwgYnV0IHRoZSBzYW1lIGluZm9ybWF0aW9uIG1heSBiZSBvYnRhaW5lZCBieSBzcGxpdHRpbmcKICAgICAqICAgICBpbiBoYWxmIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRIZXgoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoJHRoaXMtPmdldEhleCgpLT50b1N0cmluZygpLCAwLCAxNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Tm9kZSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXROb2RlKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldE5vZGUoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXROb2RlKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUhpQW5kVmVyc2lvbigpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVIaUFuZFZlcnNpb24oKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZUxvdygpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUxvdygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93SGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZU1pZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTWlkKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVNaWQoKX0uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTWlkSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzLT5nZXRUaW1lTWlkKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZXN0YW1wKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXAoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5maWVsZHMtPmdldFZlcnNpb24oKSAhPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oJ05vdCBhIHRpbWUtYmFzZWQgVVVJRCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJHRoaXMtPmZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVzdGFtcCgpfS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIGhhcyBtb3ZlZCB0byB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRVcm4oKX0gYW5kCiAgICAgKiAgICAgaXMgYXZhaWxhYmxlIG9uIHtAc2VlIFxSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMX0sCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYzfSwge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFY0fSwKICAgICAqICAgICBhbmQge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFY1fS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3Vybjp1dWlkOicgLiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWYXJpYW50KCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFyaWFudCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldFZhcmlhbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZSwgeW91IG1heSBjYWxsCiAgICAgKiAgICAge0BzZWUgXFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOjpnZXRWZXJzaW9uKCl9LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHMtPmdldFZlcnNpb24oKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgbm8gc3VpdGFibGUgYnVpbGRlciBjb3VsZCBiZSBmb3VuZAogKi8KY2xhc3MgQnVpbGRlck5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/DateTimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIFBIUCBEYXRlVGltZSBleHRlbnNpb24gZW5jb3VudGVyZWQgYW4gZXhjZXB0aW9uL2Vycm9yCiAqLwpjbGFzcyBEYXRlVGltZUV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/DceSecurityException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBkZWFsaW5nIHdpdGggRENFIFNlY3VyaXR5CiAqICh2ZXJzaW9uIDIpIFVVSURzCiAqLwpjbGFzcyBEY2VTZWN1cml0eUV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gYXMgUGhwSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIFRocm93biB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhcmd1bWVudCByZWNlaXZlZCBpcyBub3QgdmFsaWQKICovCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFBocEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIGJ5dGVzIGJlaW5nIG9wZXJhdGVkIG9uIGFyZSBpbnZhbGlkIGluIHNvbWUgd2F5CiAqLwpjbGFzcyBJbnZhbGlkQnl0ZXNFeGNlcHRpb24gZXh0ZW5kcyBQaHBSdW50aW1lRXhjZXB0aW9uIGltcGxlbWVudHMgVXVpZEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nIHJlY2VpdmVkIGlzIG5vdCBhIHZhbGlkIFVVSUQKICoKICogVGhlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiB0aGF0IHRoaXMgZXh0ZW5kcyBpcyB0aGUgcmFtc2V5L3V1aWQgdmVyc2lvbgogKiBvZiB0aGlzIGV4Y2VwdGlvbi4gSXQgZXhpc3RzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGlzIGNsYXNzLgogKi8KY2xhc3MgSW52YWxpZFV1aWRTdHJpbmdFeGNlcHRpb24gZXh0ZW5kcyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/NameException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBoYXNoIGEKICogbmFtZXNwYWNlIGFuZCBuYW1lCiAqLwpjbGFzcyBOYW1lRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/NodeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgYXR0ZW1wdGluZyB0byBmZXRjaCBvciBjcmVhdGUgYSBub2RlIElEIGVuY291bnRlcmVkIGFuIGVycm9yCiAqLwpjbGFzcyBOb2RlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/RandomSourceException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBvZiByYW5kb20gZGF0YSBlbmNvdW50ZXJlZCBhbiBlcnJvcgogKgogKiBUaGlzIGV4Y2VwdGlvbiBpcyB1c2VkIG1vc3RseSB0byBpbmRpY2F0ZSB0aGF0IHJhbmRvbV9ieXRlcygpIG9yIHJhbmRvbV9pbnQoKQogKiB0aHJldyBhbiBleGNlcHRpb24uIEhvd2V2ZXIsIGl0IG1heSBiZSB1c2VkIGZvciBvdGhlciBzb3VyY2VzIG9mIHJhbmRvbSBkYXRhLgogKi8KY2xhc3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/TimeSourceException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBvZiB0aW1lIGVuY291bnRlcmVkIGFuIGVycm9yCiAqLwpjbGFzcyBUaW1lU291cmNlRXhjZXB0aW9uIGV4dGVuZHMgUGhwUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFV1aWRFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBSdW50aW1lRXhjZXB0aW9uIGFzIFBocFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogVGhyb3duIHRvIGluZGljYXRlIGEgYnVpbGRlciBpcyB1bmFibGUgdG8gYnVpbGQgYSBVVUlECiAqLwpjbGFzcyBVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbiBleHRlbmRzIFBocFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBVdWlkRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBMb2dpY0V4Y2VwdGlvbiBhcyBQaHBMb2dpY0V4Y2VwdGlvbjsKCi8qKgogKiBUaHJvd24gdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCiAqLwpjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFBocExvZ2ljRXhjZXB0aW9uIGltcGxlbWVudHMgVXVpZEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Exception/UuidExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvbjsKCnVzZSBUaHJvd2FibGU7CgppbnRlcmZhY2UgVXVpZEV4Y2VwdGlvbkludGVyZmFjZSBleHRlbmRzIFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/FeatureSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcQnVpbGRlckNvbGxlY3Rpb247CnVzZSBSYW1zZXlcVXVpZFxCdWlsZGVyXEZhbGxiYWNrQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXEd1aWRTdHJpbmdDb2RlYzsKdXNlIFJhbXNleVxVdWlkXENvZGVjXFN0cmluZ0NvZGVjOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlclxHZW5lcmljTnVtYmVyQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lXEdlbmVyaWNUaW1lQ29udmVydGVyOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVcUGhwVGltZUNvbnZlcnRlcjsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JGYWN0b3J5Owp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxHZW5lcmF0b3JcUGVjbFV1aWROYW1lR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFBlY2xVdWlkUmFuZG9tR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFBlY2xVdWlkVGltZUdlbmVyYXRvcjsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxSYW5kb21HZW5lcmF0b3JGYWN0b3J5Owp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFJhbmRvbUdlbmVyYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxUaW1lR2VuZXJhdG9yRmFjdG9yeTsKdXNlIFJhbXNleVxVdWlkXEdlbmVyYXRvclxUaW1lR2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR3VpZFxHdWlkQnVpbGRlcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQnJpY2tNYXRoQ2FsY3VsYXRvcjsKdXNlIFJhbXNleVxVdWlkXE1hdGhcQ2FsY3VsYXRvckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIGFzIE5vbnN0YW5kYXJkVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxEY2VcU3lzdGVtRGNlU2VjdXJpdHlQcm92aWRlcjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXERjZVNlY3VyaXR5UHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlXEZhbGxiYWNrTm9kZVByb3ZpZGVyOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVxOb2RlUHJvdmlkZXJDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVxSYW5kb21Ob2RlUHJvdmlkZXI7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlXFN5c3RlbU5vZGVQcm92aWRlcjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVcU3lzdGVtVGltZVByb3ZpZGVyOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkQnVpbGRlciBhcyBSZmM0MTIyVXVpZEJ1aWxkZXI7CnVzZSBSYW1zZXlcVXVpZFxWYWxpZGF0b3JcR2VuZXJpY1ZhbGlkYXRvcjsKdXNlIFJhbXNleVxVdWlkXFZhbGlkYXRvclxWYWxpZGF0b3JJbnRlcmZhY2U7Cgp1c2UgY29uc3QgUEhQX0lOVF9TSVpFOwoKLyoqCiAqIEZlYXR1cmVTZXQgZGV0ZWN0cyBhbmQgZXhwb3NlcyBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICoKICogQSBmZWF0dXJlIHNldCBpcyB1c2VkIGJ5IFV1aWRGYWN0b3J5IHRvIGRldGVybWluZSB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzIGFuZAogKiBjYXBhYmlsaXRpZXMgb2YgdGhlIGVudmlyb25tZW50LgogKi8KY2xhc3MgRmVhdHVyZVNldAp7CiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRkaXNhYmxlQmlnTnVtYmVyID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkZGlzYWJsZTY0Qml0ID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaWdub3JlU3lzdGVtTm9kZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGVuYWJsZVBlY2wgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkYnVpbGRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgQ29kZWNJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY29kZWM7CgogICAgLyoqCiAgICAgKiBAdmFyIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5R2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5hbWVHZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJhbmRvbUdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBUaW1lUHJvdmlkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZVByb3ZpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBWYWxpZGF0b3JJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsaWRhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBDYWxjdWxhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGNhbGN1bGF0b3I7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlR3VpZHMgVHJ1ZSBidWlsZCBVVUlEcyB1c2luZyB0aGUgR3VpZFN0cmluZ0NvZGVjCiAgICAgKiBAcGFyYW0gYm9vbCAkZm9yY2UzMkJpdCBUcnVlIHRvIGZvcmNlIHRoZSB1c2Ugb2YgMzItYml0IGZ1bmN0aW9uYWxpdHkKICAgICAqICAgICAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlTm9CaWdOdW1iZXIgVHJ1ZSB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgbW9vbnRvYXN0L21hdGgKICAgICAqICAgICAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGlnbm9yZVN5c3RlbU5vZGUgVHJ1ZSB0byBkaXNhYmxlIGF0dGVtcHRzIHRvIGNoZWNrIGZvciB0aGUKICAgICAqICAgICBzeXN0ZW0gbm9kZSBJRCAocHJpbWFyaWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzKQogICAgICogQHBhcmFtIGJvb2wgJGVuYWJsZVBlY2wgVHJ1ZSB0byBlbmFibGUgdGhlIHVzZSBvZiB0aGUgUGVjbFV1aWRUaW1lR2VuZXJhdG9yCiAgICAgKiAgICAgdG8gZ2VuZXJhdGUgdmVyc2lvbiAxIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBib29sICR1c2VHdWlkcyA9IGZhbHNlLAogICAgICAgIGJvb2wgJGZvcmNlMzJCaXQgPSBmYWxzZSwKICAgICAgICBib29sICRmb3JjZU5vQmlnTnVtYmVyID0gZmFsc2UsCiAgICAgICAgYm9vbCAkaWdub3JlU3lzdGVtTm9kZSA9IGZhbHNlLAogICAgICAgIGJvb2wgJGVuYWJsZVBlY2wgPSBmYWxzZQogICAgKSB7CiAgICAgICAgJHRoaXMtPmRpc2FibGVCaWdOdW1iZXIgPSAkZm9yY2VOb0JpZ051bWJlcjsKICAgICAgICAkdGhpcy0+ZGlzYWJsZTY0Qml0ID0gJGZvcmNlMzJCaXQ7CiAgICAgICAgJHRoaXMtPmlnbm9yZVN5c3RlbU5vZGUgPSAkaWdub3JlU3lzdGVtTm9kZTsKICAgICAgICAkdGhpcy0+ZW5hYmxlUGVjbCA9ICRlbmFibGVQZWNsOwoKICAgICAgICAkdGhpcy0+c2V0Q2FsY3VsYXRvcihuZXcgQnJpY2tNYXRoQ2FsY3VsYXRvcigpKTsKICAgICAgICAkdGhpcy0+YnVpbGRlciA9ICR0aGlzLT5idWlsZFV1aWRCdWlsZGVyKCR1c2VHdWlkcyk7CiAgICAgICAgJHRoaXMtPmNvZGVjID0gJHRoaXMtPmJ1aWxkQ29kZWMoJHVzZUd1aWRzKTsKICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyID0gJHRoaXMtPmJ1aWxkTm9kZVByb3ZpZGVyKCk7CiAgICAgICAgJHRoaXMtPm5hbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGROYW1lR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZFJhbmRvbUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT5zZXRUaW1lUHJvdmlkZXIobmV3IFN5c3RlbVRpbWVQcm92aWRlcigpKTsKICAgICAgICAkdGhpcy0+c2V0RGNlU2VjdXJpdHlQcm92aWRlcihuZXcgU3lzdGVtRGNlU2VjdXJpdHlQcm92aWRlcigpKTsKICAgICAgICAkdGhpcy0+dmFsaWRhdG9yID0gbmV3IEdlbmVyaWNWYWxpZGF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ1aWxkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YnVpbGRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNhbGN1bGF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FsY3VsYXRvcigpOiBDYWxjdWxhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWxjdWxhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29kZWMgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29kZWMoKTogQ29kZWNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvZGVjOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREY2VTZWN1cml0eUdlbmVyYXRvcigpOiBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGNlU2VjdXJpdHlHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lR2VuZXJhdG9yKCk6IE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWVHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBub2RlIHByb3ZpZGVyIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGVQcm92aWRlcigpOiBOb2RlUHJvdmlkZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vZGVQcm92aWRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBjb252ZXJ0ZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bnVtYmVyQ29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmFuZG9tIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSYW5kb21HZW5lcmF0b3IoKTogUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYW5kb21HZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGNvbnZlcnRlciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lQ29udmVydGVyKCk6IFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lR2VuZXJhdG9yKCk6IFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVHZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsaWRhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY2FsY3VsYXRvciB0byB1c2UgaW4gdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2FsY3VsYXRvcihDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5jYWxjdWxhdG9yID0gJGNhbGN1bGF0b3I7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICR0aGlzLT5idWlsZE51bWJlckNvbnZlcnRlcigkY2FsY3VsYXRvcik7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGhpcy0+YnVpbGRUaW1lQ29udmVydGVyKCRjYWxjdWxhdG9yKTsKCiAgICAgICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRQcm9wZXJ0eUluaXRpYWxpemF0aW9uQ2hlY2sgKi8KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRpbWVQcm92aWRlcikpIHsKICAgICAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGRUaW1lR2VuZXJhdG9yKCR0aGlzLT50aW1lUHJvdmlkZXIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIERDRSBTZWN1cml0eSBwcm92aWRlciB0byB1c2UgaW4gdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGNlU2VjdXJpdHlQcm92aWRlcihEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlICRkY2VTZWN1cml0eVByb3ZpZGVyKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5kY2VTZWN1cml0eUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZERjZVNlY3VyaXR5R2VuZXJhdG9yKCRkY2VTZWN1cml0eVByb3ZpZGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG5vZGUgcHJvdmlkZXIgdG8gdXNlIGluIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5vZGVQcm92aWRlcihOb2RlUHJvdmlkZXJJbnRlcmZhY2UgJG5vZGVQcm92aWRlcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyID0gJG5vZGVQcm92aWRlcjsKICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciA9ICR0aGlzLT5idWlsZFRpbWVHZW5lcmF0b3IoJHRoaXMtPnRpbWVQcm92aWRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB0aW1lIHByb3ZpZGVyIHRvIHVzZSBpbiB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lUHJvdmlkZXIoVGltZVByb3ZpZGVySW50ZXJmYWNlICR0aW1lUHJvdmlkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVQcm92aWRlciA9ICR0aW1lUHJvdmlkZXI7CiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGhpcy0+YnVpbGRUaW1lR2VuZXJhdG9yKCR0aW1lUHJvdmlkZXIpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB2YWxpZGF0b3IgdG8gdXNlIGluIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZhbGlkYXRvcihWYWxpZGF0b3JJbnRlcmZhY2UgJHZhbGlkYXRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdG9yID0gJHZhbGlkYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjb2RlYyBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHVzZUd1aWRzIFdoZXRoZXIgdG8gYnVpbGQgVVVJRHMgdXNpbmcgdGhlIEd1aWRTdHJpbmdDb2RlYwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQ29kZWMoYm9vbCAkdXNlR3VpZHMgPSBmYWxzZSk6IENvZGVjSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCR1c2VHdWlkcykgewogICAgICAgICAgICByZXR1cm4gbmV3IEd1aWRTdHJpbmdDb2RlYygkdGhpcy0+YnVpbGRlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0NvZGVjKCR0aGlzLT5idWlsZGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBEQ0UgU2VjdXJpdHkgZ2VuZXJhdG9yIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZERjZVNlY3VyaXR5R2VuZXJhdG9yKAogICAgICAgIERjZVNlY3VyaXR5UHJvdmlkZXJJbnRlcmZhY2UgJGRjZVNlY3VyaXR5UHJvdmlkZXIKICAgICk6IERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gbmV3IERjZVNlY3VyaXR5R2VuZXJhdG9yKAogICAgICAgICAgICAkdGhpcy0+bnVtYmVyQ29udmVydGVyLAogICAgICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciwKICAgICAgICAgICAgJGRjZVNlY3VyaXR5UHJvdmlkZXIKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5vZGUgcHJvdmlkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTm9kZVByb3ZpZGVyKCk6IE5vZGVQcm92aWRlckludGVyZmFjZQogICAgewogICAgICAgIGlmICgkdGhpcy0+aWdub3JlU3lzdGVtTm9kZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmRvbU5vZGVQcm92aWRlcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBGYWxsYmFja05vZGVQcm92aWRlcihuZXcgTm9kZVByb3ZpZGVyQ29sbGVjdGlvbihbCiAgICAgICAgICAgIG5ldyBTeXN0ZW1Ob2RlUHJvdmlkZXIoKSwKICAgICAgICAgICAgbmV3IFJhbmRvbU5vZGVQcm92aWRlcigpLAogICAgICAgIF0pKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBudW1iZXIgY29udmVydGVyIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZE51bWJlckNvbnZlcnRlcihDYWxjdWxhdG9ySW50ZXJmYWNlICRjYWxjdWxhdG9yKTogTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljTnVtYmVyQ29udmVydGVyKCRjYWxjdWxhdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSByYW5kb20gZ2VuZXJhdG9yIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFJhbmRvbUdlbmVyYXRvcigpOiBSYW5kb21HZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChuZXcgUmFuZG9tR2VuZXJhdG9yRmFjdG9yeSgpKS0+Z2V0R2VuZXJhdG9yKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGltZSBnZW5lcmF0b3IgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICoKICAgICAqIEBwYXJhbSBUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlciBUaGUgdGltZSBwcm92aWRlciB0byB1c2Ugd2l0aAogICAgICogICAgIHRoZSB0aW1lIGdlbmVyYXRvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkVGltZUdlbmVyYXRvcihUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlcik6IFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZFRpbWVHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IFRpbWVHZW5lcmF0b3JGYWN0b3J5KAogICAgICAgICAgICAkdGhpcy0+bm9kZVByb3ZpZGVyLAogICAgICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlciwKICAgICAgICAgICAgJHRpbWVQcm92aWRlcgogICAgICAgICkpLT5nZXRHZW5lcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuYW1lIGdlbmVyYXRvciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGROYW1lR2VuZXJhdG9yKCk6IE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVBlY2wpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQZWNsVXVpZE5hbWVHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IE5hbWVHZW5lcmF0b3JGYWN0b3J5KCkpLT5nZXRHZW5lcmF0b3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSB0aW1lIGNvbnZlcnRlciBjb25maWd1cmVkIGZvciB0aGlzIGVudmlyb25tZW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRUaW1lQ29udmVydGVyKENhbGN1bGF0b3JJbnRlcmZhY2UgJGNhbGN1bGF0b3IpOiBUaW1lQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGdlbmVyaWNDb252ZXJ0ZXIgPSBuZXcgR2VuZXJpY1RpbWVDb252ZXJ0ZXIoJGNhbGN1bGF0b3IpOwoKICAgICAgICBpZiAoJHRoaXMtPmlzNjRCaXRTeXN0ZW0oKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IFBocFRpbWVDb252ZXJ0ZXIoJGNhbGN1bGF0b3IsICRnZW5lcmljQ29udmVydGVyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZ2VuZXJpY0NvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBVVUlEIGJ1aWxkZXIgY29uZmlndXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudAogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VHdWlkcyBXaGV0aGVyIHRvIGJ1aWxkIFVVSURzIHVzaW5nIHRoZSBHdWlkU3RyaW5nQ29kZWMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFV1aWRCdWlsZGVyKGJvb2wgJHVzZUd1aWRzID0gZmFsc2UpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIGlmICgkdXNlR3VpZHMpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBHdWlkQnVpbGRlcigkdGhpcy0+bnVtYmVyQ29udmVydGVyLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgfQoKICAgICAgICAvKiogQHBzYWxtLXN1cHByZXNzIEltcHVyZUFyZ3VtZW50ICovCiAgICAgICAgcmV0dXJuIG5ldyBGYWxsYmFja0J1aWxkZXIobmV3IEJ1aWxkZXJDb2xsZWN0aW9uKFsKICAgICAgICAgICAgbmV3IFJmYzQxMjJVdWlkQnVpbGRlcigkdGhpcy0+bnVtYmVyQ29udmVydGVyLCAkdGhpcy0+dGltZUNvbnZlcnRlciksCiAgICAgICAgICAgIG5ldyBOb25zdGFuZGFyZFV1aWRCdWlsZGVyKCR0aGlzLT5udW1iZXJDb252ZXJ0ZXIsICR0aGlzLT50aW1lQ29udmVydGVyKSwKICAgICAgICBdKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBIUCBidWlsZCBpcyA2NC1iaXQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpczY0Qml0U3lzdGVtKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gUEhQX0lOVF9TSVpFID09PSA4ICYmICEkdGhpcy0+ZGlzYWJsZTY0Qml0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/FieldsInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEZpZWxkczsKCnVzZSBTZXJpYWxpemFibGU7CgovKioKICogVVVJRHMgYXJlIGNvbXByaXNlZCBvZiB1bnNpZ25lZCBpbnRlZ2VycywgdGhlIGJ5dGVzIG9mIHdoaWNoIGFyZSBzZXBhcmF0ZWQKICogaW50byBmaWVsZHMgYW5kIGFycmFuZ2VkIGluIGEgcGFydGljdWxhciBsYXlvdXQgZGVmaW5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbgogKiBmb3IgdGhlIHZhcmlhbnQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIEZpZWxkc0ludGVyZmFjZSBleHRlbmRzIFNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEZpZWxkczsKCnVzZSBWYWx1ZUVycm9yOwoKdXNlIGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RybGVuOwoKLyoqCiAqIFByb3ZpZGVzIGNvbW1vbiBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uYWxpdHkgdG8gZmllbGRzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0CnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRieXRlcyk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBieXRlcyB0aGF0IGNvbXByaXNlIHRoZSBmaWVsZHMKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRCeXRlcygpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtieXRlczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydieXRlcycgPT4gJHRoaXMtPmdldEJ5dGVzKCldOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gYSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGhwY3NTdXBwcmVzcyBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbnVzZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRzZXJpYWxpemVkKSA9PT0gMTYpIHsKICAgICAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoYmFzZTY0X2RlY29kZSgkc2VyaWFsaXplZCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtieXRlczogc3RyaW5nfSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNlcmlhbGl6ZShhcnJheSAkZGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKICAgICAgICBpZiAoIWlzc2V0KCRkYXRhWydieXRlcyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydieXRlcyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKiBwaHBjczpkaXNhYmxlIFNxdWl6LkZ1bmN0aW9ucy5HbG9iYWxGdW5jdGlvbgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKCi8qKgogKiBSZXR1cm5zIGEgdmVyc2lvbiAxICh0aW1lLWJhc2VkKSBVVUlEIGZyb20gYSBob3N0IElELCBzZXF1ZW5jZSBudW1iZXIsCiAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAqCiAqIEBwYXJhbSBIZXhhZGVjaW1hbHxpbnR8c3RyaW5nfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKICogICAgIGhhcmR3YXJlIGFkZHJlc3M7IHRoaXMgbnVtYmVyIG1heSBiZSByZXByZXNlbnRlZCBhcyBhbiBpbnRlZ2VyIG9yIGEKICogICAgIGhleGFkZWNpbWFsIHN0cmluZwogKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogKiAgICAgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZSBub2RlIElECiAqICAgICBjaGFuZ2VzCiAqCiAqIEByZXR1cm4gbm9uLWVtcHR5LXN0cmluZyBWZXJzaW9uIDEgVVVJRCBhcyBhIHN0cmluZwogKi8KZnVuY3Rpb24gdjEoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBzdHJpbmcKewogICAgcmV0dXJuIFV1aWQ6OnV1aWQxKCRub2RlLCAkY2xvY2tTZXEpLT50b1N0cmluZygpOwp9CgovKioKICogUmV0dXJucyBhIHZlcnNpb24gMiAoRENFIFNlY3VyaXR5KSBVVUlEIGZyb20gYSBsb2NhbCBkb21haW4sIGxvY2FsCiAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAcGFyYW0gaW50ICRsb2NhbERvbWFpbiBUaGUgbG9jYWwgZG9tYWluIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgYnl0ZXMsCiAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAqIEBwYXJhbSBJbnRlZ2VyT2JqZWN0fG51bGwgJGxvY2FsSWRlbnRpZmllciBUaGUgbG9jYWwgaWRlbnRpZmllciBmb3IgdGhlCiAqICAgICBnaXZlbiBkb21haW47IHRoaXMgbWF5IGJlIGEgVUlEIG9yIEdJRCBvbiBQT1NJWCBzeXN0ZW1zLCBpZiB0aGUgbG9jYWwKICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAqICAgICBpZiB0aGUgbG9jYWwgZG9tYWluIGlzIG9yZwogKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogKiAgICAgYWRkcmVzcwogKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAqICAgICBub2RlIElEIGNoYW5nZXMKICoKICogQHJldHVybiBub24tZW1wdHktc3RyaW5nIFZlcnNpb24gMiBVVUlEIGFzIGEgc3RyaW5nCiAqLwpmdW5jdGlvbiB2MigKICAgIGludCAkbG9jYWxEb21haW4sCiAgICA/SW50ZWdlck9iamVjdCAkbG9jYWxJZGVudGlmaWVyID0gbnVsbCwKICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKKTogc3RyaW5nIHsKICAgIHJldHVybiBVdWlkOjp1dWlkMigkbG9jYWxEb21haW4sICRsb2NhbElkZW50aWZpZXIsICRub2RlLCAkY2xvY2tTZXEpLT50b1N0cmluZygpOwp9CgovKioKICogUmV0dXJucyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCkgVVVJRCBiYXNlZCBvbiB0aGUgTUQ1IGhhc2ggb2YgYQogKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiAzIFVVSUQgYXMgYSBzdHJpbmcKICoKICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICovCmZ1bmN0aW9uIHYzKCRucywgc3RyaW5nICRuYW1lKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkMygkbnMsICRuYW1lKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDQgKHJhbmRvbSkgVVVJRAogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiA0IFVVSUQgYXMgYSBzdHJpbmcKICovCmZ1bmN0aW9uIHY0KCk6IHN0cmluZwp7CiAgICByZXR1cm4gVXVpZDo6dXVpZDQoKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogKgogKiBAcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcgVmVyc2lvbiA1IFVVSUQgYXMgYSBzdHJpbmcKICoKICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICovCmZ1bmN0aW9uIHY1KCRucywgc3RyaW5nICRuYW1lKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkNSgkbnMsICRuYW1lKS0+dG9TdHJpbmcoKTsKfQoKLyoqCiAqIFJldHVybnMgYSB2ZXJzaW9uIDYgKG9yZGVyZWQtdGltZSkgVVVJRCBmcm9tIGEgaG9zdCBJRCwgc2VxdWVuY2UgbnVtYmVyLAogKiBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogKiAgICAgYWRkcmVzcwogKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogKiAgICAgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZSBub2RlIElECiAqICAgICBjaGFuZ2VzCiAqCiAqIEByZXR1cm4gbm9uLWVtcHR5LXN0cmluZyBWZXJzaW9uIDYgVVVJRCBhcyBhIHN0cmluZwogKi8KZnVuY3Rpb24gdjYoP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogc3RyaW5nCnsKICAgIHJldHVybiBVdWlkOjp1dWlkNigkbm9kZSwgJGNsb2NrU2VxKS0+dG9TdHJpbmcoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/CombGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZXhwbG9kZTsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBtaWNyb3RpbWU7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBDb21iR2VuZXJhdG9yIGdlbmVyYXRlcyBDT01CcyAoY29tYmluZWQgVVVJRC90aW1lc3RhbXApCiAqCiAqIFRoZSBDb21iR2VuZXJhdG9yLCB3aGVuIHVzZWQgd2l0aCB0aGUgU3RyaW5nQ29kZWMgKGFuZCwgYnkgcHJveHksIHRoZQogKiBUaW1lc3RhbXBMYXN0Q29tYkNvZGVjKSBvciB0aGUgVGltZXN0YW1wRmlyc3RDb21iQ29kZWMsIGNvbWJpbmVzIHRoZSBjdXJyZW50CiAqIHRpbWVzdGFtcCB3aXRoIGEgVVVJRCAoaGVuY2UgdGhlIG5hbWUgIkNPTUIiKS4gVGhlIHRpbWVzdGFtcCBlaXRoZXIgYXBwZWFycwogKiBhcyB0aGUgZmlyc3Qgb3IgbGFzdCA0OCBiaXRzIG9mIHRoZSBDT01CLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIHVzZWQuCiAqCiAqIEJ5IGRlZmF1bHQsIENPTUJzIHdpbGwgaGF2ZSB0aGUgdGltZXN0YW1wIHNldCBhcyB0aGUgbGFzdCA0OCBiaXRzIG9mIHRoZQogKiBpZGVudGlmaWVyLgogKgogKiBgYGAgcGhwCiAqICRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAqCiAqICRmYWN0b3J5LT5zZXRSYW5kb21HZW5lcmF0b3IobmV3IENvbWJHZW5lcmF0b3IoCiAqICAgICAkZmFjdG9yeS0+Z2V0UmFuZG9tR2VuZXJhdG9yKCksCiAqICAgICAkZmFjdG9yeS0+Z2V0TnVtYmVyQ29udmVydGVyKCkKICogKSk7CiAqCiAqICRjb21iID0gJGZhY3RvcnktPnV1aWQ0KCk7CiAqIGBgYAogKgogKiBUbyBnZW5lcmF0ZSBhIENPTUIgd2l0aCB0aGUgdGltZXN0YW1wIGFzIHRoZSBmaXJzdCA0OCBiaXRzLCBzZXQgdGhlCiAqIFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjIGFzIHRoZSBjb2RlYy4KICoKICogYGBgIHBocAogKiAkZmFjdG9yeS0+c2V0Q29kZWMobmV3IFRpbWVzdGFtcEZpcnN0Q29tYkNvZGVjKCRmYWN0b3J5LT5nZXRVdWlkQnVpbGRlcigpKSk7CiAqIGBgYAogKgogKiBAbGluayBodHRwczovL3d3dy5pbmZvcm1pdC5jb20vYXJ0aWNsZXMvcHJpbnRlcmZyaWVuZGx5LzI1ODYyIFRoZSBDb3N0IG9mIEdVSURzIGFzIFByaW1hcnkgS2V5cwogKi8KY2xhc3MgQ29tYkdlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwdWJsaWMgY29uc3QgVElNRVNUQU1QX0JZVEVTID0gNjsKCiAgICAvKioKICAgICAqIEB2YXIgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHJhbmRvbUdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGNvbnZlcnRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIKICAgICkgewogICAgICAgICR0aGlzLT5jb252ZXJ0ZXIgPSAkbnVtYmVyQ29udmVydGVyOwogICAgICAgICR0aGlzLT5yYW5kb21HZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgJGxlbmd0aCBpcyBub3QgYSBwb3NpdGl2ZSBpbnRlZ2VyCiAgICAgKiAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIENvbWJHZW5lcmF0b3I6OlRJTUVTVEFNUF9CWVRFUwogICAgICoKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZShpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkbGVuZ3RoIDwgc2VsZjo6VElNRVNUQU1QX0JZVEVTIHx8ICRsZW5ndGggPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAnIC4gc2VsZjo6VElNRVNUQU1QX0JZVEVTCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkaGFzaCA9ICcnOwogICAgICAgIGlmIChzZWxmOjpUSU1FU1RBTVBfQllURVMgPiAwICYmICRsZW5ndGggPiBzZWxmOjpUSU1FU1RBTVBfQllURVMpIHsKICAgICAgICAgICAgJGhhc2ggPSAkdGhpcy0+cmFuZG9tR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbGVuZ3RoIC0gc2VsZjo6VElNRVNUQU1QX0JZVEVTKTsKICAgICAgICB9CgogICAgICAgICRsc2JUaW1lID0gc3RyX3BhZCgKICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRlci0+dG9IZXgoJHRoaXMtPnRpbWVzdGFtcCgpKSwKICAgICAgICAgICAgc2VsZjo6VElNRVNUQU1QX0JZVEVTICogMiwKICAgICAgICAgICAgJzAnLAogICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICApOwoKICAgICAgICByZXR1cm4gKHN0cmluZykgaGV4MmJpbigKICAgICAgICAgICAgc3RyX3BhZCgKICAgICAgICAgICAgICAgIGJpbjJoZXgoJGhhc2gpLAogICAgICAgICAgICAgICAgJGxlbmd0aCAtIHNlbGY6OlRJTUVTVEFNUF9CWVRFUywKICAgICAgICAgICAgICAgICcwJwogICAgICAgICAgICApCiAgICAgICAgICAgIC4gJGxzYlRpbWUKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBjdXJyZW50IHRpbWVzdGFtcCBhIHN0cmluZyBpbnRlZ2VyLCBwcmVjaXNlIHRvIDAuMDAwMDEgc2Vjb25kcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRpbWVzdGFtcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoZmFsc2UpKTsKCiAgICAgICAgcmV0dXJuICR0aW1lWzFdIC4gc3Vic3RyKCR0aW1lWzBdLCAyLCA1KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERjZVNlY3VyaXR5RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7Cgp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdWJzdHJfcmVwbGFjZTsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogRGNlU2VjdXJpdHlHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBsb2NhbAogKiBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKi8KY2xhc3MgRGNlU2VjdXJpdHlHZW5lcmF0b3IgaW1wbGVtZW50cyBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IERPTUFJTlMgPSBbCiAgICAgICAgVXVpZDo6RENFX0RPTUFJTl9QRVJTT04sCiAgICAgICAgVXVpZDo6RENFX0RPTUFJTl9HUk9VUCwKICAgICAgICBVdWlkOjpEQ0VfRE9NQUlOX09SRywKICAgIF07CgogICAgLyoqCiAgICAgKiBVcHBlciBib3VuZHMgZm9yIHRoZSBjbG9jayBzZXF1ZW5jZSBpbiBEQ0UgU2VjdXJpdHkgVVVJRHMuCiAgICAgKi8KICAgIHByaXZhdGUgY29uc3QgQ0xPQ0tfU0VRX0hJR0ggPSA2MzsKCiAgICAvKioKICAgICAqIExvd2VyIGJvdW5kcyBmb3IgdGhlIGNsb2NrIHNlcXVlbmNlIGluIERDRSBTZWN1cml0eSBVVUlEcy4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBDTE9DS19TRVFfTE9XID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG51bWJlckNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5UHJvdmlkZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UgJHRpbWVHZW5lcmF0b3IsCiAgICAgICAgRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZSAkZGNlU2VjdXJpdHlQcm92aWRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkdGltZUdlbmVyYXRvcjsKICAgICAgICAkdGhpcy0+ZGNlU2VjdXJpdHlQcm92aWRlciA9ICRkY2VTZWN1cml0eVByb3ZpZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgKICAgICAgICBpbnQgJGxvY2FsRG9tYWluLAogICAgICAgID9JbnRlZ2VyT2JqZWN0ICRsb2NhbElkZW50aWZpZXIgPSBudWxsLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBzdHJpbmcgewogICAgICAgIGlmICghaW5fYXJyYXkoJGxvY2FsRG9tYWluLCBzZWxmOjpET01BSU5TKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTG9jYWwgZG9tYWluIG11c3QgYmUgYSB2YWxpZCBEQ0UgU2VjdXJpdHkgZG9tYWluJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgJiYgJGxvY2FsSWRlbnRpZmllci0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdMb2NhbCBpZGVudGlmaWVyIG91dCBvZiBib3VuZHM7IGl0IG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDQyOTQ5NjcyOTUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNsb2NrU2VxID4gc2VsZjo6Q0xPQ0tfU0VRX0hJR0ggfHwgJGNsb2NrU2VxIDwgc2VsZjo6Q0xPQ0tfU0VRX0xPVykgewogICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQ2xvY2sgc2VxdWVuY2Ugb3V0IG9mIGJvdW5kczsgaXQgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNjMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRsb2NhbERvbWFpbikgewogICAgICAgICAgICBjYXNlIFV1aWQ6OkRDRV9ET01BSU5fT1JHOgogICAgICAgICAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGNlU2VjdXJpdHlFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICdBIGxvY2FsIGlkZW50aWZpZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIG9yZyBkb21haW4nCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBVdWlkOjpEQ0VfRE9NQUlOX1BFUlNPTjoKICAgICAgICAgICAgICAgIGlmICgkbG9jYWxJZGVudGlmaWVyID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJGxvY2FsSWRlbnRpZmllciA9ICR0aGlzLT5kY2VTZWN1cml0eVByb3ZpZGVyLT5nZXRVaWQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBVdWlkOjpEQ0VfRE9NQUlOX0dST1VQOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCRsb2NhbElkZW50aWZpZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkbG9jYWxJZGVudGlmaWVyID0gJHRoaXMtPmRjZVNlY3VyaXR5UHJvdmlkZXItPmdldEdpZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgJGlkZW50aWZpZXJIZXggPSAkdGhpcy0+bnVtYmVyQ29udmVydGVyLT50b0hleCgkbG9jYWxJZGVudGlmaWVyLT50b1N0cmluZygpKTsKCiAgICAgICAgLy8gVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBsb2NhbCBpZGVudGlmaWVyIGlzIDB4ZmZmZmZmZmYsIG9yCiAgICAgICAgLy8gNDI5NDk2NzI5NS4gVGhpcyBpcyA4IGhleGFkZWNpbWFsIGRpZ2l0cywgc28gaWYgdGhlIGxlbmd0aCBvZgogICAgICAgIC8vIGhleGFkZWNpbWFsIGRpZ2l0cyBpcyBncmVhdGVyIHRoYW4gOCwgd2Uga25vdyB0aGUgdmFsdWUgaXMgZ3JlYXRlcgogICAgICAgIC8vIHRoYW4gMHhmZmZmZmZmZi4KICAgICAgICBpZiAoc3RybGVuKCRpZGVudGlmaWVySGV4KSA+IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERjZVNlY3VyaXR5RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0xvY2FsIGlkZW50aWZpZXIgb3V0IG9mIGJvdW5kczsgaXQgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgNDI5NDk2NzI5NScKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRkb21haW5CeXRlID0gcGFjaygnbicsICRsb2NhbERvbWFpbilbMV07CiAgICAgICAgJGlkZW50aWZpZXJCeXRlcyA9IChzdHJpbmcpIGhleDJiaW4oc3RyX3BhZCgkaWRlbnRpZmllckhleCwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKCiAgICAgICAgaWYgKCRub2RlIGluc3RhbmNlb2YgSGV4YWRlY2ltYWwpIHsKICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+dG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgIC8vIFNoaWZ0IHRoZSBjbG9jayBzZXF1ZW5jZSA4IGJpdHMgdG8gdGhlIGxlZnQsIHNvIGl0IG1hdGNoZXMgMHgzZjAwLgogICAgICAgIGlmICgkY2xvY2tTZXEgIT09IG51bGwpIHsKICAgICAgICAgICAgJGNsb2NrU2VxID0gJGNsb2NrU2VxIDw8IDg7CiAgICAgICAgfQoKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+dGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGUsICRjbG9ja1NlcSk7CgogICAgICAgIC8vIFJlcGxhY2UgYnl0ZXMgaW4gdGhlIHRpbWUtYmFzZWQgVVVJRCB3aXRoIERDRSBTZWN1cml0eSB2YWx1ZXMuCiAgICAgICAgJGJ5dGVzID0gc3Vic3RyX3JlcGxhY2UoJGJ5dGVzLCAkaWRlbnRpZmllckJ5dGVzLCAwLCA0KTsKICAgICAgICAkYnl0ZXMgPSBzdWJzdHJfcmVwbGFjZSgkYnl0ZXMsICRkb21haW5CeXRlLCA5LCAxKTsKCiAgICAgICAgcmV0dXJuICRieXRlczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMjsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKCi8qKgogKiBBIERDRSBTZWN1cml0eSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBsb2NhbAogKiBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogKgogKiBAc2VlIFV1aWRWMgogKi8KaW50ZXJmYWNlIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBiaW5hcnkgc3RyaW5nIGZyb20gYSBsb2NhbCBkb21haW4sIGxvY2FsIGlkZW50aWZpZXIsIG5vZGUgSUQsCiAgICAgKiBjbG9jayBzZXF1ZW5jZSwgYW5kIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKAogICAgICAgIGludCAkbG9jYWxEb21haW4sCiAgICAgICAgP0ludGVnZXJPYmplY3QgJGxvY2FsSWRlbnRpZmllciA9IG51bGwsCiAgICAgICAgP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwKICAgICAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKICAgICk6IHN0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cTmFtZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBWYWx1ZUVycm9yOwoKdXNlIGZ1bmN0aW9uIGhhc2g7CgovKioKICogRGVmYXVsdE5hbWVHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBuYW1lc3BhY2UsCiAqIG5hbWUsIGFuZCBoYXNoaW5nIGFsZ29yaXRobQogKi8KY2xhc3MgRGVmYXVsdE5hbWVHZW5lcmF0b3IgaW1wbGVtZW50cyBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKiBAcHNhbG0tcHVyZSAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKFV1aWRJbnRlcmZhY2UgJG5zLCBzdHJpbmcgJG5hbWUsIHN0cmluZyAkaGFzaEFsZ29yaXRobSk6IHN0cmluZwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZ3xib29sICRieXRlcyAqLwogICAgICAgICAgICAkYnl0ZXMgPSBAaGFzaCgkaGFzaEFsZ29yaXRobSwgJG5zLT5nZXRCeXRlcygpIC4gJG5hbWUsIHRydWUpOwogICAgICAgIH0gY2F0Y2ggKFZhbHVlRXJyb3IgJGUpIHsKICAgICAgICAgICAgJGJ5dGVzID0gZmFsc2U7IC8vIGtlZXAgc2FtZSBiZWhhdmlvciB0aGFuIFBIUCA3CiAgICAgICAgfQoKICAgICAgICBpZiAoJGJ5dGVzID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTmFtZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBoYXNoIG5hbWVzcGFjZSBhbmQgbmFtZSB3aXRoIGFsZ29yaXRobSBcJyVzXCcnLAogICAgICAgICAgICAgICAgJGhhc2hBbGdvcml0aG0KICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykgJGJ5dGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cUmFuZG9tU291cmNlRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFRpbWVTb3VyY2VFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxUaW1lUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIGN0eXBlX3hkaWdpdDsKdXNlIGZ1bmN0aW9uIGRlY2hleDsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBpc19pbnQ7CnVzZSBmdW5jdGlvbiBwYWNrOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIERlZmF1bHRUaW1lR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIGJpbmFyeSBkYXRhIGJhc2VkIG9uIGEgbm9kZSBJRCwKICogY2xvY2sgc2VxdWVuY2UsIGFuZCB0aGUgY3VycmVudCB0aW1lCiAqLwpjbGFzcyBEZWZhdWx0VGltZUdlbmVyYXRvciBpbXBsZW1lbnRzIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZVByb3ZpZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVQcm92aWRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTm9kZVByb3ZpZGVySW50ZXJmYWNlICRub2RlUHJvdmlkZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciwKICAgICAgICBUaW1lUHJvdmlkZXJJbnRlcmZhY2UgJHRpbWVQcm92aWRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciA9ICRub2RlUHJvdmlkZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgICAgICAkdGhpcy0+dGltZVByb3ZpZGVyID0gJHRpbWVQcm92aWRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW4gaW52YWxpZCB2YWx1ZXMKICAgICAqIEB0aHJvd3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGlmIHJhbmRvbV9pbnQoKSB0aHJvd3MgYW4gZXhjZXB0aW9uL2Vycm9yCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRub2RlIGluc3RhbmNlb2YgSGV4YWRlY2ltYWwpIHsKICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+dG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgICRub2RlID0gJHRoaXMtPmdldFZhbGlkTm9kZSgkbm9kZSk7CgogICAgICAgIGlmICgkY2xvY2tTZXEgPT09IG51bGwpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgdXNlICJzdGFibGUgc3RvcmFnZSI7IHNlZSBSRkMgNDEyMiwgU2VjdGlvbiA0LjIuMS4xLgogICAgICAgICAgICAgICAgJGNsb2NrU2VxID0gcmFuZG9tX2ludCgwLCAweDNmZmYpOwogICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmRvbVNvdXJjZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgICAgICRleGNlcHRpb24KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aW1lID0gJHRoaXMtPnRpbWVQcm92aWRlci0+Z2V0VGltZSgpOwoKICAgICAgICAkdXVpZFRpbWUgPSAkdGhpcy0+dGltZUNvbnZlcnRlci0+Y2FsY3VsYXRlVGltZSgKICAgICAgICAgICAgJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRpbWUtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpCiAgICAgICAgKTsKCiAgICAgICAgJHRpbWVIZXggPSBzdHJfcGFkKCR1dWlkVGltZS0+dG9TdHJpbmcoKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgaWYgKHN0cmxlbigkdGltZUhleCkgIT09IDE2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUaW1lU291cmNlRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnVGhlIGdlbmVyYXRlZCB0aW1lIG9mIFwnJXNcJyBpcyBsYXJnZXIgdGhhbiBleHBlY3RlZCcsCiAgICAgICAgICAgICAgICAkdGltZUhleAogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgICR0aW1lQnl0ZXMgPSAoc3RyaW5nKSBoZXgyYmluKCR0aW1lSGV4KTsKCiAgICAgICAgcmV0dXJuICR0aW1lQnl0ZXNbNF0gLiAkdGltZUJ5dGVzWzVdIC4gJHRpbWVCeXRlc1s2XSAuICR0aW1lQnl0ZXNbN10KICAgICAgICAgICAgLiAkdGltZUJ5dGVzWzJdIC4gJHRpbWVCeXRlc1szXQogICAgICAgICAgICAuICR0aW1lQnl0ZXNbMF0gLiAkdGltZUJ5dGVzWzFdCiAgICAgICAgICAgIC4gcGFjaygnbionLCAkY2xvY2tTZXEpCiAgICAgICAgICAgIC4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2VzIHRoZSBub2RlIHByb3ZpZGVyIGdpdmVuIHdoZW4gY29uc3RydWN0aW5nIHRoaXMgaW5zdGFuY2UgdG8gZ2V0CiAgICAgKiB0aGUgbm9kZSBJRCAodXN1YWxseSBhIE1BQyBhZGRyZXNzKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50fG51bGwgJG5vZGUgQSBub2RlIHZhbHVlIHRoYXQgbWF5IGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIG5vZGUgcHJvdmlkZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyA2LWJ5dGUgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0VmFsaWROb2RlKCRub2RlKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRub2RlID09PSBudWxsKSB7CiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPm5vZGVQcm92aWRlci0+Z2V0Tm9kZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ29udmVydCB0aGUgbm9kZSB0byBoZXgsIGlmIGl0IGlzIHN0aWxsIGFuIGludGVnZXIuCiAgICAgICAgaWYgKGlzX2ludCgkbm9kZSkpIHsKICAgICAgICAgICAgJG5vZGUgPSBkZWNoZXgoJG5vZGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFjdHlwZV94ZGlnaXQoKHN0cmluZykgJG5vZGUpIHx8IHN0cmxlbigoc3RyaW5nKSAkbm9kZSkgPiAxMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG5vZGUgdmFsdWUnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSBoZXgyYmluKHN0cl9wYWQoKHN0cmluZykgJG5vZGUsIDEyLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBOYW1lR2VuZXJhdG9yRmFjdG9yeSByZXRyaWV2ZXMgYSBkZWZhdWx0IG5hbWUgZ2VuZXJhdG9yLCBiYXNlZCBvbiB0aGUKICogZW52aXJvbm1lbnQKICovCmNsYXNzIE5hbWVHZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlZmF1bHQgbmFtZSBnZW5lcmF0b3IsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGVudmlyb25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHZW5lcmF0b3IoKTogTmFtZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiBuZXcgRGVmYXVsdE5hbWVHZW5lcmF0b3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwoKLyoqCiAqIEEgbmFtZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgY3JlYXRlZCBieSBoYXNoaW5nIHRvZ2V0aGVyCiAqIGEgbmFtZXNwYWNlIHdpdGggYSBuYW1lLCBhY2NvcmRpbmcgdG8gYSBoYXNoaW5nIGFsZ29yaXRobQogKi8KaW50ZXJmYWNlIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBhIGJpbmFyeSBzdHJpbmcgZnJvbSBhIG5hbWVzcGFjZSBhbmQgbmFtZSBoYXNoZWQgdG9nZXRoZXIgd2l0aAogICAgICogdGhlIHNwZWNpZmllZCBoYXNoaW5nIGFsZ29yaXRobQogICAgICoKICAgICAqIEBwYXJhbSBVdWlkSW50ZXJmYWNlICRucyBUaGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgY3JlYXRpbmcgYSBVVUlECiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYXNoQWxnb3JpdGhtIFRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoVXVpZEludGVyZmFjZSAkbnMsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRoYXNoQWxnb3JpdGhtKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cTmFtZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHV1aWRfZ2VuZXJhdGVfbWQ1Owp1c2UgZnVuY3Rpb24gdXVpZF9nZW5lcmF0ZV9zaGExOwp1c2UgZnVuY3Rpb24gdXVpZF9wYXJzZTsKCi8qKgogKiBQZWNsVXVpZE5hbWVHZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgZnJvbSBhIG5hbWVzcGFjZSBhbmQgYQogKiBuYW1lLCB1c2luZyBleHQtdXVpZAogKgogKiBAbGluayBodHRwczovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3V1aWQgZXh0LXV1aWQKICovCmNsYXNzIFBlY2xVdWlkTmFtZUdlbmVyYXRvciBpbXBsZW1lbnRzIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UKewogICAgLyoqIEBwc2FsbS1wdXJlICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoVXVpZEludGVyZmFjZSAkbnMsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRoYXNoQWxnb3JpdGhtKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoICgkaGFzaEFsZ29yaXRobSkgewogICAgICAgICAgICBjYXNlICdtZDUnOgogICAgICAgICAgICAgICAgJHV1aWQgPSB1dWlkX2dlbmVyYXRlX21kNSgkbnMtPnRvU3RyaW5nKCksICRuYW1lKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2hhMSc6CiAgICAgICAgICAgICAgICAkdXVpZCA9IHV1aWRfZ2VuZXJhdGVfc2hhMSgkbnMtPnRvU3RyaW5nKCksICRuYW1lKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBOYW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBoYXNoIG5hbWVzcGFjZSBhbmQgbmFtZSB3aXRoIGFsZ29yaXRobSBcJyVzXCcnLAogICAgICAgICAgICAgICAgICAgICRoYXNoQWxnb3JpdGhtCiAgICAgICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB1dWlkX3BhcnNlKCR1dWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBmdW5jdGlvbiB1dWlkX2NyZWF0ZTsKdXNlIGZ1bmN0aW9uIHV1aWRfcGFyc2U7Cgp1c2UgY29uc3QgVVVJRF9UWVBFX1JBTkRPTTsKCi8qKgogKiBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvciBnZW5lcmF0ZXMgc3RyaW5ncyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdXNpbmcgZXh0LXV1aWQKICoKICogQGxpbmsgaHR0cHM6Ly9wZWNsLnBocC5uZXQvcGFja2FnZS91dWlkIGV4dC11dWlkCiAqLwpjbGFzcyBQZWNsVXVpZFJhbmRvbUdlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdXVpZCA9IHV1aWRfY3JlYXRlKFVVSURfVFlQRV9SQU5ET00pOwoKICAgICAgICByZXR1cm4gdXVpZF9wYXJzZSgkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBmdW5jdGlvbiB1dWlkX2NyZWF0ZTsKdXNlIGZ1bmN0aW9uIHV1aWRfcGFyc2U7Cgp1c2UgY29uc3QgVVVJRF9UWVBFX1RJTUU7CgovKioKICogUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIGJpbmFyeSBkYXRhIGZvciB0aW1lLWJhc2UgVVVJRHMsCiAqIHVzaW5nIGV4dC11dWlkCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGVjbC5waHAubmV0L3BhY2thZ2UvdXVpZCBleHQtdXVpZAogKi8KY2xhc3MgUGVjbFV1aWRUaW1lR2VuZXJhdG9yIGltcGxlbWVudHMgVGltZUdlbmVyYXRvckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IHN0cmluZwogICAgewogICAgICAgICR1dWlkID0gdXVpZF9jcmVhdGUoVVVJRF9UWVBFX1RJTUUpOwoKICAgICAgICByZXR1cm4gdXVpZF9wYXJzZSgkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cUmFuZG9tU291cmNlRXhjZXB0aW9uOwp1c2UgVGhyb3dhYmxlOwoKLyoqCiAqIFJhbmRvbUJ5dGVzR2VuZXJhdG9yIGdlbmVyYXRlcyBzdHJpbmdzIG9mIHJhbmRvbSBiaW5hcnkgZGF0YSB1c2luZyB0aGUKICogYnVpbHQtaW4gYHJhbmRvbV9ieXRlcygpYCBQSFAgZnVuY3Rpb24KICoKICogQGxpbmsgaHR0cDovL3BocC5uZXQvcmFuZG9tX2J5dGVzIHJhbmRvbV9ieXRlcygpCiAqLwpjbGFzcyBSYW5kb21CeXRlc0dlbmVyYXRvciBpbXBsZW1lbnRzIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB0aHJvd3MgUmFuZG9tU291cmNlRXhjZXB0aW9uIGlmIHJhbmRvbV9ieXRlcygpIHRocm93cyBhbiBleGNlcHRpb24vZXJyb3IKICAgICAqCiAgICAgKiBAaW5oZXJpdERvYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gcmFuZG9tX2J5dGVzKCRsZW5ndGgpOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5kb21Tb3VyY2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAoaW50KSAkZXhjZXB0aW9uLT5nZXRDb2RlKCksCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBSYW5kb21HZW5lcmF0b3JGYWN0b3J5IHJldHJpZXZlcyBhIGRlZmF1bHQgcmFuZG9tIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlCiAqIGVudmlyb25tZW50CiAqLwpjbGFzcyBSYW5kb21HZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIGRlZmF1bHQgcmFuZG9tIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvcigpOiBSYW5kb21HZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFJhbmRvbUJ5dGVzR2VuZXJhdG9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCi8qKgogKiBBIHJhbmRvbSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgcmFuZG9tIGJpbmFyeSBkYXRhCiAqLwppbnRlcmZhY2UgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGEgc3RyaW5nIG9mIHJhbmRvbWl6ZWQgYmluYXJ5IGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdG8gZ2VuZXJhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGJpbmFyeSBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKGludCAkbGVuZ3RoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW5kb21MaWJcRmFjdG9yeTsKdXNlIFJhbmRvbUxpYlxHZW5lcmF0b3I7CgovKioKICogUmFuZG9tTGliQWRhcHRlciBnZW5lcmF0ZXMgc3RyaW5ncyBvZiByYW5kb20gYmluYXJ5IGRhdGEgdXNpbmcgdGhlCiAqIHBhcmFnb25pZS9yYW5kb20tbGliIGxpYnJhcnkKICoKICogQGxpbmsgaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3BhcmFnb25pZS9yYW5kb20tbGliIHBhcmFnb25pZS9yYW5kb20tbGliCiAqLwpjbGFzcyBSYW5kb21MaWJBZGFwdGVyIGltcGxlbWVudHMgUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBHZW5lcmF0b3IKICAgICAqLwogICAgcHJpdmF0ZSAkZ2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIFJhbmRvbUxpYkFkYXB0ZXIKICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCBpZiBubyBHZW5lcmF0b3IgaXMgcGFzc2VkIGluLCB0aGlzIGNyZWF0ZXMgYSBoaWdoLXN0cmVuZ3RoCiAgICAgKiBnZW5lcmF0b3IgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gYmluYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIEdlbmVyYXRvcnxudWxsICRnZW5lcmF0b3IgVGhlIGdlbmVyYXRvciB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGJpbmFyeSBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/R2VuZXJhdG9yICRnZW5lcmF0b3IgPSBudWxsKQogICAgewogICAgICAgIGlmICgkZ2VuZXJhdG9yID09PSBudWxsKSB7CiAgICAgICAgICAgICRmYWN0b3J5ID0gbmV3IEZhY3RvcnkoKTsKICAgICAgICAgICAgJGdlbmVyYXRvciA9ICRmYWN0b3J5LT5nZXRIaWdoU3RyZW5ndGhHZW5lcmF0b3IoKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5nZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZShpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2VuZXJhdG9yLT5nZW5lcmF0ZSgkbGVuZ3RoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVQcm92aWRlckludGVyZmFjZTsKCi8qKgogKiBUaW1lR2VuZXJhdG9yRmFjdG9yeSByZXRyaWV2ZXMgYSBkZWZhdWx0IHRpbWUgZ2VuZXJhdG9yLCBiYXNlZCBvbiB0aGUKICogZW52aXJvbm1lbnQKICovCmNsYXNzIFRpbWVHZW5lcmF0b3JGYWN0b3J5CnsKICAgIC8qKgogICAgICogQHZhciBOb2RlUHJvdmlkZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbm9kZVByb3ZpZGVyOwoKICAgIC8qKgogICAgICogQHZhciBUaW1lQ29udmVydGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lUHJvdmlkZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIE5vZGVQcm92aWRlckludGVyZmFjZSAkbm9kZVByb3ZpZGVyLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIsCiAgICAgICAgVGltZVByb3ZpZGVySW50ZXJmYWNlICR0aW1lUHJvdmlkZXIKICAgICkgewogICAgICAgICR0aGlzLT5ub2RlUHJvdmlkZXIgPSAkbm9kZVByb3ZpZGVyOwogICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyID0gJHRpbWVDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVQcm92aWRlciA9ICR0aW1lUHJvdmlkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZGVmYXVsdCB0aW1lIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdlbmVyYXRvcigpOiBUaW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VGltZUdlbmVyYXRvcigKICAgICAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciwKICAgICAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIsCiAgICAgICAgICAgICR0aGlzLT50aW1lUHJvdmlkZXIKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEdlbmVyYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKLyoqCiAqIEEgdGltZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIHN0cmluZ3Mgb2YgYmluYXJ5IGRhdGEgYmFzZWQgb24gYSBub2RlIElELAogKiBjbG9jayBzZXF1ZW5jZSwgYW5kIHRoZSBjdXJyZW50IHRpbWUKICovCmludGVyZmFjZSBUaW1lR2VuZXJhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBiaW5hcnkgc3RyaW5nIGZyb20gYSBub2RlIElELCBjbG9jayBzZXF1ZW5jZSwgYW5kIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxpbnR8c3RyaW5nfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKICAgICAqICAgICBoYXJkd2FyZSBhZGRyZXNzOyB0aGlzIG51bWJlciBtYXkgYmUgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlciBvciBhCiAgICAgKiAgICAgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogICAgICogICAgIHRoYXQgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZQogICAgICogICAgIG5vZGUgSUQgY2hhbmdlcwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgYmluYXJ5IHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBzdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEZpZWxkc1xTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxOaWxUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVmFyaWFudFRyYWl0Owp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxWZXJzaW9uVHJhaXQ7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3RybGVuOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgZnVuY3Rpb24gdW5wYWNrOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBHVUlEcyBhcmUgY29tcHJpc2VkIG9mIGEgc2V0IG9mIG5hbWVkIGZpZWxkcywgYWNjb3JkaW5nIHRvIFJGQyA0MTIyCiAqCiAqIEBzZWUgR3VpZAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBGaWVsZHMgaW1wbGVtZW50cyBGaWVsZHNJbnRlcmZhY2UKewogICAgdXNlIE5pbFRyYWl0OwogICAgdXNlIFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0OwogICAgdXNlIFZhcmlhbnRUcmFpdDsKICAgIHVzZSBWZXJzaW9uVHJhaXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRieXRlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIEEgMTYtYnl0ZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgVVVJRAogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBpcyBub3QgZXhhY3RseSAxNiBieXRlcwogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGRvZXMgbm90IHJlcHJlc2VudCBhIEdVSUQKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRieXRlcykKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRieXRlcykgIT09IDE2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIGJ5dGUgc3RyaW5nIG11c3QgYmUgMTYgYnl0ZXMgbG9uZzsgJwogICAgICAgICAgICAgICAgLiAncmVjZWl2ZWQgJyAuIHN0cmxlbigkYnl0ZXMpIC4gJyBieXRlcycKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ieXRlcyA9ICRieXRlczsKCiAgICAgICAgaWYgKCEkdGhpcy0+aXNDb3JyZWN0VmFyaWFudCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIGJ5dGUgc3RyaW5nIHJlY2VpdmVkIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIFJGQyAnCiAgICAgICAgICAgICAgICAuICc0MTIyIG9yIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbiB2YXJpYW50cycKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPmlzQ29ycmVjdFZlcnNpb24oKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBieXRlIHN0cmluZyByZWNlaXZlZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmVyc2lvbicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ynl0ZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAvLyBTd2FwIHRoZSBieXRlcyBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gbmV0d29yayBieXRlIG9yZGVyLgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRoZXggKi8KICAgICAgICAkaGV4ID0gdW5wYWNrKAogICAgICAgICAgICAnSConLAogICAgICAgICAgICBwYWNrKAogICAgICAgICAgICAgICAgJ3YqJywKICAgICAgICAgICAgICAgIGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDIsIDIpKSksCiAgICAgICAgICAgICAgICBoZXhkZWMoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAwLCAyKSkpCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKChzdHJpbmcpICgkaGV4WzFdID8/ICcnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAvLyBTd2FwIHRoZSBieXRlcyBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gbmV0d29yayBieXRlIG9yZGVyLgogICAgICAgIC8qKiBAdmFyIGFycmF5ICRoZXggKi8KICAgICAgICAkaGV4ID0gdW5wYWNrKAogICAgICAgICAgICAnSConLAogICAgICAgICAgICBwYWNrKAogICAgICAgICAgICAgICAgJ3YnLAogICAgICAgICAgICAgICAgaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNCwgMikpKQogICAgICAgICAgICApCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbCgoc3RyaW5nKSAoJGhleFsxXSA/PyAnJykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgLy8gU3dhcCB0aGUgYnl0ZXMgZnJvbSBsaXR0bGUgZW5kaWFuIHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4KICAgICAgICAvKiogQHZhciBhcnJheSAkaGV4ICovCiAgICAgICAgJGhleCA9IHVucGFjaygKICAgICAgICAgICAgJ0gqJywKICAgICAgICAgICAgcGFjaygKICAgICAgICAgICAgICAgICd2JywKICAgICAgICAgICAgICAgIGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDYsIDIpKSkKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoKHN0cmluZykgKCRoZXhbMV0gPz8gJycpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzcHJpbnRmKAogICAgICAgICAgICAnJTAzeCUwNHMlMDhzJywKICAgICAgICAgICAgaGV4ZGVjKCR0aGlzLT5nZXRUaW1lSGlBbmRWZXJzaW9uKCktPnRvU3RyaW5nKCkpICYgMHgwZmZmLAogICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAkdGhpcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpCiAgICAgICAgKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMikpKSAmIDB4M2ZmZjsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcGFkKGRlY2hleCgkY2xvY2tTZXEpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOSwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAxMCkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiA/aW50CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc05pbCgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHBhcnRzICovCiAgICAgICAgJHBhcnRzID0gdW5wYWNrKCduKicsICR0aGlzLT5ieXRlcyk7CgogICAgICAgIHJldHVybiAoKGludCkgJHBhcnRzWzRdID4+IDQpICYgMHgwMGY7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0NvcnJlY3RWYXJpYW50KCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzTmlsKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAkdmFyaWFudCA9ICR0aGlzLT5nZXRWYXJpYW50KCk7CgogICAgICAgIHJldHVybiAkdmFyaWFudCA9PT0gVXVpZDo6UkZDXzQxMjIgfHwgJHZhcmlhbnQgPT09IFV1aWQ6OlJFU0VSVkVEX01JQ1JPU09GVDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/Guid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKLyoqCiAqIEd1aWQgcmVwcmVzZW50cyBhIFVVSUQgd2l0aCAibmF0aXZlIiAobGl0dGxlLWVuZGlhbikgYnl0ZSBvcmRlcgogKgogKiBGcm9tIFdpa2lwZWRpYToKICoKICogPiBUaGUgZmlyc3QgdGhyZWUgZmllbGRzIGFyZSB1bnNpZ25lZCAzMi0gYW5kIDE2LWJpdCBpbnRlZ2VycyBhbmQgYXJlIHN1YmplY3QKICogPiB0byBzd2FwcGluZywgd2hpbGUgdGhlIGxhc3QgdHdvIGZpZWxkcyBjb25zaXN0IG9mIHVuaW50ZXJwcmV0ZWQgYnl0ZXMsIG5vdAogKiA+IHN1YmplY3QgdG8gc3dhcHBpbmcuIFRoaXMgYnl0ZSBzd2FwcGluZyBhcHBsaWVzIGV2ZW4gZm9yIHZlcnNpb25zIDMsIDQsIGFuZAogKiA+IDUsIHdoZXJlIHRoZSBjYW5vbmljYWwgZmllbGRzIGRvIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBjb250ZW50IG9mIHRoZSBVVUlELgogKgogKiBUaGUgZmlyc3QgdGhyZWUgZmllbGRzIG9mIGEgR1VJRCBhcmUgZW5jb2RlZCBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIsCiAqIHdoaWxlIHRoZSBsYXN0IHRocmVlIGZpZWxkcyBhcmUgaW4gbmV0d29yayAoYmlnLWVuZGlhbikgYnl0ZSBvcmRlci4gVGhpcyBpcwogKiBhY2NvcmRpbmcgdG8gdGhlIGhpc3Rvcnkgb2YgdGhlIE1pY3Jvc29mdCBkZWZpbml0aW9uIG9mIGEgR1VJRC4KICoKICogQWNjb3JkaW5nIHRvIHRoZSAuTkVUIEd1aWQuVG9CeXRlQXJyYXkgbWV0aG9kIGRvY3VtZW50YXRpb246CiAqCiAqID4gTm90ZSB0aGF0IHRoZSBvcmRlciBvZiBieXRlcyBpbiB0aGUgcmV0dXJuZWQgYnl0ZSBhcnJheSBpcyBkaWZmZXJlbnQgZnJvbQogKiA+IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBHdWlkIHZhbHVlLiBUaGUgb3JkZXIgb2YgdGhlIGJlZ2lubmluZwogKiA+IGZvdXItYnl0ZSBncm91cCBhbmQgdGhlIG5leHQgdHdvIHR3by1ieXRlIGdyb3VwcyBpcyByZXZlcnNlZCwgd2hlcmVhcyB0aGUKICogPiBvcmRlciBvZiB0aGUgbGFzdCB0d28tYnl0ZSBncm91cCBhbmQgdGhlIGNsb3Npbmcgc2l4LWJ5dGUgZ3JvdXAgaXMgdGhlCiAqID4gc2FtZS4KICoKICogQGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pdmVyc2FsbHlfdW5pcXVlX2lkZW50aWZpZXIjVmFyaWFudHMgVVVJRCBWYXJpYW50cyBvbiBXaWtpcGVkaWEKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvZ3VpZGRlZi9ucy1ndWlkZGVmLWd1aWQgV2luZG93cyBHVUlEIHN0cnVjdHVyZQogKiBAbGluayBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvYXBpL3N5c3RlbS5ndWlkIC5ORVQgR3VpZCBTdHJ1Y3QKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L2FwaS9zeXN0ZW0uZ3VpZC50b2J5dGVhcnJheSAuTkVUIEd1aWQuVG9CeXRlQXJyYXkgTWV0aG9kCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEd1aWQgZXh0ZW5kcyBVdWlkCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBGaWVsZHMgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Guid/GuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXEd1aWQ7Cgp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBHdWlkQnVpbGRlciBidWlsZHMgaW5zdGFuY2VzIG9mIEd1aWQKICoKICogQHNlZSBHdWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIEd1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgR3VpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIEd1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgR3VpZCBpbnN0YW5jZQogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGUgc3RyaW5nIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gR3VpZCBUaGUgR3VpZEJ1aWxkZXIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSYW1zZXlcVXVpZFxHdWlkXEd1aWQKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgR3VpZCgKICAgICAgICAgICAgICAgICR0aGlzLT5idWlsZEZpZWxkcygkYnl0ZXMpLAogICAgICAgICAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciwKICAgICAgICAgICAgICAgICRjb2RlYywKICAgICAgICAgICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAoaW50KSAkZS0+Z2V0Q29kZSgpLCAkZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgbWV0aG9kIHRvIGFsbG93IGluamVjdGluZyBhIG1vY2ssIGZvciB0ZXN0aW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZEZpZWxkcyhzdHJpbmcgJGJ5dGVzKTogRmllbGRzCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZHMoJGJ5dGVzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Lazy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXExhenk7Cgp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRmllbGRzXEZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkXFV1aWRWNjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYxOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVXVpZEZhY3Rvcnk7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwp1c2UgVmFsdWVFcnJvcjsKCnVzZSBmdW5jdGlvbiBhc3NlcnQ7CnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCi8qKgogKiBMYXp5IHZlcnNpb24gb2YgYSBVVUlEOiBpdHMgZm9ybWF0IGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgc28gaXQgaXMgbW9zdGx5IG9ubHkgdXNhYmxlIGZvciBzdHJpbmcvYnl0ZXMKICogY29udmVyc2lvbi4gVGhpcyBvYmplY3Qgb3B0aW1pemVzIGluc3RhbnRpYXRpb24sIHNlcmlhbGl6YXRpb24gYW5kIHN0cmluZyBjb252ZXJzaW9uIHRpbWUsIGF0IHRoZSBjb3N0IG9mCiAqIGluY3JlYXNlZCBvdmVyaGVhZCBmb3IgbW9yZSBhZHZhbmNlZCBVVUlEIG9wZXJhdGlvbnMuCiAqCiAqIEBpbnRlcm5hbCB0aGlzIHR5cGUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGRpcmVjdGx5IHJlZmVyZW5jZWQKICogICAgICAgICAgIGluIGNvbnN1bWVyIGxpYnJhcmllcy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKgogKiBOb3RlOiB0aGUge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBkb2VzIG5vdCBkZWNsYXJlIG1ldGhvZHMgdGhhdCBkZXByZWNhdGVkIEFQSQogKiAgICAgICAgcmVsaWVzIHVwb246IHRoZSBBUEkgaGFzIGJlZW4gcG9ydGVkIGZyb20gdGhlIHtAc2VlIFxSYW1zZXlcVXVpZFxVdWlkfSBkZWZpbml0aW9uLAogKiAgICAgICAgYW5kIGlzIGRlcHJlY2F0ZWQgYW55d2F5LgogKiBOb3RlOiB0aGUgZGVwcmVjYXRlZCBBUEkgZnJvbSB7QHNlZSBcUmFtc2V5XFV1aWRcVXVpZH0gaXMgaW4gdXNlIGhlcmUgKG9uIHB1cnBvc2UpOiBpdCB3aWxsIGJlIHJlbW92ZWQKICogICAgICAgb25jZSB0aGUgZGVwcmVjYXRlZCBBUEkgaXMgZ29uZSBmcm9tIHRoaXMgY2xhc3MgdG9vLgogKgogKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAqLwpmaW5hbCBjbGFzcyBMYXp5VXVpZEZyb21TdHJpbmcgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBjb25zdCBWQUxJRF9SRUdFWCA9ICcvXEFbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn1cei9tcyc7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKiBAcHNhbG0tdmFyIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXVpZDsKICAgIC8qKiBAdmFyIFV1aWRJbnRlcmZhY2V8bnVsbCAqLwogICAgcHJpdmF0ZSAkdW53cmFwcGVkOwoKICAgIC8qKiBAcHNhbG0tcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAkdXVpZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdXVpZCkKICAgIHsKICAgICAgICAkdGhpcy0+dXVpZCA9ICR1dWlkOwogICAgfQoKICAgIC8qKiBAcHNhbG0tcHVyZSAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQnl0ZXMoc3RyaW5nICRieXRlcyk6IHNlbGYKICAgIHsKICAgICAgICAkYmFzZTE2VXVpZCA9IGJpbjJoZXgoJGJ5dGVzKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICBzdWJzdHIoJGJhc2UxNlV1aWQsIDAsIDgpCiAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCA4LCA0KQogICAgICAgICAgICAuICctJwogICAgICAgICAgICAuIHN1YnN0cigkYmFzZTE2VXVpZCwgMTIsIDQpCiAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCAxNiwgNCkKICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgLiBzdWJzdHIoJGJhc2UxNlV1aWQsIDIwLCAxMikKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtzdHJpbmc6IHN0cmluZ30KICAgICAqCiAgICAgKiBAcHNhbG0tcmV0dXJuIGFycmF5e3N0cmluZzogbm9uLWVtcHR5LXN0cmluZ30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsnc3RyaW5nJyA9PiAkdGhpcy0+dXVpZF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZAogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBub24tZW1wdHktc3RyaW5nICRzZXJpYWxpemVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+dXVpZCA9ICRzZXJpYWxpemVkOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5e3N0cmluZzogc3RyaW5nfSAkZGF0YQogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBhcnJheXtzdHJpbmc6IG5vbi1lbXB0eS1zdHJpbmd9ICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3N0cmluZyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydzdHJpbmcnXSk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyQ29udmVydGVyKCk6IE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0TnVtYmVyQ29udmVydGVyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkc0hleCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0RmllbGRzSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRDbG9ja1NlcUxvd0hleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxdWVuY2VIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRDbG9ja1NlcXVlbmNlSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldERhdGVUaW1lKCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRMZWFzdFNpZ25pZmljYW50Qml0c0hleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vc3RTaWduaWZpY2FudEJpdHNIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRNb3N0U2lnbmlmaWNhbnRCaXRzSGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZUhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldE5vZGVIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uSGV4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpCiAgICAgICAgICAgIC0+Z2V0VGltZUhpQW5kVmVyc2lvbkhleCgpOwogICAgfQoKICAgIC8qKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3dIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRUaW1lTG93SGV4KCk7CiAgICB9CgogICAgLyoqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZEhleCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFRpbWVNaWRIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXBIZXgoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRUaW1lc3RhbXBIZXgoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcm4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRVcm4oKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYW50KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFZhcmlhbnQoKTsKICAgIH0KCiAgICAvKiogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKQogICAgICAgICAgICAtPmdldFZlcnNpb24oKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKFV1aWRJbnRlcmZhY2UgJG90aGVyKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5jb21wYXJlVG8oJG90aGVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKD9vYmplY3QgJG90aGVyKTogYm9vbAogICAgewogICAgICAgIGlmICghICRvdGhlciBpbnN0YW5jZW9mIFV1aWRJbnRlcmZhY2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkID09PSAkb3RoZXItPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHtAc2VlIHNlbGY6OiR1dWlkfSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHNvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGtub3cgdGhhdCB7QHNlZSBoZXgyYmlufSB3aWxsIHJldHJpZXZlIGEgbm9uLWVtcHR5IHN0cmluZyB0b28uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHBocHN0YW4taWdub3JlLW5leHQtbGluZSBQSFBTdGFuIGNvbXBsYWlucyB0aGF0IHRoaXMgaXMgbm90IGEgbm9uLWVtcHR5LXN0cmluZy4gKi8KICAgICAgICByZXR1cm4gKHN0cmluZykgaGV4MmJpbihzdHJfcmVwbGFjZSgnLScsICcnLCAkdGhpcy0+dXVpZCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZHMoKTogRmllbGRzSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRGaWVsZHMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRIZXgoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZWdlcigpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSkKICAgICAgICAgICAgLT5nZXRJbnRlZ2VyKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldENsb2NrU2VxSGlBbmRSZXNlcnZlZCgpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Q2xvY2tTZXFMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldENsb2NrU2VxTG93KCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRDbG9ja1NlcSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXF1ZW5jZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXRDbG9ja1NlcSgpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gNS4wLjAuIFRoZXJlIGlzIG5vIGRpcmVjdAogICAgICogICAgIGFsdGVybmF0aXZlLCBidXQgdGhlIHNhbWUgaW5mb3JtYXRpb24gbWF5IGJlIG9idGFpbmVkIGJ5IHNwbGl0dGluZwogICAgICogICAgIGluIGhhbGYgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEhleCgpfS4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExlYXN0U2lnbmlmaWNhbnRCaXRzKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleChzdWJzdHIoJGluc3RhbmNlLT5nZXRIZXgoKS0+dG9TdHJpbmcoKSwgMTYpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiA1LjAuMC4gVGhlcmUgaXMgbm8gZGlyZWN0CiAgICAgKiAgICAgYWx0ZXJuYXRpdmUsIGJ1dCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBtYXkgYmUgb2J0YWluZWQgYnkgc3BsaXR0aW5nCiAgICAgKiAgICAgaW4gaGFsZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0SGV4KCl9LgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9zdFNpZ25pZmljYW50Qml0cygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoc3Vic3RyKCRpbnN0YW5jZS0+Z2V0SGV4KCktPnRvU3RyaW5nKCksIDAsIDE2KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0Tm9kZSgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXROb2RlKCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lSGlBbmRWZXJzaW9uKCl9CiAgICAgKiAgICAgYW5kIHVzZSB0aGUgYXJiaXRyYXJ5LXByZWNpc2lvbiBtYXRoIGxpYnJhcnkgb2YgeW91ciBjaG9pY2UgdG8KICAgICAqICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGludGVnZXIuCiAgICAgKgogICAgICogQHBzYWxtLXN1cHByZXNzIFVuZGVmaW5lZEludGVyZmFjZU1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIERlcHJlY2F0ZWRNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lSGlBbmRWZXJzaW9uKCk6IHN0cmluZwogICAgewogICAgICAgICRpbnN0YW5jZSA9ICgkdGhpcy0+dW53cmFwcGVkID8/ICR0aGlzLT51bndyYXAoKSk7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2UtPmdldE51bWJlckNvbnZlcnRlcigpCiAgICAgICAgICAgIC0+ZnJvbUhleCgKICAgICAgICAgICAgICAgICRpbnN0YW5jZS0+Z2V0RmllbGRzKCkKICAgICAgICAgICAgICAgICAgICAtPmdldFRpbWVIaUFuZFZlcnNpb24oKQogICAgICAgICAgICAgICAgICAgIC0+dG9TdHJpbmcoKQogICAgICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWRJbnRlcmZhY2U6OmdldEZpZWxkcygpfSB0byBnZXQgYQogICAgICogICAgIHtAc2VlIEZpZWxkc0ludGVyZmFjZX0gaW5zdGFuY2UuIElmIGl0IGlzIGEge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZX0KICAgICAqICAgICBpbnN0YW5jZSwgeW91IG1heSBjYWxsIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U6OmdldFRpbWVMb3coKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVMb3coKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGluc3RhbmNlID0gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKTsKCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZS0+Z2V0TnVtYmVyQ29udmVydGVyKCkKICAgICAgICAgICAgLT5mcm9tSGV4KAogICAgICAgICAgICAgICAgJGluc3RhbmNlLT5nZXRGaWVsZHMoKQogICAgICAgICAgICAgICAgICAgIC0+Z2V0VGltZUxvdygpCiAgICAgICAgICAgICAgICAgICAgLT50b1N0cmluZygpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgVXVpZEludGVyZmFjZTo6Z2V0RmllbGRzKCl9IHRvIGdldCBhCiAgICAgKiAgICAge0BzZWUgRmllbGRzSW50ZXJmYWNlfSBpbnN0YW5jZS4gSWYgaXQgaXMgYSB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlfQogICAgICogICAgIGluc3RhbmNlLCB5b3UgbWF5IGNhbGwge0BzZWUgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTo6Z2V0VGltZU1pZCgpfQogICAgICogICAgIGFuZCB1c2UgdGhlIGFyYml0cmFyeS1wcmVjaXNpb24gbWF0aCBsaWJyYXJ5IG9mIHlvdXIgY2hvaWNlIHRvCiAgICAgKiAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRJbnRlcmZhY2VNZXRob2QKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBEZXByZWNhdGVkTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU1pZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoCiAgICAgICAgICAgICAgICAkaW5zdGFuY2UtPmdldEZpZWxkcygpCiAgICAgICAgICAgICAgICAgICAgLT5nZXRUaW1lTWlkKCkKICAgICAgICAgICAgICAgICAgICAtPnRvU3RyaW5nKCkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBVdWlkSW50ZXJmYWNlOjpnZXRGaWVsZHMoKX0gdG8gZ2V0IGEKICAgICAqICAgICB7QHNlZSBGaWVsZHNJbnRlcmZhY2V9IGluc3RhbmNlLiBJZiBpdCBpcyBhIHtAc2VlIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2V9CiAgICAgKiAgICAgaW5zdGFuY2UsIHlvdSBtYXkgY2FsbCB7QHNlZSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOjpnZXRUaW1lc3RhbXAoKX0KICAgICAqICAgICBhbmQgdXNlIHRoZSBhcmJpdHJhcnktcHJlY2lzaW9uIG1hdGggbGlicmFyeSBvZiB5b3VyIGNob2ljZSB0bwogICAgICogICAgIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgaW50ZWdlci4KICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkSW50ZXJmYWNlTWV0aG9kCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRGVwcmVjYXRlZE1ldGhvZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwogICAgICAgICRmaWVsZHMgPSAkaW5zdGFuY2UtPmdldEZpZWxkcygpOwoKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbignTm90IGEgdGltZS1iYXNlZCBVVUlEJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGluc3RhbmNlLT5nZXROdW1iZXJDb252ZXJ0ZXIoKQogICAgICAgICAgICAtPmZyb21IZXgoJGZpZWxkcy0+Z2V0VGltZXN0YW1wKCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1V1aWRWMSgpOiBVdWlkVjEKICAgIHsKICAgICAgICAkaW5zdGFuY2UgPSAoJHRoaXMtPnVud3JhcHBlZCA/PyAkdGhpcy0+dW53cmFwKCkpOwoKICAgICAgICBpZiAoJGluc3RhbmNlIGluc3RhbmNlb2YgVXVpZFYxKSB7CiAgICAgICAgICAgIHJldHVybiAkaW5zdGFuY2U7CiAgICAgICAgfQoKICAgICAgICBhc3NlcnQoJGluc3RhbmNlIGluc3RhbmNlb2YgVXVpZFY2KTsKCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZS0+dG9VdWlkVjEoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9VdWlkVjYoKTogVXVpZFY2CiAgICB7CiAgICAgICAgJGluc3RhbmNlID0gKCR0aGlzLT51bndyYXBwZWQgPz8gJHRoaXMtPnVud3JhcCgpKTsKCiAgICAgICAgYXNzZXJ0KCRpbnN0YW5jZSBpbnN0YW5jZW9mIFV1aWRWNik7CgogICAgICAgIHJldHVybiAkaW5zdGFuY2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlTWV0aG9kQ2FsbCB0aGUgcmV0cmlldmFsIG9mIHRoZSBmYWN0b3J5IGlzIGEgY2xlYXIgdmlvbGF0aW9uIG9mIHB1cml0eSBoZXJlOiB0aGlzIGlzIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIHBpdGZhbGwgb2YgdGhlIGRlc2lnbiBvZiB0aGlzIGxpYnJhcnksIHdoZXJlIGEgdmFsdWUgb2JqZWN0IGNvbnRhaW5zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG11dGFibGUgcmVmZXJlbmNlIHRvIGEgZmFjdG9yeS4gV2UgdXNlIGEgZml4ZWQgZmFjdG9yeSBoZXJlLCBzbyB0aGUgdmlvbGF0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBoYXZlIHJlYWwtd29ybGQgZWZmZWN0cywgYXMgdGhpcyBvYmplY3QgaXMgb25seSBpbnN0YW50aWF0ZWQgd2l0aCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZmFjdG9yeSBzZXR0aW5ncy9mZWF0dXJlcy4KICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbmFjY2Vzc2libGVQcm9wZXJ0eSBwcm9wZXJ0eSB7QHNlZSAkdW53cmFwcGVkfSBpcyB1c2VkIGFzIGEgY2FjaGU6IHdlIGRvbid0IGV4cG9zZSBpdCB0byB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIHdvcmxkLCBzbyB3ZSBzaG91bGQgYmUgZmluZSBoZXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVud3JhcCgpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51bndyYXBwZWQgPSAobmV3IFV1aWRGYWN0b3J5KCkpCiAgICAgICAgICAgIC0+ZnJvbVN0cmluZygkdGhpcy0+dXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7Cgp1c2UgQnJpY2tcTWF0aFxCaWdEZWNpbWFsOwp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQnJpY2tcTWF0aFxFeGNlcHRpb25cTWF0aEV4Y2VwdGlvbjsKdXNlIEJyaWNrXE1hdGhcUm91bmRpbmdNb2RlIGFzIEJyaWNrTWF0aFJvdW5kaW5nOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFR5cGVcRGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcTnVtYmVySW50ZXJmYWNlOwoKLyoqCiAqIEEgY2FsY3VsYXRvciB1c2luZyB0aGUgYnJpY2svbWF0aCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgQnJpY2tNYXRoQ2FsY3VsYXRvciBpbXBsZW1lbnRzIENhbGN1bGF0b3JJbnRlcmZhY2UKewogICAgcHJpdmF0ZSBjb25zdCBST1VORElOR19NT0RFX01BUCA9IFsKICAgICAgICBSb3VuZGluZ01vZGU6OlVOTkVDRVNTQVJZID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpVTk5FQ0VTU0FSWSwKICAgICAgICBSb3VuZGluZ01vZGU6OlVQID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpVUCwKICAgICAgICBSb3VuZGluZ01vZGU6OkRPV04gPT4gQnJpY2tNYXRoUm91bmRpbmc6OkRPV04sCiAgICAgICAgUm91bmRpbmdNb2RlOjpDRUlMSU5HID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpDRUlMSU5HLAogICAgICAgIFJvdW5kaW5nTW9kZTo6RkxPT1IgPT4gQnJpY2tNYXRoUm91bmRpbmc6OkZMT09SLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9VUCA9PiBCcmlja01hdGhSb3VuZGluZzo6SEFMRl9VUCwKICAgICAgICBSb3VuZGluZ01vZGU6OkhBTEZfRE9XTiA9PiBCcmlja01hdGhSb3VuZGluZzo6SEFMRl9ET1dOLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9DRUlMSU5HID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0NFSUxJTkcsCiAgICAgICAgUm91bmRpbmdNb2RlOjpIQUxGX0ZMT09SID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0ZMT09SLAogICAgICAgIFJvdW5kaW5nTW9kZTo6SEFMRl9FVkVOID0+IEJyaWNrTWF0aFJvdW5kaW5nOjpIQUxGX0VWRU4sCiAgICBdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoTnVtYmVySW50ZXJmYWNlICRhdWdlbmQsIE51bWJlckludGVyZmFjZSAuLi4kYWRkZW5kcyk6IE51bWJlckludGVyZmFjZQogICAgewogICAgICAgICRzdW0gPSBCaWdJbnRlZ2VyOjpvZigkYXVnZW5kLT50b1N0cmluZygpKTsKCiAgICAgICAgZm9yZWFjaCAoJGFkZGVuZHMgYXMgJGFkZGVuZCkgewogICAgICAgICAgICAkc3VtID0gJHN1bS0+cGx1cygkYWRkZW5kLT50b1N0cmluZygpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSW50ZWdlck9iamVjdCgoc3RyaW5nKSAkc3VtKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VidHJhY3QoTnVtYmVySW50ZXJmYWNlICRtaW51ZW5kLCBOdW1iZXJJbnRlcmZhY2UgLi4uJHN1YnRyYWhlbmRzKTogTnVtYmVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgJGRpZmZlcmVuY2UgPSBCaWdJbnRlZ2VyOjpvZigkbWludWVuZC0+dG9TdHJpbmcoKSk7CgogICAgICAgIGZvcmVhY2ggKCRzdWJ0cmFoZW5kcyBhcyAkc3VidHJhaGVuZCkgewogICAgICAgICAgICAkZGlmZmVyZW5jZSA9ICRkaWZmZXJlbmNlLT5taW51cygkc3VidHJhaGVuZC0+dG9TdHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoKHN0cmluZykgJGRpZmZlcmVuY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseShOdW1iZXJJbnRlcmZhY2UgJG11bHRpcGxpY2FuZCwgTnVtYmVySW50ZXJmYWNlIC4uLiRtdWx0aXBsaWVycyk6IE51bWJlckludGVyZmFjZQogICAgewogICAgICAgICRwcm9kdWN0ID0gQmlnSW50ZWdlcjo6b2YoJG11bHRpcGxpY2FuZC0+dG9TdHJpbmcoKSk7CgogICAgICAgIGZvcmVhY2ggKCRtdWx0aXBsaWVycyBhcyAkbXVsdGlwbGllcikgewogICAgICAgICAgICAkcHJvZHVjdCA9ICRwcm9kdWN0LT5tdWx0aXBsaWVkQnkoJG11bHRpcGxpZXItPnRvU3RyaW5nKCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyT2JqZWN0KChzdHJpbmcpICRwcm9kdWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGl2aWRlKAogICAgICAgIGludCAkcm91bmRpbmdNb2RlLAogICAgICAgIGludCAkc2NhbGUsCiAgICAgICAgTnVtYmVySW50ZXJmYWNlICRkaXZpZGVuZCwKICAgICAgICBOdW1iZXJJbnRlcmZhY2UgLi4uJGRpdmlzb3JzCiAgICApOiBOdW1iZXJJbnRlcmZhY2UgewogICAgICAgICRicmlja1JvdW5kaW5nID0gJHRoaXMtPmdldEJyaWNrUm91bmRpbmdNb2RlKCRyb3VuZGluZ01vZGUpOwoKICAgICAgICAkcXVvdGllbnQgPSBCaWdEZWNpbWFsOjpvZigkZGl2aWRlbmQtPnRvU3RyaW5nKCkpOwoKICAgICAgICBmb3JlYWNoICgkZGl2aXNvcnMgYXMgJGRpdmlzb3IpIHsKICAgICAgICAgICAgJHF1b3RpZW50ID0gJHF1b3RpZW50LT5kaXZpZGVkQnkoJGRpdmlzb3ItPnRvU3RyaW5nKCksICRzY2FsZSwgJGJyaWNrUm91bmRpbmcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRzY2FsZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoKHN0cmluZykgJHF1b3RpZW50LT50b0JpZ0ludGVnZXIoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IERlY2ltYWwoKHN0cmluZykgJHF1b3RpZW50KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJhc2Uoc3RyaW5nICR2YWx1ZSwgaW50ICRiYXNlKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlck9iamVjdCgoc3RyaW5nKSBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsICRiYXNlKSk7CiAgICAgICAgfSBjYXRjaCAoTWF0aEV4Y2VwdGlvbiB8IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbi0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CYXNlKEludGVnZXJPYmplY3QgJHZhbHVlLCBpbnQgJGJhc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6b2YoJHZhbHVlLT50b1N0cmluZygpKS0+dG9CYXNlKCRiYXNlKTsKICAgICAgICB9IGNhdGNoIChNYXRoRXhjZXB0aW9uIHwgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAoaW50KSAkZXhjZXB0aW9uLT5nZXRDb2RlKCksCiAgICAgICAgICAgICAgICAkZXhjZXB0aW9uCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0hleGFkZWNpbWFsKEludGVnZXJPYmplY3QgJHZhbHVlKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCR0aGlzLT50b0Jhc2UoJHZhbHVlLCAxNikpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoSGV4YWRlY2ltYWwgJHZhbHVlKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbUJhc2UoJHZhbHVlLT50b1N0cmluZygpLCAxNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXBzIHJhbXNleS91dWlkIHJvdW5kaW5nIG1vZGVzIHRvIHRob3NlIHVzZWQgYnkgYnJpY2svbWF0aAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEJyaWNrUm91bmRpbmdNb2RlKGludCAkcm91bmRpbmdNb2RlKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlJPVU5ESU5HX01PREVfTUFQWyRyb3VuZGluZ01vZGVdID8/IDA7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/CalculatorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7Cgp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxOdW1iZXJJbnRlcmZhY2U7CgovKioKICogQSBjYWxjdWxhdG9yIHBlcmZvcm1zIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvbiBudW1iZXJzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBDYWxjdWxhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VtIG9mIGFsbCB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycwogICAgICoKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgJGF1Z2VuZCBUaGUgZmlyc3QgYWRkZW5kICh0aGUgaW50ZWdlciBiZWluZyBhZGRlZCB0bykKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJGFkZGVuZHMgVGhlIGFkZGl0aW9uYWwgaW50ZWdlcnMgdG8gYSBhZGQgdG8gdGhlIGF1Z2VuZAogICAgICoKICAgICAqIEByZXR1cm4gTnVtYmVySW50ZXJmYWNlIFRoZSBzdW0gb2YgYWxsIHRoZSBwYXJhbWV0ZXJzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoTnVtYmVySW50ZXJmYWNlICRhdWdlbmQsIE51bWJlckludGVyZmFjZSAuLi4kYWRkZW5kcyk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgYWxsIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckludGVyZmFjZSAkbWludWVuZCBUaGUgaW50ZWdlciBiZWluZyBzdWJ0cmFjdGVkIGZyb20KICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJHN1YnRyYWhlbmRzIFRoZSBpbnRlZ2VycyB0byBzdWJ0cmFjdCBmcm9tIHRoZSBtaW51ZW5kCiAgICAgKgogICAgICogQHJldHVybiBOdW1iZXJJbnRlcmZhY2UgVGhlIGRpZmZlcmVuY2UgYWZ0ZXIgc3VidHJhY3RpbmcgYWxsIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KE51bWJlckludGVyZmFjZSAkbWludWVuZCwgTnVtYmVySW50ZXJmYWNlIC4uLiRzdWJ0cmFoZW5kcyk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgYWxsIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckludGVyZmFjZSAkbXVsdGlwbGljYW5kIFRoZSBpbnRlZ2VyIHRvIGJlIG11bHRpcGxpZWQKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJG11bHRpcGxpZXJzIFRoZSBmYWN0b3JzIGJ5IHdoaWNoIHRvIG11bHRpcGx5IHRoZSBtdWx0aXBsaWNhbmQKICAgICAqCiAgICAgKiBAcmV0dXJuIE51bWJlckludGVyZmFjZSBUaGUgcHJvZHVjdCBvZiBtdWx0aXBseWluZyBhbGwgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGx5KE51bWJlckludGVyZmFjZSAkbXVsdGlwbGljYW5kLCBOdW1iZXJJbnRlcmZhY2UgLi4uJG11bHRpcGxpZXJzKTogTnVtYmVySW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcXVvdGllbnQgb2YgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMgZGl2aWRlZCBsZWZ0LXRvLXJpZ2h0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkcm91bmRpbmdNb2RlIFRoZSBSb3VuZGluZ01vZGUgY29uc3RhbnQgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbgogICAgICogQHBhcmFtIGludCAkc2NhbGUgVGhlIHNjYWxlIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24KICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgJGRpdmlkZW5kIFRoZSBpbnRlZ2VyIHRvIGJlIGRpdmlkZWQKICAgICAqIEBwYXJhbSBOdW1iZXJJbnRlcmZhY2UgLi4uJGRpdmlzb3JzIFRoZSBpbnRlZ2VycyB0byBkaXZpZGUgJGRpdmlkZW5kIGJ5LCBpbgogICAgICogICAgIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGl2aXNpb24gb3BlcmF0aW9ucyBzaG91bGQgdGFrZSBwbGFjZQogICAgICogICAgIChsZWZ0LXRvLXJpZ2h0KQogICAgICoKICAgICAqIEByZXR1cm4gTnVtYmVySW50ZXJmYWNlIFRoZSBxdW90aWVudCBvZiBkaXZpZGluZyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyBsZWZ0LXRvLXJpZ2h0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXZpZGUoCiAgICAgICAgaW50ICRyb3VuZGluZ01vZGUsCiAgICAgICAgaW50ICRzY2FsZSwKICAgICAgICBOdW1iZXJJbnRlcmZhY2UgJGRpdmlkZW5kLAogICAgICAgIE51bWJlckludGVyZmFjZSAuLi4kZGl2aXNvcnMKICAgICk6IE51bWJlckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgdmFsdWUgZnJvbSBhbiBhcmJpdHJhcnkgYmFzZSB0byBhIGJhc2UtMTAgaW50ZWdlciB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0CiAgICAgKiBAcGFyYW0gaW50ICRiYXNlIFRoZSBiYXNlIHRvIGNvbnZlcnQgZnJvbSAoaS5lLiwgMiwgMTYsIDMyLCBldGMuKQogICAgICoKICAgICAqIEByZXR1cm4gSW50ZWdlck9iamVjdCBUaGUgYmFzZS0xMCBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBjb252ZXJ0ZWQgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21CYXNlKHN0cmluZyAkdmFsdWUsIGludCAkYmFzZSk6IEludGVnZXJPYmplY3Q7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIGJhc2UtMTAgaW50ZWdlciB2YWx1ZSB0byBhbiBhcmJpdHJhcnkgYmFzZQogICAgICoKICAgICAqIEBwYXJhbSBJbnRlZ2VyT2JqZWN0ICR2YWx1ZSBUaGUgaW50ZWdlciB2YWx1ZSB0byBjb252ZXJ0CiAgICAgKiBAcGFyYW0gaW50ICRiYXNlIFRoZSBiYXNlIHRvIGNvbnZlcnQgdG8gKGkuZS4sIDIsIDE2LCAzMiwgZXRjLikKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgdmFsdWUgcmVwcmVzZW50ZWQgaW4gdGhlIHNwZWNpZmllZCBiYXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0Jhc2UoSW50ZWdlck9iamVjdCAkdmFsdWUsIGludCAkYmFzZSk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGFuIEludGVnZXIgaW5zdGFuY2UgdG8gYSBIZXhhZGVjaW1hbCBpbnN0YW5jZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9IZXhhZGVjaW1hbChJbnRlZ2VyT2JqZWN0ICR2YWx1ZSk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBIZXhhZGVjaW1hbCBpbnN0YW5jZSB0byBhbiBJbnRlZ2VyIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoSGV4YWRlY2ltYWwgJHZhbHVlKTogSW50ZWdlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Math/RoundingMode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgcGFydCBvZiBicmljay9tYXRoCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IEJlbmphbWluIE1vcmVsCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAqIFNPRlRXQVJFLgogKgogKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYnJpY2svbWF0aCBicmljay9tYXRoIGF0IEdpdEh1YgogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE1hdGg7CgovKioKICogU3BlY2lmaWVzIGEgcm91bmRpbmcgYmVoYXZpb3IgZm9yIG51bWVyaWNhbCBvcGVyYXRpb25zIGNhcGFibGUgb2YgZGlzY2FyZGluZwogKiBwcmVjaXNpb24uCiAqCiAqIEVhY2ggcm91bmRpbmcgbW9kZSBpbmRpY2F0ZXMgaG93IHRoZSBsZWFzdCBzaWduaWZpY2FudCByZXR1cm5lZCBkaWdpdCBvZiBhCiAqIHJvdW5kZWQgcmVzdWx0IGlzIHRvIGJlIGNhbGN1bGF0ZWQuIElmIGZld2VyIGRpZ2l0cyBhcmUgcmV0dXJuZWQgdGhhbiB0aGUKICogZGlnaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGV4YWN0IG51bWVyaWNhbCByZXN1bHQsIHRoZSBkaXNjYXJkZWQgZGlnaXRzCiAqIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiByZWdhcmRsZXNzIHRoZSBkaWdpdHMnCiAqIGNvbnRyaWJ1dGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIGNvbnNpZGVyZWQgYXMgYQogKiBudW1lcmljYWwgdmFsdWUsIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gY291bGQgaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyCiAqIHRoYW4gb25lLgogKi8KZmluYWwgY2xhc3MgUm91bmRpbmdNb2RlCnsKICAgIC8qKgogICAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci4gVGhpcyBjbGFzcyBpcyBub3QgaW5zdGFudGlhYmxlLgogICAgICoKICAgICAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaGFzIGFuIGV4YWN0IHJlc3VsdCwgaGVuY2Ugbm8KICAgICAqIHJvdW5kaW5nIGlzIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVOTkVDRVNTQVJZID0gMDsKCiAgICAvKioKICAgICAqIFJvdW5kcyBhd2F5IGZyb20gemVyby4KICAgICAqCiAgICAgKiBBbHdheXMgaW5jcmVtZW50cyB0aGUgZGlnaXQgcHJpb3IgdG8gYSBub256ZXJvIGRpc2NhcmRlZCBmcmFjdGlvbi4KICAgICAqIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgZGVjcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YgdGhlCiAgICAgKiBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVAgPSAxOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgemVyby4KICAgICAqCiAgICAgKiBOZXZlciBpbmNyZW1lbnRzIHRoZSBkaWdpdCBwcmlvciB0byBhIGRpc2NhcmRlZCBmcmFjdGlvbiAoaS5lLiwKICAgICAqIHRydW5jYXRlcykuIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgaW5jcmVhc2VzIHRoZSBtYWduaXR1ZGUgb2YKICAgICAqIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRE9XTiA9IDI7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyBwb3NpdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBVUDsgaWYgbmVnYXRpdmUsIGJlaGF2ZXMgYXMgZm9yCiAgICAgKiBET1dOLiBOb3RlIHRoYXQgdGhpcyByb3VuZGluZyBtb2RlIG5ldmVyIGRlY3JlYXNlcyB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENFSUxJTkcgPSAzOwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgbmVnYXRpdmUgaW5maW5pdHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYmVoYXZlIGFzIGZvciBET1dOOyBpZiBuZWdhdGl2ZSwgYmVoYXZlIGFzIGZvcgogICAgICogVVAuIE5vdGUgdGhhdCB0aGlzIHJvdW5kaW5nIG1vZGUgbmV2ZXIgaW5jcmVhc2VzIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxPT1IgPSA0OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsCiAgICAgKiBpbiB3aGljaCBjYXNlIHJvdW5kIHVwLgogICAgICoKICAgICAqIEJlaGF2ZXMgYXMgZm9yIFVQIGlmIHRoZSBkaXNjYXJkZWQgZnJhY3Rpb24gaXMgPj0gMC41OyBvdGhlcndpc2UsIGJlaGF2ZXMKICAgICAqIGFzIGZvciBET1dOLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgcm91bmRpbmcgbW9kZSBjb21tb25seSB0YXVnaHQgYXQKICAgICAqIHNjaG9vbC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfVVAgPSA1OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgIm5lYXJlc3QgbmVpZ2hib3IiIHVubGVzcyBib3RoIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsCiAgICAgKiBpbiB3aGljaCBjYXNlIHJvdW5kIGRvd24uCiAgICAgKgogICAgICogQmVoYXZlcyBhcyBmb3IgVVAgaWYgdGhlIGRpc2NhcmRlZCBmcmFjdGlvbiBpcyA+IDAuNTsgb3RoZXJ3aXNlLCBiZWhhdmVzCiAgICAgKiBhcyBmb3IgRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRE9XTiA9IDY7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwKICAgICAqIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBwb3NpdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX1VQOyBpZiBuZWdhdGl2ZSwgYmVoYXZlcwogICAgICogYXMgZm9yIEhBTEZfRE9XTi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfQ0VJTElORyA9IDc7CgogICAgLyoqCiAgICAgKiBSb3VuZHMgdG93YXJkcyAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGggbmVpZ2hib3JzIGFyZSBlcXVpZGlzdGFudCwKICAgICAqIGluIHdoaWNoIGNhc2Ugcm91bmQgdG93YXJkcyBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlLCBiZWhhdmVzIGFzIGZvciBIQUxGX0RPV047IGlmIG5lZ2F0aXZlLCBiZWhhdmVzCiAgICAgKiBhcyBmb3IgSEFMRl9VUC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBTEZfRkxPT1IgPSA4OwoKICAgIC8qKgogICAgICogUm91bmRzIHRvd2FyZHMgdGhlICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMgYXJlCiAgICAgKiBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZHMgdG93YXJkcyB0aGUgZXZlbiBuZWlnaGJvci4KICAgICAqCiAgICAgKiBCZWhhdmVzIGFzIGZvciBIQUxGX1VQIGlmIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgZGlzY2FyZGVkIGZyYWN0aW9uCiAgICAgKiBpcyBvZGQ7IGJlaGF2ZXMgYXMgZm9yIEhBTEZfRE9XTiBpZiBpdCdzIGV2ZW4uCiAgICAgKgogICAgICogTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHJvdW5kaW5nIG1vZGUgdGhhdCBzdGF0aXN0aWNhbGx5IG1pbmltaXplcwogICAgICogY3VtdWxhdGl2ZSBlcnJvciB3aGVuIGFwcGxpZWQgcmVwZWF0ZWRseSBvdmVyIGEgc2VxdWVuY2Ugb2YgY2FsY3VsYXRpb25zLgogICAgICogSXQgaXMgc29tZXRpbWVzIGtub3duIGFzICJCYW5rZXIncyByb3VuZGluZyIsIGFuZCBpcyBjaGllZmx5IHVzZWQgaW4gdGhlCiAgICAgKiBVU0EuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQUxGX0VWRU4gPSA5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcU2VyaWFsaXphYmxlRmllbGRzVHJhaXQ7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVmFyaWFudFRyYWl0Owp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJsZW47CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIE5vbnN0YW5kYXJkIFVVSUQgZmllbGRzIGRvIG5vdCBjb25mb3JtIHRvIHRoZSBSRkMgNDEyMiBzdGFuZGFyZAogKgogKiBTaW5jZSBzb21lIHN5c3RlbXMgbWF5IGNyZWF0ZSBub25zdGFuZGFyZCBVVUlEcywgdGhpcyBpbXBsZW1lbnRzIHRoZQogKiBSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSwgc28gdGhhdCBmdW5jdGlvbmFsaXR5IG9mIGEgbm9uc3RhbmRhcmQgVVVJRCBpcyBub3QKICogZGVncmFkZWQsIGluIHRoZSBldmVudCB0aGVzZSBVVUlEcyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiBSRkMgNDEyMiBmaWVsZHMuCiAqCiAqIEludGVybmFsbHksIHRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZmllbGRzIHRvZ2V0aGVyIGFzIGEgMTYtYnl0ZSBiaW5hcnkKICogc3RyaW5nLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBGaWVsZHMgaW1wbGVtZW50cyBGaWVsZHNJbnRlcmZhY2UKewogICAgdXNlIFNlcmlhbGl6YWJsZUZpZWxkc1RyYWl0OwogICAgdXNlIFZhcmlhbnRUcmFpdDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGJ5dGVzOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgQSAxNi1ieXRlIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlECiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGlzIG5vdCBleGFjdGx5IDE2IGJ5dGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGJ5dGVzKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBiZSAxNiBieXRlcyBsb25nOyAnCiAgICAgICAgICAgICAgICAuICdyZWNlaXZlZCAnIC4gc3RybGVuKCRieXRlcykgLiAnIGJ5dGVzJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJ5dGVzID0gJGJ5dGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJ5dGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICRjbG9ja1NlcSA9IGhleGRlYyhiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDgsIDIpKSkgJiAweDNmZmY7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChkZWNoZXgoJGNsb2NrU2VxKSwgNCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFIaUFuZFJlc2VydmVkKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDgsIDEpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxTG93KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDksIDEpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgMTApKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVIaUFuZFZlcnNpb24oKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNiwgMikpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUxvdygpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAwLCA0KSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTWlkKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDQsIDIpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3ByaW50ZigKICAgICAgICAgICAgJyUwM3glMDRzJTA4cycsCiAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVNaWQoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKQogICAgICAgICkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOaWwoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/Uuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZCBhcyBCYXNlVXVpZDsKCi8qKgogKiBOb25zdGFuZGFyZFxVdWlkIGlzIGEgVVVJRCB0aGF0IGRvZXNuJ3QgY29uZm9ybSB0byBSRkMgNDEyMgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkIGV4dGVuZHMgQmFzZVV1aWQKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIEZpZWxkcyAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWVsZHMsICRudW1iZXJDb252ZXJ0ZXIsICRjb2RlYywgJHRpbWVDb252ZXJ0ZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIFJhbXNleVxVdWlkXEJ1aWxkZXJcVXVpZEJ1aWxkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxVbmFibGVUb0J1aWxkVXVpZEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBUaHJvd2FibGU7CgovKioKICogTm9uc3RhbmRhcmRcVXVpZEJ1aWxkZXIgYnVpbGRzIGluc3RhbmNlcyBvZiBOb25zdGFuZGFyZFxVdWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFV1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTm9uc3RhbmRhcmRcVXVpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIE5vbnN0YW5kYXJkXFV1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgaW5zdGFuY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWQgVGhlIE5vbnN0YW5kYXJkXFV1aWRCdWlsZGVyIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YKICAgICAqICAgICBOb25zdGFuZGFyZFxVdWlkCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkKENvZGVjSW50ZXJmYWNlICRjb2RlYywgc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gbmV3IFV1aWQoCiAgICAgICAgICAgICAgICAkdGhpcy0+YnVpbGRGaWVsZHMoJGJ5dGVzKSwKICAgICAgICAgICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAkY29kZWMsCiAgICAgICAgICAgICAgICAkdGhpcy0+dGltZUNvbnZlcnRlcgogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5hYmxlVG9CdWlsZFV1aWRFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb3h5IG1ldGhvZCB0byBhbGxvdyBpbmplY3RpbmcgYSBtb2NrLCBmb3IgdGVzdGluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRGaWVsZHMoc3RyaW5nICRieXRlcyk6IEZpZWxkcwogICAgewogICAgICAgIHJldHVybiBuZXcgRmllbGRzKCRieXRlcyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXE5vbnN0YW5kYXJkOwoKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb2RlY1xDb2RlY0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcVGltZUNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxEYXRlVGltZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxMYXp5XExhenlVdWlkRnJvbVN0cmluZzsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXFV1aWRWMTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdWJzdHI7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIE9yZGVyZWQtdGltZSwgb3IgdmVyc2lvbiA2LCBVVUlEcyBpbmNsdWRlIHRpbWVzdGFtcCwgY2xvY2sgc2VxdWVuY2UsIGFuZCBub2RlCiAqIHZhbHVlcyB0aGF0IGFyZSBjb21iaW5lZCBpbnRvIGEgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyCiAqCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkNi91dWlkNi1pZXRmLWRyYWZ0IFVVSUQgdmVyc2lvbiA2IElFVEYgZHJhZnQKICogQGxpbmsgaHR0cDovL2doLnBlYWJvZHkuaW8vdXVpZHY2LyAiVmVyc2lvbiA2IiBVVUlEcwogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjYgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDYgKHRpbWUtYmFzZWQpIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfUEVBQk9EWSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWNiBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gNiAob3JkZXJlZC10aW1lKSBVVUlEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBEYXRlVGltZUludGVyZmFjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0aW1lc3RhbXAgYXNzb2NpYXRlZAogICAgICogd2l0aCB0aGUgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUgQSBQSFAgRGF0ZVRpbWVJbW11dGFibGUgaW5zdGFuY2UgcmVwcmVzZW50aW5nCiAgICAgKiAgICAgdGhlIHRpbWVzdGFtcCBvZiBhIHZlcnNpb24gNiBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlVGltZSgpOiBEYXRlVGltZUludGVyZmFjZQogICAgewogICAgICAgICR0aW1lID0gJHRoaXMtPnRpbWVDb252ZXJ0ZXItPmNvbnZlcnRUaW1lKCR0aGlzLT5maWVsZHMtPmdldFRpbWVzdGFtcCgpKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZUltbXV0YWJsZSgKICAgICAgICAgICAgICAgICdAJwogICAgICAgICAgICAgICAgLiAkdGltZS0+Z2V0U2Vjb25kcygpLT50b1N0cmluZygpCiAgICAgICAgICAgICAgICAuICcuJwogICAgICAgICAgICAgICAgLiBzdHJfcGFkKCR0aW1lLT5nZXRNaWNyb3NlY29uZHMoKS0+dG9TdHJpbmcoKSwgNiwgJzAnLCBTVFJfUEFEX0xFRlQpCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEYXRlVGltZUV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAoaW50KSAkZS0+Z2V0Q29kZSgpLCAkZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhpcyBVVUlEIGludG8gYW4gaW5zdGFuY2Ugb2YgYSB2ZXJzaW9uIDEgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9VdWlkVjEoKTogVXVpZFYxCiAgICB7CiAgICAgICAgJGhleCA9ICR0aGlzLT5nZXRIZXgoKS0+dG9TdHJpbmcoKTsKICAgICAgICAkaGV4ID0gc3Vic3RyKCRoZXgsIDcsIDUpCiAgICAgICAgICAgIC4gc3Vic3RyKCRoZXgsIDEzLCAzKQogICAgICAgICAgICAuIHN1YnN0cigkaGV4LCAzLCA0KQogICAgICAgICAgICAuICcxJyAuIHN1YnN0cigkaGV4LCAwLCAzKQogICAgICAgICAgICAuIHN1YnN0cigkaGV4LCAxNik7CgogICAgICAgIC8qKiBAdmFyIExhenlVdWlkRnJvbVN0cmluZyAkdXVpZCAqLwogICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbUJ5dGVzKChzdHJpbmcpIGhleDJiaW4oJGhleCkpOwoKICAgICAgICByZXR1cm4gJHV1aWQtPnRvVXVpZFYxKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIHZlcnNpb24gMSBVVUlEIGludG8gYW4gaW5zdGFuY2Ugb2YgYSB2ZXJzaW9uIDYgVVVJRAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21VdWlkVjEoVXVpZFYxICR1dWlkVjEpOiBVdWlkVjYKICAgIHsKICAgICAgICAkaGV4ID0gJHV1aWRWMS0+Z2V0SGV4KCktPnRvU3RyaW5nKCk7CiAgICAgICAgJGhleCA9IHN1YnN0cigkaGV4LCAxMywgMykKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgOCwgNCkKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgMCwgNSkKICAgICAgICAgICAgLiAnNicgLiBzdWJzdHIoJGhleCwgNSwgMykKICAgICAgICAgICAgLiBzdWJzdHIoJGhleCwgMTYpOwoKICAgICAgICAvKiogQHZhciBMYXp5VXVpZEZyb21TdHJpbmcgJHV1aWQgKi8KICAgICAgICAkdXVpZCA9IFV1aWQ6OmZyb21CeXRlcygoc3RyaW5nKSBoZXgyYmluKCRoZXgpKTsKCiAgICAgICAgcmV0dXJuICR1dWlkLT50b1V1aWRWNigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Dce/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXERjZTsKCnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cRGNlU2VjdXJpdHlFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7Cgp1c2UgZnVuY3Rpb24gZXNjYXBlc2hlbGxhcmc7CnVzZSBmdW5jdGlvbiBwcmVnX3NwbGl0Owp1c2UgZnVuY3Rpb24gc3RyX2dldGNzdjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnJwb3M7CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3RydG91cHBlcjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHRyaW07Cgp1c2UgY29uc3QgUFJFR19TUExJVF9OT19FTVBUWTsKCi8qKgogKiBTeXN0ZW1EY2VTZWN1cml0eVByb3ZpZGVyIHJldHJpZXZlcyB0aGUgdXNlciBvciBncm91cCBpZGVudGlmaWVycyBmcm9tIHRoZSBzeXN0ZW0KICovCmNsYXNzIFN5c3RlbURjZVNlY3VyaXR5UHJvdmlkZXIgaW1wbGVtZW50cyBEY2VTZWN1cml0eVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHRocm93cyBEY2VTZWN1cml0eUV4Y2VwdGlvbiBpZiB1bmFibGUgdG8gZ2V0IGEgdXNlciBpZGVudGlmaWVyCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVpZCgpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgc3RhdGljICR1aWQgPSBudWxsOwoKICAgICAgICBpZiAoJHVpZCBpbnN0YW5jZW9mIEludGVnZXJPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR1aWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHVpZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdWlkID0gJHRoaXMtPmdldFN5c3RlbVVpZCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR1aWQgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZ2V0IGEgdXNlciBpZGVudGlmaWVyIHVzaW5nIHRoZSBzeXN0ZW0gRENFICcKICAgICAgICAgICAgICAgIC4gJ1NlY3VyaXR5IHByb3ZpZGVyOyBwbGVhc2UgcHJvdmlkZSBhIGN1c3RvbSBpZGVudGlmaWVyIG9yICcKICAgICAgICAgICAgICAgIC4gJ3VzZSBhIGRpZmZlcmVudCBwcm92aWRlcicKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR1aWQgPSBuZXcgSW50ZWdlck9iamVjdCgkdWlkKTsKCiAgICAgICAgcmV0dXJuICR1aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIERjZVNlY3VyaXR5RXhjZXB0aW9uIGlmIHVuYWJsZSB0byBnZXQgYSBncm91cCBpZGVudGlmaWVyCiAgICAgKgogICAgICogQGluaGVyaXREb2MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdpZCgpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgc3RhdGljICRnaWQgPSBudWxsOwoKICAgICAgICBpZiAoJGdpZCBpbnN0YW5jZW9mIEludGVnZXJPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICRnaWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGdpZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkZ2lkID0gJHRoaXMtPmdldFN5c3RlbUdpZCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRnaWQgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEY2VTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZ2V0IGEgZ3JvdXAgaWRlbnRpZmllciB1c2luZyB0aGUgc3lzdGVtIERDRSAnCiAgICAgICAgICAgICAgICAuICdTZWN1cml0eSBwcm92aWRlcjsgcGxlYXNlIHByb3ZpZGUgYSBjdXN0b20gaWRlbnRpZmllciBvciAnCiAgICAgICAgICAgICAgICAuICd1c2UgYSBkaWZmZXJlbnQgcHJvdmlkZXInCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkZ2lkID0gbmV3IEludGVnZXJPYmplY3QoJGdpZCk7CgogICAgICAgIHJldHVybiAkZ2lkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVUlEIGZyb20gdGhlIHN5c3RlbQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFN5c3RlbVVpZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5oYXNTaGVsbEV4ZWMoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5nZXRPcygpKSB7CiAgICAgICAgICAgIGNhc2UgJ1dJTic6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldFdpbmRvd3NVaWQoKTsKICAgICAgICAgICAgY2FzZSAnREFSJzoKICAgICAgICAgICAgY2FzZSAnRlJFJzoKICAgICAgICAgICAgY2FzZSAnTElOJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiB0cmltKChzdHJpbmcpIHNoZWxsX2V4ZWMoJ2lkIC11JykpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEdJRCBmcm9tIHRoZSBzeXN0ZW0KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTeXN0ZW1HaWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+aGFzU2hlbGxFeGVjKCkpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgc3dpdGNoICgkdGhpcy0+Z2V0T3MoKSkgewogICAgICAgICAgICBjYXNlICdXSU4nOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRXaW5kb3dzR2lkKCk7CiAgICAgICAgICAgIGNhc2UgJ0RBUic6CiAgICAgICAgICAgIGNhc2UgJ0ZSRSc6CiAgICAgICAgICAgIGNhc2UgJ0xJTic6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gdHJpbSgoc3RyaW5nKSBzaGVsbF9leGVjKCdpZCAtZycpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgc2hlbGxfZXhlYygpIGlzIGF2YWlsYWJsZSBmb3IgdXNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaGFzU2hlbGxFeGVjKCk6IGJvb2wKICAgIHsKICAgICAgICAkZGlzYWJsZWRGdW5jdGlvbnMgPSBzdHJ0b2xvd2VyKChzdHJpbmcpIGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpOwoKICAgICAgICByZXR1cm4gc3RycG9zKCRkaXNhYmxlZEZ1bmN0aW9ucywgJ3NoZWxsX2V4ZWMnKSA9PT0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBQSFBfT1Mgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0T3MoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoc3Vic3RyKGNvbnN0YW50KCdQSFBfT1MnKSwgMCwgMykpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdXNlciBpZGVudGlmaWVyIGZvciBhIHVzZXIgb24gYSBXaW5kb3dzIHN5c3RlbQogICAgICoKICAgICAqIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFuIGVmZmVjdGl2ZSBQT1NJWCBVSUQgZm9yIHRoZQogICAgICogcnVubmluZyBzY3JpcHQuIEluc3RlYWQsIGVhY2ggdXNlciBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IGFuIFNJRAogICAgICogKHNlY3VyaXR5IGlkZW50aWZpZXIpLiBUaGUgU0lEIGluY2x1ZGVzIHRocmVlIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycwogICAgICogdGhhdCBtYWtlIHVwIGEgdW5pcXVlIGRvbWFpbiBpZGVudGlmaWVyLCBmb2xsb3dlZCBieSBhbiBSSUQgKHJlbGF0aXZlCiAgICAgKiBpZGVudGlmaWVyKSB0aGF0IHdlIHdpbGwgdXNlIGFzIHRoZSBVSUQuIFRoZSBwcmltYXJ5IGNhdmVhdCBpcyB0aGF0IHRoaXMKICAgICAqIFVJRCBtYXkgbm90IGJlIHVuaXF1ZSB0byB0aGUgc3lzdGVtLCBzaW5jZSBpdCBpcywgaW5zdGVhZCwgdW5pcXVlIHRvIHRoZQogICAgICogZG9tYWluLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmxpZmV3aXJlLmNvbS93aGF0LWlzLWFuLXNpZC1udW1iZXItMjYyNjAwNSBXaGF0IElzIGFuIFNJRCBOdW1iZXI/CiAgICAgKiBAbGluayBodHRwczovL2JpdC5seS8zMHZFN05NIFdlbGwta25vd24gU0lEIFN0cnVjdHVyZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vYml0Lmx5LzJGV2NZS0ogV2VsbC1rbm93biBzZWN1cml0eSBpZGVudGlmaWVycyBpbiBXaW5kb3dzIG9wZXJhdGluZyBzeXN0ZW1zCiAgICAgKiBAbGluayBodHRwczovL3d3dy53aW5kb3dzLWNvbW1hbmRsaW5lLmNvbS9nZXQtc2lkLW9mLXVzZXIvIEdldCBTSUQgb2YgdXNlcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFdpbmRvd3NVaWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3BvbnNlID0gc2hlbGxfZXhlYygnd2hvYW1pIC91c2VyIC9mbyBjc3YgL25oJyk7CgogICAgICAgIGlmICgkcmVzcG9uc2UgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJHNpZCA9IHN0cl9nZXRjc3YodHJpbSgoc3RyaW5nKSAkcmVzcG9uc2UpKVsxXSA/PyAnJzsKCiAgICAgICAgaWYgKCgkbGFzdEh5cGhlbiA9IHN0cnJwb3MoJHNpZCwgJy0nKSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cmltKHN1YnN0cigkc2lkLCAkbGFzdEh5cGhlbiArIDEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyIGZvciBhIHVzZXIgb24gYSBXaW5kb3dzIHN5c3RlbQogICAgICoKICAgICAqIFNpbmNlIFdpbmRvd3MgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFuIGVmZmVjdGl2ZSBQT1NJWCBHSUQKICAgICAqIGZvciB0aGUgcnVubmluZyBzY3JpcHQsIHdlIHdpbGwgZ2V0IHRoZSBsb2NhbCBncm91cCBtZW1iZXJzaGlwcyBmb3IgdGhlCiAgICAgKiB1c2VyIHJ1bm5pbmcgdGhlIHNjcmlwdC4gVGhlbiwgd2Ugd2lsbCBnZXQgdGhlIFNJRCAoc2VjdXJpdHkgaWRlbnRpZmllcikKICAgICAqIGZvciB0aGUgZmlyc3QgZ3JvdXAgdGhhdCBhcHBlYXJzIGluIHRoYXQgbGlzdC4gRmluYWxseSwgd2Ugd2lsbCByZXR1cm4KICAgICAqIHRoZSBSSUQgKHJlbGF0aXZlIGlkZW50aWZpZXIpIGZvciB0aGUgZ3JvdXAgYW5kIHVzZSB0aGF0IGFzIHRoZSBHSUQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cud2luZG93cy1jb21tYW5kbGluZS5jb20vbGlzdC1vZi11c2VyLWdyb3Vwcy1jb21tYW5kLWxpbmUvIExpc3Qgb2YgdXNlciBncm91cHMgY29tbWFuZCBsaW5lCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0V2luZG93c0dpZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzcG9uc2UgPSBzaGVsbF9leGVjKCduZXQgdXNlciAldXNlcm5hbWUlIHwgZmluZHN0ciAvYiAvaSAiTG9jYWwgR3JvdXAgTWVtYmVyc2hpcHMiJyk7CgogICAgICAgIGlmICgkcmVzcG9uc2UgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nW10gJHVzZXJHcm91cHMgKi8KICAgICAgICAkdXNlckdyb3VwcyA9IHByZWdfc3BsaXQoJy9cc3syLH0vJywgKHN0cmluZykgJHJlc3BvbnNlLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgogICAgICAgICRmaXJzdEdyb3VwID0gdHJpbSgkdXNlckdyb3Vwc1sxXSA/PyAnJywgIiogXHRcblxyXDBceDBCIik7CgogICAgICAgIGlmICgkZmlyc3RHcm91cCA9PT0gJycpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJHJlc3BvbnNlID0gc2hlbGxfZXhlYygnd21pYyBncm91cCBnZXQgbmFtZSxzaWQgfCBmaW5kc3RyIC9iIC9pICcgLiBlc2NhcGVzaGVsbGFyZygkZmlyc3RHcm91cCkpOwoKICAgICAgICBpZiAoJHJlc3BvbnNlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZ1tdICR1c2VyR3JvdXAgKi8KICAgICAgICAkdXNlckdyb3VwID0gcHJlZ19zcGxpdCgnL1xzezIsfS8nLCAoc3RyaW5nKSAkcmVzcG9uc2UsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKTsKCiAgICAgICAgJHNpZCA9ICR1c2VyR3JvdXBbMV0gPz8gJyc7CgogICAgICAgIGlmICgoJGxhc3RIeXBoZW4gPSBzdHJycG9zKCRzaWQsICctJykpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJpbSgoc3RyaW5nKSBzdWJzdHIoJHNpZCwgJGxhc3RIeXBoZW4gKyAxKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcVXVpZFYyOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CgovKioKICogQSBEQ0UgcHJvdmlkZXIgcHJvdmlkZXMgYWNjZXNzIHRvIGxvY2FsIGRvbWFpbiBpZGVudGlmaWVycyBmb3IgdmVyc2lvbiAyLAogKiBEQ0UgU2VjdXJpdHksIFVVSURzCiAqCiAqIEBzZWUgVXVpZFYyCiAqLwppbnRlcmZhY2UgRGNlU2VjdXJpdHlQcm92aWRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgYSB1c2VyIGlkZW50aWZpZXIgZm9yIHRoZSBzeXN0ZW0KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vc2VyX2lkZW50aWZpZXIgVXNlciBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVaWQoKTogSW50ZWdlck9iamVjdDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyIGZvciB0aGUgc3lzdGVtCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JvdXBfaWRlbnRpZmllciBHcm91cCBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHaWQoKTogSW50ZWdlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXE5vZGVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKLyoqCiAqIEZhbGxiYWNrTm9kZVByb3ZpZGVyIHJldHJpZXZlcyB0aGUgc3lzdGVtIG5vZGUgSUQgYnkgc3RlcHBpbmcgdGhyb3VnaCBhIGxpc3QKICogb2YgcHJvdmlkZXJzIHVudGlsIGEgbm9kZSBJRCBjYW4gYmUgb2J0YWluZWQKICovCmNsYXNzIEZhbGxiYWNrTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBOb2RlUHJvdmlkZXJDb2xsZWN0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgJG5vZGVQcm92aWRlcnM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gTm9kZVByb3ZpZGVyQ29sbGVjdGlvbiAkcHJvdmlkZXJzIEFycmF5IG9mIG5vZGUgcHJvdmlkZXJzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChOb2RlUHJvdmlkZXJDb2xsZWN0aW9uICRwcm92aWRlcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlcnMgPSAkcHJvdmlkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGxhc3RQcm92aWRlckV4Y2VwdGlvbiA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5ub2RlUHJvdmlkZXJzIGFzICRwcm92aWRlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuICRwcm92aWRlci0+Z2V0Tm9kZSgpOwogICAgICAgICAgICB9IGNhdGNoIChOb2RlRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICRsYXN0UHJvdmlkZXJFeGNlcHRpb24gPSAkZXhjZXB0aW9uOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgTm9kZUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgbm9kZSBwcm92aWRlcicsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICRsYXN0UHJvdmlkZXJFeGNlcHRpb24KICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XENvbGxlY3Rpb25cQWJzdHJhY3RDb2xsZWN0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcTm9kZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCi8qKgogKiBBIGNvbGxlY3Rpb24gb2YgTm9kZVByb3ZpZGVySW50ZXJmYWNlIG9iamVjdHMKICoKICogQGV4dGVuZHMgQWJzdHJhY3RDb2xsZWN0aW9uPE5vZGVQcm92aWRlckludGVyZmFjZT4KICovCmNsYXNzIE5vZGVQcm92aWRlckNvbGxlY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIE5vZGVQcm92aWRlckludGVyZmFjZTo6Y2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZS1jb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSBpdHMgc2VyaWFsaXplZCBmb3JtCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZCBUaGUgc2VyaWFsaXplZCBQSFAgc3RyaW5nIHRvIHVuc2VyaWFsaXplIGludG8KICAgICAqICAgICBhIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGhwY3NTdXBwcmVzcyBTbGV2b21hdENvZGluZ1N0YW5kYXJkLlR5cGVIaW50cy5QYXJhbWV0ZXJUeXBlSGludC5NaXNzaW5nTmF0aXZlVHlwZUhpbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBSZWR1bmRhbnRDb25kaXRpb25HaXZlbkRvY2Jsb2NrVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8YXJyYXkta2V5LCBOb2RlUHJvdmlkZXJJbnRlcmZhY2U+ICRkYXRhICovCiAgICAgICAgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCwgWwogICAgICAgICAgICAnYWxsb3dlZF9jbGFzc2VzJyA9PiBbCiAgICAgICAgICAgICAgICBIZXhhZGVjaW1hbDo6Y2xhc3MsCiAgICAgICAgICAgICAgICBSYW5kb21Ob2RlUHJvdmlkZXI6OmNsYXNzLAogICAgICAgICAgICAgICAgU3RhdGljTm9kZVByb3ZpZGVyOjpjbGFzcywKICAgICAgICAgICAgICAgIFN5c3RlbU5vZGVQcm92aWRlcjo6Y2xhc3MsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfZmlsdGVyKAogICAgICAgICAgICAkZGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKCR1bnNlcmlhbGl6ZWQpOiBib29sIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdW5zZXJpYWxpemVkIGluc3RhbmNlb2YgTm9kZVByb3ZpZGVySW50ZXJmYWNlOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFJhbmRvbVNvdXJjZUV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gYmluMmhleDsKdXNlIGZ1bmN0aW9uIGRlY2hleDsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBmdW5jdGlvbiBoZXhkZWM7CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBSYW5kb21Ob2RlUHJvdmlkZXIgZ2VuZXJhdGVzIGEgcmFuZG9tIG5vZGUgSUQKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuNSBSRkMgNDEyMiwgwqcgNC41OiBOb2RlIElEcyB0aGF0IERvIE5vdCBJZGVudGlmeSB0aGUgSG9zdAogKi8KY2xhc3MgUmFuZG9tTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5vZGVCeXRlcyA9IHJhbmRvbV9ieXRlcyg2KTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGV4Y2VwdGlvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZG9tU291cmNlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbi0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgKGludCkgJGV4Y2VwdGlvbi0+Z2V0Q29kZSgpLAogICAgICAgICAgICAgICAgJGV4Y2VwdGlvbgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUgYnl0ZXMgZm9yIG1hdGggb24gMzItYml0IHN5c3RlbXMuCiAgICAgICAgJG5vZGVNc2IgPSBzdWJzdHIoJG5vZGVCeXRlcywgMCwgMyk7CiAgICAgICAgJG5vZGVMc2IgPSBzdWJzdHIoJG5vZGVCeXRlcywgMyk7CgogICAgICAgIC8vIFNldCB0aGUgbXVsdGljYXN0IGJpdDsgc2VlIFJGQyA0MTIyLCBzZWN0aW9uIDQuNS4KICAgICAgICAkbm9kZU1zYiA9IGhleDJiaW4oCiAgICAgICAgICAgIHN0cl9wYWQoCiAgICAgICAgICAgICAgICBkZWNoZXgoaGV4ZGVjKGJpbjJoZXgoJG5vZGVNc2IpKSB8IDB4MDEwMDAwKSwKICAgICAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAgICAnMCcsCiAgICAgICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgIC8vIFJlY29tYmluZSB0aGUgbm9kZSBieXRlcy4KICAgICAgICAkbm9kZSA9ICRub2RlTXNiIC4gJG5vZGVMc2I7CgogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoc3RyX3BhZChiaW4yaGV4KCRub2RlKSwgMTIsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7Cgp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogU3RhdGljTm9kZVByb3ZpZGVyIHByb3ZpZGVzIGEgc3RhdGljIG5vZGUgdmFsdWUgd2l0aCB0aGUgbXVsdGljYXN0IGJpdCBzZXQKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuNSBSRkMgNDEyMiwgwqcgNC41OiBOb2RlIElEcyB0aGF0IERvIE5vdCBJZGVudGlmeSB0aGUgSG9zdAogKi8KY2xhc3MgU3RhdGljTm9kZVByb3ZpZGVyIGltcGxlbWVudHMgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBIZXhhZGVjaW1hbAogICAgICovCiAgICBwcml2YXRlICRub2RlOwoKICAgIC8qKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsICRub2RlIFRoZSBzdGF0aWMgbm9kZSB2YWx1ZSB0byB1c2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEhleGFkZWNpbWFsICRub2RlKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJG5vZGUtPnRvU3RyaW5nKCkpID4gMTIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdTdGF0aWMgbm9kZSB2YWx1ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDEyIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bm9kZSA9ICR0aGlzLT5zZXRNdWx0aWNhc3RCaXQoJG5vZGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub2RlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtdWx0aWNhc3QgYml0IGZvciB0aGUgc3RhdGljIG5vZGUgdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRNdWx0aWNhc3RCaXQoSGV4YWRlY2ltYWwgJG5vZGUpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgICRub2RlSGV4ID0gc3RyX3BhZCgkbm9kZS0+dG9TdHJpbmcoKSwgMTIsICcwJywgU1RSX1BBRF9MRUZUKTsKICAgICAgICAkZmlyc3RPY3RldCA9IHN1YnN0cigkbm9kZUhleCwgMCwgMik7CgogICAgICAgICRmaXJzdE9jdGV0ID0gc3RyX3BhZCgKICAgICAgICAgICAgZGVjaGV4KGhleGRlYygkZmlyc3RPY3RldCkgfCAweDAxKSwKICAgICAgICAgICAgMiwKICAgICAgICAgICAgJzAnLAogICAgICAgICAgICBTVFJfUEFEX0xFRlQKICAgICAgICApOwoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCRmaXJzdE9jdGV0IC4gc3Vic3RyKCRub2RlSGV4LCAyKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXE5vZGVFeGNlcHRpb247CnVzZSBSYW1zZXlcVXVpZFxQcm92aWRlclxOb2RlUHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2ZpbHRlcjsKdXNlIGZ1bmN0aW9uIGFycmF5X21hcDsKdXNlIGZ1bmN0aW9uIGFycmF5X3dhbGs7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIG9iX2dldF9jbGVhbjsKdXNlIGZ1bmN0aW9uIG9iX3N0YXJ0Owp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2hfYWxsOwp1c2UgZnVuY3Rpb24gcmVzZXQ7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdHJ0b3VwcGVyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwoKdXNlIGNvbnN0IEdMT0JfTk9TT1JUOwp1c2UgY29uc3QgUFJFR19QQVRURVJOX09SREVSOwoKLyoqCiAqIFN5c3RlbU5vZGVQcm92aWRlciByZXRyaWV2ZXMgdGhlIHN5c3RlbSBub2RlIElELCBpZiBwb3NzaWJsZQogKgogKiBUaGUgc3lzdGVtIG5vZGUgSUQsIG9yIGhvc3QgSUQsIGlzIG9mdGVuIHRoZSBzYW1lIGFzIHRoZSBNQUMgYWRkcmVzcyBmb3IgYQogKiBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgaG9zdC4KICovCmNsYXNzIFN5c3RlbU5vZGVQcm92aWRlciBpbXBsZW1lbnRzIE5vZGVQcm92aWRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFBhdHRlcm4gdG8gbWF0Y2ggbm9kZXMgaW4gaWZjb25maWcgYW5kIGlwY29uZmlnIG91dHB1dC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBJRkNPTkZJR19QQVRURVJOID0gJy9bXjpdKFswLTlhLWZdezJ9KFs6LV0pWzAtOWEtZl17Mn0oXDJbMC05YS1mXXsyfSl7NH0pW146XS9pJzsKCiAgICAvKioKICAgICAqIFBhdHRlcm4gdG8gbWF0Y2ggbm9kZXMgaW4gc3lzZnMgc3RyZWFtIG91dHB1dC4KICAgICAqLwogICAgcHJpdmF0ZSBjb25zdCBTWVNGU19QQVRURVJOID0gJy9eKFswLTlhLWZdezJ9Oil7NX1bMC05YS1mXXsyfSQvaSc7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICAkbm9kZSA9ICR0aGlzLT5nZXROb2RlRnJvbVN5c3RlbSgpOwoKICAgICAgICBpZiAoJG5vZGUgPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOb2RlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBmZXRjaCBhIG5vZGUgZm9yIHRoaXMgc3lzdGVtJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbCgkbm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzeXN0ZW0gbm9kZSwgaWYgaXQgY2FuIGZpbmQgaXQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE5vZGVGcm9tU3lzdGVtKCk6IHN0cmluZwogICAgewogICAgICAgIHN0YXRpYyAkbm9kZSA9IG51bGw7CgogICAgICAgIGlmICgkbm9kZSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJG5vZGU7CiAgICAgICAgfQoKICAgICAgICAvLyBGaXJzdCwgdHJ5IGEgTGludXgtc3BlY2lmaWMgYXBwcm9hY2guCiAgICAgICAgJG5vZGUgPSAkdGhpcy0+Z2V0U3lzZnMoKTsKCiAgICAgICAgaWYgKCRub2RlID09PSAnJykgewogICAgICAgICAgICAvLyBTZWFyY2ggaWZjb25maWcgb3V0cHV0IGZvciBNQUMgYWRkcmVzc2VzICYgcmV0dXJuIHRoZSBmaXJzdCBvbmUuCiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPmdldElmY29uZmlnKCk7CiAgICAgICAgfQoKICAgICAgICAkbm9kZSA9IHN0cl9yZXBsYWNlKFsnOicsICctJ10sICcnLCAkbm9kZSk7CgogICAgICAgIHJldHVybiAkbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzeXN0ZW0KICAgICAqCiAgICAgKiBAY29kZUNvdmVyYWdlSWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRJZmNvbmZpZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGlzYWJsZWRGdW5jdGlvbnMgPSBzdHJ0b2xvd2VyKChzdHJpbmcpIGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpOwoKICAgICAgICBpZiAoc3RycG9zKCRkaXNhYmxlZEZ1bmN0aW9ucywgJ3Bhc3N0aHJ1JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgc3dpdGNoIChzdHJ0b3VwcGVyKHN1YnN0cihjb25zdGFudCgnUEhQX09TJyksIDAsIDMpKSkgewogICAgICAgICAgICBjYXNlICdXSU4nOgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ2lwY29uZmlnIC9hbGwgMj4mMScpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdEQVInOgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ2lmY29uZmlnIDI+JjEnKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnRlJFJzoKICAgICAgICAgICAgICAgIHBhc3N0aHJ1KCduZXRzdGF0IC1pIC1mIGxpbmsgMj4mMScpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdMSU4nOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcGFzc3RocnUoJ25ldHN0YXQgLWllIDI+JjEnKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgICRpZmNvbmZpZyA9IChzdHJpbmcpIG9iX2dldF9jbGVhbigpOwoKICAgICAgICAkbm9kZSA9ICcnOwogICAgICAgIGlmIChwcmVnX21hdGNoX2FsbChzZWxmOjpJRkNPTkZJR19QQVRURVJOLCAkaWZjb25maWcsICRtYXRjaGVzLCBQUkVHX1BBVFRFUk5fT1JERVIpKSB7CiAgICAgICAgICAgICRub2RlID0gJG1hdGNoZXNbMV1bMF0gPz8gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIE1BQyBhZGRyZXNzIGZyb20gdGhlIGZpcnN0IHN5c3RlbSBpbnRlcmZhY2UgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFN5c2ZzKCk6IHN0cmluZwogICAgewogICAgICAgICRtYWMgPSAnJzsKCiAgICAgICAgaWYgKHN0cnRvdXBwZXIoY29uc3RhbnQoJ1BIUF9PUycpKSA9PT0gJ0xJTlVYJykgewogICAgICAgICAgICAkYWRkcmVzc1BhdGhzID0gZ2xvYignL3N5cy9jbGFzcy9uZXQvKi9hZGRyZXNzJywgR0xPQl9OT1NPUlQpOwoKICAgICAgICAgICAgaWYgKCRhZGRyZXNzUGF0aHMgPT09IGZhbHNlIHx8IGNvdW50KCRhZGRyZXNzUGF0aHMpID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRtYWNzID0gW107CgogICAgICAgICAgICBhcnJheV93YWxrKCRhZGRyZXNzUGF0aHMsIGZ1bmN0aW9uIChzdHJpbmcgJGFkZHJlc3NQYXRoKSB1c2UgKCYkbWFjcyk6IHZvaWQgewogICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRhZGRyZXNzUGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAkbWFjc1tdID0gZmlsZV9nZXRfY29udGVudHMoJGFkZHJlc3NQYXRoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkbWFjcyA9IGFycmF5X21hcCgndHJpbScsICRtYWNzKTsKCiAgICAgICAgICAgIC8vIFJlbW92ZSBpbnZhbGlkIGVudHJpZXMuCiAgICAgICAgICAgICRtYWNzID0gYXJyYXlfZmlsdGVyKCRtYWNzLCBmdW5jdGlvbiAoc3RyaW5nICRhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGFkZHJlc3MgIT09ICcwMDowMDowMDowMDowMDowMCcKICAgICAgICAgICAgICAgICAgICAmJiBwcmVnX21hdGNoKHNlbGY6OlNZU0ZTX1BBVFRFUk4sICRhZGRyZXNzKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkbWFjID0gcmVzZXQoJG1hY3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHJpbmcpICRtYWM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CgovKioKICogQSBub2RlIHByb3ZpZGVyIHJldHJpZXZlcyBvciBnZW5lcmF0ZXMgYSBub2RlIElECiAqLwppbnRlcmZhY2UgTm9kZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5vZGUgSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIEhleGFkZWNpbWFsIFRoZSBub2RlIElEIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlKCk6IEhleGFkZWNpbWFsOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWU7Cgp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7CgovKioKICogRml4ZWRUaW1lUHJvdmlkZXIgdXNlcyBhbiBrbm93biB0aW1lIHRvIHByb3ZpZGUgdGhlIHRpbWUKICoKICogVGhpcyBwcm92aWRlciBhbGxvd3MgdGhlIHVzZSBvZiBhIHByZXZpb3VzbHktZ2VuZXJhdGVkLCBvciBrbm93biwgdGltZQogKiB3aGVuIGdlbmVyYXRpbmcgdGltZS1iYXNlZCBVVUlEcy4KICovCmNsYXNzIEZpeGVkVGltZVByb3ZpZGVyIGltcGxlbWVudHMgVGltZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBUaW1lCiAgICAgKi8KICAgIHByaXZhdGUgJGZpeGVkVGltZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoVGltZSAkdGltZSkKICAgIHsKICAgICAgICAkdGhpcy0+Zml4ZWRUaW1lID0gJHRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBgdXNlY2AgY29tcG9uZW50IG9mIHRoZSB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmd8SW50ZWdlck9iamVjdCAkdmFsdWUgVGhlIGB1c2VjYCB2YWx1ZSB0byBzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFVzZWMoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5maXhlZFRpbWUgPSBuZXcgVGltZSgkdGhpcy0+Zml4ZWRUaW1lLT5nZXRTZWNvbmRzKCksICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBgc2VjYCBjb21wb25lbnQgb2YgdGhlIHRpbWUKICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZ3xJbnRlZ2VyT2JqZWN0ICR2YWx1ZSBUaGUgYHNlY2AgdmFsdWUgdG8gc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTZWMoJHZhbHVlKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5maXhlZFRpbWUgPSBuZXcgVGltZSgkdmFsdWUsICR0aGlzLT5maXhlZFRpbWUtPmdldE1pY3Jvc2Vjb25kcygpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZSgpOiBUaW1lCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maXhlZFRpbWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWU7Cgp1c2UgUmFtc2V5XFV1aWRcUHJvdmlkZXJcVGltZVByb3ZpZGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxUaW1lOwoKdXNlIGZ1bmN0aW9uIGdldHRpbWVvZmRheTsKCi8qKgogKiBTeXN0ZW1UaW1lUHJvdmlkZXIgcmV0cmlldmVzIHRoZSBjdXJyZW50IHRpbWUgdXNpbmcgYnVpbHQtaW4gUEhQIGZ1bmN0aW9ucwogKi8KY2xhc3MgU3lzdGVtVGltZVByb3ZpZGVyIGltcGxlbWVudHMgVGltZVByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lKCk6IFRpbWUKICAgIHsKICAgICAgICAkdGltZSA9IGdldHRpbWVvZmRheSgpOwoKICAgICAgICByZXR1cm4gbmV3IFRpbWUoJHRpbWVbJ3NlYyddLCAkdGltZVsndXNlYyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFByb3ZpZGVyOwoKdXNlIFJhbXNleVxVdWlkXFR5cGVcVGltZTsKCi8qKgogKiBBIHRpbWUgcHJvdmlkZXIgcmV0cmlldmVzIHRoZSBjdXJyZW50IHRpbWUKICovCmludGVyZmFjZSBUaW1lUHJvdmlkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGltZSBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWUoKTogVGltZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/Fields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXEZpZWxkc1xTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSGV4YWRlY2ltYWw7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKdXNlIGZ1bmN0aW9uIGJpbjJoZXg7CnVzZSBmdW5jdGlvbiBkZWNoZXg7CnVzZSBmdW5jdGlvbiBoZXhkZWM7CnVzZSBmdW5jdGlvbiBzcHJpbnRmOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHVucGFjazsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogUkZDIDQxMjIgdmFyaWFudCBVVUlEcyBhcmUgY29tcHJpc2VkIG9mIGEgc2V0IG9mIG5hbWVkIGZpZWxkcwogKgogKiBJbnRlcm5hbGx5LCB0aGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGZpZWxkcyB0b2dldGhlciBhcyBhIDE2LWJ5dGUgYmluYXJ5CiAqIHN0cmluZy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgRmllbGRzIGltcGxlbWVudHMgRmllbGRzSW50ZXJmYWNlCnsKICAgIHVzZSBOaWxUcmFpdDsKICAgIHVzZSBTZXJpYWxpemFibGVGaWVsZHNUcmFpdDsKICAgIHVzZSBWYXJpYW50VHJhaXQ7CiAgICB1c2UgVmVyc2lvblRyYWl0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYnl0ZXM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRieXRlcyBBIDE2LWJ5dGUgYmluYXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgYnl0ZSBzdHJpbmcgaXMgbm90IGV4YWN0bHkgMTYgYnl0ZXMKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBieXRlIHN0cmluZyBkb2VzIG5vdCByZXByZXNlbnQgYW4gUkZDIDQxMjIgVVVJRAogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGJ5dGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGJ5dGVzKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJ5dGVzKSAhPT0gMTYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgbXVzdCBiZSAxNiBieXRlcyBsb25nOyAnCiAgICAgICAgICAgICAgICAuICdyZWNlaXZlZCAnIC4gc3RybGVuKCRieXRlcykgLiAnIGJ5dGVzJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJ5dGVzID0gJGJ5dGVzOwoKICAgICAgICBpZiAoISR0aGlzLT5pc0NvcnJlY3RWYXJpYW50KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgYnl0ZSBzdHJpbmcgcmVjZWl2ZWQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgUkZDIDQxMjIgdmFyaWFudCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHRoaXMtPmlzQ29ycmVjdFZlcnNpb24oKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBieXRlIHN0cmluZyByZWNlaXZlZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgUkZDIDQxMjIgdmVyc2lvbicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ynl0ZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsb2NrU2VxKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgJGNsb2NrU2VxID0gaGV4ZGVjKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMikpKSAmIDB4M2ZmZjsKCiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcGFkKGRlY2hleCgkY2xvY2tTZXEpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOCwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXFMb3coKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgOSwgMSkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZSgpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCAxMCkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBIZXhhZGVjaW1hbAogICAgewogICAgICAgIHJldHVybiBuZXcgSGV4YWRlY2ltYWwoYmluMmhleChzdWJzdHIoJHRoaXMtPmJ5dGVzLCA2LCAyKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChiaW4yaGV4KHN1YnN0cigkdGhpcy0+Ynl0ZXMsIDAsIDQpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWwKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKGJpbjJoZXgoc3Vic3RyKCR0aGlzLT5ieXRlcywgNCwgMikpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZ1bGwgNjAtYml0IHRpbWVzdGFtcCwgd2l0aG91dCB0aGUgdmVyc2lvbgogICAgICoKICAgICAqIEZvciB2ZXJzaW9uIDIgVVVJRHMsIHRoZSB0aW1lX2xvdyBmaWVsZCBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQKICAgICAqIHNob3VsZCBub3QgYmUgcmV0dXJuZWQgYXMgcGFydCBvZiB0aGUgdGltZS4gRm9yIHRoaXMgcmVhc29uLCB3ZSBzZXQgdGhlCiAgICAgKiBib3R0b20gMzIgYml0cyBvZiB0aGUgdGltZXN0YW1wIHRvIDAncy4gQXMgYSByZXN1bHQsIHRoZXJlIGlzIHNvbWUgbG9zcwogICAgICogb2YgZmlkZWxpdHkgb2YgdGhlIHRpbWVzdGFtcCwgZm9yIHZlcnNpb24gMiBVVUlEcy4gVGhlIHRpbWVzdGFtcCBjYW4gYmUKICAgICAqIG9mZiBieSBhIHJhbmdlIG9mIDAgdG8gNDI5LjQ5NjcyOTUgc2Vjb25kcyAob3IgNyBtaW51dGVzLCA5IHNlY29uZHMsIGFuZAogICAgICogNDk2NzMwIG1pY3Jvc2Vjb25kcykuCiAgICAgKgogICAgICogRm9yIHZlcnNpb24gNiBVVUlEcywgdGhlIHRpbWVzdGFtcCBvcmRlciBpcyByZXZlcnNlZCBmcm9tIHRoZSB0eXBpY2FsIFJGQwogICAgICogNDEyMiBvcmRlciAodGhlIHRpbWUgYml0cyBhcmUgaW4gdGhlIGNvcnJlY3QgYml0IG9yZGVyLCBzbyB0aGF0IGl0IGlzCiAgICAgKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpLiBJbiByZXR1cm5pbmcgdGhlIHRpbWVzdGFtcCB2YWx1ZSwgd2UgcHV0IHRoZQogICAgICogYml0cyBpbiB0aGUgb3JkZXI6IHRpbWVfbG93ICsgdGltZV9taWQgKyB0aW1lX2hpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgc3dpdGNoICgkdGhpcy0+Z2V0VmVyc2lvbigpKSB7CiAgICAgICAgICAgIGNhc2UgVXVpZDo6VVVJRF9UWVBFX0RDRV9TRUNVUklUWToKICAgICAgICAgICAgICAgICR0aW1lc3RhbXAgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclMDN4JTA0cyUwOHMnLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICcnCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFV1aWQ6OlVVSURfVFlQRV9QRUFCT0RZOgogICAgICAgICAgICAgICAgJHRpbWVzdGFtcCA9IHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJyUwOHMlMDRzJTAzeCcsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldFRpbWVMb3coKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aW1lc3RhbXAgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclMDN4JTA0cyUwOHMnLAogICAgICAgICAgICAgICAgICAgIGhleGRlYygkdGhpcy0+Z2V0VGltZUhpQW5kVmVyc2lvbigpLT50b1N0cmluZygpKSAmIDB4MGZmZiwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0VGltZU1pZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5nZXRUaW1lTG93KCktPnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEhleGFkZWNpbWFsKCR0aW1lc3RhbXApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzTmlsKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheSAkcGFydHMgKi8KICAgICAgICAkcGFydHMgPSB1bnBhY2soJ24qJywgJHRoaXMtPmJ5dGVzKTsKCiAgICAgICAgcmV0dXJuIChpbnQpICRwYXJ0c1s0XSA+PiAxMjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQ29ycmVjdFZhcmlhbnQoKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNOaWwoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0VmFyaWFudCgpID09PSBVdWlkOjpSRkNfNDEyMjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRmllbGRzXEZpZWxkc0ludGVyZmFjZSBhcyBCYXNlRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKCi8qKgogKiBSRkMgNDEyMiBkZWZpbmVzIGZpZWxkcyBmb3IgYSBzcGVjaWZpYyB2YXJpYW50IG9mIFVVSUQKICoKICogVGhlIGZpZWxkcyBvZiBhbiBSRkMgNDEyMiB2YXJpYW50IFVVSUQgYXJlOgogKgogKiAqICoqdGltZV9sb3cqKjogVGhlIGxvdyBmaWVsZCBvZiB0aGUgdGltZXN0YW1wLCBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcgogKiAqICoqdGltZV9taWQqKjogVGhlIG1pZGRsZSBmaWVsZCBvZiB0aGUgdGltZXN0YW1wLCBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcgogKiAqICoqdGltZV9oaV9hbmRfdmVyc2lvbioqOiBUaGUgaGlnaCBmaWVsZCBvZiB0aGUgdGltZXN0YW1wIG11bHRpcGxleGVkIHdpdGgKICogICB0aGUgdmVyc2lvbiBudW1iZXIsIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyCiAqICogKipjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkKio6IFRoZSBoaWdoIGZpZWxkIG9mIHRoZSBjbG9jayBzZXF1ZW5jZQogKiAgIG11bHRpcGxleGVkIHdpdGggdGhlIHZhcmlhbnQsIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIKICogKiAqKmNsb2NrX3NlcV9sb3cqKjogVGhlIGxvdyBmaWVsZCBvZiB0aGUgY2xvY2sgc2VxdWVuY2UsIGFuIHVuc2lnbmVkCiAqICAgOC1iaXQgaW50ZWdlcgogKiAqICoqbm9kZSoqOiBUaGUgc3BhdGlhbGx5IHVuaXF1ZSBub2RlIGlkZW50aWZpZXIsIGFuIHVuc2lnbmVkIDQ4LWJpdAogKiAgIGludGVnZXIKICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMSBSRkMgNDEyMiwgwqcgNC4xOiBGb3JtYXQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIEZpZWxkc0ludGVyZmFjZSBleHRlbmRzIEJhc2VGaWVsZHNJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIDE2LWJpdCBjbG9jayBzZXF1ZW5jZSwgd2l0aCB0aGUgdmFyaWFudCBiaXRzICh0d28gbW9zdAogICAgICogc2lnbmlmaWNhbnQgYml0cykgbWFza2VkIG91dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xvY2tTZXEoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIGZpZWxkIG9mIHRoZSBjbG9jayBzZXF1ZW5jZSBtdWx0aXBsZXhlZCB3aXRoIHRoZSB2YXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUhpQW5kUmVzZXJ2ZWQoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsb3cgZmllbGQgb2YgdGhlIGNsb2NrIHNlcXVlbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbG9ja1NlcUxvdygpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5vZGUgZmllbGQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGUoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIGZpZWxkIG9mIHRoZSB0aW1lc3RhbXAgbXVsdGlwbGV4ZWQgd2l0aCB0aGUgdmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZUhpQW5kVmVyc2lvbigpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvdyBmaWVsZCBvZiB0aGUgdGltZXN0YW1wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lTG93KCk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWlkZGxlIGZpZWxkIG9mIHRoZSB0aW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVNaWQoKTogSGV4YWRlY2ltYWw7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIDYwLWJpdCB0aW1lc3RhbXAsIHdpdGhvdXQgdGhlIHZlcnNpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBIZXhhZGVjaW1hbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhcmlhbnQKICAgICAqCiAgICAgKiBUaGUgdmFyaWFudCBudW1iZXIgZGVzY3JpYmVzIHRoZSBsYXlvdXQgb2YgdGhlIFVVSUQuIFRoZSB2YXJpYW50CiAgICAgKiBudW1iZXIgaGFzIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKICAgICAqCiAgICAgKiAtIDAgLSBSZXNlcnZlZCBmb3IgTkNTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqIC0gMiAtIFRoZSBSRkMgNDEyMiB2YXJpYW50CiAgICAgKiAtIDYgLSBSZXNlcnZlZCwgTWljcm9zb2Z0IENvcnBvcmF0aW9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqIC0gNyAtIFJlc2VydmVkIGZvciBmdXR1cmUgZGVmaW5pdGlvbgogICAgICoKICAgICAqIEZvciBSRkMgNDEyMiB2YXJpYW50IFVVSURzLCB0aGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdGhlIGludGVnZXIgYDJgLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMSBSRkMgNDEyMiwgwqcgNC4xLjE6IFZhcmlhbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhcmlhbnQoKTogaW50OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmVyc2lvbgogICAgICoKICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBkZXNjcmliZXMgaG93IHRoZSBVVUlEIHdhcyBnZW5lcmF0ZWQgYW5kIGhhcyB0aGUKICAgICAqIGZvbGxvd2luZyBtZWFuaW5nOgogICAgICoKICAgICAqIDEuIFRpbWUtYmFzZWQgVVVJRAogICAgICogMi4gRENFIHNlY3VyaXR5IFVVSUQKICAgICAqIDMuIE5hbWUtYmFzZWQgVVVJRCBoYXNoZWQgd2l0aCBNRDUKICAgICAqIDQuIFJhbmRvbWx5IGdlbmVyYXRlZCBVVUlECiAgICAgKiA1LiBOYW1lLWJhc2VkIFVVSUQgaGFzaGVkIHdpdGggU0hBLTEKICAgICAqCiAgICAgKiBUaGlzIHJldHVybnMgYG51bGxgIGlmIHRoZSBVVUlEIGlzIG5vdCBhbiBSRkMgNDEyMiB2YXJpYW50LCBzaW5jZSB2ZXJzaW9uCiAgICAgKiBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoaXMgdmFyaWFudC4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjMgUkZDIDQxMjIsIMKnIDQuMS4zOiBWZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlc2UgZmllbGRzIHJlcHJlc2VudCBhIG5pbCBVVUlECiAgICAgKgogICAgICogVGhlIG5pbCBVVUlEIGlzIHNwZWNpYWwgZm9ybSBvZiBVVUlEIHRoYXQgaXMgc3BlY2lmaWVkIHRvIGhhdmUgYWxsIDEyOAogICAgICogYml0cyBzZXQgdG8gemVyby4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIG5pbCBVVUlEcwogKgogKiBUaGUgbmlsIFVVSUQgaXMgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4IGJpdHMKICogc2V0IHRvIHplcm8uCiAqCiAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjcgUkZDIDQxMjIsIMKnIDQuMS43OiBOaWwgVVVJRAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwp0cmFpdCBOaWxUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBieXRlIHN0cmluZyByZXByZXNlbnRzIGEgbmlsIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldEJ5dGVzKCkgPT09ICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKCi8qKgogKiBUaGUgbmlsIFVVSUQgaXMgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4IGJpdHMKICogc2V0IHRvIHplcm8KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgTmlsVXVpZCBleHRlbmRzIFV1aWQgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcTm9uc3RhbmRhcmRcVXVpZFY2Owp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxVdWlkSW50ZXJmYWNlIGFzIFJmYzQxMjJVdWlkSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZTsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBVdWlkQnVpbGRlciBidWlsZHMgaW5zdGFuY2VzIG9mIFJGQyA0MTIyIFVVSURzCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmNsYXNzIFV1aWRCdWlsZGVyIGltcGxlbWVudHMgVXVpZEJ1aWxkZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIERlZmF1bHRVdWlkQnVpbGRlcgogICAgICoKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0bwogICAgICogICAgIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgVXVpZAogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIFVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRudW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhIFV1aWQKICAgICAqCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoaXMgVXVpZCBpbnN0YW5jZQogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgVGhlIGJ5dGUgc3RyaW5nIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gUmZjNDEyMlV1aWRJbnRlcmZhY2UgVXVpZEJ1aWxkZXIgcmV0dXJucyBpbnN0YW5jZXMgb2YgUmZjNDEyMlV1aWRJbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoQ29kZWNJbnRlcmZhY2UgJGNvZGVjLCBzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRmaWVsZHMgPSAkdGhpcy0+YnVpbGRGaWVsZHMoJGJ5dGVzKTsKCiAgICAgICAgICAgIGlmICgkZmllbGRzLT5pc05pbCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5pbFV1aWQoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN3aXRjaCAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjEoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjIoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjMoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjQoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjUoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdWlkVjYoJGZpZWxkcywgJHRoaXMtPm51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGhpcy0+dGltZUNvbnZlcnRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGUgVVVJRCB2ZXJzaW9uIGluIHRoZSBnaXZlbiBmaWVsZHMgaXMgbm90IHN1cHBvcnRlZCAnCiAgICAgICAgICAgICAgICAuICdieSB0aGlzIFVVSUQgYnVpbGRlcicKICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuYWJsZVRvQnVpbGRVdWlkRXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksIChpbnQpICRlLT5nZXRDb2RlKCksICRlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm94eSBtZXRob2QgdG8gYWxsb3cgaW5qZWN0aW5nIGEgbW9jaywgZm9yIHRlc3RpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRmllbGRzKHN0cmluZyAkYnl0ZXMpOiBGaWVsZHNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEZpZWxkcygkYnl0ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZEludGVyZmFjZSBhcyBCYXNlVXVpZEludGVyZmFjZTsKCi8qKgogKiBBbHNvIGtub3duIGFzIGEgTGVhY2gtU2FseiB2YXJpYW50IFVVSUQsIGFuIFJGQyA0MTIyIHZhcmlhbnQgVVVJRCBpcyBhCiAqIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGRlZmluZWQgYnkgUkZDIDQxMjIKICoKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIgUkZDIDQxMjIKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIFV1aWRJbnRlcmZhY2UgZXh0ZW5kcyBCYXNlVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBzdGFuZGFyZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRCBhcyBhIFVSTgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pZm9ybV9SZXNvdXJjZV9OYW1lIFVuaWZvcm0gUmVzb3VyY2UgTmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi0zIFJGQyA0MTIyLCDCpyAzOiBOYW1lc3BhY2UgUmVnaXN0cmF0aW9uIFRlbXBsYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcm4oKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERhdGVUaW1lRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgVGhyb3dhYmxlOwoKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIFRpbWUtYmFzZWQsIG9yIHZlcnNpb24gMSwgVVVJRHMgaW5jbHVkZSB0aW1lc3RhbXAsIGNsb2NrIHNlcXVlbmNlLCBhbmQgbm9kZQogKiB2YWx1ZXMgdGhhdCBhcmUgY29tYmluZWQgaW50byBhIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlcgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjEgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDEgKHRpbWUtYmFzZWQpIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfVElNRSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWMSBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgRGF0ZVRpbWVJbnRlcmZhY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQKICAgICAqIHdpdGggdGhlIFVVSUQKICAgICAqCiAgICAgKiBUaGUgdGltZXN0YW1wIHZhbHVlIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBhIHRpbWUtYmFzZWQgVVVJRCwgd2hpY2gKICAgICAqIGhhcyB2ZXJzaW9uIHR5cGUgMS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlIEEgUEhQIERhdGVUaW1lSW1tdXRhYmxlIGluc3RhbmNlIHJlcHJlc2VudGluZwogICAgICogICAgIHRoZSB0aW1lc3RhbXAgb2YgYSB2ZXJzaW9uIDEgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXERhdGVUaW1lRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFJmYzQxMjJcRmllbGRzSW50ZXJmYWNlIGFzIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEludGVnZXIgYXMgSW50ZWdlck9iamVjdDsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBUaHJvd2FibGU7Cgp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogRENFIFNlY3VyaXR5IHZlcnNpb24sIG9yIHZlcnNpb24gMiwgVVVJRHMgaW5jbHVkZSBsb2NhbCBkb21haW4gaWRlbnRpZmllciwKICogbG9jYWwgSUQgZm9yIHRoZSBzcGVjaWZpZWQgZG9tYWluLCBhbmQgbm9kZSB2YWx1ZXMgdGhhdCBhcmUgY29tYmluZWQgaW50byBhCiAqIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlcgogKgogKiBAbGluayBodHRwczovL3B1YmxpY2F0aW9ucy5vcGVuZ3JvdXAub3JnL2MzMTEgRENFIDEuMTogQXV0aGVudGljYXRpb24gYW5kIFNlY3VyaXR5IFNlcnZpY2VzCiAqIEBsaW5rIGh0dHBzOi8vcHVibGljYXRpb25zLm9wZW5ncm91cC5vcmcvYzcwNiBEQ0UgMS4xOiBSZW1vdGUgUHJvY2VkdXJlIENhbGwKICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXA1Lmh0bSN0YWdjamhfMDhfMDJfMDFfMDEgRENFIDEuMTogQXV0aCAmIFNlYywgwqc1LjIuMS4xCiAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5Njk4OTg5OS9jaGFwMTEuaHRtI3RhZ2NqaF8xNF8wNV8wMV8wMSBEQ0UgMS4xOiBBdXRoICYgU2VjLCDCpzExLjUuMS4xCiAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTYyOTM5OS9hcGR4YS5odG0gRENFIDEuMTogUlBDLCBBcHBlbmRpeCBBCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvdXVpZCBHbyBwYWNrYWdlIGZvciBVVUlEcyAoaW5jbHVkZXMgRENFIGltcGxlbWVudGF0aW9uKQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjIgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDIgKERDRSBTZWN1cml0eSkgVVVJRAogICAgICoKICAgICAqIEBwYXJhbSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgVGhlIGZpZWxkcyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyBoZXggdmFsdWVzIHRvL2Zyb20gaW50ZWdlcnMKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSB3aGVuIGVuY29kaW5nIG9yIGRlY29kaW5nCiAgICAgKiAgICAgVVVJRCBzdHJpbmdzCiAgICAgKiBAcGFyYW0gVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciBUaGUgdGltZSBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgdGltZXN0YW1wcyBleHRyYWN0ZWQgZnJvbSBhIFVVSUQgdG8gdW5peCB0aW1lc3RhbXBzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgQ29kZWNJbnRlcmZhY2UgJGNvZGVjLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIKICAgICkgewogICAgICAgIGlmICgkZmllbGRzLT5nZXRWZXJzaW9uKCkgIT09IFV1aWQ6OlVVSURfVFlQRV9EQ0VfU0VDVVJJVFkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdGaWVsZHMgdXNlZCB0byBjcmVhdGUgYSBVdWlkVjIgbXVzdCByZXByZXNlbnQgYSAnCiAgICAgICAgICAgICAgICAuICd2ZXJzaW9uIDIgKERDRSBTZWN1cml0eSkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgRGF0ZVRpbWVJbnRlcmZhY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdGltZXN0YW1wIGFzc29jaWF0ZWQKICAgICAqIHdpdGggdGhlIFVVSUQKICAgICAqCiAgICAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGEgdmVyc2lvbiAyIFVVSUQgc3VmZmVycyBmcm9tIHNvbWUgbG9zcyBvZgogICAgICogZmlkZWxpdHkgb2YgdGhlIHRpbWVzdGFtcCwgZHVlIHRvIHJlcGxhY2luZyB0aGUgdGltZV9sb3cgZmllbGQgd2l0aCB0aGUKICAgICAqIGxvY2FsIGlkZW50aWZpZXIuIFdoZW4gY29uc3RydWN0aW5nIHRoZSB0aW1lc3RhbXAgdmFsdWUgZm9yIGRhdGUKICAgICAqIHB1cnBvc2VzLCB3ZSByZXBsYWNlIHRoZSBsb2NhbCBpZGVudGlmaWVyIGJpdHMgd2l0aCB6ZXJvcy4gQXMgYSByZXN1bHQsCiAgICAgKiB0aGUgdGltZXN0YW1wIGNhbiBiZSBvZmYgYnkgYSByYW5nZSBvZiAwIHRvIDQyOS40OTY3Mjk1IHNlY29uZHMgKG9yIDcKICAgICAqIG1pbnV0ZXMsIDkgc2Vjb25kcywgYW5kIDQ5NjczMCBtaWNyb3NlY29uZHMpLgogICAgICoKICAgICAqIEFzdHV0ZSBvYnNlcnZlcnMgbWlnaHQgbm90ZSB0aGlzIHZhbHVlIGRpcmVjdGx5IGNvcnJlc3BvbmRzIHRvIDJeMzIgLSAxLAogICAgICogb3IgMHhmZmZmZmZmZi4gVGhlIGxvY2FsIGlkZW50aWZpZXIgaXMgMzItYml0cywgYW5kIHdlIGhhdmUgc2V0IGVhY2ggb2YKICAgICAqIHRoZXNlIGJpdHMgdG8gMCwgc28gdGhlIG1heGltdW0gcmFuZ2Ugb2YgdGltZXN0YW1wIGRyaWZ0IGlzIDB4MDAwMDAwMDAKICAgICAqIHRvIDB4ZmZmZmZmZmYgKGNvdW50ZWQgaW4gMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlIEEgUEhQIERhdGVUaW1lSW1tdXRhYmxlIGluc3RhbmNlIHJlcHJlc2VudGluZwogICAgICogICAgIHRoZSB0aW1lc3RhbXAgb2YgYSB2ZXJzaW9uIDIgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0ZVRpbWUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdGltZSA9ICR0aGlzLT50aW1lQ29udmVydGVyLT5jb252ZXJ0VGltZSgkdGhpcy0+ZmllbGRzLT5nZXRUaW1lc3RhbXAoKSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVJbW11dGFibGUoCiAgICAgICAgICAgICAgICAnQCcKICAgICAgICAgICAgICAgIC4gJHRpbWUtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKQogICAgICAgICAgICAgICAgLiAnLicKICAgICAgICAgICAgICAgIC4gc3RyX3BhZCgkdGltZS0+Z2V0TWljcm9zZWNvbmRzKCktPnRvU3RyaW5nKCksIDYsICcwJywgU1RSX1BBRF9MRUZUKQogICAgICAgICAgICApOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRGF0ZVRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgKGludCkgJGUtPmdldENvZGUoKSwgJGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGRvbWFpbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIHZlcnNpb24gMiBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbERvbWFpbigpOiBpbnQKICAgIHsKICAgICAgICAvKiogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgKi8KICAgICAgICAkZmllbGRzID0gJHRoaXMtPmdldEZpZWxkcygpOwoKICAgICAgICByZXR1cm4gKGludCkgaGV4ZGVjKCRmaWVsZHMtPmdldENsb2NrU2VxTG93KCktPnRvU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGxvY2FsIGRvbWFpbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxEb21haW5OYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBVdWlkOjpEQ0VfRE9NQUlOX05BTUVTWyR0aGlzLT5nZXRMb2NhbERvbWFpbigpXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZSBkb21haW4gdXNlZCB0byBjcmVhdGUgdGhpcyB2ZXJzaW9uIDIgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxJZGVudGlmaWVyKCk6IEludGVnZXJPYmplY3QKICAgIHsKICAgICAgICAvKiogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgKi8KICAgICAgICAkZmllbGRzID0gJHRoaXMtPmdldEZpZWxkcygpOwoKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoCiAgICAgICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXItPmZyb21IZXgoJGZpZWxkcy0+Z2V0VGltZUxvdygpLT50b1N0cmluZygpKQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogVmVyc2lvbiAzIFVVSURzIGFyZSBuYW1lZC1iYXNlZCwgdXNpbmcgY29tYmluYXRpb24gb2YgYSBuYW1lc3BhY2UgYW5kIG5hbWUKICogdGhhdCBhcmUgaGFzaGVkIGludG8gYSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgdXNpbmcgTUQ1CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFV1aWRWMyBleHRlbmRzIFV1aWQgaW1wbGVtZW50cyBVdWlkSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCwgTUQ1LWhhc2hlZCkgVVVJRAogICAgICoKICAgICAqIEBwYXJhbSBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMgVGhlIGZpZWxkcyBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCBhIFVVSUQKICAgICAqIEBwYXJhbSBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciBUaGUgbnVtYmVyIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyBoZXggdmFsdWVzIHRvL2Zyb20gaW50ZWdlcnMKICAgICAqIEBwYXJhbSBDb2RlY0ludGVyZmFjZSAkY29kZWMgVGhlIGNvZGVjIHRvIHVzZSB3aGVuIGVuY29kaW5nIG9yIGRlY29kaW5nCiAgICAgKiAgICAgVVVJRCBzdHJpbmdzCiAgICAgKiBAcGFyYW0gVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlciBUaGUgdGltZSBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgdGltZXN0YW1wcyBleHRyYWN0ZWQgZnJvbSBhIFVVSUQgdG8gdW5peCB0aW1lc3RhbXBzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZmM0MTIyRmllbGRzSW50ZXJmYWNlICRmaWVsZHMsCiAgICAgICAgTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIsCiAgICAgICAgQ29kZWNJbnRlcmZhY2UgJGNvZGVjLAogICAgICAgIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIKICAgICkgewogICAgICAgIGlmICgkZmllbGRzLT5nZXRWZXJzaW9uKCkgIT09IFV1aWQ6OlVVSURfVFlQRV9IQVNIX01ENSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWMyBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gMyAobmFtZS1iYXNlZCwgTUQ1LWhhc2hlZCkgVVVJRCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGZpZWxkcywgJG51bWJlckNvbnZlcnRlciwgJGNvZGVjLCAkdGltZUNvbnZlcnRlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogUmFuZG9tLCBvciB2ZXJzaW9uIDQsIFVVSURzIGFyZSByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgZ2VuZXJhdGVkIDEyOC1iaXQKICogaW50ZWdlcnMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgVXVpZFY0IGV4dGVuZHMgVXVpZCBpbXBsZW1lbnRzIFV1aWRJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgdmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzIFRoZSBmaWVsZHMgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKiBAcGFyYW0gTnVtYmVyQ29udmVydGVySW50ZXJmYWNlICRudW1iZXJDb252ZXJ0ZXIgVGhlIG51bWJlciBjb252ZXJ0ZXIgdG8gdXNlCiAgICAgKiAgICAgZm9yIGNvbnZlcnRpbmcgaGV4IHZhbHVlcyB0by9mcm9tIGludGVnZXJzCiAgICAgKiBAcGFyYW0gQ29kZWNJbnRlcmZhY2UgJGNvZGVjIFRoZSBjb2RlYyB0byB1c2Ugd2hlbiBlbmNvZGluZyBvciBkZWNvZGluZwogICAgICogICAgIFVVSUQgc3RyaW5ncwogICAgICogQHBhcmFtIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UgJHRpbWVDb252ZXJ0ZXIgVGhlIHRpbWUgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgZXh0cmFjdGVkIGZyb20gYSBVVUlEIHRvIHVuaXggdGltZXN0YW1wcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmZjNDEyMkZpZWxkc0ludGVyZmFjZSAkZmllbGRzLAogICAgICAgIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyLAogICAgICAgIENvZGVjSW50ZXJmYWNlICRjb2RlYywKICAgICAgICBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyCiAgICApIHsKICAgICAgICBpZiAoJGZpZWxkcy0+Z2V0VmVyc2lvbigpICE9PSBVdWlkOjpVVUlEX1RZUEVfUkFORE9NKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnRmllbGRzIHVzZWQgdG8gY3JlYXRlIGEgVXVpZFY0IG11c3QgcmVwcmVzZW50IGEgJwogICAgICAgICAgICAgICAgLiAndmVyc2lvbiA0IChyYW5kb20pIFVVSUQnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWVsZHMsICRudW1iZXJDb252ZXJ0ZXIsICRjb2RlYywgJHRpbWVDb252ZXJ0ZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcUmZjNDEyMlxGaWVsZHNJbnRlcmZhY2UgYXMgUmZjNDEyMkZpZWxkc0ludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CgovKioKICogVmVyc2lvbiA1IFVVSURzIGFyZSBuYW1lZC1iYXNlZCwgdXNpbmcgY29tYmluYXRpb24gb2YgYSBuYW1lc3BhY2UgYW5kIG5hbWUKICogdGhhdCBhcmUgaGFzaGVkIGludG8gYSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgdXNpbmcgU0hBMQogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBVdWlkVjUgZXh0ZW5kcyBVdWlkIGltcGxlbWVudHMgVXVpZEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQsIFNIQTEtaGFzaGVkKSBVVUlECiAgICAgKgogICAgICogQHBhcmFtIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcyBUaGUgZmllbGRzIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIGhleCB2YWx1ZXMgdG8vZnJvbSBpbnRlZ2VycwogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIHdoZW4gZW5jb2Rpbmcgb3IgZGVjb2RpbmcKICAgICAqICAgICBVVUlEIHN0cmluZ3MKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyIFRoZSB0aW1lIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyB0aW1lc3RhbXBzIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byB1bml4IHRpbWVzdGFtcHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgaWYgKCRmaWVsZHMtPmdldFZlcnNpb24oKSAhPT0gVXVpZDo6VVVJRF9UWVBFX0hBU0hfU0hBMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0ZpZWxkcyB1c2VkIHRvIGNyZWF0ZSBhIFV1aWRWNSBtdXN0IHJlcHJlc2VudCBhICcKICAgICAgICAgICAgICAgIC4gJ3ZlcnNpb24gNSAobmFtZWQtYmFzZWQsIFNIQTEtaGFzaGVkKSBVVUlEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZmllbGRzLCAkbnVtYmVyQ29udmVydGVyLCAkY29kZWMsICR0aW1lQ29udmVydGVyKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/Validator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFZhbGlkYXRvclxWYWxpZGF0b3JJbnRlcmZhY2U7Cgp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHN0cl9yZXBsYWNlOwoKLyoqCiAqIFJmYzQxMjJcVmFsaWRhdG9yIHZhbGlkYXRlcyBzdHJpbmdzIGFzIFVVSURzIG9mIHRoZSBSRkMgNDEyMiB2YXJpYW50CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvckludGVyZmFjZQp7CiAgICBwcml2YXRlIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXEFbMC05QS1GYS1mXXs4fS1bMC05QS1GYS1mXXs0fS0nCiAgICAgICAgLiAnWzEtNV17MX1bMC05QS1GYS1mXXszfS1bQUJhYjg5XXsxfVswLTlBLUZhLWZdezN9LVswLTlBLUZhLWZdezEyfVx6JzsKCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICogQHBzYWxtLXN1cHByZXNzIE1vcmVTcGVjaWZpY1JldHVyblR5cGUgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBMZXNzU3BlY2lmaWNSZXR1cm5TdGF0ZW1lbnQgd2Uga25vdyB0aGF0IHRoZSByZXRyaWV2ZWQgYHN0cmluZ2AgaXMgbmV2ZXIgZW1wdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdHRlcm4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlZBTElEX1BBVFRFUk47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKHN0cmluZyAkdXVpZCk6IGJvb2wKICAgIHsKICAgICAgICAkdXVpZCA9IHN0cl9yZXBsYWNlKFsndXJuOicsICd1dWlkOicsICdVUk46JywgJ1VVSUQ6JywgJ3snLCAnfSddLCAnJywgJHV1aWQpOwoKICAgICAgICByZXR1cm4gJHV1aWQgPT09IFV1aWQ6Ok5JTCB8fCBwcmVnX21hdGNoKCcvJyAuIHNlbGY6OlZBTElEX1BBVFRFUk4gLiAnL0RtcycsICR1dWlkKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRCeXRlc0V4Y2VwdGlvbjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7Cgp1c2UgZnVuY3Rpb24gZGVjYmluOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN1YnN0cjsKdXNlIGZ1bmN0aW9uIHVucGFjazsKCnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHRoZSB2YXJpYW50LCBhcyBkZWZpbmVkIGJ5IFJGQyA0MTIyCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFZhcmlhbnRUcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJ5dGVzIHRoYXQgY29tcHJpc2UgdGhlIGZpZWxkcwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFyaWFudCBpZGVudGlmaWVyLCBhY2NvcmRpbmcgdG8gUkZDIDQxMjIsIGZvciB0aGUgZ2l2ZW4gYnl0ZXMKICAgICAqCiAgICAgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBtYXkgYmUgcmV0dXJuZWQ6CiAgICAgKgogICAgICogLSBgMGAgLS0gUmVzZXJ2ZWQsIE5DUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICAgICogLSBgMmAgLS0gVGhlIHZhcmlhbnQgc3BlY2lmaWVkIGluIFJGQyA0MTIyLgogICAgICogLSBgNmAgLS0gUmVzZXJ2ZWQsIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICAgICogLSBgN2AgLS0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIHZhcmlhbnQgaWRlbnRpZmllciwgYWNjb3JkaW5nIHRvIFJGQyA0MTIyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYXJpYW50KCk6IGludAogICAgewogICAgICAgIGlmIChzdHJsZW4oJHRoaXMtPmdldEJ5dGVzKCkpICE9PSAxNikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzRXhjZXB0aW9uKCdJbnZhbGlkIG51bWJlciBvZiBieXRlcycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHBhcnRzICovCiAgICAgICAgJHBhcnRzID0gdW5wYWNrKCduKicsICR0aGlzLT5nZXRCeXRlcygpKTsKCiAgICAgICAgLy8gJHBhcnRzWzVdIGlzIGEgMTYtYml0LCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHZhcmlhbnQgYml0cwogICAgICAgIC8vIG9mIHRoZSBVVUlELiBXZSBjb252ZXJ0IHRoaXMgaW50ZWdlciBpbnRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYQogICAgICAgIC8vIGJpbmFyeSByZXByZXNlbnRhdGlvbiwgcGFkZGVkIHRvIDE2IGNoYXJhY3RlcnMuIFdlIGFuYWx5emUgdGhlIGZpcnN0CiAgICAgICAgLy8gdGhyZWUgY2hhcmFjdGVycyAodGhyZWUgbW9zdC1zaWduaWZpY2FudCBiaXRzKSB0byBkZXRlcm1pbmUgdGhlCiAgICAgICAgLy8gdmFyaWFudC4KICAgICAgICAkYmluYXJ5ID0gc3RyX3BhZCgKICAgICAgICAgICAgZGVjYmluKChpbnQpICRwYXJ0c1s1XSksCiAgICAgICAgICAgIDE2LAogICAgICAgICAgICAnMCcsCiAgICAgICAgICAgIFNUUl9QQURfTEVGVAogICAgICAgICk7CgogICAgICAgICRtc2IgPSBzdWJzdHIoJGJpbmFyeSwgMCwgMyk7CgogICAgICAgIGlmICgkbXNiID09PSAnMTExJykgewogICAgICAgICAgICAkdmFyaWFudCA9IFV1aWQ6OlJFU0VSVkVEX0ZVVFVSRTsKICAgICAgICB9IGVsc2VpZiAoJG1zYiA9PT0gJzExMCcpIHsKICAgICAgICAgICAgJHZhcmlhbnQgPSBVdWlkOjpSRVNFUlZFRF9NSUNST1NPRlQ7CiAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkbXNiLCAnMTAnKSA9PT0gMCkgewogICAgICAgICAgICAkdmFyaWFudCA9IFV1aWQ6OlJGQ180MTIyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR2YXJpYW50ID0gVXVpZDo6UkVTRVJWRURfTkNTOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YXJpYW50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFJmYzQxMjI7CgovKioKICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHRoZSB2ZXJzaW9uLCBhcyBkZWZpbmVkIGJ5IFJGQyA0MTIyCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCnRyYWl0IFZlcnNpb25UcmFpdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZlcnNpb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFZlcnNpb24oKTogP2ludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVzZSBmaWVsZHMgcmVwcmVzZW50IGEgbmlsIFVVSUQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGlzTmlsKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gbWF0Y2hlcyBvbmUgb2YgdGhvc2UgZGVmaW5lZCBieSBSRkMgNDEyMgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBVVUlEIHZlcnNpb24gaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQ29ycmVjdFZlcnNpb24oKTogYm9vbAogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNOaWwoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoJHRoaXMtPmdldFZlcnNpb24oKSkgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Decimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gaXNfbnVtZXJpYzsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGVjaW1hbAogKgogKiBUaGlzIGNsYXNzIGV4aXN0cyBmb3IgdHlwZS1zYWZldHkgcHVycG9zZXMsIHRvIGVuc3VyZSB0aGF0IGRlY2ltYWxzCiAqIHJldHVybmVkIGZyb20gcmFtc2V5L3V1aWQgbWV0aG9kcyBhcyBzdHJpbmdzIGFyZSB0cnVseSBkZWNpbWFscyBhbmQgbm90IHNvbWUKICogb3RoZXIga2luZCBvZiBzdHJpbmcuCiAqCiAqIFRvIHN1cHBvcnQgdmFsdWVzIGFzIHRydWUgZGVjaW1hbHMgYW5kIG5vdCBhcyBmbG9hdHMgb3IgZG91Ymxlcywgd2Ugc3RvcmUgdGhlCiAqIGRlY2ltYWxzIGFzIHN0cmluZ3MuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIERlY2ltYWwgaW1wbGVtZW50cyBOdW1iZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRpc05lZ2F0aXZlID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSBkZWNpbWFsIHZhbHVlIHRvIHN0b3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gKHN0cmluZykgJHZhbHVlOwoKICAgICAgICBpZiAoIWlzX251bWVyaWMoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1ZhbHVlIG11c3QgYmUgYSBzaWduZWQgZGVjaW1hbCBvciBhIHN0cmluZyBjb250YWluaW5nIG9ubHkgJwogICAgICAgICAgICAgICAgLiAnZGlnaXRzIDAtOSBhbmQsIG9wdGlvbmFsbHksIGEgZGVjaW1hbCBwb2ludCBvciBzaWduICgrIG9yIC0pJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nICstc3ltYm9sLgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnKycpID09PSAwKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDEpOwogICAgICAgIH0KCiAgICAgICAgLy8gRm9yIGNhc2VzIGxpa2UgYC0wYCBvciBgLTAuMDAwMGAsIGNvbnZlcnQgdGhlIHZhbHVlIHRvIGAwYC4KICAgICAgICBpZiAoYWJzKChmbG9hdCkgJHZhbHVlKSA9PT0gMC4wKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICcwJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnLScpID09PSAwKSB7CiAgICAgICAgICAgICR0aGlzLT5pc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOZWdhdGl2ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc05lZ2F0aXZlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Hexadecimal.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gY3R5cGVfeGRpZ2l0Owp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIHN0cnBvczsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgaGV4YWRlY2ltYWwgbnVtYmVyCiAqCiAqIFRoaXMgY2xhc3MgZXhpc3RzIGZvciB0eXBlLXNhZmV0eSBwdXJwb3NlcywgdG8gZW5zdXJlIHRoYXQgaGV4YWRlY2ltYWwgbnVtYmVycwogKiByZXR1cm5lZCBmcm9tIHJhbXNleS91dWlkIG1ldGhvZHMgYXMgc3RyaW5ncyBhcmUgdHJ1bHkgaGV4YWRlY2ltYWwgYW5kIG5vdCBzb21lCiAqIG90aGVyIGtpbmQgb2Ygc3RyaW5nLgogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwpmaW5hbCBjbGFzcyBIZXhhZGVjaW1hbCBpbXBsZW1lbnRzIFR5cGVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZSB0byBzdG9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2YWx1ZSkKICAgIHsKICAgICAgICAkdmFsdWUgPSBzdHJ0b2xvd2VyKCR2YWx1ZSk7CgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnMHgnKSA9PT0gMCkgewogICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAyKTsKICAgICAgICB9CgogICAgICAgIGlmICghY3R5cGVfeGRpZ2l0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIGEgaGV4YWRlY2ltYWwgbnVtYmVyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Integer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFZhbHVlRXJyb3I7Cgp1c2UgZnVuY3Rpb24gY3R5cGVfZGlnaXQ7CnVzZSBmdW5jdGlvbiBsdHJpbTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJwb3M7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGludGVnZXIKICoKICogVGhpcyBjbGFzcyBleGlzdHMgZm9yIHR5cGUtc2FmZXR5IHB1cnBvc2VzLCB0byBlbnN1cmUgdGhhdCBpbnRlZ2VycwogKiByZXR1cm5lZCBmcm9tIHJhbXNleS91dWlkIG1ldGhvZHMgYXMgc3RyaW5ncyBhcmUgdHJ1bHkgaW50ZWdlcnMgYW5kIG5vdCBzb21lCiAqIG90aGVyIGtpbmQgb2Ygc3RyaW5nLgogKgogKiBUbyBzdXBwb3J0IGxhcmdlIGludGVnZXJzIGJleW9uZCBQSFBfSU5UX01BWCBhbmQgUEhQX0lOVF9NSU4gb24gYm90aCA2NC1iaXQKICogYW5kIDMyLWJpdCBzeXN0ZW1zLCB3ZSBzdG9yZSB0aGUgaW50ZWdlcnMgYXMgc3RyaW5ncy4KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KZmluYWwgY2xhc3MgSW50ZWdlciBpbXBsZW1lbnRzIE51bWJlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEBwc2FsbS12YXIgbnVtZXJpYy1zdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaXNOZWdhdGl2ZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgaW50ZWdlciB2YWx1ZSB0byBzdG9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgICR2YWx1ZSA9IChzdHJpbmcpICR2YWx1ZTsKICAgICAgICAkc2lnbiA9ICcrJzsKCiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGEgc2lnbiwgcmVtb3ZlIGl0IGZvciBjdHlwZV9kaWdpdCgpIGNoZWNrLgogICAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCAnLScpID09PSAwIHx8IHN0cnBvcygkdmFsdWUsICcrJykgPT09IDApIHsKICAgICAgICAgICAgJHNpZ24gPSBzdWJzdHIoJHZhbHVlLCAwLCAxKTsKICAgICAgICAgICAgJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgMSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWN0eXBlX2RpZ2l0KCR2YWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdWYWx1ZSBtdXN0IGJlIGEgc2lnbmVkIGludGVnZXIgb3IgYSBzdHJpbmcgY29udGFpbmluZyBvbmx5ICcKICAgICAgICAgICAgICAgIC4gJ2RpZ2l0cyAwLTkgYW5kLCBvcHRpb25hbGx5LCBhIHNpZ24gKCsgb3IgLSknCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBUcmltIGFueSBsZWFkaW5nIHplcm9zLgogICAgICAgICR2YWx1ZSA9IGx0cmltKCR2YWx1ZSwgJzAnKTsKCiAgICAgICAgLy8gU2V0IHRvIHplcm8gaWYgdGhlIHN0cmluZyBpcyBlbXB0eSBhZnRlciB0cmltbWluZyB6ZXJvcy4KICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAkdmFsdWUgPSAnMCc7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIG5lZ2F0aXZlIHNpZ24gYmFjayB0byB0aGUgdmFsdWUuCiAgICAgICAgaWYgKCRzaWduID09PSAnLScgJiYgJHZhbHVlICE9PSAnMCcpIHsKICAgICAgICAgICAgJHZhbHVlID0gJHNpZ24gLiAkdmFsdWU7CiAgICAgICAgICAgICR0aGlzLT5pc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8qKiBAcHNhbG0tdmFyIG51bWVyaWMtc3RyaW5nICRudW1lcmljVmFsdWUgKi8KICAgICAgICAkbnVtZXJpY1ZhbHVlID0gJHZhbHVlOwoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkbnVtZXJpY1ZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzTmVnYXRpdmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG51bWVyaWMtc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e3N0cmluZzogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydzdHJpbmcnID0+ICR0aGlzLT50b1N0cmluZygpXTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGEgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgKgogICAgICogQHBocGNzU3VwcHJlc3MgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5UeXBlSGludHMuUGFyYW1ldGVyVHlwZUhpbnQuTWlzc2luZ05hdGl2ZVR5cGVIaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW51c2VkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRzZXJpYWxpemVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtzdHJpbmc6IHN0cmluZ30gJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkCiAgICB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgaWYgKCFpc3NldCgkZGF0YVsnc3RyaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKHNwcmludGYoJyVzKCk6IEFyZ3VtZW50ICMxICgkZGF0YSkgaXMgaW52YWxpZCcsIF9fTUVUSE9EX18pKTsKICAgICAgICB9CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZUVuZAoKICAgICAgICAkdGhpcy0+dW5zZXJpYWxpemUoJGRhdGFbJ3N0cmluZyddKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/NumberInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7CgovKioKICogTnVtYmVySW50ZXJmYWNlIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4gbnVtZXJpYyB2YWx1ZXMgcmV0dXJuZWQgYnkgcmFtc2V5L3V1aWQKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIE51bWJlckludGVyZmFjZSBleHRlbmRzIFR5cGVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBudW1iZXIgaXMgbGVzcyB0aGFuIHplcm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmVnYXRpdmUoKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/Time.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgUmFtc2V5XFV1aWRcRXhjZXB0aW9uXFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBWYWx1ZUVycm9yOwp1c2Ugc3RkQ2xhc3M7Cgp1c2UgZnVuY3Rpb24ganNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBqc29uX2VuY29kZTsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CgovKioKICogQSB2YWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgdGltZXN0YW1wCiAqCiAqIFRoaXMgY2xhc3MgZXhpc3RzIGZvciB0eXBlLXNhZmV0eSBwdXJwb3NlcywgdG8gZW5zdXJlIHRoYXQgdGltZXN0YW1wcyB1c2VkCiAqIGJ5IHJhbXNleS91dWlkIGFyZSB0cnVseSB0aW1lc3RhbXAgaW50ZWdlcnMgYW5kIG5vdCBzb21lIG90aGVyIGtpbmQgb2Ygc3RyaW5nCiAqIG9yIGludGVnZXIuCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIFRpbWUgaW1wbGVtZW50cyBUeXBlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBJbnRlZ2VyT2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJHNlY29uZHM7CgogICAgLyoqCiAgICAgKiBAdmFyIEludGVnZXJPYmplY3QKICAgICAqLwogICAgcHJpdmF0ZSAkbWljcm9zZWNvbmRzOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRzZWNvbmRzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1pY3Jvc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlY29uZHMsICRtaWNyb3NlY29uZHMgPSAwKQogICAgewogICAgICAgICR0aGlzLT5zZWNvbmRzID0gbmV3IEludGVnZXJPYmplY3QoJHNlY29uZHMpOwogICAgICAgICR0aGlzLT5taWNyb3NlY29uZHMgPSBuZXcgSW50ZWdlck9iamVjdCgkbWljcm9zZWNvbmRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vjb25kcygpOiBJbnRlZ2VyT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWNvbmRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNaWNyb3NlY29uZHMoKTogSW50ZWdlck9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWljcm9zZWNvbmRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlY29uZHMtPnRvU3RyaW5nKCkgLiAnLicgLiAkdGhpcy0+bWljcm9zZWNvbmRzLT50b1N0cmluZygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2Vjb25kcycgPT4gJHRoaXMtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ21pY3Jvc2Vjb25kcycgPT4gJHRoaXMtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpLAogICAgICAgIF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykganNvbl9lbmNvZGUoJHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtzZWNvbmRzOiBzdHJpbmcsIG1pY3Jvc2Vjb25kczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc2Vjb25kcycgPT4gJHRoaXMtPmdldFNlY29uZHMoKS0+dG9TdHJpbmcoKSwKICAgICAgICAgICAgJ21pY3Jvc2Vjb25kcycgPT4gJHRoaXMtPmdldE1pY3Jvc2Vjb25kcygpLT50b1N0cmluZygpLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSBhIHNlcmlhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VyaWFsaXplZCBUaGUgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdAogICAgICoKICAgICAqIEBwaHBjc1N1cHByZXNzIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgICogQHBzYWxtLXN1cHByZXNzIFVudXNlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCRzZXJpYWxpemVkKTogdm9pZAogICAgewogICAgICAgIC8qKiBAdmFyIHN0ZENsYXNzICR0aW1lICovCiAgICAgICAgJHRpbWUgPSBqc29uX2RlY29kZSgkc2VyaWFsaXplZCk7CgogICAgICAgIGlmICghaXNzZXQoJHRpbWUtPnNlY29uZHMpIHx8ICFpc3NldCgkdGltZS0+bWljcm9zZWNvbmRzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIHVuc2VyaWFsaXplIGFuIGludmFsaWQgdmFsdWUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoJHRpbWUtPnNlY29uZHMsICR0aW1lLT5taWNyb3NlY29uZHMpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5e3NlY29uZHM6IHN0cmluZywgbWljcm9zZWNvbmRzOiBzdHJpbmd9ICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZAogICAgewogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVTdGFydAogICAgICAgIGlmICghaXNzZXQoJGRhdGFbJ3NlY29uZHMnXSkgfHwgIWlzc2V0KCRkYXRhWydtaWNyb3NlY29uZHMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbHVlRXJyb3Ioc3ByaW50ZignJXMoKTogQXJndW1lbnQgIzEgKCRkYXRhKSBpcyBpbnZhbGlkJywgX19NRVRIT0RfXykpOwogICAgICAgIH0KICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCgogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgkZGF0YVsnc2Vjb25kcyddLCAkZGF0YVsnbWljcm9zZWNvbmRzJ10pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Type/TypeInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFR5cGU7Cgp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIFNlcmlhbGl6YWJsZTsKCi8qKgogKiBUeXBlSW50ZXJmYWNlIGVuc3VyZXMgY29uc2lzdGVuY3kgaW4gdHlwZWQgdmFsdWVzIHJldHVybmVkIGJ5IHJhbXNleS91dWlkCiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmludGVyZmFjZSBUeXBlSW50ZXJmYWNlIGV4dGVuZHMgSnNvblNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Uuid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29kZWNcQ29kZWNJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxDb252ZXJ0ZXJcTnVtYmVyQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcTGF6eVxMYXp5VXVpZEZyb21TdHJpbmc7CnVzZSBSYW1zZXlcVXVpZFxSZmM0MTIyXEZpZWxkc0ludGVyZmFjZSBhcyBSZmM0MTIyRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgVmFsdWVFcnJvcjsKCnVzZSBmdW5jdGlvbiBhc3NlcnQ7CnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gcHJlZ19tYXRjaDsKdXNlIGZ1bmN0aW9uIHNwcmludGY7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKdXNlIGZ1bmN0aW9uIHN0cmNtcDsKdXNlIGZ1bmN0aW9uIHN0cmxlbjsKdXNlIGZ1bmN0aW9uIHN0cnRvbG93ZXI7CnVzZSBmdW5jdGlvbiBzdWJzdHI7CgovKioKICogVXVpZCBwcm92aWRlcyBjb25zdGFudHMgYW5kIHN0YXRpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggYW5kIGdlbmVyYXRpbmcgVVVJRHMKICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KY2xhc3MgVXVpZCBpbXBsZW1lbnRzIFV1aWRJbnRlcmZhY2UKewogICAgdXNlIERlcHJlY2F0ZWRVdWlkTWV0aG9kc1RyYWl0OwoKICAgIC8qKgogICAgICogV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lIHN0cmluZyBpcyBhIGZ1bGx5LXF1YWxpZmllZAogICAgICogZG9tYWluIG5hbWUKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI2FwcGVuZGl4LUMgUkZDIDQxMjIsIEFwcGVuZGl4IEM6IFNvbWUgTmFtZSBTcGFjZSBJRHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5BTUVTUEFDRV9ETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JzsKCiAgICAvKioKICAgICAqIFdoZW4gdGhpcyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGUgbmFtZSBzdHJpbmcgaXMgYSBVUkwKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI2FwcGVuZGl4LUMgUkZDIDQxMjIsIEFwcGVuZGl4IEM6IFNvbWUgTmFtZSBTcGFjZSBJRHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5BTUVTUEFDRV9VUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JzsKCiAgICAvKioKICAgICAqIFdoZW4gdGhpcyBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGUgbmFtZSBzdHJpbmcgaXMgYW4gSVNPIE9JRAogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjYXBwZW5kaXgtQyBSRkMgNDEyMiwgQXBwZW5kaXggQzogU29tZSBOYW1lIFNwYWNlIElEcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTkFNRVNQQUNFX09JRCA9ICc2YmE3YjgxMi05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnOwoKICAgIC8qKgogICAgICogV2hlbiB0aGlzIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lIHN0cmluZyBpcyBhbiBYLjUwMCBETiBpbiBERVIKICAgICAqIG9yIGEgdGV4dCBvdXRwdXQgZm9ybWF0CiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNhcHBlbmRpeC1DIFJGQyA0MTIyLCBBcHBlbmRpeCBDOiBTb21lIE5hbWUgU3BhY2UgSURzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOQU1FU1BBQ0VfWDUwMCA9ICc2YmE3YjgxNC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnOwoKICAgIC8qKgogICAgICogVGhlIG5pbCBVVUlEIGlzIGEgc3BlY2lhbCBmb3JtIG9mIFVVSUQgdGhhdCBpcyBzcGVjaWZpZWQgdG8gaGF2ZSBhbGwgMTI4CiAgICAgKiBiaXRzIHNldCB0byB6ZXJvCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS43IFJGQyA0MTIyLCDCpyA0LjEuNzogTmlsIFVVSUQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5JTCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnOwoKICAgIC8qKgogICAgICogVmFyaWFudDogcmVzZXJ2ZWQsIE5DUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4xIFJGQyA0MTIyLCDCpyA0LjEuMTogVmFyaWFudAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTRVJWRURfTkNTID0gMDsKCiAgICAvKioKICAgICAqIFZhcmlhbnQ6IHRoZSBVVUlEIGxheW91dCBzcGVjaWZpZWQgaW4gUkZDIDQxMjIKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRkNfNDEyMiA9IDI7CgogICAgLyoqCiAgICAgKiBWYXJpYW50OiByZXNlcnZlZCwgTWljcm9zb2Z0IENvcnBvcmF0aW9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjEgUkZDIDQxMjIsIMKnIDQuMS4xOiBWYXJpYW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNFUlZFRF9NSUNST1NPRlQgPSA2OwoKICAgIC8qKgogICAgICogVmFyaWFudDogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWZpbml0aW9uCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4xIFJGQyA0MTIyLCDCpyA0LjEuMTogVmFyaWFudAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTRVJWRURfRlVUVVJFID0gNzsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBWYWxpZGF0b3JJbnRlcmZhY2U6OmdldFBhdHRlcm4oKX0gaW5zdGVhZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXlswLTlBLUZhLWZdezh9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezR9LVswLTlBLUZhLWZdezEyfSQnOwoKICAgIC8qKgogICAgICogVmVyc2lvbiAxICh0aW1lLWJhc2VkKSBVVUlECiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVVSURfVFlQRV9USU1FID0gMTsKCiAgICAvKioKICAgICAqIFZlcnNpb24gMiAoRENFIFNlY3VyaXR5KSBVVUlECiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjIjc2VjdGlvbi00LjEuMyBSRkMgNDEyMiwgwqcgNC4xLjM6IFZlcnNpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVVSURfVFlQRV9EQ0VfU0VDVVJJVFkgPSAyOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAc2VlIFV1aWQ6OlVVSURfVFlQRV9EQ0VfU0VDVVJJVFl9IGluc3RlYWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVVUlEX1RZUEVfSURFTlRJRklFUiA9IDI7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDMgKG5hbWUtYmFzZWQgYW5kIGhhc2hlZCB3aXRoIE1ENSkgVVVJRAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyI3NlY3Rpb24tNC4xLjMgUkZDIDQxMjIsIMKnIDQuMS4zOiBWZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVVUlEX1RZUEVfSEFTSF9NRDUgPSAzOwoKICAgIC8qKgogICAgICogVmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4zIFJGQyA0MTIyLCDCpyA0LjEuMzogVmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX1JBTkRPTSA9IDQ7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDUgKG5hbWUtYmFzZWQgYW5kIGhhc2hlZCB3aXRoIFNIQTEpIFVVSUQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMS4zIFJGQyA0MTIyLCDCpyA0LjEuMzogVmVyc2lvbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX0hBU0hfU0hBMSA9IDU7CgogICAgLyoqCiAgICAgKiBWZXJzaW9uIDYgKG9yZGVyZWQtdGltZSkgVVVJRAogICAgICoKICAgICAqIFRoaXMgaXMgbmFtZWQgYFVVSURfVFlQRV9QRUFCT0RZYCwgc2luY2UgdGhlIHNwZWNpZmljYXRpb24gaXMgc3RpbGwgaW4KICAgICAqIGRyYWZ0IGZvcm0sIGFuZCB0aGUgcHJpbWFyeSBhdXRob3IvZWRpdG9yJ3MgbmFtZSBpcyBCcmFkIFBlYWJvZHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3V1aWQ2L3V1aWQ2LWlldGYtZHJhZnQgVVVJRCB2ZXJzaW9uIDYgSUVURiBkcmFmdAogICAgICogQGxpbmsgaHR0cDovL2doLnBlYWJvZHkuaW8vdXVpZHY2LyAiVmVyc2lvbiA2IiBVVUlEcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRF9UWVBFX1BFQUJPRFkgPSA2OwoKICAgIC8qKgogICAgICogRENFIFNlY3VyaXR5IHByaW5jaXBhbCBkb21haW4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTY5ODk4OTkvY2hhcDExLmh0bSN0YWdjamhfMTRfMDVfMDFfMDEgRENFIDEuMSwgwqcxMS41LjEuMQogICAgICovCiAgICBwdWJsaWMgY29uc3QgRENFX0RPTUFJTl9QRVJTT04gPSAwOwoKICAgIC8qKgogICAgICogRENFIFNlY3VyaXR5IGdyb3VwIGRvbWFpbgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5Njk4OTg5OS9jaGFwMTEuaHRtI3RhZ2NqaF8xNF8wNV8wMV8wMSBEQ0UgMS4xLCDCpzExLjUuMS4xCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEQ0VfRE9NQUlOX0dST1VQID0gMTsKCiAgICAvKioKICAgICAqIERDRSBTZWN1cml0eSBvcmdhbml6YXRpb24gZG9tYWluCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXAxMS5odG0jdGFnY2poXzE0XzA1XzAxXzAxIERDRSAxLjEsIMKnMTEuNS4xLjEKICAgICAqLwogICAgcHVibGljIGNvbnN0IERDRV9ET01BSU5fT1JHID0gMjsKCiAgICAvKioKICAgICAqIERDRSBTZWN1cml0eSBkb21haW4gc3RyaW5nIG5hbWVzCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk2OTg5ODk5L2NoYXAxMS5odG0jdGFnY2poXzE0XzA1XzAxXzAxIERDRSAxLjEsIMKnMTEuNS4xLjEKICAgICAqLwogICAgcHVibGljIGNvbnN0IERDRV9ET01BSU5fTkFNRVMgPSBbCiAgICAgICAgc2VsZjo6RENFX0RPTUFJTl9QRVJTT04gPT4gJ3BlcnNvbicsCiAgICAgICAgc2VsZjo6RENFX0RPTUFJTl9HUk9VUCA9PiAnZ3JvdXAnLAogICAgICAgIHNlbGY6OkRDRV9ET01BSU5fT1JHID0+ICdvcmcnLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEZhY3RvcnlJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkZmFjdG9yeSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgZmxhZyB0byBkZXRlY3QgaWYgdGhlIFVVSUQgZmFjdG9yeSB3YXMgcmVwbGFjZWQgaW50ZXJuYWxseSwgd2hpY2ggZGlzYWJsZXMgYWxsIG9wdGltaXphdGlvbnMKICAgICAqICAgICAgICAgICBmb3IgdGhlIGRlZmF1bHQvaGFwcHkgcGF0aCBpbnRlcm5hbCBzY2VuYXJpb3MKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGZhY3RvcnlSZXBsYWNlZCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBDb2RlY0ludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvZGVjOwoKICAgIC8qKgogICAgICogVGhlIGZpZWxkcyB0aGF0IG1ha2UgdXAgdGhpcyBVVUlECiAgICAgKgogICAgICogQHZhciBSZmM0MTIyRmllbGRzSW50ZXJmYWNlCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmllbGRzOwoKICAgIC8qKgogICAgICogQHZhciBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICR0aW1lQ29udmVydGVyOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSBmcm9tIGFuIGFycmF5IG9mIGZpZWxkcwogICAgICoKICAgICAqIFVubGVzcyB5b3UncmUgbWFraW5nIGFkdmFuY2VkIHVzZSBvZiB0aGlzIGxpYnJhcnkgdG8gZ2VuZXJhdGUgaWRlbnRpZmllcnMKICAgICAqIHRoYXQgZGV2aWF0ZSBmcm9tIFJGQyA0MTIyLCB5b3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8gaW5zdGFudGlhdGUgYQogICAgICogVVVJRCBkaXJlY3RseS4gVXNlIHRoZSBzdGF0aWMgbWV0aG9kcywgaW5zdGVhZDoKICAgICAqCiAgICAgKiBgYGAKICAgICAqIHVzZSBSYW1zZXlcVXVpZFxVdWlkOwogICAgICoKICAgICAqICR0aW1lQmFzZWRVdWlkID0gVXVpZDo6dXVpZDEoKTsKICAgICAqICRuYW1lc3BhY2VNZDVVdWlkID0gVXVpZDo6dXVpZDMoVXVpZDo6TkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9waHAubmV0LycpOwogICAgICogJHJhbmRvbVV1aWQgPSBVdWlkOjp1dWlkNCgpOwogICAgICogJG5hbWVzcGFjZVNoYTFVdWlkID0gVXVpZDo6dXVpZDUoVXVpZDo6TkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9waHAubmV0LycpOwogICAgICogYGBgCiAgICAgKgogICAgICogQHBhcmFtIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcyBUaGUgZmllbGRzIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IGEgVVVJRAogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkbnVtYmVyQ29udmVydGVyIFRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZQogICAgICogICAgIGZvciBjb252ZXJ0aW5nIGhleCB2YWx1ZXMgdG8vZnJvbSBpbnRlZ2VycwogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBUaGUgY29kZWMgdG8gdXNlIHdoZW4gZW5jb2Rpbmcgb3IgZGVjb2RpbmcKICAgICAqICAgICBVVUlEIHN0cmluZ3MKICAgICAqIEBwYXJhbSBUaW1lQ29udmVydGVySW50ZXJmYWNlICR0aW1lQ29udmVydGVyIFRoZSB0aW1lIGNvbnZlcnRlciB0byB1c2UKICAgICAqICAgICBmb3IgY29udmVydGluZyB0aW1lc3RhbXBzIGV4dHJhY3RlZCBmcm9tIGEgVVVJRCB0byB1bml4IHRpbWVzdGFtcHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJmYzQxMjJGaWVsZHNJbnRlcmZhY2UgJGZpZWxkcywKICAgICAgICBOdW1iZXJDb252ZXJ0ZXJJbnRlcmZhY2UgJG51bWJlckNvbnZlcnRlciwKICAgICAgICBDb2RlY0ludGVyZmFjZSAkY29kZWMsCiAgICAgICAgVGltZUNvbnZlcnRlckludGVyZmFjZSAkdGltZUNvbnZlcnRlcgogICAgKSB7CiAgICAgICAgJHRoaXMtPmZpZWxkcyA9ICRmaWVsZHM7CiAgICAgICAgJHRoaXMtPmNvZGVjID0gJGNvZGVjOwogICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIgPSAkbnVtYmVyQ29udmVydGVyOwogICAgICAgICR0aGlzLT50aW1lQ29udmVydGVyID0gJHRpbWVDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b1N0cmluZygpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgdGhlIFVVSUQgdG8gYSBzdHJpbmcgZm9yIEpTT04gc2VyaWFsaXphdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgVVVJRCB0byBhIHN0cmluZyBmb3IgUEhQIHNlcmlhbGl6YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldEZpZWxkcygpLT5nZXRCeXRlcygpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtieXRlczogc3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydieXRlcycgPT4gJHRoaXMtPnNlcmlhbGl6ZSgpXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlLWNvbnN0cnVjdHMgdGhlIG9iamVjdCBmcm9tIGl0cyBzZXJpYWxpemVkIGZvcm0KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIFBIUCBzdHJpbmcgdG8gdW5zZXJpYWxpemUgaW50bwogICAgICogICAgIGEgVXVpZEludGVyZmFjZSBpbnN0YW5jZQogICAgICoKICAgICAqIEBwaHBjc1N1cHByZXNzIFNsZXZvbWF0Q29kaW5nU3RhbmRhcmQuVHlwZUhpbnRzLlBhcmFtZXRlclR5cGVIaW50Lk1pc3NpbmdOYXRpdmVUeXBlSGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKHN0cmxlbigkc2VyaWFsaXplZCkgPT09IDE2KSB7CiAgICAgICAgICAgIC8qKiBAdmFyIFV1aWQgJHV1aWQgKi8KICAgICAgICAgICAgJHV1aWQgPSBzZWxmOjpnZXRGYWN0b3J5KCktPmZyb21CeXRlcygkc2VyaWFsaXplZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgVXVpZCAkdXVpZCAqLwogICAgICAgICAgICAkdXVpZCA9IHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbVN0cmluZygkc2VyaWFsaXplZCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29kZWMgPSAkdXVpZC0+Y29kZWM7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICR1dWlkLT5udW1iZXJDb252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPmZpZWxkcyA9ICR1dWlkLT5maWVsZHM7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkdXVpZC0+dGltZUNvbnZlcnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXtieXRlczogc3RyaW5nfSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNlcmlhbGl6ZShhcnJheSAkZGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlU3RhcnQKICAgICAgICBpZiAoIWlzc2V0KCRkYXRhWydieXRlcyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihzcHJpbnRmKCclcygpOiBBcmd1bWVudCAjMSAoJGRhdGEpIGlzIGludmFsaWQnLCBfX01FVEhPRF9fKSk7CiAgICAgICAgfQogICAgICAgIC8vIEBjb2RlQ292ZXJhZ2VJZ25vcmVFbmQKCiAgICAgICAgJHRoaXMtPnVuc2VyaWFsaXplKCRkYXRhWydieXRlcyddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKFV1aWRJbnRlcmZhY2UgJG90aGVyKTogaW50CiAgICB7CiAgICAgICAgJGNvbXBhcmUgPSBzdHJjbXAoJHRoaXMtPnRvU3RyaW5nKCksICRvdGhlci0+dG9TdHJpbmcoKSk7CgogICAgICAgIGlmICgkY29tcGFyZSA8IDApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRjb21wYXJlID4gMCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoP29iamVjdCAkb3RoZXIpOiBib29sCiAgICB7CiAgICAgICAgaWYgKCEkb3RoZXIgaW5zdGFuY2VvZiBVdWlkSW50ZXJmYWNlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZVRvKCRvdGhlcikgPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJ5dGVzKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29kZWMtPmVuY29kZUJpbmFyeSgkdGhpcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkcygpOiBGaWVsZHNJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBIZXhhZGVjaW1hbChzdHJfcmVwbGFjZSgnLScsICcnLCAkdGhpcy0+dG9TdHJpbmcoKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbnRlZ2VyKCk6IEludGVnZXJPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEludGVnZXJPYmplY3QoJHRoaXMtPm51bWJlckNvbnZlcnRlci0+ZnJvbUhleCgkdGhpcy0+Z2V0SGV4KCktPnRvU3RyaW5nKCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1yZXR1cm4gbm9uLWVtcHR5LXN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYy0+ZW5jb2RlKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgVVVJRHMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGYWN0b3J5KCk6IFV1aWRGYWN0b3J5SW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRmYWN0b3J5ID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGY6OiRmYWN0b3J5ID0gbmV3IFV1aWRGYWN0b3J5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIFVVSURzCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5IEEgZmFjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGlzCiAgICAgKiAgICAgY2xhc3MgdG8gY3JlYXRlIFVVSURzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RmFjdG9yeShVdWlkRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeSk6IHZvaWQKICAgIHsKICAgICAgICAvLyBOb3RlOiBub24tc3RyaWN0IGVxdWFsaXR5IGlzIGludGVudGlvbmFsIGhlcmUuIElmIHRoZSBmYWN0b3J5IGlzIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHksIGV2ZXJ5IGFzc3VtcHRpb24KICAgICAgICAvLyAgICAgICBhcm91bmQgcHVyaXR5IGlzIGJyb2tlbiwgYW5kIHdlIGhhdmUgdG8gaW50ZXJuYWxseSBkZWNpZGUgZXZlcnl0aGluZyBkaWZmZXJlbnRseS4KICAgICAgICAvLyBwaHBjczppZ25vcmUgU2xldm9tYXRDb2RpbmdTdGFuZGFyZC5PcGVyYXRvcnMuRGlzYWxsb3dFcXVhbE9wZXJhdG9ycy5EaXNhbGxvd2VkTm90RXF1YWxPcGVyYXRvcgogICAgICAgIHNlbGY6OiRmYWN0b3J5UmVwbGFjZWQgPSAoJGZhY3RvcnkgIT0gbmV3IFV1aWRGYWN0b3J5KCkpOwoKICAgICAgICBzZWxmOjokZmFjdG9yeSA9ICRmYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFVVSUQgZnJvbSBhIGJ5dGUgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgQSBiaW5hcnkgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSBjcmVhdGVkIGZyb20gYSBiaW5hcnkKICAgICAqICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljUHJvcGVydHkgd2Uga25vdyB0aGF0IHRoZSBmYWN0b3J5IGJlaW5nIHJlcGxhY2VkIGNhbiBsZWFkIHRvIG1hc3NpdmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnZW5lcmFsbHkgdG8gYmUgZGlzY291cmFnZWQuIFVudGlsIHRoZSBmYWN0b3J5IGlzIGtlcHQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bi1yZXBsYWNlZCwgdGhpcyBtZXRob2QgaXMgZWZmZWN0aXZlbHkgcHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQnl0ZXMoc3RyaW5nICRieXRlcyk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISBzZWxmOjokZmFjdG9yeVJlcGxhY2VkICYmIHN0cmxlbigkYnl0ZXMpID09PSAxNikgewogICAgICAgICAgICAkYmFzZTE2VXVpZCA9IGJpbjJoZXgoJGJ5dGVzKTsKCiAgICAgICAgICAgIC8vIE5vdGU6IHdlIGFyZSBjYWxsaW5nIGBmcm9tU3RyaW5nYCBpbnRlcm5hbGx5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgZ2l2ZW4gYCRieXRlc2AgaXMgYSB2YWxpZCBVVUlECiAgICAgICAgICAgIHJldHVybiBzZWxmOjpmcm9tU3RyaW5nKAogICAgICAgICAgICAgICAgc3Vic3RyKCRiYXNlMTZVdWlkLCAwLCA4KQogICAgICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCA4LCA0KQogICAgICAgICAgICAgICAgLiAnLScKICAgICAgICAgICAgICAgIC4gc3Vic3RyKCRiYXNlMTZVdWlkLCAxMiwgNCkKICAgICAgICAgICAgICAgIC4gJy0nCiAgICAgICAgICAgICAgICAuIHN1YnN0cigkYmFzZTE2VXVpZCwgMTYsIDQpCiAgICAgICAgICAgICAgICAuICctJwogICAgICAgICAgICAgICAgLiBzdWJzdHIoJGJhc2UxNlV1aWQsIDIwLCAxMikKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpnZXRGYWN0b3J5KCktPmZyb21CeXRlcygkYnl0ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFVVSUQgZnJvbSB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXVpZCBBIGhleGFkZWNpbWFsIHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIGEgaGV4YWRlY2ltYWwKICAgICAqICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW1wdXJlU3RhdGljUHJvcGVydHkgd2Uga25vdyB0aGF0IHRoZSBmYWN0b3J5IGJlaW5nIHJlcGxhY2VkIGNhbiBsZWFkIHRvIG1hc3NpdmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnZW5lcmFsbHkgdG8gYmUgZGlzY291cmFnZWQuIFVudGlsIHRoZSBmYWN0b3J5IGlzIGtlcHQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bi1yZXBsYWNlZCwgdGhpcyBtZXRob2QgaXMgZWZmZWN0aXZlbHkgcHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkdXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICBpZiAoISBzZWxmOjokZmFjdG9yeVJlcGxhY2VkICYmIHByZWdfbWF0Y2goTGF6eVV1aWRGcm9tU3RyaW5nOjpWQUxJRF9SRUdFWCwgJHV1aWQpID09PSAxKSB7CiAgICAgICAgICAgIGFzc2VydCgkdXVpZCAhPT0gJycpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXp5VXVpZEZyb21TdHJpbmcoc3RydG9sb3dlcigkdXVpZCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbVN0cmluZygkdXVpZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgRGF0ZVRpbWVJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lIFRoZSBkYXRlIGFuZCB0aW1lCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogICAgICogICAgIGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlEIGNyZWF0ZWQgZnJvbSBhIERhdGVUaW1lSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbURhdGVUaW1lKAogICAgICAgIERhdGVUaW1lSW50ZXJmYWNlICRkYXRlVGltZSwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+ZnJvbURhdGVUaW1lKCRkYXRlVGltZSwgJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgMTI4LWJpdCBpbnRlZ2VyIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGludGVnZXIgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIDEyOC1iaXQgaW50ZWdlcgogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIHRoZSBzdHJpbmcKICAgICAqICAgICByZXByZXNlbnRhdGlvbiBvZiBhIDEyOC1iaXQgaW50ZWdlcgogICAgICoKICAgICAqIEBwc2FsbS1wdXJlIG5vdGU6IGNoYW5naW5nIHRoZSBpbnRlcm5hbCBmYWN0b3J5IGlzIGFuIGVkZ2UgY2FzZSBub3QgY292ZXJlZCBieSBwdXJpdHkgaW52YXJpYW50cywKICAgICAqICAgICAgICAgICAgIGJ1dCB1bmRlciBjb25zdGFudCBmYWN0b3J5IHNldHVwcywgdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gZnVuY3Rpb25hbGx5IHB1cmUgbWFubmVycwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT5mcm9tSW50ZWdlcigkaW50ZWdlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIFVVSUQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1dWlkIEEgc3RyaW5nIHRvIHZhbGlkYXRlIGFzIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlELCBmYWxzZSBvdGhlcndpc2UKICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZSBub3RlOiBjaGFuZ2luZyB0aGUgaW50ZXJuYWwgZmFjdG9yeSBpcyBhbiBlZGdlIGNhc2Ugbm90IGNvdmVyZWQgYnkgcHVyaXR5IGludmFyaWFudHMsCiAgICAgKiAgICAgICAgICAgICBidXQgdW5kZXIgY29uc3RhbnQgZmFjdG9yeSBzZXR1cHMsIHRoaXMgbWV0aG9kIG9wZXJhdGVzIGluIGZ1bmN0aW9uYWxseSBwdXJlIG1hbm5lcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkKHN0cmluZyAkdXVpZCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT5nZXRWYWxpZGF0b3IoKS0+dmFsaWRhdGUoJHV1aWQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMSAodGltZS1iYXNlZCkgVVVJRCBmcm9tIGEgaG9zdCBJRCwgc2VxdWVuY2UgbnVtYmVyLAogICAgICogYW5kIHRoZSBjdXJyZW50IHRpbWUKICAgICAqCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8aW50fHN0cmluZ3xudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlCiAgICAgKiAgICAgaGFyZHdhcmUgYWRkcmVzczsgdGhpcyBudW1iZXIgbWF5IGJlIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgb3IgYQogICAgICogICAgIGhleGFkZWNpbWFsIHN0cmluZwogICAgICogQHBhcmFtIGludCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzIHRoYXQKICAgICAqICAgICBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlIG5vZGUgSUQKICAgICAqICAgICBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDEoJG5vZGUgPSBudWxsLCA/aW50ICRjbG9ja1NlcSA9IG51bGwpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDEoJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAyIChEQ0UgU2VjdXJpdHkpIFVVSUQgZnJvbSBhIGxvY2FsIGRvbWFpbiwgbG9jYWwKICAgICAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMgKGluIGEgdmVyc2lvbiAyIFVVSUQsIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhpcyBudW1iZXIKICAgICAqICAgICBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgZG9tYWluKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiAyIFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkMigKICAgICAgICBpbnQgJGxvY2FsRG9tYWluLAogICAgICAgID9JbnRlZ2VyT2JqZWN0ICRsb2NhbElkZW50aWZpZXIgPSBudWxsLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBVdWlkSW50ZXJmYWNlIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0RmFjdG9yeSgpLT51dWlkMigkbG9jYWxEb21haW4sICRsb2NhbElkZW50aWZpZXIsICRub2RlLCAkY2xvY2tTZXEpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMyAobmFtZS1iYXNlZCkgVVVJRCBiYXNlZCBvbiB0aGUgTUQ1IGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDMgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsIHdlIGtub3cgdGhhdCB0aGUgZmFjdG9yeSBiZWluZyByZXBsYWNlZCBjYW4gbGVhZCB0byBtYXNzaXZlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdlbmVyYWxseSB0byBiZSBkaXNjb3VyYWdlZC4gVW50aWwgdGhlIGZhY3RvcnkgaXMga2VwdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tcmVwbGFjZWQsIHRoaXMgbWV0aG9kIGlzIGVmZmVjdGl2ZWx5IHB1cmUuCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUgbm90ZTogY2hhbmdpbmcgdGhlIGludGVybmFsIGZhY3RvcnkgaXMgYW4gZWRnZSBjYXNlIG5vdCBjb3ZlcmVkIGJ5IHB1cml0eSBpbnZhcmlhbnRzLAogICAgICogICAgICAgICAgICAgYnV0IHVuZGVyIGNvbnN0YW50IGZhY3Rvcnkgc2V0dXBzLCB0aGlzIG1ldGhvZCBvcGVyYXRlcyBpbiBmdW5jdGlvbmFsbHkgcHVyZSBtYW5uZXJzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDMoJG5zLCBzdHJpbmcgJG5hbWUpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDMoJG5zLCAkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA0IChyYW5kb20pIFVVSUQKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiA0IFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkNCgpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDUgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlIG5vdGU6IGNoYW5naW5nIHRoZSBpbnRlcm5hbCBmYWN0b3J5IGlzIGFuIGVkZ2UgY2FzZSBub3QgY292ZXJlZCBieSBwdXJpdHkgaW52YXJpYW50cywKICAgICAqICAgICAgICAgICAgIGJ1dCB1bmRlciBjb25zdGFudCBmYWN0b3J5IHNldHVwcywgdGhpcyBtZXRob2Qgb3BlcmF0ZXMgaW4gZnVuY3Rpb25hbGx5IHB1cmUgbWFubmVycwogICAgICoKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbXB1cmVNZXRob2RDYWxsIHdlIGtub3cgdGhhdCB0aGUgZmFjdG9yeSBiZWluZyByZXBsYWNlZCBjYW4gbGVhZCB0byBtYXNzaXZlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZvYyBhY3Jvc3MgYWxsIGNvbnN1bWVyczogdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdlbmVyYWxseSB0byBiZSBkaXNjb3VyYWdlZC4gVW50aWwgdGhlIGZhY3RvcnkgaXMga2VwdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tcmVwbGFjZWQsIHRoaXMgbWV0aG9kIGlzIGVmZmVjdGl2ZWx5IHB1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXVpZDUoJG5zLCBzdHJpbmcgJG5hbWUpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDUoJG5zLCAkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA2IChvcmRlcmVkLXRpbWUpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUKICAgICAqICAgICBhZGRyZXNzCiAgICAgKiBAcGFyYW0gaW50ICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMgdGhhdAogICAgICogICAgIGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUgbm9kZSBJRAogICAgICogICAgIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiA2IFVVSUQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dWlkNigKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEZhY3RvcnkoKS0+dXVpZDYoJG5vZGUsICRjbG9ja1NlcSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQnVpbGRlclxVdWlkQnVpbGRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvZGVjXENvZGVjSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcQ29udmVydGVyXE51bWJlckNvbnZlcnRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXENvbnZlcnRlclxUaW1lQ29udmVydGVySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXERlZmF1bHRUaW1lR2VuZXJhdG9yOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXE5hbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxHZW5lcmF0b3JcUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcR2VuZXJhdG9yXFRpbWVHZW5lcmF0b3JJbnRlcmZhY2U7CnVzZSBSYW1zZXlcVXVpZFxMYXp5XExhenlVdWlkRnJvbVN0cmluZzsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXE5vZGVQcm92aWRlckludGVyZmFjZTsKdXNlIFJhbXNleVxVdWlkXFByb3ZpZGVyXFRpbWVcRml4ZWRUaW1lUHJvdmlkZXI7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXEhleGFkZWNpbWFsOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxJbnRlZ2VyIGFzIEludGVnZXJPYmplY3Q7CnVzZSBSYW1zZXlcVXVpZFxUeXBlXFRpbWU7CnVzZSBSYW1zZXlcVXVpZFxWYWxpZGF0b3JcVmFsaWRhdG9ySW50ZXJmYWNlOwoKdXNlIGZ1bmN0aW9uIGJpbjJoZXg7CnVzZSBmdW5jdGlvbiBoZXgyYmluOwp1c2UgZnVuY3Rpb24gcGFjazsKdXNlIGZ1bmN0aW9uIHN0cl9wYWQ7CnVzZSBmdW5jdGlvbiBzdHJ0b2xvd2VyOwp1c2UgZnVuY3Rpb24gc3Vic3RyOwp1c2UgZnVuY3Rpb24gc3Vic3RyX3JlcGxhY2U7CnVzZSBmdW5jdGlvbiB1bnBhY2s7Cgp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKY2xhc3MgVXVpZEZhY3RvcnkgaW1wbGVtZW50cyBVdWlkRmFjdG9yeUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ29kZWNJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY29kZWM7CgogICAgLyoqCiAgICAgKiBAdmFyIERjZVNlY3VyaXR5R2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGRjZVNlY3VyaXR5R2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBOYW1lR2VuZXJhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG5hbWVHZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIE5vZGVQcm92aWRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRub2RlUHJvdmlkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE51bWJlckNvbnZlcnRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRudW1iZXJDb252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyYW5kb21HZW5lcmF0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIFRpbWVDb252ZXJ0ZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGltZUNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR0aW1lR2VuZXJhdG9yOwoKICAgIC8qKgogICAgICogQHZhciBVdWlkQnVpbGRlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICR1dWlkQnVpbGRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgVmFsaWRhdG9ySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbGlkYXRvcjsKCiAgICAvKiogQHZhciBib29sIHdoZXRoZXIgdGhlIGZlYXR1cmUgc2V0IHdhcyBwcm92aWRlZCBmcm9tIG91dHNpZGUsIG9yIHdlIGNhbiBvcGVyYXRlIHVuZGVyICJkZWZhdWx0IiBhc3N1bXB0aW9ucyAqLwogICAgcHJpdmF0ZSAkaXNEZWZhdWx0RmVhdHVyZVNldDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBGZWF0dXJlU2V0ICRmZWF0dXJlcyBBIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9GZWF0dXJlU2V0ICRmZWF0dXJlcyA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSAkZmVhdHVyZXMgPT09IG51bGw7CgogICAgICAgICRmZWF0dXJlcyA9ICRmZWF0dXJlcyA/OiBuZXcgRmVhdHVyZVNldCgpOwoKICAgICAgICAkdGhpcy0+Y29kZWMgPSAkZmVhdHVyZXMtPmdldENvZGVjKCk7CiAgICAgICAgJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yID0gJGZlYXR1cmVzLT5nZXREY2VTZWN1cml0eUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT5uYW1lR2VuZXJhdG9yID0gJGZlYXR1cmVzLT5nZXROYW1lR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciA9ICRmZWF0dXJlcy0+Z2V0Tm9kZVByb3ZpZGVyKCk7CiAgICAgICAgJHRoaXMtPm51bWJlckNvbnZlcnRlciA9ICRmZWF0dXJlcy0+Z2V0TnVtYmVyQ29udmVydGVyKCk7CiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICRmZWF0dXJlcy0+Z2V0UmFuZG9tR2VuZXJhdG9yKCk7CiAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIgPSAkZmVhdHVyZXMtPmdldFRpbWVDb252ZXJ0ZXIoKTsKICAgICAgICAkdGhpcy0+dGltZUdlbmVyYXRvciA9ICRmZWF0dXJlcy0+Z2V0VGltZUdlbmVyYXRvcigpOwogICAgICAgICR0aGlzLT51dWlkQnVpbGRlciA9ICRmZWF0dXJlcy0+Z2V0QnVpbGRlcigpOwogICAgICAgICR0aGlzLT52YWxpZGF0b3IgPSAkZmVhdHVyZXMtPmdldFZhbGlkYXRvcigpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29kZWMgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvZGVjKCk6IENvZGVjSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNvZGVjIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIENvZGVjSW50ZXJmYWNlICRjb2RlYyBBIFVVSUQgZW5jb2Rlci1kZWNvZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2RlYyhDb2RlY0ludGVyZmFjZSAkY29kZWMpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPmNvZGVjID0gJGNvZGVjOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBnZW5lcmF0b3IgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVHZW5lcmF0b3IoKTogTmFtZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZUdlbmVyYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG5hbWUgZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIE5hbWVHZW5lcmF0b3JJbnRlcmZhY2UgJG5hbWVHZW5lcmF0b3IgQSBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUKICAgICAqICAgICBiaW5hcnkgZGF0YSwgYmFzZWQgb24gYSBuYW1lc3BhY2UgYW5kIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWVHZW5lcmF0b3IoTmFtZUdlbmVyYXRvckludGVyZmFjZSAkbmFtZUdlbmVyYXRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+aXNEZWZhdWx0RmVhdHVyZVNldCA9IGZhbHNlOwoKICAgICAgICAkdGhpcy0+bmFtZUdlbmVyYXRvciA9ICRuYW1lR2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbm9kZSBwcm92aWRlciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZVByb3ZpZGVyKCk6IE5vZGVQcm92aWRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm9kZVByb3ZpZGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmFuZG9tIGdlbmVyYXRvciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmFuZG9tR2VuZXJhdG9yKCk6IFJhbmRvbUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmFuZG9tR2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGltZSBnZW5lcmF0b3IgdXNlZCBieSB0aGlzIGZhY3RvcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVHZW5lcmF0b3IoKTogVGltZUdlbmVyYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGltZUdlbmVyYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWUgZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFRpbWVHZW5lcmF0b3JJbnRlcmZhY2UgJGdlbmVyYXRvciBBIGdlbmVyYXRvciB0byBnZW5lcmF0ZSBiaW5hcnkKICAgICAqICAgICBkYXRhLCBiYXNlZCBvbiB0aGUgdGltZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZUdlbmVyYXRvcihUaW1lR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnRpbWVHZW5lcmF0b3IgPSAkZ2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciB1c2VkIGJ5IHRoaXMgZmFjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGNlU2VjdXJpdHlHZW5lcmF0b3IoKTogRGNlU2VjdXJpdHlHZW5lcmF0b3JJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgRENFIFNlY3VyaXR5IGdlbmVyYXRvciB0byB1c2UgZm9yIHRoaXMgZmFjdG9yeQogICAgICoKICAgICAqIEBwYXJhbSBEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yIEEgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlCiAgICAgKiAgICAgYmluYXJ5IGRhdGEsIGJhc2VkIG9uIGEgbG9jYWwgZG9tYWluIGFuZCBsb2NhbCBpZGVudGlmaWVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREY2VTZWN1cml0eUdlbmVyYXRvcihEY2VTZWN1cml0eUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5pc0RlZmF1bHRGZWF0dXJlU2V0ID0gZmFsc2U7CgogICAgICAgICR0aGlzLT5kY2VTZWN1cml0eUdlbmVyYXRvciA9ICRnZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgY29udmVydGVyIHVzZWQgYnkgdGhpcyBmYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROdW1iZXJDb252ZXJ0ZXIoKTogTnVtYmVyQ29udmVydGVySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5udW1iZXJDb252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSByYW5kb20gZ2VuZXJhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFJhbmRvbUdlbmVyYXRvckludGVyZmFjZSAkZ2VuZXJhdG9yIEEgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGJpbmFyeQogICAgICogICAgIGRhdGEsIGJhc2VkIG9uIHNvbWUgcmFuZG9tIGlucHV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSYW5kb21HZW5lcmF0b3IoUmFuZG9tR2VuZXJhdG9ySW50ZXJmYWNlICRnZW5lcmF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnJhbmRvbUdlbmVyYXRvciA9ICRnZW5lcmF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBudW1iZXIgY29udmVydGVyIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkY29udmVydGVyIEEgY29udmVydGVyIHRvIHVzZSBmb3Igd29ya2luZwogICAgICogICAgIHdpdGggbGFyZ2UgaW50ZWdlcnMgKGkuZS4gaW50ZWdlcnMgZ3JlYXRlciB0aGFuIFBIUF9JTlRfTUFYKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TnVtYmVyQ29udmVydGVyKE51bWJlckNvbnZlcnRlckludGVyZmFjZSAkY29udmVydGVyKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5pc0RlZmF1bHRGZWF0dXJlU2V0ID0gZmFsc2U7CgogICAgICAgICR0aGlzLT5udW1iZXJDb252ZXJ0ZXIgPSAkY29udmVydGVyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgVVVJRCBidWlsZGVyIHVzZWQgYnkgdGhpcyBmYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVdWlkQnVpbGRlcigpOiBVdWlkQnVpbGRlckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEJ1aWxkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBVVUlEIGJ1aWxkZXIgdG8gdXNlIGZvciB0aGlzIGZhY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gVXVpZEJ1aWxkZXJJbnRlcmZhY2UgJGJ1aWxkZXIgQSBidWlsZGVyIGZvciBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzCiAgICAgKiAgICAgb2YgVXVpZEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXVpZEJ1aWxkZXIoVXVpZEJ1aWxkZXJJbnRlcmZhY2UgJGJ1aWxkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnV1aWRCdWlsZGVyID0gJGJ1aWxkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsaWRhdG9yOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdGhpcyBmYWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIFZhbGlkYXRvckludGVyZmFjZSAkdmFsaWRhdG9yIEEgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdmFsaWRhdGluZwogICAgICogICAgIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWYWxpZGF0b3IoVmFsaWRhdG9ySW50ZXJmYWNlICR2YWxpZGF0b3IpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmlzRGVmYXVsdEZlYXR1cmVTZXQgPSBmYWxzZTsKCiAgICAgICAgJHRoaXMtPnZhbGlkYXRvciA9ICR2YWxpZGF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbUJ5dGVzKHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2RlYy0+ZGVjb2RlQnl0ZXMoJGJ5dGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZyAkdXVpZCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkdXVpZCA9IHN0cnRvbG93ZXIoJHV1aWQpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmNvZGVjLT5kZWNvZGUoJHV1aWQpOwogICAgfQoKICAgIC8qKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkaGV4ID0gJHRoaXMtPm51bWJlckNvbnZlcnRlci0+dG9IZXgoJGludGVnZXIpOwogICAgICAgICRoZXggPSBzdHJfcGFkKCRoZXgsIDMyLCAnMCcsIFNUUl9QQURfTEVGVCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+ZnJvbVN0cmluZygkaGV4KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbURhdGVUaW1lKAogICAgICAgIERhdGVUaW1lSW50ZXJmYWNlICRkYXRlVGltZSwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgJHRpbWVQcm92aWRlciA9IG5ldyBGaXhlZFRpbWVQcm92aWRlcigKICAgICAgICAgICAgbmV3IFRpbWUoJGRhdGVUaW1lLT5mb3JtYXQoJ1UnKSwgJGRhdGVUaW1lLT5mb3JtYXQoJ3UnKSkKICAgICAgICApOwoKICAgICAgICAkdGltZUdlbmVyYXRvciA9IG5ldyBEZWZhdWx0VGltZUdlbmVyYXRvcigKICAgICAgICAgICAgJHRoaXMtPm5vZGVQcm92aWRlciwKICAgICAgICAgICAgJHRoaXMtPnRpbWVDb252ZXJ0ZXIsCiAgICAgICAgICAgICR0aW1lUHJvdmlkZXIKICAgICAgICApOwoKICAgICAgICAkbm9kZUhleCA9ICRub2RlID8gJG5vZGUtPnRvU3RyaW5nKCkgOiBudWxsOwoKICAgICAgICAkYnl0ZXMgPSAkdGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGVIZXgsICRjbG9ja1NlcSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oJGJ5dGVzLCAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbmhlcml0RG9jCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkYnl0ZXMgPSAkdGhpcy0+dGltZUdlbmVyYXRvci0+Z2VuZXJhdGUoJG5vZGUsICRjbG9ja1NlcSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oJGJ5dGVzLCAxKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDIoCiAgICAgICAgaW50ICRsb2NhbERvbWFpbiwKICAgICAgICA/SW50ZWdlck9iamVjdCAkbG9jYWxJZGVudGlmaWVyID0gbnVsbCwKICAgICAgICA/SGV4YWRlY2ltYWwgJG5vZGUgPSBudWxsLAogICAgICAgID9pbnQgJGNsb2NrU2VxID0gbnVsbAogICAgKTogVXVpZEludGVyZmFjZSB7CiAgICAgICAgJGJ5dGVzID0gJHRoaXMtPmRjZVNlY3VyaXR5R2VuZXJhdG9yLT5nZW5lcmF0ZSgKICAgICAgICAgICAgJGxvY2FsRG9tYWluLAogICAgICAgICAgICAkbG9jYWxJZGVudGlmaWVyLAogICAgICAgICAgICAkbm9kZSwKICAgICAgICAgICAgJGNsb2NrU2VxCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkYnl0ZXMsIDIpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMygkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWRGcm9tTnNBbmROYW1lKCRucywgJG5hbWUsIDMsICdtZDUnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgICRieXRlcyA9ICR0aGlzLT5yYW5kb21HZW5lcmF0b3ItPmdlbmVyYXRlKDE2KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkYnl0ZXMsIDQpOwogICAgfQoKICAgIC8qKgogICAgICogQGluaGVyaXREb2MKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkNSgkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnV1aWRGcm9tTnNBbmROYW1lKCRucywgJG5hbWUsIDUsICdzaGExJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQ2KD9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAkbm9kZUhleCA9ICRub2RlID8gJG5vZGUtPnRvU3RyaW5nKCkgOiBudWxsOwogICAgICAgICRieXRlcyA9ICR0aGlzLT50aW1lR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbm9kZUhleCwgJGNsb2NrU2VxKTsKCiAgICAgICAgLy8gUmVhcnJhbmdlIHRoZSBieXRlcywgYWNjb3JkaW5nIHRvIHRoZSBVVUlEIHZlcnNpb24gNiBzcGVjaWZpY2F0aW9uLgogICAgICAgICR2NiA9ICRieXRlc1s2XSAuICRieXRlc1s3XSAuICRieXRlc1s0XSAuICRieXRlc1s1XQogICAgICAgICAgICAuICRieXRlc1swXSAuICRieXRlc1sxXSAuICRieXRlc1syXSAuICRieXRlc1szXTsKICAgICAgICAkdjYgPSBiaW4yaGV4KCR2Nik7CgogICAgICAgIC8vIERyb3AgdGhlIGZpcnN0IGZvdXIgYml0cywgd2hpbGUgYWRkaW5nIGFuIGVtcHR5IGZvdXIgYml0cyBmb3IgdGhlCiAgICAgICAgLy8gdmVyc2lvbiBmaWVsZC4gVGhpcyBhbGxvd3MgdXMgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvcnJlY3QgdGltZSBmcm9tCiAgICAgICAgLy8gdGhlIGJ5dGVzIG9mIHRoaXMgVVVJRC4KICAgICAgICAkdjZCeXRlcyA9IGhleDJiaW4oc3Vic3RyKCR2NiwgMSwgMTIpIC4gJzAnIC4gc3Vic3RyKCR2NiwgLTMpKTsKICAgICAgICAkdjZCeXRlcyAuPSBzdWJzdHIoJGJ5dGVzLCA4KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkRnJvbUJ5dGVzQW5kVmVyc2lvbigkdjZCeXRlcywgNik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgVXVpZCBjcmVhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGJ5dGUgc3RyaW5nCiAgICAgKgogICAgICogVXNlcyB0aGUgY29uZmlndXJlZCBidWlsZGVyIGFuZCBjb2RlYyBhbmQgdGhlIHByb3ZpZGVkIGJ5dGUgc3RyaW5nIHRvCiAgICAgKiBjb25zdHJ1Y3QgYSBVdWlkIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRieXRlcyBUaGUgYnl0ZSBzdHJpbmcgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgYSBVVUlECiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEFuIGluc3RhbmNlIG9mIFV1aWRJbnRlcmZhY2UsIGNyZWF0ZWQgZnJvbSB0aGUKICAgICAqICAgICBwcm92aWRlZCBieXRlcwogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkKHN0cmluZyAkYnl0ZXMpOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51dWlkQnVpbGRlci0+YnVpbGQoJHRoaXMtPmNvZGVjLCAkYnl0ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gMyBvciA1IG5hbWVzcGFjZWQgVXVpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXVpZEludGVyZmFjZSAkbnMgVGhlIG5hbWVzcGFjZSAobXVzdCBiZSBhIHZhbGlkIFVVSUQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIGhhc2ggdG9nZXRoZXIgd2l0aCB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gaW50ICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIFVVSUQgdG8gY3JlYXRlICgzIG9yIDUpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYXNoQWxnb3JpdGhtIFRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2Ugd2hlbiBoYXNoaW5nCiAgICAgKiAgICAgdG9nZXRoZXIgdGhlIG5hbWVzcGFjZSBhbmQgbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBVdWlkSW50ZXJmYWNlLCBjcmVhdGVkIGJ5IGhhc2hpbmcKICAgICAqICAgICB0b2dldGhlciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIGFuZCBuYW1lCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB1dWlkRnJvbU5zQW5kTmFtZSgkbnMsIHN0cmluZyAkbmFtZSwgaW50ICR2ZXJzaW9uLCBzdHJpbmcgJGhhc2hBbGdvcml0aG0pOiBVdWlkSW50ZXJmYWNlCiAgICB7CiAgICAgICAgaWYgKCEoJG5zIGluc3RhbmNlb2YgVXVpZEludGVyZmFjZSkpIHsKICAgICAgICAgICAgJG5zID0gJHRoaXMtPmZyb21TdHJpbmcoJG5zKTsKICAgICAgICB9CgogICAgICAgICRieXRlcyA9ICR0aGlzLT5uYW1lR2VuZXJhdG9yLT5nZW5lcmF0ZSgkbnMsICRuYW1lLCAkaGFzaEFsZ29yaXRobSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZEZyb21CeXRlc0FuZFZlcnNpb24oc3Vic3RyKCRieXRlcywgMCwgMTYpLCAkdmVyc2lvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIFJGQyA0MTIyIHZhcmlhbnQgVXVpZCwgY3JlYXRlZCBmcm9tIHRoZSBwcm92aWRlZCBieXRlcyBhbmQgdmVyc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIFRoZSBieXRlIHN0cmluZyB0byBjb252ZXJ0IHRvIGEgVVVJRAogICAgICogQHBhcmFtIGludCAkdmVyc2lvbiBUaGUgUkZDIDQxMjIgdmVyc2lvbiB0byBhcHBseSB0byB0aGUgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBbiBpbnN0YW5jZSBvZiBVdWlkSW50ZXJmYWNlLCBjcmVhdGVkIGZyb20gdGhlCiAgICAgKiAgICAgYnl0ZSBzdHJpbmcgYW5kIHZlcnNpb24KICAgICAqCiAgICAgKiBAcHNhbG0tcHVyZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHV1aWRGcm9tQnl0ZXNBbmRWZXJzaW9uKHN0cmluZyAkYnl0ZXMsIGludCAkdmVyc2lvbik6IFV1aWRJbnRlcmZhY2UKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheSAkdW5wYWNrZWRUaW1lICovCiAgICAgICAgJHVucGFja2VkVGltZSA9IHVucGFjaygnbionLCBzdWJzdHIoJGJ5dGVzLCA2LCAyKSk7CiAgICAgICAgJHRpbWVIaSA9IChpbnQpICR1bnBhY2tlZFRpbWVbMV07CiAgICAgICAgJHRpbWVIaUFuZFZlcnNpb24gPSBwYWNrKCduKicsIEJpbmFyeVV0aWxzOjphcHBseVZlcnNpb24oJHRpbWVIaSwgJHZlcnNpb24pKTsKCiAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHVucGFja2VkQ2xvY2tTZXEgKi8KICAgICAgICAkdW5wYWNrZWRDbG9ja1NlcSA9IHVucGFjaygnbionLCBzdWJzdHIoJGJ5dGVzLCA4LCAyKSk7CiAgICAgICAgJGNsb2NrU2VxSGkgPSAoaW50KSAkdW5wYWNrZWRDbG9ja1NlcVsxXTsKICAgICAgICAkY2xvY2tTZXFIaUFuZFJlc2VydmVkID0gcGFjaygnbionLCBCaW5hcnlVdGlsczo6YXBwbHlWYXJpYW50KCRjbG9ja1NlcUhpKSk7CgogICAgICAgICRieXRlcyA9IHN1YnN0cl9yZXBsYWNlKCRieXRlcywgJHRpbWVIaUFuZFZlcnNpb24sIDYsIDIpOwogICAgICAgICRieXRlcyA9IHN1YnN0cl9yZXBsYWNlKCRieXRlcywgJGNsb2NrU2VxSGlBbmRSZXNlcnZlZCwgOCwgMik7CgogICAgICAgIGlmICgkdGhpcy0+aXNEZWZhdWx0RmVhdHVyZVNldCkgewogICAgICAgICAgICByZXR1cm4gTGF6eVV1aWRGcm9tU3RyaW5nOjpmcm9tQnl0ZXMoJGJ5dGVzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dXVpZCgkYnl0ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgUmFtc2V5XFV1aWRcVmFsaWRhdG9yXFZhbGlkYXRvckludGVyZmFjZTsKCi8qKgogKiBVdWlkRmFjdG9yeUludGVyZmFjZSBkZWZpbmVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFsbCBgVXVpZEZhY3RvcnlgIGluc3RhbmNlcwogKiBtdXN0IGltcGxlbWVudAogKi8KaW50ZXJmYWNlIFV1aWRGYWN0b3J5SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsaWRhdG9yIHRvIHVzZSBmb3IgdGhlIGZhY3RvcnkKICAgICAqCiAgICAgKiBAcHNhbG0tbXV0YXRpb24tZnJlZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yKCk6IFZhbGlkYXRvckludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDEgKHRpbWUtYmFzZWQpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfGludHxzdHJpbmd8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZQogICAgICogICAgIGhhcmR3YXJlIGFkZHJlc3M7IHRoaXMgbnVtYmVyIG1heSBiZSByZXByZXNlbnRlZCBhcyBhbiBpbnRlZ2VyIG9yIGEKICAgICAqICAgICBoZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkMSgkbm9kZSA9IG51bGwsID9pbnQgJGNsb2NrU2VxID0gbnVsbCk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAyIChEQ0UgU2VjdXJpdHkpIFVVSUQgZnJvbSBhIGxvY2FsIGRvbWFpbiwgbG9jYWwKICAgICAqIGlkZW50aWZpZXIsIGhvc3QgSUQsIGNsb2NrIHNlcXVlbmNlLCBhbmQgdGhlIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2FsRG9tYWluIFRoZSBsb2NhbCBkb21haW4gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBieXRlcywKICAgICAqICAgICBhY2NvcmRpbmcgdG8gRENFIFNlY3VyaXR5CiAgICAgKiBAcGFyYW0gSW50ZWdlck9iamVjdHxudWxsICRsb2NhbElkZW50aWZpZXIgVGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yIHRoZQogICAgICogICAgIGdpdmVuIGRvbWFpbjsgdGhpcyBtYXkgYmUgYSBVSUQgb3IgR0lEIG9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSBsb2NhbAogICAgICogICAgIGRvbWFpbiBpcyBwZXJzb24gb3IgZ3JvdXAsIG9yIGl0IG1heSBiZSBhIHNpdGUtZGVmaW5lZCBpZGVudGlmaWVyCiAgICAgKiAgICAgaWYgdGhlIGxvY2FsIGRvbWFpbiBpcyBvcmcKICAgICAqIEBwYXJhbSBIZXhhZGVjaW1hbHxudWxsICRub2RlIEEgNDgtYml0IG51bWJlciByZXByZXNlbnRpbmcgdGhlIGhhcmR3YXJlCiAgICAgKiAgICAgYWRkcmVzcwogICAgICogQHBhcmFtIGludHxudWxsICRjbG9ja1NlcSBBIDE0LWJpdCBudW1iZXIgdXNlZCB0byBoZWxwIGF2b2lkIGR1cGxpY2F0ZXMKICAgICAqICAgICB0aGF0IGNvdWxkIGFyaXNlIHdoZW4gdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMgaW4gdGltZSBvciBpZiB0aGUKICAgICAqICAgICBub2RlIElEIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyBhCiAgICAgKiAgICAgdmVyc2lvbiAyIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQyKAogICAgICAgIGludCAkbG9jYWxEb21haW4sCiAgICAgICAgP0ludGVnZXJPYmplY3QgJGxvY2FsSWRlbnRpZmllciA9IG51bGwsCiAgICAgICAgP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwKICAgICAgICA/aW50ICRjbG9ja1NlcSA9IG51bGwKICAgICk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiAzIChuYW1lLWJhc2VkKSBVVUlEIGJhc2VkIG9uIHRoZSBNRDUgaGFzaCBvZiBhCiAgICAgKiBuYW1lc3BhY2UgSUQgYW5kIGEgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8VXVpZEludGVyZmFjZSAkbnMgVGhlIG5hbWVzcGFjZSAobXVzdCBiZSBhIHZhbGlkIFVVSUQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgY3JlYXRpbmcgYSBVVUlECiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMyBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV1aWQzKCRucywgc3RyaW5nICRuYW1lKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDQgKHJhbmRvbSkgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDQgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDQoKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB2ZXJzaW9uIDUgKG5hbWUtYmFzZWQpIFVVSUQgYmFzZWQgb24gdGhlIFNIQS0xIGhhc2ggb2YgYQogICAgICogbmFtZXNwYWNlIElEIGFuZCBhIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFV1aWRJbnRlcmZhY2UgJG5zIFRoZSBuYW1lc3BhY2UgKG11c3QgYmUgYSB2YWxpZCBVVUlEKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIGNyZWF0aW5nIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDUgVVVJRAogICAgICoKICAgICAqIEBwc2FsbS1wdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkNSgkbnMsIHN0cmluZyAkbmFtZSk6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdmVyc2lvbiA2IChvcmRlcmVkLXRpbWUpIFVVSUQgZnJvbSBhIGhvc3QgSUQsIHNlcXVlbmNlIG51bWJlciwKICAgICAqIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgICAgKgogICAgICogQHBhcmFtIEhleGFkZWNpbWFsfG51bGwgJG5vZGUgQSA0OC1iaXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUKICAgICAqICAgICBhZGRyZXNzCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGNsb2NrU2VxIEEgMTQtYml0IG51bWJlciB1c2VkIHRvIGhlbHAgYXZvaWQgZHVwbGljYXRlcwogICAgICogICAgIHRoYXQgY291bGQgYXJpc2Ugd2hlbiB0aGUgY2xvY2sgaXMgc2V0IGJhY2t3YXJkcyBpbiB0aW1lIG9yIGlmIHRoZQogICAgICogICAgIG5vZGUgSUQgY2hhbmdlcwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgdGhhdCByZXByZXNlbnRzIGEKICAgICAqICAgICB2ZXJzaW9uIDYgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXVpZDYoP0hleGFkZWNpbWFsICRub2RlID0gbnVsbCwgP2ludCAkY2xvY2tTZXEgPSBudWxsKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gYSBieXRlIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzIEEgYmluYXJ5IHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gVXVpZEludGVyZmFjZSBBIFV1aWRJbnRlcmZhY2UgaW5zdGFuY2UgY3JlYXRlZCBmcm9tIGEgYmluYXJ5CiAgICAgKiAgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21CeXRlcyhzdHJpbmcgJGJ5dGVzKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gdGhlIHN0cmluZyBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHV1aWQgQSBoZXhhZGVjaW1hbCBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIFV1aWRJbnRlcmZhY2UgQSBVdWlkSW50ZXJmYWNlIGluc3RhbmNlIGNyZWF0ZWQgZnJvbSBhIGhleGFkZWNpbWFsCiAgICAgKiAgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyaW5nICR1dWlkKTogVXVpZEludGVyZmFjZTsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVVUlEIGZyb20gYSAxMjgtYml0IGludGVnZXIgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW50ZWdlciBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgMTI4LWJpdCBpbnRlZ2VyCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSBjcmVhdGVkIGZyb20gdGhlIHN0cmluZwogICAgICogICAgIHJlcHJlc2VudGF0aW9uIG9mIGEgMTI4LWJpdCBpbnRlZ2VyCiAgICAgKgogICAgICogQHBzYWxtLXB1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21JbnRlZ2VyKHN0cmluZyAkaW50ZWdlcik6IFV1aWRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVVVJRCBmcm9tIGEgRGF0ZVRpbWVJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lIFRoZSBkYXRlIGFuZCB0aW1lCiAgICAgKiBAcGFyYW0gSGV4YWRlY2ltYWx8bnVsbCAkbm9kZSBBIDQ4LWJpdCBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBoYXJkd2FyZQogICAgICogICAgIGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY2xvY2tTZXEgQSAxNC1iaXQgbnVtYmVyIHVzZWQgdG8gaGVscCBhdm9pZCBkdXBsaWNhdGVzCiAgICAgKiAgICAgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRoZSBjbG9jayBpcyBzZXQgYmFja3dhcmRzIGluIHRpbWUgb3IgaWYgdGhlCiAgICAgKiAgICAgbm9kZSBJRCBjaGFuZ2VzCiAgICAgKgogICAgICogQHJldHVybiBVdWlkSW50ZXJmYWNlIEEgVXVpZEludGVyZmFjZSBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMgYQogICAgICogICAgIHZlcnNpb24gMSBVVUlEIGNyZWF0ZWQgZnJvbSBhIERhdGVUaW1lSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcm9tRGF0ZVRpbWUoCiAgICAgICAgRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGVUaW1lLAogICAgICAgID9IZXhhZGVjaW1hbCAkbm9kZSA9IG51bGwsCiAgICAgICAgP2ludCAkY2xvY2tTZXEgPSBudWxsCiAgICApOiBVdWlkSW50ZXJmYWNlOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/UuidInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBSYW1zZXlcVXVpZFxGaWVsZHNcRmllbGRzSW50ZXJmYWNlOwp1c2UgUmFtc2V5XFV1aWRcVHlwZVxIZXhhZGVjaW1hbDsKdXNlIFJhbXNleVxVdWlkXFR5cGVcSW50ZWdlciBhcyBJbnRlZ2VyT2JqZWN0Owp1c2UgU2VyaWFsaXphYmxlOwoKLyoqCiAqIEEgVVVJRCBpcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGFkaGVyaW5nIHRvIGFuIGFncmVlZC11cG9uCiAqIHJlcHJlc2VudGF0aW9uIGZvcm1hdCBhbmQgc3RhbmRhcmQgZm9yIGdlbmVyYXRpb24KICoKICogQHBzYWxtLWltbXV0YWJsZQogKi8KaW50ZXJmYWNlIFV1aWRJbnRlcmZhY2UgZXh0ZW5kcwogICAgRGVwcmVjYXRlZFV1aWRJbnRlcmZhY2UsCiAgICBKc29uU2VyaWFsaXphYmxlLAogICAgU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogUmV0dXJucyAtMSwgMCwgb3IgMSBpZiB0aGUgVVVJRCBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KICAgICAqIHRoZSBvdGhlciBVVUlECiAgICAgKgogICAgICogVGhlIGZpcnN0IG9mIHR3byBVVUlEcyBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBpZiB0aGUgbW9zdAogICAgICogc2lnbmlmaWNhbnQgZmllbGQgaW4gd2hpY2ggdGhlIFVVSURzIGRpZmZlciBpcyBncmVhdGVyIGZvciB0aGUgZmlyc3QKICAgICAqIFVVSUQuCiAgICAgKgogICAgICogKiBRLiBXaGF0J3MgdGhlIHZhbHVlIG9mIGJlaW5nIGFibGUgdG8gc29ydCBVVUlEcz8KICAgICAqICogQS4gVXNlIHRoZW0gYXMga2V5cyBpbiBhIEItVHJlZSBvciBzaW1pbGFyIG1hcHBpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFV1aWRJbnRlcmZhY2UgJG90aGVyIFRoZSBVVUlEIHRvIGNvbXBhcmUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCAtMSwgMCwgb3IgMSBpZiB0aGUgVVVJRCBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gJG90aGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlVG8oVXVpZEludGVyZmFjZSAkb3RoZXIpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFVVSUQgaXMgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIG9iamVjdAogICAgICoKICAgICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgYXJndW1lbnQgaXMgbm90IG51bGwsIGlzIGEgVVVJRAogICAgICogb2JqZWN0LCBoYXMgdGhlIHNhbWUgdmFyaWFudCwgYW5kIGNvbnRhaW5zIHRoZSBzYW1lIHZhbHVlLCBiaXQgZm9yIGJpdCwKICAgICAqIGFzIHRoZSBVVUlELgogICAgICoKICAgICAqIEBwYXJhbSBvYmplY3R8bnVsbCAkb3RoZXIgQW4gb2JqZWN0IHRvIHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhpcyBVVUlECiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIG90aGVyIG9iamVjdCBpcyBlcXVhbCB0byB0aGlzIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVxdWFscyg/b2JqZWN0ICRvdGhlcik6IGJvb2w7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBiaW5hcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeXRlcygpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaWVsZHMgdGhhdCBjb21wcmlzZSB0aGlzIFVVSUQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkcygpOiBGaWVsZHNJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGV4KCk6IEhleGFkZWNpbWFsOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVVJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZWdlcigpOiBJbnRlZ2VyT2JqZWN0OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVVUlECiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBDYXN0cyB0aGUgVVVJRCB0byB0aGUgc3RyaW5nIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/GenericValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFZhbGlkYXRvcjsKCnVzZSBSYW1zZXlcVXVpZFxVdWlkOwoKdXNlIGZ1bmN0aW9uIHByZWdfbWF0Y2g7CnVzZSBmdW5jdGlvbiBzdHJfcmVwbGFjZTsKCi8qKgogKiBHZW5lcmljVmFsaWRhdG9yIHZhbGlkYXRlcyBzdHJpbmdzIGFzIFVVSURzIG9mIGFueSB2YXJpYW50CiAqCiAqIEBwc2FsbS1pbW11dGFibGUKICovCmZpbmFsIGNsYXNzIEdlbmVyaWNWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3JJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBmb3IgbWF0Y2hpbmcgYSBVVUlEIG9mIGFueSB2YXJpYW50LgogICAgICovCiAgICBwcml2YXRlIGNvbnN0IFZBTElEX1BBVFRFUk4gPSAnXEFbMC05QS1GYS1mXXs4fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXs0fS1bMC05QS1GYS1mXXsxMn1ceic7CgogICAgLyoqCiAgICAgKiBAcHNhbG0tcmV0dXJuIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNb3JlU3BlY2lmaWNSZXR1cm5UeXBlIHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTGVzc1NwZWNpZmljUmV0dXJuU3RhdGVtZW50IHdlIGtub3cgdGhhdCB0aGUgcmV0cmlldmVkIGBzdHJpbmdgIGlzIG5ldmVyIGVtcHR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXR0ZXJuKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpWQUxJRF9QQVRURVJOOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZShzdHJpbmcgJHV1aWQpOiBib29sCiAgICB7CiAgICAgICAgJHV1aWQgPSBzdHJfcmVwbGFjZShbJ3VybjonLCAndXVpZDonLCAnVVJOOicsICdVVUlEOicsICd7JywgJ30nXSwgJycsICR1dWlkKTsKCiAgICAgICAgcmV0dXJuICR1dWlkID09PSBVdWlkOjpOSUwgfHwgcHJlZ19tYXRjaCgnLycgLiBzZWxmOjpWQUxJRF9QQVRURVJOIC4gJy9EbXMnLCAkdXVpZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmFtc2V5L3V1aWQgbGlicmFyeQogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICoKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIEJlbiBSYW1zZXkgPGJlbkBiZW5yYW1zZXkuY29tPgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVAogKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFJhbXNleVxVdWlkXFZhbGlkYXRvcjsKCi8qKgogKiBBIHZhbGlkYXRvciB2YWxpZGF0ZXMgYSBzdHJpbmcgYXMgYSBwcm9wZXIgVVVJRAogKgogKiBAcHNhbG0taW1tdXRhYmxlCiAqLwppbnRlcmZhY2UgVmFsaWRhdG9ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdXNlZCBieSB0aGlzIHZhbGlkYXRvcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0aGlzIHZhbGlkYXRvciB1c2VzCiAgICAgKgogICAgICogQHBzYWxtLXJldHVybiBub24tZW1wdHktc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXR0ZXJuKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgc3RyaW5nIHJlcHJlc2VudHMgYSBVVUlECiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXVpZCBUaGUgc3RyaW5nIHRvIHZhbGlkYXRlIGFzIGEgVVVJRAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlELCBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKHN0cmluZyAkdXVpZCk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/CHANGELOG.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eG1sc2VjbGlicy5waHAKfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fAoxMiwgRGVjIDIwMjYsIDMuMS41ClNlY3VyaXR5OgotIFZhbGlkYXRlIEFFUy1HQ00gQXV0aGVudGljYXRpb24gVGFnIChTaWRlbmkpCgowOCwgRGVjIDIwMjUsIDMuMS40ClNlY3VyaXR5OgotIGZpeCBjYW5vbmljYWxpemF0aW9uIGJ5cGFzcyBlcnJvciAoZDBnZSkKCjIwLCBOb3YgMjAyNCwgMy4xLjMKQnVnIEZpeGVzOgotIHJlbW92ZSBsb2FkS2V5IGNoZWNrIGR1ZSB0byBCQyBpc3N1ZXMKCjIwLCBOb3YgMjAyNCwgMy4xLjIKSW1wcm92ZW1lbnRzOgotIEFkZCB0YWIgdG8gbGlzdCBvZiB3aGl0ZXNwYWNlIHZhbHVlcyB0byByZW1vdmUgZnJvbSBjZXJ0LiByZWZzICMyNTIKLSBsb2FkS2V5IHNob3VsZCBjaGVjayByZXR1cm4gdmFsdWUgZm9yIG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkgKHNhbW1hcnNoYWxsb3UpCi0gU3dpdGNoIHRvIEdpdEh1YiBhY3Rpb25zIChTaGFya01hY2hpbmUpCgowNSwgU2VwIDIwMjAsIDMuMS4xCkZlYXR1cmVzOgotIFN1cHBvcnQgT0FFUCAoaWdneXZvbHopCgpCdWcgRml4ZXM6Ci0gRml4IEFFUzEyOCAoaWdneXZvbHopCgpJbXByb3ZlbWVudHM6Ci0gRml4IHRlc3RzIGZvciBvbGRlciBQSFAKCjIyLCBBcHIgMjAyMCwgMy4xLjAKRmVhdHVyZXM6Ci0gU3VwcG9ydCBBRVMtR0NNLiBSZXF1aXJlcyBQSFAgNy4xLiAoRnJhbsOnb2lzIEtvb21hbikKCkltcHJvdmVtZW50czoKLSBGaXggVHJhdmlzIHRlc3RzIGZvciBvbGRlciBQSFAgdmVyc2lvbnMuCi0gVXNlIERPTUVsZW1lbnQgaW50ZXJmYWNlIHRvIGZpeCBzb21lIElERXMgcmVwb3J0aW5nIGRvY3VtZW50YXRpb24gZXJyb3JzCgpCdWcgRml4ZXM6Ci0gRklYIG1pc3NpbmcgSW5jbHVzaXZlTmFtZXNwYWNlcyBQcmVmaXhMaXN0IGZyb20gSmF2YSArIEFwYWNoZSBXU1M0Si4gKG5qYWtlKQoKMDYsIE5vdiAyMDE5LCAzLjAuNApTZWN1cml0eSBJbXByb3ZlbWVudHM6Ci0gSW5zdXJlIG9ubHkgYSBzaW5nbGUgU2lnbmVkSW5mbyBlbGVtZW50IGV4aXN0cyB3aXRoaW4gYSBzaWduYXR1cmUgZHVyaW5nIAogIHZlcmlmaWNhdGlvbi4gUmVmcyBDVkUtMjAxOS0zNDY1LgpCdWcgRml4ZXM6Ci0gRml4IHZhcmlhYmxlIGNhc2luZy4KCjE1LCBOb3YgMjAxOCwgMy4wLjMKQnVnIEZpeGVzOgotIEZpeCBjYXNpbmcgb2YgY2xhc3MgbmFtZS4gKFdpbGxlbSBTdHV1cnNtYS1SdXdlbikKLSBGaXggWHBhdGggY2FzaW5nLiAoVGltIHZhbiBEaWplbikKCkltcHJvdmVtZW50czoKLSBNYWtlIFBDUkUyIGNvbXBsaWFudC4gKFN0ZWZhbiBXaW50ZXIpCi0gQWRkIFBIUCA3LjMgc3VwcG9ydC4gKFN0ZWZhbiBXaW50ZXIpCgoyNywgU2VwIDIwMTgsIDMuMC4yClNlY3VyaXR5IEltcHJvdmVtZW50czoKLSBPcGVuU1NMIGlzIG5vdyBhIHJlcXVpcmVtZW50IHJhdGhlciB0aGFuIHN1Z2dlc3Rpb24uIChTbGF2ZW4gQmFjZWxpYykKLSBGaWx0ZXIgaW5wdXQgdG8gYXZvaWQgWFBhdGggaW5qZWN0aW9uLiAoSmFpbWUgUMOpcmV6KQoKQnVnIEZpeGVzOgotIEZpeCBtaXNzaW5nIHBhcmVudGhlc2VzIChUaW0gdmFuIERpamVuKQoKSW1wcm92ZW1lbnRzOgotIFVzZSBzdHJpY3QgY29tcGFyaXNvbiBvcGVyYXRvciB0byBjb21wYXJlIGRpZ2VzdCB2YWx1ZXMuIChKYWltZSBQw6lyZXopCi0gUmVtb3ZlIGNhbGwgdG8gZmlsZV9nZXRfY29udGVudHMgdGhhdCBkb2Vzbid0IGV2ZW4gd29yay4gKEphaW1lIFDDqXJleikKLSBEb2N1bWVudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcmV0dXJuIHZhbHVlIGJlaGF2aW91ci4gKFRoaWpzIEtpbmtob3JzdCkKCjMxLCBBdWcgMjAxNywgMy4wLjEKQnVnIEZpeGVzOgotIEZpeGVkIG1pc3NpbmcgKCkgaW4gZnVuY3Rpb24gY2FsbC4gKERlbm5pcyBWw6Z2ZXJzdGVkKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBPbmVMb2dpbiB0byBzdXBwb3J0ZWQgc29mdHdhcmUuCi0gQWRkIC5naXRhdHRyaWJ1dGVzIHRvIHJlbW92ZSB1bm5lZWRlZCBmaWxlcy4gKEZpbGlwcG8gVGVzc2Fyb3R0bykKLSBGaXggYnVnIGluIGV4YW1wbGUgY29kZS4gKERhbiBDaHVyY2gpCi0gVHJhdmlzOiBhZGQgUEhQIDcuMSwgbW92ZSBoaHZtIHRvIGFsbG93ZWQgZmFpbHVyZXMuIChUaGlqcyBLaW5raG9yc3QpCi0gRHJvcCBmYWlsaW5nIGV4dHJhY3Qtd2luLWNlcnQgdGVzdCAoVGhpanMgS2lua2hvcnN0KS4gKFRoaWpzIEtpbmtob3JzdCkKLSBBZGQgY29tbWVudHMgdG8gd2FybiBhYm91dCByZXR1cm4gdmFsdWVzIG9mIHZlcmlmeSgpLiAoVGhpanMgS2lua2hvcnN0KQotIEZpeCB0ZXN0cyB0byBwcm9wZXJseSBjaGVjayByZXR1cm4gY29kZSBvZiB2ZXJpZnkoKS4gKFRoaWpzIEtpbmtob3JzdCkKLSBSZXN0b3JlIHN1cHBvcnQgZm9yIFBIUCA+PSA1LjQuIChKYWltZSBQw6lyZXopCgoyNSwgTWF5IDIwMTcsIDMuMC4wCkltcHJvdmVtZW50czoKLSBSZW1vdmUgdXNlIG9mIG1jcnlwdCAoc2t5bWV5ZXIpCgowOCwgU2VwIDIwMTYsIDIuMC4xCkJ1ZyBGaXhlczoKLSBTdHJpcCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgd2hlbiBwYXJzaW5nIFg1MDlDZXJ0aWZpY2F0ZS4gZml4ZXMgIzg0CiAgKGtsZW1lbi5icmF0ZWMpCi0gQ2VydGlmaWNhdGUgJ3N1YmplY3QnIHZhbHVlcyBjYW4gYmUgYXJyYXlzLiBmaXhlcyAjODAgKEFuZHJlYXMgU3RhbmdsKQotIEhIVk0gc2lnbmluZyBub2RlIHdpdGggSUQgYXR0cmlidXRlIHcvb3V0IG5hbWVzcGFjZSByZWdlbmVyYXRlcyBJRCB2YWx1ZS4KICBmaXhlcyAjODggKE1pbG9zIFRvbWljKQoKSW1wcm92ZW1lbnRzOgotIEZpeCB0eXBvcyBhbmQgYWRkIHNvbWUgUEhQRG9jIEJsb2Nrcy4gKGdmYXVzdC1xYikKLSBVcGRhdGUgbGlnaHRTQU1MIGxpbmsuIChNaWxvcyBUb21pYykKLSBVcGRhdGUgY29weXJpZ2h0IGRhdGVzLgoKMzEsIEp1bCAyMDE1LCAyLjAuMApGZWF0dXJlczoKLSBOYW1lc3BhY2Ugc3VwcG9ydC4gQ2xhc3NlcyBub3cgaW4gdGhlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcIG5hbWVzcGFjZS4KCkltcHJvdmVtZW50czoKLSBEcm9wcGVkIHN1cHBvcnQgZm9yIFBIUCA1LjIKCjMxLCBKdWwgMjAxNSwgMS40LjEKQnVnIEZpeGVzOgotIEFsbG93IGZvciBsYXJnZSBkaWdlc3QgdmFsdWVzIHRoYXQgbWF5IGhhdmUgbGluZSBicmVha3MuIGZpeGVzICM2MgoKRmVhdHVyZXM6Ci0gU3VwcG9ydCBmb3IgbG9jYXRpbmcgc3BlY2lmaWMgc2lnbmF0dXJlIHdoZW4gbXVsdGlwbGUgZXhpc3QgaW4gCiAgZG9jdW1lbnQuIChncmlnYTNrKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBvcHRpb25hbCBhcmd1bWVudCB0byBYTUxTZWN1cml0eURTaWcgdG8gZGVmaW5lIHRoZSBwcmVmaXggdG8gYmUgdXNlZCwgCiAgYWxzbyBhbGxvd2luZyBmb3IgbnVsbCB0byB1c2Ugbm8gcHJlZml4LCBmb3IgdGhlIGRzaWcgbmFtZXNwYWNlLiBmaXhlcyAjMTMKLSBDb2RlIGNsZWFudXAKLSBEZXByZWNpYXRlZCBYTUxTZWN1cml0eURTaWc6OmdlbmVyYXRlX0dVSUQgZm9yIFhNTFNlY3VyaXR5RFNpZzo6Z2VuZXJhdGVHVUlECgoyMywgSnVuIDIwMTUsIDEuNC4wCkZlYXR1cmVzOgotIFN1cHBvcnQgZm9yIFBTUi0wIHN0YW5kYXJkLgotIFN1cHBvcnQgZm9yIFg1MDlTdWJqZWN0TmFtZS4gKE1pbG9zIFRvbWljKQotIEFkZCBITUFDLVNIQTEgc3VwcG9ydC4KCkltcHJvdmVtZW50czoKLSBBZGQgaG93IHRvIGluc3RhbGwgdG8gUkVBRE1FLiAoQmVybmFyZG8gVmllaXJhIGRhIFNpbHZhKQotIENvZGUgY2xlYW51cC4gKEphaW1lIFDDqXJleikKLSBOb3JtYWxpbHplIHRlc3RzLiAoSGlkZGUgV2llcmluZ2EpCi0gQWRkIGJhc2ljIHVzYWdlIHRvIFJFQURNRS4gKEhpZGRlIFdpZXJpbmdhKQoKMjEsIE1heSAyMDE1LCAxLjMuMgpCdWcgRml4ZXM6Ci0gRml4IFVuZGVmaW5lZCB2YXJpYWJsZSBub3RpY2UuIChkcGllcGVyODUpCi0gRml4IHR5cG8gd2hlbiBzZXR0aW5nIE1pbWVUeXBlIGF0dHJpYnV0ZS4gKEV1Z2VuZSBPWikKLSBGaXggdmFsaWRhdGVSZWZlcmVuY2UoKSB3aXRoIGVudmVsb3Bpbmcgc2lnbmF0dXJlcwoKRmVhdHVyZXM6Ci0gY2Fub25pY2FsaXplRGF0YSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIChKYWltZSBQw6lyZXopCi0gQWRkIGNvbXBvc2VyIHN1cHBvcnQgKE1ha3MzdykKCjE5LCBKdW4gMjAxMywgMS4zLjEKRmVhdHVyZXM6Ci0gcmV0dXJuIGVuY3J5cHRlZCBub2RlIGZyb20gWE1MU2VjRW5jOjplbmNyeXB0Tm9kZSgpIHdoZW4gcmVwbGFjZSBpcyBzZXQgdG8gCiAgZmFsc2UuIChPbGF2KQotIEFkZCBzdXBwb3J0IGZvciBSU0EgU0hBMzg0IGFuZCBSU0FfU0hBNTEyIGFuZCBTSEEzODQgZGlnZXN0LiAoSmFpbWUgUMKOcmV6KQotIEFkZCBvcHRpb25zIHBhcmFtZXRlciB0byB0aGUgYWRkIGNlcnQgbWV0aG9kcy4KLSBBZGQgb3B0aW9uYWwgaXNzdWVyU2VyaWFsIGNyZWF0aW9uIHdpdGggY2VydAoKQnVnIEZpeGVzOgotIEZpeCBwZXJzaXN0ZWQgSWQgd2hlbiBuYW1lc3BhY2VkLiAoS29lbiBUaG9tZWVyKQoKSW1wcm92ZW1lbnRzOgotIEFkZCBMSUNFTlNFIGZpbGUKLSBDb252ZXJ0IENIQU5HRUxPRy50eHQgdG8gVVRGLTgKCjI2LCBTZXAgMjAxMSwgMS4zLjAKRmVhdHVyZXM6Ci0gQWRkIHBhcmFtIHRvIGFwcGVuZCBzaWcgdG8gbm9kZSB3aGVuIHNpZ25pbmcuIEZpeGVzIGEgcHJvYmxlbSB3aGVuIHVzaW5nIAogIGluY2x1c2l2ZSBjYW5vbmljYWxpemF0aW9uIHRvIGFwcGVuZCBhIHNpZ25hdHVyZSB3aXRoaW4gYSBuYW1lc3BhY2VkIHN1YnRyZWUuCiAgZXguICRvYmpEU2lnLT5zaWduKCRvYmpLZXksICRhcHBlbmRUb05vZGUpOyAKLSBBZGQgYWJpbGl0eSB0byBlbmNyeXB0IGJ5IHJlZmVyZW5jZQotIEFkZCBzdXBwb3J0IGZvciByZWZlbmNlcyB3aXRoaW4gYW4gZW5jcnlwdGVkIGtleQotIEFkZCB0aHVtYnByaW50IGdlbmVyYXRpb24gY2FwYWJpbGl0eSAoWE1MU2VjdXJpdHlLZXktPmdldFg1MDlUaHVtYnByaW50KCkgYW5kIAogIFhNTFNlY3VyaXR5S2V5OjpnZXRSYXdUaHVtYnByaW50KCRjZXJ0KSkKLSBSZXR1cm4gc2lnbmF0dXJlIGVsZW1lbnQgbm9kZSBmcm9tIFhNTFNlY3VyaXR5RFNpZzo6aW5zZXJ0U2lnbmF0dXJlKCkgYW5kIAogIFhNTFNlY3VyaXR5RFNpZzo6YXBwZW5kU2lnbmF0dXJlKCkgbWV0aG9kcwotIFN1cHBvcnQgZm9yIDxkczpSZXRyaWV2YWxNZXRob2Q+IHdpdGggc2ltcGxlIFVSSSBJZCByZWZlcmVuY2UuCi0gQWRkIFhNTFNlY3VyaXR5S2V5OjpnZXRTeW1tZXRyaWNLZXlTaXplKCkgbWV0aG9kIChPbGF2KQotIEFkZCBYTUxTZWNFbmM6OmdldENpcGhlclZhbHVlKCkgbWV0aG9kIChPbGF2KQotIEltcHJvdmUgWE1MU2VjdXJpdHlLZXk6Z2VuZXJhdGVTZXNzaW9uS2V5KCkgbG9naWMgKE9sYXYpCgpCdWcgRml4ZXM6Ci0gQ2hhbmdlIHNwbGl0KCkgdG8gZXhwbG9kZSgpIGFzIHNwbGl0IGlzIG5vdyBkZXByZWNpYXRlZAotIGRzOlJlZmVyZW5jZXMgdXNpbmcgZW1wdHkgb3Igc2ltcGxlIFVSSSBJZCByZWZlcmVuY2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgCiAgY29tbWVudHMgaW4gY2Fub25pY2FsaXplZCBkYXRhLgotIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50cyBpbiBFbmNyeXB0ZWREYXRhIGFyZSBlbWl0dGVkIGluIHRoZSBjb3JyZWN0IAogIHNlcXVlbmNlLgoKMTEgSmFuIDIwMTAsIDEuMi4yCkZlYXR1cmVzOgotIEFkZCBzdXBwb3J0IFhQYXRoIHN1cHBvcnQgd2hlbiBjcmVhdGluZyBzaWduYXR1cmUuIFByb3ZpZGVzIHN1cHBvcnQgZm9yIAogIHdvcmtpbmcgd2l0aCBFQlhNTCBkb2N1bWVudHMuCi0gQWRkIHJlZmVyZW5jZSBvcHRpb24gdG8gZm9yY2UgY3JlYXRpb24gb2YgVVJJIGF0dHJpYnV0ZS4gRm9yIHVzZQogIHdoZW4gYWRkaW5nIGEgRE9NIERvY3VtZW50IHdoZXJlIGJ5IGRlZmF1bHQgbm8gVVJJIGF0dHJpYnV0ZSBpcyBhZGRlZC4KLSBBZGQgc3VwcG9ydCBmb3IgUlNBLVNIQTI1NgoKQnVnIEZpeGVzOgotIGZpeCBidWcgIzU6IGNyZWF0ZURPTURvY3VtZW50RnJhZ21lbnQoKSBpbiBkZWNyeXB0Tm9kZSB3aGVuIGRhdGEgaXMgbm9kZSAKICBjb250ZW50IChwYXRjaCBieSBGcmFuY29pcyBXYW5nKQoKCjA4IEp1bCAyMDA4LCAxLjIuMQpGZWF0dXJlczoKLSBBdHRlbXB0IHRvIHVzZSBtaGFzaCB3aGVuIGhhc2ggZXh0ZW5zaW9uIGlzIG5vdCBwcmVzZW50LiAoQWxmcmVkbyBDdWJpdG9zKS4KLSBBZGQgZmFsbGJhY2sgdG8gYnVpbHQtaW4gc2hhMSBpZiBib3RoIGhhc2ggYW5kIG1oYXNoIGFyZSBub3QgYXZhaWxhYmxlIGFuZCAKICB0aHJvdyBlcnJvciBmb3Igb3RoZXIgZm9yIG90aGVyIG1pc3NpbmcgaGFzaGVzLiAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBnZXRYNTA5Q2VydGlmaWNhdGUgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSB4NTA5IGNlcnQgdXNlZCBmb3IgS2V5LiAKICAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBnZXRWYWxpZGF0ZWROb2RlcyBtZXRob2QgdG8gcmV0cmlldmUgdGhlIGVsZW1lbnRzIHNpZ25lZCBieSB0aGUgCiAgc2lnbmF0dXJlLiAocGF0Y2ggYnkgT2xhdiBNb3JrZW4pLgotIEFkZCBpbnNlcnRTaWduYXR1cmUgbWV0aG9kIGZvciBwcmVjaXNpb24gc2lnbmF0dXJlIGluc2VydGlvbi4gTWVyZ2UgCiAgZnVuY3Rpb25hbGl0eSBmcm9tIGFwcGVuZFNpZ25hdHVyZSBpbiB0aGUgcHJvY2Vzcy4gKE9sYXYgTW9ya2VuLCBSb2IpLgotIEZpbmFsbHkgYWRkIHNvbWUgdGVzdHMKCkJ1ZyBGaXhlczoKLSBGaXggY2Fub25pY2FsaXphdGlvbiBmb3IgRG9jdW1lbnQgbm9kZSB3aGVuIHVzaW5nIFBIUCA8IDUuMi4KLSBBZGQgcGFkZGluZyBmb3IgUlNBX1NIQTEuIChwYXRjaCBieSBPbGF2IE1vcmtlbikuCgoKMjcgTm92IDIwMDcsIDEuMi4wCkZlYXR1cmVzOgotIE5ldyBhZGRSZWZlcmVuY2UvTGlzdCBvcHRpb24gKG92ZXJ3cml0ZSkuIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIFVSSQogIHZhbHVlIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBpZiBhbHJlYWR5IGV4aXN0aW5nIHdpdGhpbiBkb2N1bWVudC4KICBEZWZhdWx0IGlzIFRSVUUgdG8gbWFpbnRhaW4gQkMuCgoxOCBOb3YgMjAwNywgMS4xLjIKQnVnIEZpeGVzOgotIFJlbW92ZSBjbG9zaW5nIFBIUCB0YWcgdG8gZml4IGV4dHJhIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBmcm9tIGJlaW5nIG91dHB1dAoKMTEgTm92IDIwMDcsIDEuMS4xCkZlYXR1cmVzOgotIEFkZCBnZXRSZWZOb2RlSUQoKSBhbmQgZ2V0UmVmSURzKCkgbWV0aG9kcyBtaXNzZWQgaW4gcHJldmlvdXMgcmVsZWFzZS4KICBQcm92aWRlIGZ1bmN0aW9uYWxpdHkgdG8gZmluZCBVUklzIG9mIGV4aXN0aW5nIHJlZmVyZW5jZSBub2Rlcy4KICBSZXF1aXJlZCBieSBzaW1wbGVTQU1McGhwIHByb2plY3QKCkJ1ZyBGaXhlczoKLSBSZW1vdmUgZXJyb25lb3VzIHdoaXRlc3BhY2UgY2F1c2luZyBpc3N1ZXMgdW5kZXIgY2VydGFpbiBjaXJjdW1hc3RhbmNlcy4KCjE4IE9jdCAyMDA3LCAxLjEuMApGZWF0dXJlczoKLSBFbmFibGUgY3JlYXRpb24gb2YgZW52ZWxvcGluZyBzaWduYXR1cmUuIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZgogIG1hbmFnZWQgaW5mb3JtYXRpb24gY2FyZHMuCi0gQWRkIGFkZE9iamVjdCBtZXRob2QgZm9yIGVudmVsb3Bpbmcgc2lnbmF0dXJlcy4KLSBBZGQgc3RhdGljR2V0NTA5WENlcnRzIG1ldGhvZC4gQ2hhaW5lZCBjZXJ0aWZpY2F0ZXMgd2l0aGluIGEgUEVNIGZpbGUgY2FuCiAgbm93IGJlIGFkZGVkIHdpdGhpbiB0aGUgWDUwOURhdGEgbm9kZS4KLSBBZGQgeHBhdGggc3VwcG9ydCB3aXRoaW4gdHJhbnNmb3JtYXRpb25zCi0gQWRkIEluY2x1c2l2ZU5hbWVzcGFjZXMgcHJlZml4IGxpc3Qgc3VwcG9ydCB3aXRoaW4gZXhjbHVzaXZlIHRyYW5zZm9ybWF0aW9ucy4KCkJ1ZyBGaXhlczoKLSBJbml0aWFsaXplIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBtY3J5cHRfY3JlYXRlX2l2LiAoSm9hbiBDb3JuYWTDsykuCi0gRml4IGFuIGludGVyb3BlcmFiaWxpdHkgaXNzdWUgd2l0aCAuTkVUIHdoZW4gZW5jcnlwdGluZyBkYXRhIGluIENCQyBtb2RlLgogIChKb2FuIENvcm5hZMOzKS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiLAogICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBsaWJyYXJ5IGZvciBYTUwgU2VjdXJpdHkiLAogICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCiAgImtleXdvcmRzIjogWwogICAgInhtbCIsCiAgICAieG1sZHNpZyIsCiAgICAic2lnbmF0dXJlIiwKICAgICJzZWN1cml0eSIKICBdLAogICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicyIsCiAgImF1dG9sb2FkIjogewogICAgInBzci00IjogewogICAgICAiUm9iUmljaGFyZHNcXFhNTFNlY0xpYnNcXCI6ICJzcmMiCiAgICB9CiAgfSwKICAicmVxdWlyZSI6IHsKICAgICJwaHAiOiAiPj0gNS40IiwKICAgICJleHQtb3BlbnNzbCI6ICIqIgogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA3LTIwMjQsIFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+LgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwphcmUgbWV0OgoKICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgoKICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgUm9iZXJ0IFJpY2hhcmRzIG5vciB0aGUgbmFtZXMgb2YgaGlzCiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULApJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLApCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCkxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCkFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQpQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/phpunit.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Imh0dHBzOi8vc2NoZW1hLnBocHVuaXQuZGUvNi41L3BocHVuaXQueHNkIj4KCTxmaWx0ZXI+CgkJPHdoaXRlbGlzdCBhZGRVbmNvdmVyZWRGaWxlc0Zyb21XaGl0ZWxpc3Q9ImZhbHNlIj4KCQkJPGRpcmVjdG9yeSBzdWZmaXg9Ii5waHAiPnNyYzwvZGlyZWN0b3J5PgoJCTwvd2hpdGVsaXN0PgoJPC9maWx0ZXI+CjwvcGhwdW5pdD4K]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3htbHNlY2xpYnMgCgp4bWxzZWNsaWJzIGlzIGEgbGlicmFyeSB3cml0dGVuIGluIFBIUCBmb3Igd29ya2luZyB3aXRoIFhNTCBFbmNyeXB0aW9uIGFuZCBTaWduYXR1cmVzLgoKVGhlIGF1dGhvciBvZiB4bWxzZWNsaWJzIGlzIFJvYiBSaWNoYXJkcy4KCiMgQnJhbmNoZXMKTWFzdGVyIGlzIGN1cnJlbnRseSB0aGUgb25seSBhY3RpdmVseSBtYWludGFpbmVkIGJyYW5jaC4KKiBtYXN0ZXIvMy4xOiBBZGRlZCBBRVMtR0NNIHN1cHBvcnQgcmVxdWlyaW5nIDcuMSsKKiAzLjA6IFJlbW92ZXMgbWNyeXB0IHVzYWdlIHJlcXVpcmluZyA1LjQrICg1LjYuMjQrIHJlY29tbWVuZGVkIGZvciBzZWN1cml0eSByZWFzb25zKQoqIDIuMDogQ29udGFpbnMgbmFtZXNwYWNlIHN1cHBvcnQgcmVxdWlyaW5nIDUuMysKKiAxLjQ6IENvbnRhaW5zIGF1dG8tbG9hZGVyIHN1cHBvcnQgd2hpbGUgYWxzbyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJsaXR5IHdpdGggdGhlIG9sZGVyIDEuMyB2ZXJzaW9uIHVzaW5nIHRoZSB4bWxzZWNsaWJzLnBocCBmaWxlLiBTdXBwb3J0cyBQSFAgNS4yKwoKIyBSZXF1aXJlbWVudHMKCnhtbHNlY2xpYnMgcmVxdWlyZXMgUEhQIHZlcnNpb24gNS40IG9yIGdyZWF0ZXIuICoqNS42LjI0KyByZWNvbW1lbmRlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyoqCgoKIyMgSG93IHRvIEluc3RhbGwKCkluc3RhbGwgd2l0aCBbYGNvbXBvc2VyLnBoYXJgXShodHRwOi8vZ2V0Y29tcG9zZXIub3JnKS4KCmBgYHNoCnBocCBjb21wb3Nlci5waGFyIHJlcXVpcmUgInJvYnJpY2hhcmRzL3htbHNlY2xpYnMiCmBgYAoKCiMjIFVzZSBjYXNlcwoKeG1sc2VjbGlicyBpcyBiZWluZyB1c2VkIGluIG1hbnkgZGlmZmVyZW50IHNvZnR3YXJlLgoKKiBbU2ltcGxlU0FNTFBIUF0oaHR0cHM6Ly9naXRodWIuY29tL3NpbXBsZXNhbWxwaHAvc2ltcGxlc2FtbHBocCkKKiBbTGlnaHRTQU1MXShodHRwczovL2dpdGh1Yi5jb20vbGlnaHRzYW1sL2xpZ2h0c2FtbCkKKiBbT25lTG9naW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9vbmVsb2dpbi9waHAtc2FtbCkKCiMjIEJhc2ljIHVzYWdlCgpUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBiYXNpYyB1c2FnZSBvZiB4bWxzZWNsaWJzLCB3aXRoIGEgU0hBLTI1NiBzaWduYXR1cmUuCgpgYGBwaHAKdXNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnNcWE1MU2VjdXJpdHlEU2lnOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xYTUxTZWN1cml0eUtleTsKCi8vIExvYWQgdGhlIFhNTCB0byBiZSBzaWduZWQKJGRvYyA9IG5ldyBET01Eb2N1bWVudCgpOwokZG9jLT5sb2FkKCcuL3BhdGgvdG8vZmlsZS90b2Jlc2lnbmVkLnhtbCcpOwoKLy8gQ3JlYXRlIGEgbmV3IFNlY3VyaXR5IG9iamVjdCAKJG9iakRTaWcgPSBuZXcgWE1MU2VjdXJpdHlEU2lnKCk7Ci8vIFVzZSB0aGUgYzE0biBleGNsdXNpdmUgY2Fub25pY2FsaXphdGlvbgokb2JqRFNpZy0+c2V0Q2Fub25pY2FsTWV0aG9kKFhNTFNlY3VyaXR5RFNpZzo6RVhDX0MxNE4pOwovLyBTaWduIHVzaW5nIFNIQS0yNTYKJG9iakRTaWctPmFkZFJlZmVyZW5jZSgKICAgICRkb2MsIAogICAgWE1MU2VjdXJpdHlEU2lnOjpTSEEyNTYsIAogICAgYXJyYXkoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlJykKKTsKCi8vIENyZWF0ZSBhIG5ldyAocHJpdmF0ZSkgU2VjdXJpdHkga2V5CiRvYmpLZXkgPSBuZXcgWE1MU2VjdXJpdHlLZXkoWE1MU2VjdXJpdHlLZXk6OlJTQV9TSEEyNTYsIGFycmF5KCd0eXBlJz0+J3ByaXZhdGUnKSk7Ci8qCklmIGtleSBoYXMgYSBwYXNzcGhyYXNlLCBzZXQgaXQgdXNpbmcKJG9iaktleS0+cGFzc3BocmFzZSA9ICc8cGFzc3BocmFzZT4nOwoqLwovLyBMb2FkIHRoZSBwcml2YXRlIGtleQokb2JqS2V5LT5sb2FkS2V5KCcuL3BhdGgvdG8vcHJpdmF0ZWtleS5wZW0nLCBUUlVFKTsKCi8vIFNpZ24gdGhlIFhNTCBmaWxlCiRvYmpEU2lnLT5zaWduKCRvYmpLZXkpOwoKLy8gQWRkIHRoZSBhc3NvY2lhdGVkIHB1YmxpYyBrZXkgdG8gdGhlIHNpZ25hdHVyZQokb2JqRFNpZy0+YWRkNTA5Q2VydChmaWxlX2dldF9jb250ZW50cygnLi9wYXRoL3RvL2ZpbGUvbXljZXJ0LnBlbScpKTsKCi8vIEFwcGVuZCB0aGUgc2lnbmF0dXJlIHRvIHRoZSBYTUwKJG9iakRTaWctPmFwcGVuZFNpZ25hdHVyZSgkZG9jLT5kb2N1bWVudEVsZW1lbnQpOwovLyBTYXZlIHRoZSBzaWduZWQgWE1MCiRkb2MtPnNhdmUoJy4vcGF0aC90by9zaWduZWQueG1sJyk7CmBgYAoKIyMgSG93IHRvIENvbnRyaWJ1dGUKCiogW09wZW4gSXNzdWVzXShodHRwczovL2dpdGh1Yi5jb20vcm9icmljaGFyZHMveG1sc2VjbGlicy9pc3N1ZXMpCiogW09wZW4gUHVsbCBSZXF1ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3JvYnJpY2hhcmRzL3htbHNlY2xpYnMvcHVsbHMpCgpNYWlsaW5nIExpc3Q6IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS94bWxzZWNsaWJzCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/Utils/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/Utils/XPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBSb2JSaWNoYXJkc1xYTUxTZWNMaWJzXFV0aWxzOwoKY2xhc3MgWFBhdGgKewogICAgY29uc3QgQUxQSEFOVU1FUklDID0gJ1x3XGQnOwogICAgY29uc3QgTlVNRVJJQyA9ICdcZCc7CiAgICBjb25zdCBMRVRURVJTID0gJ1x3JzsKICAgIGNvbnN0IEVYVEVOREVEX0FMUEhBTlVNRVJJQyA9ICdcd1xkXHNcLV86XC4nOwoKICAgIGNvbnN0IFNJTkdMRV9RVU9URSA9ICdcJyc7CiAgICBjb25zdCBET1VCTEVfUVVPVEUgPSAnIic7CiAgICBjb25zdCBBTExfUVVPVEVTID0gJ1tcJyJdJzsKCgogICAgLyoqCiAgICAgKiBGaWx0ZXIgYW4gYXR0cmlidXRlIHZhbHVlIGZvciBzYXZlIGluY2x1c2lvbiBpbiBhbiBYUGF0aCBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsdGVyLgogICAgICogQHBhcmFtIHN0cmluZyAkcXVvdGVzIFRoZSBxdW90ZXMgdXNlZCB0byBkZWxpbWl0IHRoZSB2YWx1ZSBpbiB0aGUgWFBhdGggcXVlcnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGZpbHRlcmVkIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJBdHRyVmFsdWUoJHZhbHVlLCAkcXVvdGVzID0gc2VsZjo6QUxMX1FVT1RFUykKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcjJy4kcXVvdGVzLicjJywgJycsICR2YWx1ZSk7CiAgICB9CgoKICAgIC8qKgogICAgICogRmlsdGVyIGFuIGF0dHJpYnV0ZSBuYW1lIGZvciBzYXZlIGluY2x1c2lvbiBpbiBhbiBYUGF0aCBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBmaWx0ZXIuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGFsbG93IFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBhbGxvdy4gQ2FuIGJlIG9uZSBvZiB0aGUgY29uc3RhbnRzIHByb3ZpZGVkIGJ5IHRoaXMgY2xhc3MsIG9yIGEKICAgICAqIGN1c3RvbSByZWdleCBleGNsdWRpbmcgdGhlICcjJyBjaGFyYWN0ZXIgKHVzZWQgYXMgZGVsaW1pdGVyKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZmlsdGVyZWQgYXR0cmlidXRlIG5hbWUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyQXR0ck5hbWUoJG5hbWUsICRhbGxvdyA9IHNlbGY6OkVYVEVOREVEX0FMUEhBTlVNRVJJQykKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcjW14nLiRhbGxvdy4nXSMnLCAnJywgJG5hbWUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecEnc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZTsKdXNlIERPTVhQYXRoOwp1c2UgRXhjZXB0aW9uOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xVdGlsc1xYUGF0aCBhcyBYUGF0aDsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY0VuYwp7CiAgICBjb25zdCB0ZW1wbGF0ZSA9ICI8eGVuYzpFbmNyeXB0ZWREYXRhIHhtbG5zOnhlbmM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyc+CiAgIDx4ZW5jOkNpcGhlckRhdGE+CiAgICAgIDx4ZW5jOkNpcGhlclZhbHVlPjwveGVuYzpDaXBoZXJWYWx1ZT4KICAgPC94ZW5jOkNpcGhlckRhdGE+CjwveGVuYzpFbmNyeXB0ZWREYXRhPiI7CgogICAgY29uc3QgRWxlbWVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNFbGVtZW50JzsKICAgIGNvbnN0IENvbnRlbnQgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjQ29udGVudCc7CiAgICBjb25zdCBVUkkgPSAzOwogICAgY29uc3QgWE1MRU5DTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjJzsKCiAgICAvKiogQHZhciBudWxsfERPTURvY3VtZW50ICovCiAgICBwcml2YXRlICRlbmNkb2MgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8RE9NTm9kZSAgKi8KICAgIHByaXZhdGUgJHJhd05vZGUgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8c3RyaW5nICovCiAgICBwdWJsaWMgJHR5cGUgPSBudWxsOwoKICAgIC8qKiBAdmFyIG51bGx8RE9NRWxlbWVudCAqLwogICAgcHVibGljICRlbmNLZXkgPSBudWxsOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRyZWZlcmVuY2VzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5fcmVzZXRUZW1wbGF0ZSgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0VGVtcGxhdGUoKQogICAgewogICAgICAgICR0aGlzLT5lbmNkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAkdGhpcy0+ZW5jZG9jLT5sb2FkWE1MKHNlbGY6OnRlbXBsYXRlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBET01Ob2RlICRub2RlCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUmVmZXJlbmNlKCRuYW1lLCAkbm9kZSwgJHR5cGUpCiAgICB7CiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VPZiBET01Ob2RlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyRub2RlIGlzIG5vdCBvZiB0eXBlIERPTU5vZGUnKTsKICAgICAgICB9CiAgICAgICAgJGN1cmVuY2RvYyA9ICR0aGlzLT5lbmNkb2M7CiAgICAgICAgJHRoaXMtPl9yZXNldFRlbXBsYXRlKCk7CiAgICAgICAgJGVuY2RvYyA9ICR0aGlzLT5lbmNkb2M7CiAgICAgICAgJHRoaXMtPmVuY2RvYyA9ICRjdXJlbmNkb2M7CiAgICAgICAgJHJlZnVyaSA9IFhNTFNlY3VyaXR5RFNpZzo6Z2VuZXJhdGVHVUlEKCk7CiAgICAgICAgJGVsZW1lbnQgPSAkZW5jZG9jLT5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgJGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiSWQiLCAkcmVmdXJpKTsKICAgICAgICAkdGhpcy0+cmVmZXJlbmNlc1skbmFtZV0gPSBhcnJheSgibm9kZSIgPT4gJG5vZGUsICJ0eXBlIiA9PiAkdHlwZSwgImVuY25vZGUiID0+ICRlbmNkb2MsICJyZWZ1cmkiID0+ICRyZWZ1cmkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5vZGUoJG5vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgdGhlIHNlbGVjdGVkIG5vZGUgd2l0aCB0aGUgZ2l2ZW4ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5ICBUaGUgZW5jcnlwdGlvbiBrZXkgYW5kIGFsZ29yaXRobS4KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAkcmVwbGFjZSBXaGV0aGVyIHRoZSBlbmNyeXB0ZWQgbm9kZSBzaG91bGQgYmUgcmVwbGFjZWQgaW4gdGhlIG9yaWdpbmFsIHRyZWUuIERlZmF1bHQgaXMgdHJ1ZS4KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiBET01FbGVtZW50ICBUaGUgPHhlbmM6RW5jcnlwdGVkRGF0YT4tZWxlbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHROb2RlKCRvYmpLZXksICRyZXBsYWNlID0gdHJ1ZSkKICAgIHsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+cmF3Tm9kZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm9kZSB0byBlbmNyeXB0IGhhcyBub3QgYmVlbiBzZXQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJG9iaktleSBpbnN0YW5jZW9mIFhNTFNlY3VyaXR5S2V5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgS2V5Jyk7CiAgICAgICAgfQogICAgICAgICRkb2MgPSAkdGhpcy0+cmF3Tm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAkeFBhdGggPSBuZXcgRE9NWFBhdGgoJHRoaXMtPmVuY2RvYyk7CiAgICAgICAgJG9iakxpc3QgPSAkeFBhdGgtPnF1ZXJ5KCcveGVuYzpFbmNyeXB0ZWREYXRhL3hlbmM6Q2lwaGVyRGF0YS94ZW5jOkNpcGhlclZhbHVlJyk7CiAgICAgICAgJGNpcGhlclZhbHVlID0gJG9iakxpc3QtPml0ZW0oMCk7CiAgICAgICAgaWYgKCRjaXBoZXJWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Vycm9yIGxvY2F0aW5nIENpcGhlclZhbHVlIGVsZW1lbnQgd2l0aGluIHRlbXBsYXRlJyk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRkb2MtPnNhdmVYTUwoJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgJHRoaXMtPmVuY2RvYy0+ZG9jdW1lbnRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoJ1R5cGUnLCBzZWxmOjpFbGVtZW50KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICRjaGlsZHJlbiA9ICR0aGlzLT5yYXdOb2RlLT5jaGlsZE5vZGVzOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNoaWxkcmVuIEFTICRjaGlsZCkgewogICAgICAgICAgICAgICAgICAgICRkYXRhIC49ICRkb2MtPnNhdmVYTUwoJGNoaWxkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudC0+c2V0QXR0cmlidXRlKCdUeXBlJywgc2VsZjo6Q29udGVudCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1R5cGUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICB9CgogICAgICAgICRlbmNNZXRob2QgPSAkdGhpcy0+ZW5jZG9jLT5kb2N1bWVudEVsZW1lbnQtPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6RW5jcnlwdGlvbk1ldGhvZCcpKTsKICAgICAgICAkZW5jTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRvYmpLZXktPmdldEFsZ29yaXRobSgpKTsKICAgICAgICAkY2lwaGVyVmFsdWUtPnBhcmVudE5vZGUtPnBhcmVudE5vZGUtPmluc2VydEJlZm9yZSgkZW5jTWV0aG9kLCAkY2lwaGVyVmFsdWUtPnBhcmVudE5vZGUtPnBhcmVudE5vZGUtPmZpcnN0Q2hpbGQpOwoKICAgICAgICAkc3RyRW5jcnlwdCA9IGJhc2U2NF9lbmNvZGUoJG9iaktleS0+ZW5jcnlwdERhdGEoJGRhdGEpKTsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+ZW5jZG9jLT5jcmVhdGVUZXh0Tm9kZSgkc3RyRW5jcnlwdCk7CiAgICAgICAgJGNpcGhlclZhbHVlLT5hcHBlbmRDaGlsZCgkdmFsdWUpOwoKICAgICAgICBpZiAoJHJlcGxhY2UpIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVuY2RvYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGltcG9ydEVuYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPnBhcmVudE5vZGUtPnJlcGxhY2VDaGlsZCgkaW1wb3J0RW5jLCAkdGhpcy0+cmF3Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRpbXBvcnRFbmM7CiAgICAgICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICAgICAkaW1wb3J0RW5jID0gJHRoaXMtPnJhd05vZGUtPm93bmVyRG9jdW1lbnQtPmltcG9ydE5vZGUoJHRoaXMtPmVuY2RvYy0+ZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHRoaXMtPnJhd05vZGUtPmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPnJlbW92ZUNoaWxkKCR0aGlzLT5yYXdOb2RlLT5maXJzdENoaWxkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUtPmFwcGVuZENoaWxkKCRpbXBvcnRFbmMpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW1wb3J0RW5jOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJG9iaktleQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHRSZWZlcmVuY2VzKCRvYmpLZXkpCiAgICB7CiAgICAgICAgJGN1clJhd05vZGUgPSAkdGhpcy0+cmF3Tm9kZTsKICAgICAgICAkY3VyVHlwZSA9ICR0aGlzLT50eXBlOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5yZWZlcmVuY2VzIEFTICRuYW1lID0+ICRyZWZlcmVuY2UpIHsKICAgICAgICAgICAgJHRoaXMtPmVuY2RvYyA9ICRyZWZlcmVuY2VbImVuY25vZGUiXTsKICAgICAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkcmVmZXJlbmNlWyJub2RlIl07CiAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHJlZmVyZW5jZVsidHlwZSJdOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGVuY05vZGUgPSAkdGhpcy0+ZW5jcnlwdE5vZGUoJG9iaktleSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVmZXJlbmNlc1skbmFtZV1bImVuY25vZGUiXSA9ICRlbmNOb2RlOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yYXdOb2RlID0gJGN1clJhd05vZGU7CiAgICAgICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICRjdXJUeXBlOwogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPnJhd05vZGUgPSAkY3VyUmF3Tm9kZTsKICAgICAgICAkdGhpcy0+dHlwZSA9ICRjdXJUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIENpcGhlclZhbHVlIHRleHQgZnJvbSB0aGlzIGVuY3J5cHRlZCBub2RlLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsICBUaGUgQ2lwaGVydmFsdWUgdGV4dCwgb3IgbnVsbCBpZiBubyBDaXBoZXJWYWx1ZSBpcyBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENpcGhlclZhbHVlKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPnJhd05vZGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vZGUgdG8gZGVjcnlwdCBoYXMgbm90IGJlZW4gc2V0Jyk7CiAgICAgICAgfQoKICAgICAgICAkZG9jID0gJHRoaXMtPnJhd05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgJHhQYXRoID0gbmV3IERPTVhQYXRoKCRkb2MpOwogICAgICAgICR4UGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3htbGVuY3InLCBzZWxmOjpYTUxFTkNOUyk7CiAgICAgICAgLyogT25seSBoYW5kbGVzIGVtYmVkZGVkIGNvbnRlbnQgcmlnaHQgbm93IGFuZCBub3QgYSByZWZlcmVuY2UgKi8KICAgICAgICAkcXVlcnkgPSAiLi94bWxlbmNyOkNpcGhlckRhdGEveG1sZW5jcjpDaXBoZXJWYWx1ZSI7CiAgICAgICAgJG5vZGVzZXQgPSAkeFBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICRub2RlID0gJG5vZGVzZXQtPml0ZW0oMCk7CgogICAgICAgIGlmICghJG5vZGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJG5vZGUtPm5vZGVWYWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IHRoaXMgZW5jcnlwdGVkIG5vZGUuCiAgICAgKgogICAgICogVGhlIGJlaGF2aW91ciBvZiB0aGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mICRyZXBsYWNlLgogICAgICogSWYgJHJlcGxhY2UgaXMgZmFsc2UsIHdlIHdpbGwgcmV0dXJuIHRoZSBkZWNyeXB0ZWQgZGF0YSBhcyBhIHN0cmluZy4KICAgICAqIElmICRyZXBsYWNlIGlzIHRydWUsIHdlIHdpbGwgaW5zZXJ0IHRoZSBkZWNyeXB0ZWQgZWxlbWVudChzKSBpbnRvIHRoZQogICAgICogZG9jdW1lbnQsIGFuZCByZXR1cm4gdGhlIGRlY3J5cHRlZCBlbGVtZW50KHMpLgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5ICBUaGUgZGVjcnlwdGlvbiBrZXkgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGRlY3J5cHRpbmcgdGhlIG5vZGUuCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAgICAgICAgJHJlcGxhY2UgV2hldGhlciB3ZSBzaG91bGQgcmVwbGFjZSB0aGUgZW5jcnlwdGVkIG5vZGUgaW4gdGhlIFhNTCBkb2N1bWVudCB3aXRoIHRoZSBkZWNyeXB0ZWQgZGF0YS4gVGhlIGRlZmF1bHQgaXMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xET01FbGVtZW50ICBUaGUgZGVjcnlwdGVkIGRhdGEuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0Tm9kZSgkb2JqS2V5LCAkcmVwbGFjZT10cnVlKQogICAgewogICAgICAgIGlmICghICRvYmpLZXkgaW5zdGFuY2VvZiBYTUxTZWN1cml0eUtleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleScpOwogICAgICAgIH0KCiAgICAgICAgJGVuY3J5cHRlZERhdGEgPSAkdGhpcy0+Z2V0Q2lwaGVyVmFsdWUoKTsKICAgICAgICBpZiAoJGVuY3J5cHRlZERhdGEpIHsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9ICRvYmpLZXktPmRlY3J5cHREYXRhKCRlbmNyeXB0ZWREYXRhKTsKICAgICAgICAgICAgaWYgKCRyZXBsYWNlKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAoc2VsZjo6RWxlbWVudCk6CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld2RvYy0+bG9hZFhNTCgkZGVjcnlwdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRuZXdkb2M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGltcG9ydEVuYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRuZXdkb2MtPmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5yYXdOb2RlLT5wYXJlbnROb2RlLT5yZXBsYWNlQ2hpbGQoJGltcG9ydEVuYywgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGltcG9ydEVuYzsKICAgICAgICAgICAgICAgICAgICBjYXNlIChzZWxmOjpDb250ZW50KToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5yYXdOb2RlLT5ub2RlVHlwZSA9PSBYTUxfRE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvYyA9ICR0aGlzLT5yYXdOb2RlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvYyA9ICR0aGlzLT5yYXdOb2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdGcmFnID0gJGRvYy0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3RnJhZy0+YXBwZW5kWE1MKCRkZWNyeXB0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gJHRoaXMtPnJhd05vZGUtPnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnQtPnJlcGxhY2VDaGlsZCgkbmV3RnJhZywgJHRoaXMtPnJhd05vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHBhcmVudDsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRlY3J5cHRlZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZGVjcnlwdGVkOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2Fubm90IGxvY2F0ZSBlbmNyeXB0ZWQgZGF0YSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgdGhlIFhNTFNlY3VyaXR5S2V5CiAgICAgKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRzcmNLZXkKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkcmF3S2V5CiAgICAgKiBAcGFyYW0gYm9vbCAkYXBwZW5kCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jcnlwdEtleSgkc3JjS2V5LCAkcmF3S2V5LCAkYXBwZW5kPXRydWUpCiAgICB7CiAgICAgICAgaWYgKCghICRzcmNLZXkgaW5zdGFuY2VvZiBYTUxTZWN1cml0eUtleSkgfHwgKCEgJHJhd0tleSBpbnN0YW5jZW9mIFhNTFNlY3VyaXR5S2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleScpOwogICAgICAgIH0KICAgICAgICAkc3RyRW5jS2V5ID0gYmFzZTY0X2VuY29kZSgkc3JjS2V5LT5lbmNyeXB0RGF0YSgkcmF3S2V5LT5rZXkpKTsKICAgICAgICAkcm9vdCA9ICR0aGlzLT5lbmNkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgICAgICAkZW5jS2V5ID0gJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpFbmNyeXB0ZWRLZXknKTsKICAgICAgICBpZiAoJGFwcGVuZCkgewogICAgICAgICAgICAka2V5SW5mbyA9ICRyb290LT5pbnNlcnRCZWZvcmUoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJywgJ2RzaWc6S2V5SW5mbycpLCAkcm9vdC0+Zmlyc3RDaGlsZCk7CiAgICAgICAgICAgICRrZXlJbmZvLT5hcHBlbmRDaGlsZCgkZW5jS2V5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+ZW5jS2V5ID0gJGVuY0tleTsKICAgICAgICB9CiAgICAgICAgJGVuY01ldGhvZCA9ICRlbmNLZXktPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6RW5jcnlwdGlvbk1ldGhvZCcpKTsKICAgICAgICAkZW5jTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRzcmNLZXktPmdldEFsZ29yaXRoKCkpOwogICAgICAgIGlmICghIGVtcHR5KCRzcmNLZXktPm5hbWUpKSB7CiAgICAgICAgICAgICRrZXlJbmZvID0gJGVuY0tleS0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjJywgJ2RzaWc6S2V5SW5mbycpKTsKICAgICAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIycsICdkc2lnOktleU5hbWUnLCAkc3JjS2V5LT5uYW1lKSk7CiAgICAgICAgfQogICAgICAgICRjaXBoZXJEYXRhID0gJGVuY0tleS0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpDaXBoZXJEYXRhJykpOwogICAgICAgICRjaXBoZXJEYXRhLT5hcHBlbmRDaGlsZCgkdGhpcy0+ZW5jZG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRU5DTlMsICd4ZW5jOkNpcGhlclZhbHVlJywgJHN0ckVuY0tleSkpOwogICAgICAgIGlmIChpc19hcnJheSgkdGhpcy0+cmVmZXJlbmNlcykgJiYgY291bnQoJHRoaXMtPnJlZmVyZW5jZXMpID4gMCkgewogICAgICAgICAgICAkcmVmTGlzdCA9ICRlbmNLZXktPmFwcGVuZENoaWxkKCR0aGlzLT5lbmNkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxFTkNOUywgJ3hlbmM6UmVmZXJlbmNlTGlzdCcpKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnJlZmVyZW5jZXMgQVMgJG5hbWUgPT4gJHJlZmVyZW5jZSkgewogICAgICAgICAgICAgICAgJHJlZnVyaSA9ICRyZWZlcmVuY2VbInJlZnVyaSJdOwogICAgICAgICAgICAgICAgJGRhdGFSZWYgPSAkcmVmTGlzdC0+YXBwZW5kQ2hpbGQoJHRoaXMtPmVuY2RvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTEVOQ05TLCAneGVuYzpEYXRhUmVmZXJlbmNlJykpOwogICAgICAgICAgICAgICAgJGRhdGFSZWYtPnNldEF0dHJpYnV0ZSgiVVJJIiwgJyMnIC4gJHJlZnVyaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRlbmNLZXkKICAgICAqIEByZXR1cm4gRE9NRWxlbWVudHxzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0S2V5KCRlbmNLZXkpCiAgICB7CiAgICAgICAgaWYgKCEgJGVuY0tleS0+aXNFbmNyeXB0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiS2V5IGlzIG5vdCBFbmNyeXB0ZWQiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCRlbmNLZXktPmtleSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiS2V5IGlzIG1pc3NpbmcgZGF0YSB0byBwZXJmb3JtIHRoZSBkZWNyeXB0aW9uIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdE5vZGUoJGVuY0tleSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTURvY3VtZW50ICRlbGVtZW50CiAgICAgKiBAcmV0dXJuIERPTU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9jYXRlRW5jcnlwdGVkRGF0YSgkZWxlbWVudCkKICAgIHsKICAgICAgICBpZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkZG9jID0gJGVsZW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRvYyA9ICRlbGVtZW50LT5vd25lckRvY3VtZW50OwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYykgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICRxdWVyeSA9ICIvLypbbG9jYWwtbmFtZSgpPSdFbmNyeXB0ZWREYXRhJyBhbmQgbmFtZXNwYWNlLXVyaSgpPSciLnNlbGY6OlhNTEVOQ05TLiInXSI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnkpOwogICAgICAgICAgICByZXR1cm4gJG5vZGVzZXQtPml0ZW0oMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUga2V5IGZyb20gdGhlIERPTQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkbm9kZQogICAgICogQHJldHVybiBudWxsfFhNTFNlY3VyaXR5S2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGVLZXkoJG5vZGU9bnVsbCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJG5vZGUpKSB7CiAgICAgICAgICAgICRub2RlID0gJHRoaXMtPnJhd05vZGU7CiAgICAgICAgfQogICAgICAgIGlmICghICRub2RlIGluc3RhbmNlb2YgRE9NTm9kZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCRkb2MgPSAkbm9kZS0+b3duZXJEb2N1bWVudCkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3htbHNlY2VuYycsIHNlbGY6OlhNTEVOQ05TKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gIi4vL3htbHNlY2VuYzpFbmNyeXB0aW9uTWV0aG9kIjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJG5vZGUpOwogICAgICAgICAgICBpZiAoJGVuY21ldGggPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgICAgJGF0dHJBbGdvcml0aG0gPSAkZW5jbWV0aC0+Z2V0QXR0cmlidXRlKCJBbGdvcml0aG0iKTsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYXR0ckFsZ29yaXRobSwgYXJyYXkoJ3R5cGUnID0+ICdwcml2YXRlJykpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJG9iaktleTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBudWxsfFhNTFNlY3VyaXR5S2V5ICRvYmpCYXNlS2V5CiAgICAgKiBAcGFyYW0gbnVsbHxET01Ob2RlICRub2RlCiAgICAgKiBAcmV0dXJuIG51bGx8WE1MU2VjdXJpdHlLZXkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhdGljTG9jYXRlS2V5SW5mbygkb2JqQmFzZUtleT1udWxsLCAkbm9kZT1udWxsKQogICAgewogICAgICAgIGlmIChlbXB0eSgkbm9kZSkgfHwgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGRvYyA9ICRub2RlLT5vd25lckRvY3VtZW50OwogICAgICAgIGlmICghJGRvYykgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCd4bWxzZWNlbmMnLCBzZWxmOjpYTUxFTkNOUyk7CiAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgneG1sc2VjZHNpZycsIFhNTFNlY3VyaXR5RFNpZzo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAiLi94bWxzZWNkc2lnOktleUluZm8iOwogICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICRub2RlKTsKICAgICAgICAkZW5jbWV0aCA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgIGlmICghJGVuY21ldGgpIHsKICAgICAgICAgICAgLyogTm8gS2V5SW5mbyBpbiBFbmNyeXB0ZWREYXRhIC8gRW5jcnlwdGVkS2V5LiAqLwogICAgICAgICAgICByZXR1cm4gJG9iakJhc2VLZXk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZW5jbWV0aC0+Y2hpbGROb2RlcyBBUyAkY2hpbGQpIHsKICAgICAgICAgICAgc3dpdGNoICgkY2hpbGQtPmxvY2FsTmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAnS2V5TmFtZSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJG9iakJhc2VLZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvYmpCYXNlS2V5LT5uYW1lID0gJGNoaWxkLT5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnS2V5VmFsdWUnOgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjaGlsZC0+Y2hpbGROb2RlcyBBUyAka2V5dmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJGtleXZhbC0+bG9jYWxOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEU0FLZXlWYWx1ZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRFNBS2V5VmFsdWUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JTQUtleVZhbHVlJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kdWx1cyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4cG9uZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1vZHVsdXNOb2RlID0gJGtleXZhbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ01vZHVsdXMnKS0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kdWx1cyA9IGJhc2U2NF9kZWNvZGUoJG1vZHVsdXNOb2RlLT5ub2RlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV4cG9uZW50Tm9kZSA9ICRrZXl2YWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFeHBvbmVudCcpLT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHBvbmVudCA9IGJhc2U2NF9kZWNvZGUoJGV4cG9uZW50Tm9kZS0+bm9kZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtb2R1bHVzKSB8fCBlbXB0eSgkZXhwb25lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgTW9kdWx1cyBvciBFeHBvbmVudCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHVibGljS2V5ID0gWE1MU2VjdXJpdHlLZXk6OmNvbnZlcnRSU0EoJG1vZHVsdXMsICRleHBvbmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iakJhc2VLZXktPmxvYWRLZXkoJHB1YmxpY0tleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSZXRyaWV2YWxNZXRob2QnOgogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJGNoaWxkLT5nZXRBdHRyaWJ1dGUoJ1R5cGUnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgIT09ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNFbmNyeXB0ZWRLZXknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuc3VwcG9ydGVkIGtleSB0eXBlLiAqLwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHVyaSA9ICRjaGlsZC0+Z2V0QXR0cmlidXRlKCdVUkknKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHVyaVswXSAhPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVSSSBub3QgYSByZWZlcmVuY2UgLSB1bnN1cHBvcnRlZC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpZCA9IHN1YnN0cigkdXJpLCAxKTsKCiAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5ID0gJy8veG1sc2VjZW5jOkVuY3J5cHRlZEtleVtASWQ9IicuWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWQsIFhQYXRoOjpET1VCTEVfUVVPVEUpLiciXSc7CiAgICAgICAgICAgICAgICAgICAgJGtleUVsZW1lbnQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSktPml0ZW0oMCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEka2V5RWxlbWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gbG9jYXRlIEVuY3J5cHRlZEtleSB3aXRoIEBJZD0nJGlkJy4iKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBYTUxTZWN1cml0eUtleTo6ZnJvbUVuY3J5cHRlZEtleUVsZW1lbnQoJGtleUVsZW1lbnQpOwogICAgICAgICAgICAgICAgY2FzZSAnRW5jcnlwdGVkS2V5JzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWE1MU2VjdXJpdHlLZXk6OmZyb21FbmNyeXB0ZWRLZXlFbGVtZW50KCRjaGlsZCk7CiAgICAgICAgICAgICAgICBjYXNlICdYNTA5RGF0YSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCR4NTA5Y2VydE5vZGVzID0gJGNoaWxkLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnWDUwOUNlcnRpZmljYXRlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR4NTA5Y2VydE5vZGVzLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeDUwOWNlcnQgPSAkeDUwOWNlcnROb2Rlcy0+aXRlbSgwKS0+dGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeDUwOWNlcnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCAiXG4iLCAiICIsICJcdCIpLCAiIiwgJHg1MDljZXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4NTA5Y2VydCA9ICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbiIuY2h1bmtfc3BsaXQoJHg1MDljZXJ0LCA2NCwgIlxuIikuIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqQmFzZUtleS0+bG9hZEtleSgkeDUwOWNlcnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iakJhc2VLZXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbnVsbHxYTUxTZWN1cml0eUtleSAkb2JqQmFzZUtleQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkbm9kZQogICAgICogQHJldHVybiBudWxsfFhNTFNlY3VyaXR5S2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGVLZXlJbmZvKCRvYmpCYXNlS2V5PW51bGwsICRub2RlPW51bGwpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRub2RlKSkgewogICAgICAgICAgICAkbm9kZSA9ICR0aGlzLT5yYXdOb2RlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6c3RhdGljTG9jYXRlS2V5SW5mbygkb2JqQmFzZUtleSwgJG5vZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecurityDSig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRG9jdW1lbnQ7CnVzZSBET01FbGVtZW50Owp1c2UgRE9NTm9kZTsKdXNlIERPTVhQYXRoOwp1c2UgRXhjZXB0aW9uOwp1c2UgUm9iUmljaGFyZHNcWE1MU2VjTGlic1xVdGlsc1xYUGF0aCBhcyBYUGF0aDsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY3VyaXR5RFNpZwp7CiAgICBjb25zdCBYTUxEU0lHTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyc7CiAgICBjb25zdCBTSEExID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExJzsKICAgIGNvbnN0IFNIQTI1NiA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYnOwogICAgY29uc3QgU0hBMzg0ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3NoYTM4NCc7CiAgICBjb25zdCBTSEE1MTIgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhNTEyJzsKICAgIGNvbnN0IFJJUEVNRDE2MCA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyaXBlbWQxNjAnOwoKICAgIGNvbnN0IEMxNE4gPSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOwogICAgY29uc3QgQzE0Tl9DT01NRU5UUyA9ICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSNXaXRoQ29tbWVudHMnOwogICAgY29uc3QgRVhDX0MxNE4gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJzsKICAgIGNvbnN0IEVYQ19DMTROX0NPTU1FTlRTID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuI1dpdGhDb21tZW50cyc7CgogICAgY29uc3QgdGVtcGxhdGUgPSAnPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+CiAgPGRzOlNpZ25lZEluZm8+CiAgICA8ZHM6U2lnbmF0dXJlTWV0aG9kIC8+CiAgPC9kczpTaWduZWRJbmZvPgo8L2RzOlNpZ25hdHVyZT4nOwoKICAgIGNvbnN0IEJBU0VfVEVNUExBVEUgPSAnPFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+CiAgPFNpZ25lZEluZm8+CiAgICA8U2lnbmF0dXJlTWV0aG9kIC8+CiAgPC9TaWduZWRJbmZvPgo8L1NpZ25hdHVyZT4nOwoKICAgIC8qKiBAdmFyIERPTUVsZW1lbnR8bnVsbCAqLwogICAgcHVibGljICRzaWdOb2RlID0gbnVsbDsKCiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHVibGljICRpZEtleXMgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwdWJsaWMgJGlkTlMgPSBhcnJheSgpOwoKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRzaWduZWRJbmZvID0gbnVsbDsKCiAgICAvKiogQHZhciBEb21YUGF0aHxudWxsICovCiAgICBwcml2YXRlICR4UGF0aEN0eCA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJGNhbm9uaWNhbE1ldGhvZCA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRwcmVmaXggPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHNlYXJjaHBmeCA9ICdzZWNkc2lnJzsKCiAgICAvKioKICAgICAqIFRoaXMgdmFyaWFibGUgY29udGFpbnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdmFsaWRhdGVkIG5vZGVzLgogICAgICogQHZhciBhcnJheXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbGlkYXRlZE5vZGVzID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByZWZpeD0nZHMnKQogICAgewogICAgICAgICR0ZW1wbGF0ZSA9IHNlbGY6OkJBU0VfVEVNUExBVEU7CiAgICAgICAgaWYgKCEgZW1wdHkoJHByZWZpeCkpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeCA9ICRwcmVmaXguJzonOwogICAgICAgICAgICAkc2VhcmNoID0gYXJyYXkoIjxTIiwgIjwvUyIsICJ4bWxucz0iKTsKICAgICAgICAgICAgJHJlcGxhY2UgPSBhcnJheSgiPCRwcmVmaXg6UyIsICI8LyRwcmVmaXg6UyIsICJ4bWxuczokcHJlZml4PSIpOwogICAgICAgICAgICAkdGVtcGxhdGUgPSBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkcmVwbGFjZSwgJHRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgICAgJHNpZ2RvYyA9IG5ldyBET01Eb2N1bWVudCgpOwogICAgICAgICRzaWdkb2MtPmxvYWRYTUwoJHRlbXBsYXRlKTsKICAgICAgICAkdGhpcy0+c2lnTm9kZSA9ICRzaWdkb2MtPmRvY3VtZW50RWxlbWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2V0IHRoZSBYUGF0aE9iaiB0byBudWxsCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzZXRYUGF0aE9iaigpCiAgICB7CiAgICAgICAgJHRoaXMtPnhQYXRoQ3R4ID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFhQYXRoT2JqIG9yIG51bGwgaWYgeFBhdGhDdHggaXMgc2V0IGFuZCBzaWdOb2RlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gRE9NWFBhdGh8bnVsbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFhQYXRoT2JqKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPnhQYXRoQ3R4KSAmJiAhIGVtcHR5KCR0aGlzLT5zaWdOb2RlKSkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQpOwogICAgICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgJHRoaXMtPnhQYXRoQ3R4ID0gJHhwYXRoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPnhQYXRoQ3R4OwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgZ3VpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBQcmVmaXggdG8gdXNlIGZvciBndWlkLiBkZWZhdWx0cyB0byBwZngKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZ2VuZXJhdGVkIGd1aWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZUdVSUQoJHByZWZpeD0ncGZ4JykKICAgIHsKICAgICAgICAkdXVpZCA9IG1kNSh1bmlxaWQobXRfcmFuZCgpLCB0cnVlKSk7CiAgICAgICAgJGd1aWQgPSAkcHJlZml4LnN1YnN0cigkdXVpZCwgMCwgOCkuIi0iLgogICAgICAgICAgICAgICAgc3Vic3RyKCR1dWlkLCA4LCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDEyLCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDE2LCA0KS4iLSIuCiAgICAgICAgICAgICAgICBzdWJzdHIoJHV1aWQsIDIwLCAxMik7CiAgICAgICAgcmV0dXJuICRndWlkOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgZ3VpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBQcmVmaXggdG8gdXNlIGZvciBndWlkLiBkZWZhdWx0cyB0byBwZngKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZ2VuZXJhdGVkIGd1aWQKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCBNZXRob2QgZGVwcmVjYXRlZCBpbiBSZWxlYXNlIDEuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVfR1VJRCgkcHJlZml4PSdwZngnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZW5lcmF0ZUdVSUQoJHByZWZpeCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJG9iakRvYwogICAgICogQHBhcmFtIGludCAkcG9zCiAgICAgKiBAcmV0dXJuIERPTU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9jYXRlU2lnbmF0dXJlKCRvYmpEb2MsICRwb3M9MCkKICAgIHsKICAgICAgICBpZiAoJG9iakRvYyBpbnN0YW5jZW9mIERPTURvY3VtZW50KSB7CiAgICAgICAgICAgICRkb2MgPSAkb2JqRG9jOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkb2MgPSAkb2JqRG9jLT5vd25lckRvY3VtZW50OwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYykgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvYyk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NlY2RzaWcnLCBzZWxmOjpYTUxEU0lHTlMpOwogICAgICAgICAgICAkcXVlcnkgPSAiLi8vc2VjZHNpZzpTaWduYXR1cmUiOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkb2JqRG9jKTsKICAgICAgICAgICAgJHRoaXMtPnNpZ05vZGUgPSAkbm9kZXNldC0+aXRlbSgkcG9zKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpTaWduZWRJbmZvIjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnNpZ05vZGUpOwogICAgICAgICAgICBpZiAoJG5vZGVzZXQtPmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgc3RydWN0dXJlIC0gVG9vIG1hbnkgU2lnbmVkSW5mbyBlbGVtZW50cyBmb3VuZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2lnTm9kZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU5ld1NpZ25Ob2RlKCRuYW1lLCAkdmFsdWU9bnVsbCkKICAgIHsKICAgICAgICAkZG9jID0gJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgaWYgKCEgaXNfbnVsbCgkdmFsdWUpKSB7CiAgICAgICAgICAgICRub2RlID0gJGRvYy0+Y3JlYXRlRWxlbWVudE5TKHNlbGY6OlhNTERTSUdOUywgJHRoaXMtPnByZWZpeC4kbmFtZSwgJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbm9kZSA9ICRkb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICR0aGlzLT5wcmVmaXguJG5hbWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDYW5vbmljYWxNZXRob2QoJG1ldGhvZCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSNXaXRoQ29tbWVudHMnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biNXaXRoQ29tbWVudHMnOgogICAgICAgICAgICAgICAgJHRoaXMtPmNhbm9uaWNhbE1ldGhvZCA9ICRtZXRob2Q7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgQ2Fub25pY2FsIE1ldGhvZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCkpIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJy4vJy4kdGhpcy0+c2VhcmNocGZ4Lic6U2lnbmVkSW5mbyc7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRzaW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAnLi8nLiR0aGlzLT5zZWFyY2hwZnguJ0Nhbm9uaWNhbGl6YXRpb25NZXRob2QnOwogICAgICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHNpbmZvKTsKICAgICAgICAgICAgICAgIGlmICghICgkY2Fub25Ob2RlID0gJG5vZGVzZXQtPml0ZW0oMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhbm9uTm9kZSA9ICR0aGlzLT5jcmVhdGVOZXdTaWduTm9kZSgnQ2Fub25pY2FsaXphdGlvbk1ldGhvZCcpOwogICAgICAgICAgICAgICAgICAgICRzaW5mby0+aW5zZXJ0QmVmb3JlKCRjYW5vbk5vZGUsICRzaW5mby0+Zmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY2Fub25Ob2RlLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICR0aGlzLT5jYW5vbmljYWxNZXRob2QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhbm9uaWNhbG1ldGhvZAogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJGFyWFBhdGgKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRwcmVmaXhMaXN0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZURhdGEoJG5vZGUsICRjYW5vbmljYWxtZXRob2QsICRhclhQYXRoPW51bGwsICRwcmVmaXhMaXN0PW51bGwpCiAgICB7CiAgICAgICAgJGV4Y2x1c2l2ZSA9IGZhbHNlOwogICAgICAgICR3aXRoQ29tbWVudHMgPSBmYWxzZTsKICAgICAgICBzd2l0Y2ggKCRjYW5vbmljYWxtZXRob2QpIHsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOgogICAgICAgICAgICAgICAgJGV4Y2x1c2l2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHdpdGhDb21tZW50cyA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1I1dpdGhDb21tZW50cyc6CiAgICAgICAgICAgICAgICAkd2l0aENvbW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICAgICAgJGV4Y2x1c2l2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jV2l0aENvbW1lbnRzJzoKICAgICAgICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgJHdpdGhDb21tZW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udWxsKCRhclhQYXRoKSAmJiAoJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSAmJiAoJG5vZGUtPm93bmVyRG9jdW1lbnQgIT09IG51bGwpICYmICRub2RlLT5pc1NhbWVOb2RlKCRub2RlLT5vd25lckRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQpKSB7CiAgICAgICAgICAgIC8qIENoZWNrIGZvciBhbnkgUEkgb3IgY29tbWVudHMgYXMgdGhleSB3b3VsZCBoYXZlIGJlZW4gZXhjbHVkZWQgKi8KICAgICAgICAgICAgJGVsZW1lbnQgPSAkbm9kZTsKICAgICAgICAgICAgd2hpbGUgKCRyZWZub2RlID0gJGVsZW1lbnQtPnByZXZpb3VzU2libGluZykgewogICAgICAgICAgICAgICAgaWYgKCRyZWZub2RlLT5ub2RlVHlwZSA9PSBYTUxfUElfTk9ERSB8fCAoKCRyZWZub2RlLT5ub2RlVHlwZSA9PSBYTUxfQ09NTUVOVF9OT0RFKSAmJiAkd2l0aENvbW1lbnRzKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGVsZW1lbnQgPSAkcmVmbm9kZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHJlZm5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHJldCA9ICRub2RlLT5DMTROKCRleGNsdXNpdmUsICR3aXRoQ29tbWVudHMsICRhclhQYXRoLCAkcHJlZml4TGlzdCk7CiAgICAgICAgaWYgKCRyZXQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm9uaWNhbGl6YXRpb24gZmFpbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OyAKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVNpZ25lZEluZm8oKQogICAgewoKICAgICAgICAkZG9jID0gJHRoaXMtPnNpZ05vZGUtPm93bmVyRG9jdW1lbnQ7CiAgICAgICAgJGNhbm9uaWNhbG1ldGhvZCA9IG51bGw7CiAgICAgICAgaWYgKCRkb2MpIHsKICAgICAgICAgICAgJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCk7CiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mbyI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRub2Rlc2V0LT5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIHN0cnVjdHVyZSAtIFRvbyBtYW55IFNpZ25lZEluZm8gZWxlbWVudHMgZm91bmQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHNpZ25JbmZvTm9kZSA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOkNhbm9uaWNhbGl6YXRpb25NZXRob2QiOwogICAgICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHNpZ25JbmZvTm9kZSk7CiAgICAgICAgICAgICAgICAkcHJlZml4TGlzdCA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoJGNhbm9uTm9kZSA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhbm9uaWNhbG1ldGhvZCA9ICRjYW5vbk5vZGUtPmdldEF0dHJpYnV0ZSgnQWxnb3JpdGhtJyk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNhbm9uTm9kZS0+Y2hpbGROb2RlcyBhcyAkbm9kZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbm9kZS0+bG9jYWxOYW1lID09ICdJbmNsdXNpdmVOYW1lc3BhY2VzJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwZnggPSAkbm9kZS0+Z2V0QXR0cmlidXRlKCdQcmVmaXhMaXN0JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJwZnggPSBhcnJheV9maWx0ZXIoZXhwbG9kZSgnICcsICRwZngpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGFycGZ4KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZpeExpc3QgPSBhcnJheV9tZXJnZSgkcHJlZml4TGlzdCA/ICRwcmVmaXhMaXN0IDogYXJyYXkoKSwgJGFycGZ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c2lnbmVkSW5mbyA9ICR0aGlzLT5jYW5vbmljYWxpemVEYXRhKCRzaWduSW5mb05vZGUsICRjYW5vbmljYWxtZXRob2QsIG51bGwsICRwcmVmaXhMaXN0KTsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmVkSW5mbzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpZ2VzdEFsZ29yaXRobQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGJvb2wgJGVuY29kZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVEaWdlc3QoJGRpZ2VzdEFsZ29yaXRobSwgJGRhdGEsICRlbmNvZGUgPSB0cnVlKQogICAgewogICAgICAgIHN3aXRjaCAoJGRpZ2VzdEFsZ29yaXRobSkgewogICAgICAgICAgICBjYXNlIHNlbGY6OlNIQTE6CiAgICAgICAgICAgICAgICAkYWxnID0gJ3NoYTEnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMjU2OgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGEyNTYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBMzg0OgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGEzODQnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0hBNTEyOgogICAgICAgICAgICAgICAgJGFsZyA9ICdzaGE1MTInOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UklQRU1EMTYwOgogICAgICAgICAgICAgICAgJGFsZyA9ICdyaXBlbWQxNjAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5ub3QgdmFsaWRhdGUgZGlnZXN0OiBVbnN1cHBvcnRlZCBBbGdvcml0aG0gPCRkaWdlc3RBbGdvcml0aG0+Iik7CiAgICAgICAgfQoKICAgICAgICAkZGlnZXN0ID0gaGFzaCgkYWxnLCAkZGF0YSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRlbmNvZGUpIHsKICAgICAgICAgICAgJGRpZ2VzdCA9IGJhc2U2NF9lbmNvZGUoJGRpZ2VzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGlnZXN0OwoKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkcmVmTm9kZQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZURpZ2VzdCgkcmVmTm9kZSwgJGRhdGEpCiAgICB7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRyZWZOb2RlLT5vd25lckRvY3VtZW50KTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAnc3RyaW5nKC4vc2VjZHNpZzpEaWdlc3RNZXRob2QvQEFsZ29yaXRobSknOwogICAgICAgICRkaWdlc3RBbGdvcml0aG0gPSAkeHBhdGgtPmV2YWx1YXRlKCRxdWVyeSwgJHJlZk5vZGUpOwogICAgICAgICRkaWdWYWx1ZSA9ICR0aGlzLT5jYWxjdWxhdGVEaWdlc3QoJGRpZ2VzdEFsZ29yaXRobSwgJGRhdGEsIGZhbHNlKTsKICAgICAgICAkcXVlcnkgPSAnc3RyaW5nKC4vc2VjZHNpZzpEaWdlc3RWYWx1ZSknOwogICAgICAgICRkaWdlc3RWYWx1ZSA9ICR4cGF0aC0+ZXZhbHVhdGUoJHF1ZXJ5LCAkcmVmTm9kZSk7CiAgICAgICAgcmV0dXJuICgkZGlnVmFsdWUgPT09IGJhc2U2NF9kZWNvZGUoJGRpZ2VzdFZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHJlZk5vZGUKICAgICAqIEBwYXJhbSBET01Ob2RlICRvYmpEYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVkZUNvbW1lbnROb2RlcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NUcmFuc2Zvcm1zKCRyZWZOb2RlLCAkb2JqRGF0YSwgJGluY2x1ZGVDb21tZW50Tm9kZXMgPSB0cnVlKQogICAgewogICAgICAgICRkYXRhID0gJG9iakRhdGE7CiAgICAgICAgJHhwYXRoID0gbmV3IERPTVhQYXRoKCRyZWZOb2RlLT5vd25lckRvY3VtZW50KTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAnLi9zZWNkc2lnOlRyYW5zZm9ybXMvc2VjZHNpZzpUcmFuc2Zvcm0nOwogICAgICAgICRub2RlbGlzdCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkcmVmTm9kZSk7CiAgICAgICAgJGNhbm9uaWNhbE1ldGhvZCA9ICdodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSc7CiAgICAgICAgJGFyWFBhdGggPSBudWxsOwogICAgICAgICRwcmVmaXhMaXN0ID0gbnVsbDsKICAgICAgICBmb3JlYWNoICgkbm9kZWxpc3QgQVMgJHRyYW5zZm9ybSkgewogICAgICAgICAgICAkYWxnb3JpdGhtID0gJHRyYW5zZm9ybS0+Z2V0QXR0cmlidXRlKCJBbGdvcml0aG0iKTsKICAgICAgICAgICAgc3dpdGNoICgkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMnOgogICAgICAgICAgICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jV2l0aENvbW1lbnRzJzoKCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5jbHVkZUNvbW1lbnROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSByZW1vdmUgY29tbWVudCBub2RlcyBieSBmb3JjaW5nIGl0IHRvIHVzZSBhIGNhbm9uaWNhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aG91dCBjb21tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkY2Fub25pY2FsTWV0aG9kID0gJGFsZ29yaXRobTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRub2RlID0gJHRyYW5zZm9ybS0+Zmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRub2RlLT5sb2NhbE5hbWUgPT0gJ0luY2x1c2l2ZU5hbWVzcGFjZXMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBmeCA9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJ1ByZWZpeExpc3QnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcnBmeCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBmeGxpc3QgPSBleHBsb2RlKCIgIiwgJHBmeCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBmeGxpc3QgQVMgJHBmeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsID0gdHJpbSgkcGZ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcnBmeFtdID0gJHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGFycGZ4KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZWZpeExpc3QgPSAkYXJwZng7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGUgPSAkbm9kZS0+bmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1JzoKICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1I1dpdGhDb21tZW50cyc6CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5jbHVkZUNvbW1lbnROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSByZW1vdmUgY29tbWVudCBub2RlcyBieSBmb3JjaW5nIGl0IHRvIHVzZSBhIGNhbm9uaWNhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aG91dCBjb21tZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjYW5vbmljYWxNZXRob2QgPSAkYWxnb3JpdGhtOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNic6CiAgICAgICAgICAgICAgICAgICAgJG5vZGUgPSAkdHJhbnNmb3JtLT5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICgkbm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5vZGUtPmxvY2FsTmFtZSA9PSAnWFBhdGgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJYUGF0aCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJYUGF0aFsncXVlcnknXSA9ICcoLi8vLiB8IC4vL0AqIHwgLi8vbmFtZXNwYWNlOjoqKVsnLiRub2RlLT5ub2RlVmFsdWUuJ10nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyWFBhdGhbJ25hbWVzcGFjZXMnXSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbnNsaXN0ID0gJHhwYXRoLT5xdWVyeSgnLi9uYW1lc3BhY2U6OionLCAkbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbnNsaXN0IEFTICRuc25vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5zbm9kZS0+bG9jYWxOYW1lICE9ICJ4bWwiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhclhQYXRoWyduYW1lc3BhY2VzJ11bJG5zbm9kZS0+bG9jYWxOYW1lXSA9ICRuc25vZGUtPm5vZGVWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkbm9kZSA9ICRub2RlLT5uZXh0U2libGluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRkYXRhIGluc3RhbmNlb2YgRE9NTm9kZSkgewogICAgICAgICAgICAkZGF0YSA9ICR0aGlzLT5jYW5vbmljYWxpemVEYXRhKCRvYmpEYXRhLCAkY2Fub25pY2FsTWV0aG9kLCAkYXJYUGF0aCwgJHByZWZpeExpc3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkcmVmTm9kZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzUmVmTm9kZSgkcmVmTm9kZSkKICAgIHsKICAgICAgICAkZGF0YU9iamVjdCA9IG51bGw7CgogICAgICAgIC8qCiAgICAgICAgICogRGVwZW5kaW5nIG9uIHRoZSBVUkksIHdlIG1heSBub3Qgd2FudCB0byBpbmNsdWRlIGNvbW1lbnRzIGluIHRoZSByZXN1bHQKICAgICAgICAgKiBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGRzaWctY29yZS8jc2VjLVJlZmVyZW5jZVByb2Nlc3NpbmdNb2RlbAogICAgICAgICAqLwogICAgICAgICRpbmNsdWRlQ29tbWVudE5vZGVzID0gdHJ1ZTsKCiAgICAgICAgaWYgKCR1cmkgPSAkcmVmTm9kZS0+Z2V0QXR0cmlidXRlKCJVUkkiKSkgewogICAgICAgICAgICAkYXJVcmwgPSBwYXJzZV91cmwoJHVyaSk7CiAgICAgICAgICAgIGlmIChlbXB0eSgkYXJVcmxbJ3BhdGgnXSkpIHsKICAgICAgICAgICAgICAgIGlmICgkaWRlbnRpZmllciA9ICRhclVybFsnZnJhZ21lbnQnXSkgewoKICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHJlZmVyZW5jZSBpZGVudGlmaWVzIGEgbm9kZSB3aXRoIHRoZSBnaXZlbiBpZCBieSB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIGEgVVJJIG9uIHRoZSBmb3JtICIjaWRlbnRpZmllciIuIFRoaXMgc2hvdWxkIG5vdCBpbmNsdWRlIGNvbW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICRpbmNsdWRlQ29tbWVudE5vZGVzID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgICR4UGF0aCA9IG5ldyBET01YUGF0aCgkcmVmTm9kZS0+b3duZXJEb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pZE5TICYmIGlzX2FycmF5KCR0aGlzLT5pZE5TKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+aWROUyBhcyAkbnNwZiA9PiAkbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4UGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJG5zcGYsICRucyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGlEbGlzdCA9ICdASWQ9IicuWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWRlbnRpZmllciwgWFBhdGg6OkRPVUJMRV9RVU9URSkuJyInOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdGhpcy0+aWRLZXlzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+aWRLZXlzIGFzICRpZEtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlEbGlzdCAuPSAiIG9yIEAiLlhQYXRoOjpmaWx0ZXJBdHRyTmFtZSgkaWRLZXkpLic9IicuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGg6OmZpbHRlckF0dHJWYWx1ZSgkaWRlbnRpZmllciwgWFBhdGg6OkRPVUJMRV9RVU9URSkuJyInOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRxdWVyeSA9ICcvLypbJy4kaURsaXN0LiddJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YU9iamVjdCA9ICR4UGF0aC0+cXVlcnkoJHF1ZXJ5KS0+aXRlbSgwKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGRhdGFPYmplY3QgPSAkcmVmTm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qIFRoaXMgcmVmZXJlbmNlIGlkZW50aWZpZXMgdGhlIHJvb3Qgbm9kZSB3aXRoIGFuIGVtcHR5IFVSSS4gVGhpcyBzaG91bGQKICAgICAgICAgICAgICogbm90IGluY2x1ZGUgY29tbWVudHMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkaW5jbHVkZUNvbW1lbnROb2RlcyA9IGZhbHNlOwoKICAgICAgICAgICAgJGRhdGFPYmplY3QgPSAkcmVmTm9kZS0+b3duZXJEb2N1bWVudDsKICAgICAgICB9CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+cHJvY2Vzc1RyYW5zZm9ybXMoJHJlZk5vZGUsICRkYXRhT2JqZWN0LCAkaW5jbHVkZUNvbW1lbnROb2Rlcyk7CiAgICAgICAgaWYgKCEkdGhpcy0+dmFsaWRhdGVEaWdlc3QoJHJlZk5vZGUsICRkYXRhKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRhdGFPYmplY3QgaW5zdGFuY2VvZiBET01Ob2RlKSB7CiAgICAgICAgICAgIC8qIEFkZCB0aGlzIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdmFsaWRhdGVkIG5vZGVzLiAqLwogICAgICAgICAgICBpZiAoISBlbXB0eSgkaWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZWROb2Rlc1skaWRlbnRpZmllcl0gPSAkZGF0YU9iamVjdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZWROb2Rlc1tdID0gJGRhdGFPYmplY3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHJlZk5vZGUKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmTm9kZUlEKCRyZWZOb2RlKQogICAgewogICAgICAgIGlmICgkdXJpID0gJHJlZk5vZGUtPmdldEF0dHJpYnV0ZSgiVVJJIikpIHsKICAgICAgICAgICAgJGFyVXJsID0gcGFyc2VfdXJsKCR1cmkpOwogICAgICAgICAgICBpZiAoZW1wdHkoJGFyVXJsWydwYXRoJ10pKSB7CiAgICAgICAgICAgICAgICBpZiAoJGlkZW50aWZpZXIgPSAkYXJVcmxbJ2ZyYWdtZW50J10pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGlkZW50aWZpZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmSURzKCkKICAgIHsKICAgICAgICAkcmVmaWRzID0gYXJyYXkoKTsKCiAgICAgICAgJHhwYXRoID0gJHRoaXMtPmdldFhQYXRoT2JqKCk7CiAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpTaWduZWRJbmZvWzFdL3NlY2RzaWc6UmVmZXJlbmNlIjsKICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgaWYgKCRub2Rlc2V0LT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWZlcmVuY2Ugbm9kZXMgbm90IGZvdW5kIik7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRub2Rlc2V0IEFTICRyZWZOb2RlKSB7CiAgICAgICAgICAgICRyZWZpZHNbXSA9ICR0aGlzLT5nZXRSZWZOb2RlSUQoJHJlZk5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlZmlkczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlUmVmZXJlbmNlKCkKICAgIHsKICAgICAgICAkZG9jRWxlbSA9ICR0aGlzLT5zaWdOb2RlLT5vd25lckRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgaWYgKCEgJGRvY0VsZW0tPmlzU2FtZU5vZGUoJHRoaXMtPnNpZ05vZGUpKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+c2lnTm9kZS0+cGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2lnTm9kZS0+cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQoJHRoaXMtPnNpZ05vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpOwogICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mb1sxXS9zZWNkc2lnOlJlZmVyZW5jZSI7CiAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHRoaXMtPnNpZ05vZGUpOwogICAgICAgIGlmICgkbm9kZXNldC0+bGVuZ3RoID09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVmZXJlbmNlIG5vZGVzIG5vdCBmb3VuZCIpOwogICAgICAgIH0KCiAgICAgICAgLyogSW5pdGlhbGl6ZS9yZXNldCB0aGUgbGlzdCBvZiB2YWxpZGF0ZWQgbm9kZXMuICovCiAgICAgICAgJHRoaXMtPnZhbGlkYXRlZE5vZGVzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJG5vZGVzZXQgQVMgJHJlZk5vZGUpIHsKICAgICAgICAgICAgaWYgKCEgJHRoaXMtPnByb2Nlc3NSZWZOb2RlKCRyZWZOb2RlKSkgewogICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGxpc3Qgb2YgdmFsaWRhdGVkIG5vZGVzLiAqLwogICAgICAgICAgICAgICAgJHRoaXMtPnZhbGlkYXRlZE5vZGVzID0gbnVsbDsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlZmVyZW5jZSB2YWxpZGF0aW9uIGZhaWxlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHNpbmZvTm9kZQogICAgICogQHBhcmFtIERPTURvY3VtZW50ICRub2RlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbGdvcml0aG0KICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRhclRyYW5zZm9ybXMKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRvcHRpb25zCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkUmVmSW50ZXJuYWwoJHNpbmZvTm9kZSwgJG5vZGUsICRhbGdvcml0aG0sICRhclRyYW5zZm9ybXM9bnVsbCwgJG9wdGlvbnM9bnVsbCkKICAgIHsKICAgICAgICAkcHJlZml4ID0gbnVsbDsKICAgICAgICAkcHJlZml4X25zID0gbnVsbDsKICAgICAgICAkaWRfbmFtZSA9ICdJZCc7CiAgICAgICAgJG92ZXJ3cml0ZV9pZCAgPSB0cnVlOwogICAgICAgICRmb3JjZV91cmkgPSBmYWxzZTsKCiAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSkgewogICAgICAgICAgICAkcHJlZml4ID0gZW1wdHkoJG9wdGlvbnNbJ3ByZWZpeCddKSA/IG51bGwgOiAkb3B0aW9uc1sncHJlZml4J107CiAgICAgICAgICAgICRwcmVmaXhfbnMgPSBlbXB0eSgkb3B0aW9uc1sncHJlZml4X25zJ10pID8gbnVsbCA6ICRvcHRpb25zWydwcmVmaXhfbnMnXTsKICAgICAgICAgICAgJGlkX25hbWUgPSBlbXB0eSgkb3B0aW9uc1snaWRfbmFtZSddKSA/ICdJZCcgOiAkb3B0aW9uc1snaWRfbmFtZSddOwogICAgICAgICAgICAkb3ZlcndyaXRlX2lkID0gIWlzc2V0KCRvcHRpb25zWydvdmVyd3JpdGUnXSkgPyB0cnVlIDogKGJvb2wpICRvcHRpb25zWydvdmVyd3JpdGUnXTsKICAgICAgICAgICAgJGZvcmNlX3VyaSA9ICFpc3NldCgkb3B0aW9uc1snZm9yY2VfdXJpJ10pID8gZmFsc2UgOiAoYm9vbCkgJG9wdGlvbnNbJ2ZvcmNlX3VyaSddOwogICAgICAgIH0KCiAgICAgICAgJGF0dG5hbWUgPSAkaWRfbmFtZTsKICAgICAgICBpZiAoISBlbXB0eSgkcHJlZml4KSkgewogICAgICAgICAgICAkYXR0bmFtZSA9ICRwcmVmaXguJzonLiRhdHRuYW1lOwogICAgICAgIH0KCiAgICAgICAgJHJlZk5vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1JlZmVyZW5jZScpOwogICAgICAgICRzaW5mb05vZGUtPmFwcGVuZENoaWxkKCRyZWZOb2RlKTsKCiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Eb2N1bWVudCkgewogICAgICAgICAgICAkdXJpID0gbnVsbDsKICAgICAgICAgICAgaWYgKCEgJG92ZXJ3cml0ZV9pZCkgewogICAgICAgICAgICAgICAgJHVyaSA9ICRwcmVmaXhfbnMgPyAkbm9kZS0+Z2V0QXR0cmlidXRlTlMoJHByZWZpeF9ucywgJGlkX25hbWUpIDogJG5vZGUtPmdldEF0dHJpYnV0ZSgkaWRfbmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVtcHR5KCR1cmkpKSB7CiAgICAgICAgICAgICAgICAkdXJpID0gc2VsZjo6Z2VuZXJhdGVHVUlEKCk7CiAgICAgICAgICAgICAgICAkbm9kZS0+c2V0QXR0cmlidXRlTlMoJHByZWZpeF9ucywgJGF0dG5hbWUsICR1cmkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZWZOb2RlLT5zZXRBdHRyaWJ1dGUoIlVSSSIsICcjJy4kdXJpKTsKICAgICAgICB9IGVsc2VpZiAoJGZvcmNlX3VyaSkgewogICAgICAgICAgICAkcmVmTm9kZS0+c2V0QXR0cmlidXRlKCJVUkkiLCAnJyk7CiAgICAgICAgfQoKICAgICAgICAkdHJhbnNOb2RlcyA9ICR0aGlzLT5jcmVhdGVOZXdTaWduTm9kZSgnVHJhbnNmb3JtcycpOwogICAgICAgICRyZWZOb2RlLT5hcHBlbmRDaGlsZCgkdHJhbnNOb2Rlcyk7CgogICAgICAgIGlmIChpc19hcnJheSgkYXJUcmFuc2Zvcm1zKSkgewogICAgICAgICAgICBmb3JlYWNoICgkYXJUcmFuc2Zvcm1zIEFTICR0cmFuc2Zvcm0pIHsKICAgICAgICAgICAgICAgICR0cmFuc05vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1RyYW5zZm9ybScpOwogICAgICAgICAgICAgICAgJHRyYW5zTm9kZXMtPmFwcGVuZENoaWxkKCR0cmFuc05vZGUpOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0cmFuc2Zvcm0pICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZW1wdHkoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXSkpICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZW1wdHkoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXVsncXVlcnknXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRyYW5zTm9kZS0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnKTsKICAgICAgICAgICAgICAgICAgICAkWFBhdGhOb2RlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdYUGF0aCcsICR0cmFuc2Zvcm1bJ2h0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLXhwYXRoLTE5OTkxMTE2J11bJ3F1ZXJ5J10pOwogICAgICAgICAgICAgICAgICAgICR0cmFuc05vZGUtPmFwcGVuZENoaWxkKCRYUGF0aE5vZGUpOwogICAgICAgICAgICAgICAgICAgIGlmICghIGVtcHR5KCR0cmFuc2Zvcm1bJ2h0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLXhwYXRoLTE5OTkxMTE2J11bJ25hbWVzcGFjZXMnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRyYW5zZm9ybVsnaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMteHBhdGgtMTk5OTExMTYnXVsnbmFtZXNwYWNlcyddIEFTICRwcmVmaXggPT4gJG5hbWVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFhQYXRoTm9kZS0+c2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgInhtbG5zOiRwcmVmaXgiLCAkbmFtZXNwYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRyYW5zTm9kZS0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAkdHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICghIGVtcHR5KCR0aGlzLT5jYW5vbmljYWxNZXRob2QpKSB7CiAgICAgICAgICAgICR0cmFuc05vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1RyYW5zZm9ybScpOwogICAgICAgICAgICAkdHJhbnNOb2Rlcy0+YXBwZW5kQ2hpbGQoJHRyYW5zTm9kZSk7CiAgICAgICAgICAgICR0cmFuc05vZGUtPnNldEF0dHJpYnV0ZSgnQWxnb3JpdGhtJywgJHRoaXMtPmNhbm9uaWNhbE1ldGhvZCk7CiAgICAgICAgfQoKICAgICAgICAkY2Fub25pY2FsRGF0YSA9ICR0aGlzLT5wcm9jZXNzVHJhbnNmb3JtcygkcmVmTm9kZSwgJG5vZGUpOwogICAgICAgICRkaWdWYWx1ZSA9ICR0aGlzLT5jYWxjdWxhdGVEaWdlc3QoJGFsZ29yaXRobSwgJGNhbm9uaWNhbERhdGEpOwoKICAgICAgICAkZGlnZXN0TWV0aG9kID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdEaWdlc3RNZXRob2QnKTsKICAgICAgICAkcmVmTm9kZS0+YXBwZW5kQ2hpbGQoJGRpZ2VzdE1ldGhvZCk7CiAgICAgICAgJGRpZ2VzdE1ldGhvZC0+c2V0QXR0cmlidXRlKCdBbGdvcml0aG0nLCAkYWxnb3JpdGhtKTsKCiAgICAgICAgJGRpZ2VzdFZhbHVlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdEaWdlc3RWYWx1ZScsICRkaWdWYWx1ZSk7CiAgICAgICAgJHJlZk5vZGUtPmFwcGVuZENoaWxkKCRkaWdlc3RWYWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJG5vZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsZ29yaXRobQogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJGFyVHJhbnNmb3JtcwogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFJlZmVyZW5jZSgkbm9kZSwgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3Jtcz1udWxsLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25lZEluZm8iOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgICAgIGlmICgkc0luZm8gPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmFkZFJlZkludGVybmFsKCRzSW5mbywgJG5vZGUsICRhbGdvcml0aG0sICRhclRyYW5zZm9ybXMsICRvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkYXJOb2RlcwogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkYXJUcmFuc2Zvcm1zCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUmVmZXJlbmNlTGlzdCgkYXJOb2RlcywgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3Jtcz1udWxsLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25lZEluZm8iOwogICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgICAgIGlmICgkc0luZm8gPSAkbm9kZXNldC0+aXRlbSgwKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGFyTm9kZXMgQVMgJG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkUmVmSW50ZXJuYWwoJHNJbmZvLCAkbm9kZSwgJGFsZ29yaXRobSwgJGFyVHJhbnNmb3JtcywgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTUVsZW1lbnR8c3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJG1pbWV0eXBlCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJGVuY29kaW5nCiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE9iamVjdCgkZGF0YSwgJG1pbWV0eXBlPW51bGwsICRlbmNvZGluZz1udWxsKQogICAgewogICAgICAgICRvYmpOb2RlID0gJHRoaXMtPmNyZWF0ZU5ld1NpZ25Ob2RlKCdPYmplY3QnKTsKICAgICAgICAkdGhpcy0+c2lnTm9kZS0+YXBwZW5kQ2hpbGQoJG9iak5vZGUpOwogICAgICAgIGlmICghIGVtcHR5KCRtaW1ldHlwZSkpIHsKICAgICAgICAgICAgJG9iak5vZGUtPnNldEF0dHJpYnV0ZSgnTWltZVR5cGUnLCAkbWltZXR5cGUpOwogICAgICAgIH0KICAgICAgICBpZiAoISBlbXB0eSgkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgICRvYmpOb2RlLT5zZXRBdHRyaWJ1dGUoJ0VuY29kaW5nJywgJGVuY29kaW5nKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZGF0YSBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgJG5ld0RhdGEgPSAkdGhpcy0+c2lnTm9kZS0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZGF0YSwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5ld0RhdGEgPSAkdGhpcy0+c2lnTm9kZS0+b3duZXJEb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoJGRhdGEpOwogICAgICAgIH0KICAgICAgICAkb2JqTm9kZS0+YXBwZW5kQ2hpbGQoJG5ld0RhdGEpOwoKICAgICAgICByZXR1cm4gJG9iak5vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbnVsbHxET01Ob2RlICRub2RlCiAgICAgKiBAcmV0dXJuIG51bGx8WE1MU2VjdXJpdHlLZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvY2F0ZUtleSgkbm9kZT1udWxsKQogICAgewogICAgICAgIGlmIChlbXB0eSgkbm9kZSkpIHsKICAgICAgICAgICAgJG5vZGUgPSAkdGhpcy0+c2lnTm9kZTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJG5vZGUgaW5zdGFuY2VvZiBET01Ob2RlKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJGRvYyA9ICRub2RlLT5vd25lckRvY3VtZW50KSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2VjZHNpZycsIHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgICAgICRxdWVyeSA9ICJzdHJpbmcoLi9zZWNkc2lnOlNpZ25lZEluZm8vc2VjZHNpZzpTaWduYXR1cmVNZXRob2QvQEFsZ29yaXRobSkiOwogICAgICAgICAgICAkYWxnb3JpdGhtID0gJHhwYXRoLT5ldmFsdWF0ZSgkcXVlcnksICRub2RlKTsKICAgICAgICAgICAgaWYgKCRhbGdvcml0aG0pIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJG9iaktleSA9IG5ldyBYTUxTZWN1cml0eUtleSgkYWxnb3JpdGhtLCBhcnJheSgndHlwZScgPT4gJ3B1YmxpYycpKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICRvYmpLZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zOgogICAgICogIEJvb2wgd2hlbiB2ZXJpZnlpbmcgSE1BQ19TSEExOwogICAgICogIEludCBvdGhlcndpc2UsIHdpdGggZm9sbG93aW5nIG1lYW5pbmdzOgogICAgICogICAgMSBvbiBzdWNjZXNmdWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiwKICAgICAqICAgIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHByb2Nlc3NpbmcuCiAgICAgKgogICAgICogTk9URTogYmUgdmVyeSBjYXJlZnVsIHdoZW4gY2hlY2tpbmcgdGhlIGludCByZXR1cm4gdmFsdWUsIGJlY2F1c2UgaW4KICAgICAqIFBIUCwgLTEgd2lsbCBiZSBjYXN0IHRvIFRydWUgd2hlbiBpbiBib29sZWFuIGNvbnRleHQuIEFsd2F5cyBjaGVjayB0aGUKICAgICAqIHJldHVybiB2YWx1ZSBpbiBhIHN0cmljdGx5IHR5cGVkIHdheSwgZS5nLiAiJG9iai0+dmVyaWZ5KC4uLikgPT09IDEiLgogICAgICoKICAgICAqIEBwYXJhbSBYTUxTZWN1cml0eUtleSAkb2JqS2V5CiAgICAgKiBAcmV0dXJuIGJvb2x8aW50CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KCRvYmpLZXkpCiAgICB7CiAgICAgICAgJGRvYyA9ICR0aGlzLT5zaWdOb2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkZG9jKTsKICAgICAgICAkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdzZWNkc2lnJywgc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAkcXVlcnkgPSAic3RyaW5nKC4vc2VjZHNpZzpTaWduYXR1cmVWYWx1ZSkiOwogICAgICAgICRzaWdWYWx1ZSA9ICR4cGF0aC0+ZXZhbHVhdGUoJHF1ZXJ5LCAkdGhpcy0+c2lnTm9kZSk7CiAgICAgICAgaWYgKGVtcHR5KCRzaWdWYWx1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBTaWduYXR1cmVWYWx1ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iaktleS0+dmVyaWZ5U2lnbmF0dXJlKCR0aGlzLT5zaWduZWRJbmZvLCBiYXNlNjRfZGVjb2RlKCRzaWdWYWx1ZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRvYmpLZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduRGF0YSgkb2JqS2V5LCAkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gJG9iaktleS0+c2lnbkRhdGEoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFhNTFNlY3VyaXR5S2V5ICRvYmpLZXkKICAgICAqIEBwYXJhbSBudWxsfERPTU5vZGUgJGFwcGVuZFRvTm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbigkb2JqS2V5LCAkYXBwZW5kVG9Ob2RlID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcGFyZW50IG5vZGUgYXBwZW5kIGl0IG5vdyBzbyBDMTROIHByb3Blcmx5IHdvcmtzCiAgICAgICAgaWYgKCRhcHBlbmRUb05vZGUgIT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+cmVzZXRYUGF0aE9iaigpOwogICAgICAgICAgICAkdGhpcy0+YXBwZW5kU2lnbmF0dXJlKCRhcHBlbmRUb05vZGUpOwogICAgICAgICAgICAkdGhpcy0+c2lnTm9kZSA9ICRhcHBlbmRUb05vZGUtPmxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgaWYgKCR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6U2lnbmVkSW5mbyI7CiAgICAgICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICR0aGlzLT5zaWdOb2RlKTsKICAgICAgICAgICAgaWYgKCRzSW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOlNpZ25hdHVyZU1ldGhvZCI7CiAgICAgICAgICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkc0luZm8pOwogICAgICAgICAgICAgICAgJHNNZXRob2QgPSAkbm9kZXNldC0+aXRlbSgwKTsKICAgICAgICAgICAgICAgICRzTWV0aG9kLT5zZXRBdHRyaWJ1dGUoJ0FsZ29yaXRobScsICRvYmpLZXktPnR5cGUpOwogICAgICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+Y2Fub25pY2FsaXplRGF0YSgkc0luZm8sICR0aGlzLT5jYW5vbmljYWxNZXRob2QpOwogICAgICAgICAgICAgICAgJHNpZ1ZhbHVlID0gYmFzZTY0X2VuY29kZSgkdGhpcy0+c2lnbkRhdGEoJG9iaktleSwgJGRhdGEpKTsKICAgICAgICAgICAgICAgICRzaWdWYWx1ZU5vZGUgPSAkdGhpcy0+Y3JlYXRlTmV3U2lnbk5vZGUoJ1NpZ25hdHVyZVZhbHVlJywgJHNpZ1ZhbHVlKTsKICAgICAgICAgICAgICAgIGlmICgkaW5mb1NpYmxpbmcgPSAkc0luZm8tPm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgJGluZm9TaWJsaW5nLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJHNpZ1ZhbHVlTm9kZSwgJGluZm9TaWJsaW5nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNpZ05vZGUtPmFwcGVuZENoaWxkKCRzaWdWYWx1ZU5vZGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRDZXJ0KCkKICAgIHsKCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gWE1MU2VjdXJpdHlLZXkgJG9iaktleQogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkcGFyZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRLZXkoJG9iaktleSwgJHBhcmVudD1udWxsKQogICAgewogICAgICAgICRvYmpLZXktPnNlcmlhbGl6ZUtleSgkcGFyZW50KTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGluc2VydHMgdGhlIHNpZ25hdHVyZSBlbGVtZW50LgogICAgICoKICAgICAqIFRoZSBzaWduYXR1cmUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbGVtZW50LCB1bmxlc3MgJGJlZm9yZU5vZGUgaXMgc3BlY2lmaWVkLiBJZiAkYmVmb3JlTm9kZQogICAgICogaXMgc3BlY2lmaWVkLCB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgbGFzdCBlbGVtZW50IGJlZm9yZSAkYmVmb3JlTm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSAgICAgICBUaGUgbm9kZSB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkIGludG8uCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkYmVmb3JlTm9kZSBUaGUgbm9kZSB0aGUgc2lnbmF0dXJlIGVsZW1lbnQgc2hvdWxkIGJlIGxvY2F0ZWQgYmVmb3JlLgogICAgICoKICAgICAqIEByZXR1cm4gRE9NTm9kZSBUaGUgc2lnbmF0dXJlIGVsZW1lbnQgbm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0U2lnbmF0dXJlKCRub2RlLCAkYmVmb3JlTm9kZSA9IG51bGwpCiAgICB7CgogICAgICAgICRkb2N1bWVudCA9ICRub2RlLT5vd25lckRvY3VtZW50OwogICAgICAgICRzaWduYXR1cmVFbGVtZW50ID0gJGRvY3VtZW50LT5pbXBvcnROb2RlKCR0aGlzLT5zaWdOb2RlLCB0cnVlKTsKCiAgICAgICAgaWYgKCRiZWZvcmVOb2RlID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRub2RlLT5pbnNlcnRCZWZvcmUoJHNpZ25hdHVyZUVsZW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkbm9kZS0+aW5zZXJ0QmVmb3JlKCRzaWduYXR1cmVFbGVtZW50LCAkYmVmb3JlTm9kZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJHBhcmVudE5vZGUKICAgICAqIEBwYXJhbSBib29sICRpbnNlcnRCZWZvcmUKICAgICAqIEByZXR1cm4gRE9NTm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kU2lnbmF0dXJlKCRwYXJlbnROb2RlLCAkaW5zZXJ0QmVmb3JlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGJlZm9yZU5vZGUgPSAkaW5zZXJ0QmVmb3JlID8gJHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQgOiBudWxsOwogICAgICAgIHJldHVybiAkdGhpcy0+aW5zZXJ0U2lnbmF0dXJlKCRwYXJlbnROb2RlLCAkYmVmb3JlTm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjZXJ0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQRU1Gb3JtYXQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0NTA5WENlcnQoJGNlcnQsICRpc1BFTUZvcm1hdD10cnVlKQogICAgewogICAgICAgICRjZXJ0cyA9IHNlbGY6OnN0YXRpY0dldDUwOVhDZXJ0cygkY2VydCwgJGlzUEVNRm9ybWF0KTsKICAgICAgICBpZiAoISBlbXB0eSgkY2VydHMpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2VydHNbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNlcnRzCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQRU1Gb3JtYXQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGF0aWNHZXQ1MDlYQ2VydHMoJGNlcnRzLCAkaXNQRU1Gb3JtYXQ9dHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJGlzUEVNRm9ybWF0KSB7CiAgICAgICAgICAgICRkYXRhID0gJyc7CiAgICAgICAgICAgICRjZXJ0bGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgICRhckNlcnQgPSBleHBsb2RlKCJcbiIsICRjZXJ0cyk7CiAgICAgICAgICAgICRpbkRhdGEgPSBmYWxzZTsKICAgICAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBBUyAkY3VyRGF0YSkgewogICAgICAgICAgICAgICAgaWYgKCEgJGluRGF0YSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCRjdXJEYXRhLCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURScsIDIyKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoJGN1ckRhdGEsICctLS0tLUVORCBDRVJUSUZJQ0FURScsIDIwKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNlcnRsaXN0W10gPSAkZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRkYXRhIC49IHRyaW0oJGN1ckRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkY2VydGxpc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRjZXJ0cyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTUVsZW1lbnQgJHBhcmVudFJlZgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHBhcmFtIGJvb2wgJGlzUEVNRm9ybWF0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNVUkwKICAgICAqIEBwYXJhbSBudWxsfERPTVhQYXRoICR4cGF0aAogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG9wdGlvbnMKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhdGljQWRkNTA5Q2VydCgkcGFyZW50UmVmLCAkY2VydCwgJGlzUEVNRm9ybWF0PXRydWUsICRpc1VSTD1mYWxzZSwgJHhwYXRoPW51bGwsICRvcHRpb25zPW51bGwpCiAgICB7CiAgICAgICAgaWYgKCRpc1VSTCkgewogICAgICAgICAgICAkY2VydCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjZXJ0KTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHBhcmVudFJlZiBpbnN0YW5jZW9mIERPTUVsZW1lbnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBwYXJlbnQgTm9kZSBwYXJhbWV0ZXInKTsKICAgICAgICB9CiAgICAgICAgJGJhc2VEb2MgPSAkcGFyZW50UmVmLT5vd25lckRvY3VtZW50OwoKICAgICAgICBpZiAoZW1wdHkoJHhwYXRoKSkgewogICAgICAgICAgICAkeHBhdGggPSBuZXcgRE9NWFBhdGgoJHBhcmVudFJlZi0+b3duZXJEb2N1bWVudCk7CiAgICAgICAgICAgICR4cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3NlY2RzaWcnLCBzZWxmOjpYTUxEU0lHTlMpOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gIi4vc2VjZHNpZzpLZXlJbmZvIjsKICAgICAgICAkbm9kZXNldCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5LCAkcGFyZW50UmVmKTsKICAgICAgICAka2V5SW5mbyA9ICRub2Rlc2V0LT5pdGVtKDApOwogICAgICAgICRkc2lnX3BmeCA9ICcnOwogICAgICAgIGlmICghICRrZXlJbmZvKSB7CiAgICAgICAgICAgICRwZnggPSAkcGFyZW50UmVmLT5sb29rdXBQcmVmaXgoc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHBmeCkpIHsKICAgICAgICAgICAgICAgICRkc2lnX3BmeCA9ICRwZnguIjoiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbnNlcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAka2V5SW5mbyA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ0tleUluZm8nKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6T2JqZWN0IjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHBhcmVudFJlZik7CiAgICAgICAgICAgIGlmICgkc09iamVjdCA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkc09iamVjdC0+cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKCRrZXlJbmZvLCAkc09iamVjdCk7CiAgICAgICAgICAgICAgICAkaW5zZXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISAkaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgICAgICRwYXJlbnRSZWYtPmFwcGVuZENoaWxkKCRrZXlJbmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwZnggPSAka2V5SW5mby0+bG9va3VwUHJlZml4KHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgICAgIGlmICghIGVtcHR5KCRwZngpKSB7CiAgICAgICAgICAgICAgICAkZHNpZ19wZnggPSAkcGZ4LiI6IjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIGFsbCBjZXJ0cyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZQogICAgICAgICRjZXJ0cyA9IHNlbGY6OnN0YXRpY0dldDUwOVhDZXJ0cygkY2VydCwgJGlzUEVNRm9ybWF0KTsKCiAgICAgICAgLy8gQXR0YWNoIFg1MDkgZGF0YSBub2RlCiAgICAgICAgJHg1MDlEYXRhTm9kZSA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ1g1MDlEYXRhJyk7CiAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCR4NTA5RGF0YU5vZGUpOwoKICAgICAgICAkaXNzdWVyU2VyaWFsID0gZmFsc2U7CiAgICAgICAgJHN1YmplY3ROYW1lID0gZmFsc2U7CiAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSkgewogICAgICAgICAgICBpZiAoISBlbXB0eSgkb3B0aW9uc1snaXNzdWVyU2VyaWFsJ10pKSB7CiAgICAgICAgICAgICAgICAkaXNzdWVyU2VyaWFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISBlbXB0eSgkb3B0aW9uc1snc3ViamVjdE5hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRzdWJqZWN0TmFtZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEF0dGFjaCBhbGwgY2VydGlmaWNhdGUgbm9kZXMgYW5kIGFueSBhZGRpdGlvbmFsIGRhdGEKICAgICAgICBmb3JlYWNoICgkY2VydHMgYXMgJFg1MDlDZXJ0KSB7CiAgICAgICAgICAgIGlmICgkaXNzdWVyU2VyaWFsIHx8ICRzdWJqZWN0TmFtZSkgewogICAgICAgICAgICAgICAgaWYgKCRjZXJ0RGF0YSA9IG9wZW5zc2xfeDUwOV9wYXJzZSgiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iLmNodW5rX3NwbGl0KCRYNTA5Q2VydCwgNjQsICJcbiIpLiItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViamVjdE5hbWUgJiYgISBlbXB0eSgkY2VydERhdGFbJ3N1YmplY3QnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRjZXJ0RGF0YVsnc3ViamVjdCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjZXJ0RGF0YVsnc3ViamVjdCddIEFTICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICR2YWx1ZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHBhcnRzLCAiJGtleT0kdmFsdWVFbGVtZW50Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwYXJ0cywgIiRrZXk9JHZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YmplY3ROYW1lVmFsdWUgPSBpbXBsb2RlKCcsJywgJHBhcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJqZWN0TmFtZVZhbHVlID0gJGNlcnREYXRhWydzdWJqZWN0J107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlTdWJqZWN0Tm9kZSA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ1g1MDlTdWJqZWN0TmFtZScsICRzdWJqZWN0TmFtZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlEYXRhTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlTdWJqZWN0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkaXNzdWVyU2VyaWFsICYmICEgZW1wdHkoJGNlcnREYXRhWydpc3N1ZXInXSkgJiYgISBlbXB0eSgkY2VydERhdGFbJ3NlcmlhbE51bWJlciddKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGNlcnREYXRhWydpc3N1ZXInXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkY2VydERhdGFbJ2lzc3VlciddIEFTICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkcGFydHMsICIka2V5PSR2YWx1ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzc3Vlck5hbWUgPSBpbXBsb2RlKCcsJywgJHBhcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3N1ZXJOYW1lID0gJGNlcnREYXRhWydpc3N1ZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlJc3N1ZXJOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUlzc3VlclNlcmlhbCcpOwogICAgICAgICAgICAgICAgICAgICAgICAkeDUwOURhdGFOb2RlLT5hcHBlbmRDaGlsZCgkeDUwOUlzc3Vlck5vZGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUlzc3Vlck5hbWUnLCAkaXNzdWVyTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR4NTA5SXNzdWVyTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHg1MDlOb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOVNlcmlhbE51bWJlcicsICRjZXJ0RGF0YVsnc2VyaWFsTnVtYmVyJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkeDUwOUlzc3Vlck5vZGUtPmFwcGVuZENoaWxkKCR4NTA5Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICAkeDUwOUNlcnROb2RlID0gJGJhc2VEb2MtPmNyZWF0ZUVsZW1lbnROUyhzZWxmOjpYTUxEU0lHTlMsICRkc2lnX3BmeC4nWDUwOUNlcnRpZmljYXRlJywgJFg1MDlDZXJ0KTsKICAgICAgICAgICAgJHg1MDlEYXRhTm9kZS0+YXBwZW5kQ2hpbGQoJHg1MDlDZXJ0Tm9kZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHBhcmFtIGJvb2wgJGlzUEVNRm9ybWF0CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNVUkwKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQ1MDlDZXJ0KCRjZXJ0LCAkaXNQRU1Gb3JtYXQ9dHJ1ZSwgJGlzVVJMPWZhbHNlLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgkeHBhdGggPSAkdGhpcy0+Z2V0WFBhdGhPYmooKSkgewogICAgICAgICAgICBzZWxmOjpzdGF0aWNBZGQ1MDlDZXJ0KCR0aGlzLT5zaWdOb2RlLCAkY2VydCwgJGlzUEVNRm9ybWF0LCAkaXNVUkwsICR4cGF0aCwgJG9wdGlvbnMpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIG5vZGUgdG8gdGhlIEtleUluZm8uCiAgICAgKgogICAgICogVGhlIEtleUluZm8gZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgaWYgb25lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSBUaGUgbm9kZSB0byBhcHBlbmQgdG8gdGhlIEtleUluZm8uCiAgICAgKgogICAgICogQHJldHVybiBET01Ob2RlIFRoZSBLZXlJbmZvIGVsZW1lbnQgbm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kVG9LZXlJbmZvKCRub2RlKQogICAgewogICAgICAgICRwYXJlbnRSZWYgPSAkdGhpcy0+c2lnTm9kZTsKICAgICAgICAkYmFzZURvYyA9ICRwYXJlbnRSZWYtPm93bmVyRG9jdW1lbnQ7CgogICAgICAgICR4cGF0aCA9ICR0aGlzLT5nZXRYUGF0aE9iaigpOwogICAgICAgIGlmIChlbXB0eSgkeHBhdGgpKSB7CiAgICAgICAgICAgICR4cGF0aCA9IG5ldyBET01YUGF0aCgkcGFyZW50UmVmLT5vd25lckRvY3VtZW50KTsKICAgICAgICAgICAgJHhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgnc2VjZHNpZycsIHNlbGY6OlhNTERTSUdOUyk7CiAgICAgICAgfQoKICAgICAgICAkcXVlcnkgPSAiLi9zZWNkc2lnOktleUluZm8iOwogICAgICAgICRub2Rlc2V0ID0gJHhwYXRoLT5xdWVyeSgkcXVlcnksICRwYXJlbnRSZWYpOwogICAgICAgICRrZXlJbmZvID0gJG5vZGVzZXQtPml0ZW0oMCk7CiAgICAgICAgaWYgKCEgJGtleUluZm8pIHsKICAgICAgICAgICAgJGRzaWdfcGZ4ID0gJyc7CiAgICAgICAgICAgICRwZnggPSAkcGFyZW50UmVmLT5sb29rdXBQcmVmaXgoc2VsZjo6WE1MRFNJR05TKTsKICAgICAgICAgICAgaWYgKCEgZW1wdHkoJHBmeCkpIHsKICAgICAgICAgICAgICAgICRkc2lnX3BmeCA9ICRwZnguIjoiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbnNlcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAka2V5SW5mbyA9ICRiYXNlRG9jLT5jcmVhdGVFbGVtZW50TlMoc2VsZjo6WE1MRFNJR05TLCAkZHNpZ19wZnguJ0tleUluZm8nKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICIuL3NlY2RzaWc6T2JqZWN0IjsKICAgICAgICAgICAgJG5vZGVzZXQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSwgJHBhcmVudFJlZik7CiAgICAgICAgICAgIGlmICgkc09iamVjdCA9ICRub2Rlc2V0LT5pdGVtKDApKSB7CiAgICAgICAgICAgICAgICAkc09iamVjdC0+cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKCRrZXlJbmZvLCAkc09iamVjdCk7CiAgICAgICAgICAgICAgICAkaW5zZXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISAkaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgICAgICRwYXJlbnRSZWYtPmFwcGVuZENoaWxkKCRrZXlJbmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGtleUluZm8tPmFwcGVuZENoaWxkKCRub2RlKTsKCiAgICAgICAgcmV0dXJuICRrZXlJbmZvOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdGhlIHZhbGlkYXRlZCBub2Rlcy4KICAgICAqCiAgICAgKiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHRoZSBpZCBvZiB0aGUgcmVmZXJlbmNlZCBub2RlIGFzIHRoZSBrZXkgYW5kIHRoZSBub2RlIGl0c2VsZgogICAgICogYXMgdGhlIHZhbHVlLgogICAgICoKICAgICAqIFJldHVybnM6CiAgICAgKiAgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdmFsaWRhdGVkIG5vZGVzIG9yIG51bGwgaWYgbm8gbm9kZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZC4KICAgICAqCiAgICAgKiAgQHJldHVybiBhcnJheSBBc3NvY2lhdGl2ZSBhcnJheSBvZiB2YWxpZGF0ZWQgbm9kZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbGlkYXRlZE5vZGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbGlkYXRlZE5vZGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFJvYlJpY2hhcmRzXFhNTFNlY0xpYnM7Cgp1c2UgRE9NRWxlbWVudDsKdXNlIEV4Y2VwdGlvbjsKCi8qKgogKiB4bWxzZWNsaWJzLnBocAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAyNCwgUm9iZXJ0IFJpY2hhcmRzIDxycmljaGFyZHNAY2RhdGF6b25lLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgICBkaXN0cmlidXRpb24uCiAqCiAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJvYmVydCBSaWNoYXJkcyBub3IgdGhlIG5hbWVzIG9mIGhpcwogKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGF1dGhvciAgICBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAY29weXJpZ2h0IDIwMDctMjAyNCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPgogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBCU0QgTGljZW5zZQogKi8KCmNsYXNzIFhNTFNlY3VyaXR5S2V5CnsKICAgIGNvbnN0IFRSSVBMRURFU19DQkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyc7CiAgICBjb25zdCBBRVMxMjhfQ0JDID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczEyOC1jYmMnOwogICAgY29uc3QgQUVTMTkyX0NCQyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNhZXMxOTItY2JjJzsKICAgIGNvbnN0IEFFUzI1Nl9DQkMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMjU2LWNiYyc7CiAgICBjb25zdCBBRVMxMjhfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTI4LWdjbSc7CiAgICBjb25zdCBBRVMxOTJfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMTkyLWdjbSc7CiAgICBjb25zdCBBRVMyNTZfR0NNID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjYWVzMjU2LWdjbSc7CiAgICBjb25zdCBSU0FfMV81ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUnOwogICAgY29uc3QgUlNBX09BRVBfTUdGMVAgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjcnNhLW9hZXAtbWdmMXAnOwogICAgY29uc3QgUlNBX09BRVAgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNyc2Etb2FlcCc7CiAgICBjb25zdCBEU0FfU0hBMSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZHNhLXNoYTEnOwogICAgY29uc3QgUlNBX1NIQTEgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJzsKICAgIGNvbnN0IFJTQV9TSEEyNTYgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1Nic7CiAgICBjb25zdCBSU0FfU0hBMzg0ID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEzODQnOwogICAgY29uc3QgUlNBX1NIQTUxMiA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJzsKICAgIGNvbnN0IEhNQUNfU0hBMSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjaG1hYy1zaGExJzsKICAgIGNvbnN0IEFVVEhUQUdfTEVOR1RIID0gMTY7CgogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgJGNyeXB0UGFyYW1zID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBpbnR8c3RyaW5nICovCiAgICBwdWJsaWMgJHR5cGUgPSAwOwoKICAgIC8qKiBAdmFyIG1peGVkfG51bGwgKi8KICAgIHB1YmxpYyAka2V5ID0gbnVsbDsKCiAgICAvKiogQHZhciBzdHJpbmcgICovCiAgICBwdWJsaWMgJHBhc3NwaHJhc2UgPSAiIjsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHVibGljICRpdiA9IG51bGw7CgogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHB1YmxpYyAkbmFtZSA9IG51bGw7CgogICAgLyoqIEB2YXIgbWl4ZWR8bnVsbCAqLwogICAgcHVibGljICRrZXlDaGFpbiA9IG51bGw7CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHVibGljICRpc0VuY3J5cHRlZCA9IGZhbHNlOwoKICAgIC8qKiBAdmFyIFhNTFNlY0VuY3xudWxsICovCiAgICBwdWJsaWMgJGVuY3J5cHRlZEN0eCA9IG51bGw7CgogICAgLyoqIEB2YXIgbWl4ZWR8bnVsbCAqLwogICAgcHVibGljICRndWlkID0gbnVsbDsKCiAgICAvKioKICAgICAqIFRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlIGFzIGEgc3RyaW5nIGlmIHRoaXMga2V5IHJlcHJlc2VudHMgYW4gWDUwOS1jZXJ0aWZpY2F0ZS4KICAgICAqIElmIHRoaXMga2V5IGRvZXNuJ3QgcmVwcmVzZW50IGEgY2VydGlmaWNhdGUsIHRoaXMgd2lsbCBiZSBudWxsLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR4NTA5Q2VydGlmaWNhdGUgPSBudWxsOwoKICAgIC8qKgogICAgICogVGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgY2VydGlmaWNhdGUgdGh1bWJwcmludCBpZiB3ZSBoYXZlIGxvYWRlZCBhbiBYNTA5LWNlcnRpZmljYXRlLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRYNTA5VGh1bWJwcmludCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkcGFyYW1zCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHR5cGUsICRwYXJhbXM9bnVsbCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OlRSSVBMRURFU19DQkMpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddID0gJ2Rlcy1lZGUzLWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyN0cmlwbGVkZXMtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddID0gMjQ7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2Jsb2Nrc2l6ZSddID0gODsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxMjhfQ0JDKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTI4LWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNhZXMxMjgtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddID0gMTY7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2Jsb2Nrc2l6ZSddID0gMTY7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6QUVTMTkyX0NCQyk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10gPSAnYWVzLTE5Mi1jYmMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10gPSAnc3ltbWV0cmljJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMTkyLWNiYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSA9IDI0OwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydibG9ja3NpemUnXSA9IDE2OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OkFFUzI1Nl9DQkMpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddID0gJ2Flcy0yNTYtY2JjJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJ3N5bW1ldHJpYyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI2FlczI1Ni1jYmMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAzMjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxMjhfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTI4LWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczEyOC1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMxOTJfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMTkyLWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczE5Mi1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAyNDsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpBRVMyNTZfR0NNKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSA9ICdhZXMtMjU2LWdjbSc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICdzeW1tZXRyaWMnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExI2FlczI1Ni1nY20nOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ10gPSAzMjsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10gPSAxNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfMV81KToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10gPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3JzYS0xXzUnOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6UlNBX09BRVBfTUdGMVApOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3BhZGRpbmcnXSA9IE9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNyc2Etb2FlcC1tZ2YxcCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2hhc2gnXSA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfT0FFUCk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9PQUVQX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDkveG1sZW5jMTEjcnNhLW9hZXAnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydoYXNoJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwOS94bWxlbmMxMSNtZ2Yxc2hhMSc7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfU0hBMSk6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9QQURESU5HOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6UlNBX1NIQTI1Nik6CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9ICdvcGVuc3NsJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ10gPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1Nic7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3BhZGRpbmcnXSA9IE9QRU5TU0xfUEtDUzFfUEFERElORzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10gPSAnU0hBMjU2JzsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkcGFyYW1zKSAmJiAhIGVtcHR5KCRwYXJhbXNbJ3R5cGUnXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtc1sndHlwZSddID09ICdwdWJsaWMnIHx8ICRwYXJhbXNbJ3R5cGUnXSA9PSAncHJpdmF0ZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10gPSAkcGFyYW1zWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NlcnRpZmljYXRlICJ0eXBlIiAocHJpdmF0ZS9wdWJsaWMpIG11c3QgYmUgcGFzc2VkIHZpYSBwYXJhbWV0ZXJzJyk7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OlJTQV9TSEEzODQpOgogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPSAnb3BlbnNzbCc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEzODQnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10gPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2RpZ2VzdCddID0gJ1NIQTM4NCc7CiAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykgJiYgISBlbXB0eSgkcGFyYW1zWyd0eXBlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbXNbJ3R5cGUnXSA9PSAncHVibGljJyB8fCAkcGFyYW1zWyd0eXBlJ10gPT0gJ3ByaXZhdGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDZXJ0aWZpY2F0ZSAidHlwZSIgKHByaXZhdGUvcHVibGljKSBtdXN0IGJlIHBhc3NlZCB2aWEgcGFyYW1ldGVycycpOwogICAgICAgICAgICBjYXNlIChzZWxmOjpSU0FfU0hBNTEyKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJ29wZW5zc2wnOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydtZXRob2QnXSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhNTEyJzsKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddID0gT1BFTlNTTF9QS0NTMV9QQURESU5HOwogICAgICAgICAgICAgICAgJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXSA9ICdTSEE1MTInOwogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXMpICYmICEgZW1wdHkoJHBhcmFtc1sndHlwZSddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1zWyd0eXBlJ10gPT0gJ3B1YmxpYycgfHwgJHBhcmFtc1sndHlwZSddID09ICdwcml2YXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ2VydGlmaWNhdGUgInR5cGUiIChwcml2YXRlL3B1YmxpYykgbXVzdCBiZSBwYXNzZWQgdmlhIHBhcmFtZXRlcnMnKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6SE1BQ19TSEExKToKICAgICAgICAgICAgICAgICR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddID0gJHR5cGU7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3J5cHRQYXJhbXNbJ21ldGhvZCddID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNobWFjLXNoYTEnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEtleSBUeXBlJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUga2V5IHNpemUgZm9yIHRoZSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG0uLgogICAgICoKICAgICAqIElmIHRoZSBrZXkgc2l6ZSBpcyB1bmtub3duLCBvciB0aGlzIGlzbid0IGEgc3ltbWV0cmljIGVuY3J5cHRpb24gYWxnb3JpdGhtLAogICAgICogbnVsbCBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1tZXRyaWNLZXlTaXplKCkKICAgIHsKICAgICAgICBpZiAoISBpc3NldCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIHNlc3Npb24ga2V5IHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbi4KICAgICAqIEluIGNhc2Ugb2YgdXNpbmcgREVTMy1DQkMgdGhlIGtleSBpcyBjaGVja2VkIGZvciBhIHByb3BlciBwYXJpdHkgYml0cyBzZXQuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlU2Vzc2lvbktleSgpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biBrZXkgc2l6ZSBmb3IgdHlwZSAiJyAuICR0aGlzLT50eXBlIC4gJyIuJyk7CiAgICAgICAgfQogICAgICAgICRrZXlzaXplID0gJHRoaXMtPmNyeXB0UGFyYW1zWydrZXlzaXplJ107CiAgICAgICAgCiAgICAgICAgJGtleSA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygka2V5c2l6ZSk7CiAgICAgICAgCiAgICAgICAgaWYgKCR0aGlzLT50eXBlID09PSBzZWxmOjpUUklQTEVERVNfQ0JDKSB7CiAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBnZW5lcmF0ZWQga2V5IGhhcyB0aGUgcHJvcGVyIHBhcml0eSBiaXRzIHNldC4KICAgICAgICAgICAgICogTWNyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgcGFyaXR5IGJpdHMsIGJ1dCBvdGhlcnMgbWF5IGNhcmUuCiAgICAgICAgICAgICovCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigka2V5KTsgJGkrKykgewogICAgICAgICAgICAgICAgJGJ5dGUgPSBvcmQoJGtleVskaV0pICYgMHhmZTsKICAgICAgICAgICAgICAgICRwYXJpdHkgPSAxOwogICAgICAgICAgICAgICAgZm9yICgkaiA9IDE7ICRqIDwgODsgJGorKykgewogICAgICAgICAgICAgICAgICAgICRwYXJpdHkgXj0gKCRieXRlID4+ICRqKSAmIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYnl0ZSB8PSAkcGFyaXR5OwogICAgICAgICAgICAgICAgJGtleVskaV0gPSBjaHIoJGJ5dGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0aGlzLT5rZXkgPSAka2V5OwogICAgICAgIHJldHVybiAka2V5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByYXcgdGh1bWJwcmludCBvZiBhIGNlcnRpZmljYXRlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJhd1RodW1icHJpbnQoJGNlcnQpCiAgICB7CgogICAgICAgICRhckNlcnQgPSBleHBsb2RlKCJcbiIsICRjZXJ0KTsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgICRpbkRhdGEgPSBmYWxzZTsKCiAgICAgICAgZm9yZWFjaCAoJGFyQ2VydCBBUyAkY3VyRGF0YSkgewogICAgICAgICAgICBpZiAoISAkaW5EYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgkY3VyRGF0YSwgJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUnLCAyMikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRpbkRhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoJGN1ckRhdGEsICctLS0tLUVORCBDRVJUSUZJQ0FURScsIDIwKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGF0YSAuPSB0cmltKCRjdXJEYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEgZW1wdHkoJGRhdGEpKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKHNoYTEoYmFzZTY0X2RlY29kZSgkZGF0YSkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZHMgdGhlIGdpdmVuIGtleSwgb3IgLSB3aXRoIGlzRmlsZSBzZXQgdHJ1ZSAtIHRoZSBrZXkgZnJvbSB0aGUga2V5ZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBib29sICRpc0ZpbGUKICAgICAqIEBwYXJhbSBib29sICRpc0NlcnQKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkS2V5KCRrZXksICRpc0ZpbGU9ZmFsc2UsICRpc0NlcnQgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlzRmlsZSkgewogICAgICAgICAgICAkdGhpcy0+a2V5ID0gZmlsZV9nZXRfY29udGVudHMoJGtleSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmtleSA9ICRrZXk7CiAgICAgICAgfQogICAgICAgIGlmICgkaXNDZXJ0KSB7CiAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX3g1MDlfcmVhZCgkdGhpcy0+a2V5KTsKICAgICAgICAgICAgb3BlbnNzbF94NTA5X2V4cG9ydCgkdGhpcy0+a2V5LCAkc3RyX2NlcnQpOwogICAgICAgICAgICAkdGhpcy0+eDUwOUNlcnRpZmljYXRlID0gJHN0cl9jZXJ0OwogICAgICAgICAgICAkdGhpcy0+a2V5ID0gJHN0cl9jZXJ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT54NTA5Q2VydGlmaWNhdGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPT0gJ29wZW5zc2wnKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6CgkgICAgICAgICAgICAgICAgaWYgKCRpc0NlcnQpIHsKCSAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgdGh1bWJwcmludCBpZiB0aGlzIGlzIGFuIFg1MDkgY2VydGlmaWNhdGUuICovCgkgICAgICAgICAgICAgICAgICAgICR0aGlzLT5YNTA5VGh1bWJwcmludCA9IHNlbGY6OmdldFJhd1RodW1icHJpbnQoJHRoaXMtPmtleSk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX2dldF9wdWJsaWNrZXkoJHRoaXMtPmtleSk7CgkgICAgICAgICAgICAgICAgaWYgKCEgJHRoaXMtPmtleSkgewoJICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmFibGUgdG8gZXh0cmFjdCBwdWJsaWMga2V5Jyk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIGJyZWFrOwoKCSAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSBvcGVuc3NsX2dldF9wcml2YXRla2V5KCR0aGlzLT5rZXksICR0aGlzLT5wYXNzcGhyYXNlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlJ3N5bW1ldHJpYyc6CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkdGhpcy0+a2V5KSA8ICR0aGlzLT5jcnlwdFBhcmFtc1sna2V5c2l6ZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0tleSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJy4kdGhpcy0+Y3J5cHRQYXJhbXNbJ2tleXNpemUnXS4nIGNoYXJhY3RlcnMgZm9yIHRoaXMgY2lwaGVyLCBjb250YWlucyAnLnN0cmxlbigkdGhpcy0+a2V5KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBJU08gMTAxMjYgUGFkZGluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEBwYXJhbSBpbnRlZ2VyICRibG9ja1NpemUKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhZElTTzEwMTI2KCRkYXRhLCAkYmxvY2tTaXplKQogICAgewogICAgICAgIGlmICgkYmxvY2tTaXplID4gMjU2KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Jsb2NrIHNpemUgaGlnaGVyIHRoYW4gMjU2IG5vdCBhbGxvd2VkJyk7CiAgICAgICAgfQogICAgICAgICRwYWRDaHIgPSAkYmxvY2tTaXplIC0gKHN0cmxlbigkZGF0YSkgJSAkYmxvY2tTaXplKTsKICAgICAgICAkcGF0dGVybiA9IGNocigkcGFkQ2hyKTsKICAgICAgICByZXR1cm4gJGRhdGEgLiBzdHJfcmVwZWF0KCRwYXR0ZXJuLCAkcGFkQ2hyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZSBJU08gMTAxMjYgUGFkZGluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdW5wYWRJU08xMDEyNigkZGF0YSkKICAgIHsKICAgICAgICAkcGFkQ2hyID0gc3Vic3RyKCRkYXRhLCAtMSk7CiAgICAgICAgJHBhZExlbiA9IG9yZCgkcGFkQ2hyKTsKICAgICAgICByZXR1cm4gc3Vic3RyKCRkYXRhLCAwLCAtJHBhZExlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0cyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVuY3J5cHRTeW1tZXRyaWMoJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPml2ID0gb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddKSk7CiAgICAgICAgJGF1dGhUYWcgPSBudWxsOwogICAgICAgIGlmKGluX2FycmF5KCR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10sIFsnYWVzLTEyOC1nY20nLCAnYWVzLTE5Mi1nY20nLCAnYWVzLTI1Ni1nY20nXSkpIHsKICAgICAgICAgICAgaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMS4wJykgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdQSFAgNy4xLjAgaXMgcmVxdWlyZWQgdG8gdXNlIEFFUyBHQ00gYWxnb3JpdGhtcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhdXRoVGFnID0gb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKHNlbGY6OkFVVEhUQUdfTEVOR1RIKTsKICAgICAgICAgICAgJGVuY3J5cHRlZCA9IG9wZW5zc2xfZW5jcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSwgJHRoaXMtPml2LCAkYXV0aFRhZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+cGFkSVNPMTAxMjYoJGRhdGEsICR0aGlzLT5jcnlwdFBhcmFtc1snYmxvY2tzaXplJ10pOwogICAgICAgICAgICAkZW5jcnlwdGVkID0gb3BlbnNzbF9lbmNyeXB0KCRkYXRhLCAkdGhpcy0+Y3J5cHRQYXJhbXNbJ2NpcGhlciddLCAkdGhpcy0+a2V5LCBPUEVOU1NMX1JBV19EQVRBIHwgT1BFTlNTTF9aRVJPX1BBRERJTkcsICR0aGlzLT5pdik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChmYWxzZSA9PT0gJGVuY3J5cHRlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWlsdXJlIGVuY3J5cHRpbmcgRGF0YSAob3BlbnNzbCBzeW1tZXRyaWMpIC0gJyAuIG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPml2IC4gJGVuY3J5cHRlZCAuICRhdXRoVGFnOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWNyeXB0U3ltbWV0cmljKCRkYXRhKQogICAgewogICAgICAgICRpdl9sZW5ndGggPSBvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSk7CiAgICAgICAgJHRoaXMtPml2ID0gc3Vic3RyKCRkYXRhLCAwLCAkaXZfbGVuZ3RoKTsKICAgICAgICAkZGF0YSA9IHN1YnN0cigkZGF0YSwgJGl2X2xlbmd0aCk7CiAgICAgICAgJGF1dGhUYWcgPSBudWxsOwogICAgICAgIGlmKGluX2FycmF5KCR0aGlzLT5jcnlwdFBhcmFtc1snY2lwaGVyJ10sIFsnYWVzLTEyOC1nY20nLCAnYWVzLTE5Mi1nY20nLCAnYWVzLTI1Ni1nY20nXSkpIHsKICAgICAgICAgICAgaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMS4wJykgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdQSFAgNy4xLjAgaXMgcmVxdWlyZWQgdG8gdXNlIEFFUyBHQ00gYWxnb3JpdGhtcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG9idGFpbiBhbmQgcmVtb3ZlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKICAgICAgICAgICAgJG9mZnNldCA9IDAgLSBzZWxmOjpBVVRIVEFHX0xFTkdUSDsKICAgICAgICAgICAgJGF1dGhUYWcgPSBzdWJzdHIoJGRhdGEsICRvZmZzZXQpOwogICAgICAgICAgICBpZiAoc3RybGVuKCRhdXRoVGFnKSAhPT0gc2VsZjo6QVVUSFRBR19MRU5HVEgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0F1dGhlbnRpY2F0aW9uIHRhZyBsZW5ndGggaXMgaW52YWxpZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCAkb2Zmc2V0KTsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9IG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSwgJHRoaXMtPml2LCAkYXV0aFRhZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRlY3J5cHRlZCA9IG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJHRoaXMtPmNyeXB0UGFyYW1zWydjaXBoZXInXSwgJHRoaXMtPmtleSwgT1BFTlNTTF9SQVdfREFUQSB8IE9QRU5TU0xfWkVST19QQURESU5HLCAkdGhpcy0+aXYpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZmFsc2UgPT09ICRkZWNyeXB0ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRmFpbHVyZSBkZWNyeXB0aW5nIERhdGEgKG9wZW5zc2wgc3ltbWV0cmljKSAtICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGwgIT09ICRhdXRoVGFnID8gJGRlY3J5cHRlZCA6ICR0aGlzLT51bnBhZElTTzEwMTI2KCRkZWNyeXB0ZWQpOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdHMgdGhlIGdpdmVuIHB1YmxpYyBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVuY3J5cHRQdWJsaWMoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wdWJsaWNfZW5jcnlwdCgkZGF0YSwgJGVuY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZW5jcnlwdGluZyBEYXRhIChvcGVuc3NsIHB1YmxpYykgLSAnIC4gb3BlbnNzbF9lcnJvcl9zdHJpbmcoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZW5jcnlwdGVkOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIHB1YmxpYyBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBvcGVuc3NsLWV4dGVuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlY3J5cHRQdWJsaWMoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCgkZGF0YSwgJGRlY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZGVjcnlwdGluZyBEYXRhIChvcGVuc3NsIHB1YmxpYykgLSAnIC4gb3BlbnNzbF9lcnJvcl9zdHJpbmcoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGVjcnlwdGVkOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdHMgdGhlIGdpdmVuIHByaXZhdGUgZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBlbmNyeXB0UHJpdmF0ZSgkZGF0YSkKICAgIHsKICAgICAgICBpZiAoISBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCgkZGF0YSwgJGVuY3J5cHRlZCwgJHRoaXMtPmtleSwgJHRoaXMtPmNyeXB0UGFyYW1zWydwYWRkaW5nJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ZhaWx1cmUgZW5jcnlwdGluZyBEYXRhIChvcGVuc3NsIHByaXZhdGUpIC0gJyAuIG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVuY3J5cHRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHRzIHRoZSBnaXZlbiBwcml2YXRlIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjcnlwdFByaXZhdGUoJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKCEgb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoJGRhdGEsICRkZWNyeXB0ZWQsICR0aGlzLT5rZXksICR0aGlzLT5jcnlwdFBhcmFtc1sncGFkZGluZyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdGYWlsdXJlIGRlY3J5cHRpbmcgRGF0YSAob3BlbnNzbCBwcml2YXRlKSAtICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkZWNyeXB0ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaWducyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgb3BlbnNzbC1leHRlbnNpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzaWduT3BlblNTTCgkZGF0YSkKICAgIHsKICAgICAgICAkYWxnbyA9IE9QRU5TU0xfQUxHT19TSEExOwogICAgICAgIGlmICghIGVtcHR5KCR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10pKSB7CiAgICAgICAgICAgICRhbGdvID0gJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgb3BlbnNzbF9zaWduKCRkYXRhLCAkc2lnbmF0dXJlLCAkdGhpcy0+a2V5LCAkYWxnbykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRmFpbHVyZSBTaWduaW5nIERhdGE6ICcgLiBvcGVuc3NsX2Vycm9yX3N0cmluZygpIC4gJyAtICcgLiAkYWxnbyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2lnbmF0dXJlOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZpZXMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBzaWduYXR1cmUgdXNpbmcgdGhlIG9wZW5zc2wtZXh0ZW5zaW9uCiAgICAgKgogICAgICogUmV0dXJuczoKICAgICAqICAxIG9uIHN1Y2Nlc2Z1bCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLAogICAgICogIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBOT1RFOiBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIGluIFBIUCwKICAgICAqIC0xIHdpbGwgYmUgY2FzdCB0byBUcnVlIHdoZW4gaW4gYm9vbGVhbiBjb250ZXh0LiBTbyBhbHdheXMgY2hlY2sgdGhlCiAgICAgKiByZXR1cm4gdmFsdWUgaW4gYSBzdHJpY3RseSB0eXBlZCB3YXksIGUuZy4gIiRvYmotPnZlcmlmeSguLi4pID09PSAxIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdmVyaWZ5T3BlblNTTCgkZGF0YSwgJHNpZ25hdHVyZSkKICAgIHsKICAgICAgICAkYWxnbyA9IE9QRU5TU0xfQUxHT19TSEExOwogICAgICAgIGlmICghIGVtcHR5KCR0aGlzLT5jcnlwdFBhcmFtc1snZGlnZXN0J10pKSB7CiAgICAgICAgICAgICRhbGdvID0gJHRoaXMtPmNyeXB0UGFyYW1zWydkaWdlc3QnXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9wZW5zc2xfdmVyaWZ5KCRkYXRhLCAkc2lnbmF0dXJlLCAkdGhpcy0+a2V5LCAkYWxnbyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0cyB0aGUgZ2l2ZW4gZGF0YSAoc3RyaW5nKSB1c2luZyB0aGUgcmVnYXJkaW5nIHBocC1leHRlbnNpb24sIGRlcGVuZGluZyBvbiB0aGUgbGlicmFyeSBhc3NpZ25lZCB0byBhbGdvcml0aG0gaW4gdGhlIGNvbnRydWN0b3IuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBtaXhlZHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHREYXRhKCRkYXRhKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y3J5cHRQYXJhbXNbJ2xpYnJhcnknXSA9PT0gJ29wZW5zc2wnKSB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmNyeXB0UGFyYW1zWyd0eXBlJ10pIHsKICAgICAgICAgICAgICAgIGNhc2UgJ3N5bW1ldHJpYyc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNyeXB0U3ltbWV0cmljKCRkYXRhKTsKICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lbmNyeXB0UHVibGljKCRkYXRhKTsKICAgICAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZW5jcnlwdFByaXZhdGUoJGRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdHMgdGhlIGdpdmVuIGRhdGEgKHN0cmluZykgdXNpbmcgdGhlIHJlZ2FyZGluZyBwaHAtZXh0ZW5zaW9uLCBkZXBlbmRpbmcgb24gdGhlIGxpYnJhcnkgYXNzaWduZWQgdG8gYWxnb3JpdGhtIGluIHRoZSBjb250cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyeXB0RGF0YSgkZGF0YSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNyeXB0UGFyYW1zWydsaWJyYXJ5J10gPT09ICdvcGVuc3NsJykgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1sndHlwZSddKSB7CiAgICAgICAgICAgICAgICBjYXNlICdzeW1tZXRyaWMnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdFN5bW1ldHJpYygkZGF0YSk7CiAgICAgICAgICAgICAgICBjYXNlICdwdWJsaWMnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGVjcnlwdFB1YmxpYygkZGF0YSk7CiAgICAgICAgICAgICAgICBjYXNlICdwcml2YXRlJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRlY3J5cHRQcml2YXRlKCRkYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpZ25zIHRoZSBkYXRhIChzdHJpbmcpIHVzaW5nIHRoZSBleHRlbnNpb24gYXNzaWduZWQgdG8gdGhlIHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduRGF0YSgkZGF0YSkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaWduT3BlblNTTCgkZGF0YSk7CiAgICAgICAgICAgIGNhc2UgKHNlbGY6OkhNQUNfU0hBMSk6CiAgICAgICAgICAgICAgICByZXR1cm4gaGFzaF9obWFjKCJzaGExIiwgJGRhdGEsICR0aGlzLT5rZXksIHRydWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmaWVzIHRoZSBkYXRhIChzdHJpbmcpIGFnYWluc3QgdGhlIGdpdmVuIHNpZ25hdHVyZSB1c2luZyB0aGUgZXh0ZW5zaW9uIGFzc2lnbmVkIHRvIHRoZSB0eXBlIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBSZXR1cm5zIGluIGNhc2Ugb2Ygb3BlblNTTDoKICAgICAqICAxIG9uIHN1Y2Nlc2Z1bCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLAogICAgICogIDAgd2hlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCwKICAgICAqICAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBOT1RFOiBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIGluIFBIUCwKICAgICAqIC0xIHdpbGwgYmUgY2FzdCB0byBUcnVlIHdoZW4gaW4gYm9vbGVhbiBjb250ZXh0LiBTbyBhbHdheXMgY2hlY2sgdGhlCiAgICAgKiByZXR1cm4gdmFsdWUgaW4gYSBzdHJpY3RseSB0eXBlZCB3YXksIGUuZy4gIiRvYmotPnZlcmlmeSguLi4pID09PSAxIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEByZXR1cm4gYm9vbHxpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZSgkZGF0YSwgJHNpZ25hdHVyZSkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0aGlzLT5jcnlwdFBhcmFtc1snbGlicmFyeSddKSB7CiAgICAgICAgICAgIGNhc2UgJ29wZW5zc2wnOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJpZnlPcGVuU1NMKCRkYXRhLCAkc2lnbmF0dXJlKTsKICAgICAgICAgICAgY2FzZSAoc2VsZjo6SE1BQ19TSEExKToKICAgICAgICAgICAgICAgICRleHBlY3RlZFNpZ25hdHVyZSA9IGhhc2hfaG1hYygic2hhMSIsICRkYXRhLCAkdGhpcy0+a2V5LCB0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJHNpZ25hdHVyZSwgJGV4cGVjdGVkU2lnbmF0dXJlKSA9PSAwOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAc2VlIGdldEFsZ29yaXRobSgpCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGdvcml0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRBbGdvcml0aG0oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsZ29yaXRobSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcnlwdFBhcmFtc1snbWV0aG9kJ107CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZUFzblNlZ21lbnQoJHR5cGUsICRzdHJpbmcpCiAgICB7CiAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICBjYXNlIDB4MDI6CiAgICAgICAgICAgICAgICBpZiAob3JkKCRzdHJpbmcpID4gMHg3ZikKICAgICAgICAgICAgICAgICAgICAkc3RyaW5nID0gY2hyKDApLiRzdHJpbmc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAzOgogICAgICAgICAgICAgICAgJHN0cmluZyA9IGNocigwKS4kc3RyaW5nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRzdHJpbmcpOwoKICAgICAgICBpZiAoJGxlbmd0aCA8IDEyOCkgewogICAgICAgICAgICAkb3V0cHV0ID0gc3ByaW50ZigiJWMlYyVzIiwgJHR5cGUsICRsZW5ndGgsICRzdHJpbmcpOwogICAgICAgIH0gZWxzZSBpZiAoJGxlbmd0aCA8IDB4MDEwMCkgewogICAgICAgICAgICAkb3V0cHV0ID0gc3ByaW50ZigiJWMlYyVjJXMiLCAkdHlwZSwgMHg4MSwgJGxlbmd0aCwgJHN0cmluZyk7CiAgICAgICAgfSBlbHNlIGlmICgkbGVuZ3RoIDwgMHgwMTAwMDApIHsKICAgICAgICAgICAgJG91dHB1dCA9IHNwcmludGYoIiVjJWMlYyVjJXMiLCAkdHlwZSwgMHg4MiwgJGxlbmd0aCAvIDB4MDEwMCwgJGxlbmd0aCAlIDB4MDEwMCwgJHN0cmluZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG91dHB1dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEhpbnQ6IE1vZHVsdXMgYW5kIEV4cG9uZW50IG11c3QgYWxyZWFkeSBiZSBiYXNlNjQgZGVjb2RlZAogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWx1cwogICAgICogQHBhcmFtIHN0cmluZyAkZXhwb25lbnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udmVydFJTQSgkbW9kdWx1cywgJGV4cG9uZW50KQogICAgewogICAgICAgIC8qIG1ha2UgYW4gQVNOIHB1YmxpY0tleUluZm8gKi8KICAgICAgICAkZXhwb25lbnRFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDIsICRleHBvbmVudCk7CiAgICAgICAgJG1vZHVsdXNFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDIsICRtb2R1bHVzKTsKICAgICAgICAkc2VxdWVuY2VFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MzAsICRtb2R1bHVzRW5jb2RpbmcuJGV4cG9uZW50RW5jb2RpbmcpOwogICAgICAgICRiaXRzdHJpbmdFbmNvZGluZyA9IHNlbGY6Om1ha2VBc25TZWdtZW50KDB4MDMsICRzZXF1ZW5jZUVuY29kaW5nKTsKICAgICAgICAkcnNhQWxnb3JpdGhtSWRlbnRpZmllciA9IHBhY2soIkgqIiwgIjMwMEQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMCIpOwogICAgICAgICRwdWJsaWNLZXlJbmZvID0gc2VsZjo6bWFrZUFzblNlZ21lbnQoMHgzMCwgJHJzYUFsZ29yaXRobUlkZW50aWZpZXIuJGJpdHN0cmluZ0VuY29kaW5nKTsKCiAgICAgICAgLyogZW5jb2RlIHRoZSBwdWJsaWNLZXlJbmZvIGluIGJhc2U2NCBhbmQgYWRkIFBFTSBicmFja2V0cyAqLwogICAgICAgICRwdWJsaWNLZXlJbmZvQmFzZTY0ID0gYmFzZTY0X2VuY29kZSgkcHVibGljS2V5SW5mbyk7CiAgICAgICAgJGVuY29kaW5nID0gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG4iOwogICAgICAgICRvZmZzZXQgPSAwOwogICAgICAgIHdoaWxlICgkc2VnbWVudCA9IHN1YnN0cigkcHVibGljS2V5SW5mb0Jhc2U2NCwgJG9mZnNldCwgNjQpKSB7CiAgICAgICAgICAgICRlbmNvZGluZyA9ICRlbmNvZGluZy4kc2VnbWVudC4iXG4iOwogICAgICAgICAgICAkb2Zmc2V0ICs9IDY0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGVuY29kaW5nLiItLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1cbiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBhcmVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplS2V5KCRwYXJlbnQpCiAgICB7CgogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIFg1MDkgY2VydGlmaWNhdGUgdGhpcyBrZXkgcmVwcmVzZW50cy4KICAgICAqCiAgICAgKiBXaWxsIHJldHVybiB0aGUgWDUwOSBjZXJ0aWZpY2F0ZSBpbiBQRU0tZm9ybWF0IGlmIHRoaXMga2V5IHJlcHJlc2VudHMKICAgICAqIGFuIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFg1MDkgY2VydGlmaWNhdGUgb3IgbnVsbCBpZiB0aGlzIGtleSBkb2Vzbid0IHJlcHJlc2VudCBhbiBYNTA5LWNlcnRpZmljYXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WDUwOUNlcnRpZmljYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPng1MDlDZXJ0aWZpY2F0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdGh1bWJwcmludCBvZiB0aGlzIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogUmV0dXJuczoKICAgICAqICBUaGUgdGh1bWJwcmludCBhcyBhIGxvd2VyY2FzZSA0MC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyLCBvciBudWxsCiAgICAgKiAgaWYgdGhpcyBpc24ndCBhIFg1MDkgY2VydGlmaWNhdGUuCiAgICAgKgogICAgICogIEByZXR1cm4gc3RyaW5nIExvd2VyY2FzZSA0MC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyIG9mIHRodW1icHJpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFg1MDlUaHVtYnByaW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPlg1MDlUaHVtYnByaW50OwogICAgfQoKCiAgICAvKioKICAgICAqIENyZWF0ZSBrZXkgZnJvbSBhbiBFbmNyeXB0ZWRLZXktZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NRWxlbWVudCAkZWxlbWVudCBUaGUgRW5jcnlwdGVkS2V5LWVsZW1lbnQuCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gWE1MU2VjdXJpdHlLZXkgVGhlIG5ldyBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUVuY3J5cHRlZEtleUVsZW1lbnQoRE9NRWxlbWVudCAkZWxlbWVudCkKICAgIHsKCiAgICAgICAgJG9iamVuYyA9IG5ldyBYTUxTZWNFbmMoKTsKICAgICAgICAkb2JqZW5jLT5zZXROb2RlKCRlbGVtZW50KTsKICAgICAgICBpZiAoISAkb2JqS2V5ID0gJG9iamVuYy0+bG9jYXRlS2V5KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIGxvY2F0ZSBhbGdvcml0aG0gZm9yIHRoaXMgRW5jcnlwdGVkIEtleSIpOwogICAgICAgIH0KICAgICAgICAkb2JqS2V5LT5pc0VuY3J5cHRlZCA9IHRydWU7CiAgICAgICAgJG9iaktleS0+ZW5jcnlwdGVkQ3R4ID0gJG9iamVuYzsKICAgICAgICBYTUxTZWNFbmM6OnN0YXRpY0xvY2F0ZUtleUluZm8oJG9iaktleSwgJGVsZW1lbnQpOwogICAgICAgIHJldHVybiAkb2JqS2V5OwogICAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/robrichards/xmlseclibs/xmlseclibs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIHhtbHNlY2xpYnMucGhwCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDI0LCBSb2JlcnQgUmljaGFyZHMgPHJyaWNoYXJkc0BjZGF0YXpvbmUub3JnPi4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICoKICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgIGRpc3RyaWJ1dGlvbi4KICoKICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgUm9iZXJ0IFJpY2hhcmRzIG5vciB0aGUgbmFtZXMgb2YgaGlzCiAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgogKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAYXV0aG9yICAgIFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+CiAqIEBjb3B5cmlnaHQgMjAwNy0yMDI0IFJvYmVydCBSaWNoYXJkcyA8cnJpY2hhcmRzQGNkYXRhem9uZS5vcmc+CiAqIEBsaWNlbnNlICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgIEJTRCBMaWNlbnNlCiAqIEB2ZXJzaW9uICAgMy4xLjMKICovCgokeG1sc2VjbGlic19zcmNkaXIgPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvc3JjLyc7CnJlcXVpcmUgJHhtbHNlY2xpYnNfc3JjZGlyIC4gJy9YTUxTZWN1cml0eUtleS5waHAnOwpyZXF1aXJlICR4bWxzZWNsaWJzX3NyY2RpciAuICcvWE1MU2VjdXJpdHlEU2lnLnBocCc7CnJlcXVpcmUgJHhtbHNlY2xpYnNfc3JjZGlyIC4gJy9YTUxTZWNFbmMucGhwJzsKcmVxdWlyZSAkeG1sc2VjbGlic19zcmNkaXIgLiAnL1V0aWxzL1hQYXRoLnBocCc7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICJkZXNjcmlwdGlvbiI6ICJCYXNlIDY0IFVSTCBTYWZlIEVuY29kaW5nL0RlY29kaW5nIFBIUCBMaWJyYXJ5IiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsiQmFzZTY0IiwgIlVSTCIsICJTYWZlIiwgIlJGQzQ2NDgiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJhc2U2NFVybFxcIjogICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAiYXV0b2xvYWQtZGV2IjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJhc2U2NFVybFxcVGVzdFxcIjogICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjEiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHBzdGFuL2V4dGVuc2lvbi1pbnN0YWxsZXIiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMXxeMC4xMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMiOiAiXjAuMTF8XjAuMTIiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4tcGhwdW5pdCI6ICJeMC4xMXxeMC4xMiIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjAuMTF8XjAuMTIiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/Base64Url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEJhc2U2NFVybDsKCnVzZSBmdW5jdGlvbiBiYXNlNjRfZGVjb2RlOwp1c2UgZnVuY3Rpb24gYmFzZTY0X2VuY29kZTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIHJ0cmltOwp1c2UgZnVuY3Rpb24gc3RydHI7CgovKioKICogRW5jb2RlIGFuZCBkZWNvZGUgZGF0YSBpbnRvIEJhc2U2NCBVcmwgU2FmZS4KICovCmZpbmFsIGNsYXNzIEJhc2U2NFVybAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgICAgICAgVGhlIGRhdGEgdG8gZW5jb2RlCiAgICAgKiBAcGFyYW0gYm9vbCAgICR1c2VQYWRkaW5nIElmIHRydWUsIHRoZSAiPSIgcGFkZGluZyBhdCBlbmQgb2YgdGhlIGVuY29kZWQgdmFsdWUgYXJlIGtlcHQsIGVsc2UgaXQgaXMgcmVtb3ZlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBkYXRhIGVuY29kZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGUoc3RyaW5nICRkYXRhLCBib29sICR1c2VQYWRkaW5nID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZW5jb2RlZCA9IHN0cnRyKGJhc2U2NF9lbmNvZGUoJGRhdGEpLCAnKy8nLCAnLV8nKTsKCiAgICAgICAgcmV0dXJuIHRydWUgPT09ICR1c2VQYWRkaW5nID8gJGVuY29kZWQgOiBydHJpbSgkZW5jb2RlZCwgJz0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVjb2RlCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZGF0YSBkZWNvZGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZShzdHJ0cigkZGF0YSwgJy1fJywgJysvJyksIHRydWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGRlY29kZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhIHByb3ZpZGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlY29kZWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvY2Jvci1waHAiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJDQk9SIiwgIkNvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiIsICJSRkM3MDQ5Il0sCiAgICAiZGVzY3JpcHRpb24iOiAiQ0JPUiBFbmNvZGVyL0RlY29kZXIgZm9yIFBIUCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICB9LHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvY2Jvci1waHAvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQ0JPUlxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiQ0JPUlxcVGVzdFxcIjogInRlc3RzLyIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMyIsCiAgICAgICAgImJyaWNrL21hdGgiOiAiXjAuOC4xNXxeMC45LjAiLAogICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJla2luby9waHBzdGFuLWJhbm5lZC1jb2RlIjogIl4xLjAiLAogICAgICAgICJpbmZlY3Rpb24vaW5mZWN0aW9uIjogIl4wLjE4fF4wLjI1IiwKICAgICAgICAicGhwc3Rhbi9leHRlbnNpb24taW5zdGFsbGVyIjogIl4xLjEiLAogICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1iZWJlcmxlaS1hc3NlcnQiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcyI6ICJeMS4wIiwKICAgICAgICAicGhwc3Rhbi9waHBzdGFuLXBocHVuaXQiOiAiXjEuMCIsCiAgICAgICAgInBocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMiOiAiXjEuMCIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeOS41IiwKICAgICAgICAicmVjdG9yL3JlY3RvciI6ICJeMC4xMiIsCiAgICAgICAgInJvYXZlL3NlY3VyaXR5LWFkdmlzb3JpZXMiOiAiZGV2LWxhdGVzdCIsCiAgICAgICAgInN5bXBsaWZ5L2Vhc3ktY29kaW5nLXN0YW5kYXJkIjogIl4xMC4wIgogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImV4dC1nbXAiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZSIsCiAgICAgICAgImV4dC1iY21hdGgiOiAiR01QIG9yIEJDTWF0aCBleHRlbnNpb25zIHdpbGwgZHJhc3RpY2FsbHkgaW1wcm92ZSB0aGUgbGlicmFyeSBwZXJmb3JtYW5jZS4gQkNNYXRoIGV4dGVuc2lvbiBuZWVkZWQgdG8gaGFuZGxlIHRoZSBCaWcgRmxvYXQgYW5kIERlY2ltYWwgRnJhY3Rpb24gVGFncyIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/AbstractCBORObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gY2hyOwoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgQ0JPUk9iamVjdAp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkYWRkaXRpb25hbEluZm9ybWF0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkbWFqb3JUeXBlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJG1ham9yVHlwZSwgaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pCiAgICB7CiAgICAgICAgJHRoaXMtPm1ham9yVHlwZSA9ICRtYWpvclR5cGU7CiAgICAgICAgJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9ICRhZGRpdGlvbmFsSW5mb3JtYXRpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGNocigkdGhpcy0+bWFqb3JUeXBlIDw8IDUgfCAkdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFqb3JUeXBlKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFqb3JUeXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRpdGlvbmFsSW5mb3JtYXRpb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ByteStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpmaW5hbCBjbGFzcyBCeXRlU3RyaW5nT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfQllURV9TVFJJTkc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgWyRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRsZW5ndGhdID0gTGVuZ3RoQ2FsY3VsYXRvcjo6Z2V0TGVuZ3RoT2ZTdHJpbmcoJGRhdGEpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pOwogICAgICAgICR0aGlzLT5sZW5ndGggPSAkbGVuZ3RoOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCAuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiBtYl9zdHJsZW4oJHRoaXMtPnZhbHVlLCAnOGJpdCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ByteStringWithChunkObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgQnl0ZVN0cmluZ1dpdGhDaHVua09iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/CBORObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgQ0JPUk9iamVjdAp7CiAgICBwdWJsaWMgY29uc3QgTUFKT1JfVFlQRV9VTlNJR05FRF9JTlRFR0VSID0gMGIwMDA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUiA9IDBiMDAxOwoKICAgIHB1YmxpYyBjb25zdCBNQUpPUl9UWVBFX0JZVEVfU1RSSU5HID0gMGIwMTA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfVEVYVF9TVFJJTkcgPSAwYjAxMTsKCiAgICBwdWJsaWMgY29uc3QgTUFKT1JfVFlQRV9MSVNUID0gMGIxMDA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfTUFQID0gMGIxMDE7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfVEFHID0gMGIxMTA7CgogICAgcHVibGljIGNvbnN0IE1BSk9SX1RZUEVfT1RIRVJfVFlQRSA9IDBiMTExOwoKICAgIHB1YmxpYyBjb25zdCBMRU5HVEhfMV9CWVRFID0gMGIwMDAxMTAwMDsKCiAgICBwdWJsaWMgY29uc3QgTEVOR1RIXzJfQllURVMgPSAwYjAwMDExMDAxOwoKICAgIHB1YmxpYyBjb25zdCBMRU5HVEhfNF9CWVRFUyA9IDBiMDAwMTEwMTA7CgogICAgcHVibGljIGNvbnN0IExFTkdUSF84X0JZVEVTID0gMGIwMDAxMTAxMTsKCiAgICBwdWJsaWMgY29uc3QgTEVOR1RIX0lOREVGSU5JVEUgPSAwYjAwMDExMTExOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzEgPSAwYjAwMDExMTAwOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzIgPSAwYjAwMDExMTAxOwoKICAgIHB1YmxpYyBjb25zdCBGVVRVUkVfVVNFXzMgPSAwYjAwMDExMTEwOwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfRkFMU0UgPSAyMDsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX1RSVUUgPSAyMTsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX05VTEwgPSAyMjsKCiAgICBwdWJsaWMgY29uc3QgT0JKRUNUX1VOREVGSU5FRCA9IDIzOwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfU0lNUExFX1ZBTFVFID0gMjQ7CgogICAgcHVibGljIGNvbnN0IE9CSkVDVF9IQUxGX1BSRUNJU0lPTl9GTE9BVCA9IDI1OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfU0lOR0xFX1BSRUNJU0lPTl9GTE9BVCA9IDI2OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVCA9IDI3OwoKICAgIHB1YmxpYyBjb25zdCBPQkpFQ1RfQlJFQUsgPSAwYjAwMDExMTExOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfU1RBTkRBUkRfREFURVRJTUUgPSAwOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfRVBPQ0hfREFURVRJTUUgPSAxOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfVU5TSUdORURfQklHX05VTSA9IDI7CgogICAgcHVibGljIGNvbnN0IFRBR19ORUdBVElWRV9CSUdfTlVNID0gMzsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0RFQ0lNQUxfRlJBQ1RJT04gPSA0OwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQklHX0ZMT0FUID0gNTsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0VOQ09ERURfQkFTRTY0X1VSTCA9IDIxOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfRU5DT0RFRF9CQVNFNjQgPSAyMjsKCiAgICBwdWJsaWMgY29uc3QgVEFHX0VOQ09ERURfQkFTRTE2ID0gMjM7CgogICAgcHVibGljIGNvbnN0IFRBR19FTkNPREVEX0NCT1IgPSAyNDsKCiAgICBwdWJsaWMgY29uc3QgVEFHX1VSSSA9IDMyOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQkFTRTY0X1VSTCA9IDMzOwoKICAgIHB1YmxpYyBjb25zdCBUQUdfQkFTRTY0ID0gMzQ7CgogICAgcHVibGljIGNvbnN0IFRBR19NSU1FID0gMzY7CgogICAgcHVibGljIGNvbnN0IFRBR19DQk9SID0gNTU3OTk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYWpvclR5cGUoKTogaW50OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogaW50OwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Decoder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdFxCcmVha09iamVjdDsKdXNlIENCT1JcT3RoZXJPYmplY3RcRG91YmxlUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XEZhbHNlT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE51bGxPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VySW50ZXJmYWNlOwp1c2UgQ0JPUlxPdGhlck9iamVjdFxTaW1wbGVPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxUcnVlT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxVbmRlZmluZWRPYmplY3Q7CnVzZSBDQk9SXFRhZ1xCYXNlMTZFbmNvZGluZ1RhZzsKdXNlIENCT1JcVGFnXEJhc2U2NEVuY29kaW5nVGFnOwp1c2UgQ0JPUlxUYWdcQmFzZTY0VGFnOwp1c2UgQ0JPUlxUYWdcQmFzZTY0VXJsRW5jb2RpbmdUYWc7CnVzZSBDQk9SXFRhZ1xCYXNlNjRVcmxUYWc7CnVzZSBDQk9SXFRhZ1xCaWdGbG9hdFRhZzsKdXNlIENCT1JcVGFnXENCT1JFbmNvZGluZ1RhZzsKdXNlIENCT1JcVGFnXENCT1JUYWc7CnVzZSBDQk9SXFRhZ1xEYXRldGltZVRhZzsKdXNlIENCT1JcVGFnXERlY2ltYWxGcmFjdGlvblRhZzsKdXNlIENCT1JcVGFnXE1pbWVUYWc7CnVzZSBDQk9SXFRhZ1xOZWdhdGl2ZUJpZ0ludGVnZXJUYWc7CnVzZSBDQk9SXFRhZ1xUYWdNYW5hZ2VyOwp1c2UgQ0JPUlxUYWdcVGFnTWFuYWdlckludGVyZmFjZTsKdXNlIENCT1JcVGFnXFRpbWVzdGFtcFRhZzsKdXNlIENCT1JcVGFnXFVuc2lnbmVkQmlnSW50ZWdlclRhZzsKdXNlIENCT1JcVGFnXFVyaVRhZzsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIFJ1bnRpbWVFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgpmaW5hbCBjbGFzcyBEZWNvZGVyIGltcGxlbWVudHMgRGVjb2RlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgVGFnXFRhZ01hbmFnZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkdGFnTWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJG90aGVyT2JqZWN0TWFuYWdlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgP1RhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIgPSBudWxsLAogICAgICAgID9PdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UgJG90aGVyVHlwZU1hbmFnZXIgPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+dGFnTWFuYWdlciA9ICR0YWdNYW5hZ2VyID8/ICR0aGlzLT5nZW5lcmF0ZVRhZ01hbmFnZXIoKTsKICAgICAgICAkdGhpcy0+b3RoZXJPYmplY3RNYW5hZ2VyID0gJG90aGVyVHlwZU1hbmFnZXIgPz8gJHRoaXMtPmdlbmVyYXRlT3RoZXJPYmplY3RNYW5hZ2VyKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgP1RhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIgPSBudWxsLAogICAgICAgID9PdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UgJG90aGVyT2JqZWN0TWFuYWdlciA9IG51bGwKICAgICk6IHNlbGYgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkdGFnTWFuYWdlciwgJG90aGVyT2JqZWN0TWFuYWdlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhUYWdNYW5hZ2VyKFRhZ01hbmFnZXJJbnRlcmZhY2UgJHRhZ01hbmFnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnRhZ01hbmFnZXIgPSAkdGFnTWFuYWdlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoT3RoZXJPYmplY3RNYW5hZ2VyKE90aGVyT2JqZWN0TWFuYWdlckludGVyZmFjZSAkb3RoZXJPYmplY3RNYW5hZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5vdGhlck9iamVjdE1hbmFnZXIgPSAkb3RoZXJPYmplY3RNYW5hZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlY29kZShTdHJlYW0gJHN0cmVhbSk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3MoJHN0cmVhbSwgZmFsc2UpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2VzcyhTdHJlYW0gJHN0cmVhbSwgYm9vbCAkYnJlYWthYmxlKTogQ0JPUk9iamVjdAogICAgewogICAgICAgICRpYiA9IG9yZCgkc3RyZWFtLT5yZWFkKDEpKTsKICAgICAgICAkbXQgPSAkaWIgPj4gNTsKICAgICAgICAkYWkgPSAkaWIgJiAwYjAwMDExMTExOwogICAgICAgICR2YWwgPSBudWxsOwogICAgICAgIHN3aXRjaCAoJGFpKSB7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TEVOR1RIXzFfQllURTogLy8yNAogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6OkxFTkdUSF8yX0JZVEVTOiAvLzI1CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TEVOR1RIXzRfQllURVM6IC8vMjYKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpMRU5HVEhfOF9CWVRFUzogLy8yNwogICAgICAgICAgICAgICAgJHZhbCA9ICRzdHJlYW0tPnJlYWQoMiAqKiAoJGFpICYgMGIwMDAwMDExMSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8xOiAvLzI4CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8yOiAvLzI5CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6RlVUVVJFX1VTRV8zOiAvLzMwCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwYXJzZSB0aGUgZGF0YS4gRm91bmQgaW52YWxpZCBBZGRpdGlvbmFsIEluZm9ybWF0aW9uICIlcyIgKCVkKS4nLAogICAgICAgICAgICAgICAgICAgIHN0cl9wYWQoZGVjYmluKCRhaSksIDgsICcwJywgU1RSX1BBRF9MRUZUKSwKICAgICAgICAgICAgICAgICAgICAkYWkKICAgICAgICAgICAgICAgICkpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6OkxFTkdUSF9JTkRFRklOSVRFOiAvLzMxCiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NJbmZpbml0ZSgkc3RyZWFtLCAkbXQsICRicmVha2FibGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzRmluaXRlKCRzdHJlYW0sICRtdCwgJGFpLCAkdmFsKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NGaW5pdGUoU3RyZWFtICRzdHJlYW0sIGludCAkbXQsIGludCAkYWksID9zdHJpbmcgJHZhbCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICBzd2l0Y2ggKCRtdCkgewogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjogLy8wCiAgICAgICAgICAgICAgICByZXR1cm4gVW5zaWduZWRJbnRlZ2VyT2JqZWN0OjpjcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUjogLy8xCiAgICAgICAgICAgICAgICByZXR1cm4gTmVnYXRpdmVJbnRlZ2VyT2JqZWN0OjpjcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfQllURV9TVFJJTkc6IC8vMgogICAgICAgICAgICAgICAgJGxlbmd0aCA9ICR2YWwgPT09IG51bGwgPyAkYWkgOiBVdGlsczo6YmluVG9JbnQoJHZhbCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIEJ5dGVTdHJpbmdPYmplY3Q6OmNyZWF0ZSgkc3RyZWFtLT5yZWFkKCRsZW5ndGgpKTsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX1RFWFRfU1RSSU5HOiAvLzMKICAgICAgICAgICAgICAgICRsZW5ndGggPSAkdmFsID09PSBudWxsID8gJGFpIDogVXRpbHM6OmJpblRvSW50KCR2YWwpOwoKICAgICAgICAgICAgICAgIHJldHVybiBUZXh0U3RyaW5nT2JqZWN0OjpjcmVhdGUoJHN0cmVhbS0+cmVhZCgkbGVuZ3RoKSk7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9MSVNUOiAvLzQKICAgICAgICAgICAgICAgICRvYmplY3QgPSBMaXN0T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICRuYkl0ZW1zID0gJHZhbCA9PT0gbnVsbCA/ICRhaSA6IFV0aWxzOjpiaW5Ub0ludCgkdmFsKTsKICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRuYkl0ZW1zOyArKyRpKSB7CiAgICAgICAgICAgICAgICAgICAgJG9iamVjdC0+YWRkKCR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9NQVA6IC8vNQogICAgICAgICAgICAgICAgJG9iamVjdCA9IE1hcE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAkbmJJdGVtcyA9ICR2YWwgPT09IG51bGwgPyAkYWkgOiBVdGlsczo6YmluVG9JbnQoJHZhbCk7CiAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbmJJdGVtczsgKyskaSkgewogICAgICAgICAgICAgICAgICAgICRvYmplY3QtPmFkZCgkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCBmYWxzZSksICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9UQUc6IC8vNgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT50YWdNYW5hZ2VyLT5jcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwsICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIGZhbHNlKSk7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9PVEhFUl9UWVBFOiAvLzcKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b3RoZXJPYmplY3RNYW5hZ2VyLT5jcmVhdGVPYmplY3RGb3JWYWx1ZSgkYWksICR2YWwpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgbWFqb3IgdHlwZSAiJXMiICglZCkuJywKICAgICAgICAgICAgICAgICAgICBzdHJfcGFkKGRlY2JpbigkbXQpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCksCiAgICAgICAgICAgICAgICAgICAgJG10CiAgICAgICAgICAgICAgICApKTsgLy8gU2hvdWxkIG5ldmVyIGFwcGVuZAogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NJbmZpbml0ZShTdHJlYW0gJHN0cmVhbSwgaW50ICRtdCwgYm9vbCAkYnJlYWthYmxlKTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHN3aXRjaCAoJG10KSB7CiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9CWVRFX1NUUklORzogLy8yCiAgICAgICAgICAgICAgICAkb2JqZWN0ID0gSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgd2hpbGUgKCEgKCRpdCA9ICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIHRydWUpKSBpbnN0YW5jZW9mIEJyZWFrT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgJGl0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcGFyc2UgdGhlIGRhdGEuIEluZmluaXRlIEJ5dGUgU3RyaW5nIG9iamVjdCBjYW4gb25seSBnZXQgQnl0ZSBTdHJpbmcgb2JqZWN0cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRvYmplY3QtPmFkZCgkaXQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVEVYVF9TVFJJTkc6IC8vMwogICAgICAgICAgICAgICAgJG9iamVjdCA9IEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgIHdoaWxlICghICgkaXQgPSAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCB0cnVlKSkgaW5zdGFuY2VvZiBCcmVha09iamVjdCkgewogICAgICAgICAgICAgICAgICAgIGlmICghICRpdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHBhcnNlIHRoZSBkYXRhLiBJbmZpbml0ZSBUZXh0IFN0cmluZyBvYmplY3QgY2FuIG9ubHkgZ2V0IFRleHQgU3RyaW5nIG9iamVjdHMuJwogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX0xJU1Q6IC8vNAogICAgICAgICAgICAgICAgJG9iamVjdCA9IEluZGVmaW5pdGVMZW5ndGhMaXN0T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICRpdCA9ICR0aGlzLT5wcm9jZXNzKCRzdHJlYW0sIHRydWUpOwogICAgICAgICAgICAgICAgd2hpbGUgKCEgJGl0IGluc3RhbmNlb2YgQnJlYWtPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0KTsKICAgICAgICAgICAgICAgICAgICAkaXQgPSAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX01BUDogLy81CiAgICAgICAgICAgICAgICAkb2JqZWN0ID0gSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICB3aGlsZSAoISAoJGl0ID0gJHRoaXMtPnByb2Nlc3MoJHN0cmVhbSwgdHJ1ZSkpIGluc3RhbmNlb2YgQnJlYWtPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5hZGQoJGl0LCAkdGhpcy0+cHJvY2Vzcygkc3RyZWFtLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfT1RIRVJfVFlQRTogLy83CiAgICAgICAgICAgICAgICBpZiAoISAkYnJlYWthYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2Fubm90IHBhcnNlIHRoZSBkYXRhLiBObyBlbmNsb3NpbmcgaW5kZWZpbml0ZS4nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gQnJlYWtPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICBjYXNlIENCT1JPYmplY3Q6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjogLy8wCiAgICAgICAgICAgIGNhc2UgQ0JPUk9iamVjdDo6TUFKT1JfVFlQRV9ORUdBVElWRV9JTlRFR0VSOiAvLzEKICAgICAgICAgICAgY2FzZSBDQk9ST2JqZWN0OjpNQUpPUl9UWVBFX1RBRzogLy82CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwYXJzZSB0aGUgZGF0YS4gRm91bmQgaW5maW5pdGUgbGVuZ3RoIGZvciBNYWpvciBUeXBlICIlcyIgKCVkKS4nLAogICAgICAgICAgICAgICAgICAgIHN0cl9wYWQoZGVjYmluKCRtdCksIDUsICcwJywgU1RSX1BBRF9MRUZUKSwKICAgICAgICAgICAgICAgICAgICAkbXQKICAgICAgICAgICAgICAgICkpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlVGFnTWFuYWdlcigpOiBUYWdNYW5hZ2VySW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuIFRhZ01hbmFnZXI6OmNyZWF0ZSgpCiAgICAgICAgICAgIC0+YWRkKERhdGV0aW1lVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoVGltZXN0YW1wVGFnOjpjbGFzcykKCiAgICAgICAgICAgIC0+YWRkKFVuc2lnbmVkQmlnSW50ZWdlclRhZzo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKE5lZ2F0aXZlQmlnSW50ZWdlclRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChEZWNpbWFsRnJhY3Rpb25UYWc6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChCaWdGbG9hdFRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChCYXNlNjRVcmxFbmNvZGluZ1RhZzo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKEJhc2U2NEVuY29kaW5nVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTE2RW5jb2RpbmdUYWc6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChDQk9SRW5jb2RpbmdUYWc6OmNsYXNzKQoKICAgICAgICAgICAgLT5hZGQoVXJpVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTY0VXJsVGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoQmFzZTY0VGFnOjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoTWltZVRhZzo6Y2xhc3MpCgogICAgICAgICAgICAtPmFkZChDQk9SVGFnOjpjbGFzcykKICAgICAgICA7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZW5lcmF0ZU90aGVyT2JqZWN0TWFuYWdlcigpOiBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKICAgIHsKICAgICAgICByZXR1cm4gT3RoZXJPYmplY3RNYW5hZ2VyOjpjcmVhdGUoKQogICAgICAgICAgICAtPmFkZChCcmVha09iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKFNpbXBsZU9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKEZhbHNlT2JqZWN0OjpjbGFzcykKICAgICAgICAgICAgLT5hZGQoVHJ1ZU9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKE51bGxPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChVbmRlZmluZWRPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q6OmNsYXNzKQogICAgICAgICAgICAtPmFkZChTaW5nbGVQcmVjaXNpb25GbG9hdE9iamVjdDo6Y2xhc3MpCiAgICAgICAgICAgIC0+YWRkKERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0OjpjbGFzcykKICAgICAgICAgICAgOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/DecoderInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgRGVjb2RlckludGVyZmFjZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKFN0cmVhbSAkc3RyZWFtKTogQ0JPUk9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthByteStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX0JZVEVfU1RSSU5HOwoKICAgIHByaXZhdGUgY29uc3QgQURESVRJT05BTF9JTkZPUk1BVElPTiA9IHNlbGY6OkxFTkdUSF9JTkRFRklOSVRFOwoKICAgIC8qKgogICAgICogQHZhciBCeXRlU3RyaW5nT2JqZWN0W10KICAgICAqLwogICAgcHJpdmF0ZSAkY2h1bmtzID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsIHNlbGY6OkFERElUSU9OQUxfSU5GT1JNQVRJT04pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y2h1bmtzIGFzICRjaHVuaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRjaHVuay0+X190b1N0cmluZygpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAiXHhGRiI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQnl0ZVN0cmluZ09iamVjdCAkY2h1bmspOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmNodW5rc1tdID0gJGNodW5rOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZChzdHJpbmcgJGNodW5rKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hZGQoQnl0ZVN0cmluZ09iamVjdDo6Y3JlYXRlKCRjaHVuaykpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y2h1bmtzIGFzICRjaHVuaykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRjaHVuay0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJGxlbmd0aCArPSAkY2h1bmstPmdldExlbmd0aCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY2h1bmstPm5vcm1hbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNodW5rcyBhcyAkY2h1bmspIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY2h1bmstPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIENCT1JPYmplY3Q+CiAqIEBmaW5hbAogKi8KY2xhc3MgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENCT1JPYmplY3QgaW1wbGVtZW50cyBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBOb3JtYWxpemFibGUsIEFycmF5QWNjZXNzCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTElTVDsKCiAgICBwcml2YXRlIGNvbnN0IEFERElUSU9OQUxfSU5GT1JNQVRJT04gPSBzZWxmOjpMRU5HVEhfSU5ERUZJTklURTsKCiAgICAvKioKICAgICAqIEB2YXIgQ0JPUk9iamVjdFtdCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6TUFKT1JfVFlQRSwgc2VsZjo6QURESVRJT05BTF9JTkZPUk1BVElPTik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHBhcmVudDo6X190b1N0cmluZygpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kYXRhIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAoc3RyaW5nKSAkb2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAiXHhGRiI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJG9iamVjdC0+bm9ybWFsaXplKCkgOiAkb2JqZWN0OwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKENCT1JPYmplY3QgJG9iamVjdCkgdXNlICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKENCT1JPYmplY3QgJGl0ZW0pOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICRpdGVtOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhpbnQgJGluZGV4KTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpbmRleCwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoaW50ICRpbmRleCk6IHNlbGYKICAgIHsKICAgICAgICBpZiAoISAkdGhpcy0+aGFzKCRpbmRleCkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KICAgICAgICB1bnNldCgkdGhpcy0+ZGF0YVskaW5kZXhdKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5X3ZhbHVlcygkdGhpcy0+ZGF0YSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KGludCAkaW5kZXgpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskaW5kZXhdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoaW50ICRpbmRleCwgQ0JPUk9iamVjdCAkb2JqZWN0KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbmRleCBub3QgZm91bmQuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVskaW5kZXhdID0gJG9iamVjdDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gTm8gcmVwbGFjZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPGludCwgQ0JPUk9iamVjdD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXMoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZAogICAgewogICAgICAgIGlmICgkb2Zmc2V0ID09PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGQoJHZhbHVlKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZXQoJG9mZnNldCwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthMapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIE1hcEl0ZW0+CiAqIEBmaW5hbAogKi8KY2xhc3MgSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIENvdW50YWJsZSwgSXRlcmF0b3JBZ2dyZWdhdGUsIE5vcm1hbGl6YWJsZSwgQXJyYXlBY2Nlc3MKewogICAgcHJpdmF0ZSBjb25zdCBNQUpPUl9UWVBFID0gc2VsZjo6TUFKT1JfVFlQRV9NQVA7CgogICAgcHJpdmF0ZSBjb25zdCBBRERJVElPTkFMX0lORk9STUFUSU9OID0gc2VsZjo6TEVOR1RIX0lOREVGSU5JVEU7CgogICAgLyoqCiAgICAgKiBAdmFyIE1hcEl0ZW1bXQogICAgICovCiAgICBwcml2YXRlICRkYXRhID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsIHNlbGY6OkFERElUSU9OQUxfSU5GT1JNQVRJT04pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdC0+Z2V0S2V5KCk7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdC0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0IC4gIlx4RkYiOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSB1c2UgImFkZCIgaW5zdGVhZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKENCT1JPYmplY3QgJGtleSwgQ0JPUk9iamVjdCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGQoJGtleSwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKENCT1JPYmplY3QgJGtleSwgQ0JPUk9iamVjdCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5kYXRhWyRrZXktPm5vcm1hbGl6ZSgpXSA9IE1hcEl0ZW06OmNyZWF0ZSgka2V5LCAkdmFsdWUpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAka2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaW5kZXgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkaW5kZXgpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CiAgICAgICAgdW5zZXQoJHRoaXMtPmRhdGFbJGluZGV4XSk7CiAgICAgICAgJHRoaXMtPmRhdGEgPSBhcnJheV92YWx1ZXMoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaW5kZXgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkaW5kZXgpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVskaW5kZXhdLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoTWFwSXRlbSAkb2JqZWN0KTogc2VsZgogICAgewogICAgICAgICRrZXkgPSAkb2JqZWN0LT5nZXRLZXkoKTsKICAgICAgICBpZiAoISAka2V5IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQga2V5LiBTaGFsbCBiZSBub3JtYWxpemFibGUnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRrZXktPm5vcm1hbGl6ZSgpXSA9ICRvYmplY3Q7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIE5vIHJlcGxhY2VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBJdGVyYXRvcjxpbnQsIE1hcEl0ZW0+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICBpZiAoISAka2V5IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHZhbHVlT2JqZWN0ID0gJGl0ZW0tPmdldFZhbHVlKCk7CiAgICAgICAgICAgICRjYXJyeVska2V5LT5ub3JtYWxpemUoKV0gPSAkdmFsdWVPYmplY3QgaW5zdGFuY2VvZiBOb3JtYWxpemFibGUgPyAkdmFsdWVPYmplY3QtPm5vcm1hbGl6ZSgpIDogJHZhbHVlT2JqZWN0OwoKICAgICAgICAgICAgcmV0dXJuICRjYXJyeTsKICAgICAgICB9LCBbXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKSB1c2UgKCRpZ25vcmVUYWdzKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICAkdmFsdWVPYmplY3QgPSAkaXRlbS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgJGNhcnJ5WyRrZXktPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKV0gPSAkdmFsdWVPYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEgJG9mZnNldCBpbnN0YW5jZW9mIENCT1JPYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXknKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHZhbHVlIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KE1hcEl0ZW06OmNyZWF0ZSgkb2Zmc2V0LCAkdmFsdWUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/IndefiniteLengthTextStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdCBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX1RFWFRfU1RSSU5HOwoKICAgIHByaXZhdGUgY29uc3QgQURESVRJT05BTF9JTkZPUk1BVElPTiA9IHNlbGY6OkxFTkdUSF9JTkRFRklOSVRFOwoKICAgIC8qKgogICAgICogQHZhciBUZXh0U3RyaW5nT2JqZWN0W10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCBzZWxmOjpBRERJVElPTkFMX0lORk9STUFUSU9OKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49IChzdHJpbmcpICRvYmplY3Q7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCAuICJceEZGIjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChUZXh0U3RyaW5nT2JqZWN0ICRjaHVuayk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVtdID0gJGNodW5rOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZChzdHJpbmcgJGNodW5rKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hZGQoVGV4dFN0cmluZ09iamVjdDo6Y3JlYXRlKCRjaHVuaykpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJG9iamVjdC0+Z2V0VmFsdWUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkbGVuZ3RoICs9ICRvYmplY3QtPmdldExlbmd0aCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/InfiniteListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgSW5maW5pdGVMaXN0T2JqZWN0IGV4dGVuZHMgSW5kZWZpbml0ZUxlbmd0aExpc3RPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/InfiniteMapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aE1hcE9iamVjdCBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBJbmZpbml0ZU1hcE9iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhNYXBPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/LengthCalculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgZnVuY3Rpb24gY2hyOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX0xFRlQ7CgpmaW5hbCBjbGFzcyBMZW5ndGhDYWxjdWxhdG9yCnsKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExlbmd0aE9mU3RyaW5nKHN0cmluZyAkZGF0YSk6IGFycmF5CiAgICB7CiAgICAgICAgJGxlbmd0aCA9IG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNvbXB1dGVMZW5ndGgoJGxlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+ICRkYXRhCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExlbmd0aE9mQXJyYXkoYXJyYXkgJGRhdGEpOiBhcnJheQogICAgewogICAgICAgICRsZW5ndGggPSBjb3VudCgkZGF0YSk7CgogICAgICAgIHJldHVybiBzZWxmOjpjb21wdXRlTGVuZ3RoKCRsZW5ndGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXtpbnQsIG51bGx8c3RyaW5nfQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb21wdXRlTGVuZ3RoKGludCAkbGVuZ3RoKTogYXJyYXkKICAgIHsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkbGVuZ3RoIDw9IDIzOgogICAgICAgICAgICAgICAgcmV0dXJuIFskbGVuZ3RoLCBudWxsXTsKICAgICAgICAgICAgY2FzZSAkbGVuZ3RoIDw9IDB4RkY6CiAgICAgICAgICAgICAgICByZXR1cm4gW0NCT1JPYmplY3Q6OkxFTkdUSF8xX0JZVEUsIGNocigkbGVuZ3RoKV07CiAgICAgICAgICAgIGNhc2UgJGxlbmd0aCA8PSAweEZGRkY6CiAgICAgICAgICAgICAgICByZXR1cm4gW0NCT1JPYmplY3Q6OkxFTkdUSF8yX0JZVEVTLCBzZWxmOjpoZXgyYmluKGRlY2hleCgkbGVuZ3RoKSldOwogICAgICAgICAgICBjYXNlICRsZW5ndGggPD0gMHhGRkZGRkZGRjoKICAgICAgICAgICAgICAgIHJldHVybiBbQ0JPUk9iamVjdDo6TEVOR1RIXzRfQllURVMsIHNlbGY6OmhleDJiaW4oZGVjaGV4KCRsZW5ndGgpKV07CiAgICAgICAgICAgIGNhc2UgQmlnSW50ZWdlcjo6b2YoJGxlbmd0aCktPmlzTGVzc1RoYW5PckVxdWFsVG8oQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJ0ZGRkZGRkZGRkZGRkZGRkYnLCAxNikpOgogICAgICAgICAgICAgICAgcmV0dXJuIFtDQk9ST2JqZWN0OjpMRU5HVEhfOF9CWVRFUywgc2VsZjo6aGV4MmJpbihkZWNoZXgoJGxlbmd0aCkpXTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBbQ0JPUk9iamVjdDo6TEVOR1RIX0lOREVGSU5JVEUsIG51bGxdOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBoZXgyYmluKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRkYXRhID0gc3RyX3BhZCgkZGF0YSwgKGludCkgKDIgKiogY2VpbChsb2cobWJfc3RybGVuKCRkYXRhLCAnOGJpdCcpLCAyKSkpLCAnMCcsIFNUUl9QQURfTEVGVCk7CiAgICAgICAgJHJlc3VsdCA9IGhleDJiaW4oJGRhdGEpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCB0aGUgZGF0YScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/ListObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIENCT1JPYmplY3Q+CiAqLwpjbGFzcyBMaXN0T2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZSwgTm9ybWFsaXphYmxlLCBBcnJheUFjY2Vzcwp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX0xJU1Q7CgogICAgLyoqCiAgICAgKiBAdmFyIENCT1JPYmplY3RbXQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRsZW5ndGg7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ0JPUk9iamVjdFtdICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSA9IFtdKQogICAgewogICAgICAgIFskYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkbGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJGRhdGEpOwogICAgICAgIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKCRpdGVtKTogdm9pZCB7CiAgICAgICAgICAgIGlmICghICRpdGVtIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIGxpc3QgbXVzdCBjb250YWluIG9ubHkgQ0JPUk9iamVjdCBvYmplY3RzLicpOwogICAgICAgICAgICB9CiAgICAgICAgfSwgJGRhdGEpOwoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok1BSk9SX1RZUEUsICRhZGRpdGlvbmFsSW5mb3JtYXRpb24pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCRkYXRhKTsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgaWYgKCR0aGlzLT5sZW5ndGggIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+bGVuZ3RoOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gKHN0cmluZykgJG9iamVjdDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIENCT1JPYmplY3RbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkZGF0YSA9IFtdKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbXSA9ICRvYmplY3Q7CiAgICAgICAgWyR0aGlzLT5hZGRpdGlvbmFsSW5mb3JtYXRpb24sICR0aGlzLT5sZW5ndGhdID0gTGVuZ3RoQ2FsY3VsYXRvcjo6Z2V0TGVuZ3RoT2ZBcnJheSgkdGhpcy0+ZGF0YSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKGludCAkaW5kZXgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGluZGV4LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZShpbnQgJGluZGV4KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRpbmRleF0pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5kYXRhKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoaW50ICRpbmRleCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICBpZiAoISAkdGhpcy0+aGFzKCRpbmRleCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW5kZXggbm90IGZvdW5kLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRpbmRleF07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldChpbnQgJGluZGV4LCBDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPmhhcygkaW5kZXgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luZGV4IG5vdCBmb3VuZC4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kYXRhWyRpbmRleF0gPSAkb2JqZWN0OwogICAgICAgIFskdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uLCAkdGhpcy0+bGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJG9iamVjdC0+bm9ybWFsaXplKCkgOiAkb2JqZWN0OwogICAgICAgIH0sICR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludHxzdHJpbmcsIG1peGVkPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQ0JPUk9iamVjdCAkb2JqZWN0KSB1c2UgKCRpZ25vcmVUYWdzKSB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBJdGVyYXRvcjxpbnQsIENCT1JPYmplY3Q+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldCgkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJG9mZnNldCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+YWRkKCR2YWx1ZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KCRvZmZzZXQsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnJlbW92ZSgkb2Zmc2V0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/MapItem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpjbGFzcyBNYXBJdGVtCnsKICAgIC8qKgogICAgICogQHZhciBDQk9ST2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJGtleTsKCiAgICAvKioKICAgICAqIEB2YXIgQ0JPUk9iamVjdAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ0JPUk9iamVjdCAka2V5LCBDQk9ST2JqZWN0ICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+a2V5ID0gJGtleTsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAka2V5LCBDQk9ST2JqZWN0ICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGtleSwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5KCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmtleTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogQ0JPUk9iamVjdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/MapObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIEFycmF5QWNjZXNzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKCi8qKgogKiBAcGhwc3Rhbi1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgQ0JPUk9iamVjdD4KICogQHBocHN0YW4taW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIE1hcEl0ZW0+CiAqLwpmaW5hbCBjbGFzcyBNYXBPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENCT1JPYmplY3QgaW1wbGVtZW50cyBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBOb3JtYWxpemFibGUsIEFycmF5QWNjZXNzCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTUFQOwoKICAgIC8qKgogICAgICogQHZhciBNYXBJdGVtW10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHBhcmFtIE1hcEl0ZW1bXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICBbJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCRkYXRhKTsKICAgICAgICBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uICgkaXRlbSk6IHZvaWQgewogICAgICAgICAgICBpZiAoISAkaXRlbSBpbnN0YW5jZW9mIE1hcEl0ZW0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBsaXN0IG11c3QgY29udGFpbiBvbmx5IE1hcEl0ZW0gb2JqZWN0cy4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0sICRkYXRhKTsKCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5sZW5ndGggPSAkbGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kYXRhIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkb2JqZWN0LT5nZXRLZXkoKQogICAgICAgICAgICAgICAgLT5fX3RvU3RyaW5nKCkKICAgICAgICAgICAgOwogICAgICAgICAgICAkcmVzdWx0IC49ICRvYmplY3QtPmdldFZhbHVlKCkKICAgICAgICAgICAgICAgIC0+X190b1N0cmluZygpCiAgICAgICAgICAgIDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIE1hcEl0ZW1bXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkZGF0YSA9IFtdKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChDQk9ST2JqZWN0ICRrZXksIENCT1JPYmplY3QgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIGlmICghICRrZXkgaW5zdGFuY2VvZiBOb3JtYWxpemFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXkuIFNoYWxsIGJlIG5vcm1hbGl6YWJsZScpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZGF0YVska2V5LT5ub3JtYWxpemUoKV0gPSBNYXBJdGVtOjpjcmVhdGUoJGtleSwgJHZhbHVlKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGtleQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGluZGV4KTogc2VsZgogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCR0aGlzLT5kYXRhWyRpbmRleF0pOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5kYXRhKTsKICAgICAgICBbJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJHRoaXMtPmxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZkFycmF5KCR0aGlzLT5kYXRhKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGluZGV4KTogQ0JPUk9iamVjdAogICAgewogICAgICAgIGlmICghICR0aGlzLT5oYXMoJGluZGV4KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbmRleCBub3QgZm91bmQuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJGluZGV4XS0+Z2V0VmFsdWUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KE1hcEl0ZW0gJG9iamVjdCk6IHNlbGYKICAgIHsKICAgICAgICAka2V5ID0gJG9iamVjdC0+Z2V0S2V5KCk7CiAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGtleS4gU2hhbGwgYmUgbm9ybWFsaXphYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZGF0YVska2V5LT5ub3JtYWxpemUoKV0gPSAkb2JqZWN0OwogICAgICAgIFskdGhpcy0+YWRkaXRpb25hbEluZm9ybWF0aW9uLCAkdGhpcy0+bGVuZ3RoXSA9IExlbmd0aENhbGN1bGF0b3I6OmdldExlbmd0aE9mQXJyYXkoJHRoaXMtPmRhdGEpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPGludCwgTWFwSXRlbT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfcmVkdWNlKCR0aGlzLT5kYXRhLCBzdGF0aWMgZnVuY3Rpb24gKGFycmF5ICRjYXJyeSwgTWFwSXRlbSAkaXRlbSk6IGFycmF5IHsKICAgICAgICAgICAgJGtleSA9ICRpdGVtLT5nZXRLZXkoKTsKICAgICAgICAgICAgaWYgKCEgJGtleSBpbnN0YW5jZW9mIE5vcm1hbGl6YWJsZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXkuIFNoYWxsIGJlIG5vcm1hbGl6YWJsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR2YWx1ZU9iamVjdCA9ICRpdGVtLT5nZXRWYWx1ZSgpOwogICAgICAgICAgICAkY2FycnlbJGtleS0+bm9ybWFsaXplKCldID0gJHZhbHVlT2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJHZhbHVlT2JqZWN0LT5ub3JtYWxpemUoKSA6ICR2YWx1ZU9iamVjdDsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9yZWR1Y2UoJHRoaXMtPmRhdGEsIHN0YXRpYyBmdW5jdGlvbiAoYXJyYXkgJGNhcnJ5LCBNYXBJdGVtICRpdGVtKSB1c2UgKCRpZ25vcmVUYWdzKTogYXJyYXkgewogICAgICAgICAgICAka2V5ID0gJGl0ZW0tPmdldEtleSgpOwogICAgICAgICAgICAkdmFsdWVPYmplY3QgPSAkaXRlbS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgJGNhcnJ5WyRrZXktPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKV0gPSAkdmFsdWVPYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKCiAgICAgICAgICAgIHJldHVybiAkY2Fycnk7CiAgICAgICAgfSwgW10pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygkb2Zmc2V0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpOiBDQk9ST2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoJG9mZnNldCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEgJG9mZnNldCBpbnN0YW5jZW9mIENCT1JPYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXknKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJHZhbHVlIGluc3RhbmNlb2YgQ0JPUk9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0KE1hcEl0ZW06OmNyZWF0ZSgkb2Zmc2V0LCAkdmFsdWUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cmVtb3ZlKCRvZmZzZXQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/NegativeIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKLyoqCiAqIEBmaW5hbAogKi8KY2xhc3MgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfTkVHQVRJVkVfSU5URUdFUjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlT2JqZWN0Rm9yVmFsdWUoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShpbnQgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKChzdHJpbmcpICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgJGludGVnZXIgPSBCaWdJbnRlZ2VyOjpvZigkdmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlQmlnSW50ZWdlcigkaW50ZWdlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgKC0xIC0gJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbik7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkdGhpcy0+ZGF0YSk7CiAgICAgICAgJG1pbnVzT25lID0gQmlnSW50ZWdlcjo6b2YoLTEpOwoKICAgICAgICByZXR1cm4gJG1pbnVzT25lLT5taW51cygkcmVzdWx0KQogICAgICAgICAgICAtPnRvQmFzZSgxMCkKICAgICAgICA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFZhbHVlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFZhbHVlKCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQmlnSW50ZWdlcihCaWdJbnRlZ2VyICRpbnRlZ2VyKTogc2VsZgogICAgewogICAgICAgIGlmICgkaW50ZWdlci0+aXNHcmVhdGVyVGhhbk9yRXF1YWxUbyhCaWdJbnRlZ2VyOjp6ZXJvKCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBtdXN0IGJlIGEgbmVnYXRpdmUgaW50ZWdlci4nKTsKICAgICAgICB9CgogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKICAgICAgICAkY29tcHV0ZWRfdmFsdWUgPSAkbWludXNPbmUtPm1pbnVzKCRpbnRlZ2VyKTsKCiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6Om9mKDI0KSk6CiAgICAgICAgICAgICAgICAkYWkgPSAkY29tcHV0ZWRfdmFsdWUtPnRvSW50KCk7CiAgICAgICAgICAgICAgICAkZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkY29tcHV0ZWRfdmFsdWUtPmlzTGVzc1RoYW4oQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJ0ZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI0OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGNvbXB1dGVkX3ZhbHVlLT50b0Jhc2UoMTYpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI1OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGNvbXB1dGVkX3ZhbHVlLT50b0Jhc2UoMTYpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJGNvbXB1dGVkX3ZhbHVlLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGRkZGRicsIDE2KSk6CiAgICAgICAgICAgICAgICAkYWkgPSAyNjsKICAgICAgICAgICAgICAgICRkYXRhID0gc2VsZjo6aGV4MmJpbihzdHJfcGFkKCRjb21wdXRlZF92YWx1ZS0+dG9CYXNlKDE2KSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnT3V0IG9mIHJhbmdlLiBQbGVhc2UgdXNlIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyB0YWcgd2l0aCBCeXRlU3RyaW5nT2JqZWN0IG9iamVjdCBpbnN0ZWFkLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Normalizable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgTm9ybWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgphYnN0cmFjdCBjbGFzcyBPdGhlck9iamVjdCBleHRlbmRzIEFic3RyYWN0Q0JPUk9iamVjdAp7CiAgICBwcml2YXRlIGNvbnN0IE1BSk9SX1RZUEUgPSBzZWxmOjpNQUpPUl9UWVBFX09USEVSX1RZUEU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5OwoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/BreakObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwoKZmluYWwgY2xhc3MgQnJlYWtPYmplY3QgZXh0ZW5kcyBCYXNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpPQkpFQ1RfQlJFQUssIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX0JSRUFLXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/DoublePrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgY29uc3QgSU5GOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgTkFOOwoKZmluYWwgY2xhc3MgRG91YmxlUHJlY2lzaW9uRmxvYXRPYmplY3QgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVF07CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSk6IEJhc2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKG1iX3N0cmxlbigkdmFsdWUsICc4Yml0JykgIT09IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZihzZWxmOjpPQkpFQ1RfRE9VQkxFX1BSRUNJU0lPTl9GTE9BVCwgJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBmbG9hdHxpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpCiAgICB7CiAgICAgICAgJGV4cG9uZW50ID0gJHRoaXMtPmdldEV4cG9uZW50KCk7CiAgICAgICAgJG1hbnRpc3NhID0gJHRoaXMtPmdldE1hbnRpc3NhKCk7CiAgICAgICAgJHNpZ24gPSAkdGhpcy0+Z2V0U2lnbigpOwoKICAgICAgICBpZiAoJGV4cG9uZW50ID09PSAwKSB7CiAgICAgICAgICAgICR2YWwgPSAkbWFudGlzc2EgKiAyICoqICgtKDEwMjIgKyA1MikpOwogICAgICAgIH0gZWxzZWlmICgkZXhwb25lbnQgIT09IDBiMTExMTExMTExMTEpIHsKICAgICAgICAgICAgJHZhbCA9ICgkbWFudGlzc2EgKyAoMSA8PCA1MikpICogMiAqKiAoJGV4cG9uZW50IC0gKDEwMjMgKyA1MikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSAkbWFudGlzc2EgPT09IDAgPyBJTkYgOiBOQU47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ24gKiAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBvbmVudCgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoNTIpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignN2ZmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYW50aXNzYSgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignZmZmZmZmZmZmZmZmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAkc2lnbiA9IFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoNjMpOwoKICAgICAgICByZXR1cm4gJHNpZ24tPmlzRXF1YWxUbyhCaWdJbnRlZ2VyOjpvbmUoKSkgPyAtMSA6IDE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/FalseObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBGYWxzZU9iamVjdCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBOb3JtYWxpemFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6Ok9CSkVDVF9GQUxTRSwgbnVsbCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfRkFMU0VdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm9ybWFsaXplKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/GenericObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwoKZmluYWwgY2xhc3MgR2VuZXJpY09iamVjdCBleHRlbmRzIEJhc2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0ZWRBZGRpdGlvbmFsSW5mb3JtYXRpb24oKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSk6IEJhc2UKICAgIHsKICAgICAgICBpZiAoJGRhdGEgIT09IG51bGwgJiYgb3JkKCRkYXRhKSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2ltcGxlIHZhbHVlLiBDb250ZW50IGRhdGEgc2hvdWxkIG5vdCBiZSBwcmVzZW50LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/HalfPrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgY29uc3QgSU5GOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgTkFOOwoKZmluYWwgY2xhc3MgSGFsZlByZWNpc2lvbkZsb2F0T2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX0hBTEZfUFJFQ0lTSU9OX0ZMT0FUXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICBpZiAobWJfc3RybGVuKCR2YWx1ZSwgJzhiaXQnKSAhPT0gMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdmFsdWUgaXMgbm90IGEgdmFsaWQgaGFsZiBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZihzZWxmOjpPQkpFQ1RfSEFMRl9QUkVDSVNJT05fRkxPQVQsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gZmxvYXR8aW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgICRleHBvbmVudCA9ICR0aGlzLT5nZXRFeHBvbmVudCgpOwogICAgICAgICRtYW50aXNzYSA9ICR0aGlzLT5nZXRNYW50aXNzYSgpOwogICAgICAgICRzaWduID0gJHRoaXMtPmdldFNpZ24oKTsKCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhICogMiAqKiAoLTI0KTsKICAgICAgICB9IGVsc2VpZiAoJGV4cG9uZW50ICE9PSAwYjExMTExKSB7CiAgICAgICAgICAgICR2YWwgPSAoJG1hbnRpc3NhICsgKDEgPDwgMTApKSAqIDIgKiogKCRleHBvbmVudCAtIDI1KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhID09PSAwID8gSU5GIDogTkFOOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzaWduICogJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhwb25lbnQoKTogaW50CiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+ZGF0YTsKICAgICAgICBVdGlsczo6YXNzZXJ0U3RyaW5nKCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBVdGlsczo6YmluVG9CaWdJbnRlZ2VyKCRkYXRhKS0+c2hpZnRlZFJpZ2h0KDEwKS0+YW5kKFV0aWxzOjpoZXhUb0JpZ0ludGVnZXIoJzFmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYW50aXNzYSgpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5hbmQoVXRpbHM6OmhleFRvQmlnSW50ZWdlcignM2ZmJykpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduKCk6IGludAogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmRhdGE7CiAgICAgICAgVXRpbHM6OmFzc2VydFN0cmluZygkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwogICAgICAgICRzaWduID0gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkZGF0YSktPnNoaWZ0ZWRSaWdodCgxNSk7CgogICAgICAgIHJldHVybiAkc2lnbi0+aXNFcXVhbFRvKEJpZ0ludGVnZXI6Om9uZSgpKSA/IC0xIDogMTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/NullObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBOdWxsT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX05VTEwsIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX05VTExdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/OtherObjectManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5X2V4aXN0czsKdXNlIENCT1JcT3RoZXJPYmplY3Q7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBPdGhlck9iamVjdE1hbmFnZXIgaW1wbGVtZW50cyBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGNsYXNzZXMgPSBbXTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJGNsYXNzKTogc2VsZgogICAgewogICAgICAgIGZvcmVhY2ggKCRjbGFzczo6c3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCkgYXMgJGFpKSB7CiAgICAgICAgICAgIGlmICgkYWkgPCAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNsYXNzZXNbJGFpXSA9ICRjbGFzczsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NGb3JWYWx1ZShpbnQgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHZhbHVlLCAkdGhpcy0+Y2xhc3NlcykgPyAkdGhpcy0+Y2xhc3Nlc1skdmFsdWVdIDogR2VuZXJpY09iamVjdDo6Y2xhc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkdmFsdWUsID9zdHJpbmcgJGRhdGEpOiBPdGhlck9iamVjdAogICAgewogICAgICAgIC8qKiBAdmFyIE90aGVyT2JqZWN0ICRjbGFzcyAqLwogICAgICAgICRjbGFzcyA9ICR0aGlzLT5nZXRDbGFzc0ZvclZhbHVlKCR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkY2xhc3M6OmNyZWF0ZUZyb21Mb2FkZWREYXRhKCR2YWx1ZSwgJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/OtherObjectManagerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdDsKCmludGVyZmFjZSBPdGhlck9iamVjdE1hbmFnZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkdmFsdWUsID9zdHJpbmcgJGRhdGEpOiBPdGhlck9iamVjdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/SimpleObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CnVzZSBDQk9SXFV0aWxzOwp1c2UgZnVuY3Rpb24gY2hyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwoKZmluYWwgY2xhc3MgU2ltcGxlT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tZXJnZShyYW5nZSgwLCAxOSksIFsyNF0pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgaWYgKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24gPT09IDI0KSB7CiAgICAgICAgICAgIGlmICgkZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBzaW1wbGUgdmFsdWUuIENvbnRlbnQgZGF0YSBpcyBtaXNzaW5nLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJGRhdGEsICc4Yml0JykgIT09IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2ltcGxlIHZhbHVlLiBDb250ZW50IGRhdGEgaXMgdG9vIGxvbmcuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9yZCgkZGF0YSkgPCAzMikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBzaW1wbGUgdmFsdWUuIENvbnRlbnQgZGF0YSBtdXN0IGJlIGJldHdlZW4gMzIgYW5kIDI1NS4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkYWRkaXRpb25hbEluZm9ybWF0aW9uIDwgMjApIHsKICAgICAgICAgICAgaWYgKCRkYXRhICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHNpbXBsZSB2YWx1ZS4gQ29udGVudCBkYXRhIHNob3VsZCBub3QgYmUgcHJlc2VudC4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IGludAogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFV0aWxzOjpiaW5Ub0ludCgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGludCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJHZhbHVlIDwgMzI6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlLCBudWxsKTsKICAgICAgICAgICAgY2FzZSAkdmFsdWUgPCAyNTY6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoMjQsIGNocigkdmFsdWUpKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBzaW1wbGUgdmFsdWUuJyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/SinglePrecisionFloatObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwp1c2UgQ0JPUlxVdGlsczsKdXNlIGNvbnN0IElORjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGNvbnN0IE5BTjsKCmZpbmFsIGNsYXNzIFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0IGV4dGVuZHMgQmFzZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX1NJTkdMRV9QUkVDSVNJT05fRkxPQVRdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIGlmIChtYl9zdHJsZW4oJHZhbHVlLCAnOGJpdCcpICE9PSA0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoc2VsZjo6T0JKRUNUX1NJTkdMRV9QUkVDSVNJT05fRkxPQVQsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gZmxvYXR8aW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgICRleHBvbmVudCA9ICR0aGlzLT5nZXRFeHBvbmVudCgpOwogICAgICAgICRtYW50aXNzYSA9ICR0aGlzLT5nZXRNYW50aXNzYSgpOwogICAgICAgICRzaWduID0gJHRoaXMtPmdldFNpZ24oKTsKCiAgICAgICAgaWYgKCRleHBvbmVudCA9PT0gMCkgewogICAgICAgICAgICAkdmFsID0gJG1hbnRpc3NhICogMiAqKiAoLSgxMjYgKyAyMykpOwogICAgICAgIH0gZWxzZWlmICgkZXhwb25lbnQgIT09IDBiMTExMTExMTEpIHsKICAgICAgICAgICAgJHZhbCA9ICgkbWFudGlzc2EgKyAoMSA8PCAyMykpICogMiAqKiAoJGV4cG9uZW50IC0gKDEyNyArIDIzKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHZhbCA9ICRtYW50aXNzYSA9PT0gMCA/IElORiA6IE5BTjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2lnbiAqICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4cG9uZW50KCk6IGludAogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmRhdGE7CiAgICAgICAgVXRpbHM6OmFzc2VydFN0cmluZygkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmJpblRvQmlnSW50ZWdlcigkZGF0YSktPnNoaWZ0ZWRSaWdodCgyMyktPmFuZChVdGlsczo6aGV4VG9CaWdJbnRlZ2VyKCdmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFudGlzc2EoKTogaW50CiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+ZGF0YTsKICAgICAgICBVdGlsczo6YXNzZXJ0U3RyaW5nKCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBVdGlsczo6YmluVG9CaWdJbnRlZ2VyKCRkYXRhKS0+YW5kKFV0aWxzOjpoZXhUb0JpZ0ludGVnZXIoJzdmZmZmZicpKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbigpOiBpbnQKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5kYXRhOwogICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAkc2lnbiA9IFV0aWxzOjpiaW5Ub0JpZ0ludGVnZXIoJGRhdGEpLT5zaGlmdGVkUmlnaHQoMzEpOwoKICAgICAgICByZXR1cm4gJHNpZ24tPmlzRXF1YWxUbyhCaWdJbnRlZ2VyOjpvbmUoKSkgPyAtMSA6IDE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/TrueObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0IGFzIEJhc2U7CgpmaW5hbCBjbGFzcyBUcnVlT2JqZWN0IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX1RSVUUsIG51bGwpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRlZEFkZGl0aW9uYWxJbmZvcm1hdGlvbigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbc2VsZjo6T0JKRUNUX1RSVUVdOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBCYXNlCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/OtherObject/UndefinedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcT3RoZXJPYmplY3Q7Cgp1c2UgQ0JPUlxPdGhlck9iamVjdCBhcyBCYXNlOwoKZmluYWwgY2xhc3MgVW5kZWZpbmVkT2JqZWN0IGV4dGVuZHMgQmFzZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6T0JKRUNUX1VOREVGSU5FRCwgbnVsbCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQWRkaXRpb25hbEluZm9ybWF0aW9uKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFtzZWxmOjpPQkpFQ1RfVU5ERUZJTkVEXTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhKTogQmFzZQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/SignedIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0IGluc3RlYWQKICovCmZpbmFsIGNsYXNzIFNpZ25lZEludGVnZXJPYmplY3QgZXh0ZW5kcyBOZWdhdGl2ZUludGVnZXJPYmplY3QKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgppbnRlcmZhY2UgU3RyZWFtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKGludCAkbGVuZ3RoKTogc3RyaW5nOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/StringStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIFN0cmluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbQp7CiAgICAvKioKICAgICAqIEB2YXIgcmVzb3VyY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVzb3VyY2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICAkcmVzb3VyY2UgPSBmb3BlbigncGhwOi8vbWVtb3J5JywgJ3JiKycpOwogICAgICAgIGlmICgkcmVzb3VyY2UgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gb3BlbiB0aGUgbWVtb3J5Jyk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBmd3JpdGUoJHJlc291cmNlLCAkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gd3JpdGUgdGhlIG1lbW9yeScpOwogICAgICAgIH0KICAgICAgICAkcmVzdWx0ID0gcmV3aW5kKCRyZXNvdXJjZSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmV3aW5kIHRoZSBtZW1vcnknKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnJlc291cmNlID0gJHJlc291cmNlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKGludCAkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRsZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJGFscmVhZHlSZWFkID0gMDsKICAgICAgICAkZGF0YSA9ICcnOwogICAgICAgIHdoaWxlICgkYWxyZWFkeVJlYWQgPCAkbGVuZ3RoKSB7CiAgICAgICAgICAgICRsZWZ0ID0gJGxlbmd0aCAtICRhbHJlYWR5UmVhZDsKICAgICAgICAgICAgJHNpemVUb1JlYWQgPSAkbGVmdCA8IDEwMjQgJiYgJGxlZnQgPiAwID8gJGxlZnQgOiAxMDI0OwogICAgICAgICAgICAkbmV3RGF0YSA9IGZyZWFkKCR0aGlzLT5yZXNvdXJjZSwgJHNpemVUb1JlYWQpOwogICAgICAgICAgICAkYWxyZWFkeVJlYWQgKz0gJHNpemVUb1JlYWQ7CgogICAgICAgICAgICBpZiAoJG5ld0RhdGEgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYWQgdGhlIG1lbW9yeScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJG5ld0RhdGEsICc4Yml0JykgPCAkc2l6ZVRvUmVhZCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIEV4cGVjdGVkOiAlZCwgcmVhZDogJWQuJywKICAgICAgICAgICAgICAgICAgICAkbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGEgLj0gJG5ld0RhdGE7CiAgICAgICAgfQoKICAgICAgICBpZiAobWJfc3RybGVuKCRkYXRhLCAnOGJpdCcpICE9PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIEV4cGVjdGVkOiAlZCwgcmVhZDogJWQuJywKICAgICAgICAgICAgICAgICRsZW5ndGgsCiAgICAgICAgICAgICAgICBtYl9zdHJsZW4oJGRhdGEsICc4Yml0JykKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKYWJzdHJhY3QgY2xhc3MgVGFnIGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0CnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVEFHOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIENCT1JPYmplY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRvYmplY3Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5vYmplY3QgPSAkb2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0IC4gJHRoaXMtPm9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF0YSgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50OwoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoCiAgICAgICAgaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sCiAgICAgICAgP3N0cmluZyAkZGF0YSwKICAgICAgICBDQk9ST2JqZWN0ICRvYmplY3QKICAgICk6IHNlbGY7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IENCT1JPYmplY3QKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl7aW50LCBudWxsfHN0cmluZ30KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBkZXRlcm1pbmVDb21wb25lbnRzKGludCAkdGFnKTogYXJyYXkKICAgIHsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMjQ6CiAgICAgICAgICAgICAgICByZXR1cm4gWyR0YWcsIG51bGxdOwogICAgICAgICAgICBjYXNlICR0YWcgPCAweEZGOgogICAgICAgICAgICAgICAgcmV0dXJuIFsyNCwgc2VsZjo6aGV4MmJpbihkZWNoZXgoJHRhZykpXTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMHhGRkZGOgogICAgICAgICAgICAgICAgcmV0dXJuIFsyNSwgc2VsZjo6aGV4MmJpbihkZWNoZXgoJHRhZykpXTsKICAgICAgICAgICAgY2FzZSAkdGFnIDwgMHhGRkZGRkZGRjoKICAgICAgICAgICAgICAgIHJldHVybiBbMjYsIHNlbGY6OmhleDJiaW4oZGVjaGV4KCR0YWcpKV07CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdPdXQgb2YgcmFuZ2UuIFBsZWFzZSB1c2UgUG9zaXRpdmVCaWdJbnRlZ2VyVGFnIHRhZyB3aXRoIEJ5dGVTdHJpbmdPYmplY3Qgb2JqZWN0IGluc3RlYWQuJwogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base16EncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CgpmaW5hbCBjbGFzcyBCYXNlMTZFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9CQVNFMTY7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FTkNPREVEX0JBU0UxNik7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiaW4yaGV4KCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64EncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgpmaW5hbCBjbGFzcyBCYXNlNjRFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9CQVNFNjQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FTkNPREVEX0JBU0U2NCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSBiYXNlNjRfZGVjb2RlKCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBkZWNvZGUgdGhlIGRhdGEnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64Tag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVGV4dFN0cmluZ09iamVjdDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJhc2U2NFRhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBUZXh0IFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfQkFTRTY0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfQkFTRTY0KTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhaSwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64UrlEncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFV0aWxzOwoKZmluYWwgY2xhc3MgQmFzZTY0VXJsRW5jb2RpbmdUYWcgZXh0ZW5kcyBUYWcKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX0VOQ09ERURfQkFTRTY0X1VSTDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0VOQ09ERURfQkFTRTY0X1VSTCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICYmICEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIFRleHRTdHJpbmdPYmplY3QgJiYgISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVdGlsczo6ZGVjb2RlKCR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/Base64UrlTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVGV4dFN0cmluZ09iamVjdDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJhc2U2NFVybFRhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBUZXh0IFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfQkFTRTY0X1VSTDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0JBU0U2NF9VUkwpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/BigFloatTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTGlzdE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVW5zaWduZWRJbnRlZ2VyT2JqZWN0Owp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHRlbnNpb25fbG9hZGVkOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIEJpZ0Zsb2F0VGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghIGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgZXh0ZW5zaW9uICJiY21hdGgiIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIHRhZycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJG9iamVjdCBpbnN0YW5jZW9mIExpc3RPYmplY3QgfHwgY291bnQoJG9iamVjdCkgIT09IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBMaXN0T2JqZWN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFuIGV4cG9uZW50IGFuZCBhIG1hbnRpc3NhLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgaWYgKCEgJGUgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3QgJiYgISAkZSBpbnN0YW5jZW9mIE5lZ2F0aXZlSW50ZWdlck9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgZXhwb25lbnQgbXVzdCBiZSBhIFNpZ25lZCBJbnRlZ2VyIG9yIGFuIFVuc2lnbmVkIEludGVnZXIgb2JqZWN0LicpOwogICAgICAgIH0KICAgICAgICAkbSA9ICRvYmplY3QtPmdldCgxKTsKICAgICAgICBpZiAoISAkbSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRtIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUJpZ0ludGVnZXJUYWcgJiYgISAkbSBpbnN0YW5jZW9mIFVuc2lnbmVkQmlnSW50ZWdlclRhZykgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoZSBtYW50aXNzYSBtdXN0IGJlIGEgUG9zaXRpdmUgb3IgTmVnYXRpdmUgU2lnbmVkIEludGVnZXIgb3IgYW4gVW5zaWduZWQgSW50ZWdlciBvYmplY3QuJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX0JJR19GTE9BVDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX0JJR19GTE9BVCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21FeHBvbmVudEFuZE1hbnRpc3NhKENCT1JPYmplY3QgJGUsIENCT1JPYmplY3QgJG0pOiBUYWcKICAgIHsKICAgICAgICAkb2JqZWN0ID0gTGlzdE9iamVjdDo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5hZGQoJGUpCiAgICAgICAgICAgIC0+YWRkKCRtKQogICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZSgkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICAvKiogQHZhciBMaXN0T2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKICAgICAgICAvKiogQHZhciBVbnNpZ25lZEludGVnZXJPYmplY3R8TmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICRlICovCiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgLyoqIEB2YXIgVW5zaWduZWRJbnRlZ2VyT2JqZWN0fE5lZ2F0aXZlSW50ZWdlck9iamVjdHxOZWdhdGl2ZUJpZ0ludGVnZXJUYWd8VW5zaWduZWRCaWdJbnRlZ2VyVGFnICRtICovCiAgICAgICAgJG0gPSAkb2JqZWN0LT5nZXQoMSk7CgogICAgICAgIHJldHVybiBydHJpbShiY211bCgkbS0+bm9ybWFsaXplKCksIGJjcG93KCcyJywgJGUtPm5vcm1hbGl6ZSgpLCAxMDApLCAxMDApLCAnMCcpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIExpc3RPYmplY3QgfHwgY291bnQoJHRoaXMtPm9iamVjdCkgIT09IDIpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+bm9ybWFsaXplKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/CBOREncodingTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIENCT1JFbmNvZGluZ1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRU5DT0RFRF9DQk9SOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfRU5DT0RFRF9DQk9SKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhaSwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/CBORTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTm9ybWFsaXphYmxlOwp1c2UgQ0JPUlxUYWc7CgpmaW5hbCBjbGFzcyBDQk9SVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19DQk9SOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfQ0JPUik7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWR8Q0JPUk9iamVjdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgTm9ybWFsaXphYmxlID8gJHRoaXMtPm9iamVjdC0+bm9ybWFsaXplKCkgOiAkdGhpcy0+b2JqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/DatetimeTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgY29uc3QgREFURV9SRkMzMzM5Owp1c2UgRGF0ZVRpbWVJbW11dGFibGU7CnVzZSBEYXRlVGltZUludGVyZmFjZTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAZmluYWwKICovCmNsYXNzIERhdGV0aW1lVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBUZXh0U3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIEJ5dGUgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdJZCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VEFHX1NUQU5EQVJEX0RBVEVUSU1FOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfU1RBTkRBUkRfREFURVRJTUUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBEYXRlVGltZUludGVyZmFjZQogICAgewogICAgICAgIC8qKiBAdmFyIFRleHRTdHJpbmdPYmplY3R8SW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QgJG9iamVjdCAqLwogICAgICAgICRvYmplY3QgPSAkdGhpcy0+b2JqZWN0OwogICAgICAgICRyZXN1bHQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdChEQVRFX1JGQzMzMzksICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICAkZm9ybWF0dGVkID0gRGF0ZVRpbWVJbW11dGFibGU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1ktbS1kXFRIOmk6cy51UCcsICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKICAgICAgICBpZiAoJGZvcm1hdHRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBDYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBkYXRldGltZSBvYmplY3QnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm9ybWF0dGVkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/DecimalFractionTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTGlzdE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVW5zaWduZWRJbnRlZ2VyT2JqZWN0Owp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBleHRlbnNpb25fbG9hZGVkOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmZpbmFsIGNsYXNzIERlY2ltYWxGcmFjdGlvblRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghIGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgZXh0ZW5zaW9uICJiY21hdGgiIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIHRhZycpOwogICAgICAgIH0KICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgTGlzdE9iamVjdCB8fCBjb3VudCgkb2JqZWN0KSAhPT0gMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIExpc3RPYmplY3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYW4gZXhwb25lbnQgYW5kIGEgbWFudGlzc2EuJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkZSA9ICRvYmplY3QtPmdldCgwKTsKICAgICAgICBpZiAoISAkZSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRlIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBleHBvbmVudCBtdXN0IGJlIGEgU2lnbmVkIEludGVnZXIgb3IgYW4gVW5zaWduZWQgSW50ZWdlciBvYmplY3QuJyk7CiAgICAgICAgfQogICAgICAgICRtID0gJG9iamVjdC0+Z2V0KDEpOwogICAgICAgIGlmICghICRtIGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3QgJiYgISAkbSBpbnN0YW5jZW9mIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyAmJiAhICRtIGluc3RhbmNlb2YgVW5zaWduZWRCaWdJbnRlZ2VyVGFnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnVGhlIG1hbnRpc3NhIG11c3QgYmUgYSBQb3NpdGl2ZSBvciBOZWdhdGl2ZSBTaWduZWQgSW50ZWdlciBvciBhbiBVbnNpZ25lZCBJbnRlZ2VyIG9iamVjdC4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KHNlbGY6OlRBR19ERUNJTUFMX0ZSQUNUSU9OLCBudWxsLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19ERUNJTUFMX0ZSQUNUSU9OOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21FeHBvbmVudEFuZE1hbnRpc3NhKENCT1JPYmplY3QgJGUsIENCT1JPYmplY3QgJG0pOiBUYWcKICAgIHsKICAgICAgICAkb2JqZWN0ID0gTGlzdE9iamVjdDo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5hZGQoJGUpCiAgICAgICAgICAgIC0+YWRkKCRtKQogICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZSgkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICAvKiogQHZhciBMaXN0T2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKICAgICAgICAvKiogQHZhciBVbnNpZ25lZEludGVnZXJPYmplY3R8TmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICRlICovCiAgICAgICAgJGUgPSAkb2JqZWN0LT5nZXQoMCk7CiAgICAgICAgLyoqIEB2YXIgVW5zaWduZWRJbnRlZ2VyT2JqZWN0fE5lZ2F0aXZlSW50ZWdlck9iamVjdHxOZWdhdGl2ZUJpZ0ludGVnZXJUYWd8VW5zaWduZWRCaWdJbnRlZ2VyVGFnICRtICovCiAgICAgICAgJG0gPSAkb2JqZWN0LT5nZXQoMSk7CgogICAgICAgIHJldHVybiBydHJpbShiY211bCgkbS0+bm9ybWFsaXplKCksIGJjcG93KCcxMCcsICRlLT5ub3JtYWxpemUoKSwgMTAwKSwgMTAwKSwgJzAnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBMaXN0T2JqZWN0IHx8IGNvdW50KCR0aGlzLT5vYmplY3QpICE9PSAyKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgICRlID0gJHRoaXMtPm9iamVjdC0+Z2V0KDApOwogICAgICAgICRtID0gJHRoaXMtPm9iamVjdC0+Z2V0KDEpOwoKICAgICAgICBpZiAoISAkZSBpbnN0YW5jZW9mIFVuc2lnbmVkSW50ZWdlck9iamVjdCAmJiAhICRlIGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgIGlmICghICRtIGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0ICYmICEgJG0gaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3QgJiYgISAkbSBpbnN0YW5jZW9mIE5lZ2F0aXZlQmlnSW50ZWdlclRhZyAmJiAhICRtIGluc3RhbmNlb2YgVW5zaWduZWRCaWdJbnRlZ2VyVGFnKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5vcm1hbGl6ZSgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/EpochTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFRoZSBjbGFzcyBFcG9jaFRhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjMuMC4gUGxlYXNlIHVzZSBEYXRldGltZVRhZyBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBFcG9jaFRhZyBleHRlbmRzIERhdGV0aW1lVGFnCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/GenericTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcVGFnOwoKZmluYWwgY2xhc3MgR2VuZXJpY1RhZyBleHRlbmRzIFRhZwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/MimeTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgTWltZVRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgVGV4dFN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoVGV4dFN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfTUlNRTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX01JTUUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBUZXh0U3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/NegativeBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIEJyaWNrXE1hdGhcQmlnSW50ZWdlcjsKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgTmVnYXRpdmVCaWdJbnRlZ2VyVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIEJ5dGUgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19ORUdBVElWRV9CSUdfTlVNOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUxvYWRlZERhdGEoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWRkaXRpb25hbEluZm9ybWF0aW9uLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgWyRhaSwgJGRhdGFdID0gc2VsZjo6ZGV0ZXJtaW5lQ29tcG9uZW50cyhzZWxmOjpUQUdfTkVHQVRJVkVfQklHX05VTSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IHN0cmluZwogICAgewogICAgICAgIC8qKiBAdmFyIEJ5dGVTdHJpbmdPYmplY3R8SW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3QgJG9iamVjdCAqLwogICAgICAgICRvYmplY3QgPSAkdGhpcy0+b2JqZWN0OwogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkb2JqZWN0LT5nZXRWYWx1ZSgpKSwgMTYpOwogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKCiAgICAgICAgcmV0dXJuICRtaW51c09uZS0+bWludXMoJGludGVnZXIpCiAgICAgICAgICAgIC0+dG9CYXNlKDEwKQogICAgICAgIDsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJGlnbm9yZVRhZ3MpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3QtPmdldE5vcm1hbGl6ZWREYXRhKCRpZ25vcmVUYWdzKTsKICAgICAgICB9CgogICAgICAgIGlmICghICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBCeXRlU3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdGhpcy0+b2JqZWN0LT5nZXRWYWx1ZSgpKSwgMTYpOwogICAgICAgICRtaW51c09uZSA9IEJpZ0ludGVnZXI6Om9mKC0xKTsKCiAgICAgICAgcmV0dXJuICRtaW51c09uZS0+bWludXMoJGludGVnZXIpCiAgICAgICAgICAgIC0+dG9CYXNlKDEwKQogICAgICAgIDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/PositiveBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2My4wLiBQbGVhc2UgdXNlIFVuc2lnbmVkQmlnSW50ZWdlclRhZyBpbnN0ZWFkCiAqLwpmaW5hbCBjbGFzcyBQb3NpdGl2ZUJpZ0ludGVnZXJUYWcgZXh0ZW5kcyBVbnNpZ25lZEJpZ0ludGVnZXJUYWcKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBDQk9SXENCT1JPYmplY3Q7CnVzZSBDQk9SXFRhZzsKdXNlIENCT1JcVXRpbHM7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgovKioKICogQGZpbmFsCiAqLwpjbGFzcyBUYWdNYW5hZ2VyIGltcGxlbWVudHMgVGFnTWFuYWdlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkY2xhc3NlcyA9IFtdOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKHN0cmluZyAkY2xhc3MpOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKCRjbGFzczo6Z2V0VGFnSWQoKSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB0YWcgSUQuJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5jbGFzc2VzWyRjbGFzczo6Z2V0VGFnSWQoKV0gPSAkY2xhc3M7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NGb3JWYWx1ZShpbnQgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHZhbHVlLCAkdGhpcy0+Y2xhc3NlcykgPyAkdGhpcy0+Y2xhc3Nlc1skdmFsdWVdIDogR2VuZXJpY1RhZzo6Y2xhc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICAkdmFsdWUgPSAkYWRkaXRpb25hbEluZm9ybWF0aW9uOwogICAgICAgIGlmICgkYWRkaXRpb25hbEluZm9ybWF0aW9uID49IDI0KSB7CiAgICAgICAgICAgIFV0aWxzOjphc3NlcnRTdHJpbmcoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKICAgICAgICAgICAgJHZhbHVlID0gVXRpbHM6OmJpblRvSW50KCRkYXRhKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgVGFnICRjbGFzcyAqLwogICAgICAgICRjbGFzcyA9ICR0aGlzLT5nZXRDbGFzc0ZvclZhbHVlKCR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkY2xhc3M6OmNyZWF0ZUZyb21Mb2FkZWREYXRhKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagManagerInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcVGFnOwoKaW50ZXJmYWNlIFRhZ01hbmFnZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdEZvclZhbHVlKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TagObjectManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKLyoqCiAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiB2My4wLiBQbGVhc2UgdXNlIFRhZ01hbmFnZXIgaW5zdGVhZAogKi8KY2xhc3MgVGFnT2JqZWN0TWFuYWdlciBleHRlbmRzIFRhZ01hbmFnZXIKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/TimestampTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxOb3JtYWxpemFibGU7CnVzZSBDQk9SXE90aGVyT2JqZWN0XERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0Owp1c2UgQ0JPUlxUYWc7CnVzZSBDQk9SXFVuc2lnbmVkSW50ZWdlck9iamVjdDsKdXNlIERhdGVUaW1lSW1tdXRhYmxlOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBjb25zdCBTVFJfUEFEX1JJR0hUOwoKZmluYWwgY2xhc3MgVGltZXN0YW1wVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3QgJiYgISAkb2JqZWN0IGluc3RhbmNlb2YgTmVnYXRpdmVJbnRlZ2VyT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEhhbGZQcmVjaXNpb25GbG9hdE9iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBTaW5nbGVQcmVjaXNpb25GbG9hdE9iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBEb3VibGVQcmVjaXNpb25GbG9hdE9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgaW50ZWdlci1iYXNlZCBvciBmbG9hdC1iYXNlZCBvYmplY3RzLicpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfRVBPQ0hfREFURVRJTUU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19FUE9DSF9EQVRFVElNRSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWksICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IERhdGVUaW1lSW50ZXJmYWNlCiAgICB7CiAgICAgICAgJG9iamVjdCA9ICR0aGlzLT5vYmplY3Q7CgogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBVbnNpZ25lZEludGVnZXJPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIE5lZ2F0aXZlSW50ZWdlck9iamVjdDoKICAgICAgICAgICAgICAgICRmb3JtYXR0ZWQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVScsICRvYmplY3QtPm5vcm1hbGl6ZSgpKTsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBIYWxmUHJlY2lzaW9uRmxvYXRPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIFNpbmdsZVByZWNpc2lvbkZsb2F0T2JqZWN0OgogICAgICAgICAgICBjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBEb3VibGVQcmVjaXNpb25GbG9hdE9iamVjdDoKICAgICAgICAgICAgICAgICR2YWx1ZSA9IChzdHJpbmcpICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLicsICR2YWx1ZSk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnRzWzFdKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtYl9zdHJsZW4oJHBhcnRzWzFdLCAnOGJpdCcpID4gNikgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFydHNbMV0gPSBtYl9zdWJzdHIoJHBhcnRzWzFdLCAwLCA2LCAnOGJpdCcpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0c1sxXSA9IHN0cl9wYWQoJHBhcnRzWzFdLCA2LCAnMCcsIFNUUl9QQURfUklHSFQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRmb3JtYXR0ZWQgPSBEYXRlVGltZUltbXV0YWJsZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVS51JywgaW1wbG9kZSgnLicsICRwYXJ0cykpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIG5vcm1hbGl6ZSB0aGUgb2JqZWN0Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZvcm1hdHRlZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBDYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBkYXRldGltZSBvYmplY3QnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZm9ybWF0dGVkOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkaWdub3JlVGFncykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgVW5zaWduZWRJbnRlZ2VyT2JqZWN0OgogICAgICAgICAgICBjYXNlICR0aGlzLT5vYmplY3QgaW5zdGFuY2VvZiBOZWdhdGl2ZUludGVnZXJPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIEhhbGZQcmVjaXNpb25GbG9hdE9iamVjdDoKICAgICAgICAgICAgY2FzZSAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgU2luZ2xlUHJlY2lzaW9uRmxvYXRPYmplY3Q6CiAgICAgICAgICAgIGNhc2UgJHRoaXMtPm9iamVjdCBpbnN0YW5jZW9mIERvdWJsZVByZWNpc2lvbkZsb2F0T2JqZWN0OgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/UnsignedBigIntegerTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQnl0ZVN0cmluZ09iamVjdDsKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxVdGlsczsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAZmluYWwKICovCmNsYXNzIFVuc2lnbmVkQmlnSW50ZWdlclRhZyBleHRlbmRzIFRhZyBpbXBsZW1lbnRzIE5vcm1hbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEsIENCT1JPYmplY3QgJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAoISAkb2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCAmJiAhICRvYmplY3QgaW5zdGFuY2VvZiBJbmRlZmluaXRlTGVuZ3RoQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGlzIHRhZyBvbmx5IGFjY2VwdHMgYSBCeXRlIFN0cmluZyBvYmplY3QuJyk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0lkKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpUQUdfVU5TSUdORURfQklHX05VTTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Mb2FkZWREYXRhKGludCAkYWRkaXRpb25hbEluZm9ybWF0aW9uLCA/c3RyaW5nICRkYXRhLCBDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKENCT1JPYmplY3QgJG9iamVjdCk6IFRhZwogICAgewogICAgICAgIFskYWksICRkYXRhXSA9IHNlbGY6OmRldGVybWluZUNvbXBvbmVudHMoc2VsZjo6VEFHX1VOU0lHTkVEX0JJR19OVU0pOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBCeXRlU3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhCeXRlU3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpoZXhUb1N0cmluZygkb2JqZWN0LT5ub3JtYWxpemUoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbiB2My4wLiBQbGVhc2UgcmVseSBvbiB0aGUgQ0JPUlxOb3JtYWxpemFibGUgaW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxpemVkRGF0YShib29sICRpZ25vcmVUYWdzID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCRpZ25vcmVUYWdzKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISAkdGhpcy0+b2JqZWN0IGluc3RhbmNlb2YgQnl0ZVN0cmluZ09iamVjdCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoJGlnbm9yZVRhZ3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFV0aWxzOjpoZXhUb1N0cmluZygkdGhpcy0+b2JqZWN0LT5nZXRWYWx1ZSgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Tag/UriTag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1JcVGFnOwoKdXNlIENCT1JcQ0JPUk9iamVjdDsKdXNlIENCT1JcSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE5vcm1hbGl6YWJsZTsKdXNlIENCT1JcVGFnOwp1c2UgQ0JPUlxUZXh0U3RyaW5nT2JqZWN0Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKZmluYWwgY2xhc3MgVXJpVGFnIGV4dGVuZHMgVGFnIGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KQogICAgewogICAgICAgIGlmICghICRvYmplY3QgaW5zdGFuY2VvZiBUZXh0U3RyaW5nT2JqZWN0ICYmICEgJG9iamVjdCBpbnN0YW5jZW9mIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgdGFnIG9ubHkgYWNjZXB0cyBhIFRleHQgU3RyaW5nIG9iamVjdC4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGRhdGEsICRvYmplY3QpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnSWQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRBR19VUkk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTG9hZGVkRGF0YShpbnQgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgP3N0cmluZyAkZGF0YSwgQ0JPUk9iamVjdCAkb2JqZWN0KTogVGFnCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhLCAkb2JqZWN0KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShDQk9ST2JqZWN0ICRvYmplY3QpOiBUYWcKICAgIHsKICAgICAgICBbJGFpLCAkZGF0YV0gPSBzZWxmOjpkZXRlcm1pbmVDb21wb25lbnRzKHNlbGY6OlRBR19VUkkpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSwgJG9iamVjdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBUZXh0U3RyaW5nT2JqZWN0fEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICAkb2JqZWN0ID0gJHRoaXMtPm9iamVjdDsKCiAgICAgICAgcmV0dXJuICRvYmplY3QtPm5vcm1hbGl6ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0LT5nZXROb3JtYWxpemVkRGF0YSgkaWdub3JlVGFncyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TagObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgVGFnIGluc3RlYWQKICovCmFic3RyYWN0IGNsYXNzIFRhZ09iamVjdCBleHRlbmRzIFRhZwp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TextStringObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgpmaW5hbCBjbGFzcyBUZXh0U3RyaW5nT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVEVYVF9TVFJJTkc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGxlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICBbJGFkZGl0aW9uYWxJbmZvcm1hdGlvbiwgJGxlbmd0aF0gPSBMZW5ndGhDYWxjdWxhdG9yOjpnZXRMZW5ndGhPZlN0cmluZygkZGF0YSk7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc2VsZjo6TUFKT1JfVFlQRSwgJGFkZGl0aW9uYWxJbmZvcm1hdGlvbik7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gcGFyZW50OjpfX3RvU3RyaW5nKCk7CiAgICAgICAgaWYgKCR0aGlzLT5sZW5ndGggIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+bGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQgLiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIG1iX3N0cmxlbigkdGhpcy0+ZGF0YSwgJ3V0ZjgnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uIHYzLjAuIFBsZWFzZSByZWx5IG9uIHRoZSBDQk9SXE5vcm1hbGl6YWJsZSBpbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbGl6ZWREYXRhKGJvb2wgJGlnbm9yZVRhZ3MgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/TextStringWithChunkObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7CgovKioKICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIHYzLjAuIFBsZWFzZSB1c2UgSW5kZWZpbml0ZUxlbmd0aFRleHRTdHJpbmdPYmplY3QgaW5zdGVhZAogKi8KZmluYWwgY2xhc3MgVGV4dFN0cmluZ1dpdGhDaHVua09iamVjdCBleHRlbmRzIEluZGVmaW5pdGVMZW5ndGhUZXh0U3RyaW5nT2JqZWN0CnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/UnsignedIntegerObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgY29uc3QgU1RSX1BBRF9MRUZUOwoKZmluYWwgY2xhc3MgVW5zaWduZWRJbnRlZ2VyT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDQk9ST2JqZWN0IGltcGxlbWVudHMgTm9ybWFsaXphYmxlCnsKICAgIHByaXZhdGUgY29uc3QgTUFKT1JfVFlQRSA9IHNlbGY6Ok1BSk9SX1RZUEVfVU5TSUdORURfSU5URUdFUjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdChzZWxmOjpNQUpPUl9UWVBFLCAkYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZwogICAgewogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6Ol9fdG9TdHJpbmcoKTsKICAgICAgICBpZiAoJHRoaXMtPmRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+ZGF0YTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlT2JqZWN0Rm9yVmFsdWUoaW50ICRhZGRpdGlvbmFsSW5mb3JtYXRpb24sID9zdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhZGRpdGlvbmFsSW5mb3JtYXRpb24sICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShpbnQgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tU3RyaW5nKChzdHJpbmcpICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tSGV4KHN0cmluZyAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgJGludGVnZXIgPSBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsIDE2KTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUJpZ0ludGVnZXIoJGludGVnZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6b2YoJHZhbHVlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUJpZ0ludGVnZXIoJGludGVnZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYWpvclR5cGUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ok1BSk9SX1RZUEU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkdGhpcy0+ZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPmFkZGl0aW9uYWxJbmZvcm1hdGlvbjsKICAgICAgICB9CgogICAgICAgICRpbnRlZ2VyID0gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdGhpcy0+ZGF0YSksIDE2KTsKCiAgICAgICAgcmV0dXJuICRpbnRlZ2VyLT50b0Jhc2UoMTApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgb24gdjMuMC4gUGxlYXNlIHJlbHkgb24gdGhlIENCT1JcTm9ybWFsaXphYmxlIGludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGEoYm9vbCAkaWdub3JlVGFncyA9IGZhbHNlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRWYWx1ZSgpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUJpZ0ludGVnZXIoQmlnSW50ZWdlciAkaW50ZWdlcik6IHNlbGYKICAgIHsKICAgICAgICBpZiAoJGludGVnZXItPmlzTGVzc1RoYW4oQmlnSW50ZWdlcjo6emVybygpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpvZigyNCkpOgogICAgICAgICAgICAgICAgJGFpID0gJGludGVnZXItPnRvSW50KCk7CiAgICAgICAgICAgICAgICAkZGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpmcm9tQmFzZSgnRkYnLCAxNikpOgogICAgICAgICAgICAgICAgJGFpID0gMjQ7CiAgICAgICAgICAgICAgICAkZGF0YSA9IHNlbGY6OmhleDJiaW4oc3RyX3BhZCgkaW50ZWdlci0+dG9CYXNlKDE2KSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICRpbnRlZ2VyLT5pc0xlc3NUaGFuKEJpZ0ludGVnZXI6OmZyb21CYXNlKCdGRkZGJywgMTYpKToKICAgICAgICAgICAgICAgICRhaSA9IDI1OwogICAgICAgICAgICAgICAgJGRhdGEgPSBzZWxmOjpoZXgyYmluKHN0cl9wYWQoJGludGVnZXItPnRvQmFzZSgxNiksIDQsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAkaW50ZWdlci0+aXNMZXNzVGhhbihCaWdJbnRlZ2VyOjpmcm9tQmFzZSgnRkZGRkZGRkYnLCAxNikpOgogICAgICAgICAgICAgICAgJGFpID0gMjY7CiAgICAgICAgICAgICAgICAkZGF0YSA9IHNlbGY6OmhleDJiaW4oc3RyX3BhZCgkaW50ZWdlci0+dG9CYXNlKDE2KSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAnT3V0IG9mIHJhbmdlLiBQbGVhc2UgdXNlIFBvc2l0aXZlQmlnSW50ZWdlclRhZyB0YWcgd2l0aCBCeXRlU3RyaW5nT2JqZWN0IG9iamVjdCBpbnN0ZWFkLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGFpLCAkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVzdWx0ID0gaGV4MmJpbigkZGF0YSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/cbor-php/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENCT1I7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfc3RyaW5nOwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KYWJzdHJhY3QgY2xhc3MgVXRpbHMKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiaW5Ub0ludChzdHJpbmcgJHZhbHVlKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmJpblRvQmlnSW50ZWdlcigkdmFsdWUpLT50b0ludCgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmluVG9CaWdJbnRlZ2VyKHN0cmluZyAkdmFsdWUpOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmhleFRvQmlnSW50ZWdlcihiaW4yaGV4KCR2YWx1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGV4VG9JbnQoc3RyaW5nICR2YWx1ZSk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpoZXhUb0JpZ0ludGVnZXIoJHZhbHVlKS0+dG9JbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhleFRvQmlnSW50ZWdlcihzdHJpbmcgJHZhbHVlKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiBCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkdmFsdWUsIDE2KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhleFRvU3RyaW5nKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoYmluMmhleCgkdmFsdWUpLCAxNiktPnRvQmFzZSgxMCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRkYXRhKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKHN0cnRyKCRkYXRhLCAnLV8nLCAnKy8nKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRkZWNvZGVkID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEgcHJvdmlkZWQnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZGVjb2RlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZHxudWxsICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXNzZXJ0U3RyaW5nKCRkYXRhLCA/c3RyaW5nICRtZXNzYWdlID0gbnVsbCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISBpc19zdHJpbmcoJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJG1lc3NhZ2UgPz8gJycpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKVGhlIGNoYW5nZWxvZyBpcyBtYWludGFpbmVkIGZvciBhbGwgU3ltZm9ueSBjb250cmFjdHMgYXQgdGhlIGZvbGxvd2luZyBVUkw6Cmh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L2NvbnRyYWN0cy9ibG9iL21haW4vQ0hBTkdFTE9HLm1kCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQSBnZW5lcmljIGZ1bmN0aW9uIGFuZCBjb252ZW50aW9uIHRvIHRyaWdnZXIgZGVwcmVjYXRpb24gbm90aWNlcyIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMSIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAiZnVuY3Rpb24ucGhwIgogICAgICAgIF0KICAgIH0sCiAgICAibWluaW11bS1zdGFiaWxpdHkiOiAiZGV2IiwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1haW4iOiAiMi41LWRldiIKICAgICAgICB9LAogICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvY29udHJhY3RzIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9jb250cmFjdHMiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/function.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmICghZnVuY3Rpb25fZXhpc3RzKCd0cmlnZ2VyX2RlcHJlY2F0aW9uJykpIHsKICAgIC8qKgogICAgICogVHJpZ2dlcnMgYSBzaWxlbmNlZCBkZXByZWNhdGlvbiBub3RpY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFja2FnZSBUaGUgbmFtZSBvZiB0aGUgQ29tcG9zZXIgcGFja2FnZSB0aGF0IGlzIHRyaWdnZXJpbmcgdGhlIGRlcHJlY2F0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZGVwcmVjYXRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIG1lc3NhZ2Ugb2YgdGhlIGRlcHJlY2F0aW9uCiAgICAgKiBAcGFyYW0gbWl4ZWQgIC4uLiRhcmdzIFZhbHVlcyB0byBpbnNlcnQgaW4gdGhlIG1lc3NhZ2UgdXNpbmcgcHJpbnRmKCkgZm9ybWF0dGluZwogICAgICoKICAgICAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAgICAgKi8KICAgIGZ1bmN0aW9uIHRyaWdnZXJfZGVwcmVjYXRpb24oc3RyaW5nICRwYWNrYWdlLCBzdHJpbmcgJHZlcnNpb24sIHN0cmluZyAkbWVzc2FnZSwgLi4uJGFyZ3MpOiB2b2lkCiAgICB7CiAgICAgICAgQHRyaWdnZXJfZXJyb3IoKCRwYWNrYWdlIHx8ICR2ZXJzaW9uID8gIlNpbmNlICRwYWNrYWdlICR2ZXJzaW9uOiAiIDogJycpLigkYXJncyA/IHZzcHJpbnRmKCRtZXNzYWdlLCAkYXJncykgOiAkbWVzc2FnZSksIFxFX1VTRVJfREVQUkVDQVRFRCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIwLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/deprecation-contracts/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBEZXByZWNhdGlvbiBDb250cmFjdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgY29udmVudGlvbiB0byB0cmlnZ2VyIGRlcHJlY2F0aW9uIG5vdGljZXMuCgpUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzaW5nbGUgZ2xvYmFsIGZ1bmN0aW9uIG5hbWVkIGB0cmlnZ2VyX2RlcHJlY2F0aW9uKClgIHRoYXQgdHJpZ2dlcnMgc2lsZW5jZWQgZGVwcmVjYXRpb24gbm90aWNlcy4KCkJ5IHVzaW5nIGEgY3VzdG9tIFBIUCBlcnJvciBoYW5kbGVyIHN1Y2ggYXMgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgU3ltZm9ueSBFcnJvckhhbmRsZXIgY29tcG9uZW50LAp0aGUgdHJpZ2dlcmVkIGRlcHJlY2F0aW9ucyBjYW4gYmUgY2F1Z2h0IGFuZCBsb2dnZWQgZm9yIGxhdGVyIGRpc2NvdmVyeSwgYm90aCBvbiBkZXYgYW5kIHByb2QgZW52aXJvbm1lbnRzLgoKVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IDMgYXJndW1lbnRzOgogLSB0aGUgbmFtZSBvZiB0aGUgQ29tcG9zZXIgcGFja2FnZSB0aGF0IGlzIHRyaWdnZXJpbmcgdGhlIGRlcHJlY2F0aW9uCiAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZGVwcmVjYXRpb24KIC0gdGhlIG1lc3NhZ2Ugb2YgdGhlIGRlcHJlY2F0aW9uCiAtIG1vcmUgYXJndW1lbnRzIGNhbiBiZSBwcm92aWRlZDogdGhleSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBtZXNzYWdlIHVzaW5nIGBwcmludGYoKWAgZm9ybWF0dGluZwoKRXhhbXBsZToKYGBgcGhwCnRyaWdnZXJfZGVwcmVjYXRpb24oJ3N5bWZvbnkvYmxvY2tjaGFpbicsICc4LjknLCAnVXNpbmcgIiVzIiBpcyBkZXByZWNhdGVkLCB1c2UgIiVzIiBpbnN0ZWFkLicsICdiaXRjb2luJywgJ2ZhYmNvaW4nKTsKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBtZXNzYWdlOgpgU2luY2Ugc3ltZm9ueS9ibG9ja2NoYWluIDguOTogVXNpbmcgImJpdGNvaW4iIGlzIGRlcHJlY2F0ZWQsIHVzZSAiZmFiY29pbiIgaW5zdGVhZC5gCgpXaGlsZSBub3QgbmVjZXNzYXJpbHkgcmVjb21tZW5kZWQsIHRoZSBkZXByZWNhdGlvbiBub3RpY2VzIGNhbiBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgZGVjbGFyaW5nIGFuIGVtcHR5CmBmdW5jdGlvbiB0cmlnZ2VyX2RlcHJlY2F0aW9uKCkge31gIGluIHlvdXIgYXBwbGljYXRpb24uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMDAwKSB7CiAgICByZXR1cm4gcmVxdWlyZSBfX0RJUl9fLicvYm9vdHN0cmFwODAucGhwJzsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2FsbnVtJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2FsbnVtKCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9hbG51bSgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfYWxwaGEnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfYWxwaGEoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2FscGhhKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9jbnRybCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9jbnRybCgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfY250cmwoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2RpZ2l0JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2RpZ2l0KCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9kaWdpdCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfZ3JhcGgnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfZ3JhcGgoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2dyYXBoKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9sb3dlcicpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9sb3dlcigkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfbG93ZXIoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3ByaW50JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3ByaW50KCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9wcmludCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfcHVuY3QnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfcHVuY3QoJHRleHQpIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3B1bmN0KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9zcGFjZScpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9zcGFjZSgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfc3BhY2UoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3VwcGVyJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3VwcGVyKCR0ZXh0KSB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV91cHBlcigkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfeGRpZ2l0JykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3hkaWdpdCgkdGV4dCkgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfeGRpZ2l0KCR0ZXh0KTsgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/bootstrap80.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlIGFzIHA7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfYWxudW0nKSkgewogICAgZnVuY3Rpb24gY3R5cGVfYWxudW0obWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2FsbnVtKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9hbHBoYScpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9hbHBoYShtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfYWxwaGEoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2NudHJsJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2NudHJsKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9jbnRybCgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfZGlnaXQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfZGlnaXQobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX2RpZ2l0KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9ncmFwaCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9ncmFwaChtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfZ3JhcGgoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX2xvd2VyJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX2xvd2VyKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9sb3dlcigkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfcHJpbnQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfcHJpbnQobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3ByaW50KCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9wdW5jdCcpKSB7CiAgICBmdW5jdGlvbiBjdHlwZV9wdW5jdChtaXhlZCAkdGV4dCk6IGJvb2wgeyByZXR1cm4gcFxDdHlwZTo6Y3R5cGVfcHVuY3QoJHRleHQpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N0eXBlX3NwYWNlJykpIHsKICAgIGZ1bmN0aW9uIGN0eXBlX3NwYWNlKG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV9zcGFjZSgkdGV4dCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY3R5cGVfdXBwZXInKSkgewogICAgZnVuY3Rpb24gY3R5cGVfdXBwZXIobWl4ZWQgJHRleHQpOiBib29sIHsgcmV0dXJuIHBcQ3R5cGU6OmN0eXBlX3VwcGVyKCR0ZXh0KTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV94ZGlnaXQnKSkgewogICAgZnVuY3Rpb24gY3R5cGVfeGRpZ2l0KG1peGVkICR0ZXh0KTogYm9vbCB7IHJldHVybiBwXEN0eXBlOjpjdHlwZV94ZGlnaXQoJHRleHQpOyB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1jdHlwZSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciBjdHlwZSBmdW5jdGlvbnMiLAogICAgImtleXdvcmRzIjogWyJwb2x5ZmlsbCIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIiwgImN0eXBlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJHZXJ0IGRlIFBhZ3RlciIsCiAgICAgICAgICAgICJlbWFpbCI6ICJCYWNrRW5kVGVhQGdtYWlsLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgInByb3ZpZGUiOiB7CiAgICAgICAgImV4dC1jdHlwZSI6ICIqIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7ICJTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCI6ICIiIH0sCiAgICAgICAgImZpbGVzIjogWyAiYm9vdHN0cmFwLnBocCIgXQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtY3R5cGUiOiAiRm9yIGJlc3QgcGVyZm9ybWFuY2UiCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/Ctype.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXEN0eXBlOwoKLyoqCiAqIEN0eXBlIGltcGxlbWVudGF0aW9uIHRocm91Z2ggcmVnZXguCiAqCiAqIEBpbnRlcm5hbAogKgogKiBAYXV0aG9yIEdlcnQgZGUgUGFndGVyIDxCYWNrRW5kVGVhQGdtYWlsLmNvbT4KICovCmZpbmFsIGNsYXNzIEN0eXBlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIGVpdGhlciBhIGxldHRlciBvciBhIGRpZ2l0LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvY3R5cGUtYWxudW0KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV9hbG51bSgkdGV4dCkKICAgIHsKICAgICAgICAkdGV4dCA9IHNlbGY6OmNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCR0ZXh0LCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gXGlzX3N0cmluZygkdGV4dCkgJiYgJycgIT09ICR0ZXh0ICYmICFwcmVnX21hdGNoKCcvW15BLVphLXowLTldLycsICR0ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgVFJVRSBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gdGV4dCBpcyBhIGxldHRlciwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWFscGhhCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfYWxwaGEoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teQS1aYS16XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYSBjb250cm9sIGNoYXJhY3RlciBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWNudHJsCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfY250cmwoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teXHgwMC1ceDFmXHg3Zl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRleHQgaXMgYSBkZWNpbWFsIGRpZ2l0LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvY3R5cGUtZGlnaXQKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV9kaWdpdCgkdGV4dCkKICAgIHsKICAgICAgICAkdGV4dCA9IHNlbGY6OmNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCR0ZXh0LCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gXGlzX3N0cmluZygkdGV4dCkgJiYgJycgIT09ICR0ZXh0ICYmICFwcmVnX21hdGNoKCcvW14wLTldLycsICR0ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgVFJVRSBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gdGV4dCBpcyBwcmludGFibGUgYW5kIGFjdHVhbGx5IGNyZWF0ZXMgdmlzaWJsZSBvdXRwdXQgKG5vIHdoaXRlIHNwYWNlKSwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWdyYXBoCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfZ3JhcGgoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teIS1+XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYSBsb3dlcmNhc2UgbGV0dGVyLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLWxvd2VyCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfbG93ZXIoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teYS16XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgd2lsbCBhY3R1YWxseSBjcmVhdGUgb3V0cHV0IChpbmNsdWRpbmcgYmxhbmtzKS4gUmV0dXJucyBGQUxTRSBpZiB0ZXh0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGhhdmUgYW55IG91dHB1dCBvciBjb250cm9sIGZ1bmN0aW9uIGF0IGFsbC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS1wcmludAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3ByaW50KCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXiAtfl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIHByaW50YWJsZSwgYnV0IG5laXRoZXIgbGV0dGVyLCBkaWdpdCBvciBibGFuaywgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L2N0eXBlLXB1bmN0CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3R5cGVfcHVuY3QoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teIS1cL1w6LUBcWy1gXHstfl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGNyZWF0ZXMgc29tZSBzb3J0IG9mIHdoaXRlIHNwYWNlLCBGQUxTRSBvdGhlcndpc2UuIEJlc2lkZXMgdGhlIGJsYW5rIGNoYXJhY3RlciB0aGlzIGFsc28gaW5jbHVkZXMgdGFiLCB2ZXJ0aWNhbCB0YWIsIGxpbmUgZmVlZCwgY2FycmlhZ2UgcmV0dXJuIGFuZCBmb3JtIGZlZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS1zcGFjZQogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3NwYWNlKCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXlxzXS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFRSVUUgaWYgZXZlcnkgY2hhcmFjdGVyIGluIHRleHQgaXMgYW4gdXBwZXJjYXNlIGxldHRlci4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS11cHBlcgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN0eXBlX3VwcGVyKCR0ZXh0KQogICAgewogICAgICAgICR0ZXh0ID0gc2VsZjo6Y29udmVydF9pbnRfdG9fY2hhcl9mb3JfY3R5cGUoJHRleHQsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiBcaXNfc3RyaW5nKCR0ZXh0KSAmJiAnJyAhPT0gJHRleHQgJiYgIXByZWdfbWF0Y2goJy9bXkEtWl0vJywgJHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBUUlVFIGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiB0ZXh0IGlzIGEgaGV4YWRlY2ltYWwgJ2RpZ2l0JywgdGhhdCBpcyBhIGRlY2ltYWwgZGlnaXQgb3IgYSBjaGFyYWN0ZXIgZnJvbSBbQS1GYS1mXSAsIEZBTFNFIG90aGVyd2lzZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9jdHlwZS14ZGlnaXQKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdHlwZV94ZGlnaXQoJHRleHQpCiAgICB7CiAgICAgICAgJHRleHQgPSBzZWxmOjpjb252ZXJ0X2ludF90b19jaGFyX2Zvcl9jdHlwZSgkdGV4dCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgcmV0dXJuIFxpc19zdHJpbmcoJHRleHQpICYmICcnICE9PSAkdGV4dCAmJiAhcHJlZ19tYXRjaCgnL1teQS1GYS1mMC05XS8nLCAkdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBpbnRlZ2VycyB0byB0aGVpciBjaGFyIHZlcnNpb25zIGFjY29yZGluZyB0byBub3JtYWwgY3R5cGUgYmVoYXZpb3VyLCBpZiBuZWVkZWQuCiAgICAgKgogICAgICogSWYgYW4gaW50ZWdlciBiZXR3ZWVuIC0xMjggYW5kIDI1NSBpbmNsdXNpdmUgaXMgcHJvdmlkZWQsCiAgICAgKiBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgQVNDSUkgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFjdGVyCiAgICAgKiAobmVnYXRpdmUgdmFsdWVzIGhhdmUgMjU2IGFkZGVkIGluIG9yZGVyIHRvIGFsbG93IGNoYXJhY3RlcnMgaW4gdGhlIEV4dGVuZGVkIEFTQ0lJIHJhbmdlKS4KICAgICAqIEFueSBvdGhlciBpbnRlZ2VyIGlzIGludGVycHJldGVkIGFzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY2ltYWwgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAgJGludAogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRfaW50X3RvX2NoYXJfZm9yX2N0eXBlKCRpbnQsICRmdW5jdGlvbikKICAgIHsKICAgICAgICBpZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMTAwICYmICFcaXNfc3RyaW5nKCRpbnQpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCRmdW5jdGlvbi4nKCk6IEFyZ3VtZW50IG9mIHR5cGUgJy5nZXRfZGVidWdfdHlwZSgkaW50KS4nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgc3RyaW5nIGluIHRoZSBmdXR1cmUnLCBcRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFcaXNfaW50KCRpbnQpKSB7CiAgICAgICAgICAgIHJldHVybiAkaW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRpbnQgPCAtMTI4IHx8ICRpbnQgPiAyNTUpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRpbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGludCA8IDApIHsKICAgICAgICAgICAgJGludCArPSAyNTY7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGNocigkaW50KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE4LXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-ctype/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIEN0eXBlCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYGN0eXBlXypgIGZ1bmN0aW9ucyB0byB1c2VycyB3aG8gcnVuIHBocCB2ZXJzaW9ucyB3aXRob3V0IHRoZSBjdHlwZSBleHRlbnNpb24uCgpNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKW21haW4gUG9seWZpbGwgUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC9ibG9iL21haW4vUkVBRE1FLm1kKS4KCkxpY2Vuc2UKPT09PT09PQoKVGhpcyBsaWJyYXJ5IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbTUlUIGxpY2Vuc2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXFBocDgwIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMDAwKSB7CiAgICByZXR1cm47Cn0KCmlmICghZGVmaW5lZCgnRklMVEVSX1ZBTElEQVRFX0JPT0wnKSAmJiBkZWZpbmVkKCdGSUxURVJfVkFMSURBVEVfQk9PTEVBTicpKSB7CiAgICBkZWZpbmUoJ0ZJTFRFUl9WQUxJREFURV9CT09MJywgXEZJTFRFUl9WQUxJREFURV9CT09MRUFOKTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2ZkaXYnKSkgewogICAgZnVuY3Rpb24gZmRpdihmbG9hdCAkbnVtMSwgZmxvYXQgJG51bTIpOiBmbG9hdCB7IHJldHVybiBwXFBocDgwOjpmZGl2KCRudW0xLCAkbnVtMik7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJlZ19sYXN0X2Vycm9yX21zZycpKSB7CiAgICBmdW5jdGlvbiBwcmVnX2xhc3RfZXJyb3JfbXNnKCk6IHN0cmluZyB7IHJldHVybiBwXFBocDgwOjpwcmVnX2xhc3RfZXJyb3JfbXNnKCk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnc3RyX2NvbnRhaW5zJykpIHsKICAgIGZ1bmN0aW9uIHN0cl9jb250YWlucyg/c3RyaW5nICRoYXlzdGFjaywgP3N0cmluZyAkbmVlZGxlKTogYm9vbCB7IHJldHVybiBwXFBocDgwOjpzdHJfY29udGFpbnMoJGhheXN0YWNrID8/ICcnLCAkbmVlZGxlID8/ICcnKTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdzdHJfc3RhcnRzX3dpdGgnKSkgewogICAgZnVuY3Rpb24gc3RyX3N0YXJ0c193aXRoKD9zdHJpbmcgJGhheXN0YWNrLCA/c3RyaW5nICRuZWVkbGUpOiBib29sIHsgcmV0dXJuIHBcUGhwODA6OnN0cl9zdGFydHNfd2l0aCgkaGF5c3RhY2sgPz8gJycsICRuZWVkbGUgPz8gJycpOyB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3N0cl9lbmRzX3dpdGgnKSkgewogICAgZnVuY3Rpb24gc3RyX2VuZHNfd2l0aCg/c3RyaW5nICRoYXlzdGFjaywgP3N0cmluZyAkbmVlZGxlKTogYm9vbCB7IHJldHVybiBwXFBocDgwOjpzdHJfZW5kc193aXRoKCRoYXlzdGFjayA/PyAnJywgJG5lZWRsZSA/PyAnJyk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2RlYnVnX3R5cGUnKSkgewogICAgZnVuY3Rpb24gZ2V0X2RlYnVnX3R5cGUoJHZhbHVlKTogc3RyaW5nIHsgcmV0dXJuIHBcUGhwODA6OmdldF9kZWJ1Z190eXBlKCR2YWx1ZSk7IH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Jlc291cmNlX2lkJykpIHsKICAgIGZ1bmN0aW9uIGdldF9yZXNvdXJjZV9pZCgkcmVzb3VyY2UpOiBpbnQgeyByZXR1cm4gcFxQaHA4MDo6Z2V0X3Jlc291cmNlX2lkKCRyZXNvdXJjZSk7IH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MCIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMCsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJJb24gQmF6YW4iLAogICAgICAgICAgICAiZW1haWwiOiAiaW9uLmJhemFuQGdtYWlsLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhcyBHcmVrYXMiLAogICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsgIlN5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcIjogIiIgfSwKICAgICAgICAiZmlsZXMiOiBbICJib290c3RyYXAucGhwIiBdLAogICAgICAgICJjbGFzc21hcCI6IFsgIlJlc291cmNlcy9zdHVicyIgXQogICAgfSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgImV4dHJhIjogewogICAgICAgICJ0aGFua3MiOiB7CiAgICAgICAgICAgICJuYW1lIjogInN5bWZvbnkvcG9seWZpbGwiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsIgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIwLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Php80.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgwOwoKLyoqCiAqIEBhdXRob3IgSW9uIEJhemFuIDxpb24uYmF6YW5AZ21haWwuY29tPgogKiBAYXV0aG9yIE5pY28gT2VsZ2FydCA8bmljb3N3ZEBnbWFpbC5jb20+CiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgUGhwODAKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZGl2KGZsb2F0ICRkaXZpZGVuZCwgZmxvYXQgJGRpdmlzb3IpOiBmbG9hdAogICAgewogICAgICAgIHJldHVybiBAKCRkaXZpZGVuZCAvICRkaXZpc29yKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9kZWJ1Z190eXBlKCR2YWx1ZSk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIG51bGwgPT09ICR2YWx1ZTogcmV0dXJuICdudWxsJzsKICAgICAgICAgICAgY2FzZSBcaXNfYm9vbCgkdmFsdWUpOiByZXR1cm4gJ2Jvb2wnOwogICAgICAgICAgICBjYXNlIFxpc19zdHJpbmcoJHZhbHVlKTogcmV0dXJuICdzdHJpbmcnOwogICAgICAgICAgICBjYXNlIFxpc19hcnJheSgkdmFsdWUpOiByZXR1cm4gJ2FycmF5JzsKICAgICAgICAgICAgY2FzZSBcaXNfaW50KCR2YWx1ZSk6IHJldHVybiAnaW50JzsKICAgICAgICAgICAgY2FzZSBcaXNfZmxvYXQoJHZhbHVlKTogcmV0dXJuICdmbG9hdCc7CiAgICAgICAgICAgIGNhc2UgXGlzX29iamVjdCgkdmFsdWUpOiBicmVhazsKICAgICAgICAgICAgY2FzZSAkdmFsdWUgaW5zdGFuY2VvZiBcX19QSFBfSW5jb21wbGV0ZV9DbGFzczogcmV0dXJuICdfX1BIUF9JbmNvbXBsZXRlX0NsYXNzJzsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAkdHlwZSA9IEBnZXRfcmVzb3VyY2VfdHlwZSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1bmtub3duJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJ1Vua25vd24nID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2Nsb3NlZCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICJyZXNvdXJjZSAoJHR5cGUpIjsKICAgICAgICB9CgogICAgICAgICRjbGFzcyA9IFxnZXRfY2xhc3MoJHZhbHVlKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBzdHJwb3MoJGNsYXNzLCAnQCcpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2xhc3M7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKGdldF9wYXJlbnRfY2xhc3MoJGNsYXNzKSA/OiBrZXkoY2xhc3NfaW1wbGVtZW50cygkY2xhc3MpKSA/OiAnY2xhc3MnKS4nQGFub255bW91cyc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcmVzb3VyY2VfaWQoJHJlcyk6IGludAogICAgewogICAgICAgIGlmICghXGlzX3Jlc291cmNlKCRyZXMpICYmIG51bGwgPT09IEBnZXRfcmVzb3VyY2VfdHlwZSgkcmVzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFR5cGVFcnJvcihcc3ByaW50ZignQXJndW1lbnQgMSBwYXNzZWQgdG8gZ2V0X3Jlc291cmNlX2lkKCkgbXVzdCBiZSBvZiB0aGUgdHlwZSByZXNvdXJjZSwgJXMgZ2l2ZW4nLCBnZXRfZGVidWdfdHlwZSgkcmVzKSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChpbnQpICRyZXM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVnX2xhc3RfZXJyb3JfbXNnKCk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAocHJlZ19sYXN0X2Vycm9yKCkpIHsKICAgICAgICAgICAgY2FzZSBcUFJFR19JTlRFUk5BTF9FUlJPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnSW50ZXJuYWwgZXJyb3InOwogICAgICAgICAgICBjYXNlIFxQUkVHX0JBRF9VVEY4X0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdNYWxmb3JtZWQgVVRGLTggY2hhcmFjdGVycywgcG9zc2libHkgaW5jb3JyZWN0bHkgZW5jb2RlZCc7CiAgICAgICAgICAgIGNhc2UgXFBSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdUaGUgb2Zmc2V0IGRpZCBub3QgY29ycmVzcG9uZCB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdmFsaWQgVVRGLTggY29kZSBwb2ludCc7CiAgICAgICAgICAgIGNhc2UgXFBSRUdfQkFDS1RSQUNLX0xJTUlUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdCYWNrdHJhY2sgbGltaXQgZXhoYXVzdGVkJzsKICAgICAgICAgICAgY2FzZSBcUFJFR19SRUNVUlNJT05fTElNSVRfRVJST1I6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlY3Vyc2lvbiBsaW1pdCBleGhhdXN0ZWQnOwogICAgICAgICAgICBjYXNlIFxQUkVHX0pJVF9TVEFDS0xJTUlUX0VSUk9SOgogICAgICAgICAgICAgICAgcmV0dXJuICdKSVQgc3RhY2sgbGltaXQgZXhoYXVzdGVkJzsKICAgICAgICAgICAgY2FzZSBcUFJFR19OT19FUlJPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnTm8gZXJyb3InOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICdVbmtub3duIGVycm9yJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJfY29udGFpbnMoc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICcnID09PSAkbmVlZGxlIHx8IGZhbHNlICE9PSBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cl9zdGFydHNfd2l0aChzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCA9PT0gc3RybmNtcCgkaGF5c3RhY2ssICRuZWVkbGUsIFxzdHJsZW4oJG5lZWRsZSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyX2VuZHNfd2l0aChzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoJycgPT09ICRuZWVkbGUgfHwgJG5lZWRsZSA9PT0gJGhheXN0YWNrKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCcnID09PSAkaGF5c3RhY2spIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG5lZWRsZUxlbmd0aCA9IFxzdHJsZW4oJG5lZWRsZSk7CgogICAgICAgIHJldHVybiAkbmVlZGxlTGVuZ3RoIDw9IFxzdHJsZW4oJGhheXN0YWNrKSAmJiAwID09PSBzdWJzdHJfY29tcGFyZSgkaGF5c3RhY2ssICRuZWVkbGUsIC0kbmVlZGxlTGVuZ3RoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/PhpToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgwOwoKLyoqCiAqIEBhdXRob3IgRmVkb255dWsgQW50b24gPGluZm9AZW5zb3N0dWRpby5ydT4KICoKICogQGludGVybmFsCiAqLwpjbGFzcyBQaHBUb2tlbiBpbXBsZW1lbnRzIFxTdHJpbmdhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGV4dDsKCiAgICAvKioKICAgICAqIEB2YXIgLTF8cG9zaXRpdmUtaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbGluZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcG9zOwoKICAgIC8qKgogICAgICogQHBhcmFtIC0xfHBvc2l0aXZlLWludCAkbGluZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRpZCwgc3RyaW5nICR0ZXh0LCBpbnQgJGxpbmUgPSAtMSwgaW50ICRwb3NpdGlvbiA9IC0xKQogICAgewogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+dGV4dCA9ICR0ZXh0OwogICAgICAgICR0aGlzLT5saW5lID0gJGxpbmU7CiAgICAgICAgJHRoaXMtPnBvcyA9ICRwb3NpdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW5OYW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAoJ1VOS05PV04nID09PSAkbmFtZSA9IHRva2VuX25hbWUoJHRoaXMtPmlkKSkgewogICAgICAgICAgICAkbmFtZSA9IFxzdHJsZW4oJHRoaXMtPnRleHQpID4gMSB8fCBcb3JkKCR0aGlzLT50ZXh0KSA8IDMyID8gbnVsbCA6ICR0aGlzLT50ZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludHxzdHJpbmd8YXJyYXkgJGtpbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzKCRraW5kKTogYm9vbAogICAgewogICAgICAgIGZvcmVhY2ggKChhcnJheSkgJGtpbmQgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChcaW5fYXJyYXkoJHZhbHVlLCBbJHRoaXMtPmlkLCAkdGhpcy0+dGV4dF0sIHRydWUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lnbm9yYWJsZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIFxpbl9hcnJheSgkdGhpcy0+aWQsIFtcVF9XSElURVNQQUNFLCBcVF9DT01NRU5ULCBcVF9ET0NfQ09NTUVOVCwgXFRfT1BFTl9UQUddLCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykgJHRoaXMtPnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGxpc3Q8c3RhdGljPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRva2VuaXplKHN0cmluZyAkY29kZSwgaW50ICRmbGFncyA9IDApOiBhcnJheQogICAgewogICAgICAgICRsaW5lID0gMTsKICAgICAgICAkcG9zaXRpb24gPSAwOwogICAgICAgICR0b2tlbnMgPSB0b2tlbl9nZXRfYWxsKCRjb2RlLCAkZmxhZ3MpOwogICAgICAgIGZvcmVhY2ggKCR0b2tlbnMgYXMgJGluZGV4ID0+ICR0b2tlbikgewogICAgICAgICAgICBpZiAoXGlzX3N0cmluZygkdG9rZW4pKSB7CiAgICAgICAgICAgICAgICAkaWQgPSBcb3JkKCR0b2tlbik7CiAgICAgICAgICAgICAgICAkdGV4dCA9ICR0b2tlbjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFskaWQsICR0ZXh0LCAkbGluZV0gPSAkdG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRva2Vuc1skaW5kZXhdID0gbmV3IHN0YXRpYygkaWQsICR0ZXh0LCAkbGluZSwgJHBvc2l0aW9uKTsKICAgICAgICAgICAgJHBvc2l0aW9uICs9IFxzdHJsZW4oJHRleHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0b2tlbnM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIFBocDgwCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgZmVhdHVyZXMgYWRkZWQgdG8gUEhQIDguMCBjb3JlOgoKLSBbYFN0cmluZ2FibGVgXShodHRwczovL3BocC5uZXQvc3RyaW5nYWJsZSkgaW50ZXJmYWNlCi0gW2BmZGl2YF0oaHR0cHM6Ly9waHAubmV0L2ZkaXYpCi0gW2BWYWx1ZUVycm9yYF0oaHR0cHM6Ly9waHAubmV0L3ZhbHVlZXJyb3IpIGNsYXNzCi0gW2BVbmhhbmRsZWRNYXRjaEVycm9yYF0oaHR0cHM6Ly9waHAubmV0L3VuaGFuZGxlZG1hdGNoZXJyb3IpIGNsYXNzCi0gYEZJTFRFUl9WQUxJREFURV9CT09MYCBjb25zdGFudAotIFtgZ2V0X2RlYnVnX3R5cGVgXShodHRwczovL3BocC5uZXQvZ2V0X2RlYnVnX3R5cGUpCi0gW2BQaHBUb2tlbmBdKGh0dHBzOi8vcGhwLm5ldC9waHB0b2tlbikgY2xhc3MKLSBbYHByZWdfbGFzdF9lcnJvcl9tc2dgXShodHRwczovL3BocC5uZXQvcHJlZ19sYXN0X2Vycm9yX21zZykKLSBbYHN0cl9jb250YWluc2BdKGh0dHBzOi8vcGhwLm5ldC9zdHJfY29udGFpbnMpCi0gW2BzdHJfc3RhcnRzX3dpdGhgXShodHRwczovL3BocC5uZXQvc3RyX3N0YXJ0c193aXRoKQotIFtgc3RyX2VuZHNfd2l0aGBdKGh0dHBzOi8vcGhwLm5ldC9zdHJfZW5kc193aXRoKQotIFtgZ2V0X3Jlc291cmNlX2lkYF0oaHR0cHM6Ly9waHAubmV0L2dldF9yZXNvdXJjZV9pZCkKCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQpbbWFpbiBQb2x5ZmlsbCBSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsL2Jsb2IvbWFpbi9SRUFETUUubWQpLgoKTGljZW5zZQo9PT09PT09CgpUaGlzIGxpYnJhcnkgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtNSVQgbGljZW5zZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX0NMQVNTKV0KZmluYWwgY2xhc3MgQXR0cmlidXRlCnsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQ0xBU1MgPSAxOwogICAgcHVibGljIGNvbnN0IFRBUkdFVF9GVU5DVElPTiA9IDI7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX01FVEhPRCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX1BST1BFUlRZID0gODsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQ0xBU1NfQ09OU1RBTlQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfUEFSQU1FVEVSID0gMzI7CiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX0FMTCA9IDYzOwogICAgcHVibGljIGNvbnN0IElTX1JFUEVBVEFCTEUgPSA2NDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHB1YmxpYyAkZmxhZ3M7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkZmxhZ3MgPSBzZWxmOjpUQVJHRVRfQUxMKQogICAgewogICAgICAgICR0aGlzLT5mbGFncyA9ICRmbGFnczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCAmJiBleHRlbnNpb25fbG9hZGVkKCd0b2tlbml6ZXInKSkgewogICAgY2xhc3MgUGhwVG9rZW4gZXh0ZW5kcyBTeW1mb255XFBvbHlmaWxsXFBocDgwXFBocFRva2VuCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgaW50ZXJmYWNlIFN0cmluZ2FibGUKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgY2xhc3MgVW5oYW5kbGVkTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCkgewogICAgY2xhc3MgVmFsdWVFcnJvciBleHRlbmRzIEVycm9yCiAgICB7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXFBocDgxIGFzIHA7CgppZiAoXFBIUF9WRVJTSU9OX0lEID49IDgwMTAwKSB7CiAgICByZXR1cm47Cn0KCmlmIChkZWZpbmVkKCdNWVNRTElfUkVGUkVTSF9TTEFWRScpICYmICFkZWZpbmVkKCdNWVNRTElfUkVGUkVTSF9SRVBMSUNBJykpIHsKICAgIGRlZmluZSgnTVlTUUxJX1JFRlJFU0hfUkVQTElDQScsIDY0KTsKfQoKaWYgKFxleHRlbnNpb25fbG9hZGVkKCdjdXJsJykgJiYgIWRlZmluZWQoJ0NVUkxPUFRfSVNTVUVSQ0VSVF9CTE9CJykgJiYgY3VybF92ZXJzaW9uKClbJ3ZlcnNpb25fbnVtYmVyJ10gPj0gMHgwNzQ3MDApIHsKICAgIGRlZmluZSgnQ1VSTE9QVF9JU1NVRVJDRVJUX0JMT0InLCA0MDI5NSk7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdhcnJheV9pc19saXN0JykpIHsKICAgIGZ1bmN0aW9uIGFycmF5X2lzX2xpc3QoYXJyYXkgJGFycmF5KTogYm9vbCB7IHJldHVybiBwXFBocDgxOjphcnJheV9pc19saXN0KCRhcnJheSk7IH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2VudW1fZXhpc3RzJykpIHsKICAgIGZ1bmN0aW9uIGVudW1fZXhpc3RzKHN0cmluZyAkZW51bSwgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYm9vbCB7IHJldHVybiAkYXV0b2xvYWQgJiYgY2xhc3NfZXhpc3RzKCRlbnVtKSAmJiBmYWxzZTsgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA4MSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDguMSsgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogeyAiU3ltZm9ueVxcUG9seWZpbGxcXFBocDgxXFwiOiAiIiB9LAogICAgICAgICJmaWxlcyI6IFsgImJvb3RzdHJhcC5waHAiIF0sCiAgICAgICAgImNsYXNzbWFwIjogWyAiUmVzb3VyY2VzL3N0dWJzIiBdCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgInRoYW5rcyI6IHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDIxLXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Php81.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDgxOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgUGhwODEKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcnJheV9pc19saXN0KGFycmF5ICRhcnJheSk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoW10gPT09ICRhcnJheSB8fCAkYXJyYXkgPT09IGFycmF5X3ZhbHVlcygkYXJyYXkpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgJG5leHRLZXkgPSAtMTsKCiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICgkayAhPT0gKyskbmV4dEtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U3ltZm9ueSBQb2x5ZmlsbCAvIFBocDgxCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgZmVhdHVyZXMgYWRkZWQgdG8gUEhQIDguMSBjb3JlOgoKLSBbYGFycmF5X2lzX2xpc3RgXShodHRwczovL3BocC5uZXQvYXJyYXlfaXNfbGlzdCkKLSBbYGVudW1fZXhpc3RzYF0oaHR0cHM6Ly9waHAubmV0L2VudW0tZXhpc3RzKQotIFtgTVlTUUxJX1JFRlJFU0hfUkVQTElDQWBdKGh0dHBzOi8vcGhwLm5ldC9teXNxbGkuY29uc3RhbnRzI2NvbnN0YW50bXlzcWxpLXJlZnJlc2gtcmVwbGljYSkgY29uc3RhbnQKLSBbYFJldHVyblR5cGVXaWxsQ2hhbmdlYF0oaHR0cHM6Ly93aWtpLnBocC5uZXQvcmZjL2ludGVybmFsX21ldGhvZF9yZXR1cm5fdHlwZXMpCi0gW2BDVVJMU3RyaW5nRmlsZWBdKGh0dHBzOi8vcGhwLm5ldC9DVVJMU3RyaW5nRmlsZSkgKGJ1dCBvbmx5IGlmIFBIUCA+PSA3LjQgaXMgdXNlZCkKCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQpbbWFpbiBQb2x5ZmlsbCBSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsL2Jsb2IvbWFpbi9SRUFETUUubWQpLgoKTGljZW5zZQo9PT09PT09CgpUaGlzIGxpYnJhcnkgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtNSVQgbGljZW5zZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDAgJiYgZXh0ZW5zaW9uX2xvYWRlZCgnY3VybCcpKSB7CiAgICAvKioKICAgICAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRhdGEKICAgICAqLwogICAgY2xhc3MgQ1VSTFN0cmluZ0ZpbGUgZXh0ZW5kcyBDVVJMRmlsZQogICAgewogICAgICAgIHByaXZhdGUgJGRhdGE7CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGRhdGEsIHN0cmluZyAkcG9zdG5hbWUsIHN0cmluZyAkbWltZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgnZGF0YTovL2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJy5iYXNlNjRfZW5jb2RlKCRkYXRhKSwgJG1pbWUsICRwb3N0bmFtZSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoc3RyaW5nICRuYW1lLCAkdmFsdWUpOiB2b2lkCiAgICAgICAgewogICAgICAgICAgICBpZiAoJ2RhdGEnICE9PSAkbmFtZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPiRuYW1lID0gJHZhbHVlOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkdmFsdWUpID8gIW1ldGhvZF9leGlzdHMoJHZhbHVlLCAnX190b1N0cmluZycpIDogIWlzX3NjYWxhcigkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXNzaWduICcuZ2V0dHlwZSgkdmFsdWUpLicgdG8gcHJvcGVydHkgQ1VSTFN0cmluZ0ZpbGU6OiRkYXRhIG9mIHR5cGUgc3RyaW5nJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5uYW1lID0gJ2RhdGE6Ly9hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCcuYmFzZTY0X2VuY29kZSgkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoc3RyaW5nICRuYW1lKTogYm9vbAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT4kbmFtZSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gJl9fZ2V0KHN0cmluZyAkbmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+JG5hbWU7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDEwMCkgewogICAgI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EKV0KICAgIGZpbmFsIGNsYXNzIFJldHVyblR5cGVXaWxsQ2hhbmdlCiAgICB7CiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgICAgICB7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q0hBTkdFTE9HCj09PT09PT09PQoKNS4yLjAKLS0tLS0KCiAqIGFkZGVkIGBQcm9jZXNzOjpzZXRPcHRpb25zKClgIHRvIHNldCBgUHJvY2Vzc2Agc3BlY2lmaWMgb3B0aW9ucwogKiBhZGRlZCBvcHRpb24gYGNyZWF0ZV9uZXdfY29uc29sZWAgdG8gYWxsb3cgYSBzdWJwcm9jZXNzIHRvIGNvbnRpbnVlCiAgIHRvIHJ1biBhZnRlciB0aGUgbWFpbiBzY3JpcHQgZXhpdGVkLCBib3RoIG9uIExpbnV4IGFuZCBvbiBXaW5kb3dzCgo1LjEuMAotLS0tLQoKICogYWRkZWQgYFByb2Nlc3M6OmdldFN0YXJ0VGltZSgpYCB0byByZXRyaWV2ZSB0aGUgc3RhcnQgdGltZSBvZiB0aGUgcHJvY2VzcyBhcyBmbG9hdAoKNS4wLjAKLS0tLS0KCiAqIHJlbW92ZWQgYFByb2Nlc3M6OmluaGVyaXRFbnZpcm9ubWVudFZhcmlhYmxlcygpYAogKiByZW1vdmVkIGBQaHBQcm9jZXNzOjpzZXRQaHBCaW5hcnkoKWAKICogYFByb2Nlc3NgIG11c3QgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBjb21tYW5kIGFycmF5LCB1c2UgYFByb2Nlc3M6OmZyb21TaGVsbENvbW1hbmRsaW5lKClgIHdoZW4gdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHBhcnNlZCBieSB0aGUgc2hlbGwKICogcmVtb3ZlZCBgUHJvY2Vzczo6c2V0Q29tbWFuZExpbmUoKWAKCjQuNC4wCi0tLS0tCgogKiBkZXByZWNhdGVkIGBQcm9jZXNzOjppbmhlcml0RW52aXJvbm1lbnRWYXJpYWJsZXMoKWA6IGVudiB2YXJpYWJsZXMgYXJlIGFsd2F5cyBpbmhlcml0ZWQuCiAqIGFkZGVkIGBQcm9jZXNzOjpnZXRMYXN0T3V0cHV0VGltZSgpYCBtZXRob2QKCjQuMi4wCi0tLS0tCgogKiBhZGRlZCB0aGUgYFByb2Nlc3M6OmZyb21TaGVsbENvbW1hbmRsaW5lKClgIHRvIHJ1biBjb21tYW5kcyBpbiBhIHNoZWxsIHdyYXBwZXIKICogZGVwcmVjYXRlZCBwYXNzaW5nIGEgY29tbWFuZCBhcyBzdHJpbmcgd2hlbiBjcmVhdGluZyBhIGBQcm9jZXNzYCBpbnN0YW5jZQogKiBkZXByZWNhdGVkIHRoZSBgUHJvY2Vzczo6c2V0Q29tbWFuZGxpbmUoKWAgYW5kIHRoZSBgUGhwUHJvY2Vzczo6c2V0UGhwQmluYXJ5KClgIG1ldGhvZHMKICogYWRkZWQgdGhlIGBQcm9jZXNzOjp3YWl0VW50aWwoKWAgbWV0aG9kIHRvIHdhaXQgZm9yIHRoZSBwcm9jZXNzIG9ubHkgZm9yIGEKICAgc3BlY2lmaWMgb3V0cHV0LCB0aGVuIGNvbnRpbnVlIHRoZSBub3JtYWwgZXhlY3V0aW9uIG9mIHlvdXIgYXBwbGljYXRpb24KCjQuMS4wCi0tLS0tCgogKiBhZGRlZCB0aGUgYFByb2Nlc3M6OmlzVHR5U3VwcG9ydGVkKClgIG1ldGhvZCB0aGF0IGFsbG93cyB0byBjaGVjayBmb3IgVFRZIHN1cHBvcnQKICogbWFkZSBgUGhwRXhlY3V0YWJsZUZpbmRlcmAgbG9vayBmb3IgdGhlIGBQSFBfQklOQVJZYCBlbnYgdmFyIHdoZW4gc2VhcmNoaW5nIHRoZSBwaHAgYmluYXJ5CiAqIGFkZGVkIHRoZSBgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uYCBjbGFzcyB0byBwcm9wZXJseSBjYXRjaCBzaWduYWxlZCBwcm9jZXNzIGVycm9ycwoKNC4wLjAKLS0tLS0KCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGFsd2F5cyBiZSBpbmhlcml0ZWQKICogYWRkZWQgYSBzZWNvbmQgYGFycmF5ICRlbnYgPSBbXWAgYXJndW1lbnQgdG8gdGhlIGBzdGFydCgpYCwgYHJ1bigpYCwKICAgYG11c3RSdW4oKWAsIGFuZCBgcmVzdGFydCgpYCBtZXRob2RzIG9mIHRoZSBgUHJvY2Vzc2AgY2xhc3MKICogYWRkZWQgYSBzZWNvbmQgYGFycmF5ICRlbnYgPSBbXWAgYXJndW1lbnQgdG8gdGhlIGBzdGFydCgpYCBtZXRob2Qgb2YgdGhlCiAgIGBQaHBQcm9jZXNzYCBjbGFzcwogKiB0aGUgYFByb2Nlc3NVdGlsczo6ZXNjYXBlQXJndW1lbnQoKWAgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQKICogdGhlIGBhcmVFbnZpcm9ubWVudFZhcmlhYmxlc0luaGVyaXRlZCgpYCwgYGdldE9wdGlvbnMoKWAsIGFuZCBgc2V0T3B0aW9ucygpYAogICBtZXRob2RzIG9mIHRoZSBgUHJvY2Vzc2AgY2xhc3MgaGF2ZSBiZWVuIHJlbW92ZWQKICogc3VwcG9ydCBmb3IgcGFzc2luZyBgcHJvY19vcGVuKClgIG9wdGlvbnMgaGFzIGJlZW4gcmVtb3ZlZAogKiByZW1vdmVkIHRoZSBgUHJvY2Vzc0J1aWxkZXJgIGNsYXNzLCB1c2UgdGhlIGBQcm9jZXNzYCBjbGFzcyBpbnN0ZWFkCiAqIHJlbW92ZWQgdGhlIGBnZXRFbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkoKWAgYW5kIGBzZXRFbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkoKWAgbWV0aG9kcyBvZiB0aGUgYFByb2Nlc3NgIGNsYXNzCiAqIHBhc3NpbmcgYSBub3QgZXhpc3Rpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzYCBjbGFzcyBpcyBub3QKICAgc3VwcG9ydGVkIGFueW1vcmUKCjMuNC4wCi0tLS0tCgogKiBkZXByZWNhdGVkIHRoZSBQcm9jZXNzQnVpbGRlciBjbGFzcwogKiBkZXByZWNhdGVkIGNhbGxpbmcgYFByb2Nlc3M6OnN0YXJ0KClgIHdpdGhvdXQgc2V0dGluZyBhIHZhbGlkIHdvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZWhhbmQgKHZpYSBgc2V0V29ya2luZ0RpcmVjdG9yeSgpYCBvciBjb25zdHJ1Y3RvcikKCjMuMy4wCi0tLS0tCgogKiBhZGRlZCBjb21tYW5kIGxpbmUgYXJyYXlzIGluIHRoZSBgUHJvY2Vzc2AgY2xhc3MKICogYWRkZWQgYCRlbnZgIGFyZ3VtZW50IHRvIGBQcm9jZXNzOjpzdGFydCgpYCwgYHJ1bigpYCwgYG11c3RSdW4oKWAgYW5kIGByZXN0YXJ0KClgIG1ldGhvZHMKICogZGVwcmVjYXRlZCB0aGUgYFByb2Nlc3NVdGlsczo6ZXNjYXBlQXJndW1lbnQoKWAgbWV0aG9kCiAqIGRlcHJlY2F0ZWQgbm90IGluaGVyaXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgYHByb2Nfb3BlbigpYCBvcHRpb25zCiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgZW5oYW5jZWQgV2luZG93cyBjb21wYXRpYmlsaXR5CiAqIGRlcHJlY2F0ZWQgY29uZmlndXJpbmcgZW5oYW5jZWQgc2lnY2hpbGQgY29tcGF0aWJpbGl0eQoKMi41LjAKLS0tLS0KCiAqIGFkZGVkIHN1cHBvcnQgZm9yIFBUWSBtb2RlCiAqIGFkZGVkIHRoZSBjb252ZW5pZW5jZSBtZXRob2QgIm11c3RSdW4iCiAqIGRlcHJlY2F0aW9uOiBQcm9jZXNzOjpzZXRTdGRpbigpIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgUHJvY2Vzczo6c2V0SW5wdXQoKQogKiBkZXByZWNhdGlvbjogUHJvY2Vzczo6Z2V0U3RkaW4oKSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIFByb2Nlc3M6OmdldElucHV0KCkKICogZGVwcmVjYXRpb246IFByb2Nlc3M6OnNldElucHV0KCkgYW5kIFByb2Nlc3NCdWlsZGVyOjpzZXRJbnB1dCgpIGRvIG5vdCBhY2NlcHQgbm9uLXNjYWxhciB0eXBlcwoKMi40LjAKLS0tLS0KCiAqIGFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhbiBpZGxlIHRpbWVvdXQKCjIuMy4wCi0tLS0tCgogKiBhZGRlZCBQcm9jZXNzVXRpbHM6OmVzY2FwZUFyZ3VtZW50KCkgdG8gZml4IHRoZSBidWcgaW4gZXNjYXBlc2hlbGxhcmcoKSBmdW5jdGlvbiBvbiBXaW5kb3dzCiAqIGFkZGVkIFByb2Nlc3M6OnNpZ25hbCgpCiAqIGFkZGVkIFByb2Nlc3M6OmdldFBpZCgpCiAqIGFkZGVkIHN1cHBvcnQgZm9yIGEgVFRZIG1vZGUKCjIuMi4wCi0tLS0tCgogKiBhZGRlZCBQcm9jZXNzQnVpbGRlcjo6c2V0QXJndW1lbnRzKCkgdG8gcmVzZXQgdGhlIGFyZ3VtZW50cyBvbiBhIGJ1aWxkZXIKICogYWRkZWQgYSB3YXkgdG8gcmV0cmlldmUgdGhlIHN0YW5kYXJkIGFuZCBlcnJvciBvdXRwdXQgaW5jcmVtZW50YWxseQogKiBhZGRlZCBQcm9jZXNzOnJlc3RhcnQoKQoKMi4xLjAKLS0tLS0KCiAqIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyBwcm9jZXNzZXMgKHN0YXJ0KCksIHdhaXQoKSwgaXNSdW5uaW5nKCksIHN0b3AoKSkKICogZW5oYW5jZWQgV2luZG93cyBjb21wYXRpYmlsaXR5CiAqIGFkZGVkIFByb2Nlc3M6OmdldEV4aXRDb2RlVGV4dCgpIHRoYXQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IKICAgdGhlIGV4aXQgY29kZSByZXR1cm5lZCBieSB0aGUgcHJvY2VzcwogKiBhZGRlZCBQcm9jZXNzQnVpbGRlcgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3ltZm9ueS9wcm9jZXNzIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImRlc2NyaXB0aW9uIjogIkV4ZWN1dGVzIGNvbW1hbmRzIGluIHN1Yi1wcm9jZXNzZXMiLAogICAgImtleXdvcmRzIjogW10sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGYWJpZW4gUG90ZW5jaWVyIiwKICAgICAgICAgICAgImVtYWlsIjogImZhYmllbkBzeW1mb255LmNvbSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIuNSIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwODAiOiAiXjEuMTYiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsgIlN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcIjogIiIgfSwKICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICBdCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBNYXJrZXIgSW50ZXJmYWNlIGZvciB0aGUgUHJvY2VzcyBDb21wb25lbnQuCiAqCiAqIEBhdXRob3IgSm9oYW5uZXMgTS4gU2NobWl0dCA8c2NobWl0dGpvaEBnbWFpbC5jb20+CiAqLwppbnRlcmZhY2UgRXhjZXB0aW9uSW50ZXJmYWNlIGV4dGVuZHMgXFRocm93YWJsZQp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/InvalidArgumentException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIHRoZSBQcm9jZXNzIENvbXBvbmVudC4KICoKICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICovCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/LogicException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBMb2dpY0V4Y2VwdGlvbiBmb3IgdGhlIFByb2Nlc3MgQ29tcG9uZW50LgogKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKi8KY2xhc3MgTG9naWNFeGNlcHRpb24gZXh0ZW5kcyBcTG9naWNFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessFailedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIGZvciBmYWlsZWQgcHJvY2Vzc2VzLgogKgogKiBAYXV0aG9yIEpvaGFubmVzIE0uIFNjaG1pdHQgPHNjaG1pdHRqb2hAZ21haWwuY29tPgogKi8KY2xhc3MgUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KewogICAgcHJpdmF0ZSAkcHJvY2VzczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHJvY2VzcyAkcHJvY2VzcykKICAgIHsKICAgICAgICBpZiAoJHByb2Nlc3MtPmlzU3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGEgZmFpbGVkIHByb2Nlc3MsIGJ1dCB0aGUgZ2l2ZW4gcHJvY2VzcyB3YXMgc3VjY2Vzc2Z1bC4nKTsKICAgICAgICB9CgogICAgICAgICRlcnJvciA9IHNwcmludGYoJ1RoZSBjb21tYW5kICIlcyIgZmFpbGVkLicuIlxuXG5FeGl0IENvZGU6ICVzKCVzKVxuXG5Xb3JraW5nIGRpcmVjdG9yeTogJXMiLAogICAgICAgICAgICAkcHJvY2Vzcy0+Z2V0Q29tbWFuZExpbmUoKSwKICAgICAgICAgICAgJHByb2Nlc3MtPmdldEV4aXRDb2RlKCksCiAgICAgICAgICAgICRwcm9jZXNzLT5nZXRFeGl0Q29kZVRleHQoKSwKICAgICAgICAgICAgJHByb2Nlc3MtPmdldFdvcmtpbmdEaXJlY3RvcnkoKQogICAgICAgICk7CgogICAgICAgIGlmICghJHByb2Nlc3MtPmlzT3V0cHV0RGlzYWJsZWQoKSkgewogICAgICAgICAgICAkZXJyb3IgLj0gc3ByaW50ZigiXG5cbk91dHB1dDpcbj09PT09PT09PT09PT09PT1cbiVzXG5cbkVycm9yIE91dHB1dDpcbj09PT09PT09PT09PT09PT1cbiVzIiwKICAgICAgICAgICAgICAgICRwcm9jZXNzLT5nZXRPdXRwdXQoKSwKICAgICAgICAgICAgICAgICRwcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRlcnJvcik7CgogICAgICAgICR0aGlzLT5wcm9jZXNzID0gJHByb2Nlc3M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessSignaledException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gYSBwcm9jZXNzIGhhcyBiZWVuIHNpZ25hbGVkLgogKgogKiBAYXV0aG9yIFN1bGxpdmFuIFNlbmVjaGFsIDxzb3VsbGl2YW5ldWhAZ21haWwuY29tPgogKi8KZmluYWwgY2xhc3MgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7CiAgICBwcml2YXRlICRwcm9jZXNzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChQcm9jZXNzICRwcm9jZXNzKQogICAgewogICAgICAgICR0aGlzLT5wcm9jZXNzID0gJHByb2Nlc3M7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc3ByaW50ZignVGhlIHByb2Nlc3MgaGFzIGJlZW4gc2lnbmFsZWQgd2l0aCBzaWduYWwgIiVzIi4nLCAkcHJvY2Vzcy0+Z2V0VGVybVNpZ25hbCgpKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKTogUHJvY2VzcwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmFsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UHJvY2VzcygpLT5nZXRUZXJtU2lnbmFsKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/ProcessTimedOutException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogRXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gYSBwcm9jZXNzIHRpbWVzIG91dC4KICoKICogQGF1dGhvciBKb2hhbm5lcyBNLiBTY2htaXR0IDxzY2htaXR0am9oQGdtYWlsLmNvbT4KICovCmNsYXNzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KewogICAgcHVibGljIGNvbnN0IFRZUEVfR0VORVJBTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9JRExFID0gMjsKCiAgICBwcml2YXRlICRwcm9jZXNzOwogICAgcHJpdmF0ZSAkdGltZW91dFR5cGU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFByb2Nlc3MgJHByb2Nlc3MsIGludCAkdGltZW91dFR5cGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzczsKICAgICAgICAkdGhpcy0+dGltZW91dFR5cGUgPSAkdGltZW91dFR5cGU7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3Qoc3ByaW50ZigKICAgICAgICAgICAgJ1RoZSBwcm9jZXNzICIlcyIgZXhjZWVkZWQgdGhlIHRpbWVvdXQgb2YgJXMgc2Vjb25kcy4nLAogICAgICAgICAgICAkcHJvY2Vzcy0+Z2V0Q29tbWFuZExpbmUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEV4Y2VlZGVkVGltZW91dCgpCiAgICAgICAgKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2Nlc3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2VzczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNHZW5lcmFsVGltZW91dCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OlRZUEVfR0VORVJBTCA9PT0gJHRoaXMtPnRpbWVvdXRUeXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lkbGVUaW1lb3V0KCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6VFlQRV9JRExFID09PSAkdGhpcy0+dGltZW91dFR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4Y2VlZGVkVGltZW91dCgpCiAgICB7CiAgICAgICAgc3dpdGNoICgkdGhpcy0+dGltZW91dFR5cGUpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0dFTkVSQUw6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3MtPmdldFRpbWVvdXQoKTsKCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VFlQRV9JRExFOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzLT5nZXRJZGxlVGltZW91dCgpOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oc3ByaW50ZignVW5rbm93biB0aW1lb3V0IHR5cGUgIiVkIi4nLCAkdGhpcy0+dGltZW91dFR5cGUpKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Exception/RuntimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCi8qKgogKiBSdW50aW1lRXhjZXB0aW9uIGZvciB0aGUgUHJvY2VzcyBDb21wb25lbnQuCiAqCiAqIEBhdXRob3IgSm9oYW5uZXMgTS4gU2NobWl0dCA8c2NobWl0dGpvaEBnbWFpbC5jb20+CiAqLwpjbGFzcyBSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/ExecutableFinder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKLyoqCiAqIEdlbmVyaWMgZXhlY3V0YWJsZSBmaW5kZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvaGFubmVzIE0uIFNjaG1pdHQgPHNjaG1pdHRqb2hAZ21haWwuY29tPgogKi8KY2xhc3MgRXhlY3V0YWJsZUZpbmRlcgp7CiAgICBwcml2YXRlIGNvbnN0IENNRF9CVUlMVElOUyA9IFsKICAgICAgICAnYXNzb2MnLCAnYnJlYWsnLCAnY2FsbCcsICdjZCcsICdjaGRpcicsICdjbHMnLCAnY29sb3InLCAnY29weScsICdkYXRlJywKICAgICAgICAnZGVsJywgJ2RpcicsICdlY2hvJywgJ2VuZGxvY2FsJywgJ2VyYXNlJywgJ2V4aXQnLCAnZm9yJywgJ2Z0eXBlJywgJ2dvdG8nLAogICAgICAgICdoZWxwJywgJ2lmJywgJ2xhYmVsJywgJ21kJywgJ21rZGlyJywgJ21rbGluaycsICdtb3ZlJywgJ3BhdGgnLCAncGF1c2UnLAogICAgICAgICdwb3BkJywgJ3Byb21wdCcsICdwdXNoZCcsICdyZCcsICdyZW0nLCAncmVuJywgJ3JlbmFtZScsICdybWRpcicsICdzZXQnLAogICAgICAgICdzZXRsb2NhbCcsICdzaGlmdCcsICdzdGFydCcsICd0aW1lJywgJ3RpdGxlJywgJ3R5cGUnLCAndmVyJywgJ3ZvbCcsCiAgICBdOwoKICAgIHByaXZhdGUgJHN1ZmZpeGVzID0gW107CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBkZWZhdWx0IHN1ZmZpeGVzIG9mIGV4ZWN1dGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdWZmaXhlcyhhcnJheSAkc3VmZml4ZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPnN1ZmZpeGVzID0gJHN1ZmZpeGVzOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBuZXcgcG9zc2libGUgc3VmZml4IHRvIGNoZWNrIGZvciBleGVjdXRhYmxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3VmZml4KHN0cmluZyAkc3VmZml4KQogICAgewogICAgICAgICR0aGlzLT5zdWZmaXhlc1tdID0gJHN1ZmZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIGFuIGV4ZWN1dGFibGUgYnkgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJG5hbWUgICAgICBUaGUgZXhlY3V0YWJsZSBuYW1lICh3aXRob3V0IHRoZSBleHRlbnNpb24pCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRlZmF1bHQgICBUaGUgZGVmYXVsdCB0byByZXR1cm4gaWYgbm8gZXhlY3V0YWJsZSBpcyBmb3VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICRleHRyYURpcnMgQWRkaXRpb25hbCBkaXJzIHRvIGNoZWNrIGludG8KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kKHN0cmluZyAkbmFtZSwgP3N0cmluZyAkZGVmYXVsdCA9IG51bGwsIGFycmF5ICRleHRyYURpcnMgPSBbXSkKICAgIHsKICAgICAgICAvLyB3aW5kb3dzIGJ1aWx0LWluIGNvbW1hbmRzIHRoYXQgYXJlIHByZXNlbnQgaW4gY21kLmV4ZSBzaG91bGQgbm90IGJlIHJlc29sdmVkIHVzaW5nIFBBVEggYXMgdGhleSBkbyBub3QgZXhpc3QgYXMgZXhlcwogICAgICAgIGlmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiAmJiBcaW5fYXJyYXkoc3RydG9sb3dlcigkbmFtZSksIHNlbGY6OkNNRF9CVUlMVElOUywgdHJ1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRuYW1lOwogICAgICAgIH0KCiAgICAgICAgJGRpcnMgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgZXhwbG9kZShcUEFUSF9TRVBBUkFUT1IsIGdldGVudignUEFUSCcpID86IGdldGVudignUGF0aCcpKSwKICAgICAgICAgICAgJGV4dHJhRGlycwogICAgICAgICk7CgogICAgICAgICRzdWZmaXhlcyA9IFtdOwogICAgICAgIGlmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUikgewogICAgICAgICAgICAkcGF0aEV4dCA9IGdldGVudignUEFUSEVYVCcpOwogICAgICAgICAgICAkc3VmZml4ZXMgPSAkdGhpcy0+c3VmZml4ZXM7CiAgICAgICAgICAgICRzdWZmaXhlcyA9IGFycmF5X21lcmdlKCRzdWZmaXhlcywgJHBhdGhFeHQgPyBleHBsb2RlKFxQQVRIX1NFUEFSQVRPUiwgJHBhdGhFeHQpIDogWycuZXhlJywgJy5iYXQnLCAnLmNtZCcsICcuY29tJ10pOwogICAgICAgIH0KICAgICAgICAkc3VmZml4ZXMgPSAnJyAhPT0gcGF0aGluZm8oJG5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikgPyBhcnJheV9tZXJnZShbJyddLCAkc3VmZml4ZXMpIDogYXJyYXlfbWVyZ2UoJHN1ZmZpeGVzLCBbJyddKTsKICAgICAgICBmb3JlYWNoICgkc3VmZml4ZXMgYXMgJHN1ZmZpeCkgewogICAgICAgICAgICBmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICBpZiAoJycgPT09ICRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAkZGlyID0gJy4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEBpc19maWxlKCRmaWxlID0gJGRpci5cRElSRUNUT1JZX1NFUEFSQVRPUi4kbmFtZS4kc3VmZml4KSAmJiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgfHwgQGlzX2V4ZWN1dGFibGUoJGZpbGUpKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIUBpc19kaXIoJGRpcikgJiYgYmFzZW5hbWUoJGRpcikgPT09ICRuYW1lLiRzdWZmaXggJiYgQGlzX2V4ZWN1dGFibGUoJGRpcikpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRpcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SIHx8ICFcZnVuY3Rpb25fZXhpc3RzKCdleGVjJykgfHwgXHN0cmxlbigkbmFtZSkgIT09IHN0cmNzcG4oJG5hbWUsICcvJy5cRElSRUNUT1JZX1NFUEFSQVRPUikpIHsKICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgJGV4ZWNSZXN1bHQgPSBleGVjKCdjb21tYW5kIC12IC0tICcuZXNjYXBlc2hlbGxhcmcoJG5hbWUpKTsKCiAgICAgICAgaWYgKCgkZXhlY3V0YWJsZVBhdGggPSBzdWJzdHIoJGV4ZWNSZXN1bHQsIDAsIHN0cnBvcygkZXhlY1Jlc3VsdCwgXFBIUF9FT0wpID86IG51bGwpKSAmJiBAaXNfZXhlY3V0YWJsZSgkZXhlY3V0YWJsZVBhdGgpKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhlY3V0YWJsZVBhdGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/InputStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CgovKioKICogUHJvdmlkZXMgYSB3YXkgdG8gY29udGludW91c2x5IHdyaXRlIHRvIHRoZSBpbnB1dCBvZiBhIFByb2Nlc3MgdW50aWwgdGhlIElucHV0U3RyZWFtIGlzIGNsb3NlZC4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICoKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlPGludCwgc3RyaW5nPgogKi8KY2xhc3MgSW5wdXRTdHJlYW0gaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqIEB2YXIgY2FsbGFibGV8bnVsbCAqLwogICAgcHJpdmF0ZSAkb25FbXB0eSA9IG51bGw7CiAgICBwcml2YXRlICRpbnB1dCA9IFtdOwogICAgcHJpdmF0ZSAkb3BlbiA9IHRydWU7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgd3JpdGUgYnVmZmVyIGJlY29tZXMgZW1wdHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkVtcHR5KD9jYWxsYWJsZSAkb25FbXB0eSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPm9uRW1wdHkgPSAkb25FbXB0eTsKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGVuZHMgYW4gaW5wdXQgdG8gdGhlIHdyaXRlIGJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGludHxmbG9hdHxib29sfFxUcmF2ZXJzYWJsZXxudWxsICRpbnB1dCBUaGUgaW5wdXQgdG8gYXBwZW5kIGFzIHNjYWxhciwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSByZXNvdXJjZSBvciBcVHJhdmVyc2FibGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRpbnB1dCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGlucHV0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCR0aGlzLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJyIlcyIgaXMgY2xvc2VkLicsIHN0YXRpYzo6Y2xhc3MpKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmlucHV0W10gPSBQcm9jZXNzVXRpbHM6OnZhbGlkYXRlSW5wdXQoX19NRVRIT0RfXywgJGlucHV0KTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyB0aGUgd3JpdGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgICR0aGlzLT5vcGVuID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZWxscyB3aGV0aGVyIHRoZSB3cml0ZSBidWZmZXIgaXMgY2xvc2VkIG9yIG5vdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ2xvc2VkKCkKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5vcGVuOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBcVHJhdmVyc2FibGU8aW50LCBzdHJpbmc+CiAgICAgKi8KICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICAkdGhpcy0+b3BlbiA9IHRydWU7CgogICAgICAgIHdoaWxlICgkdGhpcy0+b3BlbiB8fCAkdGhpcy0+aW5wdXQpIHsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+aW5wdXQpIHsKICAgICAgICAgICAgICAgIHlpZWxkICcnOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGN1cnJlbnQgPSBhcnJheV9zaGlmdCgkdGhpcy0+aW5wdXQpOwoKICAgICAgICAgICAgaWYgKCRjdXJyZW50IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICB5aWVsZCBmcm9tICRjdXJyZW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgeWllbGQgJGN1cnJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkdGhpcy0+aW5wdXQgJiYgJHRoaXMtPm9wZW4gJiYgbnVsbCAhPT0gJG9uRW1wdHkgPSAkdGhpcy0+b25FbXB0eSkgewogICAgICAgICAgICAgICAgJHRoaXMtPndyaXRlKCRvbkVtcHR5KCR0aGlzKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA0LXByZXNlbnQgRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/PhpExecutableFinder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKLyoqCiAqIEFuIGV4ZWN1dGFibGUgZmluZGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhlIFBIUCBleGVjdXRhYmxlLgogKgogKiBAYXV0aG9yIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICogQGF1dGhvciBKb2hhbm5lcyBNLiBTY2htaXR0IDxzY2htaXR0am9oQGdtYWlsLmNvbT4KICovCmNsYXNzIFBocEV4ZWN1dGFibGVGaW5kZXIKewogICAgcHJpdmF0ZSAkZXhlY3V0YWJsZUZpbmRlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5leGVjdXRhYmxlRmluZGVyID0gbmV3IEV4ZWN1dGFibGVGaW5kZXIoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIFRoZSBQSFAgZXhlY3V0YWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZChib29sICRpbmNsdWRlQXJncyA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKCRwaHAgPSBnZXRlbnYoJ1BIUF9CSU5BUlknKSkgewogICAgICAgICAgICBpZiAoIWlzX2V4ZWN1dGFibGUoJHBocCkgJiYgISRwaHAgPSAkdGhpcy0+ZXhlY3V0YWJsZUZpbmRlci0+ZmluZCgkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHBocDsKICAgICAgICB9CgogICAgICAgICRhcmdzID0gJHRoaXMtPmZpbmRBcmd1bWVudHMoKTsKICAgICAgICAkYXJncyA9ICRpbmNsdWRlQXJncyAmJiAkYXJncyA/ICcgJy5pbXBsb2RlKCcgJywgJGFyZ3MpIDogJyc7CgogICAgICAgIC8vIFBIUF9CSU5BUlkgcmV0dXJuIHRoZSBjdXJyZW50IHNhcGkgZXhlY3V0YWJsZQogICAgICAgIGlmIChcUEhQX0JJTkFSWSAmJiBcaW5fYXJyYXkoXFBIUF9TQVBJLCBbJ2NsaScsICdjbGktc2VydmVyJywgJ3BocGRiZyddLCB0cnVlKSkgewogICAgICAgICAgICByZXR1cm4gXFBIUF9CSU5BUlkuJGFyZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBocCA9IGdldGVudignUEhQX1BBVEgnKSkgewogICAgICAgICAgICBpZiAoIUBpc19leGVjdXRhYmxlKCRwaHApIHx8IEBpc19kaXIoJHBocCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRwaHA7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHBocCA9IGdldGVudignUEhQX1BFQVJfUEhQX0JJTicpKSB7CiAgICAgICAgICAgIGlmIChAaXNfZXhlY3V0YWJsZSgkcGhwKSAmJiAhQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRwaHA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChAaXNfZXhlY3V0YWJsZSgkcGhwID0gXFBIUF9CSU5ESVIuKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SID8gJ1xccGhwLmV4ZScgOiAnL3BocCcpKSAmJiAhQGlzX2RpcigkcGhwKSkgewogICAgICAgICAgICByZXR1cm4gJHBocDsKICAgICAgICB9CgogICAgICAgICRkaXJzID0gW1xQSFBfQklORElSXTsKICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgJGRpcnNbXSA9ICdDOlx4YW1wcFxwaHBcXCc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4ZWN1dGFibGVGaW5kZXItPmZpbmQoJ3BocCcsIGZhbHNlLCAkZGlycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgUEhQIGV4ZWN1dGFibGUgYXJndW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRBcmd1bWVudHMoKQogICAgewogICAgICAgICRhcmd1bWVudHMgPSBbXTsKICAgICAgICBpZiAoJ3BocGRiZycgPT09IFxQSFBfU0FQSSkgewogICAgICAgICAgICAkYXJndW1lbnRzW10gPSAnLXFycic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFyZ3VtZW50czsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/PhpProcess.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbjsKCi8qKgogKiBQaHBQcm9jZXNzIHJ1bnMgYSBQSFAgc2NyaXB0IGluIGFuIGluZGVwZW5kZW50IHByb2Nlc3MuCiAqCiAqICAgICAkcCA9IG5ldyBQaHBQcm9jZXNzKCc8P3BocCBlY2hvICJmb28iOyA/PicpOwogKiAgICAgJHAtPnJ1bigpOwogKiAgICAgcHJpbnQgJHAtPmdldE91dHB1dCgpLiJcbiI7CiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKi8KY2xhc3MgUGhwUHJvY2VzcyBleHRlbmRzIFByb2Nlc3MKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHNjcmlwdCAgVGhlIFBIUCBzY3JpcHQgdG8gcnVuIChhcyBhIHN0cmluZykKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY3dkICAgICBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgbnVsbCB0byB1c2UgdGhlIHdvcmtpbmcgZGlyIG9mIHRoZSBjdXJyZW50IFBIUCBwcm9jZXNzCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAgJGVudiAgICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBudWxsIHRvIHVzZSB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIGludCAgICAgICAgICR0aW1lb3V0IFRoZSB0aW1lb3V0IGluIHNlY29uZHMKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAkcGhwICAgICBQYXRoIHRvIHRoZSBQSFAgYmluYXJ5IHRvIHVzZSB3aXRoIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzY3JpcHQsID9zdHJpbmcgJGN3ZCA9IG51bGwsID9hcnJheSAkZW52ID0gbnVsbCwgaW50ICR0aW1lb3V0ID0gNjAsID9hcnJheSAkcGhwID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHBocCkgewogICAgICAgICAgICAkZXhlY3V0YWJsZUZpbmRlciA9IG5ldyBQaHBFeGVjdXRhYmxlRmluZGVyKCk7CiAgICAgICAgICAgICRwaHAgPSAkZXhlY3V0YWJsZUZpbmRlci0+ZmluZChmYWxzZSk7CiAgICAgICAgICAgICRwaHAgPSBmYWxzZSA9PT0gJHBocCA/IG51bGwgOiBhcnJheV9tZXJnZShbJHBocF0sICRleGVjdXRhYmxlRmluZGVyLT5maW5kQXJndW1lbnRzKCkpOwogICAgICAgIH0KICAgICAgICBpZiAoJ3BocGRiZycgPT09IFxQSFBfU0FQSSkgewogICAgICAgICAgICAkZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCAnZGJnJyk7CiAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAkc2NyaXB0KTsKICAgICAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oJ3VubGluaycsICRmaWxlKTsKICAgICAgICAgICAgJHBocFtdID0gJGZpbGU7CiAgICAgICAgICAgICRzY3JpcHQgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkcGhwLCAkY3dkLCAkZW52LCAkc2NyaXB0LCAkdGltZW91dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVNoZWxsQ29tbWFuZGxpbmUoc3RyaW5nICRjb21tYW5kLCA/c3RyaW5nICRjd2QgPSBudWxsLCA/YXJyYXkgJGVudiA9IG51bGwsICRpbnB1dCA9IG51bGwsID9mbG9hdCAkdGltZW91dCA9IDYwKQogICAgewogICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzKCkiIG1ldGhvZCBjYW5ub3QgYmUgY2FsbGVkIHdoZW4gdXNpbmcgIiVzIi4nLCBfX01FVEhPRF9fLCBzZWxmOjpjbGFzcykpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmdldENvbW1hbmRMaW5lKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBmaW5kIHRoZSBQSFAgZXhlY3V0YWJsZS4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6c3RhcnQoJGNhbGxiYWNrLCAkZW52KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/AbstractPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGlwZXMgaW1wbGVtZW50cyBQaXBlc0ludGVyZmFjZQp7CiAgICBwdWJsaWMgJHBpcGVzID0gW107CgogICAgcHJpdmF0ZSAkaW5wdXRCdWZmZXIgPSAnJzsKICAgIHByaXZhdGUgJGlucHV0OwogICAgcHJpdmF0ZSAkYmxvY2tlZCA9IHRydWU7CiAgICBwcml2YXRlICRsYXN0RXJyb3I7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGludHxmbG9hdHxib29sfFxJdGVyYXRvcnxudWxsICRpbnB1dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlucHV0KQogICAgewogICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJGlucHV0KSB8fCAkaW5wdXQgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gJGlucHV0OwogICAgICAgIH0gZWxzZWlmIChcaXNfc3RyaW5nKCRpbnB1dCkpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gJGlucHV0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5pbnB1dEJ1ZmZlciA9IChzdHJpbmcpICRpbnB1dDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnBpcGVzIGFzICRwaXBlKSB7CiAgICAgICAgICAgIGlmIChcaXNfcmVzb3VyY2UoJHBpcGUpKSB7CiAgICAgICAgICAgICAgICBmY2xvc2UoJHBpcGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0aGlzLT5waXBlcyA9IFtdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgc3lzdGVtIGNhbGwgaGFzIGJlZW4gaW50ZXJydXB0ZWQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBoYXNTeXN0ZW1DYWxsQmVlbkludGVycnVwdGVkKCk6IGJvb2wKICAgIHsKICAgICAgICAkbGFzdEVycm9yID0gJHRoaXMtPmxhc3RFcnJvcjsKICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gbnVsbDsKCiAgICAgICAgLy8gc3RyZWFtX3NlbGVjdCByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGBzZWxlY3RgIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGJ5IGFuIGluY29taW5nIHNpZ25hbAogICAgICAgIHJldHVybiBudWxsICE9PSAkbGFzdEVycm9yICYmIGZhbHNlICE9PSBzdHJpcG9zKCRsYXN0RXJyb3IsICdpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcpOwogICAgfQoKICAgIC8qKgogICAgICogVW5ibG9ja3Mgc3RyZWFtcy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHVuYmxvY2soKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmJsb2NrZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnBpcGVzIGFzICRwaXBlKSB7CiAgICAgICAgICAgIHN0cmVhbV9zZXRfYmxvY2tpbmcoJHBpcGUsIDApOwogICAgICAgIH0KICAgICAgICBpZiAoXGlzX3Jlc291cmNlKCR0aGlzLT5pbnB1dCkpIHsKICAgICAgICAgICAgc3RyZWFtX3NldF9ibG9ja2luZygkdGhpcy0+aW5wdXQsIDApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmJsb2NrZWQgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFdyaXRlcyBpbnB1dCB0byBzdGRpbi4KICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBXaGVuIGFuIGlucHV0IGl0ZXJhdG9yIHlpZWxkcyBhIG5vbiBzdXBwb3J0ZWQgdmFsdWUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHdyaXRlKCk6ID9hcnJheQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnBpcGVzWzBdKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGlucHV0ID0gJHRoaXMtPmlucHV0OwoKICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgIGlmICghJGlucHV0LT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAkaW5wdXQgPSBudWxsOwogICAgICAgICAgICB9IGVsc2VpZiAoXGlzX3Jlc291cmNlKCRpbnB1dCA9ICRpbnB1dC0+Y3VycmVudCgpKSkgewogICAgICAgICAgICAgICAgc3RyZWFtX3NldF9ibG9ja2luZygkaW5wdXQsIDApOwogICAgICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5pbnB1dEJ1ZmZlclswXSkpIHsKICAgICAgICAgICAgICAgIGlmICghXGlzX3N0cmluZygkaW5wdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFcaXNfc2NhbGFyKCRpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCciJXMiIHlpZWxkZWQgYSB2YWx1ZSBvZiB0eXBlICIlcyIsIGJ1dCBvbmx5IHNjYWxhcnMgYW5kIHN0cmVhbSByZXNvdXJjZXMgYXJlIHN1cHBvcnRlZC4nLCBnZXRfZGVidWdfdHlwZSgkdGhpcy0+aW5wdXQpLCBnZXRfZGVidWdfdHlwZSgkaW5wdXQpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpbnB1dCA9IChzdHJpbmcpICRpbnB1dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5pbnB1dEJ1ZmZlciA9ICRpbnB1dDsKICAgICAgICAgICAgICAgICR0aGlzLT5pbnB1dC0+bmV4dCgpOwogICAgICAgICAgICAgICAgJGlucHV0ID0gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRpbnB1dCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRyID0gJGUgPSBbXTsKICAgICAgICAkdyA9IFskdGhpcy0+cGlwZXNbMF1dOwoKICAgICAgICAvLyBsZXQncyBoYXZlIGEgbG9vayBpZiBzb21ldGhpbmcgY2hhbmdlZCBpbiBzdHJlYW1zCiAgICAgICAgaWYgKGZhbHNlID09PSBAc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCAwLCAwKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR3IGFzICRzdGRpbikgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmlucHV0QnVmZmVyWzBdKSkgewogICAgICAgICAgICAgICAgJHdyaXR0ZW4gPSBmd3JpdGUoJHN0ZGluLCAkdGhpcy0+aW5wdXRCdWZmZXIpOwogICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gc3Vic3RyKCR0aGlzLT5pbnB1dEJ1ZmZlciwgJHdyaXR0ZW4pOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5pbnB1dEJ1ZmZlclswXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkaW5wdXQpIHsKICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGRhdGEgPSBmcmVhZCgkaW5wdXQsIHNlbGY6OkNIVU5LX1NJWkUpOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJGRhdGFbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkd3JpdHRlbiA9IGZ3cml0ZSgkc3RkaW4sICRkYXRhKTsKICAgICAgICAgICAgICAgICAgICAkZGF0YSA9IHN1YnN0cigkZGF0YSwgJHdyaXR0ZW4pOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGF0YVswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0QnVmZmVyID0gJGRhdGE7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGZlb2YoJGlucHV0KSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aW5wdXQgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIG5vIGlucHV0IHRvIHJlYWQgb24gcmVzb3VyY2UsIGJ1ZmZlciBpcyBlbXB0eQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmlucHV0QnVmZmVyWzBdKSAmJiAhKCR0aGlzLT5pbnB1dCBpbnN0YW5jZW9mIFxJdGVyYXRvciA/ICR0aGlzLT5pbnB1dC0+dmFsaWQoKSA6ICR0aGlzLT5pbnB1dCkpIHsKICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gbnVsbDsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5waXBlc1swXSk7CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5waXBlc1swXSk7CiAgICAgICAgfSBlbHNlaWYgKCEkdykgewogICAgICAgICAgICByZXR1cm4gWyR0aGlzLT5waXBlc1swXV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlRXJyb3IoaW50ICR0eXBlLCBzdHJpbmcgJG1zZykKICAgIHsKICAgICAgICAkdGhpcy0+bGFzdEVycm9yID0gJG1zZzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/PipesInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKLyoqCiAqIFBpcGVzSW50ZXJmYWNlIG1hbmFnZXMgZGVzY3JpcHRvcnMgYW5kIHBpcGVzIGZvciB0aGUgdXNlIG9mIHByb2Nfb3Blbi4KICoKICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICoKICogQGludGVybmFsCiAqLwppbnRlcmZhY2UgUGlwZXNJbnRlcmZhY2UKewogICAgcHVibGljIGNvbnN0IENIVU5LX1NJWkUgPSAxNjM4NDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMgZm9yIHRoZSB1c2Ugb2YgcHJvY19vcGVuLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcnMoKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBpbmRleGVkIGJ5IHRoZWlyIHJlbGF0ZWQgc3RyZWFtIGluIGNhc2UgdGhlc2UgcGlwZXMgdXNlIHRlbXBvcmFyeSBmaWxlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheTsKCiAgICAvKioKICAgICAqIFJlYWRzIGRhdGEgaW4gZmlsZSBoYW5kbGVzIGFuZCBwaXBlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYmxvY2tpbmcgV2hldGhlciB0byB1c2UgYmxvY2tpbmcgY2FsbHMgb3Igbm90CiAgICAgKiBAcGFyYW0gYm9vbCAkY2xvc2UgICAgV2hldGhlciB0byBjbG9zZSBwaXBlcyBpZiB0aGV5J3ZlIHJlYWNoZWQgRU9GCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiByZWFkIGRhdGEgaW5kZXhlZCBieSB0aGVpciBmZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZEFuZFdyaXRlKGJvb2wgJGJsb2NraW5nLCBib29sICRjbG9zZSA9IGZhbHNlKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBvcGVuIGZpbGUgaGFuZGxlcyBvciBwaXBlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFyZU9wZW4oKTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgaWYgcGlwZXMgYXJlIGFibGUgdG8gcmVhZCBvdXRwdXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXZlUmVhZFN1cHBvcnQoKTogYm9vbDsKCiAgICAvKioKICAgICAqIENsb3NlcyBmaWxlIGhhbmRsZXMgYW5kIHBpcGVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/UnixPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCi8qKgogKiBVbml4UGlwZXMgaW1wbGVtZW50YXRpb24gdXNlcyB1bml4IHBpcGVzIGFzIGhhbmRsZXMuCiAqCiAqIEBhdXRob3IgUm9tYWluIE5ldXRyb24gPGltcHJlY0BnbWFpbC5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgVW5peFBpcGVzIGV4dGVuZHMgQWJzdHJhY3RQaXBlcwp7CiAgICBwcml2YXRlICR0dHlNb2RlOwogICAgcHJpdmF0ZSAkcHR5TW9kZTsKICAgIHByaXZhdGUgJGhhdmVSZWFkU3VwcG9ydDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2Jvb2wgJHR0eU1vZGUsIGJvb2wgJHB0eU1vZGUsICRpbnB1dCwgYm9vbCAkaGF2ZVJlYWRTdXBwb3J0KQogICAgewogICAgICAgICR0aGlzLT50dHlNb2RlID0gJHR0eU1vZGU7CiAgICAgICAgJHRoaXMtPnB0eU1vZGUgPSAkcHR5TW9kZTsKICAgICAgICAkdGhpcy0+aGF2ZVJlYWRTdXBwb3J0ID0gJGhhdmVSZWFkU3VwcG9ydDsKCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkaW5wdXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NsZWVwKCk6IGFycmF5CiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdDYW5ub3Qgc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHVuc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsb3NlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdG9ycygpOiBhcnJheQogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhdmVSZWFkU3VwcG9ydCkgewogICAgICAgICAgICAkbnVsbHN0cmVhbSA9IGZvcGVuKCcvZGV2L251bGwnLCAnYycpOwoKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgIFsncGlwZScsICdyJ10sCiAgICAgICAgICAgICAgICAkbnVsbHN0cmVhbSwKICAgICAgICAgICAgICAgICRudWxsc3RyZWFtLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT50dHlNb2RlKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICBbJ2ZpbGUnLCAnL2Rldi90dHknLCAnciddLAogICAgICAgICAgICAgICAgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXSwKICAgICAgICAgICAgICAgIFsnZmlsZScsICcvZGV2L3R0eScsICd3J10sCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnB0eU1vZGUgJiYgUHJvY2Vzczo6aXNQdHlTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgWydwdHknXSwKICAgICAgICAgICAgICAgIFsncHR5J10sCiAgICAgICAgICAgICAgICBbJ3B0eSddLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgWydwaXBlJywgJ3InXSwKICAgICAgICAgICAgWydwaXBlJywgJ3cnXSwgLy8gc3Rkb3V0CiAgICAgICAgICAgIFsncGlwZScsICd3J10sIC8vIHN0ZGVycgogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRBbmRXcml0ZShib29sICRibG9ja2luZywgYm9vbCAkY2xvc2UgPSBmYWxzZSk6IGFycmF5CiAgICB7CiAgICAgICAgJHRoaXMtPnVuYmxvY2soKTsKICAgICAgICAkdyA9ICR0aGlzLT53cml0ZSgpOwoKICAgICAgICAkcmVhZCA9ICRlID0gW107CiAgICAgICAgJHIgPSAkdGhpcy0+cGlwZXM7CiAgICAgICAgdW5zZXQoJHJbMF0pOwoKICAgICAgICAvLyBsZXQncyBoYXZlIGEgbG9vayBpZiBzb21ldGhpbmcgY2hhbmdlZCBpbiBzdHJlYW1zCiAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoWyR0aGlzLCAnaGFuZGxlRXJyb3InXSk7CiAgICAgICAgaWYgKCgkciB8fCAkdykgJiYgZmFsc2UgPT09IHN0cmVhbV9zZWxlY3QoJHIsICR3LCAkZSwgMCwgJGJsb2NraW5nID8gUHJvY2Vzczo6VElNRU9VVF9QUkVDSVNJT04gKiAxRTYgOiAwKSkgewogICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICAgICAgLy8gaWYgYSBzeXN0ZW0gY2FsbCBoYXMgYmVlbiBpbnRlcnJ1cHRlZCwgZm9yZ2V0IGFib3V0IGl0LCBsZXQncyB0cnkgYWdhaW4KICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhbiBlcnJvciBvY2N1cnJlZCwgbGV0J3MgcmVzZXQgcGlwZXMKICAgICAgICAgICAgaWYgKCEkdGhpcy0+aGFzU3lzdGVtQ2FsbEJlZW5JbnRlcnJ1cHRlZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cGlwZXMgPSBbXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRyZWFkOwogICAgICAgIH0KICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCiAgICAgICAgZm9yZWFjaCAoJHIgYXMgJHBpcGUpIHsKICAgICAgICAgICAgLy8gcHJpb3IgUEhQIDUuNCB0aGUgYXJyYXkgcGFzc2VkIHRvIHN0cmVhbV9zZWxlY3QgaXMgbW9kaWZpZWQgYW5kCiAgICAgICAgICAgIC8vIGxvc2Uga2V5IGFzc29jaWF0aW9uLCB3ZSBoYXZlIHRvIGZpbmQgYmFjayB0aGUga2V5CiAgICAgICAgICAgICRyZWFkWyR0eXBlID0gYXJyYXlfc2VhcmNoKCRwaXBlLCAkdGhpcy0+cGlwZXMsIHRydWUpXSA9ICcnOwoKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJGRhdGEgPSBAZnJlYWQoJHBpcGUsIHNlbGY6OkNIVU5LX1NJWkUpOwogICAgICAgICAgICAgICAgJHJlYWRbJHR5cGVdIC49ICRkYXRhOwogICAgICAgICAgICB9IHdoaWxlIChpc3NldCgkZGF0YVswXSkgJiYgKCRjbG9zZSB8fCBpc3NldCgkZGF0YVtzZWxmOjpDSFVOS19TSVpFIC0gMV0pKSk7CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRyZWFkWyR0eXBlXVswXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyZWFkWyR0eXBlXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY2xvc2UgJiYgZmVvZigkcGlwZSkpIHsKICAgICAgICAgICAgICAgIGZjbG9zZSgkcGlwZSk7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+cGlwZXNbJHR5cGVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZWFkOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGF2ZVJlYWRTdXBwb3J0KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhdmVSZWFkU3VwcG9ydDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFyZU9wZW4oKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAoYm9vbCkgJHRoaXMtPnBpcGVzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Pipes/WindowsPipes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CgovKioKICogV2luZG93c1BpcGVzIGltcGxlbWVudGF0aW9uIHVzZXMgdGVtcG9yYXJ5IGZpbGVzIGFzIGhhbmRsZXMuCiAqCiAqIEBzZWUgaHR0cHM6Ly9idWdzLnBocC5uZXQvNTE4MDAKICogQHNlZSBodHRwczovL2J1Z3MucGhwLm5ldC82NTY1MAogKgogKiBAYXV0aG9yIFJvbWFpbiBOZXV0cm9uIDxpbXByZWNAZ21haWwuY29tPgogKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIFdpbmRvd3NQaXBlcyBleHRlbmRzIEFic3RyYWN0UGlwZXMKewogICAgcHJpdmF0ZSAkZmlsZXMgPSBbXTsKICAgIHByaXZhdGUgJGZpbGVIYW5kbGVzID0gW107CiAgICBwcml2YXRlICRsb2NrSGFuZGxlcyA9IFtdOwogICAgcHJpdmF0ZSAkcmVhZEJ5dGVzID0gWwogICAgICAgIFByb2Nlc3M6OlNURE9VVCA9PiAwLAogICAgICAgIFByb2Nlc3M6OlNUREVSUiA9PiAwLAogICAgXTsKICAgIHByaXZhdGUgJGhhdmVSZWFkU3VwcG9ydDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlucHV0LCBib29sICRoYXZlUmVhZFN1cHBvcnQpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhdmVSZWFkU3VwcG9ydCA9ICRoYXZlUmVhZFN1cHBvcnQ7CgogICAgICAgIGlmICgkdGhpcy0+aGF2ZVJlYWRTdXBwb3J0KSB7CiAgICAgICAgICAgIC8vIEZpeCBmb3IgUEhQIGJ1ZyAjNTE4MDA6IHJlYWRpbmcgZnJvbSBTVERPVVQgcGlwZSBoYW5ncyBmb3JldmVyIG9uIFdpbmRvd3MgaWYgdGhlIG91dHB1dCBpcyB0b28gYmlnLgogICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGlzIHByb2JsZW0gaXMgdG8gdXNlIHRlbXBvcmFyeSBmaWxlcyBpbnN0ZWFkIG9mIHBpcGVzIG9uIFdpbmRvd3MgcGxhdGZvcm0uCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9idWdzLnBocC5uZXQvNTE4MDAKICAgICAgICAgICAgJHBpcGVzID0gWwogICAgICAgICAgICAgICAgUHJvY2Vzczo6U1RET1VUID0+IFByb2Nlc3M6Ok9VVCwKICAgICAgICAgICAgICAgIFByb2Nlc3M6OlNUREVSUiA9PiBQcm9jZXNzOjpFUlIsCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICR0bXBEaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICAgICAgICAgICRsYXN0RXJyb3IgPSAndW5rbm93biByZWFzb24nOwogICAgICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbiAoJHR5cGUsICRtc2cpIHVzZSAoJiRsYXN0RXJyb3IpIHsgJGxhc3RFcnJvciA9ICRtc2c7IH0pOwogICAgICAgICAgICBmb3IgKCRpID0gMDs7ICsrJGkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwaXBlcyBhcyAkcGlwZSA9PiAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgICRmaWxlID0gc3ByaW50ZignJXNcXHNmX3Byb2NfJTAyWC4lcycsICR0bXBEaXIsICRpLCAkbmFtZSk7CgogICAgICAgICAgICAgICAgICAgIGlmICghJGggPSBmb3BlbigkZmlsZS4nLmxvY2snLCAndycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZS4nLmxvY2snKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ0EgdGVtcG9yYXJ5IGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCB0byB3cml0ZSB0aGUgcHJvY2VzcyBvdXRwdXQ6ICcuJGxhc3RFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghZmxvY2soJGgsIFxMT0NLX0VYIHwgXExPQ0tfTkIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmbG9jaygkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdLCBcTE9DS19VTik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvY2tIYW5kbGVzWyRwaXBlXSA9ICRoOwoKICAgICAgICAgICAgICAgICAgICBpZiAoISgkaCA9IGZvcGVuKCRmaWxlLCAndycpKSB8fCAhZmNsb3NlKCRoKSB8fCAhJGggPSBmb3BlbigkZmlsZSwgJ3InKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmbG9jaygkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdLCBcTE9DS19VTik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+bG9ja0hhbmRsZXNbJHBpcGVdKTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmxvY2tIYW5kbGVzWyRwaXBlXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxlSGFuZGxlc1skcGlwZV0gPSAkaDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZXNbJHBpcGVdID0gJGZpbGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlucHV0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpOiBhcnJheQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHNlcmlhbGl6ZSAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ0Nhbm5vdCB1bnNlcmlhbGl6ZSAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcnMoKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5oYXZlUmVhZFN1cHBvcnQpIHsKICAgICAgICAgICAgJG51bGxzdHJlYW0gPSBmb3BlbignTlVMJywgJ2MnKTsKCiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICBbJ3BpcGUnLCAnciddLAogICAgICAgICAgICAgICAgJG51bGxzdHJlYW0sCiAgICAgICAgICAgICAgICAkbnVsbHN0cmVhbSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBwaXBlIG9uIFdpbmRvd3MgcGxhdGZvcm0gYXMgaXQgaGFuZ3MgKGh0dHBzOi8vYnVncy5waHAubmV0LzUxODAwKQogICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBmaWxlIGhhbmRsZXMgYXMgaXQgY2FuIHByb2R1Y2UgY29ycnVwdGVkIG91dHB1dCBodHRwczovL2J1Z3MucGhwLm5ldC82NTY1MAogICAgICAgIC8vIFNvIHdlIHJlZGlyZWN0IG91dHB1dCB3aXRoaW4gdGhlIGNvbW1hbmRsaW5lIGFuZCBwYXNzIHRoZSBudWwgZGV2aWNlIHRvIHRoZSBwcm9jZXNzCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgWydwaXBlJywgJ3InXSwKICAgICAgICAgICAgWydmaWxlJywgJ05VTCcsICd3J10sCiAgICAgICAgICAgIFsnZmlsZScsICdOVUwnLCAndyddLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkQW5kV3JpdGUoYm9vbCAkYmxvY2tpbmcsIGJvb2wgJGNsb3NlID0gZmFsc2UpOiBhcnJheQogICAgewogICAgICAgICR0aGlzLT51bmJsb2NrKCk7CiAgICAgICAgJHcgPSAkdGhpcy0+d3JpdGUoKTsKICAgICAgICAkcmVhZCA9ICRyID0gJGUgPSBbXTsKCiAgICAgICAgaWYgKCRibG9ja2luZykgewogICAgICAgICAgICBpZiAoJHcpIHsKICAgICAgICAgICAgICAgIEBzdHJlYW1fc2VsZWN0KCRyLCAkdywgJGUsIDAsIFByb2Nlc3M6OlRJTUVPVVRfUFJFQ0lTSU9OICogMUU2KTsKICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5maWxlSGFuZGxlcykgewogICAgICAgICAgICAgICAgdXNsZWVwKChpbnQpIChQcm9jZXNzOjpUSU1FT1VUX1BSRUNJU0lPTiAqIDFFNikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5maWxlSGFuZGxlcyBhcyAkdHlwZSA9PiAkZmlsZUhhbmRsZSkgewogICAgICAgICAgICAkZGF0YSA9IHN0cmVhbV9nZXRfY29udGVudHMoJGZpbGVIYW5kbGUsIC0xLCAkdGhpcy0+cmVhZEJ5dGVzWyR0eXBlXSk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGRhdGFbMF0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVhZEJ5dGVzWyR0eXBlXSArPSBcc3RybGVuKCRkYXRhKTsKICAgICAgICAgICAgICAgICRyZWFkWyR0eXBlXSA9ICRkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkY2xvc2UpIHsKICAgICAgICAgICAgICAgIGZ0cnVuY2F0ZSgkZmlsZUhhbmRsZSwgMCk7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGVIYW5kbGUpOwogICAgICAgICAgICAgICAgZmxvY2soJHRoaXMtPmxvY2tIYW5kbGVzWyR0eXBlXSwgXExPQ0tfVU4pOwogICAgICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0pOwogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmZpbGVIYW5kbGVzWyR0eXBlXSwgJHRoaXMtPmxvY2tIYW5kbGVzWyR0eXBlXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVhZDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhdmVSZWFkU3VwcG9ydCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXZlUmVhZFN1cHBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcmVPcGVuKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBpcGVzICYmICR0aGlzLT5maWxlSGFuZGxlczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkKICAgIHsKICAgICAgICBwYXJlbnQ6OmNsb3NlKCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmZpbGVIYW5kbGVzIGFzICR0eXBlID0+ICRoYW5kbGUpIHsKICAgICAgICAgICAgZnRydW5jYXRlKCRoYW5kbGUsIDApOwogICAgICAgICAgICBmY2xvc2UoJGhhbmRsZSk7CiAgICAgICAgICAgIGZsb2NrKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0sIFxMT0NLX1VOKTsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5sb2NrSGFuZGxlc1skdHlwZV0pOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZmlsZUhhbmRsZXMgPSAkdGhpcy0+bG9ja0hhbmRsZXMgPSBbXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/Process.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFByb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzXFBpcGVzSW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQaXBlc1xVbml4UGlwZXM7CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBpcGVzXFdpbmRvd3NQaXBlczsKCi8qKgogKiBQcm9jZXNzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBwcm9jXyogZnVuY3Rpb25zIHRvIGVhc2lseQogKiBzdGFydCBpbmRlcGVuZGVudCBQSFAgcHJvY2Vzc2VzLgogKgogKiBAYXV0aG9yIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICogQGF1dGhvciBSb21haW4gTmV1dHJvbiA8aW1wcmVjQGdtYWlsLmNvbT4KICoKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlPHN0cmluZywgc3RyaW5nPgogKi8KY2xhc3MgUHJvY2VzcyBpbXBsZW1lbnRzIFxJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICBwdWJsaWMgY29uc3QgRVJSID0gJ2Vycic7CiAgICBwdWJsaWMgY29uc3QgT1VUID0gJ291dCc7CgogICAgcHVibGljIGNvbnN0IFNUQVRVU19SRUFEWSA9ICdyZWFkeSc7CiAgICBwdWJsaWMgY29uc3QgU1RBVFVTX1NUQVJURUQgPSAnc3RhcnRlZCc7CiAgICBwdWJsaWMgY29uc3QgU1RBVFVTX1RFUk1JTkFURUQgPSAndGVybWluYXRlZCc7CgogICAgcHVibGljIGNvbnN0IFNURElOID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVERPVVQgPSAxOwogICAgcHVibGljIGNvbnN0IFNUREVSUiA9IDI7CgogICAgLy8gVGltZW91dCBQcmVjaXNpb24gaW4gc2Vjb25kcy4KICAgIHB1YmxpYyBjb25zdCBUSU1FT1VUX1BSRUNJU0lPTiA9IDAuMjsKCiAgICBwdWJsaWMgY29uc3QgSVRFUl9OT05fQkxPQ0tJTkcgPSAxOyAvLyBCeSBkZWZhdWx0LCBpdGVyYXRpbmcgb3ZlciBvdXRwdXRzIGlzIGEgYmxvY2tpbmcgY2FsbCwgdXNlIHRoaXMgZmxhZyB0byBtYWtlIGl0IG5vbi1ibG9ja2luZwogICAgcHVibGljIGNvbnN0IElURVJfS0VFUF9PVVRQVVQgPSAyOyAgLy8gQnkgZGVmYXVsdCwgb3V0cHV0cyBhcmUgY2xlYXJlZCB3aGlsZSBpdGVyYXRpbmcsIHVzZSB0aGlzIGZsYWcgdG8ga2VlcCB0aGVtIGluIG1lbW9yeQogICAgcHVibGljIGNvbnN0IElURVJfU0tJUF9PVVQgPSA0OyAgICAgLy8gVXNlIHRoaXMgZmxhZyB0byBza2lwIFNURE9VVCB3aGlsZSBpdGVyYXRpbmcKICAgIHB1YmxpYyBjb25zdCBJVEVSX1NLSVBfRVJSID0gODsgICAgIC8vIFVzZSB0aGlzIGZsYWcgdG8gc2tpcCBTVERFUlIgd2hpbGUgaXRlcmF0aW5nCgogICAgcHJpdmF0ZSAkY2FsbGJhY2s7CiAgICBwcml2YXRlICRoYXNDYWxsYmFjayA9IGZhbHNlOwogICAgcHJpdmF0ZSAkY29tbWFuZGxpbmU7CiAgICBwcml2YXRlICRjd2Q7CiAgICBwcml2YXRlICRlbnYgPSBbXTsKICAgIHByaXZhdGUgJGlucHV0OwogICAgcHJpdmF0ZSAkc3RhcnR0aW1lOwogICAgcHJpdmF0ZSAkbGFzdE91dHB1dFRpbWU7CiAgICBwcml2YXRlICR0aW1lb3V0OwogICAgcHJpdmF0ZSAkaWRsZVRpbWVvdXQ7CiAgICBwcml2YXRlICRleGl0Y29kZTsKICAgIHByaXZhdGUgJGZhbGxiYWNrU3RhdHVzID0gW107CiAgICBwcml2YXRlICRwcm9jZXNzSW5mb3JtYXRpb247CiAgICBwcml2YXRlICRvdXRwdXREaXNhYmxlZCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkc3Rkb3V0OwogICAgcHJpdmF0ZSAkc3RkZXJyOwogICAgcHJpdmF0ZSAkcHJvY2VzczsKICAgIHByaXZhdGUgJHN0YXR1cyA9IHNlbGY6OlNUQVRVU19SRUFEWTsKICAgIHByaXZhdGUgJGluY3JlbWVudGFsT3V0cHV0T2Zmc2V0ID0gMDsKICAgIHByaXZhdGUgJGluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSAwOwogICAgcHJpdmF0ZSAkdHR5ID0gZmFsc2U7CiAgICBwcml2YXRlICRwdHk7CiAgICBwcml2YXRlICRvcHRpb25zID0gWydzdXBwcmVzc19lcnJvcnMnID0+IHRydWUsICdieXBhc3Nfc2hlbGwnID0+IHRydWVdOwoKICAgIHByaXZhdGUgJHVzZUZpbGVIYW5kbGVzID0gZmFsc2U7CiAgICAvKiogQHZhciBQaXBlc0ludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkcHJvY2Vzc1BpcGVzOwoKICAgIHByaXZhdGUgJGxhdGVzdFNpZ25hbDsKICAgIHByaXZhdGUgJGNhY2hlZEV4aXRDb2RlOwoKICAgIHByaXZhdGUgc3RhdGljICRzaWdjaGlsZDsKCiAgICAvKioKICAgICAqIEV4aXQgY29kZXMgdHJhbnNsYXRpb24gdGFibGUuCiAgICAgKgogICAgICogVXNlci1kZWZpbmVkIGVycm9ycyBtdXN0IHVzZSBleGl0IGNvZGVzIGluIHRoZSA2NC0xMTMgcmFuZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGV4aXRDb2RlcyA9IFsKICAgICAgICAwID0+ICdPSycsCiAgICAgICAgMSA9PiAnR2VuZXJhbCBlcnJvcicsCiAgICAgICAgMiA9PiAnTWlzdXNlIG9mIHNoZWxsIGJ1aWx0aW5zJywKCiAgICAgICAgMTI2ID0+ICdJbnZva2VkIGNvbW1hbmQgY2Fubm90IGV4ZWN1dGUnLAogICAgICAgIDEyNyA9PiAnQ29tbWFuZCBub3QgZm91bmQnLAogICAgICAgIDEyOCA9PiAnSW52YWxpZCBleGl0IGFyZ3VtZW50JywKCiAgICAgICAgLy8gc2lnbmFscwogICAgICAgIDEyOSA9PiAnSGFuZ3VwJywKICAgICAgICAxMzAgPT4gJ0ludGVycnVwdCcsCiAgICAgICAgMTMxID0+ICdRdWl0IGFuZCBkdW1wIGNvcmUnLAogICAgICAgIDEzMiA9PiAnSWxsZWdhbCBpbnN0cnVjdGlvbicsCiAgICAgICAgMTMzID0+ICdUcmFjZS9icmVha3BvaW50IHRyYXAnLAogICAgICAgIDEzNCA9PiAnUHJvY2VzcyBhYm9ydGVkJywKICAgICAgICAxMzUgPT4gJ0J1cyBlcnJvcjogImFjY2VzcyB0byB1bmRlZmluZWQgcG9ydGlvbiBvZiBtZW1vcnkgb2JqZWN0IicsCiAgICAgICAgMTM2ID0+ICdGbG9hdGluZyBwb2ludCBleGNlcHRpb246ICJlcnJvbmVvdXMgYXJpdGhtZXRpYyBvcGVyYXRpb24iJywKICAgICAgICAxMzcgPT4gJ0tpbGwgKHRlcm1pbmF0ZSBpbW1lZGlhdGVseSknLAogICAgICAgIDEzOCA9PiAnVXNlci1kZWZpbmVkIDEnLAogICAgICAgIDEzOSA9PiAnU2VnbWVudGF0aW9uIHZpb2xhdGlvbicsCiAgICAgICAgMTQwID0+ICdVc2VyLWRlZmluZWQgMicsCiAgICAgICAgMTQxID0+ICdXcml0ZSB0byBwaXBlIHdpdGggbm8gb25lIHJlYWRpbmcnLAogICAgICAgIDE0MiA9PiAnU2lnbmFsIHJhaXNlZCBieSBhbGFybScsCiAgICAgICAgMTQzID0+ICdUZXJtaW5hdGlvbiAocmVxdWVzdCB0byB0ZXJtaW5hdGUpJywKICAgICAgICAvLyAxNDQgLSBub3QgZGVmaW5lZAogICAgICAgIDE0NSA9PiAnQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBzdG9wcGVkIChvciBjb250aW51ZWQqKScsCiAgICAgICAgMTQ2ID0+ICdDb250aW51ZSBpZiBzdG9wcGVkJywKICAgICAgICAxNDcgPT4gJ1N0b3AgZXhlY3V0aW5nIHRlbXBvcmFyaWx5JywKICAgICAgICAxNDggPT4gJ1Rlcm1pbmFsIHN0b3Agc2lnbmFsJywKICAgICAgICAxNDkgPT4gJ0JhY2tncm91bmQgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSB0dHkgKCJpbiIpJywKICAgICAgICAxNTAgPT4gJ0JhY2tncm91bmQgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIHR0eSAoIm91dCIpJywKICAgICAgICAxNTEgPT4gJ1VyZ2VudCBkYXRhIGF2YWlsYWJsZSBvbiBzb2NrZXQnLAogICAgICAgIDE1MiA9PiAnQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQnLAogICAgICAgIDE1MyA9PiAnRmlsZSBzaXplIGxpbWl0IGV4Y2VlZGVkJywKICAgICAgICAxNTQgPT4gJ1NpZ25hbCByYWlzZWQgYnkgdGltZXIgY291bnRpbmcgdmlydHVhbCB0aW1lOiAidmlydHVhbCB0aW1lciBleHBpcmVkIicsCiAgICAgICAgMTU1ID0+ICdQcm9maWxpbmcgdGltZXIgZXhwaXJlZCcsCiAgICAgICAgLy8gMTU2IC0gbm90IGRlZmluZWQKICAgICAgICAxNTcgPT4gJ1BvbGxhYmxlIGV2ZW50JywKICAgICAgICAvLyAxNTggLSBub3QgZGVmaW5lZAogICAgICAgIDE1OSA9PiAnQmFkIHN5c2NhbGwnLAogICAgXTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAkY29tbWFuZCBUaGUgY29tbWFuZCB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMgbGlzdGVkIGFzIHNlcGFyYXRlIGVudHJpZXMKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAkY3dkICAgICBUaGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgbnVsbCB0byB1c2UgdGhlIHdvcmtpbmcgZGlyIG9mIHRoZSBjdXJyZW50IFBIUCBwcm9jZXNzCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAgICAgJGVudiAgICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBudWxsIHRvIHVzZSB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgICRpbnB1dCAgIFRoZSBpbnB1dCBhcyBzdHJlYW0gcmVzb3VyY2UsIHNjYWxhciBvciBcVHJhdmVyc2FibGUsIG9yIG51bGwgZm9yIG5vIGlucHV0CiAgICAgKiBAcGFyYW0gaW50fGZsb2F0fG51bGwgJHRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gc2Vjb25kcyBvciBudWxsIHRvIGRpc2FibGUKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIFdoZW4gcHJvY19vcGVuIGlzIG5vdCBpbnN0YWxsZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRjb21tYW5kLCA/c3RyaW5nICRjd2QgPSBudWxsLCA/YXJyYXkgJGVudiA9IG51bGwsICRpbnB1dCA9IG51bGwsID9mbG9hdCAkdGltZW91dCA9IDYwKQogICAgewogICAgICAgIGlmICghXGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdUaGUgUHJvY2VzcyBjbGFzcyByZWxpZXMgb24gcHJvY19vcGVuLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9uIHlvdXIgUEhQIGluc3RhbGxhdGlvbi4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb21tYW5kbGluZSA9ICRjb21tYW5kOwogICAgICAgICR0aGlzLT5jd2QgPSAkY3dkOwoKICAgICAgICAvLyBvbiBXaW5kb3dzLCBpZiB0aGUgY3dkIGNoYW5nZWQgdmlhIGNoZGlyKCksIHByb2Nfb3BlbiBkZWZhdWx0cyB0byB0aGUgZGlyIHdoZXJlIFBIUCB3YXMgc3RhcnRlZAogICAgICAgIC8vIG9uIEdudS9MaW51eCwgUEhQIGJ1aWxkcyB3aXRoIC0tZW5hYmxlLW1haW50YWluZXItenRzIGFyZSBhbHNvIGFmZmVjdGVkCiAgICAgICAgLy8gQHNlZSA6IGh0dHBzOi8vYnVncy5waHAubmV0LzUxODAwCiAgICAgICAgLy8gQHNlZSA6IGh0dHBzOi8vYnVncy5waHAubmV0LzUwNTI0CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5jd2QgJiYgKFxkZWZpbmVkKCdaRU5EX1RIUkVBRF9TQUZFJykgfHwgJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpKSB7CiAgICAgICAgICAgICR0aGlzLT5jd2QgPSBnZXRjd2QoKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRlbnYpIHsKICAgICAgICAgICAgJHRoaXMtPnNldEVudigkZW52KTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zZXRJbnB1dCgkaW5wdXQpOwogICAgICAgICR0aGlzLT5zZXRUaW1lb3V0KCR0aW1lb3V0KTsKICAgICAgICAkdGhpcy0+dXNlRmlsZUhhbmRsZXMgPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICAkdGhpcy0+cHR5ID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgUHJvY2VzcyBpbnN0YW5jZSBhcyBhIGNvbW1hbmQtbGluZSB0byBiZSBydW4gaW4gYSBzaGVsbCB3cmFwcGVyLgogICAgICoKICAgICAqIENvbW1hbmQtbGluZXMgYXJlIHBhcnNlZCBieSB0aGUgc2hlbGwgb2YgeW91ciBPUyAoL2Jpbi9zaCBvbiBVbml4LWxpa2UsIGNtZC5leGUgb24gV2luZG93cy4pCiAgICAgKiBUaGlzIGFsbG93cyB1c2luZyBlLmcuIHBpcGVzIG9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4gSW4gdGhpcyBtb2RlLCBzaWduYWxzIGFyZSBzZW50IHRvIHRoZQogICAgICogc2hlbGwgd3JhcHBlciBhbmQgbm90IHRvIHlvdXIgY29tbWFuZHMuCiAgICAgKgogICAgICogSW4gb3JkZXIgdG8gaW5qZWN0IGR5bmFtaWMgdmFsdWVzIGludG8gY29tbWFuZC1saW5lcywgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHVzaW5nIHBsYWNlaG9sZGVycy4KICAgICAqIFRoaXMgd2lsbCBzYXZlIGVzY2FwaW5nIHZhbHVlcywgd2hpY2ggaXMgbm90IHBvcnRhYmxlIG5vciBzZWN1cmUgYW55d2F5OgogICAgICoKICAgICAqICAgJHByb2Nlc3MgPSBQcm9jZXNzOjpmcm9tU2hlbGxDb21tYW5kbGluZSgnbXlfY29tbWFuZCAiJHs6TVlfVkFSfSInKTsKICAgICAqICAgJHByb2Nlc3MtPnJ1bihudWxsLCBbJ01ZX1ZBUicgPT4gJHRoZVZhbHVlXSk7CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICRjb21tYW5kIFRoZSBjb21tYW5kIGxpbmUgdG8gcGFzcyB0byB0aGUgc2hlbGwgb2YgdGhlIE9TCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgJGN3ZCAgICAgVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9yIG51bGwgdG8gdXNlIHRoZSB3b3JraW5nIGRpciBvZiB0aGUgY3VycmVudCBQSFAgcHJvY2VzcwogICAgICogQHBhcmFtIGFycmF5fG51bGwgICAgICRlbnYgICAgIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgbnVsbCB0byB1c2UgdGhlIHNhbWUgZW52aXJvbm1lbnQgYXMgdGhlIGN1cnJlbnQgUEhQIHByb2Nlc3MKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAkaW5wdXQgICBUaGUgaW5wdXQgYXMgc3RyZWFtIHJlc291cmNlLCBzY2FsYXIgb3IgXFRyYXZlcnNhYmxlLCBvciBudWxsIGZvciBubyBpbnB1dAogICAgICogQHBhcmFtIGludHxmbG9hdHxudWxsICR0aW1lb3V0IFRoZSB0aW1lb3V0IGluIHNlY29uZHMgb3IgbnVsbCB0byBkaXNhYmxlCiAgICAgKgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIFdoZW4gcHJvY19vcGVuIGlzIG5vdCBpbnN0YWxsZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU2hlbGxDb21tYW5kbGluZShzdHJpbmcgJGNvbW1hbmQsID9zdHJpbmcgJGN3ZCA9IG51bGwsID9hcnJheSAkZW52ID0gbnVsbCwgJGlucHV0ID0gbnVsbCwgP2Zsb2F0ICR0aW1lb3V0ID0gNjApCiAgICB7CiAgICAgICAgJHByb2Nlc3MgPSBuZXcgc3RhdGljKFtdLCAkY3dkLCAkZW52LCAkaW5wdXQsICR0aW1lb3V0KTsKICAgICAgICAkcHJvY2Vzcy0+Y29tbWFuZGxpbmUgPSAkY29tbWFuZDsKCiAgICAgICAgcmV0dXJuICRwcm9jZXNzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdDYW5ub3Qgc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbignQ2Fubm90IHVuc2VyaWFsaXplICcuX19DTEFTU19fKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5vcHRpb25zWydjcmVhdGVfbmV3X2NvbnNvbGUnXSA/PyBmYWxzZSkgewogICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5jbG9zZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5zdG9wKDApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jbG9uZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlc2V0UHJvY2Vzc0RhdGEoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1bnMgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kCiAgICAgKiBzb21lIGJ5dGVzIGZyb20gdGhlIG91dHB1dCBpbiByZWFsLXRpbWUuIEl0IGFsbG93cyB0byBoYXZlIGZlZWRiYWNrCiAgICAgKiBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogVGhlIFNURE9VVCBhbmQgU1RERVJSIGFyZSBhbHNvIGF2YWlsYWJsZSBhZnRlciB0aGUgcHJvY2VzcyBpcyBmaW5pc2hlZAogICAgICogdmlhIHRoZSBnZXRPdXRwdXQoKSBhbmQgZ2V0RXJyb3JPdXRwdXQoKSBtZXRob2RzLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayBBIFBIUCBjYWxsYmFjayB0byBydW4gd2hlbmV2ZXIgdGhlcmUgaXMgc29tZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBhdmFpbGFibGUgb24gU1RET1VUIG9yIFNUREVSUgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBleGl0IHN0YXR1cyBjb2RlCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uICAgICAgICAgV2hlbiBwcm9jZXNzIGNhbid0IGJlIGxhdW5jaGVkCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gICAgICAgICBXaGVuIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nCiAgICAgKiBAdGhyb3dzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBXaGVuIHByb2Nlc3MgdGltZWQgb3V0CiAgICAgKiBAdGhyb3dzIFByb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbiBXaGVuIHByb2Nlc3Mgc3RvcHBlZCBhZnRlciByZWNlaXZpbmcgc2lnbmFsCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uICAgICAgICAgICBJbiBjYXNlIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgYW5kIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICoKICAgICAqIEBmaW5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKD9jYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCBhcnJheSAkZW52ID0gW10pOiBpbnQKICAgIHsKICAgICAgICAkdGhpcy0+c3RhcnQoJGNhbGxiYWNrLCAkZW52KTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT53YWl0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW5zIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHJ1bigpIGV4Y2VwdCB0aGF0IGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlIHByb2Nlc3MKICAgICAqIGV4aXRzIHdpdGggYSBub24temVybyBleGl0IGNvZGUuCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbiBpZiB0aGUgcHJvY2VzcyBkaWRuJ3QgdGVybWluYXRlIHN1Y2Nlc3NmdWxseQogICAgICoKICAgICAqIEBmaW5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVzdFJ1big/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgYXJyYXkgJGVudiA9IFtdKTogc2VsZgogICAgewogICAgICAgIGlmICgwICE9PSAkdGhpcy0+cnVuKCRjYWxsYmFjaywgJGVudikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NGYWlsZWRFeGNlcHRpb24oJHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU3RhcnRzIHRoZSBwcm9jZXNzIGFuZCByZXR1cm5zIGFmdGVyIHdyaXRpbmcgdGhlIGlucHV0IHRvIFNURElOLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCBhbGwgU1RESU4gZGF0YSBpcyBzZW50IHRvIHRoZSBwcm9jZXNzIHRoZW4gaXQKICAgICAqIHJldHVybnMgd2hpbGUgdGhlIHByb2Nlc3MgcnVucyBpbiB0aGUgYmFja2dyb3VuZC4KICAgICAqCiAgICAgKiBUaGUgdGVybWluYXRpb24gb2YgdGhlIHByb2Nlc3MgY2FuIGJlIGF3YWl0ZWQgd2l0aCB3YWl0KCkuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kIHNvbWUgYnl0ZXMgZnJvbQogICAgICogdGhlIG91dHB1dCBpbiByZWFsLXRpbWUgd2hpbGUgd3JpdGluZyB0aGUgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIHByb2Nlc3MuCiAgICAgKiBJdCBhbGxvd3MgdG8gaGF2ZSBmZWVkYmFjayBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGNhbGxiYWNrIEEgUEhQIGNhbGxiYWNrIHRvIHJ1biB3aGVuZXZlciB0aGVyZSBpcyBzb21lCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGF2YWlsYWJsZSBvbiBTVERPVVQgb3IgU1RERVJSCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBjYW4ndCBiZSBsYXVuY2hlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBJbiBjYXNlIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQgYW5kIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdQcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZXNldFByb2Nlc3NEYXRhKCk7CiAgICAgICAgJHRoaXMtPnN0YXJ0dGltZSA9ICR0aGlzLT5sYXN0T3V0cHV0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkdGhpcy0+YnVpbGRDYWxsYmFjaygkY2FsbGJhY2spOwogICAgICAgICR0aGlzLT5oYXNDYWxsYmFjayA9IG51bGwgIT09ICRjYWxsYmFjazsKICAgICAgICAkZGVzY3JpcHRvcnMgPSAkdGhpcy0+Z2V0RGVzY3JpcHRvcnMoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5lbnYpIHsKICAgICAgICAgICAgJGVudiArPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2RpZmZfdWtleSgkdGhpcy0+ZW52LCAkZW52LCAnc3RyY2FzZWNtcCcpIDogJHRoaXMtPmVudjsKICAgICAgICB9CgogICAgICAgICRlbnYgKz0gJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgPyBhcnJheV9kaWZmX3VrZXkoJHRoaXMtPmdldERlZmF1bHRFbnYoKSwgJGVudiwgJ3N0cmNhc2VjbXAnKSA6ICR0aGlzLT5nZXREZWZhdWx0RW52KCk7CgogICAgICAgIGlmIChcaXNfYXJyYXkoJGNvbW1hbmRsaW5lID0gJHRoaXMtPmNvbW1hbmRsaW5lKSkgewogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSBpbXBsb2RlKCcgJywgYXJyYXlfbWFwKFskdGhpcywgJ2VzY2FwZUFyZ3VtZW50J10sICRjb21tYW5kbGluZSkpOwoKICAgICAgICAgICAgaWYgKCdcXCcgIT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgICAgICAvLyBleGVjIGlzIG1hbmRhdG9yeSB0byBkZWFsIHdpdGggc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgJGNvbW1hbmRsaW5lID0gJ2V4ZWMgJy4kY29tbWFuZGxpbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSAkdGhpcy0+cmVwbGFjZVBsYWNlaG9sZGVycygkY29tbWFuZGxpbmUsICRlbnYpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgICRjb21tYW5kbGluZSA9ICR0aGlzLT5wcmVwYXJlV2luZG93c0NvbW1hbmRMaW5lKCRjb21tYW5kbGluZSwgJGVudik7CiAgICAgICAgfSBlbHNlaWYgKCEkdGhpcy0+dXNlRmlsZUhhbmRsZXMgJiYgJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkpIHsKICAgICAgICAgICAgLy8gbGFzdCBleGl0IGNvZGUgaXMgb3V0cHV0IG9uIHRoZSBmb3VydGggcGlwZSBhbmQgY2F1Z2h0IHRvIHdvcmsgYXJvdW5kIC0tZW5hYmxlLXNpZ2NoaWxkCiAgICAgICAgICAgICRkZXNjcmlwdG9yc1szXSA9IFsncGlwZScsICd3J107CgogICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy83MTIwNS9iYWNrZ3JvdW5kLXByb2Nlc3MtcGlwZS1pbnB1dAogICAgICAgICAgICAkY29tbWFuZGxpbmUgPSAneyAoJy4kY29tbWFuZGxpbmUuJykgPCYzIDM8Ji0gMz4vZGV2L251bGwgJiB9IDM8JjA7JzsKICAgICAgICAgICAgJGNvbW1hbmRsaW5lIC49ICdwaWQ9JCE7IGVjaG8gJHBpZCA+JjM7IHdhaXQgJHBpZCAyPi9kZXYvbnVsbDsgY29kZT0kPzsgZWNobyAkY29kZSA+JjM7IGV4aXQgJGNvZGUnOwoKICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhlIGJ1Zywgd2hlbiBQVFMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLgogICAgICAgICAgICAvLyBAc2VlIDogaHR0cHM6Ly9idWdzLnBocC5uZXQvNjk0NDIKICAgICAgICAgICAgJHB0c1dvcmthcm91bmQgPSBmb3BlbihfX0ZJTEVfXywgJ3InKTsKICAgICAgICB9CgogICAgICAgICRlbnZQYWlycyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRlbnYgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKGZhbHNlICE9PSAkdiAmJiBmYWxzZSA9PT0gXGluX2FycmF5KCRrLCBbJ2FyZ2MnLCAnYXJndicsICdBUkdDJywgJ0FSR1YnXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRlbnZQYWlyc1tdID0gJGsuJz0nLiR2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2RpcigkdGhpcy0+Y3dkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgcHJvdmlkZWQgY3dkICIlcyIgZG9lcyBub3QgZXhpc3QuJywgJHRoaXMtPmN3ZCkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSBAcHJvY19vcGVuKCRjb21tYW5kbGluZSwgJGRlc2NyaXB0b3JzLCAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5waXBlcywgJHRoaXMtPmN3ZCwgJGVudlBhaXJzLCAkdGhpcy0+b3B0aW9ucyk7CgogICAgICAgIGlmICghJHRoaXMtPnByb2Nlc3MpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBsYXVuY2ggYSBuZXcgcHJvY2Vzcy4nKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnN0YXR1cyA9IHNlbGY6OlNUQVRVU19TVEFSVEVEOwoKICAgICAgICBpZiAoaXNzZXQoJGRlc2NyaXB0b3JzWzNdKSkgewogICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3BpZCddID0gKGludCkgZmdldHMoJHRoaXMtPnByb2Nlc3NQaXBlcy0+cGlwZXNbM10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT50dHkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmNoZWNrVGltZW91dCgpOwogICAgfQoKICAgIC8qKgogICAgICogUmVzdGFydHMgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogQmUgd2FybmVkIHRoYXQgdGhlIHByb2Nlc3MgaXMgY2xvbmVkIGJlZm9yZSBiZWluZyBzdGFydGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayBBIFBIUCBjYWxsYmFjayB0byBydW4gd2hlbmV2ZXIgdGhlcmUgaXMgc29tZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBhdmFpbGFibGUgb24gU1RET1VUIG9yIFNUREVSUgogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBjYW4ndCBiZSBsYXVuY2hlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIFdoZW4gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqCiAgICAgKiBAc2VlIHN0YXJ0KCkKICAgICAqCiAgICAgKiBAZmluYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RhcnQoP2NhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGFycmF5ICRlbnYgPSBbXSk6IHNlbGYKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdQcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4nKTsKICAgICAgICB9CgogICAgICAgICRwcm9jZXNzID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJHByb2Nlc3MtPnN0YXJ0KCRjYWxsYmFjaywgJGVudik7CgogICAgICAgIHJldHVybiAkcHJvY2VzczsKICAgIH0KCiAgICAvKioKICAgICAqIFdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSB0eXBlIG9mIG91dHB1dCAob3V0IG9yIGVycikgYW5kIHNvbWUgYnl0ZXMKICAgICAqIGZyb20gdGhlIG91dHB1dCBpbiByZWFsLXRpbWUgd2hpbGUgd3JpdGluZyB0aGUgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIHByb2Nlc3MuCiAgICAgKiBJdCBhbGxvd3MgdG8gaGF2ZSBmZWVkYmFjayBmcm9tIHRoZSBpbmRlcGVuZGVudCBwcm9jZXNzIGR1cmluZyBleGVjdXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGNhbGxiYWNrIEEgdmFsaWQgUEhQIGNhbGxiYWNrCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGV4aXRjb2RlIG9mIHRoZSBwcm9jZXNzCiAgICAgKgogICAgICogQHRocm93cyBQcm9jZXNzVGltZWRPdXRFeGNlcHRpb24gV2hlbiBwcm9jZXNzIHRpbWVkIG91dAogICAgICogQHRocm93cyBQcm9jZXNzU2lnbmFsZWRFeGNlcHRpb24gV2hlbiBwcm9jZXNzIHN0b3BwZWQgYWZ0ZXIgcmVjZWl2aW5nIHNpZ25hbAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgICAgICAgICAgV2hlbiBwcm9jZXNzIGlzIG5vdCB5ZXQgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCg/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWlyZVByb2Nlc3NJc1N0YXJ0ZWQoX19GVU5DVElPTl9fKTsKCiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIGlmIChudWxsICE9PSAkY2FsbGJhY2spIHsKICAgICAgICAgICAgaWYgKCEkdGhpcy0+cHJvY2Vzc1BpcGVzLT5oYXZlUmVhZFN1cHBvcnQoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ1Bhc3MgdGhlIGNhbGxiYWNrIHRvIHRoZSAiUHJvY2Vzczo6c3RhcnQiIG1ldGhvZCBvciBjYWxsIGVuYWJsZU91dHB1dCB0byB1c2UgYSBjYWxsYmFjayB3aXRoICJQcm9jZXNzOjp3YWl0Ii4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkdGhpcy0+YnVpbGRDYWxsYmFjaygkY2FsbGJhY2spOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tUaW1lb3V0KCk7CiAgICAgICAgICAgICRydW5uaW5nID0gJHRoaXMtPmlzUnVubmluZygpICYmICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5hcmVPcGVuKCkpOwogICAgICAgICAgICAkdGhpcy0+cmVhZFBpcGVzKCRydW5uaW5nLCAnXFwnICE9PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAhJHJ1bm5pbmcpOwogICAgICAgIH0gd2hpbGUgKCRydW5uaW5nKTsKCiAgICAgICAgd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewogICAgICAgICAgICAkdGhpcy0+Y2hlY2tUaW1lb3V0KCk7CiAgICAgICAgICAgIHVzbGVlcCgxMDAwKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddICYmICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSAhPT0gJHRoaXMtPmxhdGVzdFNpZ25hbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uKCR0aGlzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZXhpdGNvZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBXYWl0cyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLgogICAgICoKICAgICAqIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgdHlwZSBvZiBvdXRwdXQgKG91dCBvciBlcnIpIGFuZCBzb21lIGJ5dGVzCiAgICAgKiBmcm9tIHRoZSBvdXRwdXQgaW4gcmVhbC10aW1lIHdoaWxlIHdyaXRpbmcgdGhlIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBwcm9jZXNzLgogICAgICogSXQgYWxsb3dzIHRvIGhhdmUgZmVlZGJhY2sgZnJvbSB0aGUgaW5kZXBlbmRlbnQgcHJvY2VzcyBkdXJpbmcgZXhlY3V0aW9uLgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiAgICAgICAgIFdoZW4gcHJvY2VzcyB0aW1lZCBvdXQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICAgICAgICAgIFdoZW4gcHJvY2VzcyBpcyBub3QgeWV0IHN0YXJ0ZWQKICAgICAqIEB0aHJvd3MgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uIEluIGNhc2UgdGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhaXRVbnRpbChjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKF9fRlVOQ1RJT05fXyk7CiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIGlmICghJHRoaXMtPnByb2Nlc3NQaXBlcy0+aGF2ZVJlYWRTdXBwb3J0KCkpIHsKICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignUGFzcyB0aGUgY2FsbGJhY2sgdG8gdGhlICJQcm9jZXNzOjpzdGFydCIgbWV0aG9kIG9yIGNhbGwgZW5hYmxlT3V0cHV0IHRvIHVzZSBhIGNhbGxiYWNrIHdpdGggIlByb2Nlc3M6OndhaXRVbnRpbCIuJyk7CiAgICAgICAgfQogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT5idWlsZENhbGxiYWNrKCRjYWxsYmFjayk7CgogICAgICAgICRyZWFkeSA9IGZhbHNlOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICR0aGlzLT5jaGVja1RpbWVvdXQoKTsKICAgICAgICAgICAgJHJ1bm5pbmcgPSAnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/ICR0aGlzLT5pc1J1bm5pbmcoKSA6ICR0aGlzLT5wcm9jZXNzUGlwZXMtPmFyZU9wZW4oKTsKICAgICAgICAgICAgJG91dHB1dCA9ICR0aGlzLT5wcm9jZXNzUGlwZXMtPnJlYWRBbmRXcml0ZSgkcnVubmluZywgJ1xcJyAhPT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgfHwgISRydW5uaW5nKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRvdXRwdXQgYXMgJHR5cGUgPT4gJGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICgzICE9PSAkdHlwZSkgewogICAgICAgICAgICAgICAgICAgICRyZWFkeSA9ICRjYWxsYmFjayhzZWxmOjpTVERPVVQgPT09ICR0eXBlID8gc2VsZjo6T1VUIDogc2VsZjo6RVJSLCAkZGF0YSkgfHwgJHJlYWR5OwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3NpZ25hbGVkJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydleGl0Y29kZSddID0gKGludCkgJGRhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRyZWFkeSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkcnVubmluZykgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2xlZXAoMTAwMCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgUGlkIChwcm9jZXNzIGlkZW50aWZpZXIpLCBpZiBhcHBsaWNhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIHByb2Nlc3MgaWQgaWYgcnVubmluZywgbnVsbCBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc1J1bm5pbmcoKSA/ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3BpZCddIDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgUE9TSVggc2lnbmFsIHRvIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpZ25hbCBBIHZhbGlkIFBPU0lYIHNpZ25hbCAoc2VlIGh0dHBzOi8vcGhwLm5ldC9wY250bC5jb25zdGFudHMpCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSAtLWVuYWJsZS1zaWdjaGlsZCBpcyBhY3RpdmF0ZWQgYW5kIHRoZSBwcm9jZXNzIGNhbid0IGJlIGtpbGxlZAogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIEluIGNhc2Ugb2YgZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbmFsKGludCAkc2lnbmFsKQogICAgewogICAgICAgICR0aGlzLT5kb1NpZ25hbCgkc2lnbmFsLCB0cnVlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogRGlzYWJsZXMgZmV0Y2hpbmcgb3V0cHV0IGFuZCBlcnJvciBvdXRwdXQgZnJvbSB0aGUgdW5kZXJseWluZyBwcm9jZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gICBpZiBhbiBpZGxlIHRpbWVvdXQgaXMgc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdEaXNhYmxpbmcgb3V0cHV0IHdoaWxlIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgaXMgbm90IHBvc3NpYmxlLicpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmlkbGVUaW1lb3V0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignT3V0cHV0IGNhbm5vdCBiZSBkaXNhYmxlZCB3aGlsZSBhbiBpZGxlIHRpbWVvdXQgaXMgc2V0LicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm91dHB1dERpc2FibGVkID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogRW5hYmxlcyBmZXRjaGluZyBvdXRwdXQgYW5kIGVycm9yIG91dHB1dCBmcm9tIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MuCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdFbmFibGluZyBvdXRwdXQgd2hpbGUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBpcyBub3QgcG9zc2libGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b3V0cHV0RGlzYWJsZWQgPSBmYWxzZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGluIGNhc2UgdGhlIG91dHB1dCBpcyBkaXNhYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPdXRwdXREaXNhYmxlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXREaXNhYmxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoZSBwcm9jZXNzIChTVERPVVQpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHRoZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJHJldCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPnN0ZG91dCwgLTEsIDApKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgb3V0cHV0IGluY3JlbWVudGFsbHkuCiAgICAgKgogICAgICogSW4gY29tcGFyaXNvbiB3aXRoIHRoZSBnZXRPdXRwdXQgbWV0aG9kIHdoaWNoIGFsd2F5cyByZXR1cm4gdGhlIHdob2xlCiAgICAgKiBvdXRwdXQsIHRoaXMgb25lIHJldHVybnMgdGhlIG5ldyBvdXRwdXQgc2luY2UgdGhlIGxhc3QgY2FsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gaW4gY2FzZSB0aGUgb3V0cHV0IGhhcyBiZWVuIGRpc2FibGVkCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHN0YXJ0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEluY3JlbWVudGFsT3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgICRsYXRlc3QgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRvdXQsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQpOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbE91dHB1dE9mZnNldCA9IGZ0ZWxsKCR0aGlzLT5zdGRvdXQpOwoKICAgICAgICBpZiAoZmFsc2UgPT09ICRsYXRlc3QpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsYXRlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBvdXRwdXQgb2YgdGhlIHByb2Nlc3MsIHdpdGggdGhlIG91dHB1dCB0eXBlIGFzIGtleXMgKFByb2Nlc3M6Ok9VVC9FUlIpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIEEgYml0IGZpZWxkIG9mIFByb2Nlc3M6OklURVJfKiBmbGFncwogICAgICoKICAgICAqIEByZXR1cm4gXEdlbmVyYXRvcjxzdHJpbmcsIHN0cmluZz4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGluIGNhc2UgdGhlIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBzdGFydGVkCiAgICAgKi8KICAgICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKGludCAkZmxhZ3MgPSAwKQogICAgewogICAgICAgICR0aGlzLT5yZWFkUGlwZXNGb3JPdXRwdXQoX19GVU5DVElPTl9fLCBmYWxzZSk7CgogICAgICAgICRjbGVhck91dHB1dCA9ICEoc2VsZjo6SVRFUl9LRUVQX09VVFBVVCAmICRmbGFncyk7CiAgICAgICAgJGJsb2NraW5nID0gIShzZWxmOjpJVEVSX05PTl9CTE9DS0lORyAmICRmbGFncyk7CiAgICAgICAgJHlpZWxkT3V0ID0gIShzZWxmOjpJVEVSX1NLSVBfT1VUICYgJGZsYWdzKTsKICAgICAgICAkeWllbGRFcnIgPSAhKHNlbGY6OklURVJfU0tJUF9FUlIgJiAkZmxhZ3MpOwoKICAgICAgICB3aGlsZSAobnVsbCAhPT0gJHRoaXMtPmNhbGxiYWNrIHx8ICgkeWllbGRPdXQgJiYgIWZlb2YoJHRoaXMtPnN0ZG91dCkpIHx8ICgkeWllbGRFcnIgJiYgIWZlb2YoJHRoaXMtPnN0ZGVycikpKSB7CiAgICAgICAgICAgIGlmICgkeWllbGRPdXQpIHsKICAgICAgICAgICAgICAgICRvdXQgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRvdXQsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQpOwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3V0WzBdKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkY2xlYXJPdXRwdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNsZWFyT3V0cHV0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0ID0gZnRlbGwoJHRoaXMtPnN0ZG91dCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmOjpPVVQgPT4gJG91dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR5aWVsZEVycikgewogICAgICAgICAgICAgICAgJGVyciA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPnN0ZGVyciwgLTEsICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0KTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGVyclswXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGNsZWFyT3V0cHV0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jbGVhckVycm9yT3V0cHV0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSBmdGVsbCgkdGhpcy0+c3RkZXJyKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGY6OkVSUiA9PiAkZXJyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoISRibG9ja2luZyAmJiAhaXNzZXQoJG91dFswXSkgJiYgIWlzc2V0KCRlcnJbMF0pKSB7CiAgICAgICAgICAgICAgICB5aWVsZCBzZWxmOjpPVVQgPT4gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5jaGVja1RpbWVvdXQoKTsKICAgICAgICAgICAgJHRoaXMtPnJlYWRQaXBlc0Zvck91dHB1dChfX0ZVTkNUSU9OX18sICRibG9ja2luZyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBwcm9jZXNzIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhck91dHB1dCgpCiAgICB7CiAgICAgICAgZnRydW5jYXRlKCR0aGlzLT5zdGRvdXQsIDApOwogICAgICAgIGZzZWVrKCR0aGlzLT5zdGRvdXQsIDApOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbE91dHB1dE9mZnNldCA9IDA7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZXJyb3Igb3V0cHV0IG9mIHRoZSBwcm9jZXNzIChTVERFUlIpLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHRoZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JPdXRwdXQoKQogICAgewogICAgICAgICR0aGlzLT5yZWFkUGlwZXNGb3JPdXRwdXQoX19GVU5DVElPTl9fKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkcmV0ID0gc3RyZWFtX2dldF9jb250ZW50cygkdGhpcy0+c3RkZXJyLCAtMSwgMCkpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlcnJvck91dHB1dCBpbmNyZW1lbnRhbGx5LgogICAgICoKICAgICAqIEluIGNvbXBhcmlzb24gd2l0aCB0aGUgZ2V0RXJyb3JPdXRwdXQgbWV0aG9kIHdoaWNoIGFsd2F5cyByZXR1cm4gdGhlCiAgICAgKiB3aG9sZSBlcnJvciBvdXRwdXQsIHRoaXMgb25lIHJldHVybnMgdGhlIG5ldyBlcnJvciBvdXRwdXQgc2luY2UgdGhlIGxhc3QKICAgICAqIGNhbGwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGluIGNhc2UgdGhlIG91dHB1dCBoYXMgYmVlbiBkaXNhYmxlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIG5vdCBzdGFydGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbmNyZW1lbnRhbEVycm9yT3V0cHV0KCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhZFBpcGVzRm9yT3V0cHV0KF9fRlVOQ1RJT05fXyk7CgogICAgICAgICRsYXRlc3QgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdGRlcnIsIC0xLCAkdGhpcy0+aW5jcmVtZW50YWxFcnJvck91dHB1dE9mZnNldCk7CiAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSBmdGVsbCgkdGhpcy0+c3RkZXJyKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkbGF0ZXN0KSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGF0ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBwcm9jZXNzIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckVycm9yT3V0cHV0KCkKICAgIHsKICAgICAgICBmdHJ1bmNhdGUoJHRoaXMtPnN0ZGVyciwgMCk7CiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZGVyciwgMCk7CiAgICAgICAgJHRoaXMtPmluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQgPSAwOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBleGl0IGNvZGUgcmV0dXJuZWQgYnkgdGhlIHByb2Nlc3MuCiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbCBUaGUgZXhpdCBzdGF0dXMgY29kZSwgbnVsbCBpZiB0aGUgUHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhpdENvZGUoKQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4aXRjb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4aXQgY29kZSByZXR1cm5lZCBieSB0aGUgcHJvY2Vzcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZWxpZXMgb24gdGhlIFVuaXggZXhpdCBjb2RlIHN0YXR1cyBzdGFuZGFyZGl6YXRpb24KICAgICAqIGFuZCBtaWdodCBub3QgYmUgcmVsZXZhbnQgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGl0IHN0YXR1cyBjb2RlLCBudWxsIGlmIHRoZSBQcm9jZXNzIGlzIG5vdCB0ZXJtaW5hdGVkCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdGxkcC5vcmcvTERQL2Ficy9odG1sL2V4aXRjb2Rlcy5odG1sCiAgICAgKiBAc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5peF9zaWduYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlVGV4dCgpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRleGl0Y29kZSA9ICR0aGlzLT5nZXRFeGl0Q29kZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRleGl0Q29kZXNbJGV4aXRjb2RlXSA/PyAnVW5rbm93biBlcnJvcic7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgZW5kZWQgc3VjY2Vzc2Z1bGx5LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdWNjZXNzZnVsKCkKICAgIHsKICAgICAgICByZXR1cm4gMCA9PT0gJHRoaXMtPmdldEV4aXRDb2RlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGJlZW4gdGVybWluYXRlZCBieSBhbiB1bmNhdWdodCBzaWduYWwuCiAgICAgKgogICAgICogSXQgYWx3YXlzIHJldHVybnMgZmFsc2Ugb24gV2luZG93cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHRlcm1pbmF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0JlZW5TaWduYWxlZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNoaWxkIHByb2Nlc3MgdG8gdGVybWluYXRlIGl0cyBleGVjdXRpb24uCiAgICAgKgogICAgICogSXQgaXMgb25seSBtZWFuaW5nZnVsIGlmIGhhc0JlZW5TaWduYWxlZCgpIHJldHVybnMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIC0tZW5hYmxlLXNpZ2NoaWxkIGlzIGFjdGl2YXRlZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHRlcm1pbmF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRlcm1TaWduYWwoKQogICAgewogICAgICAgICR0aGlzLT5yZXF1aXJlUHJvY2Vzc0lzVGVybWluYXRlZChfX0ZVTkNUSU9OX18pOwoKICAgICAgICBpZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkgJiYgLTEgPT09ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVGhpcyBQSFAgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1zaWdjaGlsZC4gVGVybSBzaWduYWwgY2Fubm90IGJlIHJldHJpZXZlZC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGJlZW4gc3RvcHBlZCBieSBhIHNpZ25hbC4KICAgICAqCiAgICAgKiBJdCBhbHdheXMgcmV0dXJucyBmYWxzZSBvbiBXaW5kb3dzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQmVlblN0b3BwZWQoKQogICAgewogICAgICAgICR0aGlzLT5yZXF1aXJlUHJvY2Vzc0lzVGVybWluYXRlZChfX0ZVTkNUSU9OX18pOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsnc3RvcHBlZCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIGNoaWxkIHByb2Nlc3MgdG8gc3RvcCBpdHMgZXhlY3V0aW9uLgogICAgICoKICAgICAqIEl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiBoYXNCZWVuU3RvcHBlZCgpIHJldHVybnMgdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBub3QgdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RvcFNpZ25hbCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKF9fRlVOQ1RJT05fXyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzdG9wc2lnJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaXMgY3VycmVudGx5IHJ1bm5pbmcuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1J1bm5pbmcoKQogICAgewogICAgICAgIGlmIChzZWxmOjpTVEFUVVNfU1RBUlRFRCAhPT0gJHRoaXMtPnN0YXR1cykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3J1bm5pbmcnXTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgcHJvY2VzcyBoYXMgYmVlbiBzdGFydGVkIHdpdGggbm8gcmVnYXJkIHRvIHRoZSBjdXJyZW50IHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdGFydGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6U1RBVFVTX1JFQURZICE9ICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaXMgdGVybWluYXRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVGVybWluYXRlZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgogICAgICAgIHJldHVybiBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRCA9PSAkdGhpcy0+c3RhdHVzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcHJvY2VzcyBzdGF0dXMuCiAgICAgKgogICAgICogVGhlIHN0YXR1cyBpcyBvbmUgb2Y6IHJlYWR5LCBzdGFydGVkLCB0ZXJtaW5hdGVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1czsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3BzIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJHRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gc2Vjb25kcwogICAgICogQHBhcmFtIGludHxudWxsICAkc2lnbmFsICBBIFBPU0lYIHNpZ25hbCB0byBzZW5kIGluIGNhc2UgdGhlIHByb2Nlc3MgaGFzIG5vdCBzdG9wIGF0IHRpbWVvdXQsIGRlZmF1bHQgaXMgU0lHS0lMTCAoOSkKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBleGl0LWNvZGUgb2YgdGhlIHByb2Nlc3Mgb3IgbnVsbCBpZiBpdCdzIG5vdCBydW5uaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9wKGZsb2F0ICR0aW1lb3V0ID0gMTAsID9pbnQgJHNpZ25hbCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRpbWVvdXRNaWNybyA9IG1pY3JvdGltZSh0cnVlKSArICR0aW1lb3V0OwogICAgICAgIGlmICgkdGhpcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy8gZ2l2ZW4gU0lHVEVSTSBtYXkgbm90IGJlIGRlZmluZWQgYW5kIHRoYXQgInByb2NfdGVybWluYXRlIiB1c2VzIHRoZSBjb25zdGFudCB2YWx1ZSBhbmQgbm90IHRoZSBjb25zdGFudCBpdHNlbGYsIHdlIHVzZSB0aGUgc2FtZSBoZXJlCiAgICAgICAgICAgICR0aGlzLT5kb1NpZ25hbCgxNSwgZmFsc2UpOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICB1c2xlZXAoMTAwMCk7CiAgICAgICAgICAgIH0gd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSAmJiBtaWNyb3RpbWUodHJ1ZSkgPCAkdGltZW91dE1pY3JvKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgICAgIC8vIEF2b2lkIGV4Y2VwdGlvbiBoZXJlOiBwcm9jZXNzIGlzIHN1cHBvc2VkIHRvIGJlIHJ1bm5pbmcsIGJ1dCBpdCBtaWdodCBoYXZlIHN0b3BwZWQganVzdAogICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhpcyBsaW5lLiBJbiBhbnkgY2FzZSwgbGV0J3Mgc2lsZW50bHkgZGlzY2FyZCB0aGUgZXJyb3IsIHdlIGNhbm5vdCBkbyBhbnl0aGluZy4KICAgICAgICAgICAgICAgICR0aGlzLT5kb1NpZ25hbCgkc2lnbmFsID86IDksIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydwaWQnXSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5mYWxsYmFja1N0YXR1c1sncGlkJ10pOwoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RvcCgwLCAkc2lnbmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+Y2xvc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZXhpdGNvZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbGluZSB0byB0aGUgU1RET1VUIHN0cmVhbS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE91dHB1dChzdHJpbmcgJGxpbmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmxhc3RPdXRwdXRUaW1lID0gbWljcm90aW1lKHRydWUpOwoKICAgICAgICBmc2VlaygkdGhpcy0+c3Rkb3V0LCAwLCBcU0VFS19FTkQpOwogICAgICAgIGZ3cml0ZSgkdGhpcy0+c3Rkb3V0LCAkbGluZSk7CiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZG91dCwgJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgYSBsaW5lIHRvIHRoZSBTVERFUlIgc3RyZWFtLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRXJyb3JPdXRwdXQoc3RyaW5nICRsaW5lKQogICAgewogICAgICAgICR0aGlzLT5sYXN0T3V0cHV0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKCiAgICAgICAgZnNlZWsoJHRoaXMtPnN0ZGVyciwgMCwgXFNFRUtfRU5EKTsKICAgICAgICBmd3JpdGUoJHRoaXMtPnN0ZGVyciwgJGxpbmUpOwogICAgICAgIGZzZWVrKCR0aGlzLT5zdGRlcnIsICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGxhc3Qgb3V0cHV0IHRpbWUgaW4gc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RPdXRwdXRUaW1lKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFzdE91dHB1dFRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBjb21tYW5kIGxpbmUgdG8gYmUgZXhlY3V0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lKCkKICAgIHsKICAgICAgICByZXR1cm4gXGlzX2FycmF5KCR0aGlzLT5jb21tYW5kbGluZSkgPyBpbXBsb2RlKCcgJywgYXJyYXlfbWFwKFskdGhpcywgJ2VzY2FwZUFyZ3VtZW50J10sICR0aGlzLT5jb21tYW5kbGluZSkpIDogJHRoaXMtPmNvbW1hbmRsaW5lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcHJvY2VzcyB0aW1lb3V0IGluIHNlY29uZHMgKG1heC4gcnVudGltZSkuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBwcm9jZXNzIGlkbGUgdGltZW91dCBpbiBzZWNvbmRzIChtYXguIHRpbWUgc2luY2UgbGFzdCBvdXRwdXQpLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWRsZVRpbWVvdXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWRsZVRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBwcm9jZXNzIHRpbWVvdXQgKG1heC4gcnVudGltZSkgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBUbyBkaXNhYmxlIHRoZSB0aW1lb3V0LCBzZXQgdGhpcyB2YWx1ZSB0byBudWxsLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgdGltZW91dCBpcyBuZWdhdGl2ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZW91dCg/ZmxvYXQgJHRpbWVvdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVvdXQgPSAkdGhpcy0+dmFsaWRhdGVUaW1lb3V0KCR0aW1lb3V0KTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgcHJvY2VzcyBpZGxlIHRpbWVvdXQgKG1heC4gdGltZSBzaW5jZSBsYXN0IG91dHB1dCkgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBUbyBkaXNhYmxlIHRoZSB0aW1lb3V0LCBzZXQgdGhpcyB2YWx1ZSB0byBudWxsLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGRpc2FibGVkCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgdGltZW91dCBpcyBuZWdhdGl2ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SWRsZVRpbWVvdXQoP2Zsb2F0ICR0aW1lb3V0KQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkdGltZW91dCAmJiAkdGhpcy0+b3V0cHV0RGlzYWJsZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdJZGxlIHRpbWVvdXQgY2Fubm90IGJlIHNldCB3aGlsZSB0aGUgb3V0cHV0IGlzIGRpc2FibGVkLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmlkbGVUaW1lb3V0ID0gJHRoaXMtPnZhbGlkYXRlVGltZW91dCgkdGltZW91dCk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFRUWSBtb2RlLgogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSB0aGUgVFRZIG1vZGUgaXMgbm90IHN1cHBvcnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHR5KGJvb2wgJHR0eSkKICAgIHsKICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IgJiYgJHR0eSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVFRZIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIHBsYXRmb3JtLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0dHkgJiYgIXNlbGY6OmlzVHR5U3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RUWSBtb2RlIHJlcXVpcmVzIC9kZXYvdHR5IHRvIGJlIHJlYWQvd3JpdGFibGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dHR5ID0gJHR0eTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBUVFkgbW9kZSBpcyBlbmFibGVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNUdHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHR5OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyBQVFkgbW9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQdHkoYm9vbCAkYm9vbCkKICAgIHsKICAgICAgICAkdGhpcy0+cHR5ID0gJGJvb2w7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgUFRZIHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQdHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHR5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V29ya2luZ0RpcmVjdG9yeSgpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5jd2QpIHsKICAgICAgICAgICAgLy8gZ2V0Y3dkKCkgd2lsbCByZXR1cm4gZmFsc2UgaWYgYW55IG9uZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzIGRvZXMgbm90IGhhdmUKICAgICAgICAgICAgLy8gdGhlIHJlYWRhYmxlIG9yIHNlYXJjaCBtb2RlIHNldCwgZXZlbiBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZG9lcwogICAgICAgICAgICByZXR1cm4gZ2V0Y3dkKCkgPzogbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y3dkOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRXb3JraW5nRGlyZWN0b3J5KHN0cmluZyAkY3dkKQogICAgewogICAgICAgICR0aGlzLT5jd2QgPSAkY3dkOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RW52KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVudjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nfFxTdHJpbmdhYmxlPiAkZW52IFRoZSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RW52KGFycmF5ICRlbnYpCiAgICB7CiAgICAgICAgJHRoaXMtPmVudiA9ICRlbnY7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIFByb2Nlc3MgaW5wdXQuCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZXxzdHJpbmd8XEl0ZXJhdG9yfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElucHV0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlucHV0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW5wdXQuCiAgICAgKgogICAgICogVGhpcyBjb250ZW50IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3Mgc3RhbmRhcmQgaW5wdXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbHxyZXNvdXJjZXxcVHJhdmVyc2FibGV8bnVsbCAkaW5wdXQgVGhlIGNvbnRlbnQKICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElucHV0KCRpbnB1dCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignSW5wdXQgY2Fubm90IGJlIHNldCB3aGlsZSB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmlucHV0ID0gUHJvY2Vzc1V0aWxzOjp2YWxpZGF0ZUlucHV0KF9fTUVUSE9EX18sICRpbnB1dCk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGEgY2hlY2sgYmV0d2VlbiB0aGUgdGltZW91dCBkZWZpbml0aW9uIGFuZCB0aGUgdGltZSB0aGUgcHJvY2VzcyBzdGFydGVkLgogICAgICoKICAgICAqIEluIGNhc2UgeW91IHJ1biBhIGJhY2tncm91bmQgcHJvY2VzcyAod2l0aCB0aGUgc3RhcnQgbWV0aG9kKSwgeW91IHNob3VsZAogICAgICogdHJpZ2dlciB0aGlzIG1ldGhvZCByZWd1bGFybHkgdG8gZW5zdXJlIHRoZSBwcm9jZXNzIHRpbWVvdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbiBJbiBjYXNlIHRoZSB0aW1lb3V0IHdhcyByZWFjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1RpbWVvdXQoKQogICAgewogICAgICAgIGlmIChzZWxmOjpTVEFUVVNfU1RBUlRFRCAhPT0gJHRoaXMtPnN0YXR1cykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnRpbWVvdXQgJiYgJHRoaXMtPnRpbWVvdXQgPCBtaWNyb3RpbWUodHJ1ZSkgLSAkdGhpcy0+c3RhcnR0aW1lKSB7CiAgICAgICAgICAgICR0aGlzLT5zdG9wKDApOwoKICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbigkdGhpcywgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uOjpUWVBFX0dFTkVSQUwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5pZGxlVGltZW91dCAmJiAkdGhpcy0+aWRsZVRpbWVvdXQgPCBtaWNyb3RpbWUodHJ1ZSkgLSAkdGhpcy0+bGFzdE91dHB1dFRpbWUpIHsKICAgICAgICAgICAgJHRoaXMtPnN0b3AoMCk7CgogICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uKCR0aGlzLCBQcm9jZXNzVGltZWRPdXRFeGNlcHRpb246OlRZUEVfSURMRSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpbiBjYXNlIHByb2Nlc3MgaXMgbm90IHN0YXJ0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXJ0VGltZSgpOiBmbG9hdAogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignU3RhcnQgdGltZSBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciBwcm9jZXNzIHN0YXJ0LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGFydHRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWZpbmVzIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyBwcm9jX29wZW4oKS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9wcm9jX29wZW4gZm9yIHRoZSBvcHRpb25zIHN1cHBvcnRlZCBieSBQSFAuCiAgICAgKgogICAgICogRW5hYmxpbmcgdGhlICJjcmVhdGVfbmV3X2NvbnNvbGUiIG9wdGlvbiBhbGxvd3MgYSBzdWJwcm9jZXNzIHRvIGNvbnRpbnVlCiAgICAgKiB0byBydW4gYWZ0ZXIgdGhlIG1haW4gcHJvY2VzcyBleGl0ZWQsIG9uIGJvdGggV2luZG93cyBhbmQgKm5peAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdTZXR0aW5nIG9wdGlvbnMgd2hpbGUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBpcyBub3QgcG9zc2libGUuJyk7CiAgICAgICAgfQoKICAgICAgICAkZGVmYXVsdE9wdGlvbnMgPSAkdGhpcy0+b3B0aW9uczsKICAgICAgICAkZXhpc3RpbmdPcHRpb25zID0gWydibG9ja2luZ19waXBlcycsICdjcmVhdGVfcHJvY2Vzc19ncm91cCcsICdjcmVhdGVfbmV3X2NvbnNvbGUnXTsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFcaW5fYXJyYXkoJGtleSwgJGV4aXN0aW5nT3B0aW9ucykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5vcHRpb25zID0gJGRlZmF1bHRPcHRpb25zOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgb3B0aW9uICIlcyIgcGFzc2VkIHRvICIlcygpIi4gU3VwcG9ydGVkIG9wdGlvbnMgYXJlICIlcyIuJywgJGtleSwgX19NRVRIT0RfXywgaW1wbG9kZSgnIiwgIicsICRleGlzdGluZ09wdGlvbnMpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPm9wdGlvbnNbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIFRUWSBpcyBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1R0eVN1cHBvcnRlZCgpOiBib29sCiAgICB7CiAgICAgICAgc3RhdGljICRpc1R0eVN1cHBvcnRlZDsKCiAgICAgICAgaWYgKG51bGwgPT09ICRpc1R0eVN1cHBvcnRlZCkgewogICAgICAgICAgICAkaXNUdHlTdXBwb3J0ZWQgPSAoYm9vbCkgQHByb2Nfb3BlbignZWNobyAxID4vZGV2L251bGwnLCBbWydmaWxlJywgJy9kZXYvdHR5JywgJ3InXSwgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXSwgWydmaWxlJywgJy9kZXYvdHR5JywgJ3cnXV0sICRwaXBlcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGlzVHR5U3VwcG9ydGVkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIFBUWSBpcyBzdXBwb3J0ZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1B0eVN1cHBvcnRlZCgpCiAgICB7CiAgICAgICAgc3RhdGljICRyZXN1bHQ7CgogICAgICAgIGlmIChudWxsICE9PSAkcmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdCA9IChib29sKSBAcHJvY19vcGVuKCdlY2hvIDEgPi9kZXYvbnVsbCcsIFtbJ3B0eSddLCBbJ3B0eSddLCBbJ3B0eSddXSwgJHBpcGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIGRlc2NyaXB0b3JzIG5lZWRlZCBieSB0aGUgcHJvY19vcGVuLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERlc2NyaXB0b3JzKCk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pbnB1dCBpbnN0YW5jZW9mIFxJdGVyYXRvcikgewogICAgICAgICAgICAkdGhpcy0+aW5wdXQtPnJld2luZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoJ1xcJyA9PT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NQaXBlcyA9IG5ldyBXaW5kb3dzUGlwZXMoJHRoaXMtPmlucHV0LCAhJHRoaXMtPm91dHB1dERpc2FibGVkIHx8ICR0aGlzLT5oYXNDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NQaXBlcyA9IG5ldyBVbml4UGlwZXMoJHRoaXMtPmlzVHR5KCksICR0aGlzLT5pc1B0eSgpLCAkdGhpcy0+aW5wdXQsICEkdGhpcy0+b3V0cHV0RGlzYWJsZWQgfHwgJHRoaXMtPmhhc0NhbGxiYWNrKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5nZXREZXNjcmlwdG9ycygpOwogICAgfQoKICAgIC8qKgogICAgICogQnVpbGRzIHVwIHRoZSBjYWxsYmFjayB1c2VkIGJ5IHdhaXQoKS4KICAgICAqCiAgICAgKiBUaGUgY2FsbGJhY2tzIGFkZHMgYWxsIG9jY3VycmVkIG91dHB1dCB0byB0aGUgc3BlY2lmaWMgYnVmZmVyIGFuZCBjYWxscwogICAgICogdGhlIHVzZXIgY2FsbGJhY2sgKGlmIHByZXNlbnQpIHdpdGggdGhlIHJlY2VpdmVkIG91dHB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkY2FsbGJhY2sgVGhlIHVzZXIgZGVmaW5lZCBQSFAgY2FsbGJhY2sKICAgICAqCiAgICAgKiBAcmV0dXJuIFxDbG9zdXJlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENhbGxiYWNrKD9jYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgIGlmICgkdGhpcy0+b3V0cHV0RGlzYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdHlwZSwgJGRhdGEpIHVzZSAoJGNhbGxiYWNrKTogYm9vbCB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCAhPT0gJGNhbGxiYWNrICYmICRjYWxsYmFjaygkdHlwZSwgJGRhdGEpOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJG91dCA9IHNlbGY6Ok9VVDsKCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdHlwZSwgJGRhdGEpIHVzZSAoJGNhbGxiYWNrLCAkb3V0KTogYm9vbCB7CiAgICAgICAgICAgIGlmICgkb3V0ID09ICR0eXBlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YWRkT3V0cHV0KCRkYXRhKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hZGRFcnJvck91dHB1dCgkZGF0YSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBudWxsICE9PSAkY2FsbGJhY2sgJiYgJGNhbGxiYWNrKCR0eXBlLCAkZGF0YSk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIHN0YXR1cyBvZiB0aGUgcHJvY2VzcywgcmVhZHMgcGlwZXMuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGEgYmxvY2tpbmcgcmVhZCBjYWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiB1cGRhdGVTdGF0dXMoYm9vbCAkYmxvY2tpbmcpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OlNUQVRVU19TVEFSVEVEICE9PSAkdGhpcy0+c3RhdHVzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb24gPSBwcm9jX2dldF9zdGF0dXMoJHRoaXMtPnByb2Nlc3MpOwogICAgICAgICRydW5uaW5nID0gJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsncnVubmluZyddOwoKICAgICAgICAvLyBJbiBQSFAgPCA4LjMsICJwcm9jX2dldF9zdGF0dXMiIG9ubHkgcmV0dXJucyB0aGUgY29ycmVjdCBleGl0IHN0YXR1cyBvbiB0aGUgZmlyc3QgY2FsbC4KICAgICAgICAvLyBTdWJzZXF1ZW50IGNhbGxzIHJldHVybiAtMSBhcyB0aGUgcHJvY2VzcyBpcyBkaXNjYXJkZWQuIFRoaXMgd29ya2Fyb3VuZCBjYWNoZXMgdGhlIGZpcnN0CiAgICAgICAgLy8gcmV0cmlldmVkIGV4aXQgc3RhdHVzIGZvciBjb25zaXN0ZW50IHJlc3VsdHMgaW4gbGF0ZXIgY2FsbHMsIG1pbWlja2luZyBQSFAgOC4zIGJlaGF2aW9yLgogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDMwMCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5jYWNoZWRFeGl0Q29kZSkgJiYgISRydW5uaW5nICYmIC0xICE9PSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2FjaGVkRXhpdENvZGUgPSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmNhY2hlZEV4aXRDb2RlKSAmJiAhJHJ1bm5pbmcgJiYgLTEgPT09ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ2V4aXRjb2RlJ10pIHsKICAgICAgICAgICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ2V4aXRjb2RlJ10gPSAkdGhpcy0+Y2FjaGVkRXhpdENvZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5yZWFkUGlwZXMoJHJ1bm5pbmcgJiYgJGJsb2NraW5nLCAnXFwnICE9PSBcRElSRUNUT1JZX1NFUEFSQVRPUiB8fCAhJHJ1bm5pbmcpOwoKICAgICAgICBpZiAoJHRoaXMtPmZhbGxiYWNrU3RhdHVzICYmICR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb24gPSAkdGhpcy0+ZmFsbGJhY2tTdGF0dXMgKyAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEkcnVubmluZykgewogICAgICAgICAgICAkdGhpcy0+Y2xvc2UoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggdGhlICctLWVuYWJsZS1zaWdjaGlsZCcgb3B0aW9uIG9yIG5vdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzU2lnY2hpbGRFbmFibGVkKCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gc2VsZjo6JHNpZ2NoaWxkKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokc2lnY2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxmdW5jdGlvbl9leGlzdHMoJ3BocGluZm8nKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JHNpZ2NoaWxkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIHBocGluZm8oXElORk9fR0VORVJBTCk7CgogICAgICAgIHJldHVybiBzZWxmOjokc2lnY2hpbGQgPSBzdHJfY29udGFpbnMob2JfZ2V0X2NsZWFuKCksICctLWVuYWJsZS1zaWdjaGlsZCcpOwogICAgfQoKICAgIC8qKgogICAgICogUmVhZHMgcGlwZXMgZm9yIHRoZSBmcmVzaGVzdCBvdXRwdXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2FsbGVyICAgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IG5lZWRzIGZyZXNoIG91dHB1dHMKICAgICAqIEBwYXJhbSBib29sICAgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGJsb2NraW5nIGNhbGxzIG9yIG5vdAogICAgICoKICAgICAqIEB0aHJvd3MgTG9naWNFeGNlcHRpb24gaW4gY2FzZSBvdXRwdXQgaGFzIGJlZW4gZGlzYWJsZWQgb3IgcHJvY2VzcyBpcyBub3Qgc3RhcnRlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlYWRQaXBlc0Zvck91dHB1dChzdHJpbmcgJGNhbGxlciwgYm9vbCAkYmxvY2tpbmcgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm91dHB1dERpc2FibGVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignT3V0cHV0IGhhcyBiZWVuIGRpc2FibGVkLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKCRjYWxsZXIpOwoKICAgICAgICAkdGhpcy0+dXBkYXRlU3RhdHVzKCRibG9ja2luZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZXMgYW5kIHJldHVybnMgdGhlIGZpbHRlcmVkIHRpbWVvdXQuCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGdpdmVuIHRpbWVvdXQgaXMgYSBuZWdhdGl2ZSBudW1iZXIKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZVRpbWVvdXQoP2Zsb2F0ICR0aW1lb3V0KTogP2Zsb2F0CiAgICB7CiAgICAgICAgJHRpbWVvdXQgPSAoZmxvYXQpICR0aW1lb3V0OwoKICAgICAgICBpZiAoMC4wID09PSAkdGltZW91dCkgewogICAgICAgICAgICAkdGltZW91dCA9IG51bGw7CiAgICAgICAgfSBlbHNlaWYgKCR0aW1lb3V0IDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdGltZW91dCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlciBvciBmbG9hdCBudW1iZXIuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRpbWVvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkcyBwaXBlcywgZXhlY3V0ZXMgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIFdoZXRoZXIgdG8gdXNlIGJsb2NraW5nIGNhbGxzIG9yIG5vdAogICAgICogQHBhcmFtIGJvb2wgJGNsb3NlICAgIFdoZXRoZXIgdG8gY2xvc2UgZmlsZSBoYW5kbGVzIG9yIG5vdAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlYWRQaXBlcyhib29sICRibG9ja2luZywgYm9vbCAkY2xvc2UpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wcm9jZXNzUGlwZXMtPnJlYWRBbmRXcml0ZSgkYmxvY2tpbmcsICRjbG9zZSk7CgogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT5jYWxsYmFjazsKICAgICAgICBmb3JlYWNoICgkcmVzdWx0IGFzICR0eXBlID0+ICRkYXRhKSB7CiAgICAgICAgICAgIGlmICgzICE9PSAkdHlwZSkgewogICAgICAgICAgICAgICAgJGNhbGxiYWNrKHNlbGY6OlNURE9VVCA9PT0gJHR5cGUgPyBzZWxmOjpPVVQgOiBzZWxmOjpFUlIsICRkYXRhKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ3NpZ25hbGVkJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tTdGF0dXNbJ2V4aXRjb2RlJ10gPSAoaW50KSAkZGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyBwcm9jZXNzIHJlc291cmNlLCBjbG9zZXMgZmlsZSBoYW5kbGVzLCBzZXRzIHRoZSBleGl0Y29kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgZXhpdGNvZGUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbG9zZSgpOiBpbnQKICAgIHsKICAgICAgICAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5jbG9zZSgpOwogICAgICAgIGlmICgkdGhpcy0+cHJvY2VzcykgewogICAgICAgICAgICBwcm9jX2Nsb3NlKCR0aGlzLT5wcm9jZXNzKTsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3MgPSBudWxsOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZXhpdGNvZGUgPSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddOwogICAgICAgICR0aGlzLT5zdGF0dXMgPSBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRDsKCiAgICAgICAgaWYgKC0xID09PSAkdGhpcy0+ZXhpdGNvZGUpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3NpZ25hbGVkJ10gJiYgMCA8ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3Rlcm1zaWcnXSkgewogICAgICAgICAgICAgICAgLy8gaWYgcHJvY2VzcyBoYXMgYmVlbiBzaWduYWxlZCwgbm8gZXhpdGNvZGUgYnV0IGEgdmFsaWQgdGVybXNpZywgYXBwbHkgVW5peCBjb252ZW50aW9uCiAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdGNvZGUgPSAxMjggKyAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ107CiAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+aXNTaWdjaGlsZEVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsnc2lnbmFsZWQnXSA9IHRydWU7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ10gPSAtMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRnJlZSBtZW1vcnkgZnJvbSBzZWxmLXJlZmVyZW5jZSBjYWxsYmFjayBjcmVhdGVkIGJ5IGJ1aWxkQ2FsbGJhY2sKICAgICAgICAvLyBEb2luZyBzbyBpbiBvdGhlciBjb250ZXh0cyBsaWtlIF9fZGVzdHJ1Y3Qgb3IgYnkgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgaW5lZmZlY3RpdmUKICAgICAgICAvLyBOb3cgcGlwZXMgYXJlIGNsb3NlZCwgc28gdGhlIGNhbGxiYWNrIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSBudWxsOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4aXRjb2RlOwogICAgfQoKICAgIC8qKgogICAgICogUmVzZXRzIGRhdGEgcmVsYXRlZCB0byB0aGUgbGF0ZXN0IHJ1biBvZiB0aGUgcHJvY2Vzcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXNldFByb2Nlc3NEYXRhKCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RhcnR0aW1lID0gbnVsbDsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSBudWxsOwogICAgICAgICR0aGlzLT5leGl0Y29kZSA9IG51bGw7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzID0gW107CiAgICAgICAgJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvbiA9IG51bGw7CiAgICAgICAgJHRoaXMtPnN0ZG91dCA9IGZvcGVuKCdwaHA6Ly90ZW1wL21heG1lbW9yeTonLigxMDI0ICogMTAyNCksICd3KycpOwogICAgICAgICR0aGlzLT5zdGRlcnIgPSBmb3BlbigncGhwOi8vdGVtcC9tYXhtZW1vcnk6Jy4oMTAyNCAqIDEwMjQpLCAndysnKTsKICAgICAgICAkdGhpcy0+cHJvY2VzcyA9IG51bGw7CiAgICAgICAgJHRoaXMtPmxhdGVzdFNpZ25hbCA9IG51bGw7CiAgICAgICAgJHRoaXMtPnN0YXR1cyA9IHNlbGY6OlNUQVRVU19SRUFEWTsKICAgICAgICAkdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQgPSAwOwogICAgICAgICR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0ID0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmRzIGEgUE9TSVggc2lnbmFsIHRvIHRoZSBwcm9jZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICRzaWduYWwgICAgICAgICBBIHZhbGlkIFBPU0lYIHNpZ25hbCAoc2VlIGh0dHBzOi8vcGhwLm5ldC9wY250bC5jb25zdGFudHMpCiAgICAgKiBAcGFyYW0gYm9vbCAkdGhyb3dFeGNlcHRpb24gV2hldGhlciB0byB0aHJvdyBleGNlcHRpb24gaW4gY2FzZSBzaWduYWwgZmFpbGVkCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiAgIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJbiBjYXNlIC0tZW5hYmxlLXNpZ2NoaWxkIGlzIGFjdGl2YXRlZCBhbmQgdGhlIHByb2Nlc3MgY2FuJ3QgYmUga2lsbGVkCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gSW4gY2FzZSBvZiBmYWlsdXJlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZG9TaWduYWwoaW50ICRzaWduYWwsIGJvb2wgJHRocm93RXhjZXB0aW9uKTogYm9vbAogICAgewogICAgICAgIGlmIChudWxsID09PSAkcGlkID0gJHRoaXMtPmdldFBpZCgpKSB7CiAgICAgICAgICAgIGlmICgkdGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignQ2Fubm90IHNlbmQgc2lnbmFsIG9uIGEgbm9uIHJ1bm5pbmcgcHJvY2Vzcy4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IFxESVJFQ1RPUllfU0VQQVJBVE9SKSB7CiAgICAgICAgICAgIGV4ZWMoc3ByaW50ZigndGFza2tpbGwgL0YgL1QgL1BJRCAlZCAyPiYxJywgJHBpZCksICRvdXRwdXQsICRleGl0Q29kZSk7CiAgICAgICAgICAgIGlmICgkZXhpdENvZGUgJiYgJHRoaXMtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRocm93RXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVW5hYmxlIHRvIGtpbGwgdGhlIHByb2Nlc3MgKCVzKS4nLCBpbXBsb2RlKCcgJywgJG91dHB1dCkpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoISR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAkb2sgPSBAcHJvY190ZXJtaW5hdGUoJHRoaXMtPnByb2Nlc3MsICRzaWduYWwpOwogICAgICAgICAgICB9IGVsc2VpZiAoXGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfa2lsbCcpKSB7CiAgICAgICAgICAgICAgICAkb2sgPSBAcG9zaXhfa2lsbCgkcGlkLCAkc2lnbmFsKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRvayA9IHByb2Nfb3BlbihzcHJpbnRmKCdraWxsIC0lZCAlZCcsICRzaWduYWwsICRwaWQpLCBbMiA9PiBbJ3BpcGUnLCAndyddXSwgJHBpcGVzKSkgewogICAgICAgICAgICAgICAgJG9rID0gZmFsc2UgPT09IGZnZXRzKCRwaXBlc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkb2spIHsKICAgICAgICAgICAgICAgIGlmICgkdGhyb3dFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKCdFcnJvciB3aGlsZSBzZW5kaW5nIHNpZ25hbCAiJXMiLicsICRzaWduYWwpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5sYXRlc3RTaWduYWwgPSAkc2lnbmFsOwogICAgICAgICR0aGlzLT5mYWxsYmFja1N0YXR1c1snc2lnbmFsZWQnXSA9IHRydWU7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWydleGl0Y29kZSddID0gLTE7CiAgICAgICAgJHRoaXMtPmZhbGxiYWNrU3RhdHVzWyd0ZXJtc2lnJ10gPSAkdGhpcy0+bGF0ZXN0U2lnbmFsOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByZXBhcmVXaW5kb3dzQ29tbWFuZExpbmUoc3RyaW5nICRjbWQsIGFycmF5ICYkZW52KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHVpZCA9IHVuaXFpZCgnJywgdHJ1ZSk7CiAgICAgICAgJHZhckNvdW50ID0gMDsKICAgICAgICAkdmFyQ2FjaGUgPSBbXTsKICAgICAgICAkY21kID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnLyIoPzooCiAgICAgICAgICAgICAgICBbXiIlIV5dKisKICAgICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgICAgICg/OiAhTEYhIHwgIig/OlxeWyUhXl0pPysiICkKICAgICAgICAgICAgICAgICAgICBbXiIlIV5dKisKICAgICAgICAgICAgICAgICkrKwogICAgICAgICAgICApIHwgW14iXSorICkiL3gnLAogICAgICAgICAgICBmdW5jdGlvbiAoJG0pIHVzZSAoJiRlbnYsICYkdmFyQ2FjaGUsICYkdmFyQ291bnQsICR1aWQpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJG1bMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRtWzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJDYWNoZVskbVswXV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YXJDYWNoZVskbVswXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RyX2NvbnRhaW5zKCR2YWx1ZSA9ICRtWzFdLCAiXDAiKSkgewogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKCJcMCIsICc/JywgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gc3RycGJyaygkdmFsdWUsICJcIiUhXG4iKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnIicuJHZhbHVlLiciJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJfcmVwbGFjZShbJyFMRiEnLCAnIl4hIicsICciXiUiJywgJyJeXiInLCAnIiInXSwgWyJcbiIsICchJywgJyUnLCAnXicsICciJ10sICR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAnIicucHJlZ19yZXBsYWNlKCcvKFxcXFwqKSIvJywgJyQxJDFcXCInLCAkdmFsdWUpLiciJzsKICAgICAgICAgICAgICAgICR2YXIgPSAkdWlkLisrJHZhckNvdW50OwoKICAgICAgICAgICAgICAgICRlbnZbJHZhcl0gPSAkdmFsdWU7CgogICAgICAgICAgICAgICAgcmV0dXJuICR2YXJDYWNoZVskbVswXV0gPSAnIScuJHZhci4nISc7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICRjbWQKICAgICAgICApOwoKICAgICAgICBzdGF0aWMgJGNvbVNwZWM7CgogICAgICAgIGlmICghJGNvbVNwZWMgJiYgJGNvbVNwZWMgPSAobmV3IEV4ZWN1dGFibGVGaW5kZXIoKSktPmZpbmQoJ2NtZC5leGUnKSkgewogICAgICAgICAgICAvLyBFc2NhcGUgYWNjb3JkaW5nIHRvIENvbW1hbmRMaW5lVG9Bcmd2VyBydWxlcwogICAgICAgICAgICAkY29tU3BlYyA9ICciJy5wcmVnX3JlcGxhY2UoJ3soXFxcXCorKSJ9JywgJyQxJDFcIicsICRjb21TcGVjKSAuJyInOwogICAgICAgIH0KCiAgICAgICAgJGNtZCA9ICgkY29tU3BlYyA/PyAnY21kJykuJyAvVjpPTiAvRTpPTiAvRCAvQyAoJy5zdHJfcmVwbGFjZSgiXG4iLCAnICcsICRjbWQpLicpJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJvY2Vzc1BpcGVzLT5nZXRGaWxlcygpIGFzICRvZmZzZXQgPT4gJGZpbGVuYW1lKSB7CiAgICAgICAgICAgICRjbWQgLj0gJyAnLiRvZmZzZXQuJz4iJy4kZmlsZW5hbWUuJyInOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjbWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbnN1cmVzIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb3IgdGVybWluYXRlZCwgdGhyb3dzIGEgTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb2Nlc3MgaGFzIGEgbm90IHN0YXJ0ZWQuCiAgICAgKgogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBpZiB0aGUgcHJvY2VzcyBoYXMgbm90IHJ1bgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcXVpcmVQcm9jZXNzSXNTdGFydGVkKHN0cmluZyAkZnVuY3Rpb25OYW1lKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdQcm9jZXNzIG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgY2FsbGluZyAiJXMoKSIuJywgJGZ1bmN0aW9uTmFtZSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuc3VyZXMgdGhlIHByb2Nlc3MgaXMgdGVybWluYXRlZCwgdGhyb3dzIGEgTG9naWNFeGNlcHRpb24gaWYgdGhlIHByb2Nlc3MgaGFzIGEgc3RhdHVzIGRpZmZlcmVudCB0aGFuICJ0ZXJtaW5hdGVkIi4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIGlmIHRoZSBwcm9jZXNzIGlzIG5vdCB5ZXQgdGVybWluYXRlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcXVpcmVQcm9jZXNzSXNUZXJtaW5hdGVkKHN0cmluZyAkZnVuY3Rpb25OYW1lKQogICAgewogICAgICAgIGlmICghJHRoaXMtPmlzVGVybWluYXRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdQcm9jZXNzIG11c3QgYmUgdGVybWluYXRlZCBiZWZvcmUgY2FsbGluZyAiJXMoKSIuJywgJGZ1bmN0aW9uTmFtZSkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVzY2FwZXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIHNoZWxsIGFyZ3VtZW50LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVzY2FwZUFyZ3VtZW50KD9zdHJpbmcgJGFyZ3VtZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCcnID09PSAkYXJndW1lbnQgfHwgbnVsbCA9PT0gJGFyZ3VtZW50KSB7CiAgICAgICAgICAgIHJldHVybiAnIiInOwogICAgICAgIH0KICAgICAgICBpZiAoJ1xcJyAhPT0gXERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgcmV0dXJuICInIi5zdHJfcmVwbGFjZSgiJyIsICInXFwnJyIsICRhcmd1bWVudCkuIiciOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyX2NvbnRhaW5zKCRhcmd1bWVudCwgIlwwIikpIHsKICAgICAgICAgICAgJGFyZ3VtZW50ID0gc3RyX3JlcGxhY2UoIlwwIiwgJz8nLCAkYXJndW1lbnQpOwogICAgICAgIH0KICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9bKCklIV4iPD4mfFxzW1xdPTsqP1wnJF0vJywgJGFyZ3VtZW50KSkgewogICAgICAgICAgICByZXR1cm4gJGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICAkYXJndW1lbnQgPSBwcmVnX3JlcGxhY2UoJy8oXFxcXCspJC8nLCAnJDEkMScsICRhcmd1bWVudCk7CgogICAgICAgIHJldHVybiAnIicuc3RyX3JlcGxhY2UoWyciJywgJ14nLCAnJScsICchJywgIlxuIl0sIFsnIiInLCAnIl5eIicsICciXiUiJywgJyJeISInLCAnIUxGISddLCAkYXJndW1lbnQpLiciJzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlcnMoc3RyaW5nICRjb21tYW5kbGluZSwgYXJyYXkgJGVudikKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvIlwkXHs6KFtfYS16QS1aXSsrW19hLXpBLVowLTldKispXH0iLycsIGZ1bmN0aW9uICgkbWF0Y2hlcykgdXNlICgkY29tbWFuZGxpbmUsICRlbnYpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkZW52WyRtYXRjaGVzWzFdXSkgfHwgZmFsc2UgPT09ICRlbnZbJG1hdGNoZXNbMV1dKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0NvbW1hbmQgbGluZSBpcyBtaXNzaW5nIGEgdmFsdWUgZm9yIHBhcmFtZXRlciAiJXMiOiAnLCAkbWF0Y2hlc1sxXSkuJGNvbW1hbmRsaW5lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5lc2NhcGVBcmd1bWVudCgkZW52WyRtYXRjaGVzWzFdXSk7CiAgICAgICAgfSwgJGNvbW1hbmRsaW5lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERlZmF1bHRFbnYoKTogYXJyYXkKICAgIHsKICAgICAgICAkZW52ID0gZ2V0ZW52KCk7CiAgICAgICAgJGVudiA9ICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2ludGVyc2VjdF91a2V5KCRlbnYsICRfU0VSVkVSLCAnc3RyY2FzZWNtcCcpIDogYXJyYXlfaW50ZXJzZWN0X2tleSgkZW52LCAkX1NFUlZFUikpID86ICRlbnY7CgogICAgICAgIHJldHVybiAkX0VOViArICgnXFwnID09PSBcRElSRUNUT1JZX1NFUEFSQVRPUiA/IGFycmF5X2RpZmZfdWtleSgkZW52LCAkX0VOViwgJ3N0cmNhc2VjbXAnKSA6ICRlbnYpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/ProcessUtils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBQcm9jZXNzVXRpbHMgaXMgYSBidW5jaCBvZiB1dGlsaXR5IG1ldGhvZHMuCiAqCiAqIFRoaXMgY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgb25seSBhbmQgaXMgbm90IG1lYW50IHRvIGJlIGluc3RhbnRpYXRlZC4KICoKICogQGF1dGhvciBNYXJ0aW4gSGFzb8WIIDxtYXJ0aW4uaGFzb25AZ21haWwuY29tPgogKi8KY2xhc3MgUHJvY2Vzc1V0aWxzCnsKICAgIC8qKgogICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZXMgYW5kIG5vcm1hbGl6ZXMgYSBQcm9jZXNzIGlucHV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhbGxlciBUaGUgbmFtZSBvZiBtZXRob2QgY2FsbCB0aGF0IHZhbGlkYXRlcyB0aGUgaW5wdXQKICAgICAqIEBwYXJhbSBtaXhlZCAgJGlucHV0ICBUaGUgaW5wdXQgdG8gdmFsaWRhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSW4gY2FzZSB0aGUgaW5wdXQgaXMgbm90IHZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dChzdHJpbmcgJGNhbGxlciwgJGlucHV0KQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkaW5wdXQpIHsKICAgICAgICAgICAgaWYgKFxpc19yZXNvdXJjZSgkaW5wdXQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChcaXNfc3RyaW5nKCRpbnB1dCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFxpc19zY2FsYXIoJGlucHV0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICRpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgUHJvY2VzcykgewogICAgICAgICAgICAgICAgcmV0dXJuICRpbnB1dC0+Z2V0SXRlcmF0b3IoJGlucHV0OjpJVEVSX1NLSVBfRVJSKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGlucHV0IGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaW5wdXQgaW5zdGFuY2VvZiBcVHJhdmVyc2FibGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgXEl0ZXJhdG9ySXRlcmF0b3IoJGlucHV0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCciJXMiIG9ubHkgYWNjZXB0cyBzdHJpbmdzLCBUcmF2ZXJzYWJsZSBvYmplY3RzIG9yIHN0cmVhbSByZXNvdXJjZXMuJywgJGNhbGxlcikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpbnB1dDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/symfony/process/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UHJvY2VzcyBDb21wb25lbnQKPT09PT09PT09PT09PT09PT0KClRoZSBQcm9jZXNzIGNvbXBvbmVudCBleGVjdXRlcyBjb21tYW5kcyBpbiBzdWItcHJvY2Vzc2VzLgoKU3BvbnNvcgotLS0tLS0tCgpUaGUgUHJvY2VzcyBjb21wb25lbnQgZm9yIFN5bWZvbnkgNS40LzYuMCBpcyBbYmFja2VkXVsxXSBieSBbU2Vuc2lvTGFic11bMl0uCgpBcyB0aGUgY3JlYXRvciBvZiBTeW1mb255LCBTZW5zaW9MYWJzIHN1cHBvcnRzIGNvbXBhbmllcyB1c2luZyBTeW1mb255LCB3aXRoIGFuCm9mZmVyaW5nIGVuY29tcGFzc2luZyBjb25zdWx0YW5jeSwgZXhwZXJ0aXNlLCBzZXJ2aWNlcywgdHJhaW5pbmcsIGFuZCB0ZWNobmljYWwKYXNzaXN0YW5jZSB0byBlbnN1cmUgdGhlIHN1Y2Nlc3Mgb2Ygd2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHByb2plY3RzLgoKSGVscCBTeW1mb255IGJ5IFtzcG9uc29yaW5nXVszXSBpdHMgZGV2ZWxvcG1lbnQhCgpSZXNvdXJjZXMKLS0tLS0tLS0tCgogKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9jb21wb25lbnRzL3Byb2Nlc3MuaHRtbCkKICogW0NvbnRyaWJ1dGluZ10oaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9jb250cmlidXRpbmcvaW5kZXguaHRtbCkKICogW1JlcG9ydCBpc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3N5bWZvbnkvaXNzdWVzKSBhbmQKICAgW3NlbmQgUHVsbCBSZXF1ZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvc3ltZm9ueS9wdWxscykKICAgaW4gdGhlIFttYWluIFN5bWZvbnkgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvc3ltZm9ueSkKClsxXTogaHR0cHM6Ly9zeW1mb255LmNvbS9iYWNrZXJzClsyXTogaHR0cHM6Ly9zZW5zaW9sYWJzLmNvbQpbM106IGh0dHBzOi8vc3ltZm9ueS5jb20vc3BvbnNvcgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAidGhlY29kaW5nbWFjaGluZS9zYWZlIiwKICAgICJkZXNjcmlwdGlvbiI6ICJQSFAgY29yZSBmdW5jdGlvbnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIGluc3RlYWQgb2YgcmV0dXJuaW5nIEZBTFNFIG9uIGVycm9yIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiU2FmZVxcIjogWwogICAgICAgICAgICAgICAgImxpYi8iLAogICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQvIiwKICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQvIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICJkZXByZWNhdGVkL2FwYy5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9saWJldmVudC5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9tc3NxbC5waHAiLAogICAgICAgICAgICAiZGVwcmVjYXRlZC9zdGF0cy5waHAiLAogICAgICAgICAgICAibGliL3NwZWNpYWxfY2FzZXMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9hcGFjaGUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9hcGN1LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvYXJyYXkucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9iemlwMi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2NhbGVuZGFyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvY2xhc3NvYmoucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jb20ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jdWJyaWQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9jdXJsLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZGF0ZXRpbWUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9kaXIucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9laW8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9lcnJvcmZ1bmMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9leGVjLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsZWluZm8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9maWxlc3lzdGVtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZmlsdGVyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnBtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnRwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvZnVuY2hhbmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9nbXAucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9nbnVwZy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2hhc2gucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9pYmFzZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2libURiMi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2ljb252LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvaW1hZ2UucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9pbWFwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvaW5mby5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2luZ3Jlcy1paS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2lub3RpZnkucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9qc29uLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvbGRhcC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2xpYnhtbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL2x6Zi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21haWxwYXJzZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21ic3RyaW5nLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvbWlzYy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL21zcWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9teXNxbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsaS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRNcy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL215c3FsbmRRYy5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL25ldHdvcmsucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9vY2k4LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvb3BjYWNoZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL29wZW5zc2wucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9vdXRjb250cm9sLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvcGFzc3dvcmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wY250bC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3BjcmUucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wZGYucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wZ3NxbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3Bvc2l4LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvcHMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9wc3BlbGwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9yZWFkbGluZS5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3JwbWluZm8ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9ycmQucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zZW0ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zZXNzaW9uLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc2htb3AucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zaW1wbGV4bWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zb2NrZXRzLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc29kaXVtLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc29sci5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NwbC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NxbHNydi5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NzZGVlcC5waHAiLAogICAgICAgICAgICAiZ2VuZXJhdGVkL3NzaDIucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJlYW0ucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC9zdHJpbmdzLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvc3dvb2xlLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdW9kYmMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC91b3B6LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdXJsLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvdmFyLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQveGRpZmYucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC94bWwucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC94bWxycGMucGhwIiwKICAgICAgICAgICAgImdlbmVyYXRlZC95YW1sLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQveWF6LnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvemlwLnBocCIsCiAgICAgICAgICAgICJnZW5lcmF0ZWQvemxpYi5waHAiCiAgICAgICAgXQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj03LjIiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTIiLAogICAgICAgICJ0aGVjb2RpbmdtYWNoaW5lL3BocHN0YW4tc3RyaWN0LXJ1bGVzIjogIl4wLjEyIiwKICAgICAgICAic3F1aXpsYWJzL3BocF9jb2Rlc25pZmZlciI6ICJeMy4yIgogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJwaHBzdGFuIjogInBocHN0YW4gYW5hbHlzZSBsaWIgLWMgcGhwc3Rhbi5uZW9uIC0tbGV2ZWw9bWF4IC0tbm8tcHJvZ3Jlc3MgLXZ2diIsCiAgICAgICAgImNzLWZpeCI6ICJwaHBjYmYiLAogICAgICAgICJjcy1jaGVjayI6ICJwaHBjcyIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMC4xLWRldiIKICAgICAgICB9CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/apc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGNFeGNlcHRpb247CgovKioKICogUmV0cmlldmVzIGNhY2hlZCBpbmZvcm1hdGlvbiBhbmQgbWV0YS1kYXRhIGZyb20gQVBDJ3MgZGF0YSBzdG9yZS4KICoKICogQHBhcmFtIHN0cmluZyAkY2FjaGVfdHlwZSBJZiBjYWNoZV90eXBlIGlzICJ1c2VyIiwKICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgY2FjaGUgd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgY2FjaGVfdHlwZSBpcyAiZmlsZWhpdHMiLAogKiBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBmaWxlcyBoYXZlIGJlZW4gc2VydmVkIGZyb20gdGhlIGJ5dGVjb2RlIGNhY2hlCiAqIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgZmVhdHVyZSBtdXN0IGJlIGVuYWJsZWQgYXQKICogY29tcGlsZSB0aW1lIHVzaW5nIC0tZW5hYmxlLWZpbGVoaXRzLgogKgogKiBJZiBhbiBpbnZhbGlkIG9yIG5vIGNhY2hlX3R5cGUgaXMgc3BlY2lmaWVkLCBpbmZvcm1hdGlvbiBhYm91dAogKiB0aGUgc3lzdGVtIGNhY2hlIChjYWNoZWQgZmlsZXMpIHdpbGwgYmUgcmV0dXJuZWQuCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIElmIGxpbWl0ZWQgaXMgVFJVRSwgdGhlCiAqIHJldHVybiB2YWx1ZSB3aWxsIGV4Y2x1ZGUgdGhlIGluZGl2aWR1YWwgbGlzdCBvZiBjYWNoZSBlbnRyaWVzLiAgVGhpcwogKiBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gb3B0aW1pemUgY2FsbHMgZm9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgogKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIGNhY2hlZCBkYXRhIChhbmQgbWV0YS1kYXRhKQogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2NhY2hlX2luZm8oc3RyaW5nICRjYWNoZV90eXBlID0gJycsIGJvb2wgJGxpbWl0ZWQgPSBmYWxzZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2NhY2hlX2luZm8oJGNhY2hlX3R5cGUsICRsaW1pdGVkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBhcGNfY2FzIHVwZGF0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBpbnRlZ2VyIHZhbHVlIGlmIHRoZQogKiBvbGQgcGFyYW1ldGVyIG1hdGNoZXMgdGhlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWUKICogd2l0aCB0aGUgdmFsdWUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvbGQgVGhlIG9sZCB2YWx1ZSAodGhlIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQpLgogKiBAcGFyYW0gaW50ICRuZXcgVGhlIG5ldyB2YWx1ZSB0byB1cGRhdGUgdG8uCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfY2FzKHN0cmluZyAka2V5LCBpbnQgJG9sZCwgaW50ICRuZXcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2Nhcygka2V5LCAkb2xkLCAkbmV3KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RvcmVzIGEgZmlsZSBpbiB0aGUgYnl0ZWNvZGUgY2FjaGUsIGJ5cGFzc2luZyBhbGwgZmlsdGVycy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRnVsbCBvciByZWxhdGl2ZSBwYXRoIHRvIGEgUEhQIGZpbGUgdGhhdCB3aWxsIGJlIGNvbXBpbGVkIGFuZCBzdG9yZWQgaW4KICogdGhlIGJ5dGVjb2RlIGNhY2hlLgogKiBAcGFyYW0gYm9vbCAkYXRvbWljCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfY29tcGlsZV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJGF0b21pYyA9IHRydWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2NvbXBpbGVfZmlsZSgkZmlsZW5hbWUsICRhdG9taWMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERlY3JlYXNlcyBhIHN0b3JlZCBpbnRlZ2VyIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgZGVjcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBkZWNyZWFzZS4KICogQHBhcmFtIGJvb2x8bnVsbCAkc3VjY2VzcyBPcHRpb25hbGx5IHBhc3MgdGhlIHN1Y2Nlc3Mgb3IgZmFpbCBib29sZWFuIHZhbHVlIHRvCiAqIHRoaXMgcmVmZXJlbmNlZCB2YXJpYWJsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBrZXkncyB2YWx1ZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfZGVjKHN0cmluZyAka2V5LCBpbnQgJHN0ZXAgPSAxLCA/Ym9vbCAmJHN1Y2Nlc3MgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjX2RlYygka2V5LCAkc3RlcCwgJHN1Y2Nlc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGRlZmluZSBpcyBub3RvcmlvdXNseSBzbG93LiBTaW5jZSB0aGUgbWFpbiBiZW5lZml0IG9mCiAqIEFQQyBpcyB0byBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2NyaXB0cy9hcHBsaWNhdGlvbnMsIHRoaXMgbWVjaGFuaXNtCiAqIGlzIHByb3ZpZGVkIHRvIHN0cmVhbWxpbmUgdGhlIHByb2Nlc3Mgb2YgbWFzcyBjb25zdGFudCBkZWZpbml0aW9uLiBIb3dldmVyLAogKiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYXMgd2VsbCBhcyBhbnRpY2lwYXRlZC4KICoKICogRm9yIGEgYmV0dGVyLXBlcmZvcm1pbmcgc29sdXRpb24sIHRyeSB0aGUKICogaGlkZWYgZXh0ZW5zaW9uIGZyb20gUEVDTC4KICoKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdGFudCBzZXQKICogYmVpbmcgc3RvcmVkLiBUaGlzIGtleSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZQogKiBzdG9yZWQgY29uc3RhbnRzIGluIGFwY19sb2FkX2NvbnN0YW50cy4KICogQHBhcmFtIGFycmF5ICRjb25zdGFudHMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgY29uc3RhbnRfbmFtZSA9Jmd0OyB2YWx1ZQogKiBwYWlycy4gVGhlIGNvbnN0YW50X25hbWUgbXVzdCBmb2xsb3cgdGhlIG5vcm1hbAogKiBjb25zdGFudCBuYW1pbmcgcnVsZXMuCiAqIHZhbHVlIG11c3QgZXZhbHVhdGUgdG8gYSBzY2FsYXIgdmFsdWUuCiAqIEBwYXJhbSBib29sICRjYXNlX3NlbnNpdGl2ZSBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGNvbnN0YW50cyBpcyB0byBiZSBkZWNsYXJlZCBjYXNlLXNlbnNpdGl2ZTsKICogaS5lLiBDT05TVEFOVCBhbmQgQ29uc3RhbnQKICogcmVwcmVzZW50IGRpZmZlcmVudCB2YWx1ZXMuIElmIHRoaXMgcGFyYW1ldGVyIGV2YWx1YXRlcyB0byBGQUxTRSB0aGUKICogY29uc3RhbnRzIHdpbGwgYmUgZGVjbGFyZWQgYXMgY2FzZS1pbnNlbnNpdGl2ZSBzeW1ib2xzLgogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2RlZmluZV9jb25zdGFudHMoc3RyaW5nICRrZXksIGFycmF5ICRjb25zdGFudHMsIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZGVmaW5lX2NvbnN0YW50cygka2V5LCAkY29uc3RhbnRzLCAkY2FzZV9zZW5zaXRpdmUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWxldGVzIHRoZSBnaXZlbiBmaWxlcyBmcm9tIHRoZSBvcGNvZGUgY2FjaGUuCiAqCiAqIEBwYXJhbSBtaXhlZCAka2V5cyBUaGUgZmlsZXMgdG8gYmUgZGVsZXRlZC4gQWNjZXB0cyBhIHN0cmluZywKICogYXJyYXkgb2Ygc3RyaW5ncywgb3IgYW4gQVBDSXRlcmF0b3IKICogb2JqZWN0LgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKiBPciBpZiBrZXlzIGlzIGFuIGFycmF5LCB0aGVuCiAqIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MsIG9yIGFuIGFycmF5IG9mIGZhaWxlZCBmaWxlcwogKiBpcyByZXR1cm5lZC4KICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19kZWxldGVfZmlsZSgka2V5cykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZGVsZXRlX2ZpbGUoJGtleXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlbW92ZXMgYSBzdG9yZWQgdmFyaWFibGUgZnJvbSB0aGUgY2FjaGUuCiAqCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW118XEFQQ0l0ZXJhdG9yICRrZXkgVGhlIGtleSB1c2VkIHRvIHN0b3JlIHRoZSB2YWx1ZSAod2l0aAogKiBhcGNfc3RvcmUpLgogKiBAdGhyb3dzIEFwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjX2RlbGV0ZSgka2V5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY19kZWxldGUoJGtleSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluY3JlYXNlcyBhIHN0b3JlZCBudW1iZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyBpbmNyZWFzZWQuCiAqIEBwYXJhbSBpbnQgJHN0ZXAgVGhlIHN0ZXAsIG9yIHZhbHVlIHRvIGluY3JlYXNlLgogKiBAcGFyYW0gYm9vbHxudWxsICRzdWNjZXNzIE9wdGlvbmFsbHkgcGFzcyB0aGUgc3VjY2VzcyBvciBmYWlsIGJvb2xlYW4gdmFsdWUgdG8KICogdGhpcyByZWZlcmVuY2VkIHZhcmlhYmxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGtleSdzIHZhbHVlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19pbmMoc3RyaW5nICRrZXksIGludCAkc3RlcCA9IDEsID9ib29sICYkc3VjY2VzcyA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfaW5jKCRrZXksICRzdGVwLCAkc3VjY2Vzcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTG9hZHMgYSBzZXQgb2YgY29uc3RhbnRzIGZyb20gdGhlIGNhY2hlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIG5hbWUgb2YgdGhlIGNvbnN0YW50IHNldCAodGhhdCB3YXMgc3RvcmVkIHdpdGgKICogYXBjX2RlZmluZV9jb25zdGFudHMpIHRvIGJlIHJldHJpZXZlZC4KICogQHBhcmFtIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgY29uc3RhbnRzIGlzIHRvIGJlIGRlY2xhcmVkIGNhc2Utc2Vuc2l0aXZlOwogKiBpLmUuIENPTlNUQU5UIGFuZCBDb25zdGFudAogKiByZXByZXNlbnQgZGlmZmVyZW50IHZhbHVlcy4gSWYgdGhpcyBwYXJhbWV0ZXIgZXZhbHVhdGVzIHRvIEZBTFNFIHRoZQogKiBjb25zdGFudHMgd2lsbCBiZSBkZWNsYXJlZCBhcyBjYXNlLWluc2Vuc2l0aXZlIHN5bWJvbHMuCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfbG9hZF9jb25zdGFudHMoc3RyaW5nICRrZXksIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfbG9hZF9jb25zdGFudHMoJGtleSwgJGNhc2Vfc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0cmlldmVzIEFQQydzIFNoYXJlZCBNZW1vcnkgQWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4KICoKICogQHBhcmFtIGJvb2wgJGxpbWl0ZWQgV2hlbiBzZXQgdG8gRkFMU0UgKGRlZmF1bHQpIGFwY19zbWFfaW5mbyB3aWxsCiAqIHJldHVybiBhIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc2VnbWVudC4KICogQHJldHVybiBhcnJheSBBcnJheSBvZiBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gZGF0YTsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBBcGNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY19zbWFfaW5mbyhib29sICRsaW1pdGVkID0gZmFsc2UpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY19zbWFfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/ApcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/LibeventException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExpYmV2ZW50RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/MssqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1zc3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/Exceptions/StatsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0YXRzRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/functionsList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJldHVybiBbCiAgICAnYXBjX2NhY2hlX2luZm8nLAogICAgJ2FwY19jYXMnLAogICAgJ2FwY19jb21waWxlX2ZpbGUnLAogICAgJ2FwY19kZWMnLAogICAgJ2FwY19kZWZpbmVfY29uc3RhbnRzJywKICAgICdhcGNfZGVsZXRlJywKICAgICdhcGNfZGVsZXRlX2ZpbGUnLAogICAgJ2FwY19pbmMnLAogICAgJ2FwY19sb2FkX2NvbnN0YW50cycsCiAgICAnYXBjX3NtYV9pbmZvJywKICAgICdldmVudF9hZGQnLAogICAgJ2V2ZW50X2Jhc2VfbG9vcGJyZWFrJywKICAgICdldmVudF9iYXNlX2xvb3BleGl0JywKICAgICdldmVudF9iYXNlX25ldycsCiAgICAnZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0JywKICAgICdldmVudF9iYXNlX3JlaW5pdCcsCiAgICAnZXZlbnRfYmFzZV9zZXQnLAogICAgJ2V2ZW50X2J1ZmZlcl9iYXNlX3NldCcsCiAgICAnZXZlbnRfYnVmZmVyX2Rpc2FibGUnLAogICAgJ2V2ZW50X2J1ZmZlcl9lbmFibGUnLAogICAgJ2V2ZW50X2J1ZmZlcl9uZXcnLAogICAgJ2V2ZW50X2J1ZmZlcl9wcmlvcml0eV9zZXQnLAogICAgJ2V2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2snLAogICAgJ2V2ZW50X2J1ZmZlcl93cml0ZScsCiAgICAnZXZlbnRfZGVsJywKICAgICdldmVudF9uZXcnLAogICAgJ2V2ZW50X3ByaW9yaXR5X3NldCcsCiAgICAnZXZlbnRfc2V0JywKICAgICdldmVudF90aW1lcl9zZXQnLAogICAgJ2ltYWdlcHNlbmNvZGVmb250JywKICAgICdpbWFnZXBzZXh0ZW5kZm9udCcsCiAgICAnaW1hZ2Vwc2ZyZWVmb250JywKICAgICdpbWFnZXBzc2xhbnRmb250JywKICAgICdtc3NxbF9iaW5kJywKICAgICdtc3NxbF9jbG9zZScsCiAgICAnbXNzcWxfY29ubmVjdCcsCiAgICAnbXNzcWxfZGF0YV9zZWVrJywKICAgICdtc3NxbF9maWVsZF9sZW5ndGgnLAogICAgJ21zc3FsX2ZpZWxkX25hbWUnLAogICAgJ21zc3FsX2ZpZWxkX3NlZWsnLAogICAgJ21zc3FsX2ZpZWxkX3R5cGUnLAogICAgJ21zc3FsX2ZyZWVfcmVzdWx0JywKICAgICdtc3NxbF9mcmVlX3N0YXRlbWVudCcsCiAgICAnbXNzcWxfaW5pdCcsCiAgICAnbXNzcWxfcGNvbm5lY3QnLAogICAgJ21zc3FsX3F1ZXJ5JywKICAgICdtc3NxbF9zZWxlY3RfZGInLAogICAgJ3N0YXRzX2NvdmFyaWFuY2UnLAogICAgJ3N0YXRzX3N0YW5kYXJkX2RldmlhdGlvbicsCiAgICAnc3RhdHNfc3RhdF9jb3JyZWxhdGlvbicsCiAgICAnc3RhdHNfc3RhdF9pbm5lcnByb2R1Y3QnLAogICAgJ3N0YXRzX3ZhcmlhbmNlJywKXTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/libevent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMaWJldmVudEV4Y2VwdGlvbjsKCi8qKgogKiBldmVudF9hZGQgc2NoZWR1bGVzIHRoZSBleGVjdXRpb24gb2YgdGhlIGV2ZW50CiAqIHdoZW4gdGhlIGV2ZW50IHNwZWNpZmllZCBpbiBldmVudF9zZXQgb2NjdXJzIG9yIGluIGF0IGxlYXN0IHRoZSB0aW1lCiAqIHNwZWNpZmllZCBieSB0aGUgdGltZW91dCBhcmd1bWVudC4gSWYKICogdGltZW91dCB3YXMgbm90IHNwZWNpZmllZCwgbm90IHRpbWVvdXQgaXMgc2V0LiBUaGUKICogZXZlbnQgbXVzdCBiZSBhbHJlYWR5IGluaXRhbGl6ZWQgYnkgZXZlbnRfc2V0CiAqIGFuZCBldmVudF9iYXNlX3NldCBmdW5jdGlvbnMuIElmIHRoZQogKiBldmVudCBhbHJlYWR5IGhhcyBhIHRpbWVvdXQgc2V0LCBpdCBpcyByZXBsYWNlZCBieQogKiB0aGUgbmV3IG9uZS4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkdGltZW91dCBPcHRpb25hbCB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9hZGQoJGV2ZW50LCBpbnQgJHRpbWVvdXQgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9hZGQoJGV2ZW50LCAkdGltZW91dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWJvcnQgdGhlIGFjdGl2ZSBldmVudCBsb29wIGltbWVkaWF0ZWx5LiBUaGUgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8KICogYnJlYWsgc3RhdGVtZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZS4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9sb29wYnJlYWsoJGV2ZW50X2Jhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9sb29wYnJlYWsoJGV2ZW50X2Jhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBuZXh0IGV2ZW50IGxvb3AgaXRlcmF0aW9uIGFmdGVyIHRoZSBnaXZlbiB0aW1lciBleHBpcmVzIHdpbGwgY29tcGxldGUKICogbm9ybWFsbHksIHRoZW4gZXhpdCB3aXRob3V0IGJsb2NraW5nIGZvciBldmVudHMgYWdhaW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IE9wdGlvbmFsIHRpbWVvdXQgcGFyYW1ldGVyIChpbiBtaWNyb3NlY29uZHMpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX2xvb3BleGl0KCRldmVudF9iYXNlLCBpbnQgJHRpbWVvdXQgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9iYXNlX2xvb3BleGl0KCRldmVudF9iYXNlLCAkdGltZW91dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyBuZXcgZXZlbnQgYmFzZSwgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgaW4gZXZlbnRfYmFzZV9zZXQsCiAqIGV2ZW50X2Jhc2VfbG9vcCBhbmQgb3RoZXIgZnVuY3Rpb25zLgogKgogKiBAcmV0dXJuIHJlc291cmNlIGV2ZW50X2Jhc2VfbmV3IHJldHVybnMgdmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX25ldygpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9uZXcoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgZXZlbnQgcHJpb3JpdHkgbGV2ZWxzLgogKgogKiBCeSBkZWZhdWx0IGFsbCBldmVudHMgYXJlIHNjaGVkdWxlZCB3aXRoIHRoZSBzYW1lIHByaW9yaXR5CiAqIChucHJpb3JpdGllcy8yKS4KICogVXNpbmcgZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0IHlvdSBjYW4gY2hhbmdlIHRoZSBudW1iZXIKICogb2YgZXZlbnQgcHJpb3JpdHkgbGV2ZWxzIGFuZCB0aGVuIHNldCBhIGRlc2lyZWQgcHJpb3JpdHkgZm9yIGVhY2ggZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRucHJpb3JpdGllcyBUaGUgbnVtYmVyIG9mIGV2ZW50IHByaW9yaXR5IGxldmVscy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0KCRldmVudF9iYXNlLCBpbnQgJG5wcmlvcml0aWVzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdCgkZXZlbnRfYmFzZSwgJG5wcmlvcml0aWVzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTb21lIGV2ZW50IG1lY2hhbmlzbXMgZG8gbm90IHN1cnZpdmUgYWNyb3NzIGZvcmsuIFRoZQogKiBldmVudF9iYXNlIG5lZWRzIHRvIGJlIHJlaW5pdGlhbGl6ZWQgd2l0aCB0aGlzCiAqIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSB0aGF0IG5lZWRzIHRvIGJlIHJlLWluaXRpYWxpemVkLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX3JlaW5pdCgkZXZlbnRfYmFzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9iYXNlX3JlaW5pdCgkZXZlbnRfYmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXNzb2NpYXRlcyB0aGUgZXZlbnRfYmFzZSB3aXRoIHRoZQogKiBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRldmVudF9iYXNlIFZhbGlkIGV2ZW50IGJhc2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X2Jhc2Vfc2V0KCRldmVudCwgJGV2ZW50X2Jhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYmFzZV9zZXQoJGV2ZW50LCAkZXZlbnRfYmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXNzaWduIHRoZSBzcGVjaWZpZWQgYmV2ZW50IHRvIHRoZQogKiBldmVudF9iYXNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRldmVudF9iYXNlIFZhbGlkIGV2ZW50IGJhc2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X2J1ZmZlcl9iYXNlX3NldCgkYmV2ZW50LCAkZXZlbnRfYmFzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfYmFzZV9zZXQoJGJldmVudCwgJGV2ZW50X2Jhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERpc2FibGVzIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRldmVudHMgQW55IGNvbWJpbmF0aW9uIG9mIEVWX1JFQUQgYW5kCiAqIEVWX1dSSVRFLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfZGlzYWJsZSgkYmV2ZW50LCBpbnQgJGV2ZW50cyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfZGlzYWJsZSgkYmV2ZW50LCAkZXZlbnRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRldmVudHMgQW55IGNvbWJpbmF0aW9uIG9mIEVWX1JFQUQgYW5kCiAqIEVWX1dSSVRFLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfZW5hYmxlKCRiZXZlbnQsIGludCAkZXZlbnRzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9lbmFibGUoJGJldmVudCwgJGV2ZW50cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGliZXZlbnQgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgb24gdG9wIG9mIHRoZSByZWd1bGFyIGV2ZW50IEFQSS4KICogVXNpbmcgYnVmZmVyZWQgZXZlbnQgeW91IGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBJL08gbWFudWFsbHksIGluc3RlYWQKICogaXQgcHJvdmlkZXMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIHRoYXQgZ2V0IGZpbGxlZCBhbmQgZHJhaW5lZAogKiBhdXRvbWF0aWNhbGx5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBWYWxpZCBQSFAgc3RyZWFtIHJlc291cmNlLiBNdXN0IGJlIGNhc3RhYmxlIHRvIGZpbGUgZGVzY3JpcHRvci4KICogQHBhcmFtIG1peGVkICRyZWFkY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZXJlIGlzIGRhdGEgdG8gcmVhZCwgb3IgTlVMTCBpZgogKiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gbWl4ZWQgJHdyaXRlY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZSBkZXNjcmlwdG9yIGlzIHJlYWR5IGZvciB3cml0aW5nLAogKiBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBtaXhlZCAkZXJyb3JjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhlIGRlc2NyaXB0b3IsIGNhbm5vdCBiZQogKiBOVUxMLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBBbiBhcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrcyAob3B0aW9uYWwpLgogKiBAcmV0dXJuIHJlc291cmNlIGV2ZW50X2J1ZmZlcl9uZXcgcmV0dXJucyBuZXcgYnVmZmVyZWQgZXZlbnQgcmVzb3VyY2UKICogb24gc3VjY2Vzcy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX25ldygkc3RyZWFtLCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFyZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZXZlbnRfYnVmZmVyX25ldygkc3RyZWFtLCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9uZXcoJHN0cmVhbSwgJHJlYWRjYiwgJHdyaXRlY2IsICRlcnJvcmNiKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc2lnbiBhIHByaW9yaXR5IHRvIHRoZSBiZXZlbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBQcmlvcml0eSBsZXZlbC4gQ2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvIGFuZCBjYW5ub3QgZXhjZWVkIG1heGltdW0KICogcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIGV2ZW50IGJhc2UgKHNlZSBldmVudF9iYXNlX3ByaW9yaXR5X2luaXQpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfcHJpb3JpdHlfc2V0KCRiZXZlbnQsIGludCAkcHJpb3JpdHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZXZlbnRfYnVmZmVyX3ByaW9yaXR5X3NldCgkYmV2ZW50LCAkcHJpb3JpdHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgb3IgY2hhbmdlcyBleGlzdGluZyBjYWxsYmFja3MgZm9yIHRoZSBidWZmZXJlZCBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIG1peGVkICRyZWFkY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZXJlIGlzIGRhdGEgdG8gcmVhZCwgb3IgTlVMTCBpZgogKiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gbWl4ZWQgJHdyaXRlY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZSBkZXNjcmlwdG9yIGlzIHJlYWR5IGZvciB3cml0aW5nLAogKiBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBtaXhlZCAkZXJyb3JjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhlIGRlc2NyaXB0b3IsIGNhbm5vdCBiZQogKiBOVUxMLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBBbiBhcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrcyAob3B0aW9uYWwpLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfc2V0X2NhbGxiYWNrKCRldmVudCwgJHJlYWRjYiwgJHdyaXRlY2IsICRlcnJvcmNiLCAkYXJnID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2soJGV2ZW50LCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X2J1ZmZlcl9zZXRfY2FsbGJhY2soJGV2ZW50LCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFdyaXRlcyBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyZWQgZXZlbnQuIFRoZSBkYXRhIGlzIGFwcGVuZGVkIHRvIHRoZQogKiBvdXRwdXQgYnVmZmVyIGFuZCB3cml0dGVuIHRvIHRoZSBkZXNjcmlwdG9yIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUgZm9yCiAqIHdyaXRpbmcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGRhdGFfc2l6ZSBPcHRpb25hbCBzaXplIHBhcmFtZXRlci4gZXZlbnRfYnVmZmVyX3dyaXRlIHdyaXRlcwogKiBhbGwgdGhlIGRhdGEgYnkgZGVmYXVsdC4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX3dyaXRlKCRiZXZlbnQsIHN0cmluZyAkZGF0YSwgaW50ICRkYXRhX3NpemUgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9idWZmZXJfd3JpdGUoJGJldmVudCwgJGRhdGEsICRkYXRhX3NpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENhbmNlbHMgdGhlIGV2ZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IFZhbGlkIGV2ZW50IHJlc291cmNlLgogKiBAdGhyb3dzIExpYmV2ZW50RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBldmVudF9kZWwoJGV2ZW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGV2ZW50X2RlbCgkZXZlbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXZlbnQgcmVzb3VyY2UuCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UgZXZlbnRfbmV3IHJldHVybnMgYSBuZXcgZXZlbnQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfbmV3KCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9uZXcoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYmV2ZW50RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc2lnbiBhIHByaW9yaXR5IHRvIHRoZSBldmVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkcHJpb3JpdHkgUHJpb3JpdHkgbGV2ZWwuIENhbm5vdCBiZSBsZXNzIHRoYW4gemVybyBhbmQgY2Fubm90IGV4Y2VlZCBtYXhpbXVtCiAqIHByaW9yaXR5IGxldmVsIG9mIHRoZSBldmVudCBiYXNlIChzZWUKICogZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0KS4KICogQHRocm93cyBMaWJldmVudEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZXZlbnRfcHJpb3JpdHlfc2V0KCRldmVudCwgaW50ICRwcmlvcml0eSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxldmVudF9wcmlvcml0eV9zZXQoJGV2ZW50LCAkcHJpb3JpdHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByZXBhcmVzIHRoZSBldmVudCB0byBiZSB1c2VkIGluIGV2ZW50X2FkZC4gVGhlIGV2ZW50CiAqIGlzIHByZXBhcmVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUgY2FsbGJhY2sKICogb24gdGhlIGV2ZW50cyBzcGVjaWZpZWQgaW4gcGFyYW1ldGVyIGV2ZW50cywgd2hpY2gKICogaXMgYSBzZXQgb2YgdGhlIGZvbGxvd2luZyBmbGFnczogRVZfVElNRU9VVCwKICogRVZfU0lHTkFMLCBFVl9SRUFELAogKiBFVl9XUklURSBhbmQgRVZfUEVSU0lTVC4KICoKICogSWYgRVZfU0lHTkFMIGJpdCBpcyBzZXQgaW4gcGFyYW1ldGVyIGV2ZW50cywKICogdGhlIGZkIGlzIGludGVycHJldGVkIGFzIHNpZ25hbCBudW1iZXIuCiAqCiAqIEFmdGVyIGluaXRpYWxpemluZyB0aGUgZXZlbnQsIHVzZSBldmVudF9iYXNlX3NldCB0bwogKiBhc3NvY2lhdGUgdGhlIGV2ZW50IHdpdGggaXRzIGV2ZW50IGJhc2UuCiAqCiAqIEluIGNhc2Ugb2YgbWF0Y2hpbmcgZXZlbnQsIHRoZXNlIHRocmVlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZQogKiBjYWxsYmFjayBmdW5jdGlvbjoKICoKICoKICogZmQKICoKICoKICogU2lnbmFsIG51bWJlciBvciByZXNvdXJjZSBpbmRpY2F0aW5nIHRoZSBzdHJlYW0uCiAqCiAqCiAqCiAqCiAqIGV2ZW50cwogKgogKgogKiBBIGZsYWcgaW5kaWNhdGluZyB0aGUgZXZlbnQuIENvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3M6CiAqIEVWX1RJTUVPVVQsIEVWX1NJR05BTCwKICogRVZfUkVBRCwgRVZfV1JJVEUKICogYW5kIEVWX1BFUlNJU1QuCiAqCiAqCiAqCiAqCiAqIGFyZwogKgogKgogKiBPcHRpb25hbCBwYXJhbWV0ZXIsIHByZXZpb3VzbHkgcGFzc2VkIHRvIGV2ZW50X3NldAogKiBhcyBhcmcuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgVmFsaWQgZXZlbnQgcmVzb3VyY2UuCiAqIEBwYXJhbSBtaXhlZCAkZmQgVmFsaWQgUEhQIHN0cmVhbSByZXNvdXJjZS4gVGhlIHN0cmVhbSBtdXN0IGJlIGNhc3RhYmxlIHRvIGZpbGUKICogZGVzY3JpcHRvciwgc28geW91IG1vc3QgbGlrZWx5IHdvbid0IGJlIGFibGUgdG8gdXNlIGFueSBvZiBmaWx0ZXJlZAogKiBzdHJlYW1zLgogKiBAcGFyYW0gaW50ICRldmVudHMgQSBzZXQgb2YgZmxhZ3MgaW5kaWNhdGluZyB0aGUgZGVzaXJlZCBldmVudCwgY2FuIGJlCiAqIEVWX1JFQUQgYW5kL29yIEVWX1dSSVRFLgogKiBUaGUgYWRkaXRpb25hbCBmbGFnIEVWX1BFUlNJU1QgbWFrZXMgdGhlIGV2ZW50CiAqIHRvIHBlcnNpc3QgdW50aWwgZXZlbnRfZGVsIGlzIGNhbGxlZCwgb3RoZXJ3aXNlCiAqIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIG9ubHkgb25jZS4KICogQHBhcmFtIG1peGVkICRjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbWF0Y2hpbmcgZXZlbnQgb2NjdXJzLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBPcHRpb25hbCBjYWxsYmFjayBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X3NldCgkZXZlbnQsICRmZCwgaW50ICRldmVudHMsICRjYWxsYmFjaywgJGFyZyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxldmVudF9zZXQoJGV2ZW50LCAkZmQsICRldmVudHMsICRjYWxsYmFjaywgJGFyZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZXZlbnRfc2V0KCRldmVudCwgJGZkLCAkZXZlbnRzLCAkY2FsbGJhY2spOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGliZXZlbnRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByZXBhcmVzIHRoZSB0aW1lciBldmVudCB0byBiZSB1c2VkIGluIGV2ZW50X2FkZC4gVGhlCiAqIGV2ZW50IGlzIHByZXBhcmVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUKICogY2FsbGJhY2sgd2hlbiB0aGUgZXZlbnQgdGltZW91dCBlbGFwc2VzLgogKgogKiBBZnRlciBpbml0aWFsaXppbmcgdGhlIGV2ZW50LCB1c2UgZXZlbnRfYmFzZV9zZXQgdG8KICogYXNzb2NpYXRlIHRoZSBldmVudCB3aXRoIGl0cyBldmVudCBiYXNlLgogKgogKiBJbiBjYXNlIG9mIG1hdGNoaW5nIGV2ZW50LCB0aGVzZSB0aHJlZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUKICogY2FsbGJhY2sgZnVuY3Rpb246CiAqCiAqCiAqIGZkCiAqCiAqCiAqIFNpZ25hbCBudW1iZXIgb3IgcmVzb3VyY2UgaW5kaWNhdGluZyB0aGUgc3RyZWFtLgogKgogKgogKgogKgogKiBldmVudHMKICoKICoKICogQSBmbGFnIGluZGljYXRpbmcgdGhlIGV2ZW50LiBUaGlzIHdpbGwgYWx3YXlzIGJlCiAqIEVWX1RJTUVPVVQgZm9yIHRpbWVyIGV2ZW50cy4KICoKICoKICoKICoKICogYXJnCiAqCiAqCiAqIE9wdGlvbmFsIHBhcmFtZXRlciwgcHJldmlvdXNseSBwYXNzZWQgdG8KICogZXZlbnRfdGltZXJfc2V0IGFzIGFyZy4KICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbWF0Y2hpbmcgZXZlbnQgb2NjdXJzLgogKiBAcGFyYW0gbWl4ZWQgJGFyZyBPcHRpb25hbCBjYWxsYmFjayBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgTGliZXZlbnRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGV2ZW50X3RpbWVyX3NldCgkZXZlbnQsIGNhbGxhYmxlICRjYWxsYmFjaywgJGFyZyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxldmVudF90aW1lcl9zZXQoJGV2ZW50LCAkY2FsbGJhY2ssICRhcmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGV2ZW50X3RpbWVyX3NldCgkZXZlbnQsICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMaWJldmVudEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/mssql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNc3NxbEV4Y2VwdGlvbjsKCi8qKgogKiBCaW5kcyBhIHBhcmFtZXRlciB0byBhIHN0b3JlZCBwcm9jZWR1cmUgb3IgYSByZW1vdGUgc3RvcmVkIHByb2NlZHVyZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IFN0YXRlbWVudCByZXNvdXJjZSwgb2J0YWluZWQgd2l0aCBtc3NxbF9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRwYXJhbV9uYW1lIFRoZSBwYXJhbWV0ZXIgbmFtZSwgYXMgYSBzdHJpbmcuCiAqCiAqIFlvdSBoYXZlIHRvIGluY2x1ZGUgdGhlIEAgY2hhcmFjdGVyLCBsaWtlIGluIHRoZQogKiBULVNRTCBzeW50YXguIFNlZSB0aGUgZXhwbGFuYXRpb24gaW5jbHVkZWQgaW4KICogbXNzcWxfZXhlY3V0ZS4KICogQHBhcmFtIG1peGVkICR2YXIgVGhlIFBIUCB2YXJpYWJsZSB5b3UnbGwgYmluZCB0aGUgTVNTUUwgcGFyYW1ldGVyIHRvLiBJdCBpcyBwYXNzZWQgYnkKICogcmVmZXJlbmNlLCB0byByZXRyaWV2ZSBPVVRQVVQgYW5kIFJFVFZBTCB2YWx1ZXMgYWZ0ZXIKICogdGhlIHByb2NlZHVyZSBleGVjdXRpb24uCiAqIEBwYXJhbSBpbnQgJHR5cGUgT25lIG9mOiBTUUxURVhULAogKiBTUUxWQVJDSEFSLCBTUUxDSEFSLAogKiBTUUxJTlQxLCBTUUxJTlQyLAogKiBTUUxJTlQ0LCBTUUxCSVQsCiAqIFNRTEZMVDQsIFNRTEZMVDgsCiAqIFNRTEZMVE4uCiAqIEBwYXJhbSBib29sICRpc19vdXRwdXQgV2hldGhlciB0aGUgdmFsdWUgaXMgYW4gT1VUUFVUIHBhcmFtZXRlciBvciBub3QuIElmIGl0J3MgYW4gT1VUUFVUCiAqIHBhcmFtZXRlciBhbmQgeW91IGRvbid0IG1lbnRpb24gaXQsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIG5vcm1hbAogKiBpbnB1dCBwYXJhbWV0ZXIgYW5kIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duLgogKiBAcGFyYW0gYm9vbCAkaXNfbnVsbCBXaGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgTlVMTCBvciBub3QuIFBhc3NpbmcgdGhlIE5VTEwgdmFsdWUgYXMKICogdmFyIHdpbGwgbm90IGRvIHRoZSBqb2IuCiAqIEBwYXJhbSBpbnQgJG1heGxlbiBVc2VkIHdpdGggY2hhci92YXJjaGFyIHZhbHVlcy4gWW91IGhhdmUgdG8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUKICogZGF0YSBzbyBpZiB0aGUgcGFyYW1ldGVyIGlzIGEgdmFyY2hhcig1MCksIHRoZSB0eXBlIG11c3QgYmUKICogU1FMVkFSQ0hBUiBhbmQgdGhpcyB2YWx1ZSA1MC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfYmluZCgkc3RtdCwgc3RyaW5nICRwYXJhbV9uYW1lLCAmJHZhciwgaW50ICR0eXBlLCBib29sICRpc19vdXRwdXQgPSBmYWxzZSwgYm9vbCAkaXNfbnVsbCA9IGZhbHNlLCBpbnQgJG1heGxlbiA9IC0xKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1zc3FsX2JpbmQoJHN0bXQsICRwYXJhbV9uYW1lLCAkdmFyLCAkdHlwZSwgJGlzX291dHB1dCwgJGlzX251bGwsICRtYXhsZW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgbGluayB0byBhIE1TIFNRTCBTZXJ2ZXIgZGF0YWJhc2UgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIGxpbmsgaWRlbnRpZmllci4gIElmIHRoZSBsaW5rIGlkZW50aWZpZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUKICogbGFzdCBvcGVuZWQgbGluayBpcyBhc3N1bWVkLgogKgogKiBOb3RlIHRoYXQgdGhpcyBpc24ndCB1c3VhbGx5IG5lY2Vzc2FyeSwgYXMgbm9uLXBlcnNpc3RlbnQgb3BlbgogKiBsaW5rcyBhcmUgYXV0b21hdGljYWxseSBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0J3MKICogZXhlY3V0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBIE1TIFNRTCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG1zc3FsX2Nvbm5lY3QuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgY2xvc2UgcGVyc2lzdGVudCBsaW5rcyBnZW5lcmF0ZWQgYnkKICogbXNzcWxfcGNvbm5lY3QuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY2xvc2UoJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY2xvc2UoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc3NxbF9jb25uZWN0IGVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhCiAqIE1TIFNRTCBzZXJ2ZXIuCiAqCiAqIFRoZSBsaW5rIHRvIHRoZSBzZXJ2ZXIgd2lsbCBiZSBjbG9zZWQgYXMgc29vbiBhcyB0aGUgZXhlY3V0aW9uIG9mCiAqIHRoZSBzY3JpcHQgZW5kcywgdW5sZXNzIGl0J3MgY2xvc2VkIGVhcmxpZXIgYnkgZXhwbGljaXRseSBjYWxsaW5nCiAqIG1zc3FsX2Nsb3NlLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJuYW1lIFRoZSBNUyBTUUwgc2VydmVyLiBJdCBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXIsIGUuZy4KICogaG9zdG5hbWU6cG9ydCAoTGludXgpLCBvcgogKiBob3N0bmFtZSxwb3J0IChXaW5kb3dzKS4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVGhlIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQuCiAqIEBwYXJhbSBib29sICRuZXdfbGluayBJZiBhIHNlY29uZCBjYWxsIGlzIG1hZGUgdG8gbXNzcWxfY29ubmVjdCB3aXRoIHRoZQogKiBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZSBsaW5rCiAqIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhpcyBwYXJhbWV0ZXIKICogbW9kaWZpZXMgdGhpcyBiZWhhdmlvciBhbmQgbWFrZXMgbXNzcWxfY29ubmVjdAogKiBhbHdheXMgb3BlbiBhIG5ldyBsaW5rLCBldmVuIGlmIG1zc3FsX2Nvbm5lY3Qgd2FzCiAqIGNhbGxlZCBiZWZvcmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNUyBTUUwgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2Nvbm5lY3Qoc3RyaW5nICRzZXJ2ZXJuYW1lID0gbnVsbCwgc3RyaW5nICR1c2VybmFtZSA9IG51bGwsIHN0cmluZyAkcGFzc3dvcmQgPSBudWxsLCBib29sICRuZXdfbGluayA9IGZhbHNlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG5ld19saW5rICE9PSBmYWxzZSkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRuZXdfbGluayk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCAkdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRzZXJ2ZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3NxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBNUyBTUUwgcmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3VsdAogKiBpZGVudGlmaWVyIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgcm93IG51bWJlciwgZmlyc3Qgcm93IGJlaW5nCiAqIG51bWJlciAwLiBUaGUgbmV4dCBjYWxsIHRvIG1zc3FsX2ZldGNoX3JvdwogKiB3b3VsZCByZXR1cm4gdGhhdCByb3cuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkZW50aWZpZXIgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4KICogQHBhcmFtIGludCAkcm93X251bWJlciBUaGUgZGVzaXJlZCByb3cgbnVtYmVyIG9mIHRoZSBuZXcgcmVzdWx0IHBvaW50ZXIuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2RhdGFfc2VlaygkcmVzdWx0X2lkZW50aWZpZXIsIGludCAkcm93X251bWJlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9kYXRhX3NlZWsoJHJlc3VsdF9pZGVudGlmaWVyLCAkcm93X251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGZpZWxkIG5vLiBvZmZzZXQgaW4KICogcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBmaWVsZCBvZmZzZXQsIHN0YXJ0cyBhdCAwLiBJZiBvbWl0dGVkLCB0aGUgY3VycmVudCBmaWVsZCBpcyB1c2VkLgogKiBAcmV0dXJuIGludCBUaGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfbGVuZ3RoKCRyZXN1bHQsIGludCAkb2Zmc2V0ID0gLTEpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9maWVsZF9sZW5ndGgoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGZpZWxkIG5vLiBvZmZzZXQgaW4KICogcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBmaWVsZCBvZmZzZXQsIHN0YXJ0cyBhdCAwLiBJZiBvbWl0dGVkLCB0aGUgY3VycmVudCBmaWVsZCBpcyB1c2VkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluZGV4IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRvZmZzZXQgPSAtMSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1zc3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGZpZWxkIG9mZnNldC4gIElmIHRoZSBuZXh0IGNhbGwgdG8KICogbXNzcWxfZmV0Y2hfZmllbGQgd29uJ3QgaW5jbHVkZSBhIGZpZWxkCiAqIG9mZnNldCwgdGhpcyBmaWVsZCB3b3VsZCBiZSByZXR1cm5lZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhCiAqIGNhbGwgdG8gbXNzcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgZmllbGQgb2Zmc2V0LCBzdGFydHMgYXQgMC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfc2VlaygkcmVzdWx0LCBpbnQgJGZpZWxkX29mZnNldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHR5cGUgb2YgZmllbGQgbm8uIG9mZnNldCBpbgogKiByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdCBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYQogKiBjYWxsIHRvIG1zc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRvZmZzZXQgVGhlIGZpZWxkIG9mZnNldCwgc3RhcnRzIGF0IDAuIElmIG9taXR0ZWQsIHRoZSBjdXJyZW50IGZpZWxkIGlzIHVzZWQuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZmllbGRfdHlwZSgkcmVzdWx0LCBpbnQgJG9mZnNldCA9IC0xKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNzcWxfZmllbGRfdHlwZSgkcmVzdWx0LCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zc3FsX2ZyZWVfcmVzdWx0IG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkCiAqIGlmIHlvdSBhcmUgd29ycmllZCBhYm91dCB1c2luZyB0b28gbXVjaCBtZW1vcnkgd2hpbGUgeW91ciBzY3JpcHQKICogaXMgcnVubmluZy4gQWxsIHJlc3VsdCBtZW1vcnkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZyZWVkIHdoZW4KICogdGhlIHNjcmlwdCBlbmRzLiBZb3UgbWF5IGNhbGwgbXNzcWxfZnJlZV9yZXN1bHQKICogd2l0aCB0aGUgcmVzdWx0IGlkZW50aWZpZXIgYXMgYW4gYXJndW1lbnQgYW5kIHRoZSBhc3NvY2lhdGVkCiAqIHJlc3VsdCBtZW1vcnkgd2lsbCBiZSBmcmVlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGZyZWVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEKICogY2FsbCB0byBtc3NxbF9xdWVyeS4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3NxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc3NxbF9mcmVlX3N0YXRlbWVudCBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZAogKiBpZiB5b3UgYXJlIHdvcnJpZWQgYWJvdXQgdXNpbmcgdG9vIG11Y2ggbWVtb3J5IHdoaWxlIHlvdXIgc2NyaXB0CiAqIGlzIHJ1bm5pbmcuIEFsbCBzdGF0ZW1lbnQgbWVtb3J5IHdpbGwgYXV0b21hdGljYWxseSBiZSBmcmVlZCB3aGVuCiAqIHRoZSBzY3JpcHQgZW5kcy4gWW91IG1heSBjYWxsIG1zc3FsX2ZyZWVfc3RhdGVtZW50CiAqIHdpdGggdGhlIHN0YXRlbWVudCBpZGVudGlmaWVyIGFzIGFuIGFyZ3VtZW50IGFuZCB0aGUgYXNzb2NpYXRlZAogKiBzdGF0ZW1lbnQgbWVtb3J5IHdpbGwgYmUgZnJlZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBTdGF0ZW1lbnQgcmVzb3VyY2UsIG9idGFpbmVkIHdpdGggbXNzcWxfaW5pdC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfZnJlZV9zdGF0ZW1lbnQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNzcWxfZnJlZV9zdGF0ZW1lbnQoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluaXRpYWxpemVzIGEgc3RvcmVkIHByb2NlZHVyZSBvciBhIHJlbW90ZSBzdG9yZWQgcHJvY2VkdXJlLgogKgogKiBAcGFyYW0gc3RyaW5nICRzcF9uYW1lIFN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgbGlrZSBvd25ldy5zcF9uYW1lIG9yCiAqIG90aGVyZGIub3duZXIuc3BfbmFtZS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBpZGVudGlmaWVyICJzdGF0ZW1lbnQiLCB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG8KICogbXNzcWxfYmluZCBhbmQgbXNzcWxfZXhlY3V0ZXMuCiAqIEB0aHJvd3MgTXNzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zc3FsX2luaXQoc3RyaW5nICRzcF9uYW1lLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsaW5rX2lkZW50aWZpZXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX2luaXQoJHNwX25hbWUsICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX2luaXQoJHNwX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNzcWxfcGNvbm5lY3QgYWN0cyB2ZXJ5IG11Y2ggbGlrZQogKiBtc3NxbF9jb25uZWN0IHdpdGggdHdvIG1ham9yIGRpZmZlcmVuY2VzLgogKgogKiBGaXJzdCwgd2hlbiBjb25uZWN0aW5nLCB0aGUgZnVuY3Rpb24gd291bGQgZmlyc3QgdHJ5IHRvIGZpbmQgYQogKiAocGVyc2lzdGVudCkgbGluayB0aGF0J3MgYWxyZWFkeSBvcGVuIHdpdGggdGhlIHNhbWUgaG9zdCwKICogdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiAgSWYgb25lIGlzIGZvdW5kLCBhbiBpZGVudGlmaWVyIGZvciBpdAogKiB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2Ygb3BlbmluZyBhIG5ldyBjb25uZWN0aW9uLgogKgogKiBTZWNvbmQsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBTUUwgc2VydmVyIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuCiAqIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLiAgSW5zdGVhZCwgdGhlIGxpbmsgd2lsbCByZW1haW4KICogb3BlbiBmb3IgZnV0dXJlIHVzZSAobXNzcWxfY2xvc2Ugd2lsbCBub3QKICogY2xvc2UgbGlua3MgZXN0YWJsaXNoZWQgYnkgbXNzcWxfcGNvbm5lY3QpLgogKgogKiBUaGlzIHR5cGUgb2YgbGlua3MgaXMgdGhlcmVmb3JlIGNhbGxlZCAncGVyc2lzdGVudCcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcm5hbWUgVGhlIE1TIFNRTCBzZXJ2ZXIuIEl0IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gZS5nLgogKiBob3N0bmFtZTpwb3J0LgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgdXNlcm5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZC4KICogQHBhcmFtIGJvb2wgJG5ld19saW5rIElmIGEgc2Vjb25kIGNhbGwgaXMgbWFkZSB0byBtc3NxbF9wY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhpcwogKiBwYXJhbWV0ZXIgbW9kaWZpZXMgdGhpcyBiZWhhdmlvciBhbmQgbWFrZXMKICogbXNzcWxfcGNvbm5lY3QgYWx3YXlzIG9wZW4gYSBuZXcgbGluaywgZXZlbiBpZgogKiBtc3NxbF9wY29ubmVjdCB3YXMgY2FsbGVkIGJlZm9yZSB3aXRoIHRoZSBzYW1lCiAqIHBhcmFtZXRlcnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHBvc2l0aXZlIE1TIFNRTCBwZXJzaXN0ZW50IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1zc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3NxbF9wY29ubmVjdChzdHJpbmcgJHNlcnZlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIGJvb2wgJG5ld19saW5rID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbmV3X2xpbmsgIT09IGZhbHNlKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRuZXdfbGluayk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgkc2VydmVybmFtZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNzcWxfcGNvbm5lY3QoJHNlcnZlcm5hbWUsICR1c2VybmFtZSk7CiAgICB9IGVsc2VpZiAoJHNlcnZlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3Bjb25uZWN0KCRzZXJ2ZXJuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9wY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNzcWxfcXVlcnkgc2VuZHMgYSBxdWVyeSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZQogKiBkYXRhYmFzZSBvbiB0aGUgc2VydmVyIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBsaW5rCiAqIGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IEFuIFNRTCBxdWVyeS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0IG9yCiAqIG1zc3FsX3Bjb25uZWN0LgogKgogKiBJZiB0aGUgbGluayBpZGVudGlmaWVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4gIElmIG5vIGxpbmsgaXMgb3BlbiwgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIGVzdGFibGlzaCBhIGxpbmsKICogYXMgaWYgbXNzcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAcGFyYW0gaW50ICRiYXRjaF9zaXplIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byBiYXRjaCBpbiB0aGUgYnVmZmVyLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgYSBNUyBTUUwgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MsIFRSVUUgaWYgbm8gcm93cyB3ZXJlCiAqIHJldHVybmVkLgogKiBAdGhyb3dzIE1zc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3NxbF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCwgaW50ICRiYXRjaF9zaXplID0gMCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRiYXRjaF9zaXplICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIsICRiYXRjaF9zaXplKTsKICAgIH0gZWxzZWlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3F1ZXJ5KCRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3NxbF9zZWxlY3RfZGIgc2V0cyB0aGUgY3VycmVudCBhY3RpdmUKICogZGF0YWJhc2Ugb24gdGhlIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluawogKiBpZGVudGlmaWVyLgogKgogKiBFdmVyeSBzdWJzZXF1ZW50IGNhbGwgdG8gbXNzcWxfcXVlcnkgd2lsbCBiZQogKiBtYWRlIG9uIHRoZSBhY3RpdmUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIGRhdGFiYXNlIG5hbWUuCiAqCiAqIFRvIGVzY2FwZSB0aGUgbmFtZSBvZiBhIGRhdGFiYXNlIHRoYXQgY29udGFpbnMgc3BhY2VzLCBoeXBoZW5zICgiLSIpLAogKiBvciBhbnkgb3RoZXIgZXhjZXB0aW9uYWwgY2hhcmFjdGVycywgdGhlIGRhdGFiYXNlIG5hbWUgbXVzdCBiZQogKiBlbmNsb3NlZCBpbiBicmFja2V0cywgYXMgaXMgc2hvd24gaW4gdGhlIGV4YW1wbGUsIGJlbG93LiBUaGlzCiAqIHRlY2huaXF1ZSBtdXN0IGFsc28gYmUgYXBwbGllZCB3aGVuIHNlbGVjdGluZyBhIGRhdGFiYXNlIG5hbWUgdGhhdCBpcwogKiBhbHNvIGEgcmVzZXJ2ZWQgd29yZCAoc3VjaCBhcyBwcmltYXJ5KS4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQSBNUyBTUUwgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBtc3NxbF9jb25uZWN0IG9yCiAqIG1zc3FsX3Bjb25uZWN0LgogKgogKiBJZiBubyBsaW5rIGlkZW50aWZpZXIgaXMgc3BlY2lmaWVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcyBhc3N1bWVkLgogKiBJZiBubyBsaW5rIGlzIG9wZW4sIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYSBsaW5rIGFzIGlmCiAqIG1zc3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZCwgYW5kIHVzZSBpdC4KICogQHRocm93cyBNc3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNzcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3NxbF9zZWxlY3RfZGIoJGRhdGFiYXNlX25hbWUsICRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zc3FsX3NlbGVjdF9kYigkZGF0YWJhc2VfbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/deprecated/stats.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdGF0c0V4Y2VwdGlvbjsKCi8qKgogKiBSZXR1cm5zIHRoZSBjb3ZhcmlhbmNlIG9mIGEgYW5kIGIuCiAqCiAqIEBwYXJhbSBhcnJheSAkYSBUaGUgZmlyc3QgYXJyYXkKICogQHBhcmFtIGFycmF5ICRiIFRoZSBzZWNvbmQgYXJyYXkKICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBjb3ZhcmlhbmNlIG9mIGEgYW5kIGIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX2NvdmFyaWFuY2UoYXJyYXkgJGEsIGFycmF5ICRiKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c19jb3ZhcmlhbmNlKCRhLCAkYik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHZhbHVlcyBpbiBhLgogKgogKiBAcGFyYW0gYXJyYXkgJGEgVGhlIGFycmF5IG9mIGRhdGEgdG8gZmluZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZvci4gTm90ZSB0aGF0IGFsbAogKiB2YWx1ZXMgb2YgdGhlIGFycmF5IHdpbGwgYmUgY2FzdCB0byBmbG9hdC4KICogQHBhcmFtIGJvb2wgJHNhbXBsZSBJbmRpY2F0ZXMgaWYgYSByZXByZXNlbnRzIGEgc2FtcGxlIG9mIHRoZQogKiBwb3B1bGF0aW9uOyBkZWZhdWx0cyB0byBGQUxTRS4KICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb24gc3VjY2VzczsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBTdGF0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9uKGFycmF5ICRhLCBib29sICRzYW1wbGUgPSBmYWxzZSk6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9uKCRhLCAkc2FtcGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0YXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIFBlYXJzb24gY29ycmVsYXRpb24gY29lZmZpY2llbnQgYmV0d2VlbiBhcnIxIGFuZCBhcnIyLgogKgogKiBAcGFyYW0gYXJyYXkgJGFycjEgVGhlIGZpcnN0IGFycmF5CiAqIEBwYXJhbSBhcnJheSAkYXJyMiBUaGUgc2Vjb25kIGFycmF5CiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgUGVhcnNvbiBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBiZXR3ZWVuIGFycjEgYW5kIGFycjIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX3N0YXRfY29ycmVsYXRpb24oYXJyYXkgJGFycjEsIGFycmF5ICRhcnIyKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c19zdGF0X2NvcnJlbGF0aW9uKCRhcnIxLCAkYXJyMik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBpbm5lciBwcm9kdWN0IG9mIGFycjEgYW5kIGFycjIuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyMSBUaGUgZmlyc3QgYXJyYXkKICogQHBhcmFtIGFycmF5ICRhcnIyIFRoZSBzZWNvbmQgYXJyYXkKICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBpbm5lciBwcm9kdWN0IG9mIGFycjEgYW5kIGFycjIuCiAqIEB0aHJvd3MgU3RhdHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0YXRzX3N0YXRfaW5uZXJwcm9kdWN0KGFycmF5ICRhcnIxLCBhcnJheSAkYXJyMik6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RhdHNfc3RhdF9pbm5lcnByb2R1Y3QoJGFycjEsICRhcnIyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0YXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHZhcmlhbmNlIG9mIHRoZSB2YWx1ZXMgaW4gYS4KICoKICogQHBhcmFtIGFycmF5ICRhIFRoZSBhcnJheSBvZiBkYXRhIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IuIE5vdGUgdGhhdCBhbGwKICogdmFsdWVzIG9mIHRoZSBhcnJheSB3aWxsIGJlIGNhc3QgdG8gZmxvYXQuCiAqIEBwYXJhbSBib29sICRzYW1wbGUgSW5kaWNhdGVzIGlmIGEgcmVwcmVzZW50cyBhIHNhbXBsZSBvZiB0aGUKICogcG9wdWxhdGlvbjsgZGVmYXVsdHMgdG8gRkFMU0UuCiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgdmFyaWFuY2Ugb24gc3VjY2VzczsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBTdGF0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RhdHNfdmFyaWFuY2UoYXJyYXkgJGEsIGJvb2wgJHNhbXBsZSA9IGZhbHNlKTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdGF0c192YXJpYW5jZSgkYSwgJHNhbXBsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdGF0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/apache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGFjaGVFeGNlcHRpb247CgovKioKICogRmV0Y2ggdGhlIEFwYWNoZSB2ZXJzaW9uLgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBBcGFjaGUgdmVyc2lvbiBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEFwYWNoZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBhY2hlX2dldF92ZXJzaW9uKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwYWNoZV9nZXRfdmVyc2lvbigpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlIGFuIEFwYWNoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZWQgYnkKICogdmFyaWFibGUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgQXBhY2hlIDIgb3RoZXJ3aXNlIGl0J3MgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gc3RyaW5nICR2YXJpYWJsZSBUaGUgQXBhY2hlIGVudmlyb25tZW50IHZhcmlhYmxlCiAqIEBwYXJhbSBib29sICR3YWxrX3RvX3RvcCBXaGV0aGVyIHRvIGdldCB0aGUgdG9wLWxldmVsIHZhcmlhYmxlIGF2YWlsYWJsZSB0byBhbGwgQXBhY2hlIGxheWVycy4KICogQHJldHVybiBzdHJpbmcgVGhlIHZhbHVlIG9mIHRoZSBBcGFjaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIEFwYWNoZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBhY2hlX2dldGVudihzdHJpbmcgJHZhcmlhYmxlLCBib29sICR3YWxrX3RvX3RvcCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX2dldGVudigkdmFyaWFibGUsICR3YWxrX3RvX3RvcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGFjaGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRmV0Y2hlcyBhbGwgSFRUUCByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgY3VycmVudCByZXF1ZXN0LiBXb3JrcyBpbiB0aGUKICogQXBhY2hlLCBGYXN0Q0dJLCBDTEksIEZQTSBhbmQgTlNBUEkgc2VydmVyIG1vZHVsZQogKiBpbiBOZXRzY2FwZS9pUGxhbmV0L1N1bk9ORSB3ZWJzZXJ2ZXJzLgogKgogKiBAcmV0dXJuIGFycmF5IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGFsbCB0aGUgSFRUUCBoZWFkZXJzIGluIHRoZSBjdXJyZW50IHJlcXVlc3QuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzKCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX3JlcXVlc3RfaGVhZGVycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFwYWNoZV9yZXNldF90aW1lb3V0IHJlc2V0cyB0aGUgQXBhY2hlIHdyaXRlIHRpbWVyLAogKiB3aGljaCBkZWZhdWx0cyB0byAzMDAgc2Vjb25kcy4gV2l0aCBzZXRfdGltZV9saW1pdCgwKTsKICogaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSkgYW5kIHBlcmlvZGljCiAqIGFwYWNoZV9yZXNldF90aW1lb3V0IGNhbGxzLCBBcGFjaGUgY2FuIHRoZW9yZXRpY2FsbHkKICogcnVuIGZvcmV2ZXIuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgQXBhY2hlIDEuCiAqCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVzZXRfdGltZW91dCgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBhY2hlX3Jlc2V0X3RpbWVvdXQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmV0Y2ggYWxsIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4gIFdvcmtzIGluIHRoZQogKiBBcGFjaGUsIEZhc3RDR0ksIENMSSwgRlBNIGFuZCBOU0FQSSBzZXJ2ZXIgbW9kdWxlCiAqIGluIE5ldHNjYXBlL2lQbGFuZXQvU3VuT05FIHdlYnNlcnZlcnMuCiAqCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgYWxsIEFwYWNoZSByZXNwb25zZSBoZWFkZXJzIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGFjaGVfcmVzcG9uc2VfaGVhZGVycygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGFjaGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogYXBhY2hlX3NldGVudiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQXBhY2hlCiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllZCBieQogKiB2YXJpYWJsZS4KICoKICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGUgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQncyBiZWluZyBzZXQuCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSBuZXcgdmFyaWFibGUgdmFsdWUuCiAqIEBwYXJhbSBib29sICR3YWxrX3RvX3RvcCBXaGV0aGVyIHRvIHNldCB0aGUgdG9wLWxldmVsIHZhcmlhYmxlIGF2YWlsYWJsZSB0byBhbGwgQXBhY2hlIGxheWVycy4KICogQHRocm93cyBBcGFjaGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwYWNoZV9zZXRlbnYoc3RyaW5nICR2YXJpYWJsZSwgc3RyaW5nICR2YWx1ZSwgYm9vbCAkd2Fsa190b190b3AgPSBmYWxzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGFjaGVfc2V0ZW52KCR2YXJpYWJsZSwgJHZhbHVlLCAkd2Fsa190b190b3ApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIGFsbCBIVFRQIGhlYWRlcnMgZnJvbSB0aGUgY3VycmVudCByZXF1ZXN0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIGFsaWFzIGZvciBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzLgogKiBQbGVhc2UgcmVhZCB0aGUgYXBhY2hlX3JlcXVlc3RfaGVhZGVycwogKiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgogKgogKiBAcmV0dXJuIGFycmF5IEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGFsbCB0aGUgSFRUUCBoZWFkZXJzIGluIHRoZSBjdXJyZW50IHJlcXVlc3QuCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRhbGxoZWFkZXJzKCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0YWxsaGVhZGVycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHZpcnR1YWwgaXMgYW4gQXBhY2hlLXNwZWNpZmljIGZ1bmN0aW9uIHdoaWNoCiAqIGlzIHNpbWlsYXIgdG8gJmx0OyEtLSNpbmNsdWRlIHZpcnR1YWwuLi4tLSZndDsgaW4KICogbW9kX2luY2x1ZGUuCiAqIEl0IHBlcmZvcm1zIGFuIEFwYWNoZSBzdWItcmVxdWVzdC4gIEl0IGlzIHVzZWZ1bCBmb3IgaW5jbHVkaW5nCiAqIENHSSBzY3JpcHRzIG9yIC5zaHRtbCBmaWxlcywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IHlvdSB3b3VsZAogKiBwYXJzZSB0aHJvdWdoIEFwYWNoZS4gTm90ZSB0aGF0IGZvciBhIENHSSBzY3JpcHQsIHRoZSBzY3JpcHQKICogbXVzdCBnZW5lcmF0ZSB2YWxpZCBDR0kgaGVhZGVycy4gIEF0IHRoZSBtaW5pbXVtIHRoYXQgbWVhbnMgaXQKICogbXVzdCBnZW5lcmF0ZSBhIENvbnRlbnQtVHlwZSBoZWFkZXIuCiAqCiAqIFRvIHJ1biB0aGUgc3ViLXJlcXVlc3QsIGFsbCBidWZmZXJzIGFyZSB0ZXJtaW5hdGVkIGFuZCBmbHVzaGVkIHRvIHRoZQogKiBicm93c2VyLCBwZW5kaW5nIGhlYWRlcnMgYXJlIHNlbnQgdG9vLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSB0aGF0IHRoZSB2aXJ0dWFsIGNvbW1hbmQgd2lsbCBiZSBwZXJmb3JtZWQgb24uCiAqIEB0aHJvd3MgQXBhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB2aXJ0dWFsKHN0cmluZyAkZmlsZW5hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdmlydHVhbCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXBhY2hlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/apcu.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGN1RXhjZXB0aW9uOwoKLyoqCiAqIFJldHJpZXZlcyBjYWNoZWQgaW5mb3JtYXRpb24gYW5kIG1ldGEtZGF0YSBmcm9tIEFQQydzIGRhdGEgc3RvcmUuCiAqCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIElmIGxpbWl0ZWQgaXMgVFJVRSwgdGhlCiAqIHJldHVybiB2YWx1ZSB3aWxsIGV4Y2x1ZGUgdGhlIGluZGl2aWR1YWwgbGlzdCBvZiBjYWNoZSBlbnRyaWVzLiAgVGhpcwogKiBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gb3B0aW1pemUgY2FsbHMgZm9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgogKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIGNhY2hlZCBkYXRhIChhbmQgbWV0YS1kYXRhKQogKiBAdGhyb3dzIEFwY3VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFwY3VfY2FjaGVfaW5mbyhib29sICRsaW1pdGVkID0gZmFsc2UpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfY2FjaGVfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFwY3VfY2FzIHVwZGF0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBpbnRlZ2VyIHZhbHVlIGlmIHRoZQogKiBvbGQgcGFyYW1ldGVyIG1hdGNoZXMgdGhlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWUKICogd2l0aCB0aGUgdmFsdWUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvbGQgVGhlIG9sZCB2YWx1ZSAodGhlIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQpLgogKiBAcGFyYW0gaW50ICRuZXcgVGhlIG5ldyB2YWx1ZSB0byB1cGRhdGUgdG8uCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9jYXMoc3RyaW5nICRrZXksIGludCAkb2xkLCBpbnQgJG5ldyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGN1X2Nhcygka2V5LCAkb2xkLCAkbmV3KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlY3JlYXNlcyBhIHN0b3JlZCBpbnRlZ2VyIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgZGVjcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBkZWNyZWFzZS4KICogQHBhcmFtIGJvb2x8bnVsbCAkc3VjY2VzcyBPcHRpb25hbGx5IHBhc3MgdGhlIHN1Y2Nlc3Mgb3IgZmFpbCBib29sZWFuIHZhbHVlIHRvCiAqIHRoaXMgcmVmZXJlbmNlZCB2YXJpYWJsZS4KICogQHBhcmFtIGludCAkdHRsIFRUTCB0byB1c2UgaWYgdGhlIG9wZXJhdGlvbiBpbnNlcnRzIGEgbmV3IHZhbHVlIChyYXRoZXIgdGhhbiBkZWNyZW1lbnRpbmcgYW4gZXhpc3Rpbmcgb25lKS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBrZXkncyB2YWx1ZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9kZWMoc3RyaW5nICRrZXksIGludCAkc3RlcCA9IDEsID9ib29sICYkc3VjY2VzcyA9IG51bGwsIGludCAkdHRsID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfZGVjKCRrZXksICRzdGVwLCAkc3VjY2VzcywgJHR0bCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluY3JlYXNlcyBhIHN0b3JlZCBudW1iZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyBpbmNyZWFzZWQuCiAqIEBwYXJhbSBpbnQgJHN0ZXAgVGhlIHN0ZXAsIG9yIHZhbHVlIHRvIGluY3JlYXNlLgogKiBAcGFyYW0gYm9vbHxudWxsICRzdWNjZXNzIE9wdGlvbmFsbHkgcGFzcyB0aGUgc3VjY2VzcyBvciBmYWlsIGJvb2xlYW4gdmFsdWUgdG8KICogdGhpcyByZWZlcmVuY2VkIHZhcmlhYmxlLgogKiBAcGFyYW0gaW50ICR0dGwgVFRMIHRvIHVzZSBpZiB0aGUgb3BlcmF0aW9uIGluc2VydHMgYSBuZXcgdmFsdWUgKHJhdGhlciB0aGFuIGluY3JlbWVudGluZyBhbiBleGlzdGluZyBvbmUpLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGtleSdzIHZhbHVlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBBcGN1RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGN1X2luYyhzdHJpbmcgJGtleSwgaW50ICRzdGVwID0gMSwgP2Jvb2wgJiRzdWNjZXNzID0gbnVsbCwgaW50ICR0dGwgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjdV9pbmMoJGtleSwgJHN0ZXAsICRzdWNjZXNzLCAkdHRsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIEFQQ3UgU2hhcmVkIE1lbW9yeSBBbGxvY2F0aW9uIGluZm9ybWF0aW9uLgogKgogKiBAcGFyYW0gYm9vbCAkbGltaXRlZCBXaGVuIHNldCB0byBGQUxTRSAoZGVmYXVsdCkgYXBjdV9zbWFfaW5mbyB3aWxsCiAqIHJldHVybiBhIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc2VnbWVudC4KICogQHJldHVybiBhcnJheSBBcnJheSBvZiBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gZGF0YTsgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBBcGN1RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGN1X3NtYV9pbmZvKGJvb2wgJGxpbWl0ZWQgPSBmYWxzZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXBjdV9zbWFfaW5mbygkbGltaXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcGN1RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/array.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcnJheUV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFycmF5IGJ5IHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUKICoga2V5cyBhcnJheSBhcyBrZXlzIGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlCiAqIHZhbHVlcyBhcnJheSBhcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuCiAqCiAqIEBwYXJhbSBhcnJheSAka2V5cyBBcnJheSBvZiBrZXlzIHRvIGJlIHVzZWQuIElsbGVnYWwgdmFsdWVzIGZvciBrZXkgd2lsbCBiZQogKiBjb252ZXJ0ZWQgdG8gc3RyaW5nLgogKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyBBcnJheSBvZiB2YWx1ZXMgdG8gYmUgdXNlZAogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGNvbWJpbmVkIGFycmF5LCBGQUxTRSBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCiAqIGZvciBlYWNoIGFycmF5IGlzbid0IGVxdWFsLgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcnJheV9jb21iaW5lKGFycmF5ICRrZXlzLCBhcnJheSAkdmFsdWVzKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcnJheV9jb21iaW5lKCRrZXlzLCAkdmFsdWVzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFycmF5X2ZsaXAgcmV0dXJucyBhbiBhcnJheSBpbiBmbGlwCiAqIG9yZGVyLCBpLmUuIGtleXMgZnJvbSBhcnJheSBiZWNvbWUgdmFsdWVzIGFuZCB2YWx1ZXMKICogZnJvbSBhcnJheSBiZWNvbWUga2V5cy4KICoKICogTm90ZSB0aGF0IHRoZSB2YWx1ZXMgb2YgYXJyYXkgbmVlZCB0byBiZSB2YWxpZAogKiBrZXlzLCBpLmUuIHRoZXkgbmVlZCB0byBiZSBlaXRoZXIgaW50ZWdlciBvcgogKiBzdHJpbmcuIEEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWQgaWYgYSB2YWx1ZSBoYXMgdGhlIHdyb25nCiAqIHR5cGUsIGFuZCB0aGUga2V5L3ZhbHVlIHBhaXIgaW4gcXVlc3Rpb24gd2lsbCBub3QgYmUgaW5jbHVkZWQKICogaW4gdGhlIHJlc3VsdC4KICoKICogSWYgYSB2YWx1ZSBoYXMgc2V2ZXJhbCBvY2N1cnJlbmNlcywgdGhlIGxhdGVzdCBrZXkgd2lsbCBiZQogKiB1c2VkIGFzIGl0cyB2YWx1ZSwgYW5kIGFsbCBvdGhlcnMgd2lsbCBiZSBsb3N0LgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5IEFuIGFycmF5IG9mIGtleS92YWx1ZSBwYWlycyB0byBiZSBmbGlwcGVkLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGZsaXBwZWQgYXJyYXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXJyYXlfZmxpcChhcnJheSAkYXJyYXkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFycmF5X2ZsaXAoJGFycmF5KTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgcmVwbGFjZXMgdGhlIHZhbHVlcyBvZgogKiBhcnJheTEgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgZnJvbSBhbGwgdGhlIGZvbGxvd2luZwogKiBhcnJheXMuIElmIGEga2V5IGZyb20gdGhlIGZpcnN0IGFycmF5IGV4aXN0cyBpbiB0aGUgc2Vjb25kIGFycmF5LCBpdHMgdmFsdWUKICogd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIGFycmF5LiBJZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUKICogc2Vjb25kIGFycmF5LCBhbmQgbm90IHRoZSBmaXJzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBmaXJzdCBhcnJheS4KICogSWYgYSBrZXkgb25seSBleGlzdHMgaW4gdGhlIGZpcnN0IGFycmF5LCBpdCB3aWxsIGJlIGxlZnQgYXMgaXMuCiAqIElmIHNldmVyYWwgYXJyYXlzIGFyZSBwYXNzZWQgZm9yIHJlcGxhY2VtZW50LCB0aGV5IHdpbGwgYmUgcHJvY2Vzc2VkCiAqIGluIG9yZGVyLCB0aGUgbGF0ZXIgYXJyYXkgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHZhbHVlcy4KICoKICogYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgaXMgcmVjdXJzaXZlIDogaXQgd2lsbCByZWN1cnNlIGludG8KICogYXJyYXlzIGFuZCBhcHBseSB0aGUgc2FtZSBwcm9jZXNzIHRvIHRoZSBpbm5lciB2YWx1ZS4KICoKICogV2hlbiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFycmF5IGlzIHNjYWxhciwgaXQgd2lsbCBiZSByZXBsYWNlZAogKiBieSB0aGUgdmFsdWUgaW4gdGhlIHNlY29uZCBhcnJheSwgbWF5IGl0IGJlIHNjYWxhciBvciBhcnJheS4KICogV2hlbiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFycmF5IGFuZCB0aGUgc2Vjb25kIGFycmF5CiAqIGFyZSBib3RoIGFycmF5cywgYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUgd2lsbCByZXBsYWNlCiAqIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWUgcmVjdXJzaXZlbHkuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyYXkxIFRoZSBhcnJheSBpbiB3aGljaCBlbGVtZW50cyBhcmUgcmVwbGFjZWQuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIE9wdGlvbmFsLiBBcnJheXMgZnJvbSB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGV4dHJhY3RlZC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZShhcnJheSAkYXJyYXkxLCBhcnJheSAgLi4uJHBhcmFtcyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1zICE9PSBbXSkgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJGFycmF5MSwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJGFycmF5MSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gbnVsbCkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGFycmF5X3JlcGxhY2UgcmVwbGFjZXMgdGhlIHZhbHVlcyBvZgogKiBhcnJheTEgd2l0aCB2YWx1ZXMgaGF2aW5nIHRoZSBzYW1lIGtleXMgaW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nCiAqIGFycmF5cy4gSWYgYSBrZXkgZnJvbSB0aGUgZmlyc3QgYXJyYXkgZXhpc3RzIGluIHRoZSBzZWNvbmQgYXJyYXksIGl0cyB2YWx1ZQogKiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgYXJyYXkuIElmIHRoZSBrZXkgZXhpc3RzIGluIHRoZQogKiBzZWNvbmQgYXJyYXksIGFuZCBub3QgdGhlIGZpcnN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGZpcnN0IGFycmF5LgogKiBJZiBhIGtleSBvbmx5IGV4aXN0cyBpbiB0aGUgZmlyc3QgYXJyYXksIGl0IHdpbGwgYmUgbGVmdCBhcyBpcy4KICogSWYgc2V2ZXJhbCBhcnJheXMgYXJlIHBhc3NlZCBmb3IgcmVwbGFjZW1lbnQsIHRoZXkgd2lsbCBiZSBwcm9jZXNzZWQKICogaW4gb3JkZXIsIHRoZSBsYXRlciBhcnJheXMgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIHZhbHVlcy4KICoKICogYXJyYXlfcmVwbGFjZSBpcyBub3QgcmVjdXJzaXZlIDogaXQgd2lsbCByZXBsYWNlCiAqIHZhbHVlcyBpbiB0aGUgZmlyc3QgYXJyYXkgYnkgd2hhdGV2ZXIgdHlwZSBpcyBpbiB0aGUgc2Vjb25kIGFycmF5LgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5MSBUaGUgYXJyYXkgaW4gd2hpY2ggZWxlbWVudHMgYXJlIHJlcGxhY2VkLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBcnJheXMgZnJvbSB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGV4dHJhY3RlZC4KICogVmFsdWVzIGZyb20gbGF0ZXIgYXJyYXlzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWVzLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFycmF5X3JlcGxhY2UoYXJyYXkgJGFycmF5MSwgYXJyYXkgIC4uLiRwYXJhbXMpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXGFycmF5X3JlcGxhY2UoJGFycmF5MSwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcmVwbGFjZSgkYXJyYXkxKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXBwbGllcyB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2gKICogZWxlbWVudCBvZiB0aGUgYXJyYXkuIFRoaXMgZnVuY3Rpb24gd2lsbCByZWN1cnNlCiAqIGludG8gZGVlcGVyIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgVHlwaWNhbGx5LCBjYWxsYmFjayB0YWtlcyBvbiB0d28gcGFyYW1ldGVycy4KICogVGhlIGFycmF5IHBhcmFtZXRlcidzIHZhbHVlIGJlaW5nIHRoZSBmaXJzdCwgYW5kCiAqIHRoZSBrZXkvaW5kZXggc2Vjb25kLgogKgogKiBJZiBjYWxsYmFjayBuZWVkcyB0byBiZSB3b3JraW5nIHdpdGggdGhlCiAqIGFjdHVhbCB2YWx1ZXMgb2YgdGhlIGFycmF5LCBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YKICogY2FsbGJhY2sgYXMgYQogKiByZWZlcmVuY2UuIFRoZW4sCiAqIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhvc2UgZWxlbWVudHMgd2lsbCBiZSBtYWRlIGluIHRoZQogKiBvcmlnaW5hbCBhcnJheSBpdHNlbGYuCiAqIEBwYXJhbSBtaXhlZCAkdXNlcmRhdGEgSWYgdGhlIG9wdGlvbmFsIHVzZXJkYXRhIHBhcmFtZXRlciBpcyBzdXBwbGllZCwKICogaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkIHBhcmFtZXRlciB0byB0aGUKICogY2FsbGJhY2suCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFycmF5X3dhbGtfcmVjdXJzaXZlKGFycmF5ICYkYXJyYXksIGNhbGxhYmxlICRjYWxsYmFjaywgJHVzZXJkYXRhID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcnJheV93YWxrX3JlY3Vyc2l2ZSgkYXJyYXksICRjYWxsYmFjaywgJHVzZXJkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHNvcnRzIGFuIGFycmF5IHN1Y2ggdGhhdCBhcnJheSBpbmRpY2VzIG1haW50YWluIHRoZWlyCiAqIGNvcnJlbGF0aW9uIHdpdGggdGhlIGFycmF5IGVsZW1lbnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4KICoKICogVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIHRoZSBhY3R1YWwKICogZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIKICogc29ydF9mbGFncywgZm9yIGRldGFpbHMgc2VlCiAqIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFyc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYXJzb3J0KCRhcnJheSwgJHNvcnRfZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gc29ydHMgYW4gYXJyYXkgc3VjaCB0aGF0IGFycmF5IGluZGljZXMgbWFpbnRhaW4KICogdGhlaXIgY29ycmVsYXRpb24gd2l0aCB0aGUgYXJyYXkgZWxlbWVudHMgdGhleSBhcmUgYXNzb2NpYXRlZAogKiB3aXRoLiAgVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlCiAqIHRoZSBhY3R1YWwgZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbAogKiBwYXJhbWV0ZXIgc29ydF9mbGFncywgZm9yIGRldGFpbHMKICogc2VlIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGFzb3J0KGFycmF5ICYkYXJyYXksIGludCAkc29ydF9mbGFncyA9IFNPUlRfUkVHVUxBUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTb3J0cyBhbiBhcnJheSBieSBrZXkgaW4gcmV2ZXJzZSBvcmRlciwgbWFpbnRhaW5pbmcga2V5IHRvIGRhdGEKICogY29ycmVsYXRpb25zLiBUaGlzIGlzIHVzZWZ1bCBtYWlubHkgZm9yIGFzc29jaWF0aXZlIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIKICogc29ydF9mbGFncywgZm9yIGRldGFpbHMgc2VlCiAqIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGtyc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBca3Jzb3J0KCRhcnJheSwgJHNvcnRfZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNvcnRzIGFuIGFycmF5IGJ5IGtleSwgbWFpbnRhaW5pbmcga2V5IHRvIGRhdGEgY29ycmVsYXRpb25zLiBUaGlzIGlzCiAqIHVzZWZ1bCBtYWlubHkgZm9yIGFzc29jaWF0aXZlIGFycmF5cy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgWW91IG1heSBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBzb3J0IHVzaW5nIHRoZSBvcHRpb25hbAogKiBwYXJhbWV0ZXIgc29ydF9mbGFncywgZm9yIGRldGFpbHMKICogc2VlIHNvcnQuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGtzb3J0KGFycmF5ICYkYXJyYXksIGludCAkc29ydF9mbGFncyA9IFNPUlRfUkVHVUxBUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxrc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBuYXRjYXNlc29ydCBpcyBhIGNhc2UgaW5zZW5zaXRpdmUgdmVyc2lvbiBvZgogKiBuYXRzb3J0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBzb3J0IGFsZ29yaXRobSB0aGF0IG9yZGVycwogKiBhbHBoYW51bWVyaWMgc3RyaW5ncyBpbiB0aGUgd2F5IGEgaHVtYW4gYmVpbmcgd291bGQgd2hpbGUgbWFpbnRhaW5pbmcKICoga2V5L3ZhbHVlIGFzc29jaWF0aW9ucy4gIFRoaXMgaXMgZGVzY3JpYmVkIGFzIGEgIm5hdHVyYWwgb3JkZXJpbmciLgogKgogKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBpbnB1dCBhcnJheS4KICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbmF0Y2FzZXNvcnQoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxuYXRjYXNlc29ydCgkYXJyYXkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBhIHNvcnQgYWxnb3JpdGhtIHRoYXQgb3JkZXJzIGFscGhhbnVtZXJpYyBzdHJpbmdzCiAqIGluIHRoZSB3YXkgYSBodW1hbiBiZWluZyB3b3VsZCB3aGlsZSBtYWludGFpbmluZyBrZXkvdmFsdWUgYXNzb2NpYXRpb25zLgogKiBUaGlzIGlzIGRlc2NyaWJlZCBhcyBhICJuYXR1cmFsIG9yZGVyaW5nIi4gIEFuIGV4YW1wbGUgb2YgdGhlIGRpZmZlcmVuY2UKICogYmV0d2VlbiB0aGlzIGFsZ29yaXRobSBhbmQgdGhlIHJlZ3VsYXIgY29tcHV0ZXIgc3RyaW5nIHNvcnRpbmcgYWxnb3JpdGhtcwogKiAodXNlZCBpbiBzb3J0KSBjYW4gYmUgc2VlbiBpbiB0aGUgZXhhbXBsZSBiZWxvdy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG5hdHNvcnQoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxuYXRzb3J0KCRhcnJheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzb3J0cyBhbiBhcnJheSBpbiByZXZlcnNlIG9yZGVyIChoaWdoZXN0IHRvIGxvd2VzdCkuCiAqCiAqIEBwYXJhbSBhcnJheSAkYXJyYXkgVGhlIGlucHV0IGFycmF5LgogKiBAcGFyYW0gaW50ICRzb3J0X2ZsYWdzIFlvdSBtYXkgbW9kaWZ5IHRoZSBiZWhhdmlvciBvZiB0aGUgc29ydCB1c2luZyB0aGUgb3B0aW9uYWwKICogcGFyYW1ldGVyIHNvcnRfZmxhZ3MsIGZvciBkZXRhaWxzIHNlZQogKiBzb3J0LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccnNvcnQoJGFycmF5LCAkc29ydF9mbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzaHVmZmxlcyAocmFuZG9taXplcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluKSBhbiBhcnJheS4KICogSXQgdXNlcyBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IGlzIG5vdCBzdWl0YWJsZSBmb3IKICogY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgYXJyYXkuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNodWZmbGUoYXJyYXkgJiRhcnJheSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaHVmZmxlKCRhcnJheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBzb3J0cyBhbiBhcnJheS4gIEVsZW1lbnRzIHdpbGwgYmUgYXJyYW5nZWQgZnJvbQogKiBsb3dlc3QgdG8gaGlnaGVzdCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBpbnQgJHNvcnRfZmxhZ3MgVGhlIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgc29ydF9mbGFncwogKiBtYXkgYmUgdXNlZCB0byBtb2RpZnkgdGhlIHNvcnRpbmcgYmVoYXZpb3IgdXNpbmcgdGhlc2UgdmFsdWVzOgogKgogKiBTb3J0aW5nIHR5cGUgZmxhZ3M6CiAqCiAqCiAqIFNPUlRfUkVHVUxBUiAtIGNvbXBhcmUgaXRlbXMgbm9ybWFsbHk7CiAqIHRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIHNlY3Rpb24KICoKICoKICogU09SVF9OVU1FUklDIC0gY29tcGFyZSBpdGVtcyBudW1lcmljYWxseQogKgogKgogKiBTT1JUX1NUUklORyAtIGNvbXBhcmUgaXRlbXMgYXMgc3RyaW5ncwogKgogKgogKgogKiBTT1JUX0xPQ0FMRV9TVFJJTkcgLSBjb21wYXJlIGl0ZW1zIGFzCiAqIHN0cmluZ3MsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4gSXQgdXNlcyB0aGUgbG9jYWxlLAogKiB3aGljaCBjYW4gYmUgY2hhbmdlZCB1c2luZyBzZXRsb2NhbGUKICoKICoKICoKICoKICogU09SVF9OQVRVUkFMIC0gY29tcGFyZSBpdGVtcyBhcyBzdHJpbmdzCiAqIHVzaW5nICJuYXR1cmFsIG9yZGVyaW5nIiBsaWtlIG5hdHNvcnQKICoKICoKICoKICoKICogU09SVF9GTEFHX0NBU0UgLSBjYW4gYmUgY29tYmluZWQKICogKGJpdHdpc2UgT1IpIHdpdGgKICogU09SVF9TVFJJTkcgb3IKICogU09SVF9OQVRVUkFMIHRvIHNvcnQgc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkKICoKICoKICoKICogQHRocm93cyBBcnJheUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ydChhcnJheSAmJGFycmF5LCBpbnQgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ydCgkYXJyYXksICRzb3J0X2ZsYWdzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFycmF5RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHNvcnRzIGFuIGFycmF5IHN1Y2ggdGhhdCBhcnJheSBpbmRpY2VzIG1haW50YWluIHRoZWlyCiAqIGNvcnJlbGF0aW9uIHdpdGggdGhlIGFycmF5IGVsZW1lbnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCwgdXNpbmcgYQogKiB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbi4KICoKICogVGhpcyBpcyB1c2VkIG1haW5seSB3aGVuIHNvcnRpbmcgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIHRoZSBhY3R1YWwKICogZWxlbWVudCBvcmRlciBpcyBzaWduaWZpY2FudC4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jIFNlZSB1c29ydCBhbmQgdWtzb3J0IGZvcgogKiBleGFtcGxlcyBvZiB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbnMuCiAqIEB0aHJvd3MgQXJyYXlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHVhc29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHVhc29ydCgkYXJyYXksICR2YWx1ZV9jb21wYXJlX2Z1bmMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHVrc29ydCB3aWxsIHNvcnQgdGhlIGtleXMgb2YgYW4gYXJyYXkgdXNpbmcgYQogKiB1c2VyLXN1cHBsaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24uICBJZiB0aGUgYXJyYXkgeW91IHdpc2ggdG8gc29ydAogKiBuZWVkcyB0byBiZSBzb3J0ZWQgYnkgc29tZSBub24tdHJpdmlhbCBjcml0ZXJpYSwgeW91IHNob3VsZCB1c2UKICogdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAka2V5X2NvbXBhcmVfZnVuYyBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHRvIGJlIHJlc3BlY3RpdmVseSBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIHNlY29uZC4KICogTm90ZSB0aGF0IGJlZm9yZSBQSFAgNy4wLjAgdGhpcyBpbnRlZ2VyIGhhZCB0byBiZSBpbiB0aGUgcmFuZ2UgZnJvbSAtMjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3LgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1a3NvcnQoYXJyYXkgJiRhcnJheSwgY2FsbGFibGUgJGtleV9jb21wYXJlX2Z1bmMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdWtzb3J0KCRhcnJheSwgJGtleV9jb21wYXJlX2Z1bmMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQXJyYXlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzb3J0IGFuIGFycmF5IGJ5IGl0cyB2YWx1ZXMgdXNpbmcgYSB1c2VyLXN1cHBsaWVkCiAqIGNvbXBhcmlzb24gZnVuY3Rpb24uICBJZiB0aGUgYXJyYXkgeW91IHdpc2ggdG8gc29ydCBuZWVkcyB0byBiZSBzb3J0ZWQgYnkKICogc29tZSBub24tdHJpdmlhbCBjcml0ZXJpYSwgeW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGFycmF5ICRhcnJheSBUaGUgaW5wdXQgYXJyYXkuCiAqIEBwYXJhbSBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgcmVzcGVjdGl2ZWx5IGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kLgogKiBOb3RlIHRoYXQgYmVmb3JlIFBIUCA3LjAuMCB0aGlzIGludGVnZXIgaGFkIHRvIGJlIGluIHRoZSByYW5nZSBmcm9tIC0yMTQ3NDgzNjQ4IHRvIDIxNDc0ODM2NDcuCiAqCiAqIFJldHVybmluZyBub24taW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgY29tcGFyaXNvbgogKiBmdW5jdGlvbiwgc3VjaCBhcyBmbG9hdCwgd2lsbCByZXN1bHQgaW4gYW4gaW50ZXJuYWwgY2FzdCB0bwogKiBpbnRlZ2VyIG9mIHRoZSBjYWxsYmFjaydzIHJldHVybiB2YWx1ZS4gU28gdmFsdWVzIHN1Y2ggYXMKICogMC45OSBhbmQgMC4xIHdpbGwgYm90aCBiZSBjYXN0IHRvIGFuIGludGVnZXIgdmFsdWUgb2YgMCwgd2hpY2ggd2lsbAogKiBjb21wYXJlIHN1Y2ggdmFsdWVzIGFzIGVxdWFsLgogKiBAdGhyb3dzIEFycmF5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1c29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkdmFsdWVfY29tcGFyZV9mdW5jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHVzb3J0KCRhcnJheSwgJHZhbHVlX2NvbXBhcmVfZnVuYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBBcnJheUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/bzip2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xCemlwMkV4Y2VwdGlvbjsKCi8qKgogKiBDbG9zZXMgdGhlIGdpdmVuIGJ6aXAyIGZpbGUgcG9pbnRlci4KICoKICogQHBhcmFtIHJlc291cmNlICRieiBUaGUgZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGJ6b3Blbi4KICogQHRocm93cyBCemlwMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYnpjbG9zZSgkYnopOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcYnpjbG9zZSgkYnopOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQnppcDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZvcmNlcyBhIHdyaXRlIG9mIGFsbCBidWZmZXJlZCBiemlwMiBkYXRhIGZvciB0aGUgZmlsZSBwb2ludGVyCiAqIGJ6LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBiemZsdXNoKCRieik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxiemZsdXNoKCRieik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBCemlwMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogYnpyZWFkIHJlYWRzIGZyb20gdGhlIGdpdmVuIGJ6aXAyIGZpbGUgcG9pbnRlci4KICoKICogUmVhZGluZyBzdG9wcyB3aGVuIGxlbmd0aCAodW5jb21wcmVzc2VkKSBieXRlcyBoYXZlCiAqIGJlZW4gcmVhZCBvciBFT0YgaXMgcmVhY2hlZCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAcGFyYW0gaW50ICRsZW5ndGggSWYgbm90IHNwZWNpZmllZCwgYnpyZWFkIHdpbGwgcmVhZCAxMDI0CiAqICh1bmNvbXByZXNzZWQpIGJ5dGVzIGF0IGEgdGltZS4gQSBtYXhpbXVtIG9mIDgxOTIKICogdW5jb21wcmVzc2VkIGJ5dGVzIHdpbGwgYmUgcmVhZCBhdCBhIHRpbWUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBienJlYWQoJGJ6LCBpbnQgJGxlbmd0aCA9IDEwMjQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxienJlYWQoJGJ6LCAkbGVuZ3RoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEJ6aXAyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGJ6d3JpdGUgd3JpdGVzIGEgc3RyaW5nIGludG8gdGhlIGdpdmVuIGJ6aXAyIGZpbGUKICogc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJ6IFRoZSBmaWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgYnpvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSB3cml0dGVuIGRhdGEuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBJZiBzdXBwbGllZCwgd3JpdGluZyB3aWxsIHN0b3AgYWZ0ZXIgbGVuZ3RoCiAqICh1bmNvbXByZXNzZWQpIGJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuIG9yIHRoZSBlbmQgb2YKICogZGF0YSBpcyByZWFjaGVkLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgogKiBAdGhyb3dzIEJ6aXAyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBiendyaXRlKCRieiwgc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGJ6d3JpdGUoJGJ6LCAkZGF0YSwgJGxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcYnp3cml0ZSgkYnosICRkYXRhKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEJ6aXAyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/calendar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDYWxlbmRhckV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgVW5peCB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGUKICogSnVsaWFuIERheSBnaXZlbiBpbiBqZGF5IG9yIEZBTFNFIGlmCiAqIGpkYXkgaXMgb3V0c2lkZSBvZiB0aGUgYWxsb3dlZCByYW5nZS4gVGhlIHRpbWUgcmV0dXJuZWQgaXMKICogVVRDLgogKgogKiBAcGFyYW0gaW50ICRqZGF5IEEganVsaWFuIGRheSBudW1iZXIgYmV0d2VlbiAyNDQwNTg4IGFuZCAxMDY3NTE5OTM2MDc4ODgKICogb24gNjRiaXQgc3lzdGVtcywgb3IgYmV0d2VlbiAyNDQwNTg4IGFuZCAyNDY1NDQzIG9uIDMyYml0IHN5c3RlbXMuCiAqIEByZXR1cm4gaW50IFRoZSB1bml4IHRpbWVzdGFtcCBmb3IgdGhlIHN0YXJ0IChtaWRuaWdodCwgbm90IG5vb24pIG9mIHRoZSBnaXZlbiBKdWxpYW4gZGF5LgogKiBAdGhyb3dzIENhbGVuZGFyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBqZHRvdW5peChpbnQgJGpkYXkpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxqZHRvdW5peCgkamRheSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDYWxlbmRhckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/classobj.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDbGFzc29iakV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFsaWFzIG5hbWVkIGFsaWFzCiAqIGJhc2VkIG9uIHRoZSB1c2VyIGRlZmluZWQgY2xhc3Mgb3JpZ2luYWwuCiAqIFRoZSBhbGlhc2VkIGNsYXNzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGNsYXNzLgogKgogKiBAcGFyYW0gc3RyaW5nICRvcmlnaW5hbCBUaGUgb3JpZ2luYWwgY2xhc3MuCiAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIFRoZSBhbGlhcyBuYW1lIGZvciB0aGUgY2xhc3MuCiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBXaGV0aGVyIHRvIGF1dG9sb2FkIGlmIHRoZSBvcmlnaW5hbCBjbGFzcyBpcyBub3QgZm91bmQuCiAqIEB0aHJvd3MgQ2xhc3NvYmpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNsYXNzX2FsaWFzKHN0cmluZyAkb3JpZ2luYWwsIHN0cmluZyAkYWxpYXMsIGJvb2wgJGF1dG9sb2FkID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19hbGlhcygkb3JpZ2luYWwsICRhbGlhcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENsYXNzb2JqRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/com.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDb21FeGNlcHRpb247CgovKioKICogSW5zdHJ1Y3RzIENPTSB0byBzaW5rIGV2ZW50cyBnZW5lcmF0ZWQgYnkKICogY29tb2JqZWN0IGludG8gdGhlIFBIUCBvYmplY3QKICogc2lua29iamVjdC4KICoKICogQmUgY2FyZWZ1bCBob3cgeW91IHVzZSB0aGlzIGZlYXR1cmU7IGlmIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIKICogdG8gdGhlIGV4YW1wbGUgYmVsb3csIHRoZW4gaXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBydW4gaXQgaW4gYQogKiB3ZWIgc2VydmVyIGNvbnRleHQuCiAqCiAqIEBwYXJhbSBvYmplY3QgJGNvbW9iamVjdAogKiBAcGFyYW0gb2JqZWN0ICRzaW5rb2JqZWN0IHNpbmtvYmplY3Qgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgd2l0aAogKiBtZXRob2RzIG5hbWVkIGFmdGVyIHRob3NlIG9mIHRoZSBkZXNpcmVkIGRpc3BpbnRlcmZhY2U7IHlvdSBtYXkgdXNlCiAqIGNvbV9wcmludF90eXBlaW5mbyB0byBoZWxwIGdlbmVyYXRlIGEgdGVtcGxhdGUgY2xhc3MKICogZm9yIHRoaXMgcHVycG9zZS4KICogQHBhcmFtIG1peGVkICRzaW5raW50ZXJmYWNlIFBIUCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBkZWZhdWx0IGRpc3BpbnRlcmZhY2UgdHlwZSBzcGVjaWZpZWQgYnkKICogdGhlIHR5cGVsaWJyYXJ5IGFzc29jaWF0ZWQgd2l0aCBjb21vYmplY3QsIGJ1dAogKiB5b3UgbWF5IG92ZXJyaWRlIHRoaXMgY2hvaWNlIGJ5IHNldHRpbmcKICogc2lua2ludGVyZmFjZSB0byB0aGUgbmFtZSBvZiB0aGUgZGlzcGludGVyZmFjZQogKiB0aGF0IHlvdSB3YW50IHRvIHVzZS4KICogQHRocm93cyBDb21FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNvbV9ldmVudF9zaW5rKG9iamVjdCAkY29tb2JqZWN0LCBvYmplY3QgJHNpbmtvYmplY3QsICRzaW5raW50ZXJmYWNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzaW5raW50ZXJmYWNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxjb21fZXZlbnRfc2luaygkY29tb2JqZWN0LCAkc2lua29iamVjdCwgJHNpbmtpbnRlcmZhY2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGNvbV9ldmVudF9zaW5rKCRjb21vYmplY3QsICRzaW5rb2JqZWN0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTG9hZHMgYSB0eXBlLWxpYnJhcnkgYW5kIHJlZ2lzdGVycyBpdHMgY29uc3RhbnRzIGluIHRoZSBlbmdpbmUsIGFzIHRob3VnaAogKiB0aGV5IHdlcmUgZGVmaW5lZCB1c2luZyBkZWZpbmUuCiAqCiAqIE5vdGUgdGhhdCBpdCBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0byBwcmUtbG9hZCBhbmQKICogcmVnaXN0ZXIgdGhlIGNvbnN0YW50cywgYWx0aG91Z2ggbm90IHNvIGZsZXhpYmxlLgogKgogKiBJZiB5b3UgaGF2ZSB0dXJuZWQgb24gLCB0aGVuCiAqIFBIUCB3aWxsIGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciB0aGUgY29uc3RhbnRzIGFzc29jaWF0ZWQgd2l0aCBhCiAqIENPTSBvYmplY3Qgd2hlbiB5b3UgaW5zdGFudGlhdGUgaXQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGludGVyZmFjZXMKICogcHJvdmlkZWQgYnkgdGhlIENPTSBvYmplY3QgaXRzZWxmLCBhbmQgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGVsaWJfbmFtZSB0eXBlbGliX25hbWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBUaGUgZmlsZW5hbWUgb2YgYSAudGxiIGZpbGUgb3IgdGhlIGV4ZWN1dGFibGUgbW9kdWxlCiAqIHRoYXQgY29udGFpbnMgdGhlIHR5cGUgbGlicmFyeS4KICoKICoKICoKICoKICogVGhlIHR5cGUgbGlicmFyeSBHVUlELCBmb2xsb3dlZCBieSBpdHMgdmVyc2lvbiBudW1iZXIsIGZvciBleGFtcGxlCiAqIHswMDAwMDIwMC0wMDAwLTAwMTAtODAwMC0wMEFBMDA2RDJFQTR9LDIsMC4KICoKICoKICoKICoKICogVGhlIHR5cGUgbGlicmFyeSBuYW1lLCBlLmcuIE1pY3Jvc29mdCBPTEUgREIgQWN0aXZlWCBEYXRhCiAqIE9iamVjdHMgMS4wIExpYnJhcnkuCiAqCiAqCiAqCiAqIFBIUCB3aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgdHlwZSBsaWJyYXJ5IGluIHRoaXMgb3JkZXIsIGFzIHRoZQogKiBwcm9jZXNzIGdldHMgbW9yZSBhbmQgbW9yZSBleHBlbnNpdmUgYXMgeW91IHByb2dyZXNzIGRvd24gdGhlIGxpc3Q7CiAqIHNlYXJjaGluZyBmb3IgdGhlIHR5cGUgbGlicmFyeSBieSBuYW1lIGlzIGhhbmRsZWQgYnkgcGh5c2ljYWxseQogKiBlbnVtZXJhdGluZyB0aGUgcmVnaXN0cnkgdW50aWwgd2UgZmluZCBhIG1hdGNoLgogKgogKiBUaGUgZmlsZW5hbWUgb2YgYSAudGxiIGZpbGUgb3IgdGhlIGV4ZWN1dGFibGUgbW9kdWxlCiAqIHRoYXQgY29udGFpbnMgdGhlIHR5cGUgbGlicmFyeS4KICoKICogVGhlIHR5cGUgbGlicmFyeSBHVUlELCBmb2xsb3dlZCBieSBpdHMgdmVyc2lvbiBudW1iZXIsIGZvciBleGFtcGxlCiAqIHswMDAwMDIwMC0wMDAwLTAwMTAtODAwMC0wMEFBMDA2RDJFQTR9LDIsMC4KICoKICogVGhlIHR5cGUgbGlicmFyeSBuYW1lLCBlLmcuIE1pY3Jvc29mdCBPTEUgREIgQWN0aXZlWCBEYXRhCiAqIE9iamVjdHMgMS4wIExpYnJhcnkuCiAqIEBwYXJhbSBib29sICRjYXNlX3NlbnNpdGl2ZSBUaGUgY2FzZV9zZW5zaXRpdmUgYmVoYXZlcyBpbnZlcnNlbHkgdG8KICogdGhlIHBhcmFtZXRlciAkY2FzZV9pbnNlbnNpdGl2ZSBpbiB0aGUgZGVmaW5lCiAqIGZ1bmN0aW9uLgogKiBAdGhyb3dzIENvbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29tX2xvYWRfdHlwZWxpYihzdHJpbmcgJHR5cGVsaWJfbmFtZSwgYm9vbCAkY2FzZV9zZW5zaXRpdmUgPSB0cnVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNvbV9sb2FkX3R5cGVsaWIoJHR5cGVsaWJfbmFtZSwgJGNhc2Vfc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBoZWxwIGdlbmVyYXRlIGEgc2tlbGV0b24gY2xhc3MgZm9yIHVzZQogKiBhcyBhbiBldmVudCBzaW5rLiAgWW91IG1heSBhbHNvIHVzZSBpdCB0byBnZW5lcmF0ZSBhIGR1bXAgb2YgYW55IENPTQogKiBvYmplY3QsIHByb3ZpZGVkIHRoYXQgaXQgc3VwcG9ydHMgZW5vdWdoIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGludGVyZmFjZXMsCiAqIGFuZCB0aGF0IHlvdSBrbm93IHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgeW91IHdhbnQgdG8gZGlzcGxheS4KICoKICogQHBhcmFtIG9iamVjdCAkY29tb2JqZWN0IGNvbW9iamVjdCBzaG91bGQgYmUgZWl0aGVyIGFuIGluc3RhbmNlIG9mIGEgQ09NCiAqIG9iamVjdCwgb3IgYmUgdGhlIG5hbWUgb2YgYSB0eXBlbGlicmFyeSAod2hpY2ggd2lsbCBiZSByZXNvbHZlZCBhY2NvcmRpbmcKICogdG8gdGhlIHJ1bGVzIHNldCBvdXQgaW4gY29tX2xvYWRfdHlwZWxpYikuCiAqIEBwYXJhbSBzdHJpbmcgJGRpc3BpbnRlcmZhY2UgVGhlIG5hbWUgb2YgYW4gSURpc3BhdGNoIGRlc2NlbmRhbnQgaW50ZXJmYWNlIHRoYXQgeW91IHdhbnQgdG8gZGlzcGxheS4KICogQHBhcmFtIGJvb2wgJHdhbnRzaW5rIElmIHNldCB0byBUUlVFLCB0aGUgY29ycmVzcG9uZGluZyBzaW5rIGludGVyZmFjZSB3aWxsIGJlIGRpc3BsYXllZAogKiBpbnN0ZWFkLgogKiBAdGhyb3dzIENvbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29tX3ByaW50X3R5cGVpbmZvKG9iamVjdCAkY29tb2JqZWN0LCBzdHJpbmcgJGRpc3BpbnRlcmZhY2UgPSBudWxsLCBib29sICR3YW50c2luayA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNvbV9wcmludF90eXBlaW5mbygkY29tb2JqZWN0LCAkZGlzcGludGVyZmFjZSwgJHdhbnRzaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IENvbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/cubrid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDdWJyaWRFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IHRoZSByZXN1bHQgZGF0YS4gSXQgcmV0dXJucwogKiBUUlVFIG9uIHN1Y2Nlc3MuIE5vdGUgdGhhdCBpdCBjYW4gb25seSBmcmVlcyB0aGUKICogY2xpZW50IGZldGNoIGJ1ZmZlciBub3csIGFuZCBpZiB5b3Ugd2FudCBmcmVlIGFsbCBtZW1vcnksIHVzZSBmdW5jdGlvbgogKiBjdWJyaWRfY2xvc2VfcmVxdWVzdC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXFfaWRlbnRpZmllciBUaGlzIGlzIHRoZSByZXF1ZXN0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZnJlZV9yZXN1bHQoJHJlcV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9mcmVlX3Jlc3VsdCgkcmVxX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgQ1VCUklEIGNvbm5lY3Rpb24gY2hhcnNldCBhbmQgaXMgc2ltaWxhcgogKiB0byB0aGUgQ1VCUklEIE15U1FMIGNvbXBhdGlibGUgZnVuY3Rpb24KICogY3VicmlkX2NsaWVudF9lbmNvZGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBjb25uZWN0aW9uIGNoYXJzZXQ7IG9uIHN1Y2Nlc3MuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZ2V0X2NoYXJzZXQoJGNvbm5faWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfY2hhcnNldCgkY29ubl9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjbGllbnQgbGlicmFyeSB2ZXJzaW9uLgogKgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNsaWVudCBsaWJyYXJ5IHZlcnNpb247IG9uIHN1Y2Nlc3MuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfZ2V0X2NsaWVudF9pbmZvKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfY2xpZW50X2luZm8oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIENVQlJJRCBkYXRhYmFzZSBwYXJhbWV0ZXJzIG9yIGl0IHJldHVybnMgRkFMU0Ugb24KICogZmFpbHVyZS4gSXQgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcKICogcGFyYW1ldGVyczoKICoKICoKICogUEFSQU1fSVNPTEFUSU9OX0xFVkVMCiAqIFBBUkFNX0xPQ0tfVElNRU9VVAogKiBQQVJBTV9NQVhfU1RSSU5HX0xFTkdUSAogKiBQQVJBTV9BVVRPX0NPTU1JVAogKgogKgogKgogKiBEYXRhYmFzZSBwYXJhbWV0ZXJzCiAqCiAqCiAqCiAqIFBhcmFtZXRlcgogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBQQVJBTV9JU09MQVRJT05fTEVWRUwKICogVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICoKICoKICogTE9DS19USU1FT1VUCiAqIENVQlJJRCBwcm92aWRlcyB0aGUgbG9jayB0aW1lb3V0IGZlYXR1cmUsIHdoaWNoIHNldHMgdGhlIHdhaXRpbmcKICogdGltZSAoaW4gc2Vjb25kcykgZm9yIHRoZSBsb2NrIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBsb2NrIHNldHRpbmcgaXMKICogYWxsb3dlZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGxvY2tfdGltZW91dF9pbl9zZWNzIHBhcmFtZXRlciBpcwogKiAtMSwgd2hpY2ggbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGNsaWVudCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5IHVudGlsCiAqIHRoZSB0cmFuc2FjdGlvbiBsb2NrIGlzIGFsbG93ZWQuCiAqCiAqCiAqCiAqIFBBUkFNX0FVVE9fQ09NTUlUCiAqIEluIENVQlJJRCBQSFAsIGF1dG8tY29tbWl0IG1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IKICogdHJhbnNhY3Rpb24gbWFuYWdlbWVudC4gSXQgY2FuIGJlIHNldCBieSB1c2luZwogKiBjdWJyaWRfc2V0X2F1dG9jb21taXQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGlzb2xhdGlvbiBsZXZlbHMgZnJvbSAxIHRvIDYuIEl0IGNvbnNpc3RzIG9mCiAqIHRhYmxlIHNjaGVtYSAocm93KSBhbmQgaXNvbGF0aW9uIGxldmVsOgogKgogKiBMZXZlbHMgb2YgSXNvbGF0aW9uIFN1cHBvcnRlZCBieSBDVUJSSUQKICoKICoKICoKICogTmFtZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBTRVJJQUxJWkFCTEUgKDYpCiAqIEluIHRoaXMgaXNvbGF0aW9uIGxldmVsLCBwcm9ibGVtcyBjb25jZXJuaW5nIGNvbmN1cnJlbmN5IChlLmcuCiAqIGRpcnR5IHJlYWQsIG5vbi1yZXBlYXRhYmxlIHJlYWQsIHBoYW50b20gcmVhZCwgZXRjLikgZG8gbm90CiAqIG9jY3VyLgogKgogKgogKiBSRVBFQVRBQkxFIFJFQUQgQ0xBU1Mgd2l0aCBSRVBFQVRBQkxFIFJFQUQgSU5TVEFOQ0VTICg1KQogKiBBbm90aGVyIHRyYW5zYWN0aW9uIFQyIGNhbm5vdCB1cGRhdGUgdGhlIHNjaGVtYSBvZiB0YWJsZSBBIHdoaWxlCiAqIHRyYW5zYWN0aW9uIFQxIGlzIHZpZXdpbmcgdGFibGUgQS4KICogVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UgcGhhbnRvbSByZWFkIGZvciB0aGUgcmVjb3JkIFIgdGhhdCB3YXMKICogaW5zZXJ0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMiB3aGVuIGl0IGlzIHJlcGVhdGVkbHkgcmV0cmlldmluZyBhCiAqIHNwZWNpZmljIHJlY29yZC4KICoKICoKICogUkVQRUFUQUJMRSBSRUFEIENMQVNTIHdpdGggUkVBRCBDT01NSVRURUQgSU5TVEFOQ0VTIChvciBDVVJTT1IgU1RBQklMSVRZKSAoNCkKICogQW5vdGhlciB0cmFuc2FjdGlvbiBUMiBjYW5ub3QgdXBkYXRlIHRoZSBzY2hlbWEgb2YgdGFibGUgQSB3aGlsZQogKiB0cmFuc2FjdGlvbiBUMSBpcyB2aWV3aW5nIHRhYmxlIEEuCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIFIgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgdGhhdCB3YXMKICogdXBkYXRlZCBhbmQgY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gVDIgd2hlbiBpdCBpcyByZXBlYXRlZGx5CiAqIHJldHJpZXZpbmcgdGhlIHJlY29yZCBSLgogKgogKgogKiBSRVBFQVRBQkxFIFJFQUQgQ0xBU1Mgd2l0aCBSRUFEIFVOQ09NTUlUVEVEIElOU1RBTkNFUyAoMykKICogRGVmYXVsdCBpc29sYXRpb24gbGV2ZWwuICBBbm90aGVyIHRyYW5zYWN0aW9uIFQyIGNhbm5vdCB1cGRhdGUKICogdGhlIHNjaGVtYSBvZiB0YWJsZSBBICB3aGlsZSB0cmFuc2FjdGlvbiBUMSBpcyB2aWV3aW5nIHRhYmxlIEEuCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIFInIHJlYWQgKGRpcnR5IHJlYWQpIGZvciB0aGUgcmVjb3JkIHRoYXQKICogd2FzIHVwZGF0ZWQgYnV0IG5vdCBjb21taXR0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMi4KICoKICoKICogUkVBRCBDT01NSVRURUQgQ0xBU1Mgd2l0aCBSRUFEIENPTU1JVFRFRCBJTlNUQU5DRVMgKDIpCiAqIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlIEEnIHJlYWQgKG5vbi1yZXBlYXRhYmxlIHJlYWQpIGZvcgogKiB0aGUgdGFibGUgdGhhdCB3YXMgdXBkYXRlZCBhbmQgY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gIFQyCiAqIHdoaWxlIGl0IGlzIHZpZXdpbmcgdGFibGUgQSByZXBlYXRlZGx5LiAgVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UKICogUicgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgZm9yIHRoZSByZWNvcmQgdGhhdCB3YXMgdXBkYXRlZCBhbmQKICogY29tbWl0dGVkIGJ5IGFub3RoZXIgdHJhbnNhY3Rpb24gVDIgd2hpbGUgaXQgaXMgcmV0cmlldmluZyB0aGUgcmVjb3JkCiAqIFIgcmVwZWF0ZWRseS4KICoKICoKICogUkVBRCBDT01NSVRURUQgQ0xBU1Mgd2l0aCBSRUFEIFVOQ09NTUlUVEVEIElOU1RBTkNFUyAoMSkKICogVHJhbnNhY3Rpb24gVDEgbWF5IGV4cGVyaWVuY2UgQScgcmVhZCAobm9uLXJlcGVhdGFibGUgcmVhZCkgZm9yCiAqIHRoZSB0YWJsZSB0aGF0IHdhcyB1cGRhdGVkIGFuZCBjb21taXR0ZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMgogKiB3aGlsZSBpdCBpcyByZXBlYXRlZGx5IHZpZXdpbmcgdGFibGUgQS4gIFRyYW5zYWN0aW9uIFQxIG1heSBleHBlcmllbmNlCiAqIFInIHJlYWQgKGRpcnR5IHJlYWQpIGZvciB0aGUgcmVjb3JkIHRoYXQgd2FzIHVwZGF0ZWQgYnV0IG5vdCBjb21taXR0ZWQKICogYnkgYW5vdGhlciB0cmFuc2FjdGlvbiBUMi4KICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLiBJZiB0aGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsCiAqIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IGN1YnJpZF9jb25uZWN0IGlzIGFzc3VtZWQuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBDVUJSSUQgZGF0YWJhc2UgcGFyYW1ldGVyczsgb24gc3VjY2Vzcy4KICoKICogRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9nZXRfZGJfcGFyYW1ldGVyKCRjb25uX2lkZW50aWZpZXIpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfZGJfcGFyYW1ldGVyKCRjb25uX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBzZXJ2ZXIgdmVyc2lvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgVGhlIENVQlJJRCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIENVQlJJRCBzZXJ2ZXIgdmVyc2lvbjsgb24gc3VjY2Vzcy4KICoKICogRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9nZXRfc2VydmVyX2luZm8oJGNvbm5faWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9nZXRfc2VydmVyX2luZm8oJGNvbm5faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9pbnNlcnRfaWQgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBJRAogKiBnZW5lcmF0ZWQgZm9yIHRoZSBBVVRPX0lOQ1JFTUVOVCBjb2x1bW4gd2hpY2ggaXMgdXBkYXRlZCBieSB0aGUgcHJldmlvdXMKICogSU5TRVJUIHF1ZXJ5LiBJdCByZXR1cm5zIDAgaWYgdGhlIHByZXZpb3VzIHF1ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIG5ldwogKiByb3dzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5faWRlbnRpZmllciBUaGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIHByZXZpb3VzbHkgb2J0YWluZWQgYnkgYSBjYWxsIHRvCiAqIGN1YnJpZF9jb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIGdlbmVyYXRlZCBmb3IgYW4gQVVUT19JTkNSRU1FTlQgY29sdW1uIGJ5IHRoZQogKiBwcmV2aW91cyBxdWVyeSwgb24gc3VjY2Vzcy4KICoKICogMCwgaWYgdGhlIHByZXZpb3VzIHF1ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIG5ldyByb3dzLgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2luc2VydF9pZCgkY29ubl9pZGVudGlmaWVyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5faWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2luc2VydF9pZCgkY29ubl9pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxjdWJyaWRfaW5zZXJ0X2lkKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX25ldyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIGxvYiBvYmplY3QgKGJvdGggQkxPQiBhbmQgQ0xPQikuCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHlvdSBiaW5kIGEgbG9iIG9iamVjdC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uX2lkZW50aWZpZXIgQ29ubmVjdGlvbiBpZGVudGlmaWVyLiBJZiB0aGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsCiAqIHRoZSBsYXN0IGNvbm5lY3Rpb24gb3BlbmVkIGJ5IGN1YnJpZF9jb25uZWN0IG9yCiAqIGN1YnJpZF9jb25uZWN0X3dpdGhfdXJsIGlzIGFzc3VtZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgSXQgbWF5IGJlICJCTE9CIiBvciAiQ0xPQiIsIGl0IHdvbid0IGJlIGNhc2Utc2Vuc2l0aXZlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQkxPQiIuCiAqIEByZXR1cm4gcmVzb3VyY2UgTG9iIGlkZW50aWZpZXIgd2hlbiBpdCBpcyBzdWNjZXNzZnVsLgogKgogKiBGQUxTRSAgb24gZmFpbHVyZS4KICogQHRocm93cyBDdWJyaWRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1YnJpZF9sb2IyX25ldygkY29ubl9pZGVudGlmaWVyID0gbnVsbCwgc3RyaW5nICR0eXBlID0gIkJMT0IiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHR5cGUgIT09ICJCTE9CIikgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2xvYjJfbmV3KCRjb25uX2lkZW50aWZpZXIsICR0eXBlKTsKICAgIH0gZWxzZWlmICgkY29ubl9pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxjdWJyaWRfbG9iMl9uZXcoJGNvbm5faWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcY3VicmlkX2xvYjJfbmV3KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX3NpemUgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHNpemUgb2YgYSBsb2Igb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBpbnQgSXQgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIExPQiBvYmplY3Qgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfc2l6ZSgkbG9iX2lkZW50aWZpZXIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdWJyaWRfbG9iMl9zaXplKCRsb2JfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGN1YnJpZF9sb2IyX3NpemU2NCBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUKICogc2l6ZSBvZiBhIGxvYiBvYmplY3QuICBJZiB0aGUgc2l6ZSBvZiBhIGxvYiBvYmplY3QgaXMgbGFyZ2VyIHRoYW4gYW4KICogaW50ZWdlciBkYXRhIGNhbiBiZSBzdG9yZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHdpbGwgcmV0dXJuCiAqIHRoZSBzaXplIGFzIGEgc3RyaW5nLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBzdHJpbmcgSXQgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIExPQiBvYmplY3QgYXMgYSBzdHJpbmcgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfc2l6ZTY0KCRsb2JfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3NpemU2NCgkbG9iX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBjdWJyaWRfbG9iMl90ZWxsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSBMT0Igb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYl9pZGVudGlmaWVyIExvYiBpZGVudGlmaWVyIGFzIGEgcmVzdWx0IG9mIGN1YnJpZF9sb2IyX25ldyBvciBnZXQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICogQHJldHVybiBpbnQgSXQgd2lsbCByZXR1cm4gdGhlIGN1cnNvciBwb3NpdGlvbiBvbiB0aGUgTE9CIG9iamVjdCB3aGVuIGl0IHByb2Nlc3NlcyBzdWNjZXNzZnVsbHkuCiAqCiAqIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfbG9iMl90ZWxsKCRsb2JfaWRlbnRpZmllcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3RlbGwoJGxvYl9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1YnJpZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGUgY3VicmlkX2xvYjJfdGVsbDY0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUKICogY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSBMT0Igb2JqZWN0LiBJZiB0aGUgc2l6ZSBvZiBhIGxvYiBvYmplY3QgaXMgbGFyZ2VyCiAqIHRoYW4gYW4gaW50ZWdlciBkYXRhIGNhbiBiZSBzdG9yZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHdpbGwKICogcmV0dXJuIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBhcyBhIHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRsb2JfaWRlbnRpZmllciBMb2IgaWRlbnRpZmllciBhcyBhIHJlc3VsdCBvZiBjdWJyaWRfbG9iMl9uZXcgb3IgZ2V0IGZyb20gdGhlIHJlc3VsdCBzZXQuCiAqIEByZXR1cm4gc3RyaW5nIEl0IHdpbGwgcmV0dXJuIHRoZSBjdXJzb3IgcG9zaXRpb24gb24gdGhlIExPQiBvYmplY3QgYXMgYSBzdHJpbmcgd2hlbiBpdCBwcm9jZXNzZXMgc3VjY2Vzc2Z1bGx5LgogKgogKiBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1YnJpZEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VicmlkX2xvYjJfdGVsbDY0KCRsb2JfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1YnJpZF9sb2IyX3RlbGw2NCgkbG9iX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VicmlkRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBjdWJyaWRfc2V0X2RiX3BhcmFtZXRlciBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldAogKiB0aGUgQ1VCUklEIGRhdGFiYXNlIHBhcmFtZXRlcnMuIEl0IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBDVUJSSUQgZGF0YWJhc2UKICogcGFyYW1ldGVyczoKICoKICoKICogUEFSQU1fSVNPTEFUSU9OX0xFVkVMCiAqIFBBUkFNX0xPQ0tfVElNRU9VVAogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5faWRlbnRpZmllciBUaGUgQ1VCUklEIGNvbm5lY3Rpb24uIElmIHRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwKICogdGhlIGxhc3QgbGluayBvcGVuZWQgYnkgY3VicmlkX2Nvbm5lY3QgaXMgYXNzdW1lZC4KICogQHBhcmFtIGludCAkcGFyYW1fdHlwZSBEYXRhYmFzZSBwYXJhbWV0ZXIgdHlwZS4KICogQHBhcmFtIGludCAkcGFyYW1fdmFsdWUgSXNvbGF0aW9uIGxldmVsIHZhbHVlICgxLTYpIG9yIGxvY2sgdGltZW91dCAoaW4gc2Vjb25kcykgdmFsdWUuCiAqIEB0aHJvd3MgQ3VicmlkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcigkY29ubl9pZGVudGlmaWVyLCBpbnQgJHBhcmFtX3R5cGUsIGludCAkcGFyYW1fdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VicmlkX3NldF9kYl9wYXJhbWV0ZXIoJGNvbm5faWRlbnRpZmllciwgJHBhcmFtX3R5cGUsICRwYXJhbV92YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdWJyaWRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/curl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xDdXJsRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gVVJMIGVuY29kZXMgdGhlIGdpdmVuIHN0cmluZyBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY2ggQSBjVVJMIGhhbmRsZSByZXR1cm5lZCBieQogKiBjdXJsX2luaXQuCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgZXNjYXBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9lc2NhcGUoJGNoLCBzdHJpbmcgJHN0cik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfZXNjYXBlKCRjaCwgJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFeGVjdXRlIHRoZSBnaXZlbiBjVVJMIHNlc3Npb24uCiAqCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBpbml0aWFsaXppbmcgYSBjVVJMIHNlc3Npb24gYW5kIGFsbAogKiB0aGUgb3B0aW9ucyBmb3IgdGhlIHNlc3Npb24gYXJlIHNldC4KICoKICogQHBhcmFtIHJlc291cmNlICRjaCBBIGNVUkwgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfaW5pdC4KICogQHJldHVybiBib29sfHN0cmluZyBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4gSG93ZXZlciwgaWYgdGhlIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIKICogb3B0aW9uIGlzIHNldCwgaXQgd2lsbCByZXR1cm4KICogdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfZXhlYygkY2gpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VybF9leGVjKCRjaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXN0IHRyYW5zZmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNoIEEgY1VSTCBoYW5kbGUgcmV0dXJuZWQgYnkKICogY3VybF9pbml0LgogKiBAcGFyYW0gaW50ICRvcHQgVGhpcyBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKgogKiBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMIC0gTGFzdCBlZmZlY3RpdmUgVVJMCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfQ09ERSAtICBUaGUgbGFzdCByZXNwb25zZSBjb2RlLgogKiBBcyBvZiBQSFAgNS41LjAgYW5kIGNVUkwgNy4xMC44LCB0aGlzIGlzIGEgbGVnYWN5IGFsaWFzIG9mCiAqIENVUkxJTkZPX1JFU1BPTlNFX0NPREUKICoKICoKICoKICoKICogQ1VSTElORk9fRklMRVRJTUUgLSBSZW1vdGUgdGltZSBvZiB0aGUgcmV0cmlldmVkIGRvY3VtZW50LCB3aXRoIHRoZSBDVVJMT1BUX0ZJTEVUSU1FIGVuYWJsZWQ7IGlmIC0xIGlzIHJldHVybmVkIHRoZSB0aW1lIG9mIHRoZSBkb2N1bWVudCBpcyB1bmtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1RPVEFMX1RJTUUgLSBUb3RhbCB0cmFuc2FjdGlvbiB0aW1lIGluIHNlY29uZHMgZm9yIGxhc3QgdHJhbnNmZXIKICoKICoKICoKICoKICogQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FIC0gVGltZSBpbiBzZWNvbmRzIHVudGlsIG5hbWUgcmVzb2x2aW5nIHdhcyBjb21wbGV0ZQogKgogKgogKgogKgogKiBDVVJMSU5GT19DT05ORUNUX1RJTUUgLSBUaW1lIGluIHNlY29uZHMgaXQgdG9vayB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24KICoKICoKICoKICoKICogQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyBmcm9tIHN0YXJ0IHVudGlsIGp1c3QgYmVmb3JlIGZpbGUgdHJhbnNmZXIgYmVnaW5zCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyB1bnRpbCB0aGUgZmlyc3QgYnl0ZSBpcyBhYm91dCB0byBiZSB0cmFuc2ZlcnJlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19SRURJUkVDVF9DT1VOVCAtIE51bWJlciBvZiByZWRpcmVjdHMsIHdpdGggdGhlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gb3B0aW9uIGVuYWJsZWQKICoKICoKICoKICoKICogQ1VSTElORk9fUkVESVJFQ1RfVElNRSAtIFRpbWUgaW4gc2Vjb25kcyBvZiBhbGwgcmVkaXJlY3Rpb24gc3RlcHMgYmVmb3JlIGZpbmFsIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLCB3aXRoIHRoZSBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIG9wdGlvbiBlbmFibGVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFRElSRUNUX1VSTCAtIFdpdGggdGhlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gb3B0aW9uIGRpc2FibGVkOiByZWRpcmVjdCBVUkwgZm91bmQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24sIHRoYXQgc2hvdWxkIGJlIHJlcXVlc3RlZCBtYW51YWxseSBuZXh0LiBXaXRoIHRoZSBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIG9wdGlvbiBlbmFibGVkOiB0aGlzIGlzIGVtcHR5LiBUaGUgcmVkaXJlY3QgVVJMIGluIHRoaXMgY2FzZSBpcyBhdmFpbGFibGUgaW4gQ1VSTElORk9fRUZGRUNUSVZFX1VSTAogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklNQVJZX0lQIC0gSVAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklNQVJZX1BPUlQgLSBEZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0xPQ0FMX0lQIC0gTG9jYWwgKHNvdXJjZSkgSVAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19MT0NBTF9QT1JUIC0gTG9jYWwgKHNvdXJjZSkgcG9ydCBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbgogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX1VQTE9BRCAtIFRvdGFsIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX0RPV05MT0FEIC0gVG90YWwgbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQKICoKICoKICoKICoKICogQ1VSTElORk9fU1BFRURfRE9XTkxPQUQgLSBBdmVyYWdlIGRvd25sb2FkIHNwZWVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NQRUVEX1VQTE9BRCAtIEF2ZXJhZ2UgdXBsb2FkIHNwZWVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hFQURFUl9TSVpFIC0gVG90YWwgc2l6ZSBvZiBhbGwgaGVhZGVycyByZWNlaXZlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19IRUFERVJfT1VUIC0gVGhlIHJlcXVlc3Qgc3RyaW5nIHNlbnQuIEZvciB0aGlzIHRvCiAqIHdvcmssIGFkZCB0aGUgQ1VSTElORk9fSEVBREVSX09VVCBvcHRpb24gdG8gdGhlIGhhbmRsZSBieSBjYWxsaW5nCiAqIGN1cmxfc2V0b3B0CiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFUVVFU1RfU0laRSAtIFRvdGFsIHNpemUgb2YgaXNzdWVkIHJlcXVlc3RzLCBjdXJyZW50bHkgb25seSBmb3IgSFRUUCByZXF1ZXN0cwogKgogKgogKgogKgogKiBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUIC0gUmVzdWx0IG9mIFNTTCBjZXJ0aWZpY2F0aW9uIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWQgYnkgc2V0dGluZyBDVVJMT1BUX1NTTF9WRVJJRllQRUVSCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEIC0gQ29udGVudCBsZW5ndGggb2YgZG93bmxvYWQsIHJlYWQgZnJvbSBDb250ZW50LUxlbmd0aDogZmllbGQKICoKICoKICoKICoKICogQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfVVBMT0FEIC0gU3BlY2lmaWVkIHNpemUgb2YgdXBsb2FkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfVFlQRSAtIENvbnRlbnQtVHlwZTogb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudC4gTlVMTCBpbmRpY2F0ZXMgc2VydmVyIGRpZCBub3Qgc2VuZCB2YWxpZCBDb250ZW50LVR5cGU6IGhlYWRlcgogKgogKgogKgogKgogKiBDVVJMSU5GT19QUklWQVRFIC0gUHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNVUkwgaGFuZGxlLCBwcmV2aW91c2x5IHNldCB3aXRoIHRoZSBDVVJMT1BUX1BSSVZBVEUgb3B0aW9uIG9mIGN1cmxfc2V0b3B0CiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFU1BPTlNFX0NPREUgLSBUaGUgbGFzdCByZXNwb25zZSBjb2RlCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUgLSBUaGUgQ09OTkVDVCByZXNwb25zZSBjb2RlCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMIC0gQml0bWFzayBpbmRpY2F0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QocykgYXZhaWxhYmxlIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgcmVzcG9uc2UKICoKICoKICoKICoKICogQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMIC0gQml0bWFzayBpbmRpY2F0aW5nIHRoZSBwcm94eSBhdXRoZW50aWNhdGlvbiBtZXRob2QocykgYXZhaWxhYmxlIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgcmVzcG9uc2UKICoKICoKICoKICoKICogQ1VSTElORk9fT1NfRVJSTk8gLSBFcnJubyBmcm9tIGEgY29ubmVjdCBmYWlsdXJlLiBUaGUgbnVtYmVyIGlzIE9TIGFuZCBzeXN0ZW0gc3BlY2lmaWMuCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX05VTV9DT05ORUNUUyAtIE51bWJlciBvZiBjb25uZWN0aW9ucyBjdXJsIGhhZCB0byBjcmVhdGUgdG8gYWNoaWV2ZSB0aGUgcHJldmlvdXMgdHJhbnNmZXIKICoKICoKICoKICoKICogQ1VSTElORk9fU1NMX0VOR0lORVMgLSBPcGVuU1NMIGNyeXB0by1lbmdpbmVzIHN1cHBvcnRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19DT09LSUVMSVNUIC0gQWxsIGtub3duIGNvb2tpZXMKICoKICoKICoKICoKICogQ1VSTElORk9fRlRQX0VOVFJZX1BBVEggLSBFbnRyeSBwYXRoIGluIEZUUCBzZXJ2ZXIKICoKICoKICoKICoKICogQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FIC0gVGltZSBpbiBzZWNvbmRzIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTC9TU0ggY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fQ0VSVElORk8gLSBUTFMgY2VydGlmaWNhdGUgY2hhaW4KICoKICoKICoKICoKICogQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUIC0gSW5mbyBvbiB1bm1ldCB0aW1lIGNvbmRpdGlvbmFsCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JUU1BfQ0xJRU5UX0NTRVEgLSBOZXh0IFJUU1AgY2xpZW50IENTZXEKICoKICoKICoKICoKICogQ1VSTElORk9fUlRTUF9DU0VRX1JFQ1YgLSBSZWNlbnRseSByZWNlaXZlZCBDU2VxCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JUU1BfU0VSVkVSX0NTRVEgLSBOZXh0IFJUU1Agc2VydmVyIENTZXEKICoKICoKICoKICoKICogQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lEIC0gUlRTUCBzZXNzaW9uIElECiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEX1QgLSBUaGUgY29udGVudC1sZW5ndGggb2YgdGhlIGRvd25sb2FkLiBUaGlzIGlzIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIENvbnRlbnQtVHlwZTogZmllbGQuIC0xIGlmIHRoZSBzaXplIGlzbid0IGtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX1VQTE9BRF9UIC0gVGhlIHNwZWNpZmllZCBzaXplIG9mIHRoZSB1cGxvYWQuIC0xIGlmIHRoZSBzaXplIGlzbid0IGtub3duCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hUVFBfVkVSU0lPTiAtIFRoZSB2ZXJzaW9uIHVzZWQgaW4gdGhlIGxhc3QgSFRUUCBjb25uZWN0aW9uLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgb25lIG9mIHRoZSBkZWZpbmVkIENVUkxfSFRUUF9WRVJTSU9OXyogY29uc3RhbnRzIG9yIDAgaWYgdGhlIHZlcnNpb24gY2FuJ3QgYmUgZGV0ZXJtaW5lZAogKgogKgogKgogKgogKiBDVVJMSU5GT19QUk9UT0NPTCAtIFRoZSBwcm90b2NvbCB1c2VkIGluIHRoZSBsYXN0IEhUVFAgY29ubmVjdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgZXhhY3RseSBvbmUgb2YgdGhlIENVUkxQUk9UT18qIHZhbHVlcwogKgogKgogKgogKgogKiBDVVJMSU5GT19QUk9YWV9TU0xfVkVSSUZZUkVTVUxUIC0gVGhlIHJlc3VsdCBvZiB0aGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHRoYXQgd2FzIHJlcXVlc3RlZCAodXNpbmcgdGhlIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIgb3B0aW9uKS4gT25seSB1c2VkIGZvciBIVFRQUyBwcm94aWVzCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NDSEVNRSAtIFRoZSBVUkwgc2NoZW1lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NJWkVfRE9XTkxPQURfVCAtIFRvdGFsIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgZG93bmxvYWRlZC4gVGhlIG51bWJlciBpcyBvbmx5IGZvciB0aGUgbGF0ZXN0IHRyYW5zZmVyIGFuZCB3aWxsIGJlIHJlc2V0IGFnYWluIGZvciBlYWNoIG5ldyB0cmFuc2ZlcgogKgogKgogKgogKgogKiBDVVJMSU5GT19TSVpFX1VQTE9BRF9UIC0gVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZSB1cGxvYWRlZAogKgogKgogKgogKgogKiBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UIC0gVGhlIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQgaW4gYnl0ZXMvc2Vjb25kIHRoYXQgY3VybCBtZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIGRvd25sb2FkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1NQRUVEX1VQTE9BRF9UIC0gVGhlIGF2ZXJhZ2UgdXBsb2FkIHNwZWVkIGluIGJ5dGVzL3NlY29uZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSB1cGxvYWQKICoKICoKICoKICoKICogQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FX1QgLSBUaW1lLCBpbiBtaWNyb3NlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTC9TU0ggY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fQ09OTkVDVF9USU1FX1QgLSBUb3RhbCB0aW1lIHRha2VuLCBpbiBtaWNyb3NlY29uZHMsIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgaG9zdCAob3IgcHJveHkpIHdhcyBjb21wbGV0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fRklMRVRJTUVfVCAtIFJlbW90ZSB0aW1lIG9mIHRoZSByZXRyaWV2ZWQgZG9jdW1lbnQgKGFzIFVuaXggdGltZXN0YW1wKSwgYW4gYWx0ZXJuYXRpdmUgdG8gQ1VSTElORk9fRklMRVRJTUUgdG8gYWxsb3cgc3lzdGVtcyB3aXRoIDMyIGJpdCBsb25nIHZhcmlhYmxlcyB0byBleHRyYWN0IGRhdGVzIG91dHNpZGUgb2YgdGhlIDMyYml0IHRpbWVzdGFtcCByYW5nZQogKgogKgogKgogKgogKiBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUVfVCAtIFRpbWUgaW4gbWljcm9zZWNvbmRzIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBuYW1lIHJlc29sdmluZyB3YXMgY29tcGxldGVkCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUVfVCAtIFRpbWUgdGFrZW4gZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpbGUgdHJhbnNmZXIgaXMganVzdCBhYm91dCB0byBiZWdpbiwgaW4gbWljcm9zZWNvbmRzCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX1JFRElSRUNUX1RJTUVfVCAtIFRvdGFsIHRpbWUsIGluIG1pY3Jvc2Vjb25kcywgaXQgdG9vayBmb3IgYWxsIHJlZGlyZWN0aW9uIHN0ZXBzIGluY2x1ZGUgbmFtZSBsb29rdXAsIGNvbm5lY3QsIHByZXRyYW5zZmVyIGFuZCB0cmFuc2ZlciBiZWZvcmUgZmluYWwgdHJhbnNhY3Rpb24gd2FzIHN0YXJ0ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1QgLSBUaW1lLCBpbiBtaWNyb3NlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQKICoKICoKICoKICoKICogQ1VSTElORk9fVE9UQUxfVElNRV9UIC0gVG90YWwgdGltZSBpbiBtaWNyb3NlY29uZHMgZm9yIHRoZSBwcmV2aW91cyB0cmFuc2ZlciwgaW5jbHVkaW5nIG5hbWUgcmVzb2x2aW5nLCBUQ1AgY29ubmVjdCBldGMuCiAqCiAqCiAqCiAqIEByZXR1cm4gbWl4ZWQgSWYgb3B0IGlzIGdpdmVuLCByZXR1cm5zIGl0cyB2YWx1ZS4KICogT3RoZXJ3aXNlLCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50cwogKiAod2hpY2ggY29ycmVzcG9uZCB0byBvcHQpOgogKgogKgogKgogKiAidXJsIgogKgogKgogKgogKgogKiAiY29udGVudF90eXBlIgogKgogKgogKgogKgogKiAiaHR0cF9jb2RlIgogKgogKgogKgogKgogKiAiaGVhZGVyX3NpemUiCiAqCiAqCiAqCiAqCiAqICJyZXF1ZXN0X3NpemUiCiAqCiAqCiAqCiAqCiAqICJmaWxldGltZSIKICoKICoKICoKICoKICogInNzbF92ZXJpZnlfcmVzdWx0IgogKgogKgogKgogKgogKiAicmVkaXJlY3RfY291bnQiCiAqCiAqCiAqCiAqCiAqICJ0b3RhbF90aW1lIgogKgogKgogKgogKgogKiAibmFtZWxvb2t1cF90aW1lIgogKgogKgogKgogKgogKiAiY29ubmVjdF90aW1lIgogKgogKgogKgogKgogKiAicHJldHJhbnNmZXJfdGltZSIKICoKICoKICoKICoKICogInNpemVfdXBsb2FkIgogKgogKgogKgogKgogKiAic2l6ZV9kb3dubG9hZCIKICoKICoKICoKICoKICogInNwZWVkX2Rvd25sb2FkIgogKgogKgogKgogKgogKiAic3BlZWRfdXBsb2FkIgogKgogKgogKgogKgogKiAiZG93bmxvYWRfY29udGVudF9sZW5ndGgiCiAqCiAqCiAqCiAqCiAqICJ1cGxvYWRfY29udGVudF9sZW5ndGgiCiAqCiAqCiAqCiAqCiAqICJzdGFydHRyYW5zZmVyX3RpbWUiCiAqCiAqCiAqCiAqCiAqICJyZWRpcmVjdF90aW1lIgogKgogKgogKgogKgogKiAiY2VydGluZm8iCiAqCiAqCiAqCiAqCiAqICJwcmltYXJ5X2lwIgogKgogKgogKgogKgogKiAicHJpbWFyeV9wb3J0IgogKgogKgogKgogKgogKiAibG9jYWxfaXAiCiAqCiAqCiAqCiAqCiAqICJsb2NhbF9wb3J0IgogKgogKgogKgogKgogKiAicmVkaXJlY3RfdXJsIgogKgogKgogKgogKgogKiAicmVxdWVzdF9oZWFkZXIiIChUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBDVVJMSU5GT19IRUFERVJfT1VUCiAqIGlzIHNldCBieSBhIHByZXZpb3VzIGNhbGwgdG8gY3VybF9zZXRvcHQpCiAqCiAqCiAqCiAqIE5vdGUgdGhhdCBwcml2YXRlIGRhdGEgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhc3NvY2lhdGl2ZSBhcnJheSBhbmQgbXVzdCBiZSByZXRyaWV2ZWQgaW5kaXZpZHVhbGx5IHdpdGggdGhlIENVUkxJTkZPX1BSSVZBVEUgb3B0aW9uLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfZ2V0aW5mbygkY2gsIGludCAkb3B0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGN1cmxfZ2V0aW5mbygkY2gsICRvcHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGN1cmxfZ2V0aW5mbygkY2gpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbUN1cmxSZXNvdXJjZSgkY2gpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW5pdGlhbGl6ZXMgYSBuZXcgc2Vzc2lvbiBhbmQgcmV0dXJuIGEgY1VSTCBoYW5kbGUgZm9yIHVzZSB3aXRoIHRoZQogKiBjdXJsX3NldG9wdCwgY3VybF9leGVjLAogKiBhbmQgY3VybF9jbG9zZSBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCBJZiBwcm92aWRlZCwgdGhlIENVUkxPUFRfVVJMIG9wdGlvbiB3aWxsIGJlIHNldAogKiB0byBpdHMgdmFsdWUuIFlvdSBjYW4gbWFudWFsbHkgc2V0IHRoaXMgdXNpbmcgdGhlCiAqIGN1cmxfc2V0b3B0IGZ1bmN0aW9uLgogKgogKiBUaGUgZmlsZSBwcm90b2NvbCBpcyBkaXNhYmxlZCBieSBjVVJMIGlmCiAqIG9wZW5fYmFzZWRpciBpcyBzZXQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNVUkwgaGFuZGxlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX2luaXQoc3RyaW5nICR1cmwgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfaW5pdCgkdXJsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1cmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBtdWx0aSBjdXJsIGVycm9yIG51bWJlci4KICoKICogQHBhcmFtIHJlc291cmNlICRtaCBBIGNVUkwgbXVsdGkgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfbXVsdGlfaW5pdC4KICogQHJldHVybiBpbnQgUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBtdWx0aSBjdXJsIGVycm9yIG51bWJlci4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX211bHRpX2Vycm5vKCRtaCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfbXVsdGlfZXJybm8oJG1oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEN1cmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXNrIHRoZSBtdWx0aSBoYW5kbGUgaWYgdGhlcmUgYXJlIGFueSBtZXNzYWdlcyBvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbmRpdmlkdWFsIHRyYW5zZmVycy4KICogTWVzc2FnZXMgbWF5IGluY2x1ZGUgaW5mb3JtYXRpb24gc3VjaCBhcyBhbiBlcnJvciBjb2RlIGZyb20gdGhlIHRyYW5zZmVyIG9yIGp1c3QgdGhlIGZhY3QKICogdGhhdCBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KICoKICogUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIG5ldyByZXN1bHQgZWFjaCB0aW1lLCB1bnRpbCBhIEZBTFNFIGlzIHJldHVybmVkCiAqIGFzIGEgc2lnbmFsIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB0byBnZXQgYXQgdGhpcyBwb2ludC4gVGhlIGludGVnZXIgcG9pbnRlZCB0byB3aXRoCiAqIG1zZ3NfaW5fcXVldWUgd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIG1lc3NhZ2VzIGFmdGVyIHRoaXMKICogZnVuY3Rpb24gd2FzIGNhbGxlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRtaCBBIGNVUkwgbXVsdGkgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfbXVsdGlfaW5pdC4KICogQHBhcmFtIGludHxudWxsICRtc2dzX2luX3F1ZXVlIE51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcXVldWUKICogQHJldHVybiBhcnJheSBPbiBzdWNjZXNzLCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGZvciB0aGUgbWVzc2FnZSwgRkFMU0Ugb24gZmFpbHVyZS4KICoKICoKICogQ29udGVudHMgb2YgdGhlIHJldHVybmVkIGFycmF5CiAqCiAqCiAqCiAqIEtleToKICogVmFsdWU6CiAqCiAqCiAqCiAqCiAqIG1zZwogKiBUaGUgQ1VSTE1TR19ET05FIGNvbnN0YW50LiBPdGhlciByZXR1cm4gdmFsdWVzCiAqIGFyZSBjdXJyZW50bHkgbm90IGF2YWlsYWJsZS4KICoKICoKICogcmVzdWx0CiAqIE9uZSBvZiB0aGUgQ1VSTEVfKiBjb25zdGFudHMuIElmIGV2ZXJ5dGhpbmcgaXMKICogT0ssIHRoZSBDVVJMRV9PSyB3aWxsIGJlIHRoZSByZXN1bHQuCiAqCiAqCiAqIGhhbmRsZQogKiBSZXNvdXJjZSBvZiB0eXBlIGN1cmwgaW5kaWNhdGVzIHRoZSBoYW5kbGUgd2hpY2ggaXQgY29uY2VybnMuCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9tdWx0aV9pbmZvX3JlYWQoJG1oLCA/aW50ICYkbXNnc19pbl9xdWV1ZSA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGN1cmxfbXVsdGlfaW5mb19yZWFkKCRtaCwgJG1zZ3NfaW5fcXVldWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgQ3VybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBbGxvd3MgdGhlIHByb2Nlc3Npbmcgb2YgbXVsdGlwbGUgY1VSTCBoYW5kbGVzIGFzeW5jaHJvbm91c2x5LgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBjVVJMIG11bHRpIGhhbmRsZSByZXNvdXJjZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfbXVsdGlfaW5pdCgpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY3VybF9tdWx0aV9pbml0KCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgYW4gb3B0aW9uIG9uIHRoZSBnaXZlbiBjVVJMIHNlc3Npb24gaGFuZGxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNoIEEgY1VSTCBoYW5kbGUgcmV0dXJuZWQgYnkKICogY3VybF9pbml0LgogKiBAcGFyYW0gaW50ICRvcHRpb24gVGhlIENVUkxPUFRfWFhYIG9wdGlvbiB0byBzZXQuCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHNldCBvbiBvcHRpb24uCiAqCiAqIHZhbHVlIHNob3VsZCBiZSBhIGJvb2wgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQVVUT1JFRkVSRVIKICoKICogVFJVRSB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgUmVmZXJlcjogZmllbGQgaW4KICogcmVxdWVzdHMgd2hlcmUgaXQgZm9sbG93cyBhIExvY2F0aW9uOiByZWRpcmVjdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9CSU5BUllUUkFOU0ZFUgogKgogKiBUUlVFIHRvIHJldHVybiB0aGUgcmF3IG91dHB1dCB3aGVuCiAqIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgaXMgdXNlZC4KICoKICoKICogRnJvbSBQSFAgNS4xLjMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Q6IHRoZSByYXcgb3V0cHV0IHdpbGwKICogYWx3YXlzIGJlIHJldHVybmVkIHdoZW4KICogQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiBpcyB1c2VkLgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRVNFU1NJT04KICoKICogVFJVRSB0byBtYXJrIHRoaXMgYXMgYSBuZXcgY29va2llICJzZXNzaW9uIi4gSXQgd2lsbCBmb3JjZSBsaWJjdXJsCiAqIHRvIGlnbm9yZSBhbGwgY29va2llcyBpdCBpcyBhYm91dCB0byBsb2FkIHRoYXQgYXJlICJzZXNzaW9uIGNvb2tpZXMiCiAqIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uIEJ5IGRlZmF1bHQsIGxpYmN1cmwgYWx3YXlzIHN0b3JlcyBhbmQKICogbG9hZHMgYWxsIGNvb2tpZXMsIGluZGVwZW5kZW50IGlmIHRoZXkgYXJlIHNlc3Npb24gY29va2llcyBvciBub3QuCiAqIFNlc3Npb24gY29va2llcyBhcmUgY29va2llcyB3aXRob3V0IGV4cGlyeSBkYXRlIGFuZCB0aGV5IGFyZSBtZWFudAogKiB0byBiZSBhbGl2ZSBhbmQgZXhpc3RpbmcgZm9yIHRoaXMgInNlc3Npb24iIG9ubHkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0VSVElORk8KICoKICogVFJVRSB0byBvdXRwdXQgU1NMIGNlcnRpZmljYXRpb24gaW5mb3JtYXRpb24gdG8gU1RERVJSCiAqIG9uIHNlY3VyZSB0cmFuc2ZlcnMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xOS4xLgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMy4yLgogKiBSZXF1aXJlcyBDVVJMT1BUX1ZFUkJPU0UgdG8gYmUgb24gdG8gaGF2ZSBhbiBlZmZlY3QuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09OTkVDVF9PTkxZCiAqCiAqIFRSVUUgdGVsbHMgdGhlIGxpYnJhcnkgdG8gcGVyZm9ybSBhbGwgdGhlIHJlcXVpcmVkIHByb3h5IGF1dGhlbnRpY2F0aW9uCiAqIGFuZCBjb25uZWN0aW9uIHNldHVwLCBidXQgbm8gZGF0YSB0cmFuc2Zlci4gVGhpcyBvcHRpb24gaXMgaW1wbGVtZW50ZWQgZm9yCiAqIEhUVFAsIFNNVFAgYW5kIFBPUDMuCiAqCiAqCiAqIEFkZGVkIGluIDcuMTUuMi4KICogQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjUuMC4KICoKICoKICoKICogQ1VSTE9QVF9DUkxGCiAqCiAqIFRSVUUgdG8gY29udmVydCBVbml4IG5ld2xpbmVzIHRvIENSTEYgbmV3bGluZXMKICogb24gdHJhbnNmZXJzLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0RJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTAogKgogKiBUUlVFIHRvIG5vdCBhbGxvdyBVUkxzIHRoYXQgaW5jbHVkZSBhIHVzZXJuYW1lLiBVc2VybmFtZXMgYXJlIGFsbG93ZWQgYnkgZGVmYXVsdCAoMCkuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0ROU19TSFVGRkxFX0FERFJFU1NFUwogKgogKiBUUlVFIHRvIHNodWZmbGUgdGhlIG9yZGVyIG9mIGFsbCByZXR1cm5lZCBhZGRyZXNzZXMgc28gdGhhdCB0aGV5IHdpbGwgYmUgdXNlZAogKiBpbiBhIHJhbmRvbSBvcmRlciwgd2hlbiBhIG5hbWUgaXMgcmVzb2x2ZWQgYW5kIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcyBpcyByZXR1cm5lZC4KICogVGhpcyBtYXkgY2F1c2UgSVB2NCB0byBiZSB1c2VkIGJlZm9yZSBJUHY2IG9yIHZpY2UgdmVyc2EuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0hBUFJPWFlQUk9UT0NPTAogKgogKiBUUlVFIHRvIHNlbmQgYW4gSEFQcm94eSBQUk9YWSBwcm90b2NvbCB2MSBoZWFkZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb25uZWN0aW9uLgogKiBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgbm90IHRvIHNlbmQgdGhpcyBoZWFkZXIuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy42MC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX1NTSF9DT01QUkVTU0lPTgogKgogKiBUUlVFIHRvIGVuYWJsZSBidWlsdC1pbiBTU0ggY29tcHJlc3Npb24uIFRoaXMgaXMgYSByZXF1ZXN0LCBub3QgYW4gb3JkZXI7CiAqIHRoZSBzZXJ2ZXIgbWF5IG9yIG1heSBub3QgZG8gaXQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy41Ni4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wLgogKgogKgogKgogKiBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFCiAqCiAqIFRSVUUgdG8gdXNlIGEgZ2xvYmFsIEROUyBjYWNoZS4gVGhpcyBvcHRpb24gaXMgbm90IHRocmVhZC1zYWZlLgogKiBJdCBpcyBjb25kaXRpb25hbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBQSFAgaXMgYnVpbHQgZm9yIG5vbi10aHJlYWRlZCB1c2UKICogKENMSSwgRkNHSSwgQXBhY2hlMi1QcmVmb3JrLCBldGMuKS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9GQUlMT05FUlJPUgogKgogKiBUUlVFIHRvIGZhaWwgdmVyYm9zZWx5IGlmIHRoZSBIVFRQIGNvZGUgcmV0dXJuZWQKICogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDQwMC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmV0dXJuCiAqIHRoZSBwYWdlIG5vcm1hbGx5LCBpZ25vcmluZyB0aGUgY29kZS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVAogKgogKiBUUlVFIHRvIGVuYWJsZSBUTFMgZmFsc2Ugc3RhcnQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40Mi4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0ZJTEVUSU1FCiAqCiAqIFRSVUUgdG8gYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgbW9kaWZpY2F0aW9uCiAqIGRhdGUgb2YgdGhlIHJlbW90ZSBkb2N1bWVudC4gVGhpcyB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCiAqIHRoZSBDVVJMSU5GT19GSUxFVElNRSBvcHRpb24gd2l0aAogKiBjdXJsX2dldGluZm8uCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRk9MTE9XTE9DQVRJT04KICoKICogVFJVRSB0byBmb2xsb3cgYW55CiAqICJMb2NhdGlvbjogIiBoZWFkZXIgdGhhdCB0aGUgc2VydmVyIHNlbmRzIGFzCiAqIHBhcnQgb2YgdGhlIEhUVFAgaGVhZGVyIChub3RlIHRoaXMgaXMgcmVjdXJzaXZlLCBQSFAgd2lsbCBmb2xsb3cgYXMKICogbWFueSAiTG9jYXRpb246ICIgaGVhZGVycyB0aGF0IGl0IGlzIHNlbnQsCiAqIHVubGVzcyBDVVJMT1BUX01BWFJFRElSUyBpcyBzZXQpLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZPUkJJRF9SRVVTRQogKgogKiBUUlVFIHRvIGZvcmNlIHRoZSBjb25uZWN0aW9uIHRvIGV4cGxpY2l0bHkKICogY2xvc2Ugd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZywgYW5kIG5vdCBiZSBwb29sZWQgZm9yIHJldXNlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZSRVNIX0NPTk5FQ1QKICoKICogVFJVRSB0byBmb3JjZSB0aGUgdXNlIG9mIGEgbmV3IGNvbm5lY3Rpb24KICogaW5zdGVhZCBvZiBhIGNhY2hlZCBvbmUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQX1VTRV9FUFJUCiAqCiAqIFRSVUUgdG8gdXNlIEVQUlQgKGFuZCBMUFJUKSB3aGVuIGRvaW5nIGFjdGl2ZQogKiBGVFAgZG93bmxvYWRzLiBVc2UgRkFMU0UgdG8gZGlzYWJsZSBFUFJUIGFuZCBMUFJUIGFuZCB1c2UgUE9SVAogKiBvbmx5LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0ZUUF9VU0VfRVBTVgogKgogKiBUUlVFIHRvIGZpcnN0IHRyeSBhbiBFUFNWIGNvbW1hbmQgZm9yIEZUUAogKiB0cmFuc2ZlcnMgYmVmb3JlIHJldmVydGluZyBiYWNrIHRvIFBBU1YuIFNldCB0byBGQUxTRQogKiB0byBkaXNhYmxlIEVQU1YuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMKICoKICogVFJVRSB0byBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcmllcyB3aGVuIGFuIEZUUCBvcGVyYXRpb24KICogZW5jb3VudGVycyBhIHBhdGggdGhhdCBjdXJyZW50bHkgZG9lc24ndCBleGlzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9GVFBBUFBFTkQKICoKICogVFJVRSB0byBhcHBlbmQgdG8gdGhlIHJlbW90ZSBmaWxlIGluc3RlYWQgb2YKICogb3ZlcndyaXRpbmcgaXQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX05PREVMQVkKICoKICogVFJVRSB0byBkaXNhYmxlIFRDUCdzIE5hZ2xlIGFsZ29yaXRobSwgd2hpY2ggdHJpZXMgdG8gbWluaW1pemUKICogdGhlIG51bWJlciBvZiBzbWFsbCBwYWNrZXRzIG9uIHRoZSBuZXR3b3JrLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMi4xIGZvciB2ZXJzaW9ucyBjb21waWxlZCB3aXRoIGxpYmN1cmwgNy4xMS4yIG9yCiAqIGdyZWF0ZXIuCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQQVNDSUkKICoKICogQW4gYWxpYXMgb2YKICogQ1VSTE9QVF9UUkFOU0ZFUlRFWFQuIFVzZSB0aGF0IGluc3RlYWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRlRQTElTVE9OTFkKICoKICogVFJVRSB0byBvbmx5IGxpc3QgdGhlIG5hbWVzIG9mIGFuIEZUUAogKiBkaXJlY3RvcnkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfSEVBREVSCiAqCiAqIFRSVUUgdG8gaW5jbHVkZSB0aGUgaGVhZGVyIGluIHRoZSBvdXRwdXQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxJTkZPX0hFQURFUl9PVVQKICoKICogVFJVRSB0byB0cmFjayB0aGUgaGFuZGxlJ3MgcmVxdWVzdCBzdHJpbmcuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4xLjMuIFRoZSBDVVJMSU5GT18KICogcHJlZml4IGlzIGludGVudGlvbmFsLgogKgogKgogKgogKiBDVVJMT1BUX0hUVFAwOV9BTExPV0VECiAqCiAqIFdoZXRoZXIgdG8gYWxsb3cgSFRUUC8wLjkgcmVzcG9uc2VzLiBEZWZhdWx0cyB0byBGQUxTRSBhcyBvZiBsaWJjdXJsIDcuNjYuMDsKICogZm9ybWVybHkgaXQgZGVmYXVsdGVkIHRvIFRSVUUuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjE1IGFuZCA3LjQuMywgcmVzcGVjdGl2ZWx5LCBpZiBidWlsdCBhZ2FpbnN0IGxpYmN1cmwgJmd0Oz0gNy42NC4wCiAqCiAqCiAqCiAqIENVUkxPUFRfSFRUUEdFVAogKgogKiBUUlVFIHRvIHJlc2V0IHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIEdFVC4KICogU2luY2UgR0VUIGlzIHRoZSBkZWZhdWx0LCB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZSByZXF1ZXN0CiAqIG1ldGhvZCBoYXMgYmVlbiBjaGFuZ2VkLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTAogKgogKiBUUlVFIHRvIHR1bm5lbCB0aHJvdWdoIGEgZ2l2ZW4gSFRUUCBwcm94eS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9IVFRQX0NPTlRFTlRfREVDT0RJTkcKICoKICogRkFMU0UgdG8gZ2V0IHRoZSByYXcgSFRUUCByZXNwb25zZSBib2R5LgogKgogKgogKiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuNS4wIGlmIGJ1aWx0IGFnYWluc3QgbGliY3VybCAmZ3Q7PSA3LjE2LjIuCiAqCiAqCiAqCiAqIENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SCiAqCiAqIFRSVUUgdG8ga2VlcCBzZW5kaW5nIHRoZSByZXF1ZXN0IGJvZHkgaWYgdGhlIEhUVFAgY29kZSByZXR1cm5lZCBpcwogKiBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiAzMDAuIFRoZSBkZWZhdWx0IGFjdGlvbiB3b3VsZCBiZSB0byBzdG9wIHNlbmRpbmcKICogYW5kIGNsb3NlIHRoZSBzdHJlYW0gb3IgY29ubmVjdGlvbi4gU3VpdGFibGUgZm9yIG1hbnVhbCBOVExNIGF1dGhlbnRpY2F0aW9uLgogKiBNb3N0IGFwcGxpY2F0aW9ucyBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KICoKICoKICogQXZhaWxhYmxlIGFzIG9mIFBIUCA3LjMuMCBpZiBidWlsdCBhZ2FpbnN0IGxpYmN1cmwgJmd0Oz0gNy41MS4wLgogKgogKgogKgogKiBDVVJMT1BUX01VVEUKICoKICogVFJVRSB0byBiZSBjb21wbGV0ZWx5IHNpbGVudCB3aXRoIHJlZ2FyZHMgdG8KICogdGhlIGNVUkwgZnVuY3Rpb25zLgogKgogKgogKiBSZW1vdmVkIGluIGNVUkwgNy4xNS41IChZb3UgY2FuIHVzZSBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSIGluc3RlYWQpCiAqCiAqCiAqCiAqIENVUkxPUFRfTkVUUkMKICoKICogVFJVRSB0byBzY2FuIHRoZSB+Ly5uZXRyYwogKiBmaWxlIHRvIGZpbmQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgc2l0ZSB0aGF0CiAqIGEgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCB3aXRoLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX05PQk9EWQogKgogKiBUUlVFIHRvIGV4Y2x1ZGUgdGhlIGJvZHkgZnJvbSB0aGUgb3V0cHV0LgogKiBSZXF1ZXN0IG1ldGhvZCBpcyB0aGVuIHNldCB0byBIRUFELiBDaGFuZ2luZyB0aGlzIHRvIEZBTFNFIGRvZXMKICogbm90IGNoYW5nZSBpdCB0byBHRVQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTk9QUk9HUkVTUwogKgogKiBUUlVFIHRvIGRpc2FibGUgdGhlIHByb2dyZXNzIG1ldGVyIGZvciBjVVJMIHRyYW5zZmVycy4KICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9OT1NJR05BTAogKgogKiBUUlVFIHRvIGlnbm9yZSBhbnkgY1VSTCBmdW5jdGlvbiB0aGF0IGNhdXNlcyBhCiAqIHNpZ25hbCB0byBiZSBzZW50IHRvIHRoZSBQSFAgcHJvY2Vzcy4gVGhpcyBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdAogKiBpbiBtdWx0aS10aHJlYWRlZCBTQVBJcyBzbyB0aW1lb3V0IG9wdGlvbnMgY2FuIHN0aWxsIGJlIHVzZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9QQVRIX0FTX0lTCiAqCiAqIFRSVUUgdG8gbm90IGhhbmRsZSBkb3QgZG90IHNlcXVlbmNlcy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQyLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUElQRVdBSVQKICoKICogVFJVRSB0byB3YWl0IGZvciBwaXBlbGluaW5nL211bHRpcGxleGluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9TVAogKgogKiBUUlVFIHRvIGRvIGEgcmVndWxhciBIVFRQIFBPU1QuIFRoaXMgUE9TVCBpcyB0aGUKICogbm9ybWFsIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBraW5kLAogKiBtb3N0IGNvbW1vbmx5IHVzZWQgYnkgSFRNTCBmb3Jtcy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9QVVQKICoKICogVFJVRSB0byBIVFRQIFBVVCBhIGZpbGUuIFRoZSBmaWxlIHRvIFBVVCBtdXN0CiAqIGJlIHNldCB3aXRoIENVUkxPUFRfSU5GSUxFIGFuZAogKiBDVVJMT1BUX0lORklMRVNJWkUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIKICoKICogVFJVRSB0byByZXR1cm4gdGhlIHRyYW5zZmVyIGFzIGEgc3RyaW5nIG9mIHRoZQogKiByZXR1cm4gdmFsdWUgb2YgY3VybF9leGVjIGluc3RlYWQgb2Ygb3V0cHV0dGluZwogKiBpdCBkaXJlY3RseS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TQUZFX1VQTE9BRAogKgogKiBUUlVFIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIEAgcHJlZml4IGZvcgogKiB1cGxvYWRpbmcgZmlsZXMgaW4gQ1VSTE9QVF9QT1NURklFTERTLCB3aGljaAogKiBtZWFucyB0aGF0IHZhbHVlcyBzdGFydGluZyB3aXRoIEAgY2FuIGJlIHNhZmVseQogKiBwYXNzZWQgYXMgZmllbGRzLiBDVVJMRmlsZSBtYXkgYmUgdXNlZCBmb3IKICogdXBsb2FkcyBpbnN0ZWFkLgogKgogKgogKiBBZGRlZCBpbiBQSFAgNS41LjAgd2l0aCBGQUxTRSBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4gUEhQIDUuNi4wCiAqIGNoYW5nZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gVFJVRS4gUEhQIDcgcmVtb3ZlcyB0aGlzIG9wdGlvbjsKICogdGhlIENVUkxGaWxlIGludGVyZmFjZSBtdXN0IGJlIHVzZWQgdG8gdXBsb2FkIGZpbGVzLgogKgogKgogKgogKiBDVVJMT1BUX1NBU0xfSVIKICoKICogVFJVRSB0byBlbmFibGUgc2VuZGluZyB0aGUgaW5pdGlhbCByZXNwb25zZSBpbiB0aGUgZmlyc3QgcGFja2V0LgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzEuMTAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMX0VOQUJMRV9BTFBOCiAqCiAqIEZBTFNFIHRvIGRpc2FibGUgQUxQTiBpbiB0aGUgU1NMIGhhbmRzaGFrZSAoaWYgdGhlIFNTTCBiYWNrZW5kCiAqIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHN1cHBvcnRzIGl0KSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KICogbmVnb3RpYXRlIGh0dHAyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzYuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfRU5BQkxFX05QTgogKgogKiBGQUxTRSB0byBkaXNhYmxlIE5QTiBpbiB0aGUgU1NMIGhhbmRzaGFrZSAoaWYgdGhlIFNTTCBiYWNrZW5kCiAqIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHN1cHBvcnRzIGl0KSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KICogbmVnb3RpYXRlIGh0dHAyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzYuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUgogKgogKiBGQUxTRSB0byBzdG9wIGNVUkwgZnJvbSB2ZXJpZnlpbmcgdGhlIHBlZXIncwogKiBjZXJ0aWZpY2F0ZS4gQWx0ZXJuYXRlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgYWdhaW5zdCBjYW4gYmUKICogc3BlY2lmaWVkIHdpdGggdGhlIENVUkxPUFRfQ0FJTkZPIG9wdGlvbgogKiBvciBhIGNlcnRpZmljYXRlIGRpcmVjdG9yeSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlCiAqIENVUkxPUFRfQ0FQQVRIIG9wdGlvbi4KICoKICoKICogVFJVRSBieSBkZWZhdWx0IGFzIG9mIGNVUkwgNy4xMC4gRGVmYXVsdCBidW5kbGUgaW5zdGFsbGVkIGFzIG9mCiAqIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTCiAqCiAqIFRSVUUgdG8gdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSdzIHN0YXR1cy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQxLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIKICoKICogRkFMU0UgdG8gc3RvcCBjVVJMIGZyb20gdmVyaWZ5aW5nIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUuCiAqIEFsdGVybmF0ZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IGFnYWluc3QgY2FuIGJlCiAqIHNwZWNpZmllZCB3aXRoIHRoZSBDVVJMT1BUX0NBSU5GTyBvcHRpb24KICogb3IgYSBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHRoZQogKiBDVVJMT1BUX0NBUEFUSCBvcHRpb24uCiAqIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gc3VjY2VlZHMgcmVnYXJkbGVzcy4KICoKICoKICogVFJVRSBieSBkZWZhdWx0LiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1NVUFBSRVNTX0NPTk5FQ1RfSEVBREVSUwogKgogKiBUUlVFIHRvIHN1cHByZXNzIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UgaGVhZGVycyBmcm9tIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9ucwogKiBDVVJMT1BUX0hFQURFUkZVTkNUSU9OIGFuZCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCiAqIHdoZW4gQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUwgaXMgdXNlZCBhbmQgYSBDT05ORUNUIHJlcXVlc3QgaXMgbWFkZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjU0LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX0ZBU1RPUEVOCiAqCiAqIFRSVUUgdG8gZW5hYmxlIFRDUCBGYXN0IE9wZW4uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40OS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1RGVFBfTk9fT1BUSU9OUwogKgogKiBUUlVFIHRvIG5vdCBzZW5kIFRGVFAgb3B0aW9ucyByZXF1ZXN0cy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQ4LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfVFJBTlNGRVJURVhUCiAqCiAqIFRSVUUgdG8gdXNlIEFTQ0lJIG1vZGUgZm9yIEZUUCB0cmFuc2ZlcnMuCiAqIEZvciBMREFQLCBpdCByZXRyaWV2ZXMgZGF0YSBpbiBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgSFRNTC4gT24KICogV2luZG93cyBzeXN0ZW1zLCBpdCB3aWxsIG5vdCBzZXQgU1RET1VUIHRvIGJpbmFyeQogKiBtb2RlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1VOUkVTVFJJQ1RFRF9BVVRICiAqCiAqIFRSVUUgdG8ga2VlcCBzZW5kaW5nIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQKICogd2hlbiBmb2xsb3dpbmcgbG9jYXRpb25zICh1c2luZwogKiBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OKSwgZXZlbiB3aGVuIHRoZQogKiBob3N0bmFtZSBoYXMgY2hhbmdlZC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VUExPQUQKICoKICogVFJVRSB0byBwcmVwYXJlIGZvciBhbiB1cGxvYWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVkVSQk9TRQogKgogKiBUUlVFIHRvIG91dHB1dCB2ZXJib3NlIGluZm9ybWF0aW9uLiBXcml0ZXMKICogb3V0cHV0IHRvIFNUREVSUiwgb3IgdGhlIGZpbGUgc3BlY2lmaWVkIHVzaW5nCiAqIENVUkxPUFRfU1RERVJSLgogKgogKgogKgogKgogKgogKgogKgogKgogKiBUUlVFIHRvIGRpc2FibGUgdGhlIHByb2dyZXNzIG1ldGVyIGZvciBjVVJMIHRyYW5zZmVycy4KICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICoKICoKICogUEhQIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIG9wdGlvbiB0byBUUlVFLCB0aGlzIHNob3VsZCBvbmx5IGJlCiAqIGNoYW5nZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICoKICogdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXIgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQlVGRkVSU0laRQogKgogKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHVzZSBmb3IgZWFjaCByZWFkLiBUaGVyZSBpcyBubyBndWFyYW50ZWUKICogdGhpcyByZXF1ZXN0IHdpbGwgYmUgZnVsZmlsbGVkLCBob3dldmVyLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0xPU0VQT0xJQ1kKICoKICogT25lIG9mIHRoZSBDVVJMQ0xPU0VQT0xJQ1lfKiB2YWx1ZXMuCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIGFzIGl0IHdhcyBuZXZlciBpbXBsZW1lbnRlZCBpbiBjVVJMIGFuZAogKiBuZXZlciBoYWQgYW55IGVmZmVjdC4KICoKICoKICoKICoKICogUmVtb3ZlZCBpbiBQSFAgNS42LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QuIFVzZSAwIHRvCiAqIHdhaXQgaW5kZWZpbml0ZWx5LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUX01TCiAqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QuIFVzZSAwIHRvCiAqIHdhaXQgaW5kZWZpbml0ZWx5LgogKgogKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHRvIHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIG5hbWUgcmVzb2x2ZXIsIHRoYXQKICogcG9ydGlvbiBvZiB0aGUgY29ubmVjdCB3aWxsIHN0aWxsIHVzZSBmdWxsLXNlY29uZCByZXNvbHV0aW9uIGZvcgogKiB0aW1lb3V0cyB3aXRoIGEgbWluaW11bSB0aW1lb3V0IGFsbG93ZWQgb2Ygb25lIHNlY29uZC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjIuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4yLjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIGtlZXAgRE5TIGVudHJpZXMgaW4gbWVtb3J5LiBUaGlzCiAqIG9wdGlvbiBpcyBzZXQgdG8gMTIwICgyIG1pbnV0ZXMpIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRVhQRUNUXzEwMF9USU1FT1VUX01TCiAqCiAqIFRoZSB0aW1lb3V0IGZvciBFeHBlY3Q6IDEwMC1jb250aW51ZSByZXNwb25zZXMgaW4gbWlsbGlzZWNvbmRzLgogKiBEZWZhdWx0cyB0byAxMDAwIG1pbGxpc2Vjb25kcy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM2LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUwogKgogKiBIZWFkIHN0YXJ0IGZvciBpcHY2IGZvciB0aGUgaGFwcHkgZXllYmFsbHMgYWxnb3JpdGhtLiBIYXBweSBleWViYWxscyBhdHRlbXB0cwogKiB0byBjb25uZWN0IHRvIGJvdGggSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgZm9yIGR1YWwtc3RhY2sgaG9zdHMsCiAqIHByZWZlcnJpbmcgSVB2NiBmaXJzdCBmb3IgdGltZW91dCBtaWxsaXNlY29uZHMuCiAqIERlZmF1bHRzIHRvIENVUkxfSEVUX0RFRkFVTFQsIHdoaWNoIGlzIGN1cnJlbnRseSAyMDAgbWlsbGlzZWNvbmRzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuNTkuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMC4KICoKICoKICoKICogQ1VSTE9QVF9GVFBTU0xBVVRICiAqCiAqIFRoZSBGVFAgYXV0aGVudGljYXRpb24gbWV0aG9kICh3aGVuIGlzIGFjdGl2YXRlZCk6CiAqIENVUkxGVFBBVVRIX1NTTCAodHJ5IFNTTCBmaXJzdCksCiAqIENVUkxGVFBBVVRIX1RMUyAodHJ5IFRMUyBmaXJzdCksIG9yCiAqIENVUkxGVFBBVVRIX0RFRkFVTFQgKGxldCBjVVJMIGRlY2lkZSkuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMi4yLgogKgogKgogKgogKiBDVVJMT1BUX0hFQURFUk9QVAogKgogKiBIb3cgdG8gZGVhbCB3aXRoIGhlYWRlcnMuIE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogQ1VSTEhFQURFUl9VTklGSUVEOiB0aGUgaGVhZGVycyBzcGVjaWZpZWQgaW4KICogQ1VSTE9QVF9IVFRQSEVBREVSIHdpbGwgYmUgdXNlZCBpbiByZXF1ZXN0cwogKiBib3RoIHRvIHNlcnZlcnMgYW5kIHByb3hpZXMuIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwKICogQ1VSTE9QVF9QUk9YWUhFQURFUiB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QuCiAqCiAqCiAqIENVUkxIRUFERVJfU0VQQVJBVEU6IG1ha2VzCiAqIENVUkxPUFRfSFRUUEhFQURFUiBoZWFkZXJzIG9ubHkgZ2V0IHNlbnQgdG8KICogYSBzZXJ2ZXIgYW5kIG5vdCB0byBhIHByb3h5LiBQcm94eSBoZWFkZXJzIG11c3QgYmUgc2V0IHdpdGgKICogQ1VSTE9QVF9QUk9YWUhFQURFUiB0byBnZXQgdXNlZC4gTm90ZSB0aGF0IGlmCiAqIGEgbm9uLUNPTk5FQ1QgcmVxdWVzdCBpcyBzZW50IHRvIGEgcHJveHksIGxpYmN1cmwgd2lsbCBzZW5kIGJvdGgKICogc2VydmVyIGhlYWRlcnMgYW5kIHByb3h5IGhlYWRlcnMuIFdoZW4gZG9pbmcgQ09OTkVDVCwgbGliY3VybCB3aWxsCiAqIHNlbmQgQ1VSTE9QVF9QUk9YWUhFQURFUiBoZWFkZXJzIG9ubHkgdG8gdGhlCiAqIHByb3h5IGFuZCB0aGVuIENVUkxPUFRfSFRUUEhFQURFUiBoZWFkZXJzCiAqIG9ubHkgdG8gdGhlIHNlcnZlci4KICoKICoKICogRGVmYXVsdHMgdG8gQ1VSTEhFQURFUl9TRVBBUkFURSBhcyBvZiBjVVJMCiAqIDcuNDIuMSwgYW5kIENVUkxIRUFERVJfVU5JRklFRCBiZWZvcmUuCiAqCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBfVkVSU0lPTgogKgogKiBDVVJMX0hUVFBfVkVSU0lPTl9OT05FIChkZWZhdWx0LCBsZXRzIENVUkwKICogZGVjaWRlIHdoaWNoIHZlcnNpb24gdG8gdXNlKSwKICogQ1VSTF9IVFRQX1ZFUlNJT05fMV8wIChmb3JjZXMgSFRUUC8xLjApLAogKiBDVVJMX0hUVFBfVkVSU0lPTl8xXzEgKGZvcmNlcyBIVFRQLzEuMSksCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJfMCAoYXR0ZW1wdHMgSFRUUCAyKSwKICogQ1VSTF9IVFRQX1ZFUlNJT05fMiAgKGFsaWFzIG9mIENVUkxfSFRUUF9WRVJTSU9OXzJfMCksCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJUTFMgKGF0dGVtcHRzIEhUVFAgMiBvdmVyIFRMUyAoSFRUUFMpIG9ubHkpIG9yCiAqIENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFIChpc3N1ZXMgbm9uLVRMUyBIVFRQIHJlcXVlc3RzIHVzaW5nIEhUVFAvMiB3aXRob3V0IEhUVFAvMS4xIFVwZ3JhZGUpLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBBVVRICiAqCiAqCiAqIFRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0RJR0VTVCwKICogQ1VSTEFVVEhfR1NTTkVHT1RJQVRFLAogKiBDVVJMQVVUSF9OVExNLAogKiBDVVJMQVVUSF9BTlksIGFuZAogKiBDVVJMQVVUSF9BTllTQUZFLgogKgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKgogKiBDVVJMQVVUSF9BTlkgaXMgYW4gYWxpYXMgZm9yCiAqIENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICoKICogQ1VSTEFVVEhfQU5ZU0FGRSBpcyBhbiBhbGlhcyBmb3IKICogQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9JTkZJTEVTSVpFCiAqCiAqIFRoZSBleHBlY3RlZCBzaXplLCBpbiBieXRlcywgb2YgdGhlIGZpbGUgd2hlbiB1cGxvYWRpbmcgYSBmaWxlIHRvCiAqIGEgcmVtb3RlIHNpdGUuIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiB3aWxsIG5vdCBzdG9wIGxpYmN1cmwKICogZnJvbSBzZW5kaW5nIG1vcmUgZGF0YSwgYXMgZXhhY3RseSB3aGF0IGlzIHNlbnQgZGVwZW5kcyBvbgogKiBDVVJMT1BUX1JFQURGVU5DVElPTi4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQKICoKICogVGhlIHRyYW5zZmVyIHNwZWVkLCBpbiBieXRlcyBwZXIgc2Vjb25kLCB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUKICogYmVsb3cgZHVyaW5nIHRoZSBjb3VudCBvZiBDVVJMT1BUX0xPV19TUEVFRF9USU1FCiAqIHNlY29uZHMgYmVmb3JlIFBIUCBjb25zaWRlcnMgdGhlIHRyYW5zZmVyIHRvbyBzbG93IGFuZCBhYm9ydHMuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTE9XX1NQRUVEX1RJTUUKICoKICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSB0cmFuc2ZlciBzcGVlZCBzaG91bGQgYmUgYmVsb3cKICogQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQgYmVmb3JlIFBIUCBjb25zaWRlcnMKICogdGhlIHRyYW5zZmVyIHRvbyBzbG93IGFuZCBhYm9ydHMuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfTUFYQ09OTkVDVFMKICoKICogVGhlIG1heGltdW0gYW1vdW50IG9mIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxsb3dlZC4KICogV2hlbiB0aGUgbGltaXQgaXMgcmVhY2hlZCwKICogQ1VSTE9QVF9DTE9TRVBPTElDWSBpcyB1c2VkIHRvIGRldGVybWluZQogKiB3aGljaCBjb25uZWN0aW9uIHRvIGNsb3NlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX01BWFJFRElSUwogKgogKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgSFRUUCByZWRpcmVjdGlvbnMgdG8gZm9sbG93LiBVc2UgdGhpcyBvcHRpb24KICogYWxvbmdzaWRlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04uCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9SVAogKgogKiBBbiBhbHRlcm5hdGl2ZSBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BPU1RSRURJUgogKgogKiBBIGJpdG1hc2sgb2YgMSAoMzAxIE1vdmVkIFBlcm1hbmVudGx5KSwgMiAoMzAyIEZvdW5kKQogKiBhbmQgNCAoMzAzIFNlZSBPdGhlcikgaWYgdGhlIEhUVFAgUE9TVCBtZXRob2Qgc2hvdWxkIGJlIG1haW50YWluZWQKICogd2hlbiBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGlzIHNldCBhbmQgYQogKiBzcGVjaWZpYyB0eXBlIG9mIHJlZGlyZWN0IG9jY3Vycy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE5LjEuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS4zLjIuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPVE9DT0xTCiAqCiAqCiAqIEJpdG1hc2sgb2YgQ1VSTFBST1RPXyogdmFsdWVzLiBJZiB1c2VkLCB0aGlzIGJpdG1hc2sKICogbGltaXRzIHdoYXQgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IHVzZSBpbiB0aGUgdHJhbnNmZXIuIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlCiAqIGEgbGliY3VybCBidWlsdCB0byBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBwcm90b2NvbHMgYnV0IHN0aWxsIGxpbWl0IHNwZWNpZmljCiAqIHRyYW5zZmVycyB0byBvbmx5IGJlIGFsbG93ZWQgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZW0uIEJ5IGRlZmF1bHQgbGliY3VybCB3aWxsCiAqIGFjY2VwdCBhbGwgcHJvdG9jb2xzIGl0IHN1cHBvcnRzLgogKiBTZWUgYWxzbyBDVVJMT1BUX1JFRElSX1BST1RPQ09MUy4KICoKICoKICogVmFsaWQgcHJvdG9jb2wgb3B0aW9ucyBhcmU6CiAqIENVUkxQUk9UT19IVFRQLAogKiBDVVJMUFJPVE9fSFRUUFMsCiAqIENVUkxQUk9UT19GVFAsCiAqIENVUkxQUk9UT19GVFBTLAogKiBDVVJMUFJPVE9fU0NQLAogKiBDVVJMUFJPVE9fU0ZUUCwKICogQ1VSTFBST1RPX1RFTE5FVCwKICogQ1VSTFBST1RPX0xEQVAsCiAqIENVUkxQUk9UT19MREFQUywKICogQ1VSTFBST1RPX0RJQ1QsCiAqIENVUkxQUk9UT19GSUxFLAogKiBDVVJMUFJPVE9fVEZUUCwKICogQ1VSTFBST1RPX0FMTAogKgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTkuNC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWUFVVEgKICoKICogVGhlIEhUVFAgYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHRvIHVzZSBmb3IgdGhlIHByb3h5IGNvbm5lY3Rpb24uCiAqIFVzZSB0aGUgc2FtZSBiaXRtYXNrcyBhcyBkZXNjcmliZWQgaW4KICogQ1VSTE9QVF9IVFRQQVVUSC4gRm9yIHByb3h5IGF1dGhlbnRpY2F0aW9uLAogKiBvbmx5IENVUkxBVVRIX0JBU0lDIGFuZAogKiBDVVJMQVVUSF9OVExNIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuNy4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWVBPUlQKICoKICogVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwcm94eSB0byBjb25uZWN0IHRvLiBUaGlzIHBvcnQgbnVtYmVyIGNhbgogKiBhbHNvIGJlIHNldCBpbiBDVVJMT1BUX1BST1hZLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZVFlQRQogKgogKiBFaXRoZXIgQ1VSTFBST1hZX0hUVFAgKGRlZmF1bHQpLAogKiBDVVJMUFJPWFlfU09DS1M0LAogKiBDVVJMUFJPWFlfU09DS1M1LAogKiBDVVJMUFJPWFlfU09DS1M0QSBvcgogKiBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTCiAqCiAqIEJpdG1hc2sgb2YgQ1VSTFBST1RPXyogdmFsdWVzLiBJZiB1c2VkLCB0aGlzIGJpdG1hc2sKICogbGltaXRzIHdoYXQgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IHVzZSBpbiBhIHRyYW5zZmVyIHRoYXQgaXQgZm9sbG93cyB0byBpbgogKiBhIHJlZGlyZWN0IHdoZW4gQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBpcyBlbmFibGVkLgogKiBUaGlzIGFsbG93cyB5b3UgdG8gbGltaXQgc3BlY2lmaWMgdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQKICogb2YgcHJvdG9jb2xzIGluIHJlZGlyZWN0aW9ucy4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgYWxsb3cgYWxsIHByb3RvY29scwogKiBleGNlcHQgZm9yIEZJTEUgYW5kIFNDUC4gVGhpcyBpcyBhIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gcHJlLTcuMTkuNCB2ZXJzaW9ucwogKiB3aGljaCB1bmNvbmRpdGlvbmFsbHkgd291bGQgZm9sbG93IHRvIGFsbCBwcm90b2NvbHMgc3VwcG9ydGVkLgogKiBTZWUgYWxzbyBDVVJMT1BUX1BST1RPQ09MUyBmb3IgcHJvdG9jb2wgY29uc3RhbnQgdmFsdWVzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTkuNC4KICoKICoKICoKICogQ1VSTE9QVF9SRVNVTUVfRlJPTQogKgogKiBUaGUgb2Zmc2V0LCBpbiBieXRlcywgdG8gcmVzdW1lIGEgdHJhbnNmZXIgZnJvbS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TT0NLUzVfQVVUSAogKgogKgogKiBUaGUgU09DS1M1IGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0dTU0FQSSwKICogQ1VSTEFVVEhfTk9ORS4KICoKICoKICogVGhlIGJpdHdpc2UgfCAob3IpIG9wZXJhdG9yIGNhbiBiZSB1c2VkIHRvIGNvbWJpbmUKICogbW9yZSB0aGFuIG9uZSBtZXRob2QuIElmIHRoaXMgaXMgZG9uZSwgY1VSTCB3aWxsIHBvbGwgdGhlIHNlcnZlciB0byBzZWUKICogd2hhdCBtZXRob2RzIGl0IHN1cHBvcnRzIGFuZCBwaWNrIHRoZSBiZXN0IG9uZS4KICoKICoKICogQ1VSTEFVVEhfQkFTSUMgYWxsb3dzIHVzZXJuYW1lL3Bhc3N3b3JkIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKiBDVVJMQVVUSF9HU1NBUEkgYWxsb3dzIEdTUy1BUEkgYXV0aGVudGljYXRpb24uCiAqCiAqCiAqIENVUkxBVVRIX05PTkUgYWxsb3dzIG5vIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKiBEZWZhdWx0cyB0byBDVVJMQVVUSF9CQVNJQ3xDVVJMQVVUSF9HU1NBUEkuCiAqIFNldCB0aGUgYWN0dWFsIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aXRoIHRoZSBDVVJMT1BUX1BST1hZVVNFUlBXRCBvcHRpb24uCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBhcyBvZiA3LjMuMCBhbmQgY3VybCAmZ3Q7PSA3LjU1LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMX09QVElPTlMKICoKICogU2V0IFNTTCBiZWhhdmlvciBvcHRpb25zLCB3aGljaCBpcyBhIGJpdG1hc2sgb2YgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKiBDVVJMU1NMT1BUX0FMTE9XX0JFQVNUOiBkbyBub3QgYXR0ZW1wdCB0byB1c2UKICogYW55IHdvcmthcm91bmRzIGZvciBhIHNlY3VyaXR5IGZsYXcgaW4gdGhlIFNTTDMgYW5kIFRMUzEuMCBwcm90b2NvbHMuCiAqCiAqCiAqIENVUkxTU0xPUFRfTk9fUkVWT0tFOiBkaXNhYmxlIGNlcnRpZmljYXRlCiAqIHJldm9jYXRpb24gY2hlY2tzIGZvciB0aG9zZSBTU0wgYmFja2VuZHMgd2hlcmUgc3VjaCBiZWhhdmlvciBpcwogKiBwcmVzZW50LgogKgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMjUuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVAogKgogKiAxIHRvIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBjb21tb24gbmFtZSBpbiB0aGUKICogU1NMIHBlZXIgY2VydGlmaWNhdGUuIDIgdG8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZgogKiBhIGNvbW1vbiBuYW1lIGFuZCBhbHNvIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGhvc3RuYW1lCiAqIHByb3ZpZGVkLiAwIHRvIG5vdCBjaGVjayB0aGUgbmFtZXMuIEluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbgogKiBzaG91bGQgYmUga2VwdCBhdCAyIChkZWZhdWx0IHZhbHVlKS4KICoKICoKICogU3VwcG9ydCBmb3IgdmFsdWUgMSByZW1vdmVkIGluIGNVUkwgNy4yOC4xLgogKgogKgogKgogKiBDVVJMT1BUX1NTTFZFUlNJT04KICoKICogT25lIG9mIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUICgwKSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxICgxKSwKICogQ1VSTF9TU0xWRVJTSU9OX1NTTHYyICgyKSwKICogQ1VSTF9TU0xWRVJTSU9OX1NTTHYzICgzKSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgKDQpLAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSAoNSkgb3IKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgKDYpLgogKiBUaGUgbWF4aW11bSBUTFMgdmVyc2lvbiBjYW4gYmUgc2V0IGJ5IHVzaW5nIG9uZSBvZiB0aGUgQ1VSTF9TU0xWRVJTSU9OX01BWF8qCiAqIGNvbnN0YW50cy4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBPUiBvbmUgb2YgdGhlIENVUkxfU1NMVkVSU0lPTl8qCiAqIGNvbnN0YW50cyB3aXRoIG9uZSBvZiB0aGUgQ1VSTF9TU0xWRVJTSU9OX01BWF8qIGNvbnN0YW50cy4KICogQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUICh0aGUgbWF4aW11bSB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeSksCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMCwKICogQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzIsIG9yCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMy4KICoKICoKICogWW91ciBiZXN0IGJldCBpcyB0byBub3Qgc2V0IHRoaXMgYW5kIGxldCBpdCB1c2UgdGhlIGRlZmF1bHQuCiAqIFNldHRpbmcgaXQgdG8gMiBvciAzIGlzIHZlcnkgZGFuZ2Vyb3VzIGdpdmVuIHRoZSBrbm93bgogKiB2dWxuZXJhYmlsaXRpZXMgaW4gU1NMdjIgYW5kIFNTTHYzLgogKgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TCiAqCiAqIFNldCBwcm94eSBTU0wgYmVoYXZpb3Igb3B0aW9ucywgd2hpY2ggaXMgYSBiaXRtYXNrIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogQ1VSTFNTTE9QVF9BTExPV19CRUFTVDogZG8gbm90IGF0dGVtcHQgdG8gdXNlCiAqIGFueSB3b3JrYXJvdW5kcyBmb3IgYSBzZWN1cml0eSBmbGF3IGluIHRoZSBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzLgogKgogKgogKiBDVVJMU1NMT1BUX05PX1JFVk9LRTogZGlzYWJsZSBjZXJ0aWZpY2F0ZQogKiByZXZvY2F0aW9uIGNoZWNrcyBmb3IgdGhvc2UgU1NMIGJhY2tlbmRzIHdoZXJlIHN1Y2ggYmVoYXZpb3IgaXMKICogcHJlc2VudC4gKGN1cmwgJmd0Oz0gNy40NC4wKQogKgogKgogKiBDVVJMU1NMT1BUX05PX1BBUlRJQUxDSEFJTjogZG8gbm90IGFjY2VwdCAicGFydGlhbCIKICogY2VydGlmaWNhdGUgY2hhaW5zLCB3aGljaCBpdCBvdGhlcndpc2UgZG9lcyBieSBkZWZhdWx0LiAoY3VybCAmZ3Q7PSA3LjY4LjApCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QKICoKICogU2V0IHRvIDIgdG8gdmVyaWZ5IGluIHRoZSBIVFRQUyBwcm94eSdzIGNlcnRpZmljYXRlIG5hbWUgZmllbGRzIGFnYWluc3QgdGhlIHByb3h5IG5hbWUuCiAqIFdoZW4gc2V0IHRvIDAgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB0aGUgbmFtZXMgdXNlZCBpbiB0aGUgY2VydGlmaWNhdGUuCiAqIFVzZSB0aGF0IGFiaWxpdHkgd2l0aCBjYXV0aW9uIQogKiAxIHRyZWF0ZWQgYXMgYSBkZWJ1ZyBvcHRpb24gaW4gY3VybCA3LjI4LjAgYW5kIGVhcmxpZXIuCiAqIEZyb20gY3VybCA3LjI4LjEgdG8gNy42NS4zIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVCBpcyByZXR1cm5lZC4KICogRnJvbSBjdXJsIDcuNjYuMCBvbndhcmRzIDEgYW5kIDIgaXMgdHJlYXRlZCBhcyB0aGUgc2FtZSB2YWx1ZS4KICogSW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBrZXB0IGF0IDIgKGRlZmF1bHQgdmFsdWUpLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04KICoKICogT25lIG9mIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxULAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjEsCiAqIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wLAogKiBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSwKICogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIsCiAqIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQsCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMCwKICogQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xLAogKiBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzIsCiAqIENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMyBvcgogKiBDVVJMX1NTTFZFUlNJT05fU1NMdjMuCiAqCiAqCiAqIFlvdXIgYmVzdCBiZXQgaXMgdG8gbm90IHNldCB0aGlzIGFuZCBsZXQgaXQgdXNlIHRoZSBkZWZhdWx0IENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUCiAqIHdoaWNoIHdpbGwgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSByZW1vdGUgU1NMIHByb3RvY29sIHZlcnNpb24uCiAqCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1RSRUFNX1dFSUdIVAogKgogKiBTZXQgdGhlIG51bWVyaWNhbCBzdHJlYW0gd2VpZ2h0IChhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDI1NikuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40Ni4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1RDUF9LRUVQQUxJVkUKICoKICogSWYgc2V0IHRvIDEsIFRDUCBrZWVwYWxpdmUgcHJvYmVzIHdpbGwgYmUgc2VudC4gVGhlIGRlbGF5IGFuZAogKiBmcmVxdWVuY3kgb2YgdGhlc2UgcHJvYmVzIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSBDVVJMT1BUX1RDUF9LRUVQSURMRQogKiBhbmQgQ1VSTE9QVF9UQ1BfS0VFUElOVFZMIG9wdGlvbnMsIHByb3ZpZGVkIHRoZSBvcGVyYXRpbmcgc3lzdGVtCiAqIHN1cHBvcnRzIHRoZW0uIElmIHNldCB0byAwIChkZWZhdWx0KSBrZWVwYWxpdmUgcHJvYmVzIGFyZSBkaXNhYmxlZC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjI1LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS41LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVENQX0tFRVBJRExFCiAqCiAqIFNldHMgdGhlIGRlbGF5LCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgd2FpdCB3aGlsZSB0aGUgY29ubmVjdGlvbiBpcwogKiBpZGxlIGJlZm9yZSBzZW5kaW5nIGtlZXBhbGl2ZSBwcm9iZXMsIGlmIENVUkxPUFRfVENQX0tFRVBBTElWRSBpcwogKiBlbmFibGVkLiBOb3QgYWxsIG9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnQgdGhpcyBvcHRpb24uCiAqIFRoZSBkZWZhdWx0IGlzIDYwLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMjUuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjUuMC4KICoKICoKICoKICogQ1VSTE9QVF9UQ1BfS0VFUElOVFZMCiAqCiAqIFNldHMgdGhlIGludGVydmFsLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgd2FpdCBiZXR3ZWVuIHNlbmRpbmcKICoga2VlcGFsaXZlIHByb2JlcywgaWYgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFIGlzIGVuYWJsZWQuCiAqIE5vdCBhbGwgb3BlcmF0aW5nIHN5c3RlbXMgc3VwcG9ydCB0aGlzIG9wdGlvbi4KICogVGhlIGRlZmF1bHQgaXMgNjAuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4yNS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wLgogKgogKgogKgogKiBDVVJMT1BUX1RJTUVDT05ESVRJT04KICoKICogSG93IENVUkxPUFRfVElNRVZBTFVFIGlzIHRyZWF0ZWQuCiAqIFVzZSBDVVJMX1RJTUVDT05EX0lGTU9EU0lOQ0UgdG8gcmV0dXJuIHRoZQogKiBwYWdlIG9ubHkgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHRpbWUgc3BlY2lmaWVkIGluCiAqIENVUkxPUFRfVElNRVZBTFVFLiBJZiBpdCBoYXNuJ3QgYmVlbiBtb2RpZmllZCwKICogYSAiMzA0IE5vdCBNb2RpZmllZCIgaGVhZGVyIHdpbGwgYmUgcmV0dXJuZWQKICogYXNzdW1pbmcgQ1VSTE9QVF9IRUFERVIgaXMgVFJVRS4KICogVXNlIENVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFIGZvciB0aGUgcmV2ZXJzZQogKiBlZmZlY3QuIENVUkxfVElNRUNPTkRfSUZNT0RTSU5DRSBpcyB0aGUKICogZGVmYXVsdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9USU1FT1VUCiAqCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRvIGFsbG93IGNVUkwgZnVuY3Rpb25zIHRvIGV4ZWN1dGUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVElNRU9VVF9NUwogKgogKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGFsbG93IGNVUkwgZnVuY3Rpb25zIHRvCiAqIGV4ZWN1dGUuCiAqCiAqIElmIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gbmFtZSByZXNvbHZlciwgdGhhdAogKiBwb3J0aW9uIG9mIHRoZSBjb25uZWN0IHdpbGwgc3RpbGwgdXNlIGZ1bGwtc2Vjb25kIHJlc29sdXRpb24gZm9yCiAqIHRpbWVvdXRzIHdpdGggYSBtaW5pbXVtIHRpbWVvdXQgYWxsb3dlZCBvZiBvbmUgc2Vjb25kLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMi4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjIuMy4KICoKICoKICoKICogQ1VSTE9QVF9USU1FVkFMVUUKICoKICogVGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDFzdCwgMTk3MC4gVGhlIHRpbWUgd2lsbCBiZSB1c2VkCiAqIGJ5IENVUkxPUFRfVElNRUNPTkRJVElPTi4gQnkgZGVmYXVsdCwKICogQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFIGlzIHVzZWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVElNRVZBTFVFX0xBUkdFCiAqCiAqIFRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgSmFudWFyeSAxc3QsIDE5NzAuIFRoZSB0aW1lIHdpbGwgYmUgdXNlZAogKiBieSBDVVJMT1BUX1RJTUVDT05ESVRJT04uIERlZmF1bHRzIHRvIHplcm8uCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBvcHRpb24gYW5kIENVUkxPUFRfVElNRVZBTFVFCiAqIGlzIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4gT24gc3lzdGVtcyB3aGVyZSAnbG9uZycgaXMgb25seSAzMiBiaXQgd2lkZSwKICogdGhpcyBvcHRpb24gaGFzIHRvIGJlIHVzZWQgdG8gc2V0IGRhdGVzIGJleW9uZCB0aGUgeWVhciAyMDM4LgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuNTkuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMC4KICoKICoKICoKICogQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRQogKgogKiBJZiBhIGRvd25sb2FkIGV4Y2VlZHMgdGhpcyBzcGVlZCAoY291bnRlZCBpbiBieXRlcyBwZXIgc2Vjb25kKSBvbgogKiBjdW11bGF0aXZlIGF2ZXJhZ2UgZHVyaW5nIHRoZSB0cmFuc2ZlciwgdGhlIHRyYW5zZmVyIHdpbGwgcGF1c2UgdG8KICoga2VlcCB0aGUgYXZlcmFnZSByYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLgogKiBEZWZhdWx0cyB0byB1bmxpbWl0ZWQgc3BlZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xNS41LiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNC4wLgogKgogKgogKgogKiBDVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFCiAqCiAqIElmIGFuIHVwbG9hZCBleGNlZWRzIHRoaXMgc3BlZWQgKGNvdW50ZWQgaW4gYnl0ZXMgcGVyIHNlY29uZCkgb24KICogY3VtdWxhdGl2ZSBhdmVyYWdlIGR1cmluZyB0aGUgdHJhbnNmZXIsIHRoZSB0cmFuc2ZlciB3aWxsIHBhdXNlIHRvCiAqIGtlZXAgdGhlIGF2ZXJhZ2UgcmF0ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZS4KICogRGVmYXVsdHMgdG8gdW5saW1pdGVkIHNwZWVkLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTUuNS4gQXZhaWxhYmxlIHNpbmNlIFBIUCA1LjQuMC4KICoKICoKICoKICogQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUwogKgogKiBBIGJpdG1hc2sgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSBvZgogKiBDVVJMU1NIX0FVVEhfUFVCTElDS0VZLAogKiBDVVJMU1NIX0FVVEhfUEFTU1dPUkQsCiAqIENVUkxTU0hfQVVUSF9IT1NULAogKiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQuIFNldCB0bwogKiBDVVJMU1NIX0FVVEhfQU5ZIHRvIGxldCBsaWJjdXJsIHBpY2sgb25lLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMS4KICoKICoKICoKICogQ1VSTE9QVF9JUFJFU09MVkUKICoKICogQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHNlbGVjdCB3aGF0IGtpbmQgb2YgSVAgYWRkcmVzc2VzIHRvIHVzZSB3aGVuCiAqIHJlc29sdmluZyBob3N0IG5hbWVzLiBUaGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgd2hlbiB1c2luZyBob3N0IG5hbWVzIHRoYXQKICogcmVzb2x2ZSBhZGRyZXNzZXMgdXNpbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIElQLCBwb3NzaWJsZSB2YWx1ZXMgYXJlCiAqIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSLAogKiBDVVJMX0lQUkVTT0xWRV9WNCwKICogQ1VSTF9JUFJFU09MVkVfVjYsIGJ5IGRlZmF1bHQKICogQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC44LgogKgogKgogKgogKiBDVVJMT1BUX0ZUUF9GSUxFTUVUSE9ECiAqCiAqIFRlbGwgY3VybCB3aGljaCBtZXRob2QgdG8gdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhIEZUUChTKSBzZXJ2ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUKICogQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRCwKICogQ1VSTEZUUE1FVEhPRF9OT0NXRCBhbmQKICogQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xNS4xLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMy4wLgogKgogKgogKgogKgogKgogKgogKiBUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdCB3YXMgbmV2ZXIgaW1wbGVtZW50ZWQgaW4gY1VSTCBhbmQKICogbmV2ZXIgaGFkIGFueSBlZmZlY3QuCiAqCiAqIFRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSB0byB1c2UuIFRoZSBvcHRpb25zIGFyZToKICogQ1VSTEFVVEhfQkFTSUMsCiAqIENVUkxBVVRIX0RJR0VTVCwKICogQ1VSTEFVVEhfR1NTTkVHT1RJQVRFLAogKiBDVVJMQVVUSF9OVExNLAogKiBDVVJMQVVUSF9BTlksIGFuZAogKiBDVVJMQVVUSF9BTllTQUZFLgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKiBDVVJMQVVUSF9BTlkgaXMgYW4gYWxpYXMgZm9yCiAqIENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICogQ1VSTEFVVEhfQU5ZU0FGRSBpcyBhbiBhbGlhcyBmb3IKICogQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIHwgQ1VSTEFVVEhfTlRMTS4KICoKICogQml0bWFzayBvZiBDVVJMUFJPVE9fKiB2YWx1ZXMuIElmIHVzZWQsIHRoaXMgYml0bWFzawogKiBsaW1pdHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBtYXkgdXNlIGluIHRoZSB0cmFuc2Zlci4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUKICogYSBsaWJjdXJsIGJ1aWx0IHRvIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIHByb3RvY29scyBidXQgc3RpbGwgbGltaXQgc3BlY2lmaWMKICogdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlbS4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwKICogYWNjZXB0IGFsbCBwcm90b2NvbHMgaXQgc3VwcG9ydHMuCiAqIFNlZSBhbHNvIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLgogKgogKiBWYWxpZCBwcm90b2NvbCBvcHRpb25zIGFyZToKICogQ1VSTFBST1RPX0hUVFAsCiAqIENVUkxQUk9UT19IVFRQUywKICogQ1VSTFBST1RPX0ZUUCwKICogQ1VSTFBST1RPX0ZUUFMsCiAqIENVUkxQUk9UT19TQ1AsCiAqIENVUkxQUk9UT19TRlRQLAogKiBDVVJMUFJPVE9fVEVMTkVULAogKiBDVVJMUFJPVE9fTERBUCwKICogQ1VSTFBST1RPX0xEQVBTLAogKiBDVVJMUFJPVE9fRElDVCwKICogQ1VSTFBST1RPX0ZJTEUsCiAqIENVUkxQUk9UT19URlRQLAogKiBDVVJMUFJPVE9fQUxMCiAqCiAqIFRoZSBTT0NLUzUgYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHRvIHVzZS4gVGhlIG9wdGlvbnMgYXJlOgogKiBDVVJMQVVUSF9CQVNJQywKICogQ1VSTEFVVEhfR1NTQVBJLAogKiBDVVJMQVVUSF9OT05FLgogKgogKiBUaGUgYml0d2lzZSB8IChvcikgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gY29tYmluZQogKiBtb3JlIHRoYW4gb25lIG1ldGhvZC4gSWYgdGhpcyBpcyBkb25lLCBjVVJMIHdpbGwgcG9sbCB0aGUgc2VydmVyIHRvIHNlZQogKiB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHBpY2sgdGhlIGJlc3Qgb25lLgogKgogKiBDVVJMQVVUSF9CQVNJQyBhbGxvd3MgdXNlcm5hbWUvcGFzc3dvcmQgYXV0aGVudGljYXRpb24uCiAqCiAqIENVUkxBVVRIX0dTU0FQSSBhbGxvd3MgR1NTLUFQSSBhdXRoZW50aWNhdGlvbi4KICoKICogQ1VSTEFVVEhfTk9ORSBhbGxvd3Mgbm8gYXV0aGVudGljYXRpb24uCiAqCiAqIERlZmF1bHRzIHRvIENVUkxBVVRIX0JBU0lDfENVUkxBVVRIX0dTU0FQSS4KICogU2V0IHRoZSBhY3R1YWwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHdpdGggdGhlIENVUkxPUFRfUFJPWFlVU0VSUFdEIG9wdGlvbi4KICoKICogWW91ciBiZXN0IGJldCBpcyB0byBub3Qgc2V0IHRoaXMgYW5kIGxldCBpdCB1c2UgdGhlIGRlZmF1bHQuCiAqIFNldHRpbmcgaXQgdG8gMiBvciAzIGlzIHZlcnkgZGFuZ2Vyb3VzIGdpdmVuIHRoZSBrbm93bgogKiB2dWxuZXJhYmlsaXRpZXMgaW4gU1NMdjIgYW5kIFNTTHYzLgogKgogKiBZb3VyIGJlc3QgYmV0IGlzIHRvIG5vdCBzZXQgdGhpcyBhbmQgbGV0IGl0IHVzZSB0aGUgZGVmYXVsdCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVAogKiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gZmlndXJlIG91dCB0aGUgcmVtb3RlIFNTTCBwcm90b2NvbCB2ZXJzaW9uLgogKgogKiB2YWx1ZSBzaG91bGQgYmUgYSBzdHJpbmcgZm9yIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqIE5vdGVzCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQUJTVFJBQ1RfVU5JWF9TT0NLRVQKICoKICogRW5hYmxlcyB0aGUgdXNlIG9mIGFuIGFic3RyYWN0IFVuaXggZG9tYWluIHNvY2tldCBpbnN0ZWFkIG9mCiAqIGVzdGFibGlzaGluZyBhIFRDUCBjb25uZWN0aW9uIHRvIGEgaG9zdCBhbmQgc2V0cyB0aGUgcGF0aCB0bwogKiB0aGUgZ2l2ZW4gc3RyaW5nLiBUaGlzIG9wdGlvbiBzaGFyZXMgdGhlIHNhbWUgc2VtYW50aWNzCiAqIGFzIENVUkxPUFRfVU5JWF9TT0NLRVRfUEFUSC4gVGhlc2UgdHdvIG9wdGlvbnMKICogc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSBhbmQgdGhlcmVmb3JlIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIHNldAogKiBwZXIgaGFuZGxlLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBjVVJMIDcuNTMuMAogKgogKgogKgogKiBDVVJMT1BUX0NBSU5GTwogKgogKiBUaGUgbmFtZSBvZiBhIGZpbGUgaG9sZGluZyBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZQogKiBwZWVyIHdpdGguIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aAogKiBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLgogKgogKgogKiBNaWdodCByZXF1aXJlIGFuIGFic29sdXRlIHBhdGguCiAqCiAqCiAqCiAqIENVUkxPUFRfQ0FQQVRICiAqCiAqIEEgZGlyZWN0b3J5IHRoYXQgaG9sZHMgbXVsdGlwbGUgQ0EgY2VydGlmaWNhdGVzLiBVc2UgdGhpcyBvcHRpb24KICogYWxvbmdzaWRlIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfQ09PS0lFCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGUgIkNvb2tpZTogIiBoZWFkZXIgdG8gYmUKICogdXNlZCBpbiB0aGUgSFRUUCByZXF1ZXN0LgogKiBOb3RlIHRoYXQgbXVsdGlwbGUgY29va2llcyBhcmUgc2VwYXJhdGVkIHdpdGggYSBzZW1pY29sb24gZm9sbG93ZWQKICogYnkgYSBzcGFjZSAoZS5nLiwgImZydWl0PWFwcGxlOyBjb2xvdXI9cmVkIikKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9DT09LSUVGSUxFCiAqCiAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvb2tpZSBkYXRhLiBUaGUgY29va2llIGZpbGUgY2FuCiAqIGJlIGluIE5ldHNjYXBlIGZvcm1hdCwgb3IganVzdCBwbGFpbiBIVFRQLXN0eWxlIGhlYWRlcnMgZHVtcGVkIGludG8KICogYSBmaWxlLgogKiBJZiB0aGUgbmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIG5vIGNvb2tpZXMgYXJlIGxvYWRlZCwgYnV0IGNvb2tpZQogKiBoYW5kbGluZyBpcyBzdGlsbCBlbmFibGVkLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRUpBUgogKgogKiBUaGUgbmFtZSBvZiBhIGZpbGUgdG8gc2F2ZSBhbGwgaW50ZXJuYWwgY29va2llcyB0byB3aGVuIHRoZSBoYW5kbGUgaXMgY2xvc2VkLAogKiBlLmcuIGFmdGVyIGEgY2FsbCB0byBjdXJsX2Nsb3NlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0NPT0tJRUxJU1QKICoKICogQSBjb29raWUgc3RyaW5nIChpLmUuIGEgc2luZ2xlIGxpbmUgaW4gTmV0c2NhcGUvTW96aWxsYSBmb3JtYXQsIG9yIGEgcmVndWxhcgogKiBIVFRQLXN0eWxlIFNldC1Db29raWUgaGVhZGVyKSBhZGRzIHRoYXQgc2luZ2xlIGNvb2tpZSB0byB0aGUgaW50ZXJuYWwgY29va2llIHN0b3JlLgogKiAiQUxMIiBlcmFzZXMgYWxsIGNvb2tpZXMgaGVsZCBpbiBtZW1vcnkuCiAqICJTRVNTIiBlcmFzZXMgYWxsIHNlc3Npb24gY29va2llcyBoZWxkIGluIG1lbW9yeS4KICogIkZMVVNIIiB3cml0ZXMgYWxsIGtub3duIGNvb2tpZXMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IENVUkxPUFRfQ09PS0lFSkFSLgogKiAiUkVMT0FEIiBsb2FkcyBhbGwgY29va2llcyBmcm9tIHRoZSBmaWxlcyBzcGVjaWZpZWQgYnkgQ1VSTE9QVF9DT09LSUVGSUxFLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wIGFuZCBjVVJMIDcuMTQuMS4KICoKICoKICoKICogQ1VSTE9QVF9DVVNUT01SRVFVRVNUCiAqCiAqIEEgY3VzdG9tIHJlcXVlc3QgbWV0aG9kIHRvIHVzZSBpbnN0ZWFkIG9mCiAqICJHRVQiIG9yICJIRUFEIiB3aGVuIGRvaW5nCiAqIGEgSFRUUCByZXF1ZXN0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZG9pbmcKICogIkRFTEVURSIgb3Igb3RoZXIsIG1vcmUgb2JzY3VyZSBIVFRQIHJlcXVlc3RzLgogKiBWYWxpZCB2YWx1ZXMgYXJlIHRoaW5ncyBsaWtlICJHRVQiLAogKiAiUE9TVCIsICJDT05ORUNUIiBhbmQgc28gb247CiAqIGkuZS4gRG8gbm90IGVudGVyIGEgd2hvbGUgSFRUUCByZXF1ZXN0IGxpbmUgaGVyZS4gRm9yIGluc3RhbmNlLAogKiBlbnRlcmluZyAiR0VUIC9pbmRleC5odG1sIEhUVFAvMS4wXHJcblxyXG4iCiAqIHdvdWxkIGJlIGluY29ycmVjdC4KICoKICoKICogRG9uJ3QgZG8gdGhpcyB3aXRob3V0IG1ha2luZyBzdXJlIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlIGN1c3RvbQogKiByZXF1ZXN0IG1ldGhvZCBmaXJzdC4KICoKICoKICoKICoKICoKICoKICoKICogQ1VSTE9QVF9ERUZBVUxUX1BST1RPQ09MCiAqCiAqIFRoZSBkZWZhdWx0IHByb3RvY29sIHRvIHVzZSBpZiB0aGUgVVJMIGlzIG1pc3NpbmcgYSBzY2hlbWUgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQ1LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfRE5TX0lOVEVSRkFDRQogKgogKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgdGhlIEROUyByZXNvbHZlciBzaG91bGQgYmluZCB0by4KICogVGhpcyBtdXN0IGJlIGFuIGludGVyZmFjZSBuYW1lIChub3QgYW4gYWRkcmVzcykuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zMy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0ROU19MT0NBTF9JUDQKICoKICogU2V0IHRoZSBsb2NhbCBJUHY0IGFkZHJlc3MgdGhhdCB0aGUgcmVzb2x2ZXIgc2hvdWxkIGJpbmQgdG8uIFRoZSBhcmd1bWVudAogKiBzaG91bGQgY29udGFpbiBhIHNpbmdsZSBudW1lcmljYWwgSVB2NCBhZGRyZXNzIGFzIGEgc3RyaW5nLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMzMuMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjAuNy4KICoKICoKICoKICogQ1VSTE9QVF9ETlNfTE9DQUxfSVA2CiAqCiAqIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRoYXQgdGhlIHJlc29sdmVyIHNob3VsZCBiaW5kIHRvLiBUaGUgYXJndW1lbnQKICogc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUgbnVtZXJpY2FsIElQdjYgYWRkcmVzcyBhcyBhIHN0cmluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjMzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfRUdEU09DS0VUCiAqCiAqIExpa2UgQ1VSTE9QVF9SQU5ET01fRklMRSwgZXhjZXB0IGEgZmlsZW5hbWUKICogdG8gYW4gRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9FTkNPRElORwogKgogKiBUaGUgY29udGVudHMgb2YgdGhlICJBY2NlcHQtRW5jb2Rpbmc6ICIgaGVhZGVyLgogKiBUaGlzIGVuYWJsZXMgZGVjb2Rpbmcgb2YgdGhlIHJlc3BvbnNlLiBTdXBwb3J0ZWQgZW5jb2RpbmdzIGFyZQogKiAiaWRlbnRpdHkiLCAiZGVmbGF0ZSIsIGFuZAogKiAiZ3ppcCIuIElmIGFuIGVtcHR5IHN0cmluZywgIiIsCiAqIGlzIHNldCwgYSBoZWFkZXIgY29udGFpbmluZyBhbGwgc3VwcG9ydGVkIGVuY29kaW5nIHR5cGVzIGlzIHNlbnQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4KICoKICoKICoKICogQ1VSTE9QVF9GVFBQT1JUCiAqCiAqIFRoZSB2YWx1ZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSBJUCBhZGRyZXNzIHRvIHVzZQogKiBmb3IgdGhlIEZUUCAiUE9SVCIgaW5zdHJ1Y3Rpb24uIFRoZSAiUE9SVCIgaW5zdHJ1Y3Rpb24gdGVsbHMKICogdGhlIHJlbW90ZSBzZXJ2ZXIgdG8gY29ubmVjdCB0byBvdXIgc3BlY2lmaWVkIElQIGFkZHJlc3MuICBUaGUKICogc3RyaW5nIG1heSBiZSBhIHBsYWluIElQIGFkZHJlc3MsIGEgaG9zdG5hbWUsIGEgbmV0d29yawogKiBpbnRlcmZhY2UgbmFtZSAodW5kZXIgVW5peCksIG9yIGp1c3QgYSBwbGFpbiAnLScgdG8gdXNlIHRoZQogKiBzeXN0ZW1zIGRlZmF1bHQgSVAgYWRkcmVzcy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9JTlRFUkZBQ0UKICoKICogVGhlIG5hbWUgb2YgdGhlIG91dGdvaW5nIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHVzZS4gVGhpcyBjYW4gYmUgYW4KICogaW50ZXJmYWNlIG5hbWUsIGFuIElQIGFkZHJlc3Mgb3IgYSBob3N0IG5hbWUuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfS0VZUEFTU1dECiAqCiAqIFRoZSBwYXNzd29yZCByZXF1aXJlZCB0byB1c2UgdGhlIENVUkxPUFRfU1NMS0VZCiAqIG9yIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRSBwcml2YXRlIGtleS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjEuCiAqCiAqCiAqCiAqIENVUkxPUFRfS1JCNExFVkVMCiAqCiAqIFRoZSBLUkI0IChLZXJiZXJvcyA0KSBzZWN1cml0eSBsZXZlbC4gQW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCiAqIChpbiBvcmRlciBmcm9tIGxlYXN0IHRvIG1vc3QgcG93ZXJmdWwpIGFyZSB2YWxpZDoKICogImNsZWFyIiwKICogInNhZmUiLAogKiAiY29uZmlkZW50aWFsIiwKICogInByaXZhdGUiLi4KICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlc2UsCiAqICJwcml2YXRlIiBpcyB1c2VkLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIE5VTEwKICogd2lsbCBkaXNhYmxlIEtSQjQgc2VjdXJpdHkuIEN1cnJlbnRseSBLUkI0IHNlY3VyaXR5IG9ubHkgd29ya3MKICogd2l0aCBGVFAgdHJhbnNhY3Rpb25zLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX0xPR0lOX09QVElPTlMKICoKICogQ2FuIGJlIHVzZWQgdG8gc2V0IHByb3RvY29sIHNwZWNpZmljIGxvZ2luIG9wdGlvbnMsIHN1Y2ggYXMgdGhlCiAqIHByZWZlcnJlZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdmlhICJBVVRIPU5UTE0iIG9yICJBVVRIPSoiLAogKiBhbmQgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKICogQ1VSTE9QVF9VU0VSTkFNRSBvcHRpb24uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNC4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWQogKgogKiBTZXQgdGhlIHBpbm5lZCBwdWJsaWMga2V5LgogKiBUaGUgc3RyaW5nIGNhbiBiZSB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgcGlubmVkIHB1YmxpYyBrZXkuIFRoZSBmaWxlCiAqIGZvcm1hdCBleHBlY3RlZCBpcyAiUEVNIiBvciAiREVSIi4gVGhlIHN0cmluZyBjYW4gYWxzbyBiZSBhbnkKICogbnVtYmVyIG9mIGJhc2U2NCBlbmNvZGVkIHNoYTI1NiBoYXNoZXMgcHJlY2VkZWQgYnkgInNoYTI1Ni8vIiBhbmQKICogc2VwYXJhdGVkIGJ5ICI7Ii4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM5LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUE9TVEZJRUxEUwogKgogKgogKiBUaGUgZnVsbCBkYXRhIHRvIHBvc3QgaW4gYSBIVFRQICJQT1NUIiBvcGVyYXRpb24uCiAqIFRvIHBvc3QgYSBmaWxlLCBwcmVwZW5kIGEgZmlsZW5hbWUgd2l0aCBAIGFuZAogKiB1c2UgdGhlIGZ1bGwgcGF0aC4gVGhlIGZpbGV0eXBlIGNhbiBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCBieQogKiBmb2xsb3dpbmcgdGhlIGZpbGVuYW1lIHdpdGggdGhlIHR5cGUgaW4gdGhlIGZvcm1hdAogKiAnO3R5cGU9bWltZXR5cGUnLiBUaGlzIHBhcmFtZXRlciBjYW4gZWl0aGVyIGJlCiAqIHBhc3NlZCBhcyBhIHVybGVuY29kZWQgc3RyaW5nIGxpa2UgJ3BhcmExPXZhbDEmYW1wO3BhcmEyPXZhbDImYW1wOy4uLicKICogb3IgYXMgYW4gYXJyYXkgd2l0aCB0aGUgZmllbGQgbmFtZSBhcyBrZXkgYW5kIGZpZWxkIGRhdGEgYXMgdmFsdWUuCiAqIElmIHZhbHVlIGlzIGFuIGFycmF5LCB0aGUKICogQ29udGVudC1UeXBlIGhlYWRlciB3aWxsIGJlIHNldCB0bwogKiBtdWx0aXBhcnQvZm9ybS1kYXRhLgogKgogKgogKiBBcyBvZiBQSFAgNS4yLjAsIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgaWYKICogZmlsZXMgYXJlIHBhc3NlZCB0byB0aGlzIG9wdGlvbiB3aXRoIHRoZSBAIHByZWZpeC4KICoKICoKICogQXMgb2YgUEhQIDUuNS4wLCB0aGUgQCBwcmVmaXggaXMgZGVwcmVjYXRlZCBhbmQKICogZmlsZXMgY2FuIGJlIHNlbnQgdXNpbmcgQ1VSTEZpbGUuIFRoZQogKiBAIHByZWZpeCBjYW4gYmUgZGlzYWJsZWQgZm9yIHNhZmUgcGFzc2luZyBvZgogKiB2YWx1ZXMgYmVnaW5uaW5nIHdpdGggQCBieSBzZXR0aW5nIHRoZQogKiBDVVJMT1BUX1NBRkVfVVBMT0FEIG9wdGlvbiB0byBUUlVFLgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BSSVZBVEUKICoKICogQW55IGRhdGEgdGhhdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY1VSTCBoYW5kbGUuIFRoaXMgZGF0YQogKiBjYW4gc3Vic2VxdWVudGx5IGJlIHJldHJpZXZlZCB3aXRoIHRoZQogKiBDVVJMSU5GT19QUklWQVRFIG9wdGlvbiBvZgogKiBjdXJsX2dldGluZm8uIGNVUkwgZG9lcyBub3RoaW5nIHdpdGggdGhpcyBkYXRhLgogKiBXaGVuIHVzaW5nIGEgY1VSTCBtdWx0aSBoYW5kbGUsIHRoaXMgcHJpdmF0ZSBkYXRhIGlzIHR5cGljYWxseSBhCiAqIHVuaXF1ZSBrZXkgdG8gaWRlbnRpZnkgYSBzdGFuZGFyZCBjVVJMIGhhbmRsZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjEwLjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJFX1BST1hZCiAqCiAqIFNldCBhIHN0cmluZyBob2xkaW5nIHRoZSBob3N0IG5hbWUgb3IgZG90dGVkIG51bWVyaWNhbAogKiBJUCBhZGRyZXNzIHRvIGJlIHVzZWQgYXMgdGhlIHByZXByb3h5IHRoYXQgY3VybCBjb25uZWN0cyB0byBiZWZvcmUKICogaXQgY29ubmVjdHMgdG8gdGhlIEhUVFAoUykgcHJveHkgc3BlY2lmaWVkIGluIHRoZQogKiBDVVJMT1BUX1BST1hZIG9wdGlvbiBmb3IgdGhlIHVwY29taW5nIHJlcXVlc3QuCiAqIFRoZSBwcmVwcm94eSBjYW4gb25seSBiZSBhIFNPQ0tTIHByb3h5IGFuZCBpdCBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aAogKiBbc2NoZW1lXTovLyB0byBzcGVjaWZ5IHdoaWNoIGtpbmQgb2Ygc29ja3MgaXMgdXNlZC4KICogQSBudW1lcmljYWwgSVB2NiBhZGRyZXNzIG11c3QgYmUgd3JpdHRlbiB3aXRoaW4gW2JyYWNrZXRzXS4KICogU2V0dGluZyB0aGUgcHJlcHJveHkgdG8gYW4gZW1wdHkgc3RyaW5nIGV4cGxpY2l0bHkgZGlzYWJsZXMgdGhlIHVzZSBvZiBhIHByZXByb3h5LgogKiBUbyBzcGVjaWZ5IHBvcnQgbnVtYmVyIGluIHRoaXMgc3RyaW5nLCBhcHBlbmQgOltwb3J0XQogKiB0byB0aGUgZW5kIG9mIHRoZSBob3N0IG5hbWUuIFRoZSBwcm94eSdzIHBvcnQgbnVtYmVyIG1heSBvcHRpb25hbGx5IGJlCiAqIHNwZWNpZmllZCB3aXRoIHRoZSBzZXBhcmF0ZSBvcHRpb24gQ1VSTE9QVF9QUk9YWVBPUlQuCiAqIERlZmF1bHRzIHRvIHVzaW5nIHBvcnQgMTA4MCBmb3IgcHJveGllcyBpZiBhIHBvcnQgaXMgbm90IHNwZWNpZmllZC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWQogKgogKiBUaGUgSFRUUCBwcm94eSB0byB0dW5uZWwgcmVxdWVzdHMgdGhyb3VnaC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TRVJWSUNFX05BTUUKICoKICogVGhlIHByb3h5IGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjM0LjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfQ0FJTkZPCiAqCiAqIFRoZSBwYXRoIHRvIHByb3h5IENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIGJ1bmRsZS4gU2V0IHRoZSBwYXRoIGFzIGEKICogc3RyaW5nIG5hbWluZyBhIGZpbGUgaG9sZGluZyBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8KICogdmVyaWZ5IHRoZSBIVFRQUyBwcm94eSB3aXRoLgogKiBUaGlzIG9wdGlvbiBpcyBmb3IgY29ubmVjdGluZyB0byBhbiBIVFRQUyBwcm94eSwgbm90IGFuIEhUVFBTIHNlcnZlci4KICogRGVmYXVsdHMgc2V0IHRvIHRoZSBzeXN0ZW0gcGF0aCB3aGVyZSBsaWJjdXJsJ3MgY2FjZXJ0IGJ1bmRsZSBpcyBhc3N1bWVkCiAqIHRvIGJlIHN0b3JlZC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9DQVBBVEgKICoKICogVGhlIGRpcmVjdG9yeSBob2xkaW5nIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIEhUVFBTIHByb3h5IHdpdGguCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfQ1JMRklMRQogKgogKiBTZXQgdGhlIGZpbGUgbmFtZSB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIENSTCAoQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBMaXN0KQogKiBpbiBQRU0gZm9ybWF0IHRvIHVzZSBpbiB0aGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiB0aGF0IG9jY3VycyBkdXJpbmcKICogdGhlIFNTTCBleGNoYW5nZS4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QKICoKICogU2V0IHRoZSBzdHJpbmcgYmUgdXNlZCBhcyB0aGUgcGFzc3dvcmQgcmVxdWlyZWQgdG8gdXNlIHRoZQogKiBDVVJMT1BUX1BST1hZX1NTTEtFWSBwcml2YXRlIGtleS4gWW91IG5ldmVyIG5lZWRlZCBhCiAqIHBhc3NwaHJhc2UgdG8gbG9hZCBhIGNlcnRpZmljYXRlIGJ1dCB5b3UgbmVlZCBvbmUgdG8gbG9hZCB5b3VyIHByaXZhdGUga2V5LgogKiBUaGlzIG9wdGlvbiBpcyBmb3IgY29ubmVjdGluZyB0byBhbiBIVFRQUyBwcm94eSwgbm90IGFuIEhUVFBTIHNlcnZlci4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9QSU5ORURQVUJMSUNLRVkKICoKICogU2V0IHRoZSBwaW5uZWQgcHVibGljIGtleSBmb3IgSFRUUFMgcHJveHkuIFRoZSBzdHJpbmcgY2FuIGJlIHRoZSBmaWxlIG5hbWUKICogb2YgeW91ciBwaW5uZWQgcHVibGljIGtleS4gVGhlIGZpbGUgZm9ybWF0IGV4cGVjdGVkIGlzICJQRU0iIG9yICJERVIiLgogKiBUaGUgc3RyaW5nIGNhbiBhbHNvIGJlIGFueSBudW1iZXIgb2YgYmFzZTY0IGVuY29kZWQgc2hhMjU2IGhhc2hlcyBwcmVjZWRlZCBieQogKiAic2hhMjU2Ly8iIGFuZCBzZXBhcmF0ZWQgYnkgIjsiCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfU1NMQ0VSVAogKgogKiBUaGUgZmlsZSBuYW1lIG9mIHlvdXIgY2xpZW50IGNlcnRpZmljYXRlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgSFRUUFMgcHJveHkuCiAqIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiUDEyIiBvbiBTZWN1cmUgVHJhbnNwb3J0IGFuZCAiUEVNIiBvbiBvdGhlciBlbmdpbmVzLAogKiBhbmQgY2FuIGJlIGNoYW5nZWQgd2l0aCBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFLgogKiBXaXRoIE5TUyBvciBTZWN1cmUgVHJhbnNwb3J0LCB0aGlzIGNhbiBhbHNvIGJlIHRoZSBuaWNrbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUKICogeW91IHdpc2ggdG8gYXV0aGVudGljYXRlIHdpdGggYXMgaXQgaXMgbmFtZWQgaW4gdGhlIHNlY3VyaXR5IGRhdGFiYXNlLgogKiBJZiB5b3Ugd2FudCB0byB1c2UgYSBmaWxlIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBwbGVhc2UgcHJlY2VkZSBpdCB3aXRoCiAqICIuLyIgcHJlZml4LCBpbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIG5pY2tuYW1lLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFCiAqCiAqIFRoZSBmb3JtYXQgb2YgeW91ciBjbGllbnQgY2VydGlmaWNhdGUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gYW4gSFRUUFMgcHJveHkuCiAqIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiBhbmQgIkRFUiIsIGV4Y2VwdCB3aXRoIFNlY3VyZSBUcmFuc3BvcnQuCiAqIE9wZW5TU0wgKHZlcnNpb25zIDAuOS4zIGFuZCBsYXRlcikgYW5kIFNlY3VyZSBUcmFuc3BvcnQKICogKG9uIGlPUyA1IG9yIGxhdGVyLCBvciBPUyBYIDEwLjcgb3IgbGF0ZXIpIGFsc28gc3VwcG9ydCAiUDEyIiBmb3IKICogUEtDUyMxMi1lbmNvZGVkIGZpbGVzLiBEZWZhdWx0cyB0byAiUEVNIi4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QKICoKICogVGhlIGxpc3Qgb2YgY2lwaGVycyB0byB1c2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBIVFRQUyBwcm94eS4KICogVGhlIGxpc3QgbXVzdCBiZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGNpcGhlcgogKiBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuIENvbW1hcyBvciBzcGFjZXMgYXJlIGFsc28gYWNjZXB0YWJsZSBzZXBhcmF0b3JzCiAqIGJ1dCBjb2xvbnMgYXJlIG5vcm1hbGx5IHVzZWQsICEsIC0gYW5kICsgY2FuIGJlIHVzZWQgYXMgb3BlcmF0b3JzLgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1RMUzEzX0NJUEhFUlMKICoKICogVGhlIGxpc3Qgb2YgY2lwaGVyIHN1aXRlcyB0byB1c2UgZm9yIHRoZSBUTFMgMS4zIGNvbm5lY3Rpb24gdG8gYSBwcm94eS4KICogVGhlIGxpc3QgbXVzdCBiZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlCiAqIGNpcGhlciBzdWl0ZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSB1c2VkCiAqIG9ubHkgd2hlbiBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBPcGVuU1NMIDEuMS4xIG9yIGxhdGVyLgogKiBJZiB5b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IFNTTCBiYWNrZW5kIHlvdSBjYW4gdHJ5IHNldHRpbmcKICogVExTIDEuMyBjaXBoZXIgc3VpdGVzIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCBvcHRpb24uCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjYxLjAuIEF2YWlsYWJsZSB3aGVuIGJ1aWx0IHdpdGggT3BlblNTTCAmZ3Q7PSAxLjEuMS4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9TU0xLRVkKICoKICogVGhlIGZpbGUgbmFtZSBvZiB5b3VyIHByaXZhdGUga2V5IHVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFBTIHByb3h5LgogKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIlBFTSIgYW5kIGNhbiBiZSBjaGFuZ2VkIHdpdGgKICogQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFLgogKiAoaU9TIGFuZCBNYWMgT1MgWCBvbmx5KSBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGN1cmwgd2FzIGJ1aWx0IGFnYWluc3QgU2VjdXJlIFRyYW5zcG9ydC4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4gQXZhaWxhYmxlIGlmIGJ1aWx0IFRMUyBlbmFibGVkLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUKICoKICogVGhlIGZvcm1hdCBvZiB5b3VyIHByaXZhdGUga2V5LiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgIlBFTSIsICJERVIiIGFuZCAiRU5HIi4KICoKICoKICogQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjMuMCBhbmQgbGliY3VybCAmZ3Q7PSBjVVJMIDcuNTIuMC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JECiAqCiAqIFRoZSBwYXNzd29yZCB0byB1c2UgZm9yIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoIHRoZQogKiBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRSBvcHRpb24uIFJlcXVpcmVzIHRoYXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBvcHRpb24gdG8gYWxzbyBiZSBzZXQuCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFCiAqCiAqIFRoZSBtZXRob2Qgb2YgdGhlIFRMUyBhdXRoZW50aWNhdGlvbiB1c2VkIGZvciB0aGUgSFRUUFMgY29ubmVjdGlvbi4gU3VwcG9ydGVkIG1ldGhvZCBpcyAiU1JQIi4KICoKICoKICogU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBhdXRoZW50aWNhdGlvbiBmb3IgVExTIHByb3ZpZGVzIG11dHVhbCBhdXRoZW50aWNhdGlvbgogKiBpZiBib3RoIHNpZGVzIGhhdmUgYSBzaGFyZWQgc2VjcmV0LiBUbyB1c2UgVExTLVNSUCwgeW91IG11c3QgYWxzbyBzZXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBhbmQKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEIG9wdGlvbnMuCiAqCiAqCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjUyLjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRQogKgogKiBUdXNlcm5hbWUgdG8gdXNlIGZvciB0aGUgSFRUUFMgcHJveHkgVExTIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBzcGVjaWZpZWQgd2l0aCB0aGUKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEUgb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZQogKiBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQgb3B0aW9uIHRvIGFsc28gYmUgc2V0LgogKgogKgogKiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMy4wIGFuZCBsaWJjdXJsICZndDs9IGNVUkwgNy41Mi4wLgogKgogKgogKgogKiBDVVJMT1BUX1BST1hZVVNFUlBXRAogKgogKiBBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3JtYXR0ZWQgYXMKICogIlt1c2VybmFtZV06W3Bhc3N3b3JkXSIgdG8gdXNlIGZvciB0aGUKICogY29ubmVjdGlvbiB0byB0aGUgcHJveHkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkFORE9NX0ZJTEUKICoKICogQSBmaWxlbmFtZSB0byBiZSB1c2VkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBTU0wuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUkFOR0UKICoKICogUmFuZ2Uocykgb2YgZGF0YSB0byByZXRyaWV2ZSBpbiB0aGUgZm9ybWF0CiAqICJYLVkiIHdoZXJlIFggb3IgWSBhcmUgb3B0aW9uYWwuIEhUVFAgdHJhbnNmZXJzCiAqIGFsc28gc3VwcG9ydCBzZXZlcmFsIGludGVydmFscywgc2VwYXJhdGVkIHdpdGggY29tbWFzIGluIHRoZSBmb3JtYXQKICogIlgtWSxOLU0iLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFRkVSRVIKICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSAiUmVmZXJlcjogIiBoZWFkZXIgdG8gYmUgdXNlZAogKiBpbiBhIEhUVFAgcmVxdWVzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TRVJWSUNFX05BTUUKICoKICogVGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgbmFtZS4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQzLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUKICoKICogQSBzdHJpbmcgY29udGFpbmluZyAzMiBoZXhhZGVjaW1hbCBkaWdpdHMuIFRoZSBzdHJpbmcgc2hvdWxkIGJlIHRoZQogKiBNRDUgY2hlY2tzdW0gb2YgdGhlIHJlbW90ZSBob3N0J3MgcHVibGljIGtleSwgYW5kIGxpYmN1cmwgd2lsbCByZWplY3QKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgdW5sZXNzIHRoZSBtZDVzdW1zIG1hdGNoLgogKiBUaGlzIG9wdGlvbiBpcyBvbmx5IGZvciBTQ1AgYW5kIFNGVFAgdHJhbnNmZXJzLgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTcuMS4KICoKICoKICoKICogQ1VSTE9QVF9TU0hfUFVCTElDX0tFWUZJTEUKICoKICogVGhlIGZpbGUgbmFtZSBmb3IgeW91ciBwdWJsaWMga2V5LiBJZiBub3QgdXNlZCwgbGliY3VybCBkZWZhdWx0cyB0bwogKiAkSE9NRS8uc3NoL2lkX2RzYS5wdWIgaWYgdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LAogKiBhbmQganVzdCAiaWRfZHNhLnB1YiIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIEhPTUUgaXMgbm90IHNldC4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE2LjEuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRQogKgogKiBUaGUgZmlsZSBuYW1lIGZvciB5b3VyIHByaXZhdGUga2V5LiBJZiBub3QgdXNlZCwgbGliY3VybCBkZWZhdWx0cyB0bwogKiAkSE9NRS8uc3NoL2lkX2RzYSBpZiB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsCiAqIGFuZCBqdXN0ICJpZF9kc2EiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiBIT01FIGlzIG5vdCBzZXQuCiAqIElmIHRoZSBmaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCwgc2V0IHRoZSBwYXNzd29yZCB3aXRoCiAqIENVUkxPUFRfS0VZUEFTU1dELgogKgogKgogKiBBZGRlZCBpbiBjVVJMIDcuMTYuMS4KICoKICoKICoKICogQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QKICoKICogQSBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlIGZvciBTU0wuIEZvciBleGFtcGxlLAogKiBSQzQtU0hBIGFuZCBUTFN2MSBhcmUgdmFsaWQKICogY2lwaGVyIGxpc3RzLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlQKICoKICogVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBQRU0gZm9ybWF0dGVkIGNlcnRpZmljYXRlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlRQQVNTV0QKICoKICogVGhlIHBhc3N3b3JkIHJlcXVpcmVkIHRvIHVzZSB0aGUKICogQ1VSTE9QVF9TU0xDRVJUIGNlcnRpZmljYXRlLgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTENFUlRUWVBFCiAqCiAqIFRoZSBmb3JtYXQgb2YgdGhlIGNlcnRpZmljYXRlLiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUKICogIlBFTSIgKGRlZmF1bHQpLCAiREVSIiwKICogYW5kICJFTkciLgogKiBBcyBvZiBPcGVuU1NMIDAuOS4zLCAiUDEyIiAoZm9yIFBLQ1MjMTItZW5jb2RlZCBmaWxlcykKICogaXMgYWxzbyBzdXBwb3J0ZWQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy45LjMuCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMRU5HSU5FCiAqCiAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgY3J5cHRvIGVuZ2luZSBvZiB0aGUgcHJpdmF0ZSBTU0wga2V5CiAqIHNwZWNpZmllZCBpbiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVAogKgogKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGNyeXB0byBlbmdpbmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBjcnlwdG8KICogb3BlcmF0aW9ucy4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9TU0xLRVkKICoKICogVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBwcml2YXRlIFNTTCBrZXkuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfU1NMS0VZUEFTU1dECiAqCiAqIFRoZSBzZWNyZXQgcGFzc3dvcmQgbmVlZGVkIHRvIHVzZSB0aGUgcHJpdmF0ZSBTU0wga2V5IHNwZWNpZmllZCBpbgogKiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICogU2luY2UgdGhpcyBvcHRpb24gY29udGFpbnMgYSBzZW5zaXRpdmUgcGFzc3dvcmQsIHJlbWVtYmVyIHRvIGtlZXAKICogdGhlIFBIUCBzY3JpcHQgaXQgaXMgY29udGFpbmVkIHdpdGhpbiBzYWZlLgogKgogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1NTTEtFWVRZUEUKICoKICogVGhlIGtleSB0eXBlIG9mIHRoZSBwcml2YXRlIFNTTCBrZXkgc3BlY2lmaWVkIGluCiAqIENVUkxPUFRfU1NMS0VZLiBTdXBwb3J0ZWQga2V5IHR5cGVzIGFyZQogKiAiUEVNIiAoZGVmYXVsdCksICJERVIiLAogKiBhbmQgIkVORyIuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfVExTMTNfQ0lQSEVSUwogKgogKiBUaGUgbGlzdCBvZiBjaXBoZXIgc3VpdGVzIHRvIHVzZSBmb3IgdGhlIFRMUyAxLjMgY29ubmVjdGlvbi4gVGhlIGxpc3QgbXVzdCBiZQogKiBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIGl0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIGNpcGhlciBzdWl0ZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb2xvbnMuCiAqIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgd2hlbiBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBPcGVuU1NMIDEuMS4xIG9yIGxhdGVyLgogKiBJZiB5b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IFNTTCBiYWNrZW5kIHlvdSBjYW4gdHJ5IHNldHRpbmcKICogVExTIDEuMyBjaXBoZXIgc3VpdGVzIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCBvcHRpb24uCiAqCiAqCiAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4zLjAgYW5kIGxpYmN1cmwgJmd0Oz0gY1VSTCA3LjYxLjAuIEF2YWlsYWJsZSB3aGVuIGJ1aWx0IHdpdGggT3BlblNTTCAmZ3Q7PSAxLjEuMS4KICoKICoKICoKICogQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRICiAqCiAqIEVuYWJsZXMgdGhlIHVzZSBvZiBVbml4IGRvbWFpbiBzb2NrZXRzIGFzIGNvbm5lY3Rpb24gZW5kcG9pbnQgYW5kCiAqIHNldHMgdGhlIHBhdGggdG8gdGhlIGdpdmVuIHN0cmluZy4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjQwLjAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNy4wLjcuCiAqCiAqCiAqCiAqIENVUkxPUFRfVVJMCiAqCiAqIFRoZSBVUkwgdG8gZmV0Y2guIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdoZW4gaW5pdGlhbGl6aW5nIGEKICogc2Vzc2lvbiB3aXRoIGN1cmxfaW5pdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VU0VSQUdFTlQKICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSAiVXNlci1BZ2VudDogIiBoZWFkZXIgdG8gYmUKICogdXNlZCBpbiBhIEhUVFAgcmVxdWVzdC4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9VU0VSTkFNRQogKgogKiBUaGUgdXNlciBuYW1lIHRvIHVzZSBpbiBhdXRoZW50aWNhdGlvbi4KICoKICoKICogQWRkZWQgaW4gY1VSTCA3LjE5LjEuIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS41LjAuCiAqCiAqCiAqCiAqIENVUkxPUFRfVVNFUlBXRAogKgogKiBBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3JtYXR0ZWQgYXMKICogIlt1c2VybmFtZV06W3Bhc3N3b3JkXSIgdG8gdXNlIGZvciB0aGUKICogY29ubmVjdGlvbi4KICoKICoKICoKICoKICoKICogQ1VSTE9QVF9YT0FVVEgyX0JFQVJFUgogKgogKiBTcGVjaWZpZXMgdGhlIE9BdXRoIDIuMCBhY2Nlc3MgdG9rZW4uCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zMy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKgogKgogKgogKiBBIGN1c3RvbSByZXF1ZXN0IG1ldGhvZCB0byB1c2UgaW5zdGVhZCBvZgogKiAiR0VUIiBvciAiSEVBRCIgd2hlbiBkb2luZwogKiBhIEhUVFAgcmVxdWVzdC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRvaW5nCiAqICJERUxFVEUiIG9yIG90aGVyLCBtb3JlIG9ic2N1cmUgSFRUUCByZXF1ZXN0cy4KICogVmFsaWQgdmFsdWVzIGFyZSB0aGluZ3MgbGlrZSAiR0VUIiwKICogIlBPU1QiLCAiQ09OTkVDVCIgYW5kIHNvIG9uOwogKiBpLmUuIERvIG5vdCBlbnRlciBhIHdob2xlIEhUVFAgcmVxdWVzdCBsaW5lIGhlcmUuIEZvciBpbnN0YW5jZSwKICogZW50ZXJpbmcgIkdFVCAvaW5kZXguaHRtbCBIVFRQLzEuMFxyXG5cclxuIgogKiB3b3VsZCBiZSBpbmNvcnJlY3QuCiAqCiAqCiAqIERvbid0IGRvIHRoaXMgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSBjdXN0b20KICogcmVxdWVzdCBtZXRob2QgZmlyc3QuCiAqCiAqCiAqCiAqIERvbid0IGRvIHRoaXMgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSBjdXN0b20KICogcmVxdWVzdCBtZXRob2QgZmlyc3QuCiAqCiAqIFRoZSBkZWZhdWx0IHByb3RvY29sIHRvIHVzZSBpZiB0aGUgVVJMIGlzIG1pc3NpbmcgYSBzY2hlbWUgbmFtZS4KICoKICogU2V0IHRoZSBuYW1lIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGF0IHRoZSBETlMgcmVzb2x2ZXIgc2hvdWxkIGJpbmQgdG8uCiAqIFRoaXMgbXVzdCBiZSBhbiBpbnRlcmZhY2UgbmFtZSAobm90IGFuIGFkZHJlc3MpLgogKgogKiBTZXQgdGhlIGxvY2FsIElQdjQgYWRkcmVzcyB0aGF0IHRoZSByZXNvbHZlciBzaG91bGQgYmluZCB0by4gVGhlIGFyZ3VtZW50CiAqIHNob3VsZCBjb250YWluIGEgc2luZ2xlIG51bWVyaWNhbCBJUHY0IGFkZHJlc3MgYXMgYSBzdHJpbmcuCiAqCiAqIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRoYXQgdGhlIHJlc29sdmVyIHNob3VsZCBiaW5kIHRvLiBUaGUgYXJndW1lbnQKICogc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUgbnVtZXJpY2FsIElQdjYgYWRkcmVzcyBhcyBhIHN0cmluZy4KICoKICogU2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSBhdXRoZW50aWNhdGlvbiBmb3IgVExTIHByb3ZpZGVzIG11dHVhbCBhdXRoZW50aWNhdGlvbgogKiBpZiBib3RoIHNpZGVzIGhhdmUgYSBzaGFyZWQgc2VjcmV0LiBUbyB1c2UgVExTLVNSUCwgeW91IG11c3QgYWxzbyBzZXQgdGhlCiAqIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSBhbmQKICogQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEIG9wdGlvbnMuCiAqCiAqIFRoZSBzZWNyZXQgcGFzc3dvcmQgbmVlZGVkIHRvIHVzZSB0aGUgcHJpdmF0ZSBTU0wga2V5IHNwZWNpZmllZCBpbgogKiBDVVJMT1BUX1NTTEtFWS4KICoKICoKICogU2luY2UgdGhpcyBvcHRpb24gY29udGFpbnMgYSBzZW5zaXRpdmUgcGFzc3dvcmQsIHJlbWVtYmVyIHRvIGtlZXAKICogdGhlIFBIUCBzY3JpcHQgaXQgaXMgY29udGFpbmVkIHdpdGhpbiBzYWZlLgogKgogKgogKgogKiBTaW5jZSB0aGlzIG9wdGlvbiBjb250YWlucyBhIHNlbnNpdGl2ZSBwYXNzd29yZCwgcmVtZW1iZXIgdG8ga2VlcAogKiB0aGUgUEhQIHNjcmlwdCBpdCBpcyBjb250YWluZWQgd2l0aGluIHNhZmUuCiAqCiAqIHZhbHVlIHNob3VsZCBiZSBhbiBhcnJheSBmb3IgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXMgb2YgdGhlIG9wdGlvbiBwYXJhbWV0ZXI6CiAqCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBTZXQgdmFsdWUgdG8KICogTm90ZXMKICoKICoKICoKICoKICogQ1VSTE9QVF9DT05ORUNUX1RPCiAqCiAqIENvbm5lY3QgdG8gYSBzcGVjaWZpYyBob3N0IGFuZCBwb3J0IGluc3RlYWQgb2YgdGhlIFVSTCdzIGhvc3QgYW5kIHBvcnQuCiAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmb3JtYXQKICogSE9TVDpQT1JUOkNPTk5FQ1QtVE8tSE9TVDpDT05ORUNULVRPLVBPUlQuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy40OS4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX0hUVFAyMDBBTElBU0VTCiAqCiAqIEFuIGFycmF5IG9mIEhUVFAgMjAwIHJlc3BvbnNlcyB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcyB2YWxpZAogKiByZXNwb25zZXMgYW5kIG5vdCBhcyBlcnJvcnMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4xMC4zLgogKgogKgogKgogKiBDVVJMT1BUX0hUVFBIRUFERVIKICoKICogQW4gYXJyYXkgb2YgSFRUUCBoZWFkZXIgZmllbGRzIHRvIHNldCwgaW4gdGhlIGZvcm1hdAogKgogKiBhcnJheSgnQ29udGVudC10eXBlOiB0ZXh0L3BsYWluJywgJ0NvbnRlbnQtbGVuZ3RoOiAxMDAnKQogKgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1BPU1RRVU9URQogKgogKiBBbiBhcnJheSBvZiBGVFAgY29tbWFuZHMgdG8gZXhlY3V0ZSBvbiB0aGUgc2VydmVyIGFmdGVyIHRoZSBGVFAKICogcmVxdWVzdCBoYXMgYmVlbiBwZXJmb3JtZWQuCiAqCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfUFJPWFlIRUFERVIKICoKICogQW4gYXJyYXkgb2YgY3VzdG9tIEhUVFAgaGVhZGVycyB0byBwYXNzIHRvIHByb3hpZXMuCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4zNy4wLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMC43LgogKgogKgogKgogKiBDVVJMT1BUX1FVT1RFCiAqCiAqIEFuIGFycmF5IG9mIEZUUCBjb21tYW5kcyB0byBleGVjdXRlIG9uIHRoZSBzZXJ2ZXIgcHJpb3IgdG8gdGhlIEZUUAogKiByZXF1ZXN0LgogKgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFU09MVkUKICoKICogUHJvdmlkZSBhIGN1c3RvbSBhZGRyZXNzIGZvciBhIHNwZWNpZmljIGhvc3QgYW5kIHBvcnQgcGFpci4gQW4gYXJyYXkKICogb2YgaG9zdG5hbWUsIHBvcnQsIGFuZCBJUCBhZGRyZXNzIHN0cmluZ3MsIGVhY2ggZWxlbWVudCBzZXBhcmF0ZWQgYnkKICogYSBjb2xvbi4gSW4gdGhlIGZvcm1hdDoKICoKICogYXJyYXkoImV4YW1wbGUuY29tOjgwOjEyNy4wLjAuMSIpCiAqCiAqCiAqCiAqIEFkZGVkIGluIGNVUkwgNy4yMS4zLiBBdmFpbGFibGUgc2luY2UgUEhQIDUuNS4wLgogKgogKgogKgogKgogKgogKgogKiB2YWx1ZSBzaG91bGQgYmUgYSBzdHJlYW0gcmVzb3VyY2UgKHVzaW5nCiAqIGZvcGVuLCBmb3IgZXhhbXBsZSkgZm9yIHRoZSBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZQogKiBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfRklMRQogKgogKiBUaGUgZmlsZSB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgd3JpdHRlbiB0by4gVGhlIGRlZmF1bHQKICogaXMgU1RET1VUICh0aGUgYnJvd3NlciB3aW5kb3cpLgogKgogKgogKgogKiBDVVJMT1BUX0lORklMRQogKgogKiBUaGUgZmlsZSB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgcmVhZCBmcm9tIHdoZW4gdXBsb2FkaW5nLgogKgogKgogKgogKiBDVVJMT1BUX1NUREVSUgogKgogKiBBbiBhbHRlcm5hdGl2ZSBsb2NhdGlvbiB0byBvdXRwdXQgZXJyb3JzIHRvIGluc3RlYWQgb2YKICogU1RERVJSLgogKgogKgogKgogKiBDVVJMT1BUX1dSSVRFSEVBREVSCiAqCiAqIFRoZSBmaWxlIHRoYXQgdGhlIGhlYWRlciBwYXJ0IG9mIHRoZSB0cmFuc2ZlciBpcyB3cml0dGVuIHRvLgogKgogKgogKgogKgogKgogKgogKiB2YWx1ZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSB2YWxpZCBmdW5jdGlvbiBvciBhIENsb3N1cmUKICogZm9yIHRoZSBmb2xsb3dpbmcgdmFsdWVzIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVyOgogKgogKgogKgogKgogKiBPcHRpb24KICogU2V0IHZhbHVlIHRvCiAqCiAqCiAqCiAqCiAqIENVUkxPUFRfSEVBREVSRlVOQ1RJT04KICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgdHdvIHBhcmFtZXRlcnMuCiAqIFRoZSBmaXJzdCBpcyB0aGUgY1VSTCByZXNvdXJjZSwgdGhlIHNlY29uZCBpcyBhCiAqIHN0cmluZyB3aXRoIHRoZSBoZWFkZXIgZGF0YSB0byBiZSB3cml0dGVuLiBUaGUgaGVhZGVyIGRhdGEgbXVzdAogKiBiZSB3cml0dGVuIGJ5IHRoaXMgY2FsbGJhY2suIFJldHVybiB0aGUgbnVtYmVyIG9mCiAqIGJ5dGVzIHdyaXR0ZW4uCiAqCiAqCiAqCiAqIENVUkxPUFRfUEFTU1dERlVOQ1RJT04KICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgdGhyZWUgcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCB0aGUgc2Vjb25kIGlzIGEKICogc3RyaW5nIGNvbnRhaW5pbmcgYSBwYXNzd29yZCBwcm9tcHQsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIG1heGltdW0KICogcGFzc3dvcmQgbGVuZ3RoLiBSZXR1cm4gdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXNzd29yZC4KICoKICoKICoKICogQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OCiAqCiAqCiAqIEEgY2FsbGJhY2sgYWNjZXB0aW5nIGZpdmUgcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCB0aGUgc2Vjb25kIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YKICogYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgZG93bmxvYWRlZCBpbiB0aGlzIHRyYW5zZmVyLCB0aGUgdGhpcmQgaXMKICogdGhlIG51bWJlciBvZiBieXRlcyBkb3dubG9hZGVkIHNvIGZhciwgdGhlIGZvdXJ0aCBpcyB0aGUgdG90YWwKICogbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIHVwbG9hZGVkIGluIHRoaXMgdHJhbnNmZXIsIGFuZCB0aGUKICogZmlmdGggaXMgdGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuCiAqCiAqCiAqCiAqIFRoZSBjYWxsYmFjayBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBDVVJMT1BUX05PUFJPR1JFU1MKICogb3B0aW9uIGlzIHNldCB0byBGQUxTRS4KICoKICoKICoKICogUmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgdG8gYWJvcnQgdGhlIHRyYW5zZmVyLiBJbiB3aGljaCBjYXNlLCB0aGUKICogdHJhbnNmZXIgd2lsbCBzZXQgYSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLCiAqIGVycm9yLgogKgogKgogKgogKgogKiBDVVJMT1BUX1JFQURGVU5DVElPTgogKgogKiBBIGNhbGxiYWNrIGFjY2VwdGluZyB0aHJlZSBwYXJhbWV0ZXJzLgogKiBUaGUgZmlyc3QgaXMgdGhlIGNVUkwgcmVzb3VyY2UsIHRoZSBzZWNvbmQgaXMgYQogKiBzdHJlYW0gcmVzb3VyY2UgcHJvdmlkZWQgdG8gY1VSTCB0aHJvdWdoIHRoZSBvcHRpb24KICogQ1VSTE9QVF9JTkZJTEUsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIG1heGltdW0KICogYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVhZC4gVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nCiAqIHdpdGggYSBsZW5ndGggZXF1YWwgb3Igc21hbGxlciB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSByZXF1ZXN0ZWQsCiAqIHR5cGljYWxseSBieSByZWFkaW5nIGl0IGZyb20gdGhlIHBhc3NlZCBzdHJlYW0gcmVzb3VyY2UuIEl0IHNob3VsZAogKiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHRvIHNpZ25hbCBFT0YuCiAqCiAqCiAqCiAqIENVUkxPUFRfV1JJVEVGVU5DVElPTgogKgogKiBBIGNhbGxiYWNrIGFjY2VwdGluZyB0d28gcGFyYW1ldGVycy4KICogVGhlIGZpcnN0IGlzIHRoZSBjVVJMIHJlc291cmNlLCBhbmQgdGhlIHNlY29uZCBpcyBhCiAqIHN0cmluZyB3aXRoIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uIFRoZSBkYXRhIG11c3QgYmUgc2F2ZWQgYnkKICogdGhpcyBjYWxsYmFjay4gSXQgbXVzdCByZXR1cm4gdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyB3cml0dGVuCiAqIG9yIHRoZSB0cmFuc2ZlciB3aWxsIGJlIGFib3J0ZWQgd2l0aCBhbiBlcnJvci4KICoKICoKICoKICoKICoKICoKICogQSBjYWxsYmFjayBhY2NlcHRpbmcgZml2ZSBwYXJhbWV0ZXJzLgogKiBUaGUgZmlyc3QgaXMgdGhlIGNVUkwgcmVzb3VyY2UsIHRoZSBzZWNvbmQgaXMgdGhlIHRvdGFsIG51bWJlciBvZgogKiBieXRlcyBleHBlY3RlZCB0byBiZSBkb3dubG9hZGVkIGluIHRoaXMgdHJhbnNmZXIsIHRoZSB0aGlyZCBpcwogKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQgc28gZmFyLCB0aGUgZm91cnRoIGlzIHRoZSB0b3RhbAogKiBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgdXBsb2FkZWQgaW4gdGhpcyB0cmFuc2ZlciwgYW5kIHRoZQogKiBmaWZ0aCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVwbG9hZGVkIHNvIGZhci4KICoKICogVGhlIGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIENVUkxPUFRfTk9QUk9HUkVTUwogKiBvcHRpb24gaXMgc2V0IHRvIEZBTFNFLgogKgogKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0byBhYm9ydCB0aGUgdHJhbnNmZXIuIEluIHdoaWNoIGNhc2UsIHRoZQogKiB0cmFuc2ZlciB3aWxsIHNldCBhIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0sKICogZXJyb3IuCiAqCiAqIE90aGVyIHZhbHVlczoKICoKICoKICoKICoKICogT3B0aW9uCiAqIFNldCB2YWx1ZSB0bwogKgogKgogKgogKgogKiBDVVJMT1BUX1NIQVJFCiAqCiAqIEEgcmVzdWx0IG9mIGN1cmxfc2hhcmVfaW5pdC4gTWFrZXMgdGhlIGNVUkwKICogaGFuZGxlIHRvIHVzZSB0aGUgZGF0YSBmcm9tIHRoZSBzaGFyZWQgaGFuZGxlLgogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEN1cmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGN1cmxfc2V0b3B0KCRjaCwgaW50ICRvcHRpb24sICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NldG9wdCgkY2gsICRvcHRpb24sICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBzaGFyZSBjdXJsIGVycm9yIG51bWJlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzaCBBIGNVUkwgc2hhcmUgaGFuZGxlIHJldHVybmVkIGJ5IGN1cmxfc2hhcmVfaW5pdC4KICogQHJldHVybiBpbnQgUmV0dXJucyBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGxhc3Qgc2hhcmUgY3VybCBlcnJvciBudW1iZXIuCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9zaGFyZV9lcnJubygkc2gpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NoYXJlX2Vycm5vKCRzaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgYW4gb3B0aW9uIG9uIHRoZSBnaXZlbiBjVVJMIHNoYXJlIGhhbmRsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzaCBBIGNVUkwgc2hhcmUgaGFuZGxlIHJldHVybmVkIGJ5IGN1cmxfc2hhcmVfaW5pdC4KICogQHBhcmFtIGludCAkb3B0aW9uCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDVVJMU0hPUFRfU0hBUkUKICoKICogU3BlY2lmaWVzIGEgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNoYXJlZC4KICoKICoKICoKICogQ1VSTFNIT1BUX1VOU0hBUkUKICoKICogU3BlY2lmaWVzIGEgdHlwZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSBubyBsb25nZXIgc2hhcmVkLgogKgogKgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKgogKgogKgogKiBWYWx1ZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9DT09LSUUKICoKICogU2hhcmVzIGNvb2tpZSBkYXRhLgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9ETlMKICoKICogU2hhcmVzIEROUyBjYWNoZS4gTm90ZSB0aGF0IHdoZW4geW91IHVzZSBjVVJMIG11bHRpIGhhbmRsZXMsCiAqIGFsbCBoYW5kbGVzIGFkZGVkIHRvIHRoZSBzYW1lIG11bHRpIGhhbmRsZSB3aWxsIHNoYXJlIEROUyBjYWNoZQogKiBieSBkZWZhdWx0LgogKgogKgogKgogKiBDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTgogKgogKiBTaGFyZXMgU1NMIHNlc3Npb24gSURzLCByZWR1Y2luZyB0aGUgdGltZSBzcGVudCBvbiB0aGUgU1NMCiAqIGhhbmRzaGFrZSB3aGVuIHJlY29ubmVjdGluZyB0byB0aGUgc2FtZSBzZXJ2ZXIuIE5vdGUgdGhhdCBTU0wKICogc2Vzc2lvbiBJRHMgYXJlIHJldXNlZCB3aXRoaW4gdGhlIHNhbWUgaGFuZGxlIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgQ3VybEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY3VybF9zaGFyZV9zZXRvcHQoJHNoLCBpbnQgJG9wdGlvbiwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3NoYXJlX3NldG9wdCgkc2gsICRvcHRpb24sICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgdGhlIGdpdmVuIFVSTCBlbmNvZGVkIHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjaCBBIGNVUkwgaGFuZGxlIHJldHVybmVkIGJ5CiAqIGN1cmxfaW5pdC4KICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBVUkwgZW5jb2RlZCBzdHJpbmcgdG8gYmUgZGVjb2RlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBkZWNvZGVkIHN0cmluZy4KICogQHRocm93cyBDdXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjdXJsX3VuZXNjYXBlKCRjaCwgc3RyaW5nICRzdHIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjdXJsX3VuZXNjYXBlKCRjaCwgJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBDdXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tQ3VybFJlc291cmNlKCRjaCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/datetime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xEYXRldGltZUV4Y2VwdGlvbjsKCi8qKgogKiBSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlL3RpbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBGb3JtYXQgYWNjZXB0ZWQgYnkgRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGV0aW1lIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGUvdGltZS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlL3RpbWUuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRhdGVfcGFyc2VfZnJvbV9mb3JtYXQoc3RyaW5nICRmb3JtYXQsIHN0cmluZyAkZGF0ZXRpbWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRhdGVfcGFyc2VfZnJvbV9mb3JtYXQoJGZvcm1hdCwgJGRhdGV0aW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGV0aW1lIERhdGUvdGltZSBpbiBmb3JtYXQgYWNjZXB0ZWQgYnkKICogRGF0ZVRpbWVJbW11dGFibGU6Ol9fY29uc3RydWN0LgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYXJyYXkgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyc2VkIGRhdGUvdGltZQogKiBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlX3BhcnNlKHN0cmluZyAkZGF0ZXRpbWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRhdGVfcGFyc2UoJGRhdGV0aW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBVbml4IHRpbWVzdGFtcC4KICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZSBMYXRpdHVkZSBpbiBkZWdyZWVzLgogKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZSBMb25naXR1ZGUgaW4gZGVncmVlcy4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGFycmF5IGlzIGRldGFpbGVkIGluIHRoZSBmb2xsb3dpbmcgbGlzdDoKICoKICoKICoKICogc3VucmlzZQogKgogKgogKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBzdW5yaXNlICh6ZW5pdGggYW5nbGUgPSA5MMKwMzUnKS4KICoKICoKICoKICoKICogc3Vuc2V0CiAqCiAqCiAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIHN1bnNldCAoemVuaXRoIGFuZ2xlID0gOTDCsDM1JykuCiAqCiAqCiAqCiAqCiAqIHRyYW5zaXQKICoKICoKICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzdW4gaXMgYXQgaXRzIHplbml0aCwgaS5lLiBoYXMgcmVhY2hlZCBpdHMgdG9wbW9zdAogKiBwb2ludC4KICoKICoKICoKICoKICogY2l2aWxfdHdpbGlnaHRfYmVnaW4KICoKICoKICogVGhlIHN0YXJ0IG9mIHRoZSBjaXZpbCBkYXduICh6ZW5pdGggYW5nbGUgPSA5NsKwKS4gSXQgZW5kcyBhdCBzdW5yaXNlLgogKgogKgogKgogKgogKiBjaXZpbF90d2lsaWdodF9lbmQKICoKICoKICogVGhlIGVuZCBvZiB0aGUgY2l2aWwgZHVzayAoemVuaXRoIGFuZ2xlID0gOTbCsCkuIEl0IHN0YXJ0cyBhdCBzdW5zZXQuCiAqCiAqCiAqCiAqCiAqIG5hdXRpY2FsX3R3aWxpZ2h0X2JlZ2luCiAqCiAqCiAqIFRoZSBzdGFydCBvZiB0aGUgbmF1dGljYWwgZGF3biAoemVuaXRoIGFuZ2xlID0gMTAywrApLiBJdCBlbmRzIGF0CiAqIGNpdmlsX3R3aWxpZ2h0X2JlZ2luLgogKgogKgogKgogKgogKiBuYXV0aWNhbF90d2lsaWdodF9lbmQKICoKICoKICogVGhlIGVuZCBvZiB0aGUgbmF1dGljYWwgZHVzayAoemVuaXRoIGFuZ2xlID0gMTAywrApLiBJdCBzdGFydHMgYXQKICogY2l2aWxfdHdpbGlnaHRfZW5kLgogKgogKgogKgogKgogKiBhc3Ryb25vbWljYWxfdHdpbGlnaHRfYmVnaW4KICoKICoKICogVGhlIHN0YXJ0IG9mIHRoZSBhc3Ryb25vbWljYWwgZGF3biAoemVuaXRoIGFuZ2xlID0gMTA4wrApLiBJdCBlbmRzIGF0CiAqIG5hdXRpY2FsX3R3aWxpZ2h0X2JlZ2luLgogKgogKgogKgogKgogKiBhc3Ryb25vbWljYWxfdHdpbGlnaHRfZW5kCiAqCiAqCiAqIFRoZSBlbmQgb2YgdGhlIGFzdHJvbm9taWNhbCBkdXNrICh6ZW5pdGggYW5nbGUgPSAxMDjCsCkuIEl0IHN0YXJ0cyBhdAogKiBuYXV0aWNhbF90d2lsaWdodF9lbmQuCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSB2YWx1ZXMgb2YgdGhlIGFycmF5IGVsZW1lbnRzIGFyZSBlaXRoZXIgVU5JWCB0aW1lc3RhbXBzLCBGQUxTRSBpZiB0aGUKICogc3VuIGlzIGJlbG93IHRoZSByZXNwZWN0aXZlIHplbml0aCBmb3IgdGhlIHdob2xlIGRheSwgb3IgVFJVRSBpZiB0aGUgc3VuIGlzCiAqIGFib3ZlIHRoZSByZXNwZWN0aXZlIHplbml0aCBmb3IgdGhlIHdob2xlIGRheS4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGF0ZV9zdW5faW5mbyhpbnQgJHRpbWVzdGFtcCwgZmxvYXQgJGxhdGl0dWRlLCBmbG9hdCAkbG9uZ2l0dWRlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYXRlX3N1bl9pbmZvKCR0aW1lc3RhbXAsICRsYXRpdHVkZSwgJGxvbmdpdHVkZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBkYXRlX3N1bnJpc2UgcmV0dXJucyB0aGUgc3VucmlzZSB0aW1lIGZvciBhIGdpdmVuCiAqIGRheSAoc3BlY2lmaWVkIGFzIGEgdGltZXN0YW1wKSBhbmQgbG9jYXRpb24uCiAqCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgdGltZXN0YW1wIG9mIHRoZSBkYXkgZnJvbSB3aGljaCB0aGUgc3VucmlzZQogKiB0aW1lIGlzIHRha2VuLgogKiBAcGFyYW0gaW50ICRyZXR1cm5Gb3JtYXQKICogcmV0dXJuRm9ybWF0IGNvbnN0YW50cwogKgogKgogKgogKiBjb25zdGFudAogKiBkZXNjcmlwdGlvbgogKiBleGFtcGxlCiAqCiAqCiAqCiAqCiAqIFNVTkZVTkNTX1JFVF9TVFJJTkcKICogcmV0dXJucyB0aGUgcmVzdWx0IGFzIHN0cmluZwogKiAxNjo0NgogKgogKgogKiBTVU5GVU5DU19SRVRfRE9VQkxFCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBmbG9hdAogKiAxNi43ODI0MzEzMgogKgogKgogKiBTVU5GVU5DU19SRVRfVElNRVNUQU1QCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBpbnRlZ2VyICh0aW1lc3RhbXApCiAqIDEwOTUwMzQ2MDYKICoKICoKICoKICoKICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZSBEZWZhdWx0cyB0byBOb3J0aCwgcGFzcyBpbiBhIG5lZ2F0aXZlIHZhbHVlIGZvciBTb3V0aC4KICogU2VlIGFsc286IGRhdGUuZGVmYXVsdF9sYXRpdHVkZQogKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZSBEZWZhdWx0cyB0byBFYXN0LCBwYXNzIGluIGEgbmVnYXRpdmUgdmFsdWUgZm9yIFdlc3QuCiAqIFNlZSBhbHNvOiBkYXRlLmRlZmF1bHRfbG9uZ2l0dWRlCiAqIEBwYXJhbSBmbG9hdCAkemVuaXRoIHplbml0aCBpcyB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgY2VudGVyIG9mIHRoZSBzdW4KICogYW5kIGEgbGluZSBwZXJwZW5kaWN1bGFyIHRvIGVhcnRoJ3Mgc3VyZmFjZS4gSXQgZGVmYXVsdHMgdG8KICogZGF0ZS5zdW5yaXNlX3plbml0aAogKgogKiBDb21tb24gemVuaXRoIGFuZ2xlcwogKgogKgogKgogKiBBbmdsZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiA5MMKwNTAnCiAqIFN1bnJpc2U6IHRoZSBwb2ludCB3aGVyZSB0aGUgc3VuIGJlY29tZXMgdmlzaWJsZS4KICoKICoKICogOTbCsAogKiBDaXZpbCB0d2lsaWdodDogY29udmVudGlvbmFsbHkgdXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBkYXduLgogKgogKgogKiAxMDLCsAogKiBOYXV0aWNhbCB0d2lsaWdodDogdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBob3Jpem9uIHN0YXJ0cyBiZWluZyB2aXNpYmxlIGF0IHNlYS4KICoKICoKICogMTA4wrAKICogQXN0cm9ub21pY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIHN1biBzdGFydHMgYmVpbmcgdGhlIHNvdXJjZSBvZiBhbnkgaWxsdW1pbmF0aW9uLgogKgogKgogKgogKgogKiBAcGFyYW0gZmxvYXQgJHV0Y09mZnNldCBTcGVjaWZpZWQgaW4gaG91cnMuCiAqIFRoZSB1dGNPZmZzZXQgaXMgaWdub3JlZCwgaWYKICogcmV0dXJuRm9ybWF0IGlzCiAqIFNVTkZVTkNTX1JFVF9USU1FU1RBTVAuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgc3VucmlzZSB0aW1lIGluIGEgc3BlY2lmaWVkIHJldHVybkZvcm1hdCBvbgogKiBzdWNjZXNzLiBPbmUgcG90ZW50aWFsIHJlYXNvbiBmb3IgZmFpbHVyZSBpcyB0aGF0IHRoZQogKiBzdW4gZG9lcyBub3QgcmlzZSBhdCBhbGwsIHdoaWNoIGhhcHBlbnMgaW5zaWRlIHRoZSBwb2xhciBjaXJjbGVzIGZvciBwYXJ0IG9mCiAqIHRoZSB5ZWFyLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlX3N1bnJpc2UoaW50ICR0aW1lc3RhbXAsIGludCAkcmV0dXJuRm9ybWF0ID0gU1VORlVOQ1NfUkVUX1NUUklORywgZmxvYXQgJGxhdGl0dWRlID0gbnVsbCwgZmxvYXQgJGxvbmdpdHVkZSA9IG51bGwsIGZsb2F0ICR6ZW5pdGggPSBudWxsLCBmbG9hdCAkdXRjT2Zmc2V0ID0gMCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR1dGNPZmZzZXQgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgsICR1dGNPZmZzZXQpOwogICAgfSBlbHNlaWYgKCR6ZW5pdGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgpOwogICAgfSBlbHNlaWYgKCRsb25naXR1ZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3VucmlzZSgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUpOwogICAgfSBlbHNlaWYgKCRsYXRpdHVkZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5yaXNlKCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5yaXNlKCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZGF0ZV9zdW5zZXQgcmV0dXJucyB0aGUgc3Vuc2V0IHRpbWUgZm9yIGEgZ2l2ZW4KICogZGF5IChzcGVjaWZpZWQgYXMgYSB0aW1lc3RhbXApIGFuZCBsb2NhdGlvbi4KICoKICogQHBhcmFtIGludCAkdGltZXN0YW1wIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGRheSBmcm9tIHdoaWNoIHRoZSBzdW5zZXQKICogdGltZSBpcyB0YWtlbi4KICogQHBhcmFtIGludCAkcmV0dXJuRm9ybWF0CiAqIHJldHVybkZvcm1hdCBjb25zdGFudHMKICoKICoKICoKICogY29uc3RhbnQKICogZGVzY3JpcHRpb24KICogZXhhbXBsZQogKgogKgogKgogKgogKiBTVU5GVU5DU19SRVRfU1RSSU5HCiAqIHJldHVybnMgdGhlIHJlc3VsdCBhcyBzdHJpbmcKICogMTY6NDYKICoKICoKICogU1VORlVOQ1NfUkVUX0RPVUJMRQogKiByZXR1cm5zIHRoZSByZXN1bHQgYXMgZmxvYXQKICogMTYuNzgyNDMxMzIKICoKICoKICogU1VORlVOQ1NfUkVUX1RJTUVTVEFNUAogKiByZXR1cm5zIHRoZSByZXN1bHQgYXMgaW50ZWdlciAodGltZXN0YW1wKQogKiAxMDk1MDM0NjA2CiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBmbG9hdCAkbGF0aXR1ZGUgRGVmYXVsdHMgdG8gTm9ydGgsIHBhc3MgaW4gYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgU291dGguCiAqIFNlZSBhbHNvOiBkYXRlLmRlZmF1bHRfbGF0aXR1ZGUKICogQHBhcmFtIGZsb2F0ICRsb25naXR1ZGUgRGVmYXVsdHMgdG8gRWFzdCwgcGFzcyBpbiBhIG5lZ2F0aXZlIHZhbHVlIGZvciBXZXN0LgogKiBTZWUgYWxzbzogZGF0ZS5kZWZhdWx0X2xvbmdpdHVkZQogKiBAcGFyYW0gZmxvYXQgJHplbml0aCB6ZW5pdGggaXMgdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGNlbnRlciBvZiB0aGUgc3VuCiAqIGFuZCBhIGxpbmUgcGVycGVuZGljdWxhciB0byBlYXJ0aCdzIHN1cmZhY2UuIEl0IGRlZmF1bHRzIHRvCiAqIGRhdGUuc3Vuc2V0X3plbml0aAogKgogKiBDb21tb24gemVuaXRoIGFuZ2xlcwogKgogKgogKgogKiBBbmdsZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiA5MMKwNTAnCiAqIFN1bnNldDogdGhlIHBvaW50IHdoZXJlIHRoZSBzdW4gYmVjb21lcyBpbnZpc2libGUuCiAqCiAqCiAqIDk2wrAKICogQ2l2aWwgdHdpbGlnaHQ6IGNvbnZlbnRpb25hbGx5IHVzZWQgdG8gc2lnbmlmeSB0aGUgZW5kIG9mIGR1c2suCiAqCiAqCiAqIDEwMsKwCiAqIE5hdXRpY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIGhvcml6b24gZW5kcyBiZWluZyB2aXNpYmxlIGF0IHNlYS4KICoKICoKICogMTA4wrAKICogQXN0cm9ub21pY2FsIHR3aWxpZ2h0OiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIHN1biBlbmRzIGJlaW5nIHRoZSBzb3VyY2Ugb2YgYW55IGlsbHVtaW5hdGlvbi4KICoKICoKICoKICoKICogQHBhcmFtIGZsb2F0ICR1dGNPZmZzZXQgU3BlY2lmaWVkIGluIGhvdXJzLgogKiBUaGUgdXRjT2Zmc2V0IGlzIGlnbm9yZWQsIGlmCiAqIHJldHVybkZvcm1hdCBpcwogKiBTVU5GVU5DU19SRVRfVElNRVNUQU1QLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHN1bnNldCB0aW1lIGluIGEgc3BlY2lmaWVkIHJldHVybkZvcm1hdCBvbgogKiBzdWNjZXNzLiBPbmUgcG90ZW50aWFsIHJlYXNvbiBmb3IgZmFpbHVyZSBpcyB0aGF0IHRoZQogKiBzdW4gZG9lcyBub3Qgc2V0IGF0IGFsbCwgd2hpY2ggaGFwcGVucyBpbnNpZGUgdGhlIHBvbGFyIGNpcmNsZXMgZm9yIHBhcnQgb2YKICogdGhlIHllYXIuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRhdGVfc3Vuc2V0KGludCAkdGltZXN0YW1wLCBpbnQgJHJldHVybkZvcm1hdCA9IFNVTkZVTkNTX1JFVF9TVFJJTkcsIGZsb2F0ICRsYXRpdHVkZSA9IG51bGwsIGZsb2F0ICRsb25naXR1ZGUgPSBudWxsLCBmbG9hdCAkemVuaXRoID0gbnVsbCwgZmxvYXQgJHV0Y09mZnNldCA9IDApCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkdXRjT2Zmc2V0ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxkYXRlX3N1bnNldCgkdGltZXN0YW1wLCAkcmV0dXJuRm9ybWF0LCAkbGF0aXR1ZGUsICRsb25naXR1ZGUsICR6ZW5pdGgsICR1dGNPZmZzZXQpOwogICAgfSBlbHNlaWYgKCR6ZW5pdGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3Vuc2V0KCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSwgJGxvbmdpdHVkZSwgJHplbml0aCk7CiAgICB9IGVsc2VpZiAoJGxvbmdpdHVkZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5zZXQoJHRpbWVzdGFtcCwgJHJldHVybkZvcm1hdCwgJGxhdGl0dWRlLCAkbG9uZ2l0dWRlKTsKICAgIH0gZWxzZWlmICgkbGF0aXR1ZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGVfc3Vuc2V0KCR0aW1lc3RhbXAsICRyZXR1cm5Gb3JtYXQsICRsYXRpdHVkZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZV9zdW5zZXQoJHRpbWVzdGFtcCwgJHJldHVybkZvcm1hdCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGEgc3RyaW5nIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBzdHJpbmcgdXNpbmcgdGhlCiAqIGdpdmVuIGludGVnZXIgdGltZXN0YW1wIG9yIHRoZSBjdXJyZW50IHRpbWUKICogaWYgbm8gdGltZXN0YW1wIGlzIGdpdmVuLiAgSW4gb3RoZXIgd29yZHMsIHRpbWVzdGFtcAogKiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRpbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBGb3JtYXQgYWNjZXB0ZWQgYnkgRGF0ZVRpbWVJbnRlcmZhY2U6OmZvcm1hdC4KICogQHBhcmFtIGludCAkdGltZXN0YW1wIFRoZSBvcHRpb25hbCB0aW1lc3RhbXAgcGFyYW1ldGVyIGlzIGFuCiAqIGludGVnZXIgVW5peCB0aW1lc3RhbXAgdGhhdCBkZWZhdWx0cyB0byB0aGUgY3VycmVudAogKiBsb2NhbCB0aW1lIGlmIGEgdGltZXN0YW1wIGlzIG5vdCBnaXZlbi4gSW4gb3RoZXIKICogd29yZHMsIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgZm9ybWF0dGVkIGRhdGUgc3RyaW5nLiBJZiBhIG5vbi1udW1lcmljIHZhbHVlIGlzIHVzZWQgZm9yCiAqIHRpbWVzdGFtcCwgRkFMU0UgaXMgcmV0dXJuZWQgYW5kIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBlbWl0dGVkLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYXRlKHN0cmluZyAkZm9ybWF0LCBpbnQgJHRpbWVzdGFtcCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0aW1lc3RhbXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRhdGUoJGZvcm1hdCwgJHRpbWVzdGFtcCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGF0ZSgkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIElkZW50aWNhbCB0byB0aGUgZGF0ZSBmdW5jdGlvbiBleGNlcHQgdGhhdAogKiB0aGUgdGltZSByZXR1cm5lZCBpcyBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogKgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0dGVkIGRhdGUgc3RyaW5nLiBTZWUgdGhlIGZvcm1hdHRpbmcKICogb3B0aW9ucyBmb3IgdGhlIGRhdGUgZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgb3B0aW9uYWwgdGltZXN0YW1wIHBhcmFtZXRlciBpcyBhbgogKiBpbnRlZ2VyIFVuaXggdGltZXN0YW1wIHRoYXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQKICogbG9jYWwgdGltZSBpZiBhIHRpbWVzdGFtcCBpcyBub3QgZ2l2ZW4uIEluIG90aGVyCiAqIHdvcmRzLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgdGltZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIGZvcm1hdHRlZCBkYXRlIHN0cmluZy4gSWYgYSBub24tbnVtZXJpYyB2YWx1ZSBpcyB1c2VkIGZvcgogKiB0aW1lc3RhbXAsIEZBTFNFIGlzIHJldHVybmVkIGFuZCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZW1pdHRlZC4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ21kYXRlKHN0cmluZyAkZm9ybWF0LCBpbnQgJHRpbWVzdGFtcCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0aW1lc3RhbXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGdtZGF0ZSgkZm9ybWF0LCAkdGltZXN0YW1wKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbWRhdGUoJGZvcm1hdCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBVbml4IHRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcmd1bWVudHMKICogZ2l2ZW4uIFRoaXMgdGltZXN0YW1wIGlzIGEgbG9uZyBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZgogKiBzZWNvbmRzIGJldHdlZW4gdGhlIFVuaXggRXBvY2ggKEphbnVhcnkgMSAxOTcwIDAwOjAwOjAwIEdNVCkgYW5kIHRoZSB0aW1lCiAqIHNwZWNpZmllZC4KICoKICogQXJndW1lbnRzIG1heSBiZSBsZWZ0IG91dCBpbiBvcmRlciBmcm9tIHJpZ2h0IHRvIGxlZnQ7IGFueQogKiBhcmd1bWVudHMgdGh1cyBvbWl0dGVkIHdpbGwgYmUgc2V0IHRvIHRoZSBjdXJyZW50IHZhbHVlIGFjY29yZGluZwogKiB0byB0aGUgbG9jYWwgZGF0ZSBhbmQgdGltZS4KICoKICogQHBhcmFtIGludCAkaG91ciBUaGUgbnVtYmVyIG9mIHRoZSBob3VyIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZGF5IGRldGVybWluZWQgYnkKICogbW9udGgsIGRheSBhbmQgeWVhci4KICogTmVnYXRpdmUgdmFsdWVzIHJlZmVyZW5jZSB0aGUgaG91ciBiZWZvcmUgbWlkbmlnaHQgb2YgdGhlIGRheSBpbiBxdWVzdGlvbi4KICogVmFsdWVzIGdyZWF0ZXIgdGhhbiAyMyByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIGhvdXIgaW4gdGhlIGZvbGxvd2luZyBkYXkocykuCiAqIEBwYXJhbSBpbnQgJG1pbnV0ZSBUaGUgbnVtYmVyIG9mIHRoZSBtaW51dGUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBob3VyLgogKiBOZWdhdGl2ZSB2YWx1ZXMgcmVmZXJlbmNlIHRoZSBtaW51dGUgaW4gdGhlIHByZXZpb3VzIGhvdXIuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gNTkgcmVmZXJlbmNlIHRoZSBhcHByb3ByaWF0ZSBtaW51dGUgaW4gdGhlIGZvbGxvd2luZyBob3VyKHMpLgogKiBAcGFyYW0gaW50ICRzZWNvbmQgVGhlIG51bWJlciBvZiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgbWludXRlLgogKiBOZWdhdGl2ZSB2YWx1ZXMgcmVmZXJlbmNlIHRoZSBzZWNvbmQgaW4gdGhlIHByZXZpb3VzIG1pbnV0ZS4KICogVmFsdWVzIGdyZWF0ZXIgdGhhbiA1OSByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIHNlY29uZCBpbiB0aGUgZm9sbG93aW5nIG1pbnV0ZShzKS4KICogQHBhcmFtIGludCAkbW9udGggVGhlIG51bWJlciBvZiB0aGUgbW9udGggcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgeWVhci4KICogVmFsdWVzIDEgdG8gMTIgcmVmZXJlbmNlIHRoZSBub3JtYWwgY2FsZW5kYXIgbW9udGhzIG9mIHRoZSB5ZWFyIGluIHF1ZXN0aW9uLgogKiBWYWx1ZXMgbGVzcyB0aGFuIDEgKGluY2x1ZGluZyBuZWdhdGl2ZSB2YWx1ZXMpIHJlZmVyZW5jZSB0aGUgbW9udGhzIGluIHRoZSBwcmV2aW91cyB5ZWFyIGluIHJldmVyc2Ugb3JkZXIsIHNvIDAgaXMgRGVjZW1iZXIsIC0xIGlzIE5vdmVtYmVyLCBldGMuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gMTIgcmVmZXJlbmNlIHRoZSBhcHByb3ByaWF0ZSBtb250aCBpbiB0aGUgZm9sbG93aW5nIHllYXIocykuCiAqIEBwYXJhbSBpbnQgJGRheSBUaGUgbnVtYmVyIG9mIHRoZSBkYXkgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbW9udGguCiAqIFZhbHVlcyAxIHRvIDI4LCAyOSwgMzAgb3IgMzEgKGRlcGVuZGluZyB1cG9uIHRoZSBtb250aCkgcmVmZXJlbmNlIHRoZSBub3JtYWwgZGF5cyBpbiB0aGUgcmVsZXZhbnQgbW9udGguCiAqIFZhbHVlcyBsZXNzIHRoYW4gMSAoaW5jbHVkaW5nIG5lZ2F0aXZlIHZhbHVlcykgcmVmZXJlbmNlIHRoZSBkYXlzIGluIHRoZSBwcmV2aW91cyBtb250aCwgc28gMCBpcyB0aGUgbGFzdCBkYXkgb2YgdGhlIHByZXZpb3VzIG1vbnRoLCAtMSBpcyB0aGUgZGF5IGJlZm9yZSB0aGF0LCBldGMuCiAqIFZhbHVlcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSByZWxldmFudCBtb250aCByZWZlcmVuY2UgdGhlIGFwcHJvcHJpYXRlIGRheSBpbiB0aGUgZm9sbG93aW5nIG1vbnRoKHMpLgogKiBAcGFyYW0gaW50ICR5ZWFyIFRoZSBudW1iZXIgb2YgdGhlIHllYXIsIG1heSBiZSBhIHR3byBvciBmb3VyIGRpZ2l0IHZhbHVlLAogKiB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAtNjkgbWFwcGluZyB0byAyMDAwLTIwNjkgYW5kIDcwLTEwMCB0bwogKiAxOTcwLTIwMDAuIE9uIHN5c3RlbXMgd2hlcmUgdGltZV90IGlzIGEgMzJiaXQgc2lnbmVkIGludGVnZXIsIGFzCiAqIG1vc3QgY29tbW9uIHRvZGF5LCB0aGUgdmFsaWQgcmFuZ2UgZm9yIHllYXIKICogaXMgc29tZXdoZXJlIGJldHdlZW4gMTkwMSBhbmQgMjAzOC4gSG93ZXZlciwgYmVmb3JlIFBIUCA1LjEuMCB0aGlzCiAqIHJhbmdlIHdhcyBsaW1pdGVkIGZyb20gMTk3MCB0byAyMDM4IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBXaW5kb3dzKS4KICogQHJldHVybiBpbnQgbWt0aW1lIHJldHVybnMgdGhlIFVuaXggdGltZXN0YW1wIG9mIHRoZSBhcmd1bWVudHMKICogZ2l2ZW4uCiAqIElmIHRoZSBhcmd1bWVudHMgYXJlIGludmFsaWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIChiZWZvcmUgUEhQIDUuMQogKiBpdCByZXR1cm5lZCAtMSkuCiAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1rdGltZShpbnQgJGhvdXIgPSBudWxsLCBpbnQgJG1pbnV0ZSA9IG51bGwsIGludCAkc2Vjb25kID0gbnVsbCwgaW50ICRtb250aCA9IG51bGwsIGludCAkZGF5ID0gbnVsbCwgaW50ICR5ZWFyID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHllYXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCwgJG1vbnRoLCAkZGF5LCAkeWVhcik7CiAgICB9IGVsc2VpZiAoJGRheSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kLCAkbW9udGgsICRkYXkpOwogICAgfSBlbHNlaWYgKCRtb250aCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kLCAkbW9udGgpOwogICAgfSBlbHNlaWYgKCRzZWNvbmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1rdGltZSgkaG91ciwgJG1pbnV0ZSwgJHNlY29uZCk7CiAgICB9IGVsc2VpZiAoJG1pbnV0ZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyLCAkbWludXRlKTsKICAgIH0gZWxzZWlmICgkaG91ciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWt0aW1lKCRob3VyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxta3RpbWUoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cnB0aW1lIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUKICogZGF0ZSBwYXJzZWQuCiAqCiAqIE1vbnRoIGFuZCB3ZWVrZGF5IG5hbWVzIGFuZCBvdGhlciBsYW5ndWFnZSBkZXBlbmRlbnQgc3RyaW5ncyByZXNwZWN0IHRoZQogKiBjdXJyZW50IGxvY2FsZSBzZXQgd2l0aCBzZXRsb2NhbGUgKExDX1RJTUUpLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRlIFRoZSBzdHJpbmcgdG8gcGFyc2UgKGUuZy4gcmV0dXJuZWQgZnJvbSBzdHJmdGltZSkuCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBUaGUgZm9ybWF0IHVzZWQgaW4gZGF0ZSAoZS5nLiB0aGUgc2FtZSBhcwogKiB1c2VkIGluIHN0cmZ0aW1lKS4gTm90ZSB0aGF0IHNvbWUgb2YgdGhlIGZvcm1hdAogKiBvcHRpb25zIGF2YWlsYWJsZSB0byBzdHJmdGltZSBtYXkgbm90IGhhdmUgYW55CiAqIGVmZmVjdCB3aXRoaW4gc3RycHRpbWU7IHRoZSBleGFjdCBzdWJzZXQgdGhhdCBhcmUKICogc3VwcG9ydGVkIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgQyBsaWJyYXJ5IGluCiAqIHVzZS4KICoKICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvcHRpb25zLCByZWFkIHRoZQogKiBzdHJmdGltZSBwYWdlLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkuCiAqCiAqCiAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgaW4gdGhlIGFycmF5CiAqCiAqCiAqCiAqIHBhcmFtZXRlcnMKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogInRtX3NlYyIKICogU2Vjb25kcyBhZnRlciB0aGUgbWludXRlICgwLTYxKQogKgogKgogKiAidG1fbWluIgogKiBNaW51dGVzIGFmdGVyIHRoZSBob3VyICgwLTU5KQogKgogKgogKiAidG1faG91ciIKICogSG91ciBzaW5jZSBtaWRuaWdodCAoMC0yMykKICoKICoKICogInRtX21kYXkiCiAqIERheSBvZiB0aGUgbW9udGggKDEtMzEpCiAqCiAqCiAqICJ0bV9tb24iCiAqIE1vbnRocyBzaW5jZSBKYW51YXJ5ICgwLTExKQogKgogKgogKiAidG1feWVhciIKICogWWVhcnMgc2luY2UgMTkwMAogKgogKgogKiAidG1fd2RheSIKICogRGF5cyBzaW5jZSBTdW5kYXkgKDAtNikKICoKICoKICogInRtX3lkYXkiCiAqIERheXMgc2luY2UgSmFudWFyeSAxICgwLTM2NSkKICoKICoKICogInVucGFyc2VkIgogKiB0aGUgZGF0ZSBwYXJ0IHdoaWNoIHdhcyBub3QKICogcmVjb2duaXplZCB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdAogKgogKgogKgogKgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJwdGltZShzdHJpbmcgJGRhdGUsIHN0cmluZyAkZm9ybWF0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJwdGltZSgkZGF0ZSwgJGZvcm1hdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFYWNoIHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGRlZmF1bHQgdGltZSB6b25lIHVubGVzcyBhCiAqIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQgaW4gdGhhdCBwYXJhbWV0ZXIuICBCZSBjYXJlZnVsIG5vdCB0byB1c2UKICogZGlmZmVyZW50IHRpbWUgem9uZXMgaW4gZWFjaCBwYXJhbWV0ZXIgdW5sZXNzIHRoYXQgaXMgaW50ZW5kZWQuCiAqIFNlZSBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0IG9uIHRoZSB2YXJpb3VzCiAqIHdheXMgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0ZXRpbWUgQSBkYXRlL3RpbWUgc3RyaW5nLiBWYWxpZCBmb3JtYXRzIGFyZSBleHBsYWluZWQgaW4gRGF0ZSBhbmQgVGltZSBGb3JtYXRzLgogKiBAcGFyYW0gaW50ICRub3cgVGhlIHRpbWVzdGFtcCB3aGljaCBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIHJlbGF0aXZlCiAqIGRhdGVzLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgdGltZXN0YW1wIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4gUHJldmlvdXMgdG8gUEhQIDUuMS4wLAogKiB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiAtMSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJ0b3RpbWUoc3RyaW5nICRkYXRldGltZSwgaW50ICRub3cgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbm93ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJ0b3RpbWUoJGRhdGV0aW1lLCAkbm93KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJ0b3RpbWUoJGRhdGV0aW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFiYnIgVGltZSB6b25lIGFiYnJldmlhdGlvbi4KICogQHBhcmFtIGludCAkdXRjT2Zmc2V0IE9mZnNldCBmcm9tIEdNVCBpbiBzZWNvbmRzLiBEZWZhdWx0cyB0byAtMSB3aGljaCBtZWFucyB0aGF0IGZpcnN0IGZvdW5kCiAqIHRpbWUgem9uZSBjb3JyZXNwb25kaW5nIHRvIGFiYnIgaXMgcmV0dXJuZWQuCiAqIE90aGVyd2lzZSBleGFjdCBvZmZzZXQgaXMgc2VhcmNoZWQgYW5kIG9ubHkgaWYgbm90IGZvdW5kIHRoZW4gdGhlIGZpcnN0CiAqIHRpbWUgem9uZSB3aXRoIGFueSBvZmZzZXQgaXMgcmV0dXJuZWQuCiAqIEBwYXJhbSBpbnQgJGlzRFNUIERheWxpZ2h0IHNhdmluZyB0aW1lIGluZGljYXRvci4gRGVmYXVsdHMgdG8gLTEsIHdoaWNoIG1lYW5zIHRoYXQKICogd2hldGhlciB0aGUgdGltZSB6b25lIGhhcyBkYXlsaWdodCBzYXZpbmcgb3Igbm90IGlzIG5vdCB0YWtlbiBpbnRvCiAqIGNvbnNpZGVyYXRpb24gd2hlbiBzZWFyY2hpbmcuIElmIHRoaXMgaXMgc2V0IHRvIDEsIHRoZW4gdGhlCiAqIHV0Y09mZnNldCBpcyBhc3N1bWVkIHRvIGJlIGFuIG9mZnNldCB3aXRoCiAqIGRheWxpZ2h0IHNhdmluZyBpbiBlZmZlY3Q7IGlmIDAsIHRoZW4gdXRjT2Zmc2V0CiAqIGlzIGFzc3VtZWQgdG8gYmUgYW4gb2Zmc2V0IHdpdGhvdXQgZGF5bGlnaHQgc2F2aW5nIGluIGVmZmVjdC4gSWYKICogYWJiciBkb2Vzbid0IGV4aXN0IHRoZW4gdGhlIHRpbWUgem9uZSBpcwogKiBzZWFyY2hlZCBzb2xlbHkgYnkgdGhlIHV0Y09mZnNldCBhbmQKICogaXNEU1QuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGltZSB6b25lIG5hbWUgb24gc3VjY2Vzcy4KICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdGltZXpvbmVfbmFtZV9mcm9tX2FiYnIoc3RyaW5nICRhYmJyLCBpbnQgJHV0Y09mZnNldCA9IC0xLCBpbnQgJGlzRFNUID0gLTEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0aW1lem9uZV9uYW1lX2Zyb21fYWJicigkYWJiciwgJHV0Y09mZnNldCwgJGlzRFNUKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/dir.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xEaXJFeGNlcHRpb247CgovKioKICogQ2hhbmdlcyBQSFAncyBjdXJyZW50IGRpcmVjdG9yeSB0bwogKiBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgbmV3IGN1cnJlbnQgZGlyZWN0b3J5CiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaGRpcihzdHJpbmcgJGRpcmVjdG9yeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjaGRpcigkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERpckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2hhbmdlcyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyB0bwogKiBkaXJlY3RvcnksIGFuZCBjaGFuZ2VzIHRoZSBjdXJyZW50CiAqIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIvIi4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB0byBHTlUgYW5kIEJTRCBzeXN0ZW1zLCBhbmQKICogb25seSB3aGVuIHVzaW5nIHRoZSBDTEksIENHSSBvciBFbWJlZCBTQVBJLiBBbHNvLCB0aGlzIGZ1bmN0aW9uCiAqIHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlcy4KICoKICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBwYXRoIHRvIGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8uCiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaHJvb3Qoc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2hyb290KCRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGlyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqCiAqIE9uIHNvbWUgVW5peCB2YXJpYW50cywgZ2V0Y3dkIHdpbGwgcmV0dXJuCiAqIEZBTFNFIGlmIGFueSBvbmUgb2YgdGhlIHBhcmVudCBkaXJlY3RvcmllcyBkb2VzIG5vdCBoYXZlIHRoZQogKiByZWFkYWJsZSBvciBzZWFyY2ggbW9kZSBzZXQsIGV2ZW4gaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAqIGRvZXMuIFNlZSBjaG1vZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgogKiBtb2RlcyBhbmQgcGVybWlzc2lvbnMuCiAqIEB0aHJvd3MgRGlyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRjd2QoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0Y3dkKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEaXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogT3BlbnMgdXAgYSBkaXJlY3RvcnkgaGFuZGxlIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudAogKiBjbG9zZWRpciwgcmVhZGRpciwgYW5kCiAqIHJld2luZGRpciBjYWxscy4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgZGlyZWN0b3J5IHBhdGggdGhhdCBpcyB0byBiZSBvcGVuZWQKICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZXh0IHBhcmFtZXRlciwKICogcmVmZXIgdG8gdGhlIHN0cmVhbXMgc2VjdGlvbiBvZgogKiB0aGUgbWFudWFsLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBkaXJlY3RvcnkgaGFuZGxlIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBEaXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5kaXIoc3RyaW5nICRwYXRoLCAkY29udGV4dCA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbmRpcigkcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5kaXIoJHBhdGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRGlyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlc2V0cyB0aGUgZGlyZWN0b3J5IHN0cmVhbSBpbmRpY2F0ZWQgYnkKICogZGlyX2hhbmRsZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQogKiBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGlyX2hhbmRsZSBUaGUgZGlyZWN0b3J5IGhhbmRsZSByZXNvdXJjZSBwcmV2aW91c2x5IG9wZW5lZAogKiB3aXRoIG9wZW5kaXIuIElmIHRoZSBkaXJlY3RvcnkgaGFuZGxlIGlzCiAqIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG9wZW5kaXIKICogaXMgYXNzdW1lZC4KICogQHRocm93cyBEaXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJld2luZGRpcigkZGlyX2hhbmRsZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGlyX2hhbmRsZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccmV3aW5kZGlyKCRkaXJfaGFuZGxlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZXdpbmRkaXIoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IERpckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyBhbiBhcnJheSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgZnJvbSB0aGUKICogZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgVGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgc2Nhbm5lZC4KICogQHBhcmFtIGludCAkc29ydGluZ19vcmRlciBCeSBkZWZhdWx0LCB0aGUgc29ydGVkIG9yZGVyIGlzIGFscGhhYmV0aWNhbCBpbiBhc2NlbmRpbmcgb3JkZXIuICBJZgogKiB0aGUgb3B0aW9uYWwgc29ydGluZ19vcmRlciBpcyBzZXQgdG8KICogU0NBTkRJUl9TT1JUX0RFU0NFTkRJTkcsIHRoZW4gdGhlIHNvcnQgb3JkZXIgaXMKICogYWxwaGFiZXRpY2FsIGluIGRlc2NlbmRpbmcgb3JkZXIuIElmIGl0IGlzIHNldCB0bwogKiBTQ0FORElSX1NPUlRfTk9ORSB0aGVuIHRoZSByZXN1bHQgaXMgdW5zb3J0ZWQuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGV4dCBwYXJhbWV0ZXIsCiAqIHJlZmVyIHRvIHRoZSBzdHJlYW1zIHNlY3Rpb24gb2YKICogdGhlIG1hbnVhbC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBvbiBzdWNjZXNzLiBJZiBkaXJlY3RvcnkgaXMgbm90IGEgZGlyZWN0b3J5LCB0aGVuCiAqIGJvb2xlYW4gRkFMU0UgaXMgcmV0dXJuZWQsIGFuZCBhbiBlcnJvciBvZiBsZXZlbAogKiBFX1dBUk5JTkcgaXMgZ2VuZXJhdGVkLgogKiBAdGhyb3dzIERpckV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2NhbmRpcihzdHJpbmcgJGRpcmVjdG9yeSwgaW50ICRzb3J0aW5nX29yZGVyID0gU0NBTkRJUl9TT1JUX0FTQ0VORElORywgJGNvbnRleHQgPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzY2FuZGlyKCRkaXJlY3RvcnksICRzb3J0aW5nX29yZGVyLCAkY29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc2NhbmRpcigkZGlyZWN0b3J5LCAkc29ydGluZ19vcmRlcik7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBEaXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/eio.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFaW9FeGNlcHRpb247CgovKioKICogZWlvX2J1c3kgYXJ0aWZpY2lhbGx5IGluY3JlYXNlcyBsb2FkIHRha2luZwogKiBkZWxheSBzZWNvbmRzIHRvIGV4ZWN1dGUuIE1heSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcsCiAqIG9yIGJlbmNobWFya2luZy4KICoKICogQHBhcmFtIGludCAkZGVsYXkgRGVsYXkgaW4gc2Vjb25kcwogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIGFsbCB0aGUgZ3JvdXAgcmVxdWVzdHMgYXJlIGRvbmUuCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBBcmJpdHJhcnkgdmFyaWFibGUgcGFzc2VkIHRvIGNhbGxiYWNrLgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2J1c3koaW50ICRkZWxheSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fYnVzeSgkZGVsYXksICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19jaG1vZCBjaGFuZ2VzIGZpbGUsIG9yIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4gVGhlCiAqIG5ldyBwZXJtaXNzaW9ucyBhcmUgc3BlY2lmaWVkIGJ5IG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aCB0byB0aGUgdGFyZ2V0IGZpbGUgb3IgZGlyZWN0b3J5CiAqIEF2b2lkIHJlbGF0aXZlCiAqIHBhdGhzCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIG5ldyBwZXJtaXNzaW9ucy4gRS5nLiAwNjQ0LgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fY2htb2QgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fY2htb2Qoc3RyaW5nICRwYXRoLCBpbnQgJG1vZGUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2NobW9kKCRwYXRoLCAkbW9kZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2hhbmdlcyBmaWxlLCBvciBkaXJlY3RvcnkgcGVybWlzc2lvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aCB0byBmaWxlIG9yIGRpcmVjdG9yeS4KICogQXZvaWQgcmVsYXRpdmUKICogcGF0aHMKICogQHBhcmFtIGludCAkdWlkIFVzZXIgSUQuIElzIGlnbm9yZWQgd2hlbiBlcXVhbCB0byAtMS4KICogQHBhcmFtIGludCAkZ2lkIEdyb3VwIElELiBJcyBpZ25vcmVkIHdoZW4gZXF1YWwgdG8gLTEuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19jaG93biByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19jaG93bihzdHJpbmcgJHBhdGgsIGludCAkdWlkLCBpbnQgJGdpZCA9IC0xLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19jaG93bigkcGF0aCwgJHVpZCwgJGdpZCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2Nsb3NlIGNsb3NlcyBmaWxlIHNwZWNpZmllZCBieQogKiBmZC4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2Nsb3NlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2Nsb3NlKCRmZCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fY2xvc2UoJGZkLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fY3VzdG9tIGV4ZWN1dGVzIGN1c3RvbSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkKICogZXhlY3V0ZSBwcm9jZXNzaW5nIGl0IGp1c3QgbGlrZSBhbnkgb3RoZXIgZWlvXyogY2FsbC4KICoKICogQHBhcmFtIGNhbGxhYmxlICRleGVjdXRlIFNwZWNpZmllcyB0aGUgcmVxdWVzdCBmdW5jdGlvbiB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogY2FsbGJhY2sgaXMgZXZlbnQgY29tcGxldGlvbiBjYWxsYmFjayB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nCiAqIHByb3RvdHlwZToKICoKICoKICogZGF0YSBpcyB0aGUgZGF0YSBwYXNzZWQgdG8KICogZXhlY3V0ZSB2aWEgZGF0YSBhcmd1bWVudAogKiB3aXRob3V0IG1vZGlmaWNhdGlvbnMKICogcmVzdWx0IHZhbHVlIHJldHVybmVkIGJ5IGV4ZWN1dGUKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2N1c3RvbSByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19jdXN0b20oY2FsbGFibGUgJGV4ZWN1dGUsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fY3VzdG9tKCRleGVjdXRlLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZHVwMiBkdXBsaWNhdGVzIGZpbGUgZGVzY3JpcHRvci4KICoKICogQHBhcmFtIG1peGVkICRmZCBTb3VyY2Ugc3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yCiAqIEBwYXJhbSBtaXhlZCAkZmQyIFRhcmdldCBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2R1cDIgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZHVwMigkZmQsICRmZDIsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2R1cDIoJGZkLCAkZmQyLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZXZlbnRfbG9vcCBwb2xscyBsaWJlaW8gdW50aWwgYWxsIHJlcXVlc3RzIHByb2NlZWRlZC4KICoKICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ldmVudF9sb29wKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fZXZlbnRfbG9vcCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBlaW9fZmFsbG9jYXRlIGFsbG93cyB0aGUgY2FsbGVyIHRvIGRpcmVjdGx5IG1hbmlwdWxhdGUgdGhlIGFsbG9jYXRlZCBkaXNrIHNwYWNlIGZvciB0aGUKICogZmlsZSBzcGVjaWZpZWQgYnkgZmQgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgYnl0ZQogKiByYW5nZSBzdGFydGluZyBhdCBvZmZzZXQgYW5kIGNvbnRpbnVpbmcgZm9yCiAqIGxlbmd0aCBieXRlcy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IsIGUuZy4gcmV0dXJuZWQgYnkgZWlvX29wZW4uCiAqIEBwYXJhbSBpbnQgJG1vZGUgQ3VycmVudGx5IG9ubHkgb25lIGZsYWcgaXMgc3VwcG9ydGVkIGZvciBtb2RlOgogKiBFSU9fRkFMTE9DX0ZMX0tFRVBfU0laRSAodGhlIHNhbWUgYXMgUE9TSVggY29uc3RhbnQKICogRkFMTE9DX0ZMX0tFRVBfU0laRSkuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBTcGVjaWZpZXMgc3RhcnQgb2YgdGhlIGJ5dGUgcmFuZ2UuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBTcGVjaWZpZXMgbGVuZ3RoIHRoZSBieXRlIHJhbmdlLgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZmFsbG9jYXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZhbGxvY2F0ZSgkZmQsIGludCAkbW9kZSwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mYWxsb2NhdGUoJGZkLCAkbW9kZSwgJG9mZnNldCwgJGxlbmd0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZjaG1vZCBjaGFuZ2VzIHBlcm1pc3Npb25zIGZvciB0aGUgZmlsZSBzcGVjaWZpZWQKICogYnkgZmQgZmlsZSBkZXNjcmlwdG9yLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvciwgZS5nLiByZXR1cm5lZCBieSBlaW9fb3Blbi4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgbmV3IHBlcm1pc3Npb25zLiBFLmcuIDA2NDQuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19mY2htb2QgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZmNobW9kKCRmZCwgaW50ICRtb2RlLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mY2htb2QoJGZkLCAkbW9kZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZkYXRhc3luYyBzeW5jaHJvbml6ZXMgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvciwgZS5nLiByZXR1cm5lZCBieSBlaW9fb3Blbi4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2ZkYXRhc3luYyByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19mZGF0YXN5bmMoJGZkLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mZGF0YXN5bmMoJGZkLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZnN0YXQgcmV0dXJucyBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiBpbgogKiByZXN1bHQgYXJndW1lbnQgb2YgY2FsbGJhY2sKICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZzdGF0KCRmZCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGEgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdCgkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdCgkZmQsICRwcmksICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2ZzdGF0dmZzIHJldHVybnMgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyBpbgogKiByZXN1bHQgb2YgY2FsbGJhY2suCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgQSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBmaWxlIHdpdGhpbiB0aGUgbW91bnRlZCBmaWxlIHN5c3RlbS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX2ZzdGF0dmZzIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2ZzdGF0dmZzKCRmZCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGEgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdHZmcygkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19mc3RhdHZmcygkZmQsICRwcmksICRjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgU3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZnN5bmMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZnN5bmMoJGZkLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19mc3luYygkZmQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19mdHJ1bmNhdGUgY2F1c2VzIGEgcmVndWxhciBmaWxlIHJlZmVyZW5jZWQgYnkKICogZmQgZmlsZSBkZXNjcmlwdG9yIHRvIGJlIHRydW5jYXRlZCB0byBwcmVjaXNlbHkKICogbGVuZ3RoIGJ5dGVzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvci4KICogQHBhcmFtIGludCAkb2Zmc2V0IE9mZnNldCBmcm9tIGJlZ2lubmluZyBvZiB0aGUgZmlsZQogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZnRydW5jYXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2Z0cnVuY2F0ZSgkZmQsIGludCAkb2Zmc2V0ID0gMCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fZnRydW5jYXRlKCRmZCwgJG9mZnNldCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX2Z1dGltZSBjaGFuZ2VzIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbgogKiB0aW1lcy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IsIGUuZy4gcmV0dXJuZWQgYnkgZWlvX29wZW4KICogQHBhcmFtIGZsb2F0ICRhdGltZSBBY2Nlc3MgdGltZQogKiBAcGFyYW0gZmxvYXQgJG10aW1lIE1vZGlmaWNhdGlvbiB0aW1lCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19mdXRpbWUgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fZnV0aW1lKCRmZCwgZmxvYXQgJGF0aW1lLCBmbG9hdCAkbXRpbWUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2Z1dGltZSgkZmQsICRhdGltZSwgJG10aW1lLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fZ3JwIGNyZWF0ZXMgYSByZXF1ZXN0IGdyb3VwLgogKgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fZ3JwIHJldHVybnMgcmVxdWVzdCBncm91cCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX2dycChjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX2dycCgkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fbHN0YXQgcmV0dXJucyBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiBpbgogKiByZXN1bHQgYXJndW1lbnQgb2YgY2FsbGJhY2sKICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgZmlsZSBwYXRoCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19sc3RhdCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19sc3RhdChzdHJpbmcgJHBhdGgsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fbHN0YXQoJHBhdGgsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19ta2RpciBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHNwZWNpZmllZCBhY2Nlc3MKICogbW9kZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBQYXRoIGZvciB0aGUgbmV3IGRpcmVjdG9yeS4KICogQHBhcmFtIGludCAkbW9kZSBBY2Nlc3MgbW9kZSwgZS5nLiAwNzU1CiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19ta2RpciByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ta2RpcihzdHJpbmcgJHBhdGgsIGludCAkbW9kZSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fbWtkaXIoJHBhdGgsICRtb2RlLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fbWtub2QgY3JlYXRlcyBvcmRpbmFyeSBvciBzcGVjaWFsKG9mdGVuKSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggZm9yIHRoZSBuZXcgbm9kZShmaWxlKS4KICogQHBhcmFtIGludCAkbW9kZSBTcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlIHRvIGJlCiAqIGNyZWF0ZWQuIEl0IHNob3VsZCBiZSBhIGNvbWJpbmF0aW9uICh1c2luZyBiaXR3aXNlIE9SKSBvZiBvbmUgb2YgdGhlCiAqIGZpbGUgdHlwZXMgbGlzdGVkIGJlbG93IGFuZCB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBuZXcgbm9kZShlLmcuIDA2NDApLgogKgogKiBQb3NzaWJsZSBmaWxlIHR5cGVzIGFyZTogRUlPX1NfSUZSRUcocmVndWxhciBmaWxlKSwKICogRUlPX1NfSUZDSFIoY2hhcmFjdGVyIGZpbGUpLAogKiBFSU9fU19JRkJMSyhibG9jayBzcGVjaWFsIGZpbGUpLAogKiBFSU9fU19JRklGTyhGSUZPIC0gbmFtZWQgcGlwZSkgYW5kCiAqIEVJT19TX0lGU09DSyhVTklYIGRvbWFpbiBzb2NrZXQpLgogKgogKiBUbyBzcGVjaWZ5IHBlcm1pc3Npb25zIEVJT19TX0kqIGNvbnN0YW50cyBjb3VsZCBiZQogKiB1c2VkLgogKiBAcGFyYW0gaW50ICRkZXYgSWYgIHRoZSAgZmlsZSB0eXBlIGlzIEVJT19TX0lGQ0hSIG9yCiAqIEVJT19TX0lGQkxLIHRoZW4gZGV2IHNwZWNpZmllcyB0aGUgbWFqb3IgYW5kIG1pbm9yCiAqIG51bWJlcnMgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgZGV2aWNlIHNwZWNpYWwgZmlsZS4gT3RoZXJ3aXNlCiAqIGRldiBpZ25vcmVkLiBTZWUgbWtub2QoMikgbWFuIHBhZ2UgZm9yCiAqIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19ta25vZCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19ta25vZChzdHJpbmcgJHBhdGgsIGludCAkbW9kZSwgaW50ICRkZXYsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX21rbm9kKCRwYXRoLCAkbW9kZSwgJGRldiwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX25vcCBkb2VzIG5vdGhpbmcsIGV4Y2VwdCBnbyB0aHJvdWdoIHRoZSB3aG9sZQogKiByZXF1ZXN0IGN5Y2xlLiBDb3VsZCBiZSB1c2VmdWwgaW4gZGVidWdnaW5nLgogKgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fbm9wIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX25vcChpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19ub3AoJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3JlYWRhaGVhZCBwb3B1bGF0ZXMgdGhlIHBhZ2UgY2FjaGUgd2l0aCBkYXRhIGZyb20gYSBmaWxlIHNvIHRoYXQgc3Vic2VxdWVudCByZWFkcyBmcm9tCiAqIHRoYXQgZmlsZSB3aWxsIG5vdCBibG9jayBvbiBkaXNrIEkvTy4gU2VlIFJFQURBSEVBRCgyKSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KICoKICogQHBhcmFtIG1peGVkICRmZCBTdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkb2Zmc2V0IFN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggZGF0YSBpcyB0byBiZSByZWFkLgogKiBAcGFyYW0gaW50ICRsZW5ndGggTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19yZWFkYWhlYWQgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fcmVhZGFoZWFkKCRmZCwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19yZWFkYWhlYWQoJGZkLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyB0aHJvdWdoIGEgd2hvbGUgZGlyZWN0b3J5KHZpYSB0aGUgb3BlbmRpciwgcmVhZGRpciBhbmQKICogY2xvc2VkaXIgc3lzdGVtIGNhbGxzKSBhbmQgcmV0dXJucyBlaXRoZXIgdGhlIG5hbWVzIG9yIGFuIGFycmF5IGluCiAqIHJlc3VsdCBhcmd1bWVudCBvZiBjYWxsYmFjawogKiBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBmbGFncyBhcmd1bWVudC4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBEaXJlY3RvcnkgcGF0aC4KICogQHBhcmFtIGludCAkZmxhZ3MgQ29tYmluYXRpb24gb2YgRUlPX1JFQURESVJfKiBjb25zdGFudHMuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcmVhZGRpciByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gU2V0cyByZXN1bHQgYXJndW1lbnQgb2YKICogY2FsbGJhY2sgZnVuY3Rpb24gYWNjb3JkaW5nIHRvCiAqIGZsYWdzOgogKgogKgogKgogKgogKgogKgogKiBFSU9fUkVBRERJUl9ERU5UUwogKiAoaW50ZWdlcikKICoKICoKICoKICogZWlvX3JlYWRkaXIgZmxhZy4gSWYgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjawogKiBiZWNvbWVzIGFuIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOgogKiAnbmFtZXMnIC0gYXJyYXkgb2YgZGlyZWN0b3J5IG5hbWVzCiAqICdkZW50cycgLSBhcnJheSBvZiBzdHJ1Y3QKICogZWlvX2RpcmVudC1saWtlIGFycmF5cyBoYXZpbmcgdGhlIGZvbGxvd2luZyBrZXlzIGVhY2g6CiAqICduYW1lJyAtIHRoZSBkaXJlY3RvcnkgbmFtZTsKICogJ3R5cGUnIC0gb25lIG9mIEVJT19EVF8qCiAqIGNvbnN0YW50czsKICogJ2lub2RlJyAtIHRoZSBpbm9kZSBudW1iZXIsIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlCiAqIHVuc3BlY2lmaWVkOwogKgogKgogKgogKgogKgogKiBFSU9fUkVBRERJUl9ESVJTX0ZJUlNUCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBXaGVuIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZSBuYW1lcyB3aWxsIGJlIHJldHVybmVkIGluIGFuIG9yZGVyCiAqIHdoZXJlIGxpa2VseSBkaXJlY3RvcmllcyBjb21lIGZpcnN0LCBpbiBvcHRpbWFsIHN0YXQgb3JkZXIuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19SRUFERElSX1NUQVRfT1JERVIKICogKGludGVnZXIpCiAqCiAqCiAqCiAqIFdoZW4gdGhpcyBmbGFnIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgbmFtZXMgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBvcmRlcgogKiBzdWl0YWJsZSBmb3Igc3RhdCdpbmcgZWFjaCBvbmUuIFdoZW4gcGxhbm5pbmcgdG8KICogc3RhdCBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSwgdGhlCiAqIHJldHVybmVkIG9yZGVyIHdpbGwgbGlrZWx5IGJlCiAqIGZhc3Rlc3QuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19SRUFERElSX0ZPVU5EX1VOS05PV04KICogKGludGVnZXIpCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIE5vZGUgdHlwZXM6CiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9VTktOT1dOCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBVbmtub3duIG5vZGUgdHlwZSh2ZXJ5IGNvbW1vbikuIEZ1cnRoZXIgc3RhdCBuZWVkZWQuCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9GSUZPCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBGSUZPIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfQ0hSCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX01QQwogKiAoaW50ZWdlcikKICoKICoKICoKICogTXVsdGlwbGV4ZWQgY2hhciBkZXZpY2UgKHY3K2NvaGVyZW50KSBub2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX0RJUgogKiAoaW50ZWdlcikKICoKICoKICoKICogRGlyZWN0b3J5IG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTkFNCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBYZW5peCBzcGVjaWFsIG5hbWVkIGZpbGUgbm9kZSB0eXBlCiAqCiAqCiAqCiAqCiAqCiAqIEVJT19EVF9CTEsKICogKGludGVnZXIpCiAqCiAqCiAqCiAqIE5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTVBCCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBNdWx0aXBsZXhlZCBibG9jayBkZXZpY2UgKHY3K2NvaGVyZW50KQogKgogKgogKgogKgogKgogKiBFSU9fRFRfUkVHCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX05XSwogKiAoaW50ZWdlcikKICoKICoKICoKICoKICoKICoKICoKICoKICogRUlPX0RUX0NNUAogKiAoaW50ZWdlcikKICoKICoKICoKICogSFAtVVggbmV0d29yayBzcGVjaWFsIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfTE5LCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBMaW5rIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfU09DSwogKiAoaW50ZWdlcikKICoKICoKICoKICogU29ja2V0IG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfRE9PUgogKiAoaW50ZWdlcikKICoKICoKICoKICogU29sYXJpcyBkb29yIG5vZGUgdHlwZQogKgogKgogKgogKgogKgogKiBFSU9fRFRfV0hUCiAqIChpbnRlZ2VyKQogKgogKgogKgogKiBOb2RlIHR5cGUKICoKICoKICoKICoKICoKICogRUlPX0RUX01BWAogKiAoaW50ZWdlcikKICoKICoKICoKICogSGlnaGVzdCBub2RlIHR5cGUgdmFsdWUKICoKICoKICoKICoKICoKICoKICoKICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19yZWFkZGlyKHN0cmluZyAkcGF0aCwgaW50ICRmbGFncywgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fcmVhZGRpcigkcGF0aCwgJGZsYWdzLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFNvdXJjZSBzeW1ib2xpYyBsaW5rIHBhdGgKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19yZWFkbGluayByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19yZWFkbGluayhzdHJpbmcgJHBhdGgsIGludCAkcHJpLCBjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3JlYWRsaW5rKCRwYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fcmVuYW1lIHJlbmFtZXMgb3IgbW92ZXMgYSBmaWxlIHRvIG5ldyBsb2NhdGlvbi4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBTb3VyY2UgcGF0aAogKiBAcGFyYW0gc3RyaW5nICRuZXdfcGF0aCBUYXJnZXQgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcmVuYW1lIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3JlbmFtZShzdHJpbmcgJHBhdGgsIHN0cmluZyAkbmV3X3BhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3JlbmFtZSgkcGF0aCwgJG5ld19wYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fcm1kaXIgcmVtb3ZlcyBhIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBEaXJlY3RvcnkgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fcm1kaXIgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fcm1kaXIoc3RyaW5nICRwYXRoLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19ybWRpcigkcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3NlZWsgcmVwb3NpdGlvbnMgdGhlIG9mZnNldCBvZiB0aGUgb3BlbiBmaWxlIGFzc29jaWF0ZWQgd2l0aAogKiBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgZmlsZSBkZXNjcmlwdG9yIHNwZWNpZmllZCBieSBmZCB0byB0aGUgYXJndW1lbnQgb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgZGlyZWN0aXZlIHdoZW5jZSBhcyBmb2xsb3dzOgogKgogKiBFSU9fU0VFS19TRVQgLSBTZXQgcG9zaXRpb24gZXF1YWwgdG8gb2Zmc2V0IGJ5dGVzLgogKiBFSU9fU0VFS19DVVIgLSBTZXQgcG9zaXRpb24gdG8gY3VycmVudCBsb2NhdGlvbiBwbHVzIG9mZnNldC4KICogRUlPX1NFRUtfRU5EIC0gU2V0IHBvc2l0aW9uIHRvIGVuZC1vZi1maWxlIHBsdXMgb2Zmc2V0LgogKgogKgogKiBAcGFyYW0gbWl4ZWQgJGZkIFN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBudW1lcmljIGZpbGUgZGVzY3JpcHRvcgogKiBAcGFyYW0gaW50ICRvZmZzZXQgU3RhcnRpbmcgcG9pbnQgZnJvbSB3aGljaCBkYXRhIGlzIHRvIGJlIHJlYWQuCiAqIEBwYXJhbSBpbnQgJHdoZW5jZSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZC4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3NlZWsgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc2VlaygkZmQsIGludCAkb2Zmc2V0LCBpbnQgJHdoZW5jZSwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fc2VlaygkZmQsICRvZmZzZXQsICR3aGVuY2UsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zZW5kZmlsZSBjb3BpZXMgIGRhdGEgYmV0d2VlbiBvbmUgZmlsZSBkZXNjcmlwdG9yCiAqIGFuZCBhbm90aGVyLiBTZWUgU0VOREZJTEUoMikgbWFuIHBhZ2UgZm9yIGRldGFpbHMuCiAqCiAqIEBwYXJhbSBtaXhlZCAkb3V0X2ZkIE91dHB1dCBzdHJlYW0sIFNvY2tldCByZXNvdXJjZSwgb3IgZmlsZSBkZXNjcmlwdG9yLiBTaG91bGQgYmUgb3BlbmVkIGZvciB3cml0aW5nLgogKiBAcGFyYW0gbWl4ZWQgJGluX2ZkIElucHV0IHN0cmVhbSwgU29ja2V0IHJlc291cmNlLCBvciBmaWxlIGRlc2NyaXB0b3IuIFNob3VsZCBiZSBvcGVuZWQgZm9yIHJlYWRpbmcuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4KICogQHBhcmFtIGludCAkbGVuZ3RoIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIHN0cmluZyAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3NlbmRmaWxlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3NlbmRmaWxlKCRvdXRfZmQsICRpbl9mZCwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBpbnQgJHByaSA9IG51bGwsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIHN0cmluZyAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZWlvX3NlbmRmaWxlKCRvdXRfZmQsICRpbl9mZCwgJG9mZnNldCwgJGxlbmd0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICB9IGVsc2VpZiAoJGNhbGxiYWNrICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxlaW9fc2VuZGZpbGUoJG91dF9mZCwgJGluX2ZkLCAkb2Zmc2V0LCAkbGVuZ3RoLCAkcHJpLCAkY2FsbGJhY2spOwogICAgfSBlbHNlaWYgKCRwcmkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zZW5kZmlsZSgkb3V0X2ZkLCAkaW5fZmQsICRvZmZzZXQsICRsZW5ndGgsICRwcmkpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zZW5kZmlsZSgkb3V0X2ZkLCAkaW5fZmQsICRvZmZzZXQsICRsZW5ndGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zdGF0IHJldHVybnMgZmlsZSBzdGF0dXMgaW5mb3JtYXRpb24gaW4KICogcmVzdWx0IGFyZ3VtZW50IG9mIGNhbGxiYWNrCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIGZpbGUgcGF0aAogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fc3RhdCByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gT24gc3VjY2VzcyBhc3NpZ25zIHJlc3VsdCBhcmd1bWVudCBvZgogKiBjYWxsYmFjayB0byBhbiBhcnJheS4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19zdGF0KHN0cmluZyAkcGF0aCwgaW50ICRwcmksIGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19zdGF0KCRwYXRoLCAkcHJpLCAkY2FsbGJhY2ssICRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEVpb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBlaW9fc3RhdHZmcyByZXR1cm5zIGZpbGUgc3lzdGVtIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gaW4KICogcmVzdWx0IGFyZ3VtZW50IG9mIGNhbGxiYWNrCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggUGF0aG5hbWUgb2YgYW55IGZpbGUgd2l0aGluIHRoZSBtb3VudGVkIGZpbGUgc3lzdGVtCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19zdGF0dmZzIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLiBPbiBzdWNjZXNzIGFzc2lnbnMgcmVzdWx0IGFyZ3VtZW50IG9mCiAqIGNhbGxiYWNrIHRvIGFuIGFycmF5LgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3N0YXR2ZnMoc3RyaW5nICRwYXRoLCBpbnQgJHByaSwgY2FsbGFibGUgJGNhbGxiYWNrLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZWlvX3N0YXR2ZnMoJHBhdGgsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGVpb19zdGF0dmZzKCRwYXRoLCAkcHJpLCAkY2FsbGJhY2spOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGVpb19zeW1saW5rIGNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rCiAqIG5ld19wYXRoIHRvIHBhdGguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggU291cmNlIHBhdGgKICogQHBhcmFtIHN0cmluZyAkbmV3X3BhdGggVGFyZ2V0IHBhdGgKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bWxpbmsgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3ltbGluayhzdHJpbmcgJHBhdGgsIHN0cmluZyAkbmV3X3BhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3N5bWxpbmsoJHBhdGgsICRuZXdfcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3N5bmNfZmlsZV9yYW5nZSBwZXJtaXRzIGZpbmUgY29udHJvbCB3aGVuIHN5bmNocm9uaXppbmcgdGhlIG9wZW4gZmlsZSByZWZlcnJlZCB0byBieSB0aGUgZmlsZQogKiBkZXNjcmlwdG9yIGZkIHdpdGggZGlzay4KICoKICogQHBhcmFtIG1peGVkICRmZCBGaWxlIGRlc2NyaXB0b3IKICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBzdGFydGluZyBieXRlIG9mIHRoZSBmaWxlIHJhbmdlIHRvIGJlIHN5bmNocm9uaXplZAogKiBAcGFyYW0gaW50ICRuYnl0ZXMgU3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIHRvIGJlIHN5bmNocm9uaXplZCwgaW4gYnl0ZXMuIElmCiAqIG5ieXRlcyBpcyB6ZXJvLCB0aGVuIGFsbCBieXRlcyBmcm9tIG9mZnNldCB0aHJvdWdoCiAqIHRvIHRoZSBlbmQgb2YgZmlsZSBhcmUgc3luY2hyb25pemVkLgogKiBAcGFyYW0gaW50ICRmbGFncyBBIGJpdC1tYXNrLiBDYW4gaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUsCiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV1JJVEUsCiAqIEVJT19TWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUi4gVGhlc2UgZmxhZ3MgaGF2ZQogKiB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZWlyIFNZTkNfRklMRV9SQU5HRV8qCiAqIGNvdW50ZXJwYXJ0cyhzZWUgU1lOQ19GSUxFX1JBTkdFKDIpIG1hbiBwYWdlKS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bmNfZmlsZV9yYW5nZSByZXR1cm5zIHJlcXVlc3QgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBFaW9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVpb19zeW5jX2ZpbGVfcmFuZ2UoJGZkLCBpbnQgJG9mZnNldCwgaW50ICRuYnl0ZXMsIGludCAkZmxhZ3MsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3N5bmNfZmlsZV9yYW5nZSgkZmQsICRvZmZzZXQsICRuYnl0ZXMsICRmbGFncywgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkcHJpCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogQHBhcmFtIG1peGVkICRkYXRhCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3N5bmMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3luYyhpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb19zeW5jKCRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgRmlsZSBkZXNjcmlwdG9yCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19zeW5jZnMgcmV0dXJucyByZXF1ZXN0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRWlvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBlaW9fc3luY2ZzKCRmZCwgaW50ICRwcmkgPSBFSU9fUFJJX0RFRkFVTFQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkYXRhID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxlaW9fc3luY2ZzKCRmZCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3RydW5jYXRlIGNhdXNlcyB0aGUgcmVndWxhciBmaWxlIG5hbWVkIGJ5IHBhdGggdG8gYmUgdHJ1bmNhdGVkIHRvCiAqIGEgc2l6ZSBvZiBwcmVjaXNlbHkgbGVuZ3RoIGJ5dGVzCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggRmlsZSBwYXRoCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJHByaSBUaGUgcmVxdWVzdCBwcmlvcml0eTogRUlPX1BSSV9ERUZBVUxULCBFSU9fUFJJX01JTiwgRUlPX1BSSV9NQVgsIG9yIE5VTEwuCiAqIElmIE5VTEwgcGFzc2VkLCBwcmkgaW50ZXJuYWxseSBpcyBzZXQgdG8KICogRUlPX1BSSV9ERUZBVUxULgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGRvbmUuCiAqIEl0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZToKICoKICoKICogZGF0YQogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqCiAqIHJlc3VsdAogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICoKICogcmVxCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICoKICoKICoKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKiByZXF1ZXN0LXNwZWNpZmljIHJlc3VsdCB2YWx1ZTsgYmFzaWNhbGx5LCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY29ycmVzcG9uZGluZwogKiBzeXN0ZW0gY2FsbC4KICoKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIGVpb19idXN5IHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3RydW5jYXRlKHN0cmluZyAkcGF0aCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb190cnVuY2F0ZSgkcGF0aCwgJG9mZnNldCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3VubGluayBkZWxldGVzICBhICBuYW1lIGZyb20gdGhlIGZpbGUgc3lzdGVtLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggdG8gZmlsZQogKiBAcGFyYW0gaW50ICRwcmkgVGhlIHJlcXVlc3QgcHJpb3JpdHk6IEVJT19QUklfREVGQVVMVCwgRUlPX1BSSV9NSU4sIEVJT19QUklfTUFYLCBvciBOVUxMLgogKiBJZiBOVUxMIHBhc3NlZCwgcHJpIGludGVybmFsbHkgaXMgc2V0IHRvCiAqIEVJT19QUklfREVGQVVMVC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBkb25lLgogKiBJdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CiAqCiAqCiAqIGRhdGEKICogaXMgY3VzdG9tIGRhdGEgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LgogKgogKgogKiByZXN1bHQKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqCiAqIHJlcQogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqCiAqCiAqCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICogcmVxdWVzdC1zcGVjaWZpYyByZXN1bHQgdmFsdWU7IGJhc2ljYWxseSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvcnJlc3BvbmRpbmcKICogc3lzdGVtIGNhbGwuCiAqCiAqIGlzIG9wdGlvbmFsIHJlcXVlc3QgcmVzb3VyY2Ugd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBlaW9fZ2V0X2xhc3RfZXJyb3IKICogQHBhcmFtIG1peGVkICRkYXRhIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZSBlaW9fdW5saW5rIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3VubGluayhzdHJpbmcgJHBhdGgsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3VubGluaygkcGF0aCwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gZmxvYXQgJGF0aW1lIEFjY2VzcyB0aW1lCiAqIEBwYXJhbSBmbG9hdCAkbXRpbWUgTW9kaWZpY2F0aW9uIHRpbWUKICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3V0aW1lIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3V0aW1lKHN0cmluZyAkcGF0aCwgZmxvYXQgJGF0aW1lLCBmbG9hdCAkbXRpbWUsIGludCAkcHJpID0gRUlPX1BSSV9ERUZBVUxULCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGF0YSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZWlvX3V0aW1lKCRwYXRoLCAkYXRpbWUsICRtdGltZSwgJHByaSwgJGNhbGxiYWNrLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBFaW9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZWlvX3dyaXRlIHdyaXRlcyB1cCB0byBsZW5ndGgKICogYnl0ZXMgZnJvbSBzdHIgYXQgb2Zmc2V0CiAqIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkZmQgU3RyZWFtLCBTb2NrZXQgcmVzb3VyY2UsIG9yIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLCBlLmcuIHJldHVybmVkIGJ5IGVpb19vcGVuCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBTb3VyY2Ugc3RyaW5nCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS4KICogQHBhcmFtIGludCAkb2Zmc2V0IE9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZmlsZS4KICogQHBhcmFtIGludCAkcHJpIFRoZSByZXF1ZXN0IHByaW9yaXR5OiBFSU9fUFJJX0RFRkFVTFQsIEVJT19QUklfTUlOLCBFSU9fUFJJX01BWCwgb3IgTlVMTC4KICogSWYgTlVMTCBwYXNzZWQsIHByaSBpbnRlcm5hbGx5IGlzIHNldCB0bwogKiBFSU9fUFJJX0RFRkFVTFQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgZG9uZS4KICogSXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogKgogKgogKiBkYXRhCiAqIGlzIGN1c3RvbSBkYXRhIHBhc3NlZCB0byB0aGUgcmVxdWVzdC4KICoKICoKICogcmVzdWx0CiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKgogKiByZXEKICogaXMgb3B0aW9uYWwgcmVxdWVzdCByZXNvdXJjZSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGVpb19nZXRfbGFzdF9lcnJvcgogKgogKgogKgogKiBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqCiAqIHJlcXVlc3Qtc3BlY2lmaWMgcmVzdWx0IHZhbHVlOyBiYXNpY2FsbHksIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBjb3JyZXNwb25kaW5nCiAqIHN5c3RlbSBjYWxsLgogKgogKiBpcyBvcHRpb25hbCByZXF1ZXN0IHJlc291cmNlIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGxpa2UgZWlvX2dldF9sYXN0X2Vycm9yCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBpcyBjdXN0b20gZGF0YSBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2UgZWlvX3dyaXRlIHJldHVybnMgcmVxdWVzdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEVpb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZWlvX3dyaXRlKCRmZCwgc3RyaW5nICRzdHIsIGludCAkbGVuZ3RoID0gMCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJHByaSA9IEVJT19QUklfREVGQVVMVCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRhdGEgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGVpb193cml0ZSgkZmQsICRzdHIsICRsZW5ndGgsICRvZmZzZXQsICRwcmksICRjYWxsYmFjaywgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRWlvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/errorfunc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFcnJvcmZ1bmNFeGNlcHRpb247CgovKioKICogU2VuZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgd2ViIHNlcnZlcidzIGVycm9yIGxvZyBvciB0byBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgbG9nZ2VkLgogKiBAcGFyYW0gaW50ICRtZXNzYWdlX3R5cGUgU2F5cyB3aGVyZSB0aGUgZXJyb3Igc2hvdWxkIGdvLiBUaGUgcG9zc2libGUgbWVzc2FnZSB0eXBlcyBhcmUgYXMKICogZm9sbG93czoKICoKICoKICogZXJyb3JfbG9nIGxvZyB0eXBlcwogKgogKgogKgogKiAwCiAqCiAqIG1lc3NhZ2UgaXMgc2VudCB0byBQSFAncyBzeXN0ZW0gbG9nZ2VyLCB1c2luZwogKiB0aGUgT3BlcmF0aW5nIFN5c3RlbSdzIHN5c3RlbSBsb2dnaW5nIG1lY2hhbmlzbSBvciBhIGZpbGUsIGRlcGVuZGluZwogKiBvbiB3aGF0IHRoZSBlcnJvcl9sb2cKICogY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgaXMgc2V0IHRvLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcHRpb24uCiAqCiAqCiAqCiAqIDEKICoKICogbWVzc2FnZSBpcyBzZW50IGJ5IGVtYWlsIHRvIHRoZSBhZGRyZXNzIGluCiAqIHRoZSBkZXN0aW5hdGlvbiBwYXJhbWV0ZXIuICBUaGlzIGlzIHRoZSBvbmx5CiAqIG1lc3NhZ2UgdHlwZSB3aGVyZSB0aGUgZm91cnRoIHBhcmFtZXRlciwKICogZXh0cmFfaGVhZGVycyBpcyB1c2VkLgogKgogKgogKgogKiAyCiAqCiAqIE5vIGxvbmdlciBhbiBvcHRpb24uCiAqCiAqCiAqCiAqIDMKICoKICogbWVzc2FnZSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZQogKiBkZXN0aW5hdGlvbi4gQSBuZXdsaW5lIGlzIG5vdCBhdXRvbWF0aWNhbGx5CiAqIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2Ugc3RyaW5nLgogKgogKgogKgogKiA0CiAqCiAqIG1lc3NhZ2UgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgU0FQSSBsb2dnaW5nCiAqIGhhbmRsZXIuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3RpbmF0aW9uIFRoZSBkZXN0aW5hdGlvbi4gSXRzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKICogbWVzc2FnZV90eXBlIHBhcmFtZXRlciBhcyBkZXNjcmliZWQgYWJvdmUuCiAqIEBwYXJhbSBzdHJpbmcgJGV4dHJhX2hlYWRlcnMgVGhlIGV4dHJhIGhlYWRlcnMuIEl0J3MgdXNlZCB3aGVuIHRoZSBtZXNzYWdlX3R5cGUKICogcGFyYW1ldGVyIGlzIHNldCB0byAxLgogKiBUaGlzIG1lc3NhZ2UgdHlwZSB1c2VzIHRoZSBzYW1lIGludGVybmFsIGZ1bmN0aW9uIGFzCiAqIG1haWwgZG9lcy4KICogQHRocm93cyBFcnJvcmZ1bmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGVycm9yX2xvZyhzdHJpbmcgJG1lc3NhZ2UsIGludCAkbWVzc2FnZV90eXBlID0gMCwgc3RyaW5nICRkZXN0aW5hdGlvbiA9IG51bGwsIHN0cmluZyAkZXh0cmFfaGVhZGVycyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXh0cmFfaGVhZGVycyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZXJyb3JfbG9nKCRtZXNzYWdlLCAkbWVzc2FnZV90eXBlLCAkZGVzdGluYXRpb24sICRleHRyYV9oZWFkZXJzKTsKICAgIH0gZWxzZWlmICgkZGVzdGluYXRpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGVycm9yX2xvZygkbWVzc2FnZSwgJG1lc3NhZ2VfdHlwZSwgJGRlc3RpbmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxlcnJvcl9sb2coJG1lc3NhZ2UsICRtZXNzYWdlX3R5cGUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXJyb3JmdW5jRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ApacheException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwYWNoZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ApcuException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFwY3VFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ArrayException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEFycmF5RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Bzip2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEJ6aXAyRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/CalendarException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENhbGVuZGFyRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ClassobjException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENsYXNzb2JqRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ComException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIENvbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/CubridException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEN1YnJpZEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/DatetimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIERhdGV0aW1lRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/DirException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIERpckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/EioException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEVpb0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ErrorfuncException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEVycm9yZnVuY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ExecException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEV4ZWNFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FileinfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbGVpbmZvRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FilesystemException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbGVzeXN0ZW1FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FilterException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZpbHRlckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FpmException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZwbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FtpException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZ0cEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/FunchandException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEZ1bmNoYW5kRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/GmpException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEdtcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/GnupgException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEdudXBnRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/HashException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEhhc2hFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IbaseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEliYXNlRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IbmDb2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIElibURiMkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IconvException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEljb252RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ImageException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEltYWdlRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ImapException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEltYXBFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/InfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEluZm9FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/IngresiiException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEluZ3Jlc2lpRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/InotifyException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIElub3RpZnlFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LdapException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExkYXBFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LibxmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIExpYnhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/LzfException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIEx6ZkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MailparseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1haWxwYXJzZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MbstringException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1ic3RyaW5nRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MiscException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1pc2NFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MsqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE1zcWxFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqliException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsaUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlndMsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsbmRNc0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/MysqlndQcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE15c3FsbmRRY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/NetworkException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE5ldHdvcmtFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Oci8Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE9jaThFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/OpcacheException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE9wY2FjaGVFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/OutcontrolException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIE91dGNvbnRyb2xFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PasswordException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PcntlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBjbnRsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PdfException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBkZkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PgsqlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBnc3FsRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PosixException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBvc2l4RXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBzRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/PspellException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFBzcGVsbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ReadlineException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJlYWRsaW5lRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/RpminfoException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJwbWluZm9FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/RrdException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFJyZEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SemException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNlbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SessionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNlc3Npb25FeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ShmopException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNobW9wRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SimplexmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNpbXBsZXhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SocketsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvY2tldHNFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SodiumException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvZGl1bUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SolrException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNvbHJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SplException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNwbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SqlsrvException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNxbHNydkV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SsdeepException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNzZGVlcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/Ssh2Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFNzaDJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/StreamException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0cmVhbUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/StringsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN0cmluZ3NFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/SwooleException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFN3b29sZUV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UodbcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVvZGJjRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UopzException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVvcHpFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/UrlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFVybEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/VarException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFZhckV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XdiffException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhkaWZmRXhjZXB0aW9uIGV4dGVuZHMgXEVycm9yRXhjZXB0aW9uIGltcGxlbWVudHMgU2FmZUV4Y2VwdGlvbkludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QaHBFcnJvcigpOiBzZWxmCiAgICB7CiAgICAgICAgJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGVycm9yWydtZXNzYWdlJ10gPz8gJ0FuIGVycm9yIG9jY3VyZWQnLCAwLCAkZXJyb3JbJ3R5cGUnXSA/PyAxKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XmlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhtbEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/XmlrpcException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFhtbHJwY0V4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/YamlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFlhbWxFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/YazException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFlhekV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ZipException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFppcEV4Y2VwdGlvbiBleHRlbmRzIFxFcnJvckV4Y2VwdGlvbiBpbXBsZW1lbnRzIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUGhwRXJyb3IoKTogc2VsZgogICAgewogICAgICAgICRlcnJvciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRlcnJvclsnbWVzc2FnZSddID8/ICdBbiBlcnJvciBvY2N1cmVkJywgMCwgJGVycm9yWyd0eXBlJ10gPz8gMSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/Exceptions/ZlibException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNhZmVcRXhjZXB0aW9uczsKCmNsYXNzIFpsaWJFeGNlcHRpb24gZXh0ZW5kcyBcRXJyb3JFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyb3JbJ21lc3NhZ2UnXSA/PyAnQW4gZXJyb3Igb2NjdXJlZCcsIDAsICRlcnJvclsndHlwZSddID8/IDEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/exec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xFeGVjRXhjZXB0aW9uOwoKLyoqCiAqIHByb2NfZ2V0X3N0YXR1cyBmZXRjaGVzIGRhdGEgYWJvdXQgYQogKiBwcm9jZXNzIG9wZW5lZCB1c2luZyBwcm9jX29wZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHJvY2VzcyBUaGUgcHJvY19vcGVuIHJlc291cmNlIHRoYXQgd2lsbAogKiBiZSBldmFsdWF0ZWQuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgY29sbGVjdGVkIGluZm9ybWF0aW9uIG9uIHN1Y2Nlc3MuIFRoZSByZXR1cm5lZCBhcnJheSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKgogKgogKgogKgogKiBlbGVtZW50dHlwZWRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqIGNvbW1hbmQKICogc3RyaW5nCiAqCiAqIFRoZSBjb21tYW5kIHN0cmluZyB0aGF0IHdhcyBwYXNzZWQgdG8gcHJvY19vcGVuLgogKgogKgogKgogKiBwaWQKICogaW50CiAqIHByb2Nlc3MgaWQKICoKICoKICogcnVubmluZwogKiBib29sCiAqCiAqIFRSVUUgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZywgRkFMU0UgaWYgaXQgaGFzCiAqIHRlcm1pbmF0ZWQuCiAqCiAqCiAqCiAqIHNpZ25hbGVkCiAqIGJvb2wKICoKICogVFJVRSBpZiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYmVlbiB0ZXJtaW5hdGVkIGJ5CiAqIGFuIHVuY2F1Z2h0IHNpZ25hbC4gQWx3YXlzIHNldCB0byBGQUxTRSBvbiBXaW5kb3dzLgogKgogKgogKgogKiBzdG9wcGVkCiAqIGJvb2wKICoKICogVFJVRSBpZiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYmVlbiBzdG9wcGVkIGJ5IGEKICogc2lnbmFsLiBBbHdheXMgc2V0IHRvIEZBTFNFIG9uIFdpbmRvd3MuCiAqCiAqCiAqCiAqIGV4aXRjb2RlCiAqIGludAogKgogKiBUaGUgZXhpdCBjb2RlIHJldHVybmVkIGJ5IHRoZSBwcm9jZXNzICh3aGljaCBpcyBvbmx5CiAqIG1lYW5pbmdmdWwgaWYgcnVubmluZyBpcyBGQUxTRSkuCiAqIE9ubHkgZmlyc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uIHJldHVybiByZWFsIHZhbHVlLCBuZXh0IGNhbGxzIHJldHVybgogKiAtMS4KICoKICoKICoKICogdGVybXNpZwogKiBpbnQKICoKICogVGhlIG51bWJlciBvZiB0aGUgc2lnbmFsIHRoYXQgY2F1c2VkIHRoZSBjaGlsZCBwcm9jZXNzIHRvIHRlcm1pbmF0ZQogKiBpdHMgZXhlY3V0aW9uIChvbmx5IG1lYW5pbmdmdWwgaWYgc2lnbmFsZWQgaXMgVFJVRSkuCiAqCiAqCiAqCiAqIHN0b3BzaWcKICogaW50CiAqCiAqIFRoZSBudW1iZXIgb2YgdGhlIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgY2hpbGQgcHJvY2VzcyB0byBzdG9wIGl0cwogKiBleGVjdXRpb24gKG9ubHkgbWVhbmluZ2Z1bCBpZiBzdG9wcGVkIGlzIFRSVUUpLgogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEV4ZWNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByb2NfZ2V0X3N0YXR1cygkcHJvY2Vzcyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJvY19nZXRfc3RhdHVzKCRwcm9jZXNzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEV4ZWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcHJvY19uaWNlIGNoYW5nZXMgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50CiAqIHByb2Nlc3MgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgaW4gaW5jcmVtZW50LiBBCiAqIHBvc2l0aXZlIGluY3JlbWVudCB3aWxsIGxvd2VyIHRoZSBwcmlvcml0eSBvZiB0aGUKICogY3VycmVudCBwcm9jZXNzLCB3aGVyZWFzIGEgbmVnYXRpdmUgaW5jcmVtZW50CiAqIHdpbGwgcmFpc2UgdGhlIHByaW9yaXR5LgogKgogKiBwcm9jX25pY2UgaXMgbm90IHJlbGF0ZWQgdG8KICogcHJvY19vcGVuIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbnMgaW4gYW55IHdheS4KICoKICogQHBhcmFtIGludCAkaW5jcmVtZW50IFRoZSBuZXcgcHJpb3JpdHkgdmFsdWUsIHRoZSB2YWx1ZSBvZiB0aGlzIG1heSBkaWZmZXIgb24gcGxhdGZvcm1zLgogKgogKiBPbiBVbml4LCBhIGxvdyB2YWx1ZSwgc3VjaCBhcyAtMjAgbWVhbnMgaGlnaCBwcmlvcml0eQogKiB3aGVyYXMgYSBwb3NpdGl2ZSB2YWx1ZSBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCiAqCiAqIEZvciBXaW5kb3dzIHRoZSBpbmNyZW1lbnQgcGFyYW1ldGVyIGhhdmUgdGhlCiAqIGZvbGxvd2luZyBtZWFuaW5nczoKICogQHRocm93cyBFeGVjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwcm9jX25pY2UoaW50ICRpbmNyZW1lbnQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJvY19uaWNlKCRpbmNyZW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXhlY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc3lzdGVtIGlzIGp1c3QgbGlrZSB0aGUgQyB2ZXJzaW9uIG9mIHRoZQogKiBmdW5jdGlvbiBpbiB0aGF0IGl0IGV4ZWN1dGVzIHRoZSBnaXZlbgogKiBjb21tYW5kIGFuZCBvdXRwdXRzIHRoZSByZXN1bHQuCiAqCiAqIFRoZSBzeXN0ZW0gY2FsbCBhbHNvIHRyaWVzIHRvIGF1dG9tYXRpY2FsbHkKICogZmx1c2ggdGhlIHdlYiBzZXJ2ZXIncyBvdXRwdXQgYnVmZmVyIGFmdGVyIGVhY2ggbGluZSBvZiBvdXRwdXQgaWYKICogUEhQIGlzIHJ1bm5pbmcgYXMgYSBzZXJ2ZXIgbW9kdWxlLgogKgogKiBJZiB5b3UgbmVlZCB0byBleGVjdXRlIGEgY29tbWFuZCBhbmQgaGF2ZSBhbGwgdGhlIGRhdGEgZnJvbSB0aGUKICogY29tbWFuZCBwYXNzZWQgZGlyZWN0bHkgYmFjayB3aXRob3V0IGFueSBpbnRlcmZlcmVuY2UsIHVzZSB0aGUKICogcGFzc3RocnUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmQgVGhlIGNvbW1hbmQgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLgogKiBAcGFyYW0gaW50ICRyZXR1cm5fdmFyIElmIHRoZSByZXR1cm5fdmFyIGFyZ3VtZW50IGlzIHByZXNlbnQsIHRoZW4gdGhlCiAqIHJldHVybiBzdGF0dXMgb2YgdGhlIGV4ZWN1dGVkIGNvbW1hbmQgd2lsbCBiZSB3cml0dGVuIHRvIHRoaXMKICogdmFyaWFibGUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGxhc3QgbGluZSBvZiB0aGUgY29tbWFuZCBvdXRwdXQgb24gc3VjY2Vzcy4KICogQHRocm93cyBFeGVjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzeXN0ZW0oc3RyaW5nICRjb21tYW5kLCBpbnQgJiRyZXR1cm5fdmFyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN5c3RlbSgkY29tbWFuZCwgJHJldHVybl92YXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRXhlY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/fileinfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlaW5mb0V4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyB0aGUgcmVzb3VyY2Ugb3BlbmVkIGJ5IGZpbmZvX29wZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZmluZm8gRmlsZWluZm8gcmVzb3VyY2UgcmV0dXJuZWQgYnkgZmluZm9fb3Blbi4KICogQHRocm93cyBGaWxlaW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmluZm9fY2xvc2UoJGZpbmZvKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbmZvX2Nsb3NlKCRmaW5mbyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlaW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUHJvY2VkdXJhbCBzdHlsZQogKgogKiBPYmplY3Qgb3JpZW50ZWQgc3R5bGUgKGNvbnN0cnVjdG9yKToKICoKICogVGhpcyBmdW5jdGlvbiBvcGVucyBhIG1hZ2ljIGRhdGFiYXNlIGFuZCByZXR1cm5zIGl0cyByZXNvdXJjZS4KICoKICogQHBhcmFtIGludCAkb3B0aW9ucyBPbmUgb3IgZGlzanVuY3Rpb24gb2YgbW9yZSBGaWxlaW5mbwogKiBjb25zdGFudHMuCiAqIEBwYXJhbSBzdHJpbmcgJG1hZ2ljX2ZpbGUgTmFtZSBvZiBhIG1hZ2ljIGRhdGFiYXNlIGZpbGUsIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UKICogL3BhdGgvdG8vbWFnaWMubWltZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlCiAqIE1BR0lDIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQuIElmIHRoZQogKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpc24ndCBzZXQsIHRoZW4gUEhQJ3MgYnVuZGxlZCBtYWdpYyBkYXRhYmFzZSB3aWxsCiAqIGJlIHVzZWQuCiAqCiAqIFBhc3NpbmcgTlVMTCBvciBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0CiAqIHZhbHVlLgogKiBAcmV0dXJuIHJlc291cmNlIChQcm9jZWR1cmFsIHN0eWxlIG9ubHkpCiAqIFJldHVybnMgYSBtYWdpYyBkYXRhYmFzZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEZpbGVpbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaW5mb19vcGVuKGludCAkb3B0aW9ucyA9IEZJTEVJTkZPX05PTkUsIHN0cmluZyAkbWFnaWNfZmlsZSA9ICIiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbmZvX29wZW4oJG9wdGlvbnMsICRtYWdpY19maWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVpbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIE1JTUUgY29udGVudCB0eXBlIGZvciBhIGZpbGUgYXMgZGV0ZXJtaW5lZCBieSB1c2luZwogKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYWdpYy5taW1lIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIHRlc3RlZCBmaWxlLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjb250ZW50IHR5cGUgaW4gTUlNRSBmb3JtYXQsIGxpa2UKICogdGV4dC9wbGFpbiBvciBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0uCiAqIEB0aHJvd3MgRmlsZWluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1pbWVfY29udGVudF90eXBlKHN0cmluZyAkZmlsZW5hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtaW1lX2NvbnRlbnRfdHlwZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZWluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/filesystem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwoKLyoqCiAqIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgZ3JvdXAgb2YgdGhlIGZpbGUgZmlsZW5hbWUKICogdG8gZ3JvdXAuCiAqCiAqIE9ubHkgdGhlIHN1cGVydXNlciBtYXkgY2hhbmdlIHRoZSBncm91cCBvZiBhIGZpbGUgYXJiaXRyYXJpbHk7IG90aGVyIHVzZXJzCiAqIG1heSBjaGFuZ2UgdGhlIGdyb3VwIG9mIGEgZmlsZSB0byBhbnkgZ3JvdXAgb2Ygd2hpY2ggdGhhdCB1c2VyIGlzIGEgbWVtYmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gc3RyaW5nfGludCAkZ3JvdXAgQSBncm91cCBuYW1lIG9yIG51bWJlci4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjaGdycChzdHJpbmcgJGZpbGVuYW1lLCAkZ3JvdXApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2hncnAoJGZpbGVuYW1lLCAkZ3JvdXApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBtb2RlIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSB0byB0aGF0IGdpdmVuIGluCiAqIG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgTm90ZSB0aGF0IG1vZGUgaXMgbm90IGF1dG9tYXRpY2FsbHkKICogYXNzdW1lZCB0byBiZSBhbiBvY3RhbCB2YWx1ZSwgc28gdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBvcGVyYXRpb24sCiAqIHlvdSBuZWVkIHRvIHByZWZpeCBtb2RlIHdpdGggYSB6ZXJvICgwKS4KICogU3RyaW5ncyBzdWNoIGFzICJnK3ciIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuCiAqCiAqCiAqCiAqCiAqIF1dPgogKgogKgogKgogKiBUaGUgbW9kZSBwYXJhbWV0ZXIgY29uc2lzdHMgb2YgdGhyZWUgb2N0YWwKICogbnVtYmVyIGNvbXBvbmVudHMgc3BlY2lmeWluZyBhY2Nlc3MgcmVzdHJpY3Rpb25zIGZvciB0aGUgb3duZXIsCiAqIHRoZSB1c2VyIGdyb3VwIGluIHdoaWNoIHRoZSBvd25lciBpcyBpbiwgYW5kIHRvIGV2ZXJ5Ym9keSBlbHNlIGluCiAqIHRoaXMgb3JkZXIuIE9uZSBjb21wb25lbnQgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB1cCB0aGUgbmVlZGVkCiAqIHBlcm1pc3Npb25zIGZvciB0aGF0IHRhcmdldCB1c2VyIGJhc2UuIE51bWJlciAxIG1lYW5zIHRoYXQgeW91CiAqIGdyYW50IGV4ZWN1dGUgcmlnaHRzLCBudW1iZXIgMiBtZWFucyB0aGF0IHlvdSBtYWtlIHRoZSBmaWxlCiAqIHdyaXRlYWJsZSwgbnVtYmVyIDQgbWVhbnMgdGhhdCB5b3UgbWFrZSB0aGUgZmlsZSByZWFkYWJsZS4gQWRkCiAqIHVwIHRoZXNlIG51bWJlcnMgdG8gc3BlY2lmeSBuZWVkZWQgcmlnaHRzLiBZb3UgY2FuIGFsc28gcmVhZCBtb3JlCiAqIGFib3V0IG1vZGVzIG9uIFVuaXggc3lzdGVtcyB3aXRoICdtYW4gMSBjaG1vZCcKICogYW5kICdtYW4gMiBjaG1vZCcuCiAqCiAqCiAqCiAqCiAqLwpmdW5jdGlvbiBjaG1vZChzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJG1vZGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2htb2QoJGZpbGVuYW1lLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBdHRlbXB0cyB0byBjaGFuZ2UgdGhlIG93bmVyIG9mIHRoZSBmaWxlIGZpbGVuYW1lCiAqIHRvIHVzZXIgdXNlci4gT25seSB0aGUgc3VwZXJ1c2VyIG1heSBjaGFuZ2UgdGhlCiAqIG93bmVyIG9mIGEgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZ3xpbnQgJHVzZXIgQSB1c2VyIG5hbWUgb3IgbnVtYmVyLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNob3duKHN0cmluZyAkZmlsZW5hbWUsICR1c2VyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNob3duKCRmaWxlbmFtZSwgJHVzZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYSBjb3B5IG9mIHRoZSBmaWxlIHNvdXJjZSB0bwogKiBkZXN0LgogKgogKiBJZiB5b3Ugd2lzaCB0byBtb3ZlIGEgZmlsZSwgdXNlIHRoZSByZW5hbWUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNvdXJjZSBQYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgZGVzdGluYXRpb24gcGF0aC4gSWYgZGVzdCBpcyBhIFVSTCwgdGhlCiAqIGNvcHkgb3BlcmF0aW9uIG1heSBmYWlsIGlmIHRoZSB3cmFwcGVyIGRvZXMgbm90IHN1cHBvcnQgb3ZlcndyaXRpbmcgb2YKICogZXhpc3RpbmcgZmlsZXMuCiAqCiAqIElmIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgQSB2YWxpZCBjb250ZXh0IHJlc291cmNlIGNyZWF0ZWQgd2l0aAogKiBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29weShzdHJpbmcgJHNvdXJjZSwgc3RyaW5nICRkZXN0LCAkY29udGV4dCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcY29weSgkc291cmNlLCAkZGVzdCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGNvcHkoJHNvdXJjZSwgJGRlc3QpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogR2l2ZW4gYSBzdHJpbmcgY29udGFpbmluZyBhIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUKICogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBvbiB0aGUgY29ycmVzcG9uZGluZyBmaWxlc3lzdGVtIG9yIGRpc2sKICogcGFydGl0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgQSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGVzeXN0ZW0gb3IgZGlzayBwYXJ0aXRpb24uCiAqCiAqIEdpdmVuIGEgZmlsZSBuYW1lIGluc3RlYWQgb2YgYSBkaXJlY3RvcnksIHRoZSBiZWhhdmlvdXIgb2YgdGhlCiAqIGZ1bmN0aW9uIGlzIHVuc3BlY2lmaWVkIGFuZCBtYXkgZGlmZmVyIGJldHdlZW4gb3BlcmF0aW5nIHN5c3RlbXMgYW5kCiAqIFBIUCB2ZXJzaW9ucy4KICogQHJldHVybiBmbG9hdCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJ5dGVzIGFzIGEgZmxvYXQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGlza19mcmVlX3NwYWNlKHN0cmluZyAkZGlyZWN0b3J5KTogZmxvYXQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkaXNrX2ZyZWVfc3BhY2UoJGRpcmVjdG9yeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkaXJlY3RvcnksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHRvdGFsCiAqIG51bWJlciBvZiBieXRlcyBvbiB0aGUgY29ycmVzcG9uZGluZyBmaWxlc3lzdGVtIG9yIGRpc2sgcGFydGl0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkgQSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGVzeXN0ZW0gb3IgZGlzayBwYXJ0aXRpb24uCiAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFzIGEgZmxvYXQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGlza190b3RhbF9zcGFjZShzdHJpbmcgJGRpcmVjdG9yeSk6IGZsb2F0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGlza190b3RhbF9zcGFjZSgkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGZpbGUgcG9pbnRlZCB0byBieSBoYW5kbGUgaXMgY2xvc2VkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhhbmRsZSBUaGUgZmlsZSBwb2ludGVyIG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZSBzdWNjZXNzZnVsbHkKICogb3BlbmVkIGJ5IGZvcGVuIG9yIGZzb2Nrb3Blbi4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmY2xvc2UoJGhhbmRsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmY2xvc2UoJGhhbmRsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyBhIHdyaXRlIG9mIGFsbCBidWZmZXJlZCBvdXRwdXQgdG8gdGhlIHJlc291cmNlCiAqIHBvaW50ZWQgdG8gYnkgdGhlIGZpbGUgaGFuZGxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhhbmRsZSBUaGUgZmlsZSBwb2ludGVyIG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvCiAqIGEgZmlsZSBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGZvcGVuIG9yCiAqIGZzb2Nrb3BlbiAoYW5kIG5vdCB5ZXQgY2xvc2VkIGJ5CiAqIGZjbG9zZSkuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmZsdXNoKCRoYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmZsdXNoKCRoYW5kbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGZpbGUsIGV4Y2VwdCB0aGF0CiAqIGZpbGVfZ2V0X2NvbnRlbnRzIHJldHVybnMgdGhlIGZpbGUgaW4gYQogKiBzdHJpbmcsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CiAqIHVwIHRvIG1heGxlbiBieXRlcy4gT24gZmFpbHVyZSwKICogZmlsZV9nZXRfY29udGVudHMgd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIGZpbGVfZ2V0X2NvbnRlbnRzIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIHJlYWQgdGhlCiAqIGNvbnRlbnRzIG9mIGEgZmlsZSBpbnRvIGEgc3RyaW5nLiAgSXQgd2lsbCB1c2UgbWVtb3J5IG1hcHBpbmcgdGVjaG5pcXVlcyBpZgogKiBzdXBwb3J0ZWQgYnkgeW91ciBPUyB0byBlbmhhbmNlIHBlcmZvcm1hbmNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBOYW1lIG9mIHRoZSBmaWxlIHRvIHJlYWQuCiAqIEBwYXJhbSBib29sICR1c2VfaW5jbHVkZV9wYXRoIFRoZSBGSUxFX1VTRV9JTkNMVURFX1BBVEggY29uc3RhbnQgY2FuIGJlIHVzZWQKICogdG8gdHJpZ2dlciBpbmNsdWRlIHBhdGgKICogc2VhcmNoLgogKiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBpZiBzdHJpY3QgdHlwaW5nCiAqIGlzIGVuYWJsZWQsIHNpbmNlIEZJTEVfVVNFX0lOQ0xVREVfUEFUSCBpcyBhbgogKiBpbnQuIFVzZSBUUlVFIGluc3RlYWQuCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRjb250ZXh0IEEgdmFsaWQgY29udGV4dCByZXNvdXJjZSBjcmVhdGVkIHdpdGgKICogc3RyZWFtX2NvbnRleHRfY3JlYXRlLiBJZiB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgYQogKiBjdXN0b20gY29udGV4dCwgeW91IGNhbiBza2lwIHRoaXMgcGFyYW1ldGVyIGJ5IE5VTEwuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSByZWFkaW5nIHN0YXJ0cyBvbiB0aGUgb3JpZ2luYWwgc3RyZWFtLgogKiBOZWdhdGl2ZSBvZmZzZXRzIGNvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogKgogKiBTZWVraW5nIChvZmZzZXQpIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsZXMuCiAqIEF0dGVtcHRpbmcgdG8gc2VlayBvbiBub24tbG9jYWwgZmlsZXMgbWF5IHdvcmsgd2l0aCBzbWFsbCBvZmZzZXRzLCBidXQgdGhpcwogKiBpcyB1bnByZWRpY3RhYmxlIGJlY2F1c2UgaXQgd29ya3Mgb24gdGhlIGJ1ZmZlcmVkIHN0cmVhbS4KICogQHBhcmFtIGludCAkbWF4bGVuIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgcmVhZC4gVGhlIGRlZmF1bHQgaXMgdG8gcmVhZCB1bnRpbCBlbmQKICogb2YgZmlsZSBpcyByZWFjaGVkLiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgYXBwbGllZCB0byB0aGUKICogc3RyZWFtIHByb2Nlc3NlZCBieSB0aGUgZmlsdGVycy4KICogQHJldHVybiBzdHJpbmcgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYWQgZGF0YS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlX2dldF9jb250ZW50cyhzdHJpbmcgJGZpbGVuYW1lLCBib29sICR1c2VfaW5jbHVkZV9wYXRoID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCwgaW50ICRvZmZzZXQgPSAwLCBpbnQgJG1heGxlbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRtYXhsZW4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgsICRjb250ZXh0LCAkb2Zmc2V0LCAkbWF4bGVuKTsKICAgIH0gZWxzZWlmICgkb2Zmc2V0ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUsICR1c2VfaW5jbHVkZV9wYXRoLCAkY29udGV4dCwgJG9mZnNldCk7CiAgICB9IGVsc2VpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUsICR1c2VfaW5jbHVkZV9wYXRoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gY2FsbGluZyBmb3BlbiwKICogZndyaXRlIGFuZCBmY2xvc2Ugc3VjY2Vzc2l2ZWx5CiAqIHRvIHdyaXRlIGRhdGEgdG8gYSBmaWxlLgogKgogKiBJZiBmaWxlbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIGZpbGUgaXMgY3JlYXRlZC4KICogT3RoZXJ3aXNlLCB0aGUgZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbiwgdW5sZXNzIHRoZQogKiBGSUxFX0FQUEVORCBmbGFnIGlzIHNldC4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0byB3cml0ZSB0aGUgZGF0YS4KICogQHBhcmFtIG1peGVkICRkYXRhIFRoZSBkYXRhIHRvIHdyaXRlLiBDYW4gYmUgZWl0aGVyIGEgc3RyaW5nLCBhbgogKiBhcnJheSBvciBhIHN0cmVhbSByZXNvdXJjZS4KICoKICogSWYgZGF0YSBpcyBhIHN0cmVhbSByZXNvdXJjZSwgdGhlCiAqIHJlbWFpbmluZyBidWZmZXIgb2YgdGhhdCBzdHJlYW0gd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgogKiBUaGlzIGlzIHNpbWlsYXIgd2l0aCB1c2luZyBzdHJlYW1fY29weV90b19zdHJlYW0uCiAqCiAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBkYXRhIHBhcmFtZXRlciBhcyBhIHNpbmdsZQogKiBkaW1lbnNpb24gYXJyYXkuIFRoaXMgaXMgZXF1aXZhbGVudCB0bwogKiBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsIGltcGxvZGUoJycsICRhcnJheSkpLgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgdmFsdWUgb2YgZmxhZ3MgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICoKICoKICogQXZhaWxhYmxlIGZsYWdzCiAqCiAqCiAqCiAqIEZsYWcKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICoKICogRklMRV9VU0VfSU5DTFVERV9QQVRICiAqCiAqCiAqIFNlYXJjaCBmb3IgZmlsZW5hbWUgaW4gdGhlIGluY2x1ZGUgZGlyZWN0b3J5LgogKiBTZWUgaW5jbHVkZV9wYXRoIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uLgogKgogKgogKgogKgogKiBGSUxFX0FQUEVORAogKgogKgogKiBJZiBmaWxlIGZpbGVuYW1lIGFscmVhZHkgZXhpc3RzLCBhcHBlbmQKICogdGhlIGRhdGEgdG8gdGhlIGZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC4KICoKICoKICoKICoKICogTE9DS19FWAogKgogKgogKiBBY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBmaWxlIHdoaWxlIHByb2NlZWRpbmcgdG8gdGhlCiAqIHdyaXRpbmcuIEluIG90aGVyIHdvcmRzLCBhIGZsb2NrIGNhbGwgaGFwcGVucwogKiBiZXR3ZWVuIHRoZSBmb3BlbiBjYWxsIGFuZCB0aGUKICogZndyaXRlIGNhbGwuIFRoaXMgaXMgbm90IGlkZW50aWNhbCB0byBhbgogKiBmb3BlbiBjYWxsIHdpdGggbW9kZSAieCIuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIHZhbGlkIGNvbnRleHQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoCiAqIHN0cmVhbV9jb250ZXh0X2NyZWF0ZS4KICogQHJldHVybiBpbnQgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZXJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoc3RyaW5nICRmaWxlbmFtZSwgJGRhdGEsIGludCAkZmxhZ3MgPSAwLCAkY29udGV4dCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRkYXRhLCAkZmxhZ3MsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRkYXRhLCAkZmxhZ3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyBhbiBlbnRpcmUgZmlsZSBpbnRvIGFuIGFycmF5LgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGZsYWdzIGNhbiBiZSBvbmUsIG9yCiAqIG1vcmUsIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKgogKiBGSUxFX1VTRV9JTkNMVURFX1BBVEgKICoKICoKICoKICogU2VhcmNoIGZvciB0aGUgZmlsZSBpbiB0aGUgaW5jbHVkZV9wYXRoLgogKgogKgogKgogKgogKgogKiBGSUxFX0lHTk9SRV9ORVdfTElORVMKICoKICoKICoKICogT21pdCBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgZWFjaCBhcnJheSBlbGVtZW50CiAqCiAqCiAqCiAqCiAqCiAqIEZJTEVfU0tJUF9FTVBUWV9MSU5FUwogKgogKgogKgogKiBTa2lwIGVtcHR5IGxpbmVzCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dAogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIGZpbGUgaW4gYW4gYXJyYXkuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgY29ycmVzcG9uZHMgdG8gYQogKiBsaW5lIGluIHRoZSBmaWxlLCB3aXRoIHRoZSBuZXdsaW5lIHN0aWxsIGF0dGFjaGVkLiBVcG9uIGZhaWx1cmUsCiAqIGZpbGUgcmV0dXJucyBGQUxTRS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlKHN0cmluZyAkZmlsZW5hbWUsIGludCAkZmxhZ3MgPSAwLCAkY29udGV4dCA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbGUoJGZpbGVuYW1lLCAkZmxhZ3MsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmaWxlKCRmaWxlbmFtZSwgJGZsYWdzKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZC4KICogVGhlIHRpbWUgaXMgcmV0dXJuZWQgYXMgYSBVbml4IHRpbWVzdGFtcC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlYXRpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVhdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBpbm9kZSBjaGFuZ2UgdGltZSBvZiBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgY2hhbmdlZC4KICogVGhlIHRpbWUgaXMgcmV0dXJuZWQgYXMgYSBVbml4IHRpbWVzdGFtcC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlY3RpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVjdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBmaWxlIGlub2RlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBpbm9kZSBudW1iZXIgb2YgdGhlIGZpbGUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsZWlub2RlKHN0cmluZyAkZmlsZW5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmaWxlaW5vZGUoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lIHdoZW4gdGhlIGRhdGEgYmxvY2tzIG9mIGEgZmlsZSB3ZXJlIGJlaW5nCiAqIHdyaXR0ZW4gdG8sIHRoYXQgaXMsIHRoZSB0aW1lIHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgd2FzIGNoYW5nZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCiAqIFRoZSB0aW1lIGlzIHJldHVybmVkIGFzIGEgVW5peCB0aW1lc3RhbXAsIHdoaWNoIGlzCiAqIHN1aXRhYmxlIGZvciB0aGUgZGF0ZSBmdW5jdGlvbi4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlbXRpbWUoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVtdGltZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBmaWxlIG93bmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB1c2VyIElEIG9mIHRoZSBvd25lciBvZiB0aGUgZmlsZS4KICogVGhlIHVzZXIgSUQgaXMgcmV0dXJuZWQgaW4gbnVtZXJpY2FsIGZvcm1hdCwgdXNlCiAqIHBvc2l4X2dldHB3dWlkIHRvIHJlc29sdmUgaXQgdG8gYSB1c2VybmFtZS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmaWxlb3duZXIoc3RyaW5nICRmaWxlbmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZpbGVvd25lcigkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBzaXplIGZvciB0aGUgZ2l2ZW4gZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcywgb3IgRkFMU0UgKGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IKICogb2YgbGV2ZWwgRV9XQVJOSU5HKSBpbiBjYXNlIG9mIGFuIGVycm9yLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZpbGVzaXplKHN0cmluZyAkZmlsZW5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmaWxlc2l6ZSgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmbG9jayBhbGxvd3MgeW91IHRvIHBlcmZvcm0gYSBzaW1wbGUgcmVhZGVyL3dyaXRlcgogKiBtb2RlbCB3aGljaCBjYW4gYmUgdXNlZCBvbiB2aXJ0dWFsbHkgZXZlcnkgcGxhdGZvcm0gKGluY2x1ZGluZyBtb3N0IFVuaXgKICogZGVyaXZhdGl2ZXMgYW5kIGV2ZW4gV2luZG93cykuCiAqCiAqIE9uIHZlcnNpb25zIG9mIFBIUCBiZWZvcmUgNS4zLjIsIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGFsc28gYnkKICogZmNsb3NlICh3aGljaCBpcyBhbHNvIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gc2NyaXB0CiAqIGZpbmlzaGVkKS4KICoKICogUEhQIHN1cHBvcnRzIGEgcG9ydGFibGUgd2F5IG9mIGxvY2tpbmcgY29tcGxldGUgZmlsZXMgaW4gYW4gYWR2aXNvcnkgd2F5CiAqICh3aGljaCBtZWFucyBhbGwgYWNjZXNzaW5nIHByb2dyYW1zIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHdheSBvZiBsb2NraW5nCiAqIG9yIGl0IHdpbGwgbm90IHdvcmspLiBCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgdGhlCiAqIHJlcXVlc3RlZCBsb2NrIGlzIGFjcXVpcmVkOyB0aGlzIG1heSBiZSBjb250cm9sbGVkIHdpdGggdGhlIExPQ0tfTkIgb3B0aW9uIGRvY3VtZW50ZWQgYmVsb3cuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgZmlsZSBzeXN0ZW0gcG9pbnRlciByZXNvdXJjZQogKiB0aGF0IGlzIHR5cGljYWxseSBjcmVhdGVkIHVzaW5nIGZvcGVuLgogKiBAcGFyYW0gaW50ICRvcGVyYXRpb24gb3BlcmF0aW9uIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMT0NLX1NIIHRvIGFjcXVpcmUgYSBzaGFyZWQgbG9jayAocmVhZGVyKS4KICoKICoKICoKICoKICogTE9DS19FWCB0byBhY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrICh3cml0ZXIpLgogKgogKgogKgogKgogKiBMT0NLX1VOIHRvIHJlbGVhc2UgYSBsb2NrIChzaGFyZWQgb3IgZXhjbHVzaXZlKS4KICoKICoKICoKICoKICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhZGQgTE9DS19OQiBhcyBhIGJpdG1hc2sgdG8gb25lCiAqIG9mIHRoZSBhYm92ZSBvcGVyYXRpb25zLCBpZiBmbG9jayBzaG91bGQgbm90CiAqIGJsb2NrIGR1cmluZyB0aGUgbG9ja2luZyBhdHRlbXB0LgogKiBAcGFyYW0gaW50fG51bGwgJHdvdWxkYmxvY2sgVGhlIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlzIHNldCB0byAxIGlmIHRoZSBsb2NrIHdvdWxkIGJsb2NrCiAqIChFV09VTERCTE9DSyBlcnJubyBjb25kaXRpb24pLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZsb2NrKCRoYW5kbGUsIGludCAkb3BlcmF0aW9uLCA/aW50ICYkd291bGRibG9jayA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmxvY2soJGhhbmRsZSwgJG9wZXJhdGlvbiwgJHdvdWxkYmxvY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZm9wZW4gYmluZHMgYSBuYW1lZCByZXNvdXJjZSwgc3BlY2lmaWVkIGJ5CiAqIGZpbGVuYW1lLCB0byBhIHN0cmVhbS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgSWYgZmlsZW5hbWUgaXMgb2YgdGhlIGZvcm0gInNjaGVtZTovLy4uLiIsIGl0CiAqIGlzIGFzc3VtZWQgdG8gYmUgYSBVUkwgYW5kIFBIUCB3aWxsIHNlYXJjaCBmb3IgYSBwcm90b2NvbCBoYW5kbGVyCiAqIChhbHNvIGtub3duIGFzIGEgd3JhcHBlcikgZm9yIHRoYXQgc2NoZW1lLiBJZiBubyB3cmFwcGVycyBmb3IgdGhhdAogKiBwcm90b2NvbCBhcmUgcmVnaXN0ZXJlZCwgUEhQIHdpbGwgZW1pdCBhIG5vdGljZSB0byBoZWxwIHlvdSB0cmFjawogKiBwb3RlbnRpYWwgcHJvYmxlbXMgaW4geW91ciBzY3JpcHQgYW5kIHRoZW4gY29udGludWUgYXMgdGhvdWdoCiAqIGZpbGVuYW1lIHNwZWNpZmllcyBhIHJlZ3VsYXIgZmlsZS4KICoKICogSWYgUEhQIGhhcyBkZWNpZGVkIHRoYXQgZmlsZW5hbWUgc3BlY2lmaWVzCiAqIGEgbG9jYWwgZmlsZSwgdGhlbiBpdCB3aWxsIHRyeSB0byBvcGVuIGEgc3RyZWFtIG9uIHRoYXQgZmlsZS4KICogVGhlIGZpbGUgbXVzdCBiZSBhY2Nlc3NpYmxlIHRvIFBIUCwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQKICogdGhlIGZpbGUgYWNjZXNzIHBlcm1pc3Npb25zIGFsbG93IHRoaXMgYWNjZXNzLgogKiBJZiB5b3UgaGF2ZSBlbmFibGVkCiAqIG9wZW5fYmFzZWRpciBmdXJ0aGVyCiAqIHJlc3RyaWN0aW9ucyBtYXkgYXBwbHkuCiAqCiAqIElmIFBIUCBoYXMgZGVjaWRlZCB0aGF0IGZpbGVuYW1lIHNwZWNpZmllcwogKiBhIHJlZ2lzdGVyZWQgcHJvdG9jb2wsIGFuZCB0aGF0IHByb3RvY29sIGlzIHJlZ2lzdGVyZWQgYXMgYQogKiBuZXR3b3JrIFVSTCwgUEhQIHdpbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQKICogYWxsb3dfdXJsX2ZvcGVuIGlzCiAqIGVuYWJsZWQuIElmIGl0IGlzIHN3aXRjaGVkIG9mZiwgUEhQIHdpbGwgZW1pdCBhIHdhcm5pbmcgYW5kCiAqIHRoZSBmb3BlbiBjYWxsIHdpbGwgZmFpbC4KICoKICogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBjYW4gYmUgZm91bmQgaW4gLiBTb21lIHByb3RvY29scyAoYWxzbyByZWZlcnJlZCB0byBhcwogKiB3cmFwcGVycykgc3VwcG9ydCBjb250ZXh0CiAqIGFuZC9vciBwaHAuaW5pIG9wdGlvbnMuIFJlZmVyIHRvIHRoZSBzcGVjaWZpYyBwYWdlIGZvciB0aGUKICogcHJvdG9jb2wgaW4gdXNlIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucyB3aGljaCBjYW4gYmUgc2V0LiAoZS5nLgogKiBwaHAuaW5pIHZhbHVlIHVzZXJfYWdlbnQgdXNlZCBieSB0aGUKICogaHR0cCB3cmFwcGVyKS4KICoKICogT24gdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGJlIGNhcmVmdWwgdG8gZXNjYXBlIGFueSBiYWNrc2xhc2hlcwogKiB1c2VkIGluIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciB1c2UgZm9yd2FyZCBzbGFzaGVzLgogKgogKgogKgogKiBdXT4KICoKICoKICogQHBhcmFtIHN0cmluZyAkbW9kZSBUaGUgbW9kZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGFjY2VzcwogKiB5b3UgcmVxdWlyZSB0byB0aGUgc3RyZWFtLiAgSXQgbWF5IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKiBBIGxpc3Qgb2YgcG9zc2libGUgbW9kZXMgZm9yIGZvcGVuCiAqIHVzaW5nIG1vZGUKICoKICoKICoKICoKICogbW9kZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAncicKICoKICogT3BlbiBmb3IgcmVhZGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAqCiAqCiAqCiAqICdyKycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgogKgogKgogKgogKiAndycKICoKICogT3BlbiBmb3Igd3JpdGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHRvIHplcm8gbGVuZ3RoLgogKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuCiAqCiAqCiAqCiAqICd3KycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFuZCB0cnVuY2F0ZSB0aGUgZmlsZSB0byB6ZXJvCiAqIGxlbmd0aC4gIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBhdHRlbXB0IHRvIGNyZWF0ZSBpdC4KICoKICoKICoKICogJ2EnCiAqCiAqIE9wZW4gZm9yIHdyaXRpbmcgb25seTsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdCB0aGUgZW5kIG9mCiAqIHRoZSBmaWxlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuCiAqIEluIHRoaXMgbW9kZSwgZnNlZWsgaGFzIG5vIGVmZmVjdCwgd3JpdGVzIGFyZSBhbHdheXMgYXBwZW5kZWQuCiAqCiAqCiAqCiAqICdhKycKICoKICogT3BlbiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZzsgcGxhY2UgdGhlIGZpbGUgcG9pbnRlciBhdAogKiB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0bwogKiBjcmVhdGUgaXQuIEluIHRoaXMgbW9kZSwgZnNlZWsgb25seSBhZmZlY3RzCiAqIHRoZSByZWFkaW5nIHBvc2l0aW9uLCB3cml0ZXMgYXJlIGFsd2F5cyBhcHBlbmRlZC4KICoKICoKICoKICogJ3gnCiAqCiAqIENyZWF0ZSBhbmQgb3BlbiBmb3Igd3JpdGluZyBvbmx5OyBwbGFjZSB0aGUgZmlsZSBwb2ludGVyIGF0IHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlCiAqIGZvcGVuIGNhbGwgd2lsbCBmYWlsIGJ5IHJldHVybmluZyBGQUxTRSBhbmQKICogZ2VuZXJhdGluZyBhbiBlcnJvciBvZiBsZXZlbCBFX1dBUk5JTkcuICBJZgogKiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuICBUaGlzIGlzIGVxdWl2YWxlbnQKICogdG8gc3BlY2lmeWluZyBPX0VYQ0x8T19DUkVBVCBmbGFncyBmb3IgdGhlCiAqIHVuZGVybHlpbmcgb3BlbigyKSBzeXN0ZW0gY2FsbC4KICoKICoKICoKICogJ3grJwogKgogKiBDcmVhdGUgYW5kIG9wZW4gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmc7IG90aGVyd2lzZSBpdCBoYXMgdGhlCiAqIHNhbWUgYmVoYXZpb3IgYXMgJ3gnLgogKgogKgogKgogKiAnYycKICoKICogT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZyBvbmx5LiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMKICogY3JlYXRlZC4gSWYgaXQgZXhpc3RzLCBpdCBpcyBuZWl0aGVyIHRydW5jYXRlZCAoYXMgb3Bwb3NlZCB0bwogKiAndycpLCBub3IgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmYWlscyAoYXMgaXMKICogdGhlIGNhc2Ugd2l0aCAneCcpLiBUaGUgZmlsZSBwb2ludGVyIGlzCiAqIHBvc2l0aW9uZWQgb24gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGl0J3MKICogZGVzaXJlZCB0byBnZXQgYW4gYWR2aXNvcnkgbG9jayAoc2VlIGZsb2NrKQogKiBiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlIGZpbGUsIGFzIHVzaW5nCiAqICd3JyBjb3VsZCB0cnVuY2F0ZSB0aGUgZmlsZSBiZWZvcmUgdGhlIGxvY2sKICogd2FzIG9idGFpbmVkIChpZiB0cnVuY2F0aW9uIGlzIGRlc2lyZWQsCiAqIGZ0cnVuY2F0ZSBjYW4gYmUgdXNlZCBhZnRlciB0aGUgbG9jayBpcwogKiByZXF1ZXN0ZWQpLgogKgogKgogKgogKiAnYysnCiAqCiAqIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmc7IG90aGVyd2lzZSBpdCBoYXMgdGhlIHNhbWUKICogYmVoYXZpb3IgYXMgJ2MnLgogKgogKgogKgogKiAnZScKICoKICogU2V0IGNsb3NlLW9uLWV4ZWMgZmxhZyBvbiB0aGUgb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4gT25seQogKiBhdmFpbGFibGUgaW4gUEhQIGNvbXBpbGVkIG9uIFBPU0lYLjEtMjAwOCBjb25mb3JtIHN5c3RlbXMuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIERpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtIGZhbWlsaWVzIGhhdmUgZGlmZmVyZW50IGxpbmUtZW5kaW5nCiAqIGNvbnZlbnRpb25zLiAgV2hlbiB5b3Ugd3JpdGUgYSB0ZXh0IGZpbGUgYW5kIHdhbnQgdG8gaW5zZXJ0IGEgbGluZQogKiBicmVhaywgeW91IG5lZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGxpbmUtZW5kaW5nIGNoYXJhY3RlcihzKSBmb3IgeW91cgogKiBvcGVyYXRpbmcgc3lzdGVtLiAgVW5peCBiYXNlZCBzeXN0ZW1zIHVzZSBcbiBhcyB0aGUKICogbGluZSBlbmRpbmcgY2hhcmFjdGVyLCBXaW5kb3dzIGJhc2VkIHN5c3RlbXMgdXNlIFxyXG4KICogYXMgdGhlIGxpbmUgZW5kaW5nIGNoYXJhY3RlcnMgYW5kIE1hY2ludG9zaCBiYXNlZCBzeXN0ZW1zIChNYWMgT1MgQ2xhc3NpYykgdXNlZAogKiBcciBhcyB0aGUgbGluZSBlbmRpbmcgY2hhcmFjdGVyLgogKgogKiBJZiB5b3UgdXNlIHRoZSB3cm9uZyBsaW5lIGVuZGluZyBjaGFyYWN0ZXJzIHdoZW4gd3JpdGluZyB5b3VyIGZpbGVzLCB5b3UKICogbWlnaHQgZmluZCB0aGF0IG90aGVyIGFwcGxpY2F0aW9ucyB0aGF0IG9wZW4gdGhvc2UgZmlsZXMgd2lsbCAibG9vawogKiBmdW5ueSIuCiAqCiAqIFdpbmRvd3Mgb2ZmZXJzIGEgdGV4dC1tb2RlIHRyYW5zbGF0aW9uIGZsYWcgKCd0JykKICogd2hpY2ggd2lsbCB0cmFuc3BhcmVudGx5IHRyYW5zbGF0ZSBcbiB0bwogKiBcclxuIHdoZW4gd29ya2luZyB3aXRoIHRoZSBmaWxlLiAgSW4gY29udHJhc3QsIHlvdQogKiBjYW4gYWxzbyB1c2UgJ2InIHRvIGZvcmNlIGJpbmFyeSBtb2RlLCB3aGljaCB3aWxsIG5vdAogKiB0cmFuc2xhdGUgeW91ciBkYXRhLiAgVG8gdXNlIHRoZXNlIGZsYWdzLCBzcGVjaWZ5IGVpdGhlcgogKiAnYicgb3IgJ3QnIGFzIHRoZSBsYXN0IGNoYXJhY3RlcgogKiBvZiB0aGUgbW9kZSBwYXJhbWV0ZXIuCiAqCiAqIFRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uIG1vZGUgaXMgJ2InLgogKiBZb3UgY2FuIHVzZSB0aGUgJ3QnCiAqIG1vZGUgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggcGxhaW4tdGV4dCBmaWxlcyBhbmQgeW91IHVzZQogKiBcbiB0byBkZWxpbWl0IHlvdXIgbGluZSBlbmRpbmdzIGluIHlvdXIgc2NyaXB0LCBidXQKICogZXhwZWN0IHlvdXIgZmlsZXMgdG8gYmUgcmVhZGFibGUgd2l0aCBhcHBsaWNhdGlvbnMgc3VjaCBhcyBvbGQgdmVyc2lvbnMgb2Ygbm90ZXBhZC4gIFlvdQogKiBzaG91bGQgdXNlIHRoZSAnYicgaW4gYWxsIG90aGVyIGNhc2VzLgogKgogKiBJZiB5b3Ugc3BlY2lmeSB0aGUgJ3QnIGZsYWcgd2hlbiB3b3JraW5nIHdpdGggYmluYXJ5IGZpbGVzLCB5b3UKICogbWF5IGV4cGVyaWVuY2Ugc3RyYW5nZSBwcm9ibGVtcyB3aXRoIHlvdXIgZGF0YSwgaW5jbHVkaW5nIGJyb2tlbiBpbWFnZQogKiBmaWxlcyBhbmQgc3RyYW5nZSBwcm9ibGVtcyB3aXRoIFxyXG4gY2hhcmFjdGVycy4KICoKICogRm9yIHBvcnRhYmlsaXR5LCBpdCBpcyBhbHNvIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQKICogeW91IHJlLXdyaXRlIGNvZGUgdGhhdCB1c2VzIG9yIHJlbGllcyB1cG9uIHRoZSAndCcKICogbW9kZSBzbyB0aGF0IGl0IHVzZXMgdGhlIGNvcnJlY3QgbGluZSBlbmRpbmdzIGFuZAogKiAnYicgbW9kZSBpbnN0ZWFkLgogKiBAcGFyYW0gYm9vbCAkdXNlX2luY2x1ZGVfcGF0aCBUaGUgb3B0aW9uYWwgdGhpcmQgdXNlX2luY2x1ZGVfcGF0aCBwYXJhbWV0ZXIKICogY2FuIGJlIHNldCB0byAnMScgb3IgVFJVRSBpZiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZQogKiBpbmNsdWRlX3BhdGgsIHRvby4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGZpbGUgcG9pbnRlciByZXNvdXJjZSBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZm9wZW4oc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlLCBib29sICR1c2VfaW5jbHVkZV9wYXRoID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxmb3BlbigkZmlsZW5hbWUsICRtb2RlLCAkdXNlX2luY2x1ZGVfcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZvcGVuKCRmaWxlbmFtZSwgJG1vZGUsICR1c2VfaW5jbHVkZV9wYXRoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZnB1dGNzdiBmb3JtYXRzIGEgbGluZSAocGFzc2VkIGFzIGEKICogZmllbGRzIGFycmF5KSBhcyBDU1YgYW5kIHdyaXRlcyBpdCAodGVybWluYXRlZCBieSBhCiAqIG5ld2xpbmUpIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBoYW5kbGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgYW5kIG11c3QgcG9pbnQgdG8KICogYSBmaWxlIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgZm9wZW4gb3IKICogZnNvY2tvcGVuIChhbmQgbm90IHlldCBjbG9zZWQgYnkKICogZmNsb3NlKS4KICogQHBhcmFtIGFycmF5ICRmaWVsZHMgQW4gYXJyYXkgb2Ygc3RyaW5ncy4KICogQHBhcmFtIHN0cmluZyAkZGVsaW1pdGVyIFRoZSBvcHRpb25hbCBkZWxpbWl0ZXIgcGFyYW1ldGVyIHNldHMgdGhlIGZpZWxkCiAqIGRlbGltaXRlciAob25lIGNoYXJhY3RlciBvbmx5KS4KICogQHBhcmFtIHN0cmluZyAkZW5jbG9zdXJlIFRoZSBvcHRpb25hbCBlbmNsb3N1cmUgcGFyYW1ldGVyIHNldHMgdGhlIGZpZWxkCiAqIGVuY2xvc3VyZSAob25lIGNoYXJhY3RlciBvbmx5KS4KICogQHBhcmFtIHN0cmluZyAkZXNjYXBlX2NoYXIgVGhlIG9wdGlvbmFsIGVzY2FwZV9jaGFyIHBhcmFtZXRlciBzZXRzIHRoZQogKiBlc2NhcGUgY2hhcmFjdGVyIChhdCBtb3N0IG9uZSBjaGFyYWN0ZXIpLgogKiBBbiBlbXB0eSBzdHJpbmcgKCIiKSBkaXNhYmxlcyB0aGUgcHJvcHJpZXRhcnkgZXNjYXBlIG1lY2hhbmlzbS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB3cml0dGVuIHN0cmluZy4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmcHV0Y3N2KCRoYW5kbGUsIGFycmF5ICRmaWVsZHMsIHN0cmluZyAkZGVsaW1pdGVyID0gIiwiLCBzdHJpbmcgJGVuY2xvc3VyZSA9ICciJywgc3RyaW5nICRlc2NhcGVfY2hhciA9ICJcXCIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmcHV0Y3N2KCRoYW5kbGUsICRmaWVsZHMsICRkZWxpbWl0ZXIsICRlbmNsb3N1cmUsICRlc2NhcGVfY2hhcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGZyZWFkIHJlYWRzIHVwIHRvCiAqIGxlbmd0aCBieXRlcyBmcm9tIHRoZSBmaWxlIHBvaW50ZXIKICogcmVmZXJlbmNlZCBieSBoYW5kbGUuIFJlYWRpbmcgc3RvcHMgYXMgc29vbiBhcyBvbmUKICogb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIG1ldDoKICoKICoKICoKICogbGVuZ3RoIGJ5dGVzIGhhdmUgYmVlbiByZWFkCiAqCiAqCiAqCiAqCiAqIEVPRiAoZW5kIG9mIGZpbGUpIGlzIHJlYWNoZWQKICoKICoKICoKICoKICogYSBwYWNrZXQgYmVjb21lcyBhdmFpbGFibGUgb3IgdGhlCiAqIHNvY2tldCB0aW1lb3V0IG9jY3VycyAoZm9yIG5ldHdvcmsgc3RyZWFtcykKICoKICoKICoKICoKICogaWYgdGhlIHN0cmVhbSBpcyByZWFkIGJ1ZmZlcmVkIGFuZCBpdCBkb2VzIG5vdCByZXByZXNlbnQgYSBwbGFpbiBmaWxlLCBhdAogKiBtb3N0IG9uZSByZWFkIG9mIHVwIHRvIGEgbnVtYmVyIG9mIGJ5dGVzIGVxdWFsIHRvIHRoZSBjaHVuayBzaXplICh1c3VhbGx5CiAqIDgxOTIpIGlzIG1hZGU7IGRlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBidWZmZXJlZCBkYXRhLCB0aGUgc2l6ZSBvZiB0aGUKICogcmV0dXJuZWQgZGF0YSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGNodW5rIHNpemUuCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgZmlsZSBzeXN0ZW0gcG9pbnRlciByZXNvdXJjZQogKiB0aGF0IGlzIHR5cGljYWxseSBjcmVhdGVkIHVzaW5nIGZvcGVuLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVXAgdG8gbGVuZ3RoIG51bWJlciBvZiBieXRlcyByZWFkLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZWFkIHN0cmluZy4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmcmVhZCgkaGFuZGxlLCBpbnQgJGxlbmd0aCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZyZWFkKCRoYW5kbGUsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUYWtlcyB0aGUgZmlsZXBvaW50ZXIsIGhhbmRsZSwgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0bwogKiBsZW5ndGgsIHNpemUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIuCiAqCiAqIFRoZSBoYW5kbGUgbXVzdCBiZSBvcGVuIGZvciB3cml0aW5nLgogKiBAcGFyYW0gaW50ICRzaXplIFRoZSBzaXplIHRvIHRydW5jYXRlIHRvLgogKgogKiBJZiBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBmaWxlIHRoZW4gdGhlIGZpbGUKICogaXMgZXh0ZW5kZWQgd2l0aCBudWxsIGJ5dGVzLgogKgogKiBJZiBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlsZSB0aGVuIHRoZSBmaWxlCiAqIGlzIHRydW5jYXRlZCB0byB0aGF0IHNpemUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRydW5jYXRlKCRoYW5kbGUsIGludCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHJ1bmNhdGUoJGhhbmRsZSwgJHNpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQSBmaWxlIHN5c3RlbSBwb2ludGVyIHJlc291cmNlCiAqIHRoYXQgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgdXNpbmcgZm9wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KICogQHBhcmFtIGludCAkbGVuZ3RoIElmIHRoZSBsZW5ndGggYXJndW1lbnQgaXMgZ2l2ZW4sIHdyaXRpbmcgd2lsbAogKiBzdG9wIGFmdGVyIGxlbmd0aCBieXRlcyBoYXZlIGJlZW4gd3JpdHRlbiBvcgogKiB0aGUgZW5kIG9mIHN0cmluZyBpcyByZWFjaGVkLCB3aGljaGV2ZXIgY29tZXMKICogZmlyc3QuCiAqCiAqIE5vdGUgdGhhdCBpZiB0aGUgbGVuZ3RoIGFyZ3VtZW50IGlzIGdpdmVuLAogKiB0aGVuIHRoZSBtYWdpY19xdW90ZXNfcnVudGltZQogKiBjb25maWd1cmF0aW9uIG9wdGlvbiB3aWxsIGJlIGlnbm9yZWQgYW5kIG5vIHNsYXNoZXMgd2lsbCBiZQogKiBzdHJpcHBlZCBmcm9tIHN0cmluZy4KICogQHJldHVybiBpbnQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmd3JpdGUoJGhhbmRsZSwgc3RyaW5nICRzdHJpbmcsIGludCAkbGVuZ3RoID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxlbmd0aCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZndyaXRlKCRoYW5kbGUsICRzdHJpbmcsICRsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZ3cml0ZSgkaGFuZGxlLCAkc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGdsb2IgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFsbCB0aGUgcGF0aG5hbWVzCiAqIG1hdGNoaW5nIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBydWxlcyB1c2VkIGJ5CiAqIHRoZSBsaWJjIGdsb2IoKSBmdW5jdGlvbiwgd2hpY2ggaXMgc2ltaWxhciB0byB0aGUgcnVsZXMgdXNlZCBieSBjb21tb24KICogc2hlbGxzLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSBwYXR0ZXJuLiBObyB0aWxkZSBleHBhbnNpb24gb3IgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBpcyBkb25lLgogKgogKiBTcGVjaWFsIGNoYXJhY3RlcnM6CiAqCiAqCiAqCiAqICogLSBNYXRjaGVzIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKiA/IC0gTWF0Y2hlcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgKGFueSBjaGFyYWN0ZXIpLgogKgogKgogKgogKgogKiBbLi4uXSAtIE1hdGNoZXMgb25lIGNoYXJhY3RlciBmcm9tIGEgZ3JvdXAgb2YKICogY2hhcmFjdGVycy4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAhLAogKiBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgbm90IGluIHRoZSBncm91cC4KICoKICoKICoKICoKICogXCAtIEVzY2FwZXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIsCiAqIGV4Y2VwdCB3aGVuIHRoZSBHTE9CX05PRVNDQVBFIGZsYWcgaXMgdXNlZC4KICoKICoKICoKICogQHBhcmFtIGludCAkZmxhZ3MgVmFsaWQgZmxhZ3M6CiAqCiAqCiAqCiAqIEdMT0JfTUFSSyAtIEFkZHMgYSBzbGFzaCAoYSBiYWNrc2xhc2ggb24gV2luZG93cykgdG8gZWFjaCBkaXJlY3RvcnkgcmV0dXJuZWQKICoKICoKICoKICoKICogR0xPQl9OT1NPUlQgLSBSZXR1cm4gZmlsZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlCiAqIGRpcmVjdG9yeSAobm8gc29ydGluZykuIFdoZW4gdGhpcyBmbGFnIGlzIG5vdCB1c2VkLCB0aGUgcGF0aG5hbWVzIGFyZQogKiBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkKICoKICoKICoKICoKICogR0xPQl9OT0NIRUNLIC0gUmV0dXJuIHRoZSBzZWFyY2ggcGF0dGVybiBpZiBubwogKiBmaWxlcyBtYXRjaGluZyBpdCB3ZXJlIGZvdW5kCiAqCiAqCiAqCiAqCiAqIEdMT0JfTk9FU0NBUEUgLSBCYWNrc2xhc2hlcyBkbyBub3QgcXVvdGUKICogbWV0YWNoYXJhY3RlcnMKICoKICoKICoKICoKICogR0xPQl9CUkFDRSAtIEV4cGFuZHMge2EsYixjfSB0byBtYXRjaCAnYScsICdiJywKICogb3IgJ2MnCiAqCiAqCiAqCiAqCiAqIEdMT0JfT05MWURJUiAtIFJldHVybiBvbmx5IGRpcmVjdG9yeSBlbnRyaWVzCiAqIHdoaWNoIG1hdGNoIHRoZSBwYXR0ZXJuCiAqCiAqCiAqCiAqCiAqIEdMT0JfRVJSIC0gU3RvcCBvbiByZWFkIGVycm9ycyAobGlrZSB1bnJlYWRhYmxlCiAqIGRpcmVjdG9yaWVzKSwgYnkgZGVmYXVsdCBlcnJvcnMgYXJlIGlnbm9yZWQuCiAqCiAqCiAqCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBtYXRjaGVkIGZpbGVzL2RpcmVjdG9yaWVzLCBhbiBlbXB0eSBhcnJheQogKiBpZiBubyBmaWxlIG1hdGNoZWQuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2xvYihzdHJpbmcgJHBhdHRlcm4sIGludCAkZmxhZ3MgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbG9iKCRwYXR0ZXJuLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBdHRlbXB0cyB0byBjaGFuZ2UgdGhlIGdyb3VwIG9mIHRoZSBzeW1saW5rIGZpbGVuYW1lCiAqIHRvIGdyb3VwLgogKgogKiBPbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGNoYW5nZSB0aGUgZ3JvdXAgb2YgYSBzeW1saW5rIGFyYml0cmFyaWx5OyBvdGhlcgogKiB1c2VycyBtYXkgY2hhbmdlIHRoZSBncm91cCBvZiBhIHN5bWxpbmsgdG8gYW55IGdyb3VwIG9mIHdoaWNoIHRoYXQgdXNlciBpcwogKiBhIG1lbWJlci4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgc3ltbGluay4KICogQHBhcmFtIHN0cmluZ3xpbnQgJGdyb3VwIFRoZSBncm91cCBzcGVjaWZpZWQgYnkgbmFtZSBvciBudW1iZXIuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGNoZ3JwKHN0cmluZyAkZmlsZW5hbWUsICRncm91cCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsY2hncnAoJGZpbGVuYW1lLCAkZ3JvdXApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBvd25lciBvZiB0aGUgc3ltbGluayBmaWxlbmFtZQogKiB0byB1c2VyIHVzZXIuCiAqCiAqIE9ubHkgdGhlIHN1cGVydXNlciBtYXkgY2hhbmdlIHRoZSBvd25lciBvZiBhIHN5bWxpbmsuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmd8aW50ICR1c2VyIFVzZXIgbmFtZSBvciBudW1iZXIuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGNob3duKHN0cmluZyAkZmlsZW5hbWUsICR1c2VyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxjaG93bigkZmlsZW5hbWUsICR1c2VyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGxpbmsgY3JlYXRlcyBhIGhhcmQgbGluay4KICoKICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0IFRhcmdldCBvZiB0aGUgbGluay4KICogQHBhcmFtIHN0cmluZyAkbGluayBUaGUgbGluayBuYW1lLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxpbmsoc3RyaW5nICR0YXJnZXQsIHN0cmluZyAkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsaW5rKCR0YXJnZXQsICRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSBwYXRobmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgVGhlIGRpcmVjdG9yeSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSBtb2RlIGlzIDA3NzcgYnkgZGVmYXVsdCwgd2hpY2ggbWVhbnMgdGhlIHdpZGVzdCBwb3NzaWJsZQogKiBhY2Nlc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1vZGVzLCByZWFkIHRoZSBkZXRhaWxzCiAqIG9uIHRoZSBjaG1vZCBwYWdlLgogKgogKiBtb2RlIGlzIGlnbm9yZWQgb24gV2luZG93cy4KICoKICogTm90ZSB0aGF0IHlvdSBwcm9iYWJseSB3YW50IHRvIHNwZWNpZnkgdGhlIG1vZGUgYXMgYW4gb2N0YWwgbnVtYmVyLAogKiB3aGljaCBtZWFucyBpdCBzaG91bGQgaGF2ZSBhIGxlYWRpbmcgemVyby4gVGhlIG1vZGUgaXMgYWxzbyBtb2RpZmllZAogKiBieSB0aGUgY3VycmVudCB1bWFzaywgd2hpY2ggeW91IGNhbiBjaGFuZ2UgdXNpbmcKICogdW1hc2suCiAqIEBwYXJhbSBib29sICRyZWN1cnNpdmUgQWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBuZXN0ZWQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZQogKiBwYXRobmFtZS4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWtkaXIoc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlID0gMDc3NywgYm9vbCAkcmVjdXJzaXZlID0gZmFsc2UsICRjb250ZXh0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxta2RpcigkcGF0aG5hbWUsICRtb2RlLCAkcmVjdXJzaXZlLCAkY29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWtkaXIoJHBhdGhuYW1lLCAkbW9kZSwgJHJlY3Vyc2l2ZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwYXJzZV9pbmlfZmlsZSBsb2FkcyBpbiB0aGUKICogaW5pIGZpbGUgc3BlY2lmaWVkIGluIGZpbGVuYW1lLAogKiBhbmQgcmV0dXJucyB0aGUgc2V0dGluZ3MgaW4gaXQgaW4gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAqCiAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGluaSBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZSBwaHAuaW5pJ3MuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlbmFtZSBvZiB0aGUgaW5pIGZpbGUgYmVpbmcgcGFyc2VkLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMgdXNlZCwKICogaXQgaXMgZXZhbHVhdGVkIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCB0aGVuIHRoZQogKiBpbmNsdWRlX3BhdGguCiAqIEBwYXJhbSBib29sICRwcm9jZXNzX3NlY3Rpb25zIEJ5IHNldHRpbmcgdGhlIHByb2Nlc3Nfc2VjdGlvbnMKICogcGFyYW1ldGVyIHRvIFRSVUUsIHlvdSBnZXQgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LCB3aXRoCiAqIHRoZSBzZWN0aW9uIG5hbWVzIGFuZCBzZXR0aW5ncyBpbmNsdWRlZC4gVGhlIGRlZmF1bHQKICogZm9yIHByb2Nlc3Nfc2VjdGlvbnMgaXMgRkFMU0UKICogQHBhcmFtIGludCAkc2Nhbm5lcl9tb2RlIENhbiBlaXRoZXIgYmUgSU5JX1NDQU5ORVJfTk9STUFMIChkZWZhdWx0KSBvcgogKiBJTklfU0NBTk5FUl9SQVcuIElmIElOSV9TQ0FOTkVSX1JBVwogKiBpcyBzdXBwbGllZCwgdGhlbiBvcHRpb24gdmFsdWVzIHdpbGwgbm90IGJlIHBhcnNlZC4KICoKICoKICogQXMgb2YgUEhQIDUuNi4xIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBJTklfU0NBTk5FUl9UWVBFRC4KICogSW4gdGhpcyBtb2RlIGJvb2xlYW4sIG51bGwgYW5kIGludGVnZXIgdHlwZXMgYXJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgogKiBTdHJpbmcgdmFsdWVzICJ0cnVlIiwgIm9uIiBhbmQgInllcyIKICogYXJlIGNvbnZlcnRlZCB0byBUUlVFLiAiZmFsc2UiLCAib2ZmIiwgIm5vIgogKiBhbmQgIm5vbmUiIGFyZSBjb25zaWRlcmVkIEZBTFNFLiAibnVsbCIgaXMgY29udmVydGVkIHRvIE5VTEwKICogaW4gdHlwZWQgbW9kZS4gQWxzbywgYWxsIG51bWVyaWMgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdHlwZSBpZiBpdCBpcyBwb3NzaWJsZS4KICogQHJldHVybiBhcnJheSBUaGUgc2V0dGluZ3MgYXJlIHJldHVybmVkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFyc2VfaW5pX2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYm9vbCAkcHJvY2Vzc19zZWN0aW9ucyA9IGZhbHNlLCBpbnQgJHNjYW5uZXJfbW9kZSA9IElOSV9TQ0FOTkVSX05PUk1BTCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGFyc2VfaW5pX2ZpbGUoJGZpbGVuYW1lLCAkcHJvY2Vzc19zZWN0aW9ucywgJHNjYW5uZXJfbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBhcnNlX2luaV9zdHJpbmcgcmV0dXJucyB0aGUgc2V0dGluZ3MgaW4gc3RyaW5nCiAqIGluaSBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICoKICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5pIHN0cmluZyBpcyB0aGUgc2FtZSBhcyB0aGUgcGhwLmluaSdzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmkgVGhlIGNvbnRlbnRzIG9mIHRoZSBpbmkgZmlsZSBiZWluZyBwYXJzZWQuCiAqIEBwYXJhbSBib29sICRwcm9jZXNzX3NlY3Rpb25zIEJ5IHNldHRpbmcgdGhlIHByb2Nlc3Nfc2VjdGlvbnMKICogcGFyYW1ldGVyIHRvIFRSVUUsIHlvdSBnZXQgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LCB3aXRoCiAqIHRoZSBzZWN0aW9uIG5hbWVzIGFuZCBzZXR0aW5ncyBpbmNsdWRlZC4gVGhlIGRlZmF1bHQKICogZm9yIHByb2Nlc3Nfc2VjdGlvbnMgaXMgRkFMU0UKICogQHBhcmFtIGludCAkc2Nhbm5lcl9tb2RlIENhbiBlaXRoZXIgYmUgSU5JX1NDQU5ORVJfTk9STUFMIChkZWZhdWx0KSBvcgogKiBJTklfU0NBTk5FUl9SQVcuIElmIElOSV9TQ0FOTkVSX1JBVwogKiBpcyBzdXBwbGllZCwgdGhlbiBvcHRpb24gdmFsdWVzIHdpbGwgbm90IGJlIHBhcnNlZC4KICoKICoKICogQXMgb2YgUEhQIDUuNi4xIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBJTklfU0NBTk5FUl9UWVBFRC4KICogSW4gdGhpcyBtb2RlIGJvb2xlYW4sIG51bGwgYW5kIGludGVnZXIgdHlwZXMgYXJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgogKiBTdHJpbmcgdmFsdWVzICJ0cnVlIiwgIm9uIiBhbmQgInllcyIKICogYXJlIGNvbnZlcnRlZCB0byBUUlVFLiAiZmFsc2UiLCAib2ZmIiwgIm5vIgogKiBhbmQgIm5vbmUiIGFyZSBjb25zaWRlcmVkIEZBTFNFLiAibnVsbCIgaXMgY29udmVydGVkIHRvIE5VTEwKICogaW4gdHlwZWQgbW9kZS4gQWxzbywgYWxsIG51bWVyaWMgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdHlwZSBpZiBpdCBpcyBwb3NzaWJsZS4KICogQHJldHVybiBhcnJheSBUaGUgc2V0dGluZ3MgYXJlIHJldHVybmVkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFyc2VfaW5pX3N0cmluZyhzdHJpbmcgJGluaSwgYm9vbCAkcHJvY2Vzc19zZWN0aW9ucyA9IGZhbHNlLCBpbnQgJHNjYW5uZXJfbW9kZSA9IElOSV9TQ0FOTkVSX05PUk1BTCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGFyc2VfaW5pX3N0cmluZygkaW5pLCAkcHJvY2Vzc19zZWN0aW9ucywgJHNjYW5uZXJfbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlYWRzIGEgZmlsZSBhbmQgd3JpdGVzIGl0IHRvIHRoZSBvdXRwdXQgYnVmZmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgYmVpbmcgcmVhZC4KICogQHBhcmFtIGJvb2wgJHVzZV9pbmNsdWRlX3BhdGggWW91IGNhbiB1c2UgdGhlIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgYW5kIHNldCBpdCB0byBUUlVFLCBpZgogKiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZSBpbmNsdWRlX3BhdGgsIHRvby4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEEgY29udGV4dCBzdHJlYW0gcmVzb3VyY2UuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gdGhlIGZpbGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWRmaWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJHVzZV9pbmNsdWRlX3BhdGggPSBmYWxzZSwgJGNvbnRleHQgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccmVhZGZpbGUoJGZpbGVuYW1lLCAkdXNlX2luY2x1ZGVfcGF0aCwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRmaWxlKCRmaWxlbmFtZSwgJHVzZV9pbmNsdWRlX3BhdGgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiByZWFkbGluayBkb2VzIHRoZSBzYW1lIGFzIHRoZSByZWFkbGluayBDIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBzeW1ib2xpYyBsaW5rIHBhdGguCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeW1ib2xpYyBsaW5rIHBhdGguCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmsoc3RyaW5nICRwYXRoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmsoJHBhdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiByZWFscGF0aCBleHBhbmRzIGFsbCBzeW1ib2xpYyBsaW5rcyBhbmQKICogcmVzb2x2ZXMgcmVmZXJlbmNlcyB0byAvLi8sIC8uLi8gYW5kIGV4dHJhIC8gY2hhcmFjdGVycyBpbgogKiB0aGUgaW5wdXQgcGF0aCBhbmQgcmV0dXJucyB0aGUgY2Fub25pY2FsaXplZAogKiBhYnNvbHV0ZSBwYXRobmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aCBiZWluZyBjaGVja2VkLgogKgogKgogKiBXaGlsc3QgYSBwYXRoIG11c3QgYmUgc3VwcGxpZWQsIHRoZSB2YWx1ZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nLgogKiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAqCiAqCiAqCiAqIFdoaWxzdCBhIHBhdGggbXVzdCBiZSBzdXBwbGllZCwgdGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcuCiAqIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZSBvbiBzdWNjZXNzLiBUaGUgcmVzdWx0aW5nIHBhdGgKICogd2lsbCBoYXZlIG5vIHN5bWJvbGljIGxpbmssIC8uLyBvciAvLi4vIGNvbXBvbmVudHMuIFRyYWlsaW5nIGRlbGltaXRlcnMsCiAqIHN1Y2ggYXMgXCBhbmQgLywgYXJlIGFsc28gcmVtb3ZlZC4KICoKICogcmVhbHBhdGggcmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLCBlLmcuIGlmCiAqIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWxwYXRoKHN0cmluZyAkcGF0aCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWxwYXRoKCRwYXRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gcmVuYW1lIG9sZG5hbWUgdG8KICogbmV3bmFtZSwgbW92aW5nIGl0IGJldHdlZW4gZGlyZWN0b3JpZXMgaWYgbmVjZXNzYXJ5LgogKiBJZiByZW5hbWluZyBhIGZpbGUgYW5kIG5ld25hbWUgZXhpc3RzLAogKiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBJZiByZW5hbWluZyBhIGRpcmVjdG9yeSBhbmQKICogbmV3bmFtZSBleGlzdHMsCiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IGEgd2FybmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkbmFtZSBUaGUgb2xkIG5hbWUuCiAqCiAqIFRoZSB3cmFwcGVyIHVzZWQgaW4gb2xkbmFtZQogKiBtdXN0IG1hdGNoIHRoZSB3cmFwcGVyIHVzZWQgaW4KICogbmV3bmFtZS4KICogQHBhcmFtIHN0cmluZyAkbmV3bmFtZSBUaGUgbmV3IG5hbWUuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dAogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlbmFtZShzdHJpbmcgJG9sZG5hbWUsIHN0cmluZyAkbmV3bmFtZSwgJGNvbnRleHQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHJlbmFtZSgkb2xkbmFtZSwgJG5ld25hbWUsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZW5hbWUoJG9sZG5hbWUsICRuZXduYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIGZvciBoYW5kbGUKICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBzdHJlYW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIFRoZSBmaWxlIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgYW5kIG11c3QgcG9pbnQgdG8gYSBmaWxlCiAqIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYnkgZm9wZW4uCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmV3aW5kKCRoYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmV3aW5kKCRoYW5kbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBkaXJlY3RvcnkgbmFtZWQgYnkgZGlybmFtZS4KICogVGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LCBhbmQgdGhlIHJlbGV2YW50IHBlcm1pc3Npb25zIG11c3QgcGVybWl0IHRoaXMuCiAqIEEgRV9XQVJOSU5HIGxldmVsIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIG9uIGZhaWx1cmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRpcm5hbWUgUGF0aCB0byB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBybWRpcihzdHJpbmcgJGRpcm5hbWUsICRjb250ZXh0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxybWRpcigkZGlybmFtZSwgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJtZGlyKCRkaXJuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHN5bWxpbmsgY3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIGV4aXN0aW5nCiAqIHRhcmdldCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQogKiBsaW5rLgogKgogKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgVGFyZ2V0IG9mIHRoZSBsaW5rLgogKiBAcGFyYW0gc3RyaW5nICRsaW5rIFRoZSBsaW5rIG5hbWUuCiAqIEB0aHJvd3MgRmlsZXN5c3RlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3ltbGluayhzdHJpbmcgJHRhcmdldCwgc3RyaW5nICRsaW5rKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN5bWxpbmsoJHRhcmdldCwgJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsZXN5c3RlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIGZpbGUgd2l0aCBhIHVuaXF1ZSBmaWxlbmFtZSwgd2l0aCBhY2Nlc3MgcGVybWlzc2lvbiBzZXQgdG8gMDYwMCwgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCiAqIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHdyaXRhYmxlLCB0ZW1wbmFtIG1heQogKiBnZW5lcmF0ZSBhIGZpbGUgaW4gdGhlIHN5c3RlbSdzIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCByZXR1cm4KICogdGhlIGZ1bGwgcGF0aCB0byB0aGF0IGZpbGUsIGluY2x1ZGluZyBpdHMgbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZGlyIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRlbXBvcmFyeSBmaWxlbmFtZSB3aWxsIGJlIGNyZWF0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBUaGUgcHJlZml4IG9mIHRoZSBnZW5lcmF0ZWQgdGVtcG9yYXJ5IGZpbGVuYW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuZXcgdGVtcG9yYXJ5IGZpbGVuYW1lICh3aXRoIHBhdGgpLgogKiBAdGhyb3dzIEZpbGVzeXN0ZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHRlbXBuYW0oc3RyaW5nICRkaXIsIHN0cmluZyAkcHJlZml4KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdGVtcG5hbSgkZGlyLCAkcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSB1bmlxdWUgbmFtZSBpbiByZWFkLXdyaXRlICh3KykgbW9kZSBhbmQKICogcmV0dXJucyBhIGZpbGUgaGFuZGxlLgogKgogKiBUaGUgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2hlbiBjbG9zZWQgKGZvciBleGFtcGxlLCBieSBjYWxsaW5nCiAqIGZjbG9zZSwgb3Igd2hlbiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHJlZmVyZW5jZXMgdG8KICogdGhlIGZpbGUgaGFuZGxlIHJldHVybmVkIGJ5IHRtcGZpbGUpLCBvciB3aGVuIHRoZQogKiBzY3JpcHQgZW5kcy4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgZmlsZSBoYW5kbGUsIHNpbWlsYXIgdG8gdGhlIG9uZSByZXR1cm5lZCBieQogKiBmb3BlbiwgZm9yIHRoZSBuZXcgZmlsZS4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB0bXBmaWxlKCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0bXBmaWxlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWxlc3lzdGVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIHNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMgb2YgdGhlIGZpbGUgbmFtZWQgaW4gdGhlCiAqIGZpbGVuYW1lIHBhcmFtZXRlciB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4KICogdGltZS4KICogTm90ZSB0aGF0IHRoZSBhY2Nlc3MgdGltZSBpcyBhbHdheXMgbW9kaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlcgogKiBvZiBwYXJhbWV0ZXJzLgogKgogKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSBiZWluZyB0b3VjaGVkLgogKiBAcGFyYW0gaW50ICR0aW1lIFRoZSB0b3VjaCB0aW1lLiBJZiB0aW1lIGlzIG5vdCBzdXBwbGllZCwKICogdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgaXMgdXNlZC4KICogQHBhcmFtIGludCAkYXRpbWUgSWYgcHJlc2VudCwgdGhlIGFjY2VzcyB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlbmFtZSBpcyBzZXQgdG8KICogdGhlIHZhbHVlIG9mIGF0aW1lLiBPdGhlcndpc2UsIGl0IGlzIHNldCB0bwogKiB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSB0aW1lIHBhcmFtZXRlci4KICogSWYgbmVpdGhlciBhcmUgcHJlc2VudCwgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgaXMgdXNlZC4KICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB0b3VjaChzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJHRpbWUgPSBudWxsLCBpbnQgJGF0aW1lID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhdGltZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lLCAkdGltZSwgJGF0aW1lKTsKICAgIH0gZWxzZWlmICgkdGltZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lLCAkdGltZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcdG91Y2goJGZpbGVuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlbGV0ZXMgZmlsZW5hbWUuICBTaW1pbGFyIHRvIHRoZSBVbml4IEMgdW5saW5rKCkKICogZnVuY3Rpb24uIEFuIEVfV0FSTklORyBsZXZlbCBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZCBvbgogKiBmYWlsdXJlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQKICogQHRocm93cyBGaWxlc3lzdGVtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1bmxpbmsoc3RyaW5nICRmaWxlbmFtZSwgJGNvbnRleHQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHVubGluaygkZmlsZW5hbWUsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFx1bmxpbmsoJGZpbGVuYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZpbGVzeXN0ZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/filter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWx0ZXJFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHJldHJpZXZpbmcgbWFueSB2YWx1ZXMgd2l0aG91dAogKiByZXBldGl0aXZlbHkgY2FsbGluZyBmaWx0ZXJfaW5wdXQuCiAqCiAqIEBwYXJhbSBpbnQgJHR5cGUgT25lIG9mIElOUFVUX0dFVCwgSU5QVVRfUE9TVCwKICogSU5QVVRfQ09PS0lFLCBJTlBVVF9TRVJWRVIsIG9yCiAqIElOUFVUX0VOVi4KICogQHBhcmFtIGludHxhcnJheSAkZGVmaW5pdGlvbiBBbiBhcnJheSBkZWZpbmluZyB0aGUgYXJndW1lbnRzLiBBIHZhbGlkIGtleSBpcyBhIHN0cmluZwogKiBjb250YWluaW5nIGEgdmFyaWFibGUgbmFtZSBhbmQgYSB2YWxpZCB2YWx1ZSBpcyBlaXRoZXIgYSBmaWx0ZXIgdHlwZSwgb3IgYW4gYXJyYXkKICogb3B0aW9uYWxseSBzcGVjaWZ5aW5nIHRoZSBmaWx0ZXIsIGZsYWdzIGFuZCBvcHRpb25zLiBJZiB0aGUgdmFsdWUgaXMgYW4KICogYXJyYXksIHZhbGlkIGtleXMgYXJlIGZpbHRlciB3aGljaCBzcGVjaWZpZXMgdGhlCiAqIGZpbHRlciB0eXBlLAogKiBmbGFncyB3aGljaCBzcGVjaWZpZXMgYW55IGZsYWdzIHRoYXQgYXBwbHkgdG8gdGhlCiAqIGZpbHRlciwgYW5kIG9wdGlvbnMgd2hpY2ggc3BlY2lmaWVzIGFueSBvcHRpb25zIHRoYXQKICogYXBwbHkgdG8gdGhlIGZpbHRlci4gU2VlIHRoZSBleGFtcGxlIGJlbG93IGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgogKgogKiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYWxzbyBhbiBpbnRlZ2VyIGhvbGRpbmcgYSBmaWx0ZXIgY29uc3RhbnQuIFRoZW4gYWxsIHZhbHVlcyBpbiB0aGUKICogaW5wdXQgYXJyYXkgYXJlIGZpbHRlcmVkIGJ5IHRoaXMgZmlsdGVyLgogKiBAcGFyYW0gYm9vbCAkYWRkX2VtcHR5IEFkZCBtaXNzaW5nIGtleXMgYXMgTlVMTCB0byB0aGUgcmV0dXJuIHZhbHVlLgogKiBAcmV0dXJuIG1peGVkIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgcmVxdWVzdGVkIHZhcmlhYmxlcyBvbiBzdWNjZXNzLgogKiBJZiB0aGUgaW5wdXQgYXJyYXkgZGVzaWduYXRlZCBieSB0eXBlIGlzIG5vdCBwb3B1bGF0ZWQsCiAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgaWYgdGhlIEZJTFRFUl9OVUxMX09OX0ZBSUxVUkUKICogZmxhZyBpcyBub3QgZ2l2ZW4sIG9yIEZBTFNFIG90aGVyd2lzZS4gRm9yIG90aGVyIGZhaWx1cmVzLCBGQUxTRSBpcyByZXR1cm5lZC4KICoKICogQW4gYXJyYXkgdmFsdWUgd2lsbCBiZSBGQUxTRSBpZiB0aGUgZmlsdGVyIGZhaWxzLCBvciBOVUxMIGlmCiAqIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LiBPciBpZiB0aGUgZmxhZyBGSUxURVJfTlVMTF9PTl9GQUlMVVJFCiAqIGlzIHVzZWQsIGl0IHJldHVybnMgRkFMU0UgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQgYW5kIE5VTEwgaWYgdGhlIGZpbHRlcgogKiBmYWlscy4gSWYgdGhlIGFkZF9lbXB0eSBwYXJhbWV0ZXIgaXMgRkFMU0UsIG5vIGFycmF5CiAqIGVsZW1lbnQgd2lsbCBiZSBhZGRlZCBmb3IgdW5zZXQgdmFyaWFibGVzLgogKiBAdGhyb3dzIEZpbHRlckV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZmlsdGVyX2lucHV0X2FycmF5KGludCAkdHlwZSwgJGRlZmluaXRpb24gPSBudWxsLCBib29sICRhZGRfZW1wdHkgPSB0cnVlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFkZF9lbXB0eSAhPT0gdHJ1ZSkgewogICAgICAgICRyZXN1bHQgPSBcZmlsdGVyX2lucHV0X2FycmF5KCR0eXBlLCAkZGVmaW5pdGlvbiwgJGFkZF9lbXB0eSk7CiAgICB9IGVsc2VpZiAoJGRlZmluaXRpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl9pbnB1dF9hcnJheSgkdHlwZSwgJGRlZmluaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl9pbnB1dF9hcnJheSgkdHlwZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGaWx0ZXJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHJldHJpZXZpbmcgbWFueSB2YWx1ZXMgd2l0aG91dAogKiByZXBldGl0aXZlbHkgY2FsbGluZyBmaWx0ZXJfdmFyLgogKgogKiBAcGFyYW0gYXJyYXkgJGRhdGEgQW4gYXJyYXkgd2l0aCBzdHJpbmcga2V5cyBjb250YWluaW5nIHRoZSBkYXRhIHRvIGZpbHRlci4KICogQHBhcmFtIG1peGVkICRkZWZpbml0aW9uIEFuIGFycmF5IGRlZmluaW5nIHRoZSBhcmd1bWVudHMuIEEgdmFsaWQga2V5IGlzIGEgc3RyaW5nCiAqIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBuYW1lIGFuZCBhIHZhbGlkIHZhbHVlIGlzIGVpdGhlciBhCiAqIGZpbHRlciB0eXBlLCBvciBhbgogKiBhcnJheSBvcHRpb25hbGx5IHNwZWNpZnlpbmcgdGhlIGZpbHRlciwgZmxhZ3MgYW5kIG9wdGlvbnMuCiAqIElmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSwgdmFsaWQga2V5cyBhcmUgZmlsdGVyCiAqIHdoaWNoIHNwZWNpZmllcyB0aGUgZmlsdGVyIHR5cGUsCiAqIGZsYWdzIHdoaWNoIHNwZWNpZmllcyBhbnkgZmxhZ3MgdGhhdCBhcHBseSB0byB0aGUKICogZmlsdGVyLCBhbmQgb3B0aW9ucyB3aGljaCBzcGVjaWZpZXMgYW55IG9wdGlvbnMgdGhhdAogKiBhcHBseSB0byB0aGUgZmlsdGVyLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCiAqCiAqIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbHNvIGFuIGludGVnZXIgaG9sZGluZyBhIGZpbHRlciBjb25zdGFudC4gVGhlbiBhbGwgdmFsdWVzIGluIHRoZQogKiBpbnB1dCBhcnJheSBhcmUgZmlsdGVyZWQgYnkgdGhpcyBmaWx0ZXIuCiAqIEBwYXJhbSBib29sICRhZGRfZW1wdHkgQWRkIG1pc3Npbmcga2V5cyBhcyBOVUxMIHRvIHRoZSByZXR1cm4gdmFsdWUuCiAqIEByZXR1cm4gbWl4ZWQgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIG9mIHRoZSByZXF1ZXN0ZWQgdmFyaWFibGVzIG9uIHN1Y2Nlc3MuIEFuIGFycmF5IHZhbHVlIHdpbGwgYmUgRkFMU0UgaWYgdGhlIGZpbHRlciBmYWlscywgb3IgTlVMTCBpZgogKiB0aGUgdmFyaWFibGUgaXMgbm90IHNldC4KICogQHRocm93cyBGaWx0ZXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZpbHRlcl92YXJfYXJyYXkoYXJyYXkgJGRhdGEsICRkZWZpbml0aW9uID0gbnVsbCwgYm9vbCAkYWRkX2VtcHR5ID0gdHJ1ZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhZGRfZW1wdHkgIT09IHRydWUpIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl92YXJfYXJyYXkoJGRhdGEsICRkZWZpbml0aW9uLCAkYWRkX2VtcHR5KTsKICAgIH0gZWxzZWlmICgkZGVmaW5pdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZmlsdGVyX3Zhcl9hcnJheSgkZGF0YSwgJGRlZmluaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGZpbHRlcl92YXJfYXJyYXkoJGRhdGEpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRmlsdGVyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/fpm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGcG1FeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCByZXNwb25zZSBkYXRhIHRvIHRoZSBjbGllbnQgYW5kIGZpbmlzaGVzIHRoZQogKiByZXF1ZXN0LiBUaGlzIGFsbG93cyBmb3IgdGltZSBjb25zdW1pbmcgdGFza3MgdG8gYmUgcGVyZm9ybWVkIHdpdGhvdXQKICogbGVhdmluZyB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50IG9wZW4uCiAqCiAqIEB0aHJvd3MgRnBtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0KCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0KCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGcG1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ftp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGdHBFeGNlcHRpb247CgovKioKICogU2VuZHMgYW4gQUxMTyBjb21tYW5kIHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlciB0bwogKiBhbGxvY2F0ZSBzcGFjZSBmb3IgYSBmaWxlIHRvIGJlIHVwbG9hZGVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBpbnQgJGZpbGVzaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuCiAqIEBwYXJhbSBzdHJpbmcgJHJlc3VsdCBBIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlcnZlcnMgcmVzcG9uc2Ugd2lsbCBiZSByZXR1cm5lZCBieQogKiByZWZlcmVuY2UgaW4gcmVzdWx0IGlmIGEgdmFyaWFibGUgaXMgcHJvdmlkZWQuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfYWxsb2MoJGZ0cF9zdHJlYW0sIGludCAkZmlsZXNpemUsIHN0cmluZyAmJHJlc3VsdCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2FsbG9jKCRmdHBfc3RyZWFtLCAkZmlsZXNpemUsICRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cAogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZQogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9maWxlCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9hcHBlbmQoJGZ0cCwgc3RyaW5nICRyZW1vdGVfZmlsZSwgc3RyaW5nICRsb2NhbF9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9hcHBlbmQoJGZ0cCwgJHJlbW90ZV9maWxlLCAkbG9jYWxfZmlsZSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDaGFuZ2VzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfY2R1cCgkZnRwX3N0cmVhbSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfY2R1cCgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgb25lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgdGFyZ2V0IGRpcmVjdG9yeS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9jaGRpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2NoZGlyKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHNwZWNpZmllZCByZW1vdGUgZmlsZSB0bwogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIG5ldyBwZXJtaXNzaW9ucywgZ2l2ZW4gYXMgYW4gb2N0YWwgdmFsdWUuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSByZW1vdGUgZmlsZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbmV3IGZpbGUgcGVybWlzc2lvbnMgb24gc3VjY2Vzcy4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9jaG1vZCgkZnRwX3N0cmVhbSwgaW50ICRtb2RlLCBzdHJpbmcgJGZpbGVuYW1lKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2NobW9kKCRmdHBfc3RyZWFtLCAkbW9kZSwgJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmdHBfY2xvc2UgY2xvc2VzIHRoZSBnaXZlbiBsaW5rIGlkZW50aWZpZXIKICogYW5kIHJlbGVhc2VzIHRoZSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX2Nsb3NlKCRmdHBfc3RyZWFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9jbG9zZSgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9jb25uZWN0IG9wZW5zIGFuIEZUUCBjb25uZWN0aW9uIHRvIHRoZQogKiBzcGVjaWZpZWQgaG9zdC4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdCBUaGUgRlRQIHNlcnZlciBhZGRyZXNzLiBUaGlzIHBhcmFtZXRlciBzaG91bGRuJ3QgaGF2ZSBhbnkgdHJhaWxpbmcKICogc2xhc2hlcyBhbmQgc2hvdWxkbid0IGJlIHByZWZpeGVkIHdpdGggZnRwOi8vLgogKiBAcGFyYW0gaW50ICRwb3J0IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyBhbiBhbHRlcm5hdGUgcG9ydCB0byBjb25uZWN0IHRvLiBJZiBpdCBpcwogKiBvbWl0dGVkIG9yIHNldCB0byB6ZXJvLCB0aGVuIHRoZSBkZWZhdWx0IEZUUCBwb3J0LCAyMSwgd2lsbCBiZSB1c2VkLgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdGltZW91dCBpbiBzZWNvbmRzIGZvciBhbGwgc3Vic2VxdWVudCBuZXR3b3JrIG9wZXJhdGlvbnMuCiAqIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDkwIHNlY29uZHMuIFRoZSB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIGFuZAogKiBxdWVyaWVkIGF0IGFueSB0aW1lIHdpdGggZnRwX3NldF9vcHRpb24gYW5kCiAqIGZ0cF9nZXRfb3B0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBGVFAgc3RyZWFtIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfY29ubmVjdChzdHJpbmcgJGhvc3QsIGludCAkcG9ydCA9IDIxLCBpbnQgJHRpbWVvdXQgPSA5MCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfY29ubmVjdCgkaG9zdCwgJHBvcnQsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBmdHBfZGVsZXRlIGRlbGV0ZXMgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5CiAqIHBhdGggZnJvbSB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmaWxlIHRvIGRlbGV0ZS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9kZWxldGUoJGZ0cF9zdHJlYW0sIHN0cmluZyAkcGF0aCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfZGVsZXRlKCRmdHBfc3RyZWFtLCAkcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9mZ2V0IHJldHJpZXZlcyByZW1vdGVfZmlsZQogKiBmcm9tIHRoZSBGVFAgc2VydmVyLCBhbmQgd3JpdGVzIGl0IHRvIHRoZSBnaXZlbiBmaWxlIHBvaW50ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQW4gb3BlbiBmaWxlIHBvaW50ZXIgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJHJlbW90ZV9maWxlIFRoZSByZW1vdGUgZmlsZSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSB0cmFuc2ZlciBtb2RlLiBNdXN0IGJlIGVpdGhlciBGVFBfQVNDSUkgb3IKICogRlRQX0JJTkFSWS4KICogQHBhcmFtIGludCAkcmVzdW1lcG9zIFRoZSBwb3NpdGlvbiBpbiB0aGUgcmVtb3RlIGZpbGUgdG8gc3RhcnQgZG93bmxvYWRpbmcgZnJvbS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9mZ2V0KCRmdHBfc3RyZWFtLCAkaGFuZGxlLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHJlc3VtZXBvcyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2ZnZXQoJGZ0cF9zdHJlYW0sICRoYW5kbGUsICRyZW1vdGVfZmlsZSwgJG1vZGUsICRyZXN1bWVwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBmdHBfZnB1dCB1cGxvYWRzIHRoZSBkYXRhIGZyb20gYSBmaWxlIHBvaW50ZXIKICogdG8gYSByZW1vdGUgZmlsZSBvbiB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBUaGUgcmVtb3RlIGZpbGUgcGF0aC4KICogQHBhcmFtIHJlc291cmNlICRoYW5kbGUgQW4gb3BlbiBmaWxlIHBvaW50ZXIgb24gdGhlIGxvY2FsIGZpbGUuIFJlYWRpbmcgc3RvcHMgYXQgZW5kIG9mIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIHRyYW5zZmVyIG1vZGUuIE11c3QgYmUgZWl0aGVyIEZUUF9BU0NJSSBvcgogKiBGVFBfQklOQVJZLgogKiBAcGFyYW0gaW50ICRzdGFydHBvcyBUaGUgcG9zaXRpb24gaW4gdGhlIHJlbW90ZSBmaWxlIHRvIHN0YXJ0IHVwbG9hZGluZyB0by4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9mcHV0KCRmdHBfc3RyZWFtLCBzdHJpbmcgJHJlbW90ZV9maWxlLCAkaGFuZGxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHN0YXJ0cG9zID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfZnB1dCgkZnRwX3N0cmVhbSwgJHJlbW90ZV9maWxlLCAkaGFuZGxlLCAkbW9kZSwgJHN0YXJ0cG9zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZnRwX2dldCByZXRyaWV2ZXMgYSByZW1vdGUgZmlsZSBmcm9tIHRoZSBGVFAgc2VydmVyLAogKiBhbmQgc2F2ZXMgaXQgaW50byBhIGxvY2FsIGZpbGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBUaGUgbG9jYWwgZmlsZSBwYXRoICh3aWxsIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzKS4KICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX2ZpbGUgVGhlIHJlbW90ZSBmaWxlIHBhdGguCiAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIHRyYW5zZmVyIG1vZGUuIE11c3QgYmUgZWl0aGVyIEZUUF9BU0NJSSBvcgogKiBGVFBfQklOQVJZLgogKiBAcGFyYW0gaW50ICRyZXN1bWVwb3MgVGhlIHBvc2l0aW9uIGluIHRoZSByZW1vdGUgZmlsZSB0byBzdGFydCBkb3dubG9hZGluZyBmcm9tLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX2dldCgkZnRwX3N0cmVhbSwgc3RyaW5nICRsb2NhbF9maWxlLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBpbnQgJG1vZGUgPSBGVFBfQklOQVJZLCBpbnQgJHJlc3VtZXBvcyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2dldCgkZnRwX3N0cmVhbSwgJGxvY2FsX2ZpbGUsICRyZW1vdGVfZmlsZSwgJG1vZGUsICRyZXN1bWVwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMb2dzIGluIHRvIHRoZSBnaXZlbiBGVFAgc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VybmFtZSAoVVNFUikuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCAoUEFTUykuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbG9naW4oJGZ0cF9zdHJlYW0sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcGFzc3dvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX2xvZ2luKCRmdHBfc3RyZWFtLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgb24gdGhlIEZUUCBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNyZWF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5IG5hbWUgb24gc3VjY2Vzcy4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9ta2RpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfbWtkaXIoJGZ0cF9zdHJlYW0sICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBkaXJlY3RvcnkgdG8gYmUgbGlzdGVkLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggZmlsZSBpbmZvcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbWxzZCgkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9tbHNkKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGJlIGxpc3RlZC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGFsc28gaW5jbHVkZSBhcmd1bWVudHMsIGVnLgogKiBmdHBfbmxpc3QoJGNvbm5faWQsICItbGEgL3lvdXIvZGlyIik7CiAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciBpc24ndCBlc2NhcGVkIHNvIHRoZXJlIG1heSBiZSBzb21lIGlzc3VlcyB3aXRoCiAqIGZpbGVuYW1lcyBjb250YWluaW5nIHNwYWNlcyBhbmQgb3RoZXIgY2hhcmFjdGVycy4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfbmxpc3QoJGZ0cF9zdHJlYW0sIHN0cmluZyAkZGlyZWN0b3J5KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfbmxpc3QoJGZ0cF9zdHJlYW0sICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGZ0cF9wYXN2IHR1cm5zIG9uIG9yIG9mZiBwYXNzaXZlIG1vZGUuIEluCiAqIHBhc3NpdmUgbW9kZSwgZGF0YSBjb25uZWN0aW9ucyBhcmUgaW5pdGlhdGVkIGJ5IHRoZSBjbGllbnQsCiAqIHJhdGhlciB0aGFuIGJ5IHRoZSBzZXJ2ZXIuCiAqIEl0IG1heSBiZSBuZWVkZWQgaWYgdGhlIGNsaWVudCBpcyBiZWhpbmQgZmlyZXdhbGwuCiAqCiAqIFBsZWFzZSBub3RlIHRoYXQgZnRwX3Bhc3YgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEKICogc3VjY2Vzc2Z1bCBsb2dpbiBvciBvdGhlcndpc2UgaXQgd2lsbCBmYWlsLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBib29sICRwYXN2IElmIFRSVUUsIHRoZSBwYXNzaXZlIG1vZGUgaXMgdHVybmVkIG9uLCBlbHNlIGl0J3MgdHVybmVkIG9mZi4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9wYXN2KCRmdHBfc3RyZWFtLCBib29sICRwYXN2KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9wYXN2KCRmdHBfc3RyZWFtLCAkcGFzdik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9wdXQgc3RvcmVzIGEgbG9jYWwgZmlsZSBvbiB0aGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBUaGUgcmVtb3RlIGZpbGUgcGF0aC4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBUaGUgbG9jYWwgZmlsZSBwYXRoLgogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSB0cmFuc2ZlciBtb2RlLiBNdXN0IGJlIGVpdGhlciBGVFBfQVNDSUkgb3IKICogRlRQX0JJTkFSWS4KICogQHBhcmFtIGludCAkc3RhcnRwb3MgVGhlIHBvc2l0aW9uIGluIHRoZSByZW1vdGUgZmlsZSB0byBzdGFydCB1cGxvYWRpbmcgdG8uCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcHV0KCRmdHBfc3RyZWFtLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBzdHJpbmcgJGxvY2FsX2ZpbGUsIGludCAkbW9kZSA9IEZUUF9CSU5BUlksIGludCAkc3RhcnRwb3MgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9wdXQoJGZ0cF9zdHJlYW0sICRyZW1vdGVfZmlsZSwgJGxvY2FsX2ZpbGUsICRtb2RlLCAkc3RhcnRwb3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcHdkKCRmdHBfc3RyZWFtKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX3B3ZCgkZnRwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZnRwX3JlbmFtZSByZW5hbWVzIGEgZmlsZSBvciBhIGRpcmVjdG9yeSBvbiB0aGUgRlRQCiAqIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRvbGRuYW1lIFRoZSBvbGQgZmlsZS9kaXJlY3RvcnkgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkbmV3bmFtZSBUaGUgbmV3IG5hbWUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfcmVuYW1lKCRmdHBfc3RyZWFtLCBzdHJpbmcgJG9sZG5hbWUsIHN0cmluZyAkbmV3bmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxmdHBfcmVuYW1lKCRmdHBfc3RyZWFtLCAkb2xkbmFtZSwgJG5ld25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgRnRwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG9uIHRoZSBGVFAgc2VydmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZ0cF9zdHJlYW0gVGhlIGxpbmsgaWRlbnRpZmllciBvZiB0aGUgRlRQIGNvbm5lY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgZGlyZWN0b3J5IHRvIGRlbGV0ZS4gVGhpcyBtdXN0IGJlIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZQogKiBwYXRoIHRvIGFuIGVtcHR5IGRpcmVjdG9yeS4KICogQHRocm93cyBGdHBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGZ0cF9ybWRpcigkZnRwX3N0cmVhbSwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZnRwX3JtZGlyKCRmdHBfc3RyZWFtLCAkZGlyZWN0b3J5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogZnRwX3NpdGUgc2VuZHMgdGhlIGdpdmVuIFNJVEUKICogY29tbWFuZCB0byB0aGUgRlRQIHNlcnZlci4KICoKICogU0lURSBjb21tYW5kcyBhcmUgbm90IHN0YW5kYXJkaXplZCwgYW5kIHZhcnkgZnJvbSBzZXJ2ZXIKICogdG8gc2VydmVyLiBUaGV5IGFyZSB1c2VmdWwgZm9yIGhhbmRsaW5nIHN1Y2ggdGhpbmdzIGFzIGZpbGUgcGVybWlzc2lvbnMgYW5kCiAqIGdyb3VwIG1lbWJlcnNoaXAuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZnRwX3N0cmVhbSBUaGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBGVFAgY29ubmVjdGlvbi4KICogQHBhcmFtIHN0cmluZyAkY29tbWFuZCBUaGUgU0lURSBjb21tYW5kLiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXNuJ3QgZXNjYXBlZCBzbyB0aGVyZSBtYXkKICogYmUgc29tZSBpc3N1ZXMgd2l0aCBmaWxlbmFtZXMgY29udGFpbmluZyBzcGFjZXMgYW5kIG90aGVyIGNoYXJhY3RlcnMuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfc2l0ZSgkZnRwX3N0cmVhbSwgc3RyaW5nICRjb21tYW5kKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zaXRlKCRmdHBfc3RyZWFtLCAkY29tbWFuZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdHBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGZ0cF9zc2xfY29ubmVjdCBvcGVucyBhbiBleHBsaWNpdCBTU0wtRlRQIGNvbm5lY3Rpb24gdG8gdGhlCiAqIHNwZWNpZmllZCBob3N0LiBUaGF0IGltcGxpZXMgdGhhdAogKiBmdHBfc3NsX2Nvbm5lY3Qgd2lsbCBzdWNjZWVkIGV2ZW4gaWYgdGhlIHNlcnZlciBpcyBub3QKICogY29uZmlndXJlZCBmb3IgU1NMLUZUUCwgb3IgaXRzIGNlcnRpZmljYXRlIGlzIGludmFsaWQuIE9ubHkgd2hlbgogKiBmdHBfbG9naW4gaXMgY2FsbGVkLCB0aGUgY2xpZW50IHdpbGwgc2VuZCB0aGUKICogYXBwcm9wcmlhdGUgQVVUSCBGVFAgY29tbWFuZCwgc28gZnRwX2xvZ2luIHdpbGwgZmFpbCBpbgogKiB0aGUgbWVudGlvbmVkIGNhc2VzLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBGVFAgc2VydmVyIGFkZHJlc3MuIFRoaXMgcGFyYW1ldGVyIHNob3VsZG4ndCBoYXZlIGFueSB0cmFpbGluZwogKiBzbGFzaGVzIGFuZCBzaG91bGRuJ3QgYmUgcHJlZml4ZWQgd2l0aCBmdHA6Ly8uCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIGFuIGFsdGVybmF0ZSBwb3J0IHRvIGNvbm5lY3QgdG8uIElmIGl0IGlzCiAqIG9taXR0ZWQgb3Igc2V0IHRvIHplcm8sIHRoZW4gdGhlIGRlZmF1bHQgRlRQIHBvcnQsIDIxLCB3aWxsIGJlIHVzZWQuCiAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB0aW1lb3V0IGZvciBhbGwgc3Vic2VxdWVudCBuZXR3b3JrIG9wZXJhdGlvbnMuCiAqIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDkwIHNlY29uZHMuIFRoZSB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIGFuZAogKiBxdWVyaWVkIGF0IGFueSB0aW1lIHdpdGggZnRwX3NldF9vcHRpb24gYW5kCiAqIGZ0cF9nZXRfb3B0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBTU0wtRlRQIHN0cmVhbSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEZ0cEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnRwX3NzbF9jb25uZWN0KHN0cmluZyAkaG9zdCwgaW50ICRwb3J0ID0gMjEsIGludCAkdGltZW91dCA9IDkwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zc2xfY29ubmVjdCgkaG9zdCwgJHBvcnQsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBzeXN0ZW0gdHlwZSBpZGVudGlmaWVyIG9mIHRoZSByZW1vdGUgRlRQIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRmdHBfc3RyZWFtIFRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIEZUUCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSByZW1vdGUgc3lzdGVtIHR5cGUuCiAqIEB0aHJvd3MgRnRwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmdHBfc3lzdHlwZSgkZnRwX3N0cmVhbSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGZ0cF9zeXN0eXBlKCRmdHBfc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ0cEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/funchand.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xGdW5jaGFuZEV4Y2VwdGlvbjsKCi8qKgogKiBDcmVhdGVzIGFuIGFub255bW91cyBmdW5jdGlvbiBmcm9tIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCwgYW5kCiAqIHJldHVybnMgYSB1bmlxdWUgbmFtZSBmb3IgaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFyZ3MgVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cy4KICogQHBhcmFtIHN0cmluZyAkY29kZSBUaGUgZnVuY3Rpb24gY29kZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHVuaXF1ZSBmdW5jdGlvbiBuYW1lIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIEZ1bmNoYW5kRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjcmVhdGVfZnVuY3Rpb24oc3RyaW5nICRhcmdzLCBzdHJpbmcgJGNvZGUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjcmVhdGVfZnVuY3Rpb24oJGFyZ3MsICRjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEZ1bmNoYW5kRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSgpOiB2b2lkICRmdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuCiAqIEBwYXJhbSBtaXhlZCAkcGFyYW1zCiAqIEB0aHJvd3MgRnVuY2hhbmRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24oY2FsbGFibGUgJGZ1bmN0aW9uLCAuLi4kcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24oJGZ1bmN0aW9uLCAuLi4kcGFyYW1zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uKCRmdW5jdGlvbik7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBGdW5jaGFuZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/functionsList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJldHVybiBbCiAgICAnYXBhY2hlX2dldGVudicsCiAgICAnYXBhY2hlX2dldF92ZXJzaW9uJywKICAgICdhcGFjaGVfcmVxdWVzdF9oZWFkZXJzJywKICAgICdhcGFjaGVfcmVzZXRfdGltZW91dCcsCiAgICAnYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMnLAogICAgJ2FwYWNoZV9zZXRlbnYnLAogICAgJ2FwY3VfY2FjaGVfaW5mbycsCiAgICAnYXBjdV9jYXMnLAogICAgJ2FwY3VfZGVjJywKICAgICdhcGN1X2ZldGNoJywKICAgICdhcGN1X2luYycsCiAgICAnYXBjdV9zbWFfaW5mbycsCiAgICAnYXBjX2ZldGNoJywKICAgICdhcnJheV9jb21iaW5lJywKICAgICdhcnJheV9mbGlwJywKICAgICdhcnJheV9yZXBsYWNlJywKICAgICdhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZScsCiAgICAnYXJyYXlfd2Fsa19yZWN1cnNpdmUnLAogICAgJ2Fyc29ydCcsCiAgICAnYXNvcnQnLAogICAgJ2Jhc2U2NF9kZWNvZGUnLAogICAgJ2J6Y2xvc2UnLAogICAgJ2J6Zmx1c2gnLAogICAgJ2J6cmVhZCcsCiAgICAnYnp3cml0ZScsCiAgICAnY2hkaXInLAogICAgJ2NoZ3JwJywKICAgICdjaG1vZCcsCiAgICAnY2hvd24nLAogICAgJ2Nocm9vdCcsCiAgICAnY2xhc3NfYWxpYXMnLAogICAgJ2NsYXNzX2ltcGxlbWVudHMnLAogICAgJ2NsYXNzX3BhcmVudHMnLAogICAgJ2NsYXNzX3VzZXMnLAogICAgJ2NsaV9zZXRfcHJvY2Vzc190aXRsZScsCiAgICAnY2xvc2Vsb2cnLAogICAgJ2NvbV9ldmVudF9zaW5rJywKICAgICdjb21fbG9hZF90eXBlbGliJywKICAgICdjb21fcHJpbnRfdHlwZWluZm8nLAogICAgJ2NvbnZlcnRfdXVkZWNvZGUnLAogICAgJ2NvbnZlcnRfdXVlbmNvZGUnLAogICAgJ2NvcHknLAogICAgJ2NyZWF0ZV9mdW5jdGlvbicsCiAgICAnY3VicmlkX2ZyZWVfcmVzdWx0JywKICAgICdjdWJyaWRfZ2V0X2NoYXJzZXQnLAogICAgJ2N1YnJpZF9nZXRfY2xpZW50X2luZm8nLAogICAgJ2N1YnJpZF9nZXRfZGJfcGFyYW1ldGVyJywKICAgICdjdWJyaWRfZ2V0X3NlcnZlcl9pbmZvJywKICAgICdjdWJyaWRfaW5zZXJ0X2lkJywKICAgICdjdWJyaWRfbG9iMl9uZXcnLAogICAgJ2N1YnJpZF9sb2IyX3NpemUnLAogICAgJ2N1YnJpZF9sb2IyX3NpemU2NCcsCiAgICAnY3VicmlkX2xvYjJfdGVsbCcsCiAgICAnY3VicmlkX2xvYjJfdGVsbDY0JywKICAgICdjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcicsCiAgICAnY3VybF9lc2NhcGUnLAogICAgJ2N1cmxfZXhlYycsCiAgICAnY3VybF9nZXRpbmZvJywKICAgICdjdXJsX2luaXQnLAogICAgJ2N1cmxfbXVsdGlfZXJybm8nLAogICAgJ2N1cmxfbXVsdGlfaW5mb19yZWFkJywKICAgICdjdXJsX211bHRpX2luaXQnLAogICAgJ2N1cmxfc2V0b3B0JywKICAgICdjdXJsX3NoYXJlX2Vycm5vJywKICAgICdjdXJsX3NoYXJlX3NldG9wdCcsCiAgICAnY3VybF91bmVzY2FwZScsCiAgICAnZGF0ZScsCiAgICAnZGF0ZV9wYXJzZScsCiAgICAnZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdCcsCiAgICAnZGF0ZV9zdW5yaXNlJywKICAgICdkYXRlX3N1bnNldCcsCiAgICAnZGF0ZV9zdW5faW5mbycsCiAgICAnZGIyX2F1dG9jb21taXQnLAogICAgJ2RiMl9iaW5kX3BhcmFtJywKICAgICdkYjJfY2xpZW50X2luZm8nLAogICAgJ2RiMl9jbG9zZScsCiAgICAnZGIyX2NvbW1pdCcsCiAgICAnZGIyX2V4ZWN1dGUnLAogICAgJ2RiMl9mcmVlX3Jlc3VsdCcsCiAgICAnZGIyX2ZyZWVfc3RtdCcsCiAgICAnZGIyX2dldF9vcHRpb24nLAogICAgJ2RiMl9wY2xvc2UnLAogICAgJ2RiMl9yb2xsYmFjaycsCiAgICAnZGIyX3NlcnZlcl9pbmZvJywKICAgICdkYjJfc2V0X29wdGlvbicsCiAgICAnZGVmaW5lJywKICAgICdkZWZsYXRlX2FkZCcsCiAgICAnZGVmbGF0ZV9pbml0JywKICAgICdkaXNrX2ZyZWVfc3BhY2UnLAogICAgJ2Rpc2tfdG90YWxfc3BhY2UnLAogICAgJ2RsJywKICAgICdkbnNfZ2V0X3JlY29yZCcsCiAgICAnZWlvX2J1c3knLAogICAgJ2Vpb19jaG1vZCcsCiAgICAnZWlvX2Nob3duJywKICAgICdlaW9fY2xvc2UnLAogICAgJ2Vpb19jdXN0b20nLAogICAgJ2Vpb19kdXAyJywKICAgICdlaW9fZXZlbnRfbG9vcCcsCiAgICAnZWlvX2ZhbGxvY2F0ZScsCiAgICAnZWlvX2ZjaG1vZCcsCiAgICAnZWlvX2ZkYXRhc3luYycsCiAgICAnZWlvX2ZzdGF0JywKICAgICdlaW9fZnN0YXR2ZnMnLAogICAgJ2Vpb19mc3luYycsCiAgICAnZWlvX2Z0cnVuY2F0ZScsCiAgICAnZWlvX2Z1dGltZScsCiAgICAnZWlvX2dycCcsCiAgICAnZWlvX2xzdGF0JywKICAgICdlaW9fbWtkaXInLAogICAgJ2Vpb19ta25vZCcsCiAgICAnZWlvX25vcCcsCiAgICAnZWlvX3JlYWRhaGVhZCcsCiAgICAnZWlvX3JlYWRkaXInLAogICAgJ2Vpb19yZWFkbGluaycsCiAgICAnZWlvX3JlbmFtZScsCiAgICAnZWlvX3JtZGlyJywKICAgICdlaW9fc2VlaycsCiAgICAnZWlvX3NlbmRmaWxlJywKICAgICdlaW9fc3RhdCcsCiAgICAnZWlvX3N0YXR2ZnMnLAogICAgJ2Vpb19zeW1saW5rJywKICAgICdlaW9fc3luYycsCiAgICAnZWlvX3N5bmNmcycsCiAgICAnZWlvX3N5bmNfZmlsZV9yYW5nZScsCiAgICAnZWlvX3RydW5jYXRlJywKICAgICdlaW9fdW5saW5rJywKICAgICdlaW9fdXRpbWUnLAogICAgJ2Vpb193cml0ZScsCiAgICAnZXJyb3JfbG9nJywKICAgICdmYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0JywKICAgICdmYmlyZF9ibG9iX2NhbmNlbCcsCiAgICAnZmNsb3NlJywKICAgICdmZmx1c2gnLAogICAgJ2ZpbGUnLAogICAgJ2ZpbGVhdGltZScsCiAgICAnZmlsZWN0aW1lJywKICAgICdmaWxlaW5vZGUnLAogICAgJ2ZpbGVtdGltZScsCiAgICAnZmlsZW93bmVyJywKICAgICdmaWxlc2l6ZScsCiAgICAnZmlsZV9nZXRfY29udGVudHMnLAogICAgJ2ZpbGVfcHV0X2NvbnRlbnRzJywKICAgICdmaWx0ZXJfaW5wdXRfYXJyYXknLAogICAgJ2ZpbHRlcl92YXJfYXJyYXknLAogICAgJ2ZpbmZvX2Nsb3NlJywKICAgICdmaW5mb19vcGVuJywKICAgICdmbG9jaycsCiAgICAnZm9wZW4nLAogICAgJ2ZwdXRjc3YnLAogICAgJ2ZyZWFkJywKICAgICdmc29ja29wZW4nLAogICAgJ2Z0cF9hbGxvYycsCiAgICAnZnRwX2FwcGVuZCcsCiAgICAnZnRwX2NkdXAnLAogICAgJ2Z0cF9jaGRpcicsCiAgICAnZnRwX2NobW9kJywKICAgICdmdHBfY2xvc2UnLAogICAgJ2Z0cF9jb25uZWN0JywKICAgICdmdHBfZGVsZXRlJywKICAgICdmdHBfZmdldCcsCiAgICAnZnRwX2ZwdXQnLAogICAgJ2Z0cF9nZXQnLAogICAgJ2Z0cF9sb2dpbicsCiAgICAnZnRwX21rZGlyJywKICAgICdmdHBfbWxzZCcsCiAgICAnZnRwX25saXN0JywKICAgICdmdHBfcGFzdicsCiAgICAnZnRwX3B1dCcsCiAgICAnZnRwX3B3ZCcsCiAgICAnZnRwX3JlbmFtZScsCiAgICAnZnRwX3JtZGlyJywKICAgICdmdHBfc2l0ZScsCiAgICAnZnRwX3NzbF9jb25uZWN0JywKICAgICdmdHBfc3lzdHlwZScsCiAgICAnZnRydW5jYXRlJywKICAgICdmd3JpdGUnLAogICAgJ2dldGFsbGhlYWRlcnMnLAogICAgJ2dldGN3ZCcsCiAgICAnZ2V0aG9zdG5hbWUnLAogICAgJ2dldGltYWdlc2l6ZScsCiAgICAnZ2V0bGFzdG1vZCcsCiAgICAnZ2V0bXlnaWQnLAogICAgJ2dldG15aW5vZGUnLAogICAgJ2dldG15cGlkJywKICAgICdnZXRteXVpZCcsCiAgICAnZ2V0b3B0JywKICAgICdnZXRwcm90b2J5bmFtZScsCiAgICAnZ2V0cHJvdG9ieW51bWJlcicsCiAgICAnZ2V0X2hlYWRlcnMnLAogICAgJ2dsb2InLAogICAgJ2dtZGF0ZScsCiAgICAnZ21wX2Jpbm9taWFsJywKICAgICdnbXBfZXhwb3J0JywKICAgICdnbXBfaW1wb3J0JywKICAgICdnbXBfcmFuZG9tX3NlZWQnLAogICAgJ2dudXBnX2FkZGRlY3J5cHRrZXknLAogICAgJ2dudXBnX2FkZGVuY3J5cHRrZXknLAogICAgJ2dudXBnX2FkZHNpZ25rZXknLAogICAgJ2dudXBnX2NsZWFyZGVjcnlwdGtleXMnLAogICAgJ2dudXBnX2NsZWFyZW5jcnlwdGtleXMnLAogICAgJ2dudXBnX2NsZWFyc2lnbmtleXMnLAogICAgJ2dudXBnX3NldGFybW9yJywKICAgICdnbnVwZ19zZXRzaWdubW9kZScsCiAgICAnZ3pjbG9zZScsCiAgICAnZ3pjb21wcmVzcycsCiAgICAnZ3pkZWNvZGUnLAogICAgJ2d6ZGVmbGF0ZScsCiAgICAnZ3plbmNvZGUnLAogICAgJ2d6Z2V0cycsCiAgICAnZ3pnZXRzcycsCiAgICAnZ3ppbmZsYXRlJywKICAgICdnenBhc3N0aHJ1JywKICAgICdnenJld2luZCcsCiAgICAnZ3p1bmNvbXByZXNzJywKICAgICdoYXNoX2hrZGYnLAogICAgJ2hhc2hfdXBkYXRlX2ZpbGUnLAogICAgJ2hlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaycsCiAgICAnaGV4MmJpbicsCiAgICAnaGlnaGxpZ2h0X2ZpbGUnLAogICAgJ2hpZ2hsaWdodF9zdHJpbmcnLAogICAgJ2liYXNlX2FkZF91c2VyJywKICAgICdpYmFzZV9iYWNrdXAnLAogICAgJ2liYXNlX2Jsb2JfY2FuY2VsJywKICAgICdpYmFzZV9ibG9iX2NyZWF0ZScsCiAgICAnaWJhc2VfYmxvYl9nZXQnLAogICAgJ2liYXNlX2Nsb3NlJywKICAgICdpYmFzZV9jb21taXQnLAogICAgJ2liYXNlX2NvbW1pdF9yZXQnLAogICAgJ2liYXNlX2Nvbm5lY3QnLAogICAgJ2liYXNlX2RlbGV0ZV91c2VyJywKICAgICdpYmFzZV9kcm9wX2RiJywKICAgICdpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXInLAogICAgJ2liYXNlX2ZyZWVfcXVlcnknLAogICAgJ2liYXNlX2ZyZWVfcmVzdWx0JywKICAgICdpYmFzZV9tYWludGFpbl9kYicsCiAgICAnaWJhc2VfbW9kaWZ5X3VzZXInLAogICAgJ2liYXNlX25hbWVfcmVzdWx0JywKICAgICdpYmFzZV9wY29ubmVjdCcsCiAgICAnaWJhc2VfcmVzdG9yZScsCiAgICAnaWJhc2Vfcm9sbGJhY2snLAogICAgJ2liYXNlX3JvbGxiYWNrX3JldCcsCiAgICAnaWJhc2Vfc2VydmljZV9hdHRhY2gnLAogICAgJ2liYXNlX3NlcnZpY2VfZGV0YWNoJywKICAgICdpY29udicsCiAgICAnaWNvbnZfZ2V0X2VuY29kaW5nJywKICAgICdpY29udl9zZXRfZW5jb2RpbmcnLAogICAgJ2ltYWdlMndibXAnLAogICAgJ2ltYWdlYWZmaW5lJywKICAgICdpbWFnZWFmZmluZW1hdHJpeGNvbmNhdCcsCiAgICAnaW1hZ2VhZmZpbmVtYXRyaXhnZXQnLAogICAgJ2ltYWdlYWxwaGFibGVuZGluZycsCiAgICAnaW1hZ2VhbnRpYWxpYXMnLAogICAgJ2ltYWdlYXJjJywKICAgICdpbWFnZWJtcCcsCiAgICAnaW1hZ2VjaGFyJywKICAgICdpbWFnZWNoYXJ1cCcsCiAgICAnaW1hZ2Vjb2xvcmF0JywKICAgICdpbWFnZWNvbG9yZGVhbGxvY2F0ZScsCiAgICAnaW1hZ2Vjb2xvcm1hdGNoJywKICAgICdpbWFnZWNvbnZvbHV0aW9uJywKICAgICdpbWFnZWNvcHknLAogICAgJ2ltYWdlY29weW1lcmdlJywKICAgICdpbWFnZWNvcHltZXJnZWdyYXknLAogICAgJ2ltYWdlY29weXJlc2FtcGxlZCcsCiAgICAnaW1hZ2Vjb3B5cmVzaXplZCcsCiAgICAnaW1hZ2VjcmVhdGUnLAogICAgJ2ltYWdlY3JlYXRlZnJvbWJtcCcsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QnLAogICAgJ2ltYWdlY3JlYXRlZnJvbWdkMicsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QycGFydCcsCiAgICAnaW1hZ2VjcmVhdGVmcm9tZ2lmJywKICAgICdpbWFnZWNyZWF0ZWZyb21qcGVnJywKICAgICdpbWFnZWNyZWF0ZWZyb21wbmcnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXdibXAnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXdlYnAnLAogICAgJ2ltYWdlY3JlYXRlZnJvbXhibScsCiAgICAnaW1hZ2VjcmVhdGVmcm9teHBtJywKICAgICdpbWFnZWNyZWF0ZXRydWVjb2xvcicsCiAgICAnaW1hZ2Vjcm9wJywKICAgICdpbWFnZWNyb3BhdXRvJywKICAgICdpbWFnZWRhc2hlZGxpbmUnLAogICAgJ2ltYWdlZGVzdHJveScsCiAgICAnaW1hZ2VlbGxpcHNlJywKICAgICdpbWFnZWZpbGwnLAogICAgJ2ltYWdlZmlsbGVkYXJjJywKICAgICdpbWFnZWZpbGxlZGVsbGlwc2UnLAogICAgJ2ltYWdlZmlsbGVkcG9seWdvbicsCiAgICAnaW1hZ2VmaWxsZWRyZWN0YW5nbGUnLAogICAgJ2ltYWdlZmlsbHRvYm9yZGVyJywKICAgICdpbWFnZWZpbHRlcicsCiAgICAnaW1hZ2VmbGlwJywKICAgICdpbWFnZWdhbW1hY29ycmVjdCcsCiAgICAnaW1hZ2VnZCcsCiAgICAnaW1hZ2VnZDInLAogICAgJ2ltYWdlZ2lmJywKICAgICdpbWFnZWdyYWJzY3JlZW4nLAogICAgJ2ltYWdlZ3JhYndpbmRvdycsCiAgICAnaW1hZ2VqcGVnJywKICAgICdpbWFnZWxheWVyZWZmZWN0JywKICAgICdpbWFnZWxpbmUnLAogICAgJ2ltYWdlbG9hZGZvbnQnLAogICAgJ2ltYWdlb3BlbnBvbHlnb24nLAogICAgJ2ltYWdlcG5nJywKICAgICdpbWFnZXBvbHlnb24nLAogICAgJ2ltYWdlcmVjdGFuZ2xlJywKICAgICdpbWFnZXJvdGF0ZScsCiAgICAnaW1hZ2VzYXZlYWxwaGEnLAogICAgJ2ltYWdlc2NhbGUnLAogICAgJ2ltYWdlc2V0YnJ1c2gnLAogICAgJ2ltYWdlc2V0Y2xpcCcsCiAgICAnaW1hZ2VzZXRpbnRlcnBvbGF0aW9uJywKICAgICdpbWFnZXNldHBpeGVsJywKICAgICdpbWFnZXNldHN0eWxlJywKICAgICdpbWFnZXNldHRoaWNrbmVzcycsCiAgICAnaW1hZ2VzZXR0aWxlJywKICAgICdpbWFnZXN0cmluZycsCiAgICAnaW1hZ2VzdHJpbmd1cCcsCiAgICAnaW1hZ2VzeCcsCiAgICAnaW1hZ2VzeScsCiAgICAnaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUnLAogICAgJ2ltYWdldHRmYmJveCcsCiAgICAnaW1hZ2V0dGZ0ZXh0JywKICAgICdpbWFnZXdibXAnLAogICAgJ2ltYWdld2VicCcsCiAgICAnaW1hZ2V4Ym0nLAogICAgJ2ltYXBfYXBwZW5kJywKICAgICdpbWFwX2NoZWNrJywKICAgICdpbWFwX2NsZWFyZmxhZ19mdWxsJywKICAgICdpbWFwX2Nsb3NlJywKICAgICdpbWFwX2NyZWF0ZW1haWxib3gnLAogICAgJ2ltYXBfZGVsZXRlbWFpbGJveCcsCiAgICAnaW1hcF9mZXRjaHN0cnVjdHVyZScsCiAgICAnaW1hcF9nYycsCiAgICAnaW1hcF9oZWFkZXJpbmZvJywKICAgICdpbWFwX21haWwnLAogICAgJ2ltYXBfbWFpbGJveG1zZ2luZm8nLAogICAgJ2ltYXBfbWFpbF9jb21wb3NlJywKICAgICdpbWFwX21haWxfY29weScsCiAgICAnaW1hcF9tYWlsX21vdmUnLAogICAgJ2ltYXBfbXV0ZjdfdG9fdXRmOCcsCiAgICAnaW1hcF9udW1fbXNnJywKICAgICdpbWFwX29wZW4nLAogICAgJ2ltYXBfcmVuYW1lbWFpbGJveCcsCiAgICAnaW1hcF9zYXZlYm9keScsCiAgICAnaW1hcF9zZXRhY2wnLAogICAgJ2ltYXBfc2V0ZmxhZ19mdWxsJywKICAgICdpbWFwX3NldF9xdW90YScsCiAgICAnaW1hcF9zb3J0JywKICAgICdpbWFwX3N1YnNjcmliZScsCiAgICAnaW1hcF90aHJlYWQnLAogICAgJ2ltYXBfdGltZW91dCcsCiAgICAnaW1hcF91bmRlbGV0ZScsCiAgICAnaW1hcF91bnN1YnNjcmliZScsCiAgICAnaW1hcF91dGY4X3RvX211dGY3JywKICAgICdpbmV0X250b3AnLAogICAgJ2luZmxhdGVfYWRkJywKICAgICdpbmZsYXRlX2dldF9yZWFkX2xlbicsCiAgICAnaW5mbGF0ZV9nZXRfc3RhdHVzJywKICAgICdpbmZsYXRlX2luaXQnLAogICAgJ2luZ3Jlc19hdXRvY29tbWl0JywKICAgICdpbmdyZXNfY2xvc2UnLAogICAgJ2luZ3Jlc19jb21taXQnLAogICAgJ2luZ3Jlc19jb25uZWN0JywKICAgICdpbmdyZXNfZXhlY3V0ZScsCiAgICAnaW5ncmVzX2ZpZWxkX25hbWUnLAogICAgJ2luZ3Jlc19maWVsZF90eXBlJywKICAgICdpbmdyZXNfZnJlZV9yZXN1bHQnLAogICAgJ2luZ3Jlc19wY29ubmVjdCcsCiAgICAnaW5ncmVzX3Jlc3VsdF9zZWVrJywKICAgICdpbmdyZXNfcm9sbGJhY2snLAogICAgJ2luZ3Jlc19zZXRfZW52aXJvbm1lbnQnLAogICAgJ2luaV9nZXQnLAogICAgJ2luaV9zZXQnLAogICAgJ2lub3RpZnlfaW5pdCcsCiAgICAnaW5vdGlmeV9ybV93YXRjaCcsCiAgICAnaXB0Y2VtYmVkJywKICAgICdpcHRjcGFyc2UnLAogICAgJ2pkdG91bml4JywKICAgICdqcGVnMndibXAnLAogICAgJ2pzb25fZGVjb2RlJywKICAgICdqc29uX2VuY29kZScsCiAgICAnanNvbl9sYXN0X2Vycm9yX21zZycsCiAgICAna3Jzb3J0JywKICAgICdrc29ydCcsCiAgICAnbGNoZ3JwJywKICAgICdsY2hvd24nLAogICAgJ2xkYXBfYWRkJywKICAgICdsZGFwX2FkZF9leHQnLAogICAgJ2xkYXBfYmluZCcsCiAgICAnbGRhcF9iaW5kX2V4dCcsCiAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcsCiAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZScsCiAgICAnbGRhcF9jb3VudF9lbnRyaWVzJywKICAgICdsZGFwX2RlbGV0ZScsCiAgICAnbGRhcF9kZWxldGVfZXh0JywKICAgICdsZGFwX2V4b3AnLAogICAgJ2xkYXBfZXhvcF9wYXNzd2QnLAogICAgJ2xkYXBfZXhvcF93aG9hbWknLAogICAgJ2xkYXBfZXhwbG9kZV9kbicsCiAgICAnbGRhcF9maXJzdF9hdHRyaWJ1dGUnLAogICAgJ2xkYXBfZmlyc3RfZW50cnknLAogICAgJ2xkYXBfZnJlZV9yZXN1bHQnLAogICAgJ2xkYXBfZ2V0X2F0dHJpYnV0ZXMnLAogICAgJ2xkYXBfZ2V0X2RuJywKICAgICdsZGFwX2dldF9lbnRyaWVzJywKICAgICdsZGFwX2dldF9vcHRpb24nLAogICAgJ2xkYXBfZ2V0X3ZhbHVlcycsCiAgICAnbGRhcF9nZXRfdmFsdWVzX2xlbicsCiAgICAnbGRhcF9saXN0JywKICAgICdsZGFwX21vZGlmeV9iYXRjaCcsCiAgICAnbGRhcF9tb2RfYWRkJywKICAgICdsZGFwX21vZF9hZGRfZXh0JywKICAgICdsZGFwX21vZF9kZWwnLAogICAgJ2xkYXBfbW9kX2RlbF9leHQnLAogICAgJ2xkYXBfbW9kX3JlcGxhY2UnLAogICAgJ2xkYXBfbW9kX3JlcGxhY2VfZXh0JywKICAgICdsZGFwX25leHRfYXR0cmlidXRlJywKICAgICdsZGFwX3BhcnNlX2V4b3AnLAogICAgJ2xkYXBfcGFyc2VfcmVzdWx0JywKICAgICdsZGFwX3JlYWQnLAogICAgJ2xkYXBfcmVuYW1lJywKICAgICdsZGFwX3JlbmFtZV9leHQnLAogICAgJ2xkYXBfc2FzbF9iaW5kJywKICAgICdsZGFwX3NlYXJjaCcsCiAgICAnbGRhcF9zZXRfb3B0aW9uJywKICAgICdsZGFwX3VuYmluZCcsCiAgICAnbGlieG1sX2dldF9sYXN0X2Vycm9yJywKICAgICdsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXInLAogICAgJ2xpbmsnLAogICAgJ2x6Zl9jb21wcmVzcycsCiAgICAnbHpmX2RlY29tcHJlc3MnLAogICAgJ21haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUnLAogICAgJ21haWxwYXJzZV9tc2dfZnJlZScsCiAgICAnbWFpbHBhcnNlX21zZ19wYXJzZScsCiAgICAnbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlJywKICAgICdtYWlscGFyc2Vfc3RyZWFtX2VuY29kZScsCiAgICAnbWJfY2hyJywKICAgICdtYl9kZXRlY3Rfb3JkZXInLAogICAgJ21iX2VuY29kaW5nX2FsaWFzZXMnLAogICAgJ21iX2VyZWdpX3JlcGxhY2UnLAogICAgJ21iX2VyZWdfcmVwbGFjZScsCiAgICAnbWJfZXJlZ19yZXBsYWNlX2NhbGxiYWNrJywKICAgICdtYl9lcmVnX3NlYXJjaF9nZXRyZWdzJywKICAgICdtYl9lcmVnX3NlYXJjaF9pbml0JywKICAgICdtYl9lcmVnX3NlYXJjaF9yZWdzJywKICAgICdtYl9lcmVnX3NlYXJjaF9zZXRwb3MnLAogICAgJ21iX2h0dHBfb3V0cHV0JywKICAgICdtYl9pbnRlcm5hbF9lbmNvZGluZycsCiAgICAnbWJfb3JkJywKICAgICdtYl9wYXJzZV9zdHInLAogICAgJ21iX3JlZ2V4X2VuY29kaW5nJywKICAgICdtYl9zZW5kX21haWwnLAogICAgJ21iX3NwbGl0JywKICAgICdtYl9zdHJfc3BsaXQnLAogICAgJ21kNV9maWxlJywKICAgICdtZXRhcGhvbmUnLAogICAgJ21pbWVfY29udGVudF90eXBlJywKICAgICdta2RpcicsCiAgICAnbWt0aW1lJywKICAgICdtc2dfcXVldWVfZXhpc3RzJywKICAgICdtc2dfcmVjZWl2ZScsCiAgICAnbXNnX3JlbW92ZV9xdWV1ZScsCiAgICAnbXNnX3NlbmQnLAogICAgJ21zZ19zZXRfcXVldWUnLAogICAgJ21zcWxfYWZmZWN0ZWRfcm93cycsCiAgICAnbXNxbF9jbG9zZScsCiAgICAnbXNxbF9jb25uZWN0JywKICAgICdtc3FsX2NyZWF0ZV9kYicsCiAgICAnbXNxbF9kYXRhX3NlZWsnLAogICAgJ21zcWxfZGJfcXVlcnknLAogICAgJ21zcWxfZHJvcF9kYicsCiAgICAnbXNxbF9maWVsZF9sZW4nLAogICAgJ21zcWxfZmllbGRfbmFtZScsCiAgICAnbXNxbF9maWVsZF9zZWVrJywKICAgICdtc3FsX2ZpZWxkX3RhYmxlJywKICAgICdtc3FsX2ZpZWxkX3R5cGUnLAogICAgJ21zcWxfZnJlZV9yZXN1bHQnLAogICAgJ21zcWxfcGNvbm5lY3QnLAogICAgJ21zcWxfcXVlcnknLAogICAgJ21zcWxfc2VsZWN0X2RiJywKICAgICdteXNxbGlfZ2V0X2NhY2hlX3N0YXRzJywKICAgICdteXNxbGlfZ2V0X2NsaWVudF9zdGF0cycsCiAgICAnbXlzcWxuZF9tc19kdW1wX3NlcnZlcnMnLAogICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9nbG9iYWwnLAogICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCcsCiAgICAnbXlzcWxuZF9tc19nZXRfbGFzdF91c2VkX2Nvbm5lY3Rpb24nLAogICAgJ215c3FsbmRfcWNfY2xlYXJfY2FjaGUnLAogICAgJ215c3FsbmRfcWNfc2V0X2lzX3NlbGVjdCcsCiAgICAnbXlzcWxuZF9xY19zZXRfc3RvcmFnZV9oYW5kbGVyJywKICAgICdteXNxbF9jbG9zZScsCiAgICAnbXlzcWxfY29ubmVjdCcsCiAgICAnbXlzcWxfY3JlYXRlX2RiJywKICAgICdteXNxbF9kYXRhX3NlZWsnLAogICAgJ215c3FsX2RiX25hbWUnLAogICAgJ215c3FsX2RiX3F1ZXJ5JywKICAgICdteXNxbF9kcm9wX2RiJywKICAgICdteXNxbF9mZXRjaF9sZW5ndGhzJywKICAgICdteXNxbF9maWVsZF9mbGFncycsCiAgICAnbXlzcWxfZmllbGRfbGVuJywKICAgICdteXNxbF9maWVsZF9uYW1lJywKICAgICdteXNxbF9maWVsZF9zZWVrJywKICAgICdteXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAnbXlzcWxfZ2V0X2hvc3RfaW5mbycsCiAgICAnbXlzcWxfZ2V0X3Byb3RvX2luZm8nLAogICAgJ215c3FsX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAnbXlzcWxfaW5mbycsCiAgICAnbXlzcWxfbGlzdF9kYnMnLAogICAgJ215c3FsX2xpc3RfZmllbGRzJywKICAgICdteXNxbF9saXN0X3Byb2Nlc3NlcycsCiAgICAnbXlzcWxfbGlzdF90YWJsZXMnLAogICAgJ215c3FsX251bV9maWVsZHMnLAogICAgJ215c3FsX251bV9yb3dzJywKICAgICdteXNxbF9xdWVyeScsCiAgICAnbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nJywKICAgICdteXNxbF9yZXN1bHQnLAogICAgJ215c3FsX3NlbGVjdF9kYicsCiAgICAnbXlzcWxfc2V0X2NoYXJzZXQnLAogICAgJ215c3FsX3RhYmxlbmFtZScsCiAgICAnbXlzcWxfdGhyZWFkX2lkJywKICAgICdteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5JywKICAgICduYXRjYXNlc29ydCcsCiAgICAnbmF0c29ydCcsCiAgICAnb2JfZW5kX2NsZWFuJywKICAgICdvYl9lbmRfZmx1c2gnLAogICAgJ29jaV9iaW5kX2FycmF5X2J5X25hbWUnLAogICAgJ29jaV9iaW5kX2J5X25hbWUnLAogICAgJ29jaV9jYW5jZWwnLAogICAgJ29jaV9jbG9zZScsCiAgICAnb2NpX2NvbW1pdCcsCiAgICAnb2NpX2Nvbm5lY3QnLAogICAgJ29jaV9kZWZpbmVfYnlfbmFtZScsCiAgICAnb2NpX2V4ZWN1dGUnLAogICAgJ29jaV9mZXRjaF9hbGwnLAogICAgJ29jaV9maWVsZF9uYW1lJywKICAgICdvY2lfZmllbGRfcHJlY2lzaW9uJywKICAgICdvY2lfZmllbGRfc2NhbGUnLAogICAgJ29jaV9maWVsZF9zaXplJywKICAgICdvY2lfZmllbGRfdHlwZScsCiAgICAnb2NpX2ZpZWxkX3R5cGVfcmF3JywKICAgICdvY2lfZnJlZV9kZXNjcmlwdG9yJywKICAgICdvY2lfZnJlZV9zdGF0ZW1lbnQnLAogICAgJ29jaV9uZXdfY29sbGVjdGlvbicsCiAgICAnb2NpX25ld19jb25uZWN0JywKICAgICdvY2lfbmV3X2N1cnNvcicsCiAgICAnb2NpX25ld19kZXNjcmlwdG9yJywKICAgICdvY2lfbnVtX2ZpZWxkcycsCiAgICAnb2NpX251bV9yb3dzJywKICAgICdvY2lfcGFyc2UnLAogICAgJ29jaV9wY29ubmVjdCcsCiAgICAnb2NpX3Jlc3VsdCcsCiAgICAnb2NpX3JvbGxiYWNrJywKICAgICdvY2lfc2VydmVyX3ZlcnNpb24nLAogICAgJ29jaV9zZXRfYWN0aW9uJywKICAgICdvY2lfc2V0X2NhbGxfdGltZW91dCcsCiAgICAnb2NpX3NldF9jbGllbnRfaWRlbnRpZmllcicsCiAgICAnb2NpX3NldF9jbGllbnRfaW5mbycsCiAgICAnb2NpX3NldF9kYl9vcGVyYXRpb24nLAogICAgJ29jaV9zZXRfZWRpdGlvbicsCiAgICAnb2NpX3NldF9tb2R1bGVfbmFtZScsCiAgICAnb2NpX3NldF9wcmVmZXRjaCcsCiAgICAnb2NpX3N0YXRlbWVudF90eXBlJywKICAgICdvY2lfdW5yZWdpc3Rlcl90YWZfY2FsbGJhY2snLAogICAgJ29kYmNfYXV0b2NvbW1pdCcsCiAgICAnb2RiY19iaW5tb2RlJywKICAgICdvZGJjX2NvbHVtbnByaXZpbGVnZXMnLAogICAgJ29kYmNfY29sdW1ucycsCiAgICAnb2RiY19jb21taXQnLAogICAgJ29kYmNfZGF0YV9zb3VyY2UnLAogICAgJ29kYmNfZXhlYycsCiAgICAnb2RiY19leGVjdXRlJywKICAgICdvZGJjX2ZldGNoX2ludG8nLAogICAgJ29kYmNfZmllbGRfbGVuJywKICAgICdvZGJjX2ZpZWxkX25hbWUnLAogICAgJ29kYmNfZmllbGRfbnVtJywKICAgICdvZGJjX2ZpZWxkX3NjYWxlJywKICAgICdvZGJjX2ZpZWxkX3R5cGUnLAogICAgJ29kYmNfZm9yZWlnbmtleXMnLAogICAgJ29kYmNfZ2V0dHlwZWluZm8nLAogICAgJ29kYmNfbG9uZ3JlYWRsZW4nLAogICAgJ29kYmNfcHJlcGFyZScsCiAgICAnb2RiY19wcmltYXJ5a2V5cycsCiAgICAnb2RiY19yZXN1bHQnLAogICAgJ29kYmNfcmVzdWx0X2FsbCcsCiAgICAnb2RiY19yb2xsYmFjaycsCiAgICAnb2RiY19zZXRvcHRpb24nLAogICAgJ29kYmNfc3BlY2lhbGNvbHVtbnMnLAogICAgJ29kYmNfc3RhdGlzdGljcycsCiAgICAnb2RiY190YWJsZXByaXZpbGVnZXMnLAogICAgJ29kYmNfdGFibGVzJywKICAgICdvcGNhY2hlX2NvbXBpbGVfZmlsZScsCiAgICAnb3BjYWNoZV9nZXRfc3RhdHVzJywKICAgICdvcGVuZGlyJywKICAgICdvcGVubG9nJywKICAgICdvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgnLAogICAgJ29wZW5zc2xfY3NyX2V4cG9ydCcsCiAgICAnb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUnLAogICAgJ29wZW5zc2xfY3NyX2dldF9zdWJqZWN0JywKICAgICdvcGVuc3NsX2Nzcl9uZXcnLAogICAgJ29wZW5zc2xfY3NyX3NpZ24nLAogICAgJ29wZW5zc2xfZGVjcnlwdCcsCiAgICAnb3BlbnNzbF9kaF9jb21wdXRlX2tleScsCiAgICAnb3BlbnNzbF9kaWdlc3QnLAogICAgJ29wZW5zc2xfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9vcGVuJywKICAgICdvcGVuc3NsX3Bia2RmMicsCiAgICAnb3BlbnNzbF9wa2NzN19kZWNyeXB0JywKICAgICdvcGVuc3NsX3BrY3M3X2VuY3J5cHQnLAogICAgJ29wZW5zc2xfcGtjczdfcmVhZCcsCiAgICAnb3BlbnNzbF9wa2NzN19zaWduJywKICAgICdvcGVuc3NsX3BrY3MxMl9leHBvcnQnLAogICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlJywKICAgICdvcGVuc3NsX3BrY3MxMl9yZWFkJywKICAgICdvcGVuc3NsX3BrZXlfZXhwb3J0JywKICAgICdvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUnLAogICAgJ29wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZScsCiAgICAnb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMnLAogICAgJ29wZW5zc2xfcGtleV9uZXcnLAogICAgJ29wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0JywKICAgICdvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCcsCiAgICAnb3BlbnNzbF9wdWJsaWNfZW5jcnlwdCcsCiAgICAnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJywKICAgICdvcGVuc3NsX3NlYWwnLAogICAgJ29wZW5zc2xfc2lnbicsCiAgICAnb3BlbnNzbF94NTA5X2V4cG9ydCcsCiAgICAnb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlJywKICAgICdvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQnLAogICAgJ29wZW5zc2xfeDUwOV9yZWFkJywKICAgICdvdXRwdXRfYWRkX3Jld3JpdGVfdmFyJywKICAgICdvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJywKICAgICdwYWNrJywKICAgICdwYXJzZV9pbmlfZmlsZScsCiAgICAncGFyc2VfaW5pX3N0cmluZycsCiAgICAncGFyc2VfdXJsJywKICAgICdwYXNzd29yZF9oYXNoJywKICAgICdwY250bF9leGVjJywKICAgICdwY250bF9nZXRwcmlvcml0eScsCiAgICAncGNudGxfc2V0cHJpb3JpdHknLAogICAgJ3BjbnRsX3NpZ25hbF9kaXNwYXRjaCcsCiAgICAncGNudGxfc2lncHJvY21hc2snLAogICAgJ3BjbnRsX3N0cmVycm9yJywKICAgICdQREZfYWN0aXZhdGVfaXRlbScsCiAgICAnUERGX2FkZF9sb2NhbGxpbmsnLAogICAgJ1BERl9hZGRfbmFtZWRkZXN0JywKICAgICdQREZfYWRkX25vdGUnLAogICAgJ1BERl9hZGRfcGRmbGluaycsCiAgICAnUERGX2FkZF90aHVtYm5haWwnLAogICAgJ1BERl9hZGRfd2VibGluaycsCiAgICAnUERGX2F0dGFjaF9maWxlJywKICAgICdQREZfYmVnaW5fbGF5ZXInLAogICAgJ1BERl9iZWdpbl9wYWdlJywKICAgICdQREZfYmVnaW5fcGFnZV9leHQnLAogICAgJ1BERl9jaXJjbGUnLAogICAgJ1BERl9jbGlwJywKICAgICdQREZfY2xvc2UnLAogICAgJ1BERl9jbG9zZXBhdGgnLAogICAgJ1BERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UnLAogICAgJ1BERl9jbG9zZXBhdGhfc3Ryb2tlJywKICAgICdQREZfY2xvc2VfcGRpJywKICAgICdQREZfY2xvc2VfcGRpX3BhZ2UnLAogICAgJ1BERl9jb25jYXQnLAogICAgJ1BERl9jb250aW51ZV90ZXh0JywKICAgICdQREZfY3VydmV0bycsCiAgICAnUERGX2RlbGV0ZScsCiAgICAnUERGX2VuZF9sYXllcicsCiAgICAnUERGX2VuZF9wYWdlJywKICAgICdQREZfZW5kX3BhZ2VfZXh0JywKICAgICdQREZfZW5kX3BhdHRlcm4nLAogICAgJ1BERl9lbmRfdGVtcGxhdGUnLAogICAgJ1BERl9maWxsJywKICAgICdQREZfZmlsbF9zdHJva2UnLAogICAgJ1BERl9maXRfaW1hZ2UnLAogICAgJ1BERl9maXRfcGRpX3BhZ2UnLAogICAgJ1BERl9maXRfdGV4dGxpbmUnLAogICAgJ1BERl9pbml0Z3JhcGhpY3MnLAogICAgJ1BERl9saW5ldG8nLAogICAgJ1BERl9tYWtlc3BvdGNvbG9yJywKICAgICdQREZfbW92ZXRvJywKICAgICdQREZfb3Blbl9maWxlJywKICAgICdQREZfcGxhY2VfaW1hZ2UnLAogICAgJ1BERl9wbGFjZV9wZGlfcGFnZScsCiAgICAnUERGX3JlY3QnLAogICAgJ1BERl9yZXN0b3JlJywKICAgICdQREZfcm90YXRlJywKICAgICdQREZfc2F2ZScsCiAgICAnUERGX3NjYWxlJywKICAgICdQREZfc2V0Y29sb3InLAogICAgJ1BERl9zZXRkYXNoJywKICAgICdQREZfc2V0ZGFzaHBhdHRlcm4nLAogICAgJ1BERl9zZXRmbGF0JywKICAgICdQREZfc2V0Zm9udCcsCiAgICAnUERGX3NldGdyYXknLAogICAgJ1BERl9zZXRncmF5X2ZpbGwnLAogICAgJ1BERl9zZXRncmF5X3N0cm9rZScsCiAgICAnUERGX3NldGxpbmVqb2luJywKICAgICdQREZfc2V0bGluZXdpZHRoJywKICAgICdQREZfc2V0bWF0cml4JywKICAgICdQREZfc2V0bWl0ZXJsaW1pdCcsCiAgICAnUERGX3NldHJnYmNvbG9yJywKICAgICdQREZfc2V0cmdiY29sb3JfZmlsbCcsCiAgICAnUERGX3NldHJnYmNvbG9yX3N0cm9rZScsCiAgICAnUERGX3NldF9ib3JkZXJfY29sb3InLAogICAgJ1BERl9zZXRfYm9yZGVyX2Rhc2gnLAogICAgJ1BERl9zZXRfYm9yZGVyX3N0eWxlJywKICAgICdQREZfc2V0X2luZm8nLAogICAgJ1BERl9zZXRfbGF5ZXJfZGVwZW5kZW5jeScsCiAgICAnUERGX3NldF9wYXJhbWV0ZXInLAogICAgJ1BERl9zZXRfdGV4dF9wb3MnLAogICAgJ1BERl9zZXRfdmFsdWUnLAogICAgJ1BERl9zaG93JywKICAgICdQREZfc2hvd194eScsCiAgICAnUERGX3NrZXcnLAogICAgJ1BERl9zdHJva2UnLAogICAgJ3BnX2NhbmNlbF9xdWVyeScsCiAgICAncGdfY2xpZW50X2VuY29kaW5nJywKICAgICdwZ19jbG9zZScsCiAgICAncGdfY29ubmVjdCcsCiAgICAncGdfY29ubmVjdGlvbl9yZXNldCcsCiAgICAncGdfY29udmVydCcsCiAgICAncGdfY29weV9mcm9tJywKICAgICdwZ19jb3B5X3RvJywKICAgICdwZ19kYm5hbWUnLAogICAgJ3BnX2RlbGV0ZScsCiAgICAncGdfZW5kX2NvcHknLAogICAgJ3BnX2V4ZWN1dGUnLAogICAgJ3BnX2ZpZWxkX25hbWUnLAogICAgJ3BnX2ZpZWxkX3RhYmxlJywKICAgICdwZ19maWVsZF90eXBlJywKICAgICdwZ19mbHVzaCcsCiAgICAncGdfZnJlZV9yZXN1bHQnLAogICAgJ3BnX2hvc3QnLAogICAgJ3BnX2luc2VydCcsCiAgICAncGdfbGFzdF9lcnJvcicsCiAgICAncGdfbGFzdF9ub3RpY2UnLAogICAgJ3BnX2xhc3Rfb2lkJywKICAgICdwZ19sb19jbG9zZScsCiAgICAncGdfbG9fZXhwb3J0JywKICAgICdwZ19sb19pbXBvcnQnLAogICAgJ3BnX2xvX29wZW4nLAogICAgJ3BnX2xvX3JlYWQnLAogICAgJ3BnX2xvX3JlYWRfYWxsJywKICAgICdwZ19sb19zZWVrJywKICAgICdwZ19sb190cnVuY2F0ZScsCiAgICAncGdfbG9fdW5saW5rJywKICAgICdwZ19sb193cml0ZScsCiAgICAncGdfbWV0YV9kYXRhJywKICAgICdwZ19vcHRpb25zJywKICAgICdwZ19wYXJhbWV0ZXJfc3RhdHVzJywKICAgICdwZ19wY29ubmVjdCcsCiAgICAncGdfcGluZycsCiAgICAncGdfcG9ydCcsCiAgICAncGdfcHJlcGFyZScsCiAgICAncGdfcHV0X2xpbmUnLAogICAgJ3BnX3F1ZXJ5JywKICAgICdwZ19xdWVyeV9wYXJhbXMnLAogICAgJ3BnX3Jlc3VsdF9lcnJvcl9maWVsZCcsCiAgICAncGdfcmVzdWx0X3NlZWsnLAogICAgJ3BnX3NlbGVjdCcsCiAgICAncGdfc2VuZF9leGVjdXRlJywKICAgICdwZ19zZW5kX3ByZXBhcmUnLAogICAgJ3BnX3NlbmRfcXVlcnknLAogICAgJ3BnX3NlbmRfcXVlcnlfcGFyYW1zJywKICAgICdwZ19zb2NrZXQnLAogICAgJ3BnX3RyYWNlJywKICAgICdwZ190dHknLAogICAgJ3BnX3VwZGF0ZScsCiAgICAncGdfdmVyc2lvbicsCiAgICAncGhwY3JlZGl0cycsCiAgICAncGhwaW5mbycsCiAgICAncG5nMndibXAnLAogICAgJ3Bvc2l4X2FjY2VzcycsCiAgICAncG9zaXhfZ2V0Z3JuYW0nLAogICAgJ3Bvc2l4X2dldHBnaWQnLAogICAgJ3Bvc2l4X2luaXRncm91cHMnLAogICAgJ3Bvc2l4X2tpbGwnLAogICAgJ3Bvc2l4X21rZmlmbycsCiAgICAncG9zaXhfbWtub2QnLAogICAgJ3Bvc2l4X3NldGVnaWQnLAogICAgJ3Bvc2l4X3NldGV1aWQnLAogICAgJ3Bvc2l4X3NldGdpZCcsCiAgICAncG9zaXhfc2V0cGdpZCcsCiAgICAncG9zaXhfc2V0cmxpbWl0JywKICAgICdwb3NpeF9zZXR1aWQnLAogICAgJ3ByZWdfbWF0Y2gnLAogICAgJ3ByZWdfbWF0Y2hfYWxsJywKICAgICdwcmVnX3JlcGxhY2UnLAogICAgJ3ByZWdfc3BsaXQnLAogICAgJ3Byb2NfZ2V0X3N0YXR1cycsCiAgICAncHJvY19uaWNlJywKICAgICdwc3BlbGxfYWRkX3RvX3BlcnNvbmFsJywKICAgICdwc3BlbGxfYWRkX3RvX3Nlc3Npb24nLAogICAgJ3BzcGVsbF9jbGVhcl9zZXNzaW9uJywKICAgICdwc3BlbGxfY29uZmlnX2NyZWF0ZScsCiAgICAncHNwZWxsX2NvbmZpZ19kYXRhX2RpcicsCiAgICAncHNwZWxsX2NvbmZpZ19kaWN0X2RpcicsCiAgICAncHNwZWxsX2NvbmZpZ19pZ25vcmUnLAogICAgJ3BzcGVsbF9jb25maWdfbW9kZScsCiAgICAncHNwZWxsX2NvbmZpZ19wZXJzb25hbCcsCiAgICAncHNwZWxsX2NvbmZpZ19yZXBsJywKICAgICdwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyJywKICAgICdwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCcsCiAgICAncHNwZWxsX25ldycsCiAgICAncHNwZWxsX25ld19jb25maWcnLAogICAgJ3BzcGVsbF9zYXZlX3dvcmRsaXN0JywKICAgICdwc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnQnLAogICAgJ3BzX2FkZF9sYXVuY2hsaW5rJywKICAgICdwc19hZGRfbG9jYWxsaW5rJywKICAgICdwc19hZGRfbm90ZScsCiAgICAncHNfYWRkX3BkZmxpbmsnLAogICAgJ3BzX2FkZF93ZWJsaW5rJywKICAgICdwc19hcmMnLAogICAgJ3BzX2FyY24nLAogICAgJ3BzX2JlZ2luX3BhZ2UnLAogICAgJ3BzX2JlZ2luX3BhdHRlcm4nLAogICAgJ3BzX2JlZ2luX3RlbXBsYXRlJywKICAgICdwc19jaXJjbGUnLAogICAgJ3BzX2NsaXAnLAogICAgJ3BzX2Nsb3NlJywKICAgICdwc19jbG9zZXBhdGgnLAogICAgJ3BzX2Nsb3NlcGF0aF9zdHJva2UnLAogICAgJ3BzX2Nsb3NlX2ltYWdlJywKICAgICdwc19jb250aW51ZV90ZXh0JywKICAgICdwc19jdXJ2ZXRvJywKICAgICdwc19kZWxldGUnLAogICAgJ3BzX2VuZF9wYWdlJywKICAgICdwc19lbmRfcGF0dGVybicsCiAgICAncHNfZW5kX3RlbXBsYXRlJywKICAgICdwc19maWxsJywKICAgICdwc19maWxsX3N0cm9rZScsCiAgICAncHNfZ2V0X3BhcmFtZXRlcicsCiAgICAncHNfaHlwaGVuYXRlJywKICAgICdwc19pbmNsdWRlX2ZpbGUnLAogICAgJ3BzX2xpbmV0bycsCiAgICAncHNfbW92ZXRvJywKICAgICdwc19uZXcnLAogICAgJ3BzX29wZW5fZmlsZScsCiAgICAncHNfcGxhY2VfaW1hZ2UnLAogICAgJ3BzX3JlY3QnLAogICAgJ3BzX3Jlc3RvcmUnLAogICAgJ3BzX3JvdGF0ZScsCiAgICAncHNfc2F2ZScsCiAgICAncHNfc2NhbGUnLAogICAgJ3BzX3NldGNvbG9yJywKICAgICdwc19zZXRkYXNoJywKICAgICdwc19zZXRmbGF0JywKICAgICdwc19zZXRmb250JywKICAgICdwc19zZXRncmF5JywKICAgICdwc19zZXRsaW5lY2FwJywKICAgICdwc19zZXRsaW5lam9pbicsCiAgICAncHNfc2V0bGluZXdpZHRoJywKICAgICdwc19zZXRtaXRlcmxpbWl0JywKICAgICdwc19zZXRvdmVycHJpbnRtb2RlJywKICAgICdwc19zZXRwb2x5ZGFzaCcsCiAgICAncHNfc2V0X2JvcmRlcl9jb2xvcicsCiAgICAncHNfc2V0X2JvcmRlcl9kYXNoJywKICAgICdwc19zZXRfYm9yZGVyX3N0eWxlJywKICAgICdwc19zZXRfaW5mbycsCiAgICAncHNfc2V0X3BhcmFtZXRlcicsCiAgICAncHNfc2V0X3RleHRfcG9zJywKICAgICdwc19zZXRfdmFsdWUnLAogICAgJ3BzX3NoYWRpbmcnLAogICAgJ3BzX3NoYWRpbmdfcGF0dGVybicsCiAgICAncHNfc2hmaWxsJywKICAgICdwc19zaG93JywKICAgICdwc19zaG93MicsCiAgICAncHNfc2hvd194eScsCiAgICAncHNfc2hvd194eTInLAogICAgJ3BzX3N0cm9rZScsCiAgICAncHNfc3ltYm9sJywKICAgICdwc190cmFuc2xhdGUnLAogICAgJ3B1dGVudicsCiAgICAncmVhZGZpbGUnLAogICAgJ3JlYWRnemZpbGUnLAogICAgJ3JlYWRsaW5lX2FkZF9oaXN0b3J5JywKICAgICdyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwnLAogICAgJ3JlYWRsaW5lX2NsZWFyX2hpc3RvcnknLAogICAgJ3JlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb24nLAogICAgJ3JlYWRsaW5lX3JlYWRfaGlzdG9yeScsCiAgICAncmVhZGxpbmVfd3JpdGVfaGlzdG9yeScsCiAgICAncmVhZGxpbmsnLAogICAgJ3JlYWxwYXRoJywKICAgICdyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJywKICAgICdyZW5hbWUnLAogICAgJ3Jld2luZCcsCiAgICAncmV3aW5kZGlyJywKICAgICdybWRpcicsCiAgICAncnBtYWRkdGFnJywKICAgICdycmRfY3JlYXRlJywKICAgICdyc29ydCcsCiAgICAnc2FwaV93aW5kb3dzX2NwX2NvbnYnLAogICAgJ3NhcGlfd2luZG93c19jcF9zZXQnLAogICAgJ3NhcGlfd2luZG93c19nZW5lcmF0ZV9jdHJsX2V2ZW50JywKICAgICdzYXBpX3dpbmRvd3NfdnQxMDBfc3VwcG9ydCcsCiAgICAnc2NhbmRpcicsCiAgICAnc2VtX2FjcXVpcmUnLAogICAgJ3NlbV9nZXQnLAogICAgJ3NlbV9yZWxlYXNlJywKICAgICdzZW1fcmVtb3ZlJywKICAgICdzZXNzaW9uX2Fib3J0JywKICAgICdzZXNzaW9uX2RlY29kZScsCiAgICAnc2Vzc2lvbl9kZXN0cm95JywKICAgICdzZXNzaW9uX3JlZ2VuZXJhdGVfaWQnLAogICAgJ3Nlc3Npb25fcmVzZXQnLAogICAgJ3Nlc3Npb25fdW5zZXQnLAogICAgJ3Nlc3Npb25fd3JpdGVfY2xvc2UnLAogICAgJ3NldHR5cGUnLAogICAgJ3NldF9pbmNsdWRlX3BhdGgnLAogICAgJ3NldF90aW1lX2xpbWl0JywKICAgICdzaGExX2ZpbGUnLAogICAgJ3NobW9wX2RlbGV0ZScsCiAgICAnc2htb3BfcmVhZCcsCiAgICAnc2htb3Bfd3JpdGUnLAogICAgJ3NobV9wdXRfdmFyJywKICAgICdzaG1fcmVtb3ZlJywKICAgICdzaG1fcmVtb3ZlX3ZhcicsCiAgICAnc2h1ZmZsZScsCiAgICAnc2ltcGxleG1sX2ltcG9ydF9kb20nLAogICAgJ3NpbXBsZXhtbF9sb2FkX2ZpbGUnLAogICAgJ3NpbXBsZXhtbF9sb2FkX3N0cmluZycsCiAgICAnc2xlZXAnLAogICAgJ3NvY2tldF9hY2NlcHQnLAogICAgJ3NvY2tldF9hZGRyaW5mb19iaW5kJywKICAgICdzb2NrZXRfYWRkcmluZm9fY29ubmVjdCcsCiAgICAnc29ja2V0X2JpbmQnLAogICAgJ3NvY2tldF9jb25uZWN0JywKICAgICdzb2NrZXRfY3JlYXRlJywKICAgICdzb2NrZXRfY3JlYXRlX2xpc3RlbicsCiAgICAnc29ja2V0X2NyZWF0ZV9wYWlyJywKICAgICdzb2NrZXRfZXhwb3J0X3N0cmVhbScsCiAgICAnc29ja2V0X2dldHBlZXJuYW1lJywKICAgICdzb2NrZXRfZ2V0c29ja25hbWUnLAogICAgJ3NvY2tldF9nZXRfb3B0aW9uJywKICAgICdzb2NrZXRfaW1wb3J0X3N0cmVhbScsCiAgICAnc29ja2V0X2xpc3RlbicsCiAgICAnc29ja2V0X3JlYWQnLAogICAgJ3NvY2tldF9zZW5kJywKICAgICdzb2NrZXRfc2VuZG1zZycsCiAgICAnc29ja2V0X3NlbmR0bycsCiAgICAnc29ja2V0X3NldF9ibG9jaycsCiAgICAnc29ja2V0X3NldF9ub25ibG9jaycsCiAgICAnc29ja2V0X3NldF9vcHRpb24nLAogICAgJ3NvY2tldF9zaHV0ZG93bicsCiAgICAnc29ja2V0X3dyaXRlJywKICAgICdzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQnLAogICAgJ3NvY2tldF93c2Fwcm90b2NvbF9pbmZvX2ltcG9ydCcsCiAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScsCiAgICAnc29kaXVtX2NyeXB0b19wd2hhc2gnLAogICAgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cicsCiAgICAnc29scl9nZXRfdmVyc2lvbicsCiAgICAnc29ydCcsCiAgICAnc291bmRleCcsCiAgICAnc3BsX2F1dG9sb2FkX3JlZ2lzdGVyJywKICAgICdzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcicsCiAgICAnc3ByaW50ZicsCiAgICAnc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uJywKICAgICdzcWxzcnZfY2FuY2VsJywKICAgICdzcWxzcnZfY2xpZW50X2luZm8nLAogICAgJ3NxbHNydl9jbG9zZScsCiAgICAnc3Fsc3J2X2NvbW1pdCcsCiAgICAnc3Fsc3J2X2NvbmZpZ3VyZScsCiAgICAnc3Fsc3J2X2V4ZWN1dGUnLAogICAgJ3NxbHNydl9mcmVlX3N0bXQnLAogICAgJ3NxbHNydl9nZXRfZmllbGQnLAogICAgJ3NxbHNydl9uZXh0X3Jlc3VsdCcsCiAgICAnc3Fsc3J2X251bV9maWVsZHMnLAogICAgJ3NxbHNydl9udW1fcm93cycsCiAgICAnc3Fsc3J2X3ByZXBhcmUnLAogICAgJ3NxbHNydl9xdWVyeScsCiAgICAnc3Fsc3J2X3JvbGxiYWNrJywKICAgICdzc2RlZXBfZnV6enlfY29tcGFyZScsCiAgICAnc3NkZWVwX2Z1enp5X2hhc2gnLAogICAgJ3NzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lJywKICAgICdzc2gyX2F1dGhfYWdlbnQnLAogICAgJ3NzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZScsCiAgICAnc3NoMl9hdXRoX3Bhc3N3b3JkJywKICAgICdzc2gyX2F1dGhfcHVia2V5X2ZpbGUnLAogICAgJ3NzaDJfY29ubmVjdCcsCiAgICAnc3NoMl9kaXNjb25uZWN0JywKICAgICdzc2gyX2V4ZWMnLAogICAgJ3NzaDJfcHVibGlja2V5X2FkZCcsCiAgICAnc3NoMl9wdWJsaWNrZXlfaW5pdCcsCiAgICAnc3NoMl9wdWJsaWNrZXlfcmVtb3ZlJywKICAgICdzc2gyX3NjcF9yZWN2JywKICAgICdzc2gyX3NjcF9zZW5kJywKICAgICdzc2gyX3NmdHAnLAogICAgJ3NzaDJfc2Z0cF9jaG1vZCcsCiAgICAnc3NoMl9zZnRwX21rZGlyJywKICAgICdzc2gyX3NmdHBfcmVuYW1lJywKICAgICdzc2gyX3NmdHBfcm1kaXInLAogICAgJ3NzaDJfc2Z0cF9zeW1saW5rJywKICAgICdzc2gyX3NmdHBfdW5saW5rJywKICAgICdzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zJywKICAgICdzdHJlYW1fY29weV90b19zdHJlYW0nLAogICAgJ3N0cmVhbV9maWx0ZXJfYXBwZW5kJywKICAgICdzdHJlYW1fZmlsdGVyX3ByZXBlbmQnLAogICAgJ3N0cmVhbV9maWx0ZXJfcmVnaXN0ZXInLAogICAgJ3N0cmVhbV9maWx0ZXJfcmVtb3ZlJywKICAgICdzdHJlYW1fZ2V0X2NvbnRlbnRzJywKICAgICdzdHJlYW1faXNhdHR5JywKICAgICdzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgnLAogICAgJ3N0cmVhbV9zZXRfYmxvY2tpbmcnLAogICAgJ3N0cmVhbV9zZXRfdGltZW91dCcsCiAgICAnc3RyZWFtX3NvY2tldF9hY2NlcHQnLAogICAgJ3N0cmVhbV9zb2NrZXRfY2xpZW50JywKICAgICdzdHJlYW1fc29ja2V0X3BhaXInLAogICAgJ3N0cmVhbV9zb2NrZXRfc2VydmVyJywKICAgICdzdHJlYW1fc29ja2V0X3NodXRkb3duJywKICAgICdzdHJlYW1fc3VwcG9ydHNfbG9jaycsCiAgICAnc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXInLAogICAgJ3N0cmVhbV93cmFwcGVyX3Jlc3RvcmUnLAogICAgJ3N0cmVhbV93cmFwcGVyX3VucmVnaXN0ZXInLAogICAgJ3N0cnB0aW1lJywKICAgICdzdHJ0b3RpbWUnLAogICAgJ3N1YnN0cicsCiAgICAnc3dvb2xlX2FzeW5jX3dyaXRlJywKICAgICdzd29vbGVfYXN5bmNfd3JpdGVmaWxlJywKICAgICdzd29vbGVfZXZlbnRfZGVmZXInLAogICAgJ3N3b29sZV9ldmVudF9kZWwnLAogICAgJ3N3b29sZV9ldmVudF93cml0ZScsCiAgICAnc3ltbGluaycsCiAgICAnc3lzbG9nJywKICAgICdzeXN0ZW0nLAogICAgJ3RlbXBuYW0nLAogICAgJ3RpbWV6b25lX25hbWVfZnJvbV9hYmJyJywKICAgICd0aW1lX25hbm9zbGVlcCcsCiAgICAndGltZV9zbGVlcF91bnRpbCcsCiAgICAndG1wZmlsZScsCiAgICAndG91Y2gnLAogICAgJ3Vhc29ydCcsCiAgICAndWtzb3J0JywKICAgICd1bmxpbmsnLAogICAgJ3VucGFjaycsCiAgICAndW9wel9leHRlbmQnLAogICAgJ3VvcHpfaW1wbGVtZW50JywKICAgICd1c29ydCcsCiAgICAndmlydHVhbCcsCiAgICAndnNwcmludGYnLAogICAgJ3hkaWZmX2ZpbGVfYmRpZmYnLAogICAgJ3hkaWZmX2ZpbGVfYnBhdGNoJywKICAgICd4ZGlmZl9maWxlX2RpZmYnLAogICAgJ3hkaWZmX2ZpbGVfZGlmZl9iaW5hcnknLAogICAgJ3hkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5JywKICAgICd4ZGlmZl9maWxlX3JhYmRpZmYnLAogICAgJ3hkaWZmX3N0cmluZ19icGF0Y2gnLAogICAgJ3hkaWZmX3N0cmluZ19wYXRjaCcsCiAgICAneGRpZmZfc3RyaW5nX3BhdGNoX2JpbmFyeScsCiAgICAneG1scnBjX3NldF90eXBlJywKICAgICd4bWxfcGFyc2VyX2NyZWF0ZScsCiAgICAneG1sX3BhcnNlcl9jcmVhdGVfbnMnLAogICAgJ3htbF9zZXRfb2JqZWN0JywKICAgICd5YW1sX3BhcnNlJywKICAgICd5YW1sX3BhcnNlX2ZpbGUnLAogICAgJ3lhbWxfcGFyc2VfdXJsJywKICAgICd5YXpfY2NsX3BhcnNlJywKICAgICd5YXpfY2xvc2UnLAogICAgJ3lhel9jb25uZWN0JywKICAgICd5YXpfZGF0YWJhc2UnLAogICAgJ3lhel9lbGVtZW50JywKICAgICd5YXpfcHJlc2VudCcsCiAgICAneWF6X3NlYXJjaCcsCiAgICAneWF6X3dhaXQnLAogICAgJ3ppcF9lbnRyeV9jbG9zZScsCiAgICAnemlwX2VudHJ5X29wZW4nLAogICAgJ3ppcF9lbnRyeV9yZWFkJywKICAgICd6bGliX2RlY29kZScsCl07Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/gmp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xHbXBFeGNlcHRpb247CgovKioKICogQ2FsY3VsYXRlcyB0aGUgYmlub21pYWwgY29lZmZpY2llbnQgQyhuLCBrKS4KICoKICogQHBhcmFtIFxHTVB8c3RyaW5nfGludCAkbiBFaXRoZXIgYSBHTVAgbnVtYmVyIHJlc291cmNlIGluIFBIUCA1LjUgYW5kIGVhcmxpZXIsIGEgR01QIG9iamVjdCBpbiBQSFAgNS42IGFuZCBsYXRlciwgb3IgYSBudW1lcmljIHN0cmluZyBwcm92aWRlZCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnZlcnQgdGhlIGxhdHRlciB0byBhIG51bWJlci4KICogQHBhcmFtIGludCAkawogKiBAcmV0dXJuIFxHTVAgUmV0dXJucyB0aGUgYmlub21pYWwgY29lZmZpY2llbnQgQyhuLCBrKS4KICogQHRocm93cyBHbXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdtcF9iaW5vbWlhbCgkbiwgaW50ICRrKTogXEdNUAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdtcF9iaW5vbWlhbCgkbiwgJGspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR21wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEV4cG9ydCBhIEdNUCBudW1iZXIgdG8gYSBiaW5hcnkgc3RyaW5nCiAqCiAqIEBwYXJhbSBcR01QfHN0cmluZ3xpbnQgJGdtcG51bWJlciBUaGUgR01QIG51bWJlciBiZWluZyBleHBvcnRlZAogKiBAcGFyYW0gaW50ICR3b3JkX3NpemUgRGVmYXVsdCB2YWx1ZSBpcyAxLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggY2h1bmsgb2YgYmluYXJ5IGRhdGEuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgRGVmYXVsdCB2YWx1ZSBpcyBHTVBfTVNXX0ZJUlNUIHwgR01QX05BVElWRV9FTkRJQU4uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgR21wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbXBfZXhwb3J0KCRnbXBudW1iZXIsIGludCAkd29yZF9zaXplID0gMSwgaW50ICRvcHRpb25zID0gR01QX01TV19GSVJTVCB8IEdNUF9OQVRJVkVfRU5ESUFOKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ21wX2V4cG9ydCgkZ21wbnVtYmVyLCAkd29yZF9zaXplLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW1wb3J0IGEgR01QIG51bWJlciBmcm9tIGEgYmluYXJ5IHN0cmluZwogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBiaW5hcnkgc3RyaW5nIGJlaW5nIGltcG9ydGVkCiAqIEBwYXJhbSBpbnQgJHdvcmRfc2l6ZSBEZWZhdWx0IHZhbHVlIGlzIDEuIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBjaHVuayBvZiBiaW5hcnkgZGF0YS4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBvcHRpb25zIHBhcmFtZXRlci4KICogQHBhcmFtIGludCAkb3B0aW9ucyBEZWZhdWx0IHZhbHVlIGlzIEdNUF9NU1dfRklSU1QgfCBHTVBfTkFUSVZFX0VORElBTi4KICogQHJldHVybiBcR01QIFJldHVybnMgYSBHTVAgbnVtYmVyLgogKiBAdGhyb3dzIEdtcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ21wX2ltcG9ydChzdHJpbmcgJGRhdGEsIGludCAkd29yZF9zaXplID0gMSwgaW50ICRvcHRpb25zID0gR01QX01TV19GSVJTVCB8IEdNUF9OQVRJVkVfRU5ESUFOKTogXEdNUAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdtcF9pbXBvcnQoJGRhdGEsICR3b3JkX3NpemUsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEdtcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gXEdNUHxzdHJpbmd8aW50ICRzZWVkIFRoZSBzZWVkIHRvIGJlIHNldCBmb3IgdGhlIGdtcF9yYW5kb20sCiAqIGdtcF9yYW5kb21fYml0cywgYW5kCiAqIGdtcF9yYW5kb21fcmFuZ2UgZnVuY3Rpb25zLgogKgogKiBFaXRoZXIgYSBHTVAgbnVtYmVyIHJlc291cmNlIGluIFBIUCA1LjUgYW5kIGVhcmxpZXIsIGEgR01QIG9iamVjdCBpbiBQSFAgNS42IGFuZCBsYXRlciwgb3IgYSBudW1lcmljIHN0cmluZyBwcm92aWRlZCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNvbnZlcnQgdGhlIGxhdHRlciB0byBhIG51bWJlci4KICogQHRocm93cyBHbXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdtcF9yYW5kb21fc2VlZCgkc2VlZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbXBfcmFuZG9tX3NlZWQoJHNlZWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR21wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/gnupg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xHbnVwZ0V4Y2VwdGlvbjsKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkZW50aWZpZXIgVGhlIGdudXBnIGlkZW50aWZpZXIsIGZyb20gYSBjYWxsIHRvCiAqIGdudXBnX2luaXQgb3IgZ251cGcuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbmdlcnByaW50IFRoZSBmaW5nZXJwcmludCBrZXkuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIHBhc3MgcGhyYXNlLgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19hZGRkZWNyeXB0a2V5KCRpZGVudGlmaWVyLCBzdHJpbmcgJGZpbmdlcnByaW50LCBzdHJpbmcgJHBhc3NwaHJhc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfYWRkZGVjcnlwdGtleSgkaWRlbnRpZmllciwgJGZpbmdlcnByaW50LCAkcGFzc3BocmFzZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gc3RyaW5nICRmaW5nZXJwcmludCBUaGUgZmluZ2VycHJpbnQga2V5LgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19hZGRlbmNyeXB0a2V5KCRpZGVudGlmaWVyLCBzdHJpbmcgJGZpbmdlcnByaW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdudXBnX2FkZGVuY3J5cHRrZXkoJGlkZW50aWZpZXIsICRmaW5nZXJwcmludCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gc3RyaW5nICRmaW5nZXJwcmludCBUaGUgZmluZ2VycHJpbnQga2V5LgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFRoZSBwYXNzIHBocmFzZS4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfYWRkc2lnbmtleSgkaWRlbnRpZmllciwgc3RyaW5nICRmaW5nZXJwcmludCwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbnVwZ19hZGRzaWdua2V5KCRpZGVudGlmaWVyLCAkZmluZ2VycHJpbnQsICRwYXNzcGhyYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnbnVwZ19hZGRzaWdua2V5KCRpZGVudGlmaWVyLCAkZmluZ2VycHJpbnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR251cGdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWRlbnRpZmllciBUaGUgZ251cGcgaWRlbnRpZmllciwgZnJvbSBhIGNhbGwgdG8KICogZ251cGdfaW5pdCBvciBnbnVwZy4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfY2xlYXJkZWNyeXB0a2V5cygkaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzKCRpZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEdudXBnRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkZW50aWZpZXIgVGhlIGdudXBnIGlkZW50aWZpZXIsIGZyb20gYSBjYWxsIHRvCiAqIGdudXBnX2luaXQgb3IgZ251cGcuCiAqIEB0aHJvd3MgR251cGdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGdudXBnX2NsZWFyZW5jcnlwdGtleXMoJGlkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfY2xlYXJlbmNyeXB0a2V5cygkaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAdGhyb3dzIEdudXBnRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnbnVwZ19jbGVhcnNpZ25rZXlzKCRpZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdudXBnX2NsZWFyc2lnbmtleXMoJGlkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgR251cGdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRvZ2dsZSB0aGUgYXJtb3JlZCBvdXRwdXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWRlbnRpZmllciBUaGUgZ251cGcgaWRlbnRpZmllciwgZnJvbSBhIGNhbGwgdG8KICogZ251cGdfaW5pdCBvciBnbnVwZy4KICogQHBhcmFtIGludCAkYXJtb3IgUGFzcyBhIG5vbi16ZXJvIGludGVnZXItdmFsdWUgdG8gdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgYXJtb3JlZC1vdXRwdXQKICogKGRlZmF1bHQpLgogKiBQYXNzIDAgdG8gZGlzYWJsZSBhcm1vcmVkIG91dHB1dC4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfc2V0YXJtb3IoJGlkZW50aWZpZXIsIGludCAkYXJtb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfc2V0YXJtb3IoJGlkZW50aWZpZXIsICRhcm1vcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbW9kZSBmb3Igc2lnbmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRpZGVudGlmaWVyIFRoZSBnbnVwZyBpZGVudGlmaWVyLCBmcm9tIGEgY2FsbCB0bwogKiBnbnVwZ19pbml0IG9yIGdudXBnLgogKiBAcGFyYW0gaW50ICRzaWdubW9kZSBUaGUgbW9kZSBmb3Igc2lnbmluZy4KICoKICogc2lnbm1vZGUgdGFrZXMgYSBjb25zdGFudCBpbmRpY2F0aW5nIHdoYXQgdHlwZSBvZgogKiBzaWduYXR1cmUgc2hvdWxkIGJlIHByb2R1Y2VkLiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZQogKiBHTlVQR19TSUdfTU9ERV9OT1JNQUwsCiAqIEdOVVBHX1NJR19NT0RFX0RFVEFDSCBhbmQKICogR05VUEdfU0lHX01PREVfQ0xFQVIuCiAqIEJ5IGRlZmF1bHQgR05VUEdfU0lHX01PREVfQ0xFQVIgaXMgdXNlZC4KICogQHRocm93cyBHbnVwZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ251cGdfc2V0c2lnbm1vZGUoJGlkZW50aWZpZXIsIGludCAkc2lnbm1vZGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ251cGdfc2V0c2lnbm1vZGUoJGlkZW50aWZpZXIsICRzaWdubW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBHbnVwZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/hash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xIYXNoRXhjZXB0aW9uOwoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGFsZ28gTmFtZSBvZiBzZWxlY3RlZCBoYXNoaW5nIGFsZ29yaXRobSAoaS5lLiAic2hhMjU2IiwgInNoYTUxMiIsICJoYXZhbDE2MCw0IiwgZXRjLi4pCiAqIFNlZSBoYXNoX2FsZ29zIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMuCiAqCiAqCiAqIE5vbi1jcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZC4KICoKICoKICoKICogTm9uLWNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkLgogKiBAcGFyYW0gc3RyaW5nICRpa20gSW5wdXQga2V5aW5nIG1hdGVyaWFsIChyYXcgYmluYXJ5KS4gQ2Fubm90IGJlIGVtcHR5LgogKiBAcGFyYW0gaW50ICRsZW5ndGggRGVzaXJlZCBvdXRwdXQgbGVuZ3RoIGluIGJ5dGVzLgogKiBDYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDI1NSB0aW1lcyB0aGUgY2hvc2VuIGhhc2ggZnVuY3Rpb24gc2l6ZS4KICoKICogSWYgbGVuZ3RoIGlzIDAsIHRoZSBvdXRwdXQgbGVuZ3RoCiAqIHdpbGwgZGVmYXVsdCB0byB0aGUgY2hvc2VuIGhhc2ggZnVuY3Rpb24gc2l6ZS4KICogQHBhcmFtIHN0cmluZyAkaW5mbyBBcHBsaWNhdGlvbi9jb250ZXh0LXNwZWNpZmljIGluZm8gc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRzYWx0IFNhbHQgdG8gdXNlIGR1cmluZyBkZXJpdmF0aW9uLgogKgogKiBXaGlsZSBvcHRpb25hbCwgYWRkaW5nIHJhbmRvbSBzYWx0IHNpZ25pZmljYW50bHkgaW1wcm92ZXMgdGhlIHN0cmVuZ3RoIG9mIEhLREYuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRlcml2ZWQga2V5CiAqIChhbHNvIGtub3duIGFzIG91dHB1dCBrZXlpbmcgbWF0ZXJpYWwgLSBPS00pOy4KICogQHRocm93cyBIYXNoRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoYXNoX2hrZGYoc3RyaW5nICRhbGdvLCBzdHJpbmcgJGlrbSwgaW50ICRsZW5ndGggPSAwLCBzdHJpbmcgJGluZm8gPSAnJywgc3RyaW5nICRzYWx0ID0gJycpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoYXNoX2hrZGYoJGFsZ28sICRpa20sICRsZW5ndGgsICRpbmZvLCAkc2FsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBIYXNoRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBcSGFzaENvbnRleHQgJGhjb250ZXh0IEhhc2hpbmcgY29udGV4dCByZXR1cm5lZCBieSBoYXNoX2luaXQuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFVSTCBkZXNjcmliaW5nIGxvY2F0aW9uIG9mIGZpbGUgdG8gYmUgaGFzaGVkOyBTdXBwb3J0cyBmb3BlbiB3cmFwcGVycy4KICogQHBhcmFtIFxIYXNoQ29udGV4dHxudWxsICRzY29udGV4dCBTdHJlYW0gY29udGV4dCBhcyByZXR1cm5lZCBieSBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEB0aHJvd3MgSGFzaEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGFzaF91cGRhdGVfZmlsZShcSGFzaENvbnRleHQgJGhjb250ZXh0LCBzdHJpbmcgJGZpbGVuYW1lLCA/XEhhc2hDb250ZXh0ICRzY29udGV4dCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaGFzaF91cGRhdGVfZmlsZSgkaGNvbnRleHQsICRmaWxlbmFtZSwgJHNjb250ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEhhc2hFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ibase.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJYmFzZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzY2FyZCBhIEJMT0IgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQgYnkKICogZmJpcmRfYmxvYl9jbG9zZS4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGZiaXJkX2Jsb2JfY3JlYXRlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBmYmlyZF9ibG9iX2NhbmNlbCgkYmxvYl9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZmJpcmRfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlIFRoZSBoYW5kbGUgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBzZXJ2aWNlLgogKiBAcGFyYW0gc3RyaW5nICR1c2VyX25hbWUgVGhlIGxvZ2luIG5hbWUgb2YgdGhlIG5ldyBkYXRhYmFzZSB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgb2YgdGhlIG5ldyB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFRoZSBmaXJzdCBuYW1lIG9mIHRoZSBuZXcgZGF0YWJhc2UgdXNlci4KICogQHBhcmFtIHN0cmluZyAkbWlkZGxlX25hbWUgVGhlIG1pZGRsZSBuYW1lIG9mIHRoZSBuZXcgZGF0YWJhc2UgdXNlci4KICogQHBhcmFtIHN0cmluZyAkbGFzdF9uYW1lIFRoZSBsYXN0IG5hbWUgb2YgdGhlIG5ldyBkYXRhYmFzZSB1c2VyLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9hZGRfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGZpcnN0X25hbWUgPSBudWxsLCBzdHJpbmcgJG1pZGRsZV9uYW1lID0gbnVsbCwgc3RyaW5nICRsYXN0X25hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxhc3RfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfYWRkX3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUsICRsYXN0X25hbWUpOwogICAgfSBlbHNlaWYgKCRtaWRkbGVfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfYWRkX3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUpOwogICAgfSBlbHNlaWYgKCRmaXJzdF9uYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9hZGRfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2FkZF91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSAocmVtb3RlKSBkYXRhYmFzZSBzZXJ2ZXIuIFRoZXJlIGl0IHN0YXJ0cyBhIG5ldyBiYWNrdXAgcHJvY2Vzcy4gVGhlcmVmb3JlIHlvdQogKiB3b24ndCBnZXQgYW55IHJlc3BvbnNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZSBBIHByZXZpb3VzbHkgb3BlbmVkIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICogQHBhcmFtIHN0cmluZyAkc291cmNlX2RiIFRoZSBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gdGhlIGRhdGFiYXNlIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIuIFlvdSBjYW4gYWxzbyB1c2UgYSBkYXRhYmFzZSBhbGlhcy4KICogQHBhcmFtIHN0cmluZyAkZGVzdF9maWxlIFRoZSBwYXRoIHRvIHRoZSBiYWNrdXAgZmlsZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZm9yIGJhY2t1cC4KICogVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uCiAqIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKiBJQkFTRV9CS1BfSUdOT1JFX0NIRUNLU1VNUywKICogSUJBU0VfQktQX0lHTk9SRV9MSU1CTywKICogSUJBU0VfQktQX01FVEFEQVRBX09OTFksCiAqIElCQVNFX0JLUF9OT19HQVJCQUdFX0NPTExFQ1QsCiAqIElCQVNFX0JLUF9PTERfREVTQ1JJUFRJT05TLAogKiBJQkFTRV9CS1BfTk9OX1RSQU5TUE9SVEFCTEUgb3IKICogSUJBU0VfQktQX0NPTlZFUlQuCiAqIFJlYWQgdGhlIHNlY3Rpb24gYWJvdXQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogKiBAcGFyYW0gYm9vbCAkdmVyYm9zZSBTaW5jZSB0aGUgYmFja3VwIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLCB5b3UgZG9uJ3QgaGF2ZSBhbnkgY2hhbmNlCiAqIHRvIGdldCBpdHMgb3V0cHV0LiBUaGlzIGFyZ3VtZW50IGlzIHVzZWxlc3MuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFNpbmNlIHRoZSBiYWNrdXAgcHJvY2VzcyBpcyBkb25lIG9uIHRoZSAocmVtb3RlKSBzZXJ2ZXIsIHRoaXMgZnVuY3Rpb24ganVzdCBwYXNzZXMgdGhlIGFyZ3VtZW50cyB0byBpdC4KICogV2hpbGUgdGhlIGFyZ3VtZW50cyBhcmUgbGVnYWwsIHlvdSB3b24ndCBnZXQgRkFMU0UuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2JhY2t1cCgkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkc291cmNlX2RiLCBzdHJpbmcgJGRlc3RfZmlsZSwgaW50ICRvcHRpb25zID0gMCwgYm9vbCAkdmVyYm9zZSA9IGZhbHNlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2JhY2t1cCgkc2VydmljZV9oYW5kbGUsICRzb3VyY2VfZGIsICRkZXN0X2ZpbGUsICRvcHRpb25zLCAkdmVyYm9zZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzY2FyZCBhIEJMT0IgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQgYnkKICogaWJhc2VfYmxvYl9jbG9zZS4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2JfY3JlYXRlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2NhbmNlbCgkYmxvYl9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpYmFzZV9ibG9iX2NyZWF0ZSBjcmVhdGVzIGEgbmV3IEJMT0IgZm9yIGZpbGxpbmcgd2l0aAogKiBkYXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyLiBJZiBvbWl0dGVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcwogKiBhc3N1bWVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBCTE9CIGhhbmRsZSBmb3IgbGF0ZXIgdXNlIHdpdGgKICogaWJhc2VfYmxvYl9hZGQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2Jsb2JfY3JlYXRlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2Jsb2JfY3JlYXRlKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGF0IG1vc3QgbGVuIGJ5dGVzIGZyb20gYSBCTE9CCiAqIHRoYXQgaGFzIGJlZW4gb3BlbmVkIGZvciByZWFkaW5nIGJ5IGliYXNlX2Jsb2Jfb3Blbi4KICoKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2Jfb3Blbi4KICogQHBhcmFtIGludCAkbGVuIFNpemUgb2YgcmV0dXJuZWQgZGF0YS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhdCBtb3N0IGxlbiBieXRlcyBmcm9tIHRoZSBCTE9CLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2dldCgkYmxvYl9oYW5kbGUsIGludCAkbGVuKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfYmxvYl9nZXQoJGJsb2JfaGFuZGxlLCAkbGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyB0aGUgbGluayB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aAogKiBhIGNvbm5lY3Rpb24gaWQgcmV0dXJuZWQgZnJvbSBpYmFzZV9jb25uZWN0LgogKiBEZWZhdWx0IHRyYW5zYWN0aW9uIG9uIGxpbmsgaXMgY29tbWl0dGVkLCBvdGhlciB0cmFuc2FjdGlvbnMgYXJlCiAqIHJvbGxlZCBiYWNrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBmcm9tCiAqIGliYXNlX2Nvbm5lY3QuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rCiAqIGlzIGFzc3VtZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2Nsb3NlKCRjb25uZWN0aW9uX2lkID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9jbG9zZSgkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgY2xvc2luZyBpdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgSWYgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gY29tbWl0cyB0aGUgZGVmYXVsdAogKiB0cmFuc2FjdGlvbiBvZiB0aGUgZGVmYXVsdCBsaW5rLiBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb25uZWN0aW9uCiAqIGlkZW50aWZpZXIsIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbm5lY3Rpb24KICogd2lsbCBiZSBjb21taXR0ZWQuIElmIHRoZSBhcmd1bWVudCBpcyBhIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIsIHRoZQogKiBjb3JyZXNwb25kaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgY29tbWl0dGVkLiBUaGUgdHJhbnNhY3Rpb24gY29udGV4dAogKiB3aWxsIGJlIHJldGFpbmVkLCBzbyBzdGF0ZW1lbnRzIGV4ZWN1dGVkIGZyb20gd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24KICogd2lsbCBub3QgYmUgaW52YWxpZGF0ZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2NvbW1pdF9yZXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfY29tbWl0X3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb21taXRzIGEgdHJhbnNhY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19vcl90cmFuc19pZGVudGlmaWVyIElmIGNhbGxlZCB3aXRob3V0IGFuIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIGRlZmF1bHQKICogdHJhbnNhY3Rpb24gb2YgdGhlIGRlZmF1bHQgbGluay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29ubmVjdGlvbgogKiBpZGVudGlmaWVyLCB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBjb25uZWN0aW9uCiAqIHdpbGwgYmUgY29tbWl0dGVkLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfY29tbWl0KCRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2NvbW1pdCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYW4gRmlyZWJpcmQvSW50ZXJCYXNlIHNlcnZlci4KICoKICogSW4gY2FzZSBhIHNlY29uZCBjYWxsIGlzIG1hZGUgdG8gaWJhc2VfY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZSBsaW5rCiAqIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4gVGhlIGxpbmsgdG8gdGhlCiAqIHNlcnZlciB3aWxsIGJlIGNsb3NlZCBhcyBzb29uIGFzIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLCB1bmxlc3MKICogaXQncyBjbG9zZWQgZWFybGllciBieSBleHBsaWNpdGx5IGNhbGxpbmcgaWJhc2VfY2xvc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJ2hvc3RuYW1lL3BvcnQ6JwogKiAoVENQL0lQIHdpdGggaW50ZXJiYXNlIHNlcnZlciBvbiBjdXN0b20gVENQIHBvcnQpLCAnLy9ob3N0bmFtZS8nCiAqIChOZXRCRVVJKSwgZGVwZW5kaW5nIG9uIHRoZSBjb25uZWN0aW9uCiAqIHByb3RvY29sIHVzZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VyIG5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF91c2VyIHBocC5pbmkgZGlyZWN0aXZlLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLiBDYW4gYmUgc2V0IHdpdGggdGhlCiAqIGliYXNlLmRlZmF1bHRfcGFzc3dvcmQgcGhwLmluaSBkaXJlY3RpdmUuCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgY2hhcnNldCBpcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhCiAqIGRhdGFiYXNlLgogKiBAcGFyYW0gaW50ICRidWZmZXJzIGJ1ZmZlcnMgaXMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSBidWZmZXJzIHRvCiAqIGFsbG9jYXRlIGZvciB0aGUgc2VydmVyLXNpZGUgY2FjaGUuIElmIDAgb3Igb21pdHRlZCwgc2VydmVyIGNob29zZXMKICogaXRzIG93biBkZWZhdWx0LgogKiBAcGFyYW0gaW50ICRkaWFsZWN0IGRpYWxlY3Qgc2VsZWN0cyB0aGUgZGVmYXVsdCBTUUwgZGlhbGVjdCBmb3IgYW55CiAqIHN0YXRlbWVudCBleGVjdXRlZCB3aXRoaW4gYSBjb25uZWN0aW9uLCBhbmQgaXQgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QKICogb25lIHN1cHBvcnRlZCBieSBjbGllbnQgbGlicmFyaWVzLgogKiBAcGFyYW0gc3RyaW5nICRyb2xlIEZ1bmN0aW9uYWwgb25seSB3aXRoIEludGVyQmFzZSA1IGFuZCB1cC4KICogQHBhcmFtIGludCAkc3luYwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gRmlyZWJpcmQvSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9jb25uZWN0KHN0cmluZyAkZGF0YWJhc2UgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIHN0cmluZyAkY2hhcnNldCA9IG51bGwsIGludCAkYnVmZmVycyA9IG51bGwsIGludCAkZGlhbGVjdCA9IG51bGwsIHN0cmluZyAkcm9sZSA9IG51bGwsIGludCAkc3luYyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkc3luYyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSwgJHN5bmMpOwogICAgfSBlbHNlaWYgKCRyb2xlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0LCAkYnVmZmVycywgJGRpYWxlY3QsICRyb2xlKTsKICAgIH0gZWxzZWlmICgkZGlhbGVjdCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0KTsKICAgIH0gZWxzZWlmICgkYnVmZmVycyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMpOwogICAgfSBlbHNlaWYgKCRjaGFyc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0KTsKICAgIH0gZWxzZWlmICgkcGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2Nvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX2Nvbm5lY3QoJGRhdGFiYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlIFRoZSBoYW5kbGUgb24gdGhlIGRhdGFiYXNlIHNlcnZlciBzZXJ2aWNlLgogKiBAcGFyYW0gc3RyaW5nICR1c2VyX25hbWUgVGhlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIgeW91IHdhbnQgdG8gZGVsZXRlIGZyb20gdGhlIGRhdGFiYXNlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9kZWxldGVfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX2RlbGV0ZV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbnMgZHJvcHMgYSBkYXRhYmFzZSB0aGF0IHdhcyBvcGVuZWQgYnkgZWl0aGVyIGliYXNlX2Nvbm5lY3QKICogb3IgaWJhc2VfcGNvbm5lY3QuIFRoZSBkYXRhYmFzZSBpcyBjbG9zZWQgYW5kIGRlbGV0ZWQgZnJvbSB0aGUgc2VydmVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfZHJvcF9kYigkY29ubmVjdGlvbiA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfZHJvcF9kYigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjYXVzZXMgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlciBzcGVjaWZpZWQgYnkKICogZXZlbnQgdG8gYmUgY2FuY2VsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbAogKiBubyBsb25nZXIgYmUgY2FsbGVkIGZvciB0aGUgZXZlbnRzIGl0IHdhcyByZWdpc3RlcmVkIHRvIGhhbmRsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBBbiBldmVudCByZXNvdXJjZSwgY3JlYXRlZCBieQogKiBpYmFzZV9zZXRfZXZlbnRfaGFuZGxlci4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyKCRldmVudCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXIoJGV2ZW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyBhIHByZXBhcmVkIHF1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXJ5IEEgcXVlcnkgcHJlcGFyZWQgd2l0aCBpYmFzZV9wcmVwYXJlLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9mcmVlX3F1ZXJ5KCRxdWVyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX3F1ZXJ5KCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRnJlZXMgYSByZXN1bHQgc2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyIEEgcmVzdWx0IHNldCBjcmVhdGVkIGJ5IGliYXNlX3F1ZXJ5IG9yCiAqIGliYXNlX2V4ZWN1dGUuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX2ZyZWVfcmVzdWx0KCRyZXN1bHRfaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkZGIKICogQHBhcmFtIGludCAkYWN0aW9uCiAqIEBwYXJhbSBpbnQgJGFyZ3VtZW50CiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX21haW50YWluX2RiKCRzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nICRkYiwgaW50ICRhY3Rpb24sIGludCAkYXJndW1lbnQgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX21haW50YWluX2RiKCRzZXJ2aWNlX2hhbmRsZSwgJGRiLCAkYWN0aW9uLCAkYXJndW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJhc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUgVGhlIGhhbmRsZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyIHNlcnZpY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfbmFtZSBUaGUgbG9naW4gbmFtZSBvZiB0aGUgZGF0YWJhc2UgdXNlciB0byBtb2RpZnkuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSB1c2VyJ3MgbmV3IHBhc3N3b3JkLgogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFRoZSB1c2VyJ3MgbmV3IGZpcnN0IG5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJG1pZGRsZV9uYW1lIFRoZSB1c2VyJ3MgbmV3IG1pZGRsZSBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRsYXN0X25hbWUgVGhlIHVzZXIncyBuZXcgbGFzdCBuYW1lLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9tb2RpZnlfdXNlcigkc2VydmljZV9oYW5kbGUsIHN0cmluZyAkdXNlcl9uYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGZpcnN0X25hbWUgPSBudWxsLCBzdHJpbmcgJG1pZGRsZV9uYW1lID0gbnVsbCwgc3RyaW5nICRsYXN0X25hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxhc3RfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfbW9kaWZ5X3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUsICRsYXN0X25hbWUpOwogICAgfSBlbHNlaWYgKCRtaWRkbGVfbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfbW9kaWZ5X3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lLCAkbWlkZGxlX25hbWUpOwogICAgfSBlbHNlaWYgKCRmaXJzdF9uYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9tb2RpZnlfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX21vZGlmeV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSBuYW1lIHRvIGEgcmVzdWx0IHNldC4gVGhpcyBuYW1lIGNhbiBiZSB1c2VkIGxhdGVyIGluCiAqIFVQREFURXxERUxFVEUgLi4uIFdIRVJFIENVUlJFTlQgT0YgbmFtZSBzdGF0ZW1lbnRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBBbiBJbnRlckJhc2UgcmVzdWx0IHNldC4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSB0byBiZSBhc3NpZ25lZC4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfbmFtZV9yZXN1bHQoJHJlc3VsdCwgc3RyaW5nICRuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX25hbWVfcmVzdWx0KCRyZXN1bHQsICRuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVucyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UuCiAqCiAqIGliYXNlX3Bjb25uZWN0IGFjdHMgdmVyeSBtdWNoIGxpa2UKICogaWJhc2VfY29ubmVjdCB3aXRoIHR3byBtYWpvciBkaWZmZXJlbmNlcy4KICoKICogRmlyc3QsIHdoZW4gY29ubmVjdGluZywgdGhlIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRvIGZpbmQgYSAocGVyc2lzdGVudCkKICogbGluayB0aGF0J3MgYWxyZWFkeSBvcGVuZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBJZiBvbmUgaXMgZm91bmQsIGFuCiAqIGlkZW50aWZpZXIgZm9yIGl0IHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiBvcGVuaW5nIGEgbmV3IGNvbm5lY3Rpb24uCiAqCiAqIFNlY29uZCwgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEludGVyQmFzZSBzZXJ2ZXIgd2lsbCBub3QgYmUgY2xvc2VkIHdoZW4gdGhlCiAqIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IGVuZHMuIEluc3RlYWQsIHRoZSBsaW5rIHdpbGwgcmVtYWluIG9wZW4gZm9yCiAqIGZ1dHVyZSB1c2UgKGliYXNlX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IGliYXNlX3Bjb25uZWN0KS4gVGhpcyB0eXBlIG9mIGxpbmsgaXMKICogdGhlcmVmb3JlIGNhbGxlZCAncGVyc2lzdGVudCcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJy8vaG9zdG5hbWUvJwogKiAoTmV0QkVVSSkgb3IgJ2hvc3RuYW1lQCcgKElQWC9TUFgpLCBkZXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24KICogcHJvdG9jb2wgdXNlZC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVGhlIHVzZXIgbmFtZS4gQ2FuIGJlIHNldCB3aXRoIHRoZQogKiBpYmFzZS5kZWZhdWx0X3VzZXIgcGhwLmluaSBkaXJlY3RpdmUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBmb3IgdXNlcm5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF9wYXNzd29yZCBwaHAuaW5pIGRpcmVjdGl2ZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBjaGFyc2V0IGlzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIGEKICogZGF0YWJhc2UuCiAqIEBwYXJhbSBpbnQgJGJ1ZmZlcnMgYnVmZmVycyBpcyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGJ1ZmZlcnMgdG8KICogYWxsb2NhdGUgZm9yIHRoZSBzZXJ2ZXItc2lkZSBjYWNoZS4gSWYgMCBvciBvbWl0dGVkLCBzZXJ2ZXIgY2hvb3NlcwogKiBpdHMgb3duIGRlZmF1bHQuCiAqIEBwYXJhbSBpbnQgJGRpYWxlY3QgZGlhbGVjdCBzZWxlY3RzIHRoZSBkZWZhdWx0IFNRTCBkaWFsZWN0IGZvciBhbnkKICogc3RhdGVtZW50IGV4ZWN1dGVkIHdpdGhpbiBhIGNvbm5lY3Rpb24sIGFuZCBpdCBkZWZhdWx0cyB0byB0aGUgaGlnaGVzdAogKiBvbmUgc3VwcG9ydGVkIGJ5IGNsaWVudCBsaWJyYXJpZXMuIEZ1bmN0aW9uYWwgb25seSB3aXRoIEludGVyQmFzZSA2CiAqIGFuZCB1cC4KICogQHBhcmFtIHN0cmluZyAkcm9sZSBGdW5jdGlvbmFsIG9ubHkgd2l0aCBJbnRlckJhc2UgNSBhbmQgdXAuCiAqIEBwYXJhbSBpbnQgJHN5bmMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBJYmFzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWJhc2VfcGNvbm5lY3Qoc3RyaW5nICRkYXRhYmFzZSA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCwgaW50ICRidWZmZXJzID0gbnVsbCwgaW50ICRkaWFsZWN0ID0gbnVsbCwgc3RyaW5nICRyb2xlID0gbnVsbCwgaW50ICRzeW5jID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzeW5jICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSwgJHN5bmMpOwogICAgfSBlbHNlaWYgKCRyb2xlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMsICRkaWFsZWN0LCAkcm9sZSk7CiAgICB9IGVsc2VpZiAoJGRpYWxlY3QgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjaGFyc2V0LCAkYnVmZmVycywgJGRpYWxlY3QpOwogICAgfSBlbHNlaWYgKCRidWZmZXJzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCwgJGJ1ZmZlcnMpOwogICAgfSBlbHNlaWYgKCRjaGFyc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY2hhcnNldCk7CiAgICB9IGVsc2VpZiAoJHBhc3N3b3JkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UsICR1c2VybmFtZSwgJHBhc3N3b3JkKTsKICAgIH0gZWxzZWlmICgkdXNlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGliYXNlX3Bjb25uZWN0KCRkYXRhYmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcaWJhc2VfcGNvbm5lY3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcGFzc2VzIHRoZSBhcmd1bWVudHMgdG8gdGhlIChyZW1vdGUpIGRhdGFiYXNlIHNlcnZlci4gVGhlcmUgaXQgc3RhcnRzIGEgbmV3IHJlc3RvcmUgcHJvY2Vzcy4gVGhlcmVmb3JlIHlvdQogKiB3b24ndCBnZXQgYW55IHJlc3BvbnNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZSBBIHByZXZpb3VzbHkgb3BlbmVkIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICogQHBhcmFtIHN0cmluZyAkc291cmNlX2ZpbGUgVGhlIGFic29sdXRlIHBhdGggb24gdGhlIHNlcnZlciB3aGVyZSB0aGUgYmFja3VwIGZpbGUgaXMgbG9jYXRlZC4KICogQHBhcmFtIHN0cmluZyAkZGVzdF9kYiBUaGUgcGF0aCB0byBjcmVhdGUgdGhlIG5ldyBkYXRhYmFzZSBvbiB0aGUgc2VydmVyLiBZb3UgY2FuIGFsc28gdXNlIGRhdGFiYXNlIGFsaWFzLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZm9yIHJlc3RvcmUuCiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbgogKiBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogSUJBU0VfUkVTX0RFQUNUSVZBVEVfSURYLAogKiBJQkFTRV9SRVNfTk9fU0hBRE9XLAogKiBJQkFTRV9SRVNfTk9fVkFMSURJVFksCiAqIElCQVNFX1JFU19PTkVfQVRfQV9USU1FLAogKiBJQkFTRV9SRVNfUkVQTEFDRSwKICogSUJBU0VfUkVTX0NSRUFURSwKICogSUJBU0VfUkVTX1VTRV9BTExfU1BBQ0UsCiAqIElCQVNFX1BSUF9QQUdFX0JVRkZFUlMsCiAqIElCQVNFX1BSUF9TV0VFUF9JTlRFUlZBTCwKICogSUJBU0VfUkVTX0NSRUFURS4KICogUmVhZCB0aGUgc2VjdGlvbiBhYm91dCAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAqIEBwYXJhbSBib29sICR2ZXJib3NlIFNpbmNlIHRoZSByZXN0b3JlIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyLCB5b3UgZG9uJ3QgaGF2ZSBhbnkgY2hhbmNlCiAqIHRvIGdldCBpdHMgb3V0cHV0LiBUaGlzIGFyZ3VtZW50IGlzIHVzZWxlc3MuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFNpbmNlIHRoZSByZXN0b3JlIHByb2Nlc3MgaXMgZG9uZSBvbiB0aGUgKHJlbW90ZSkgc2VydmVyLCB0aGlzIGZ1bmN0aW9uIGp1c3QgcGFzc2VzIHRoZSBhcmd1bWVudHMgdG8gaXQuCiAqIFdoaWxlIHRoZSBhcmd1bWVudHMgYXJlIGxlZ2FsLCB5b3Ugd29uJ3QgZ2V0IEZBTFNFLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9yZXN0b3JlKCRzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nICRzb3VyY2VfZmlsZSwgc3RyaW5nICRkZXN0X2RiLCBpbnQgJG9wdGlvbnMgPSAwLCBib29sICR2ZXJib3NlID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2VfcmVzdG9yZSgkc2VydmljZV9oYW5kbGUsICRzb3VyY2VfZmlsZSwgJGRlc3RfZGIsICRvcHRpb25zLCAkdmVyYm9zZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSb2xscyBiYWNrIGEgdHJhbnNhY3Rpb24gd2l0aG91dCBjbG9zaW5nIGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByb2xscyBiYWNrIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBUaGUgdHJhbnNhY3Rpb24gY29udGV4dAogKiB3aWxsIGJlIHJldGFpbmVkLCBzbyBzdGF0ZW1lbnRzIGV4ZWN1dGVkIGZyb20gd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24KICogd2lsbCBub3QgYmUgaW52YWxpZGF0ZWQuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX3JvbGxiYWNrX3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9yb2xsYmFja19yZXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYmFzZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByb2xscyBiYWNrIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJvbGxlZCBiYWNrLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9yb2xsYmFjaygkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpYmFzZV9yb2xsYmFjaygkbGlua19vcl90cmFuc19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0IFRoZSBuYW1lIG9yIGlwIGFkZHJlc3Mgb2YgdGhlIGRhdGFiYXNlIGhvc3QuIFlvdSBjYW4gZGVmaW5lIHRoZSBwb3J0IGJ5IGFkZGluZwogKiAnLycgYW5kIHBvcnQgbnVtYmVyLiBJZiBubyBwb3J0IGlzIHNwZWNpZmllZCwgcG9ydCAzMDUwIHdpbGwgYmUgdXNlZC4KICogQHBhcmFtIHN0cmluZyAkZGJhX3VzZXJuYW1lIFRoZSBuYW1lIG9mIGFueSB2YWxpZCB1c2VyLgogKiBAcGFyYW0gc3RyaW5nICRkYmFfcGFzc3dvcmQgVGhlIHVzZXIncyBwYXNzd29yZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgSW50ZXJiYXNlIC8gRmlyZWJpcmQgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSWJhc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGliYXNlX3NlcnZpY2VfYXR0YWNoKHN0cmluZyAkaG9zdCwgc3RyaW5nICRkYmFfdXNlcm5hbWUsIHN0cmluZyAkZGJhX3Bhc3N3b3JkKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGliYXNlX3NlcnZpY2VfYXR0YWNoKCRob3N0LCAkZGJhX3VzZXJuYW1lLCAkZGJhX3Bhc3N3b3JkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUgQSBwcmV2aW91c2x5IGNyZWF0ZWQgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKiBAdGhyb3dzIEliYXNlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpYmFzZV9zZXJ2aWNlX2RldGFjaCgkc2VydmljZV9oYW5kbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaWJhc2Vfc2VydmljZV9kZXRhY2goJHNlcnZpY2VfaGFuZGxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEliYXNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ibmDb2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJYm1EYjJFeGNlcHRpb247CgovKioKICogU2V0cyBvciBnZXRzIHRoZSBBVVRPQ09NTUlUIGJlaGF2aW9yIG9mIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEEgdmFsaWQgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZSB2YXJpYWJsZSBhcyByZXR1cm5lZCBmcm9tCiAqIGRiMl9jb25uZWN0IG9yIGRiMl9wY29ubmVjdC4KICogQHBhcmFtIGludCAkdmFsdWUgT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKgogKgogKiBEQjJfQVVUT0NPTU1JVF9PRkYKICoKICoKICogVHVybnMgQVVUT0NPTU1JVCBvZmYuCiAqCiAqCiAqCiAqCiAqIERCMl9BVVRPQ09NTUlUX09OCiAqCiAqCiAqIFR1cm5zIEFVVE9DT01NSVQgb24uCiAqCiAqCiAqCiAqCiAqCiAqIFR1cm5zIEFVVE9DT01NSVQgb2ZmLgogKgogKiBUdXJucyBBVVRPQ09NTUlUIG9uLgogKiBAcmV0dXJuIG1peGVkIFdoZW4gZGIyX2F1dG9jb21taXQgcmVjZWl2ZXMgb25seSB0aGUKICogY29ubmVjdGlvbiBwYXJhbWV0ZXIsIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUKICogb2YgQVVUT0NPTU1JVCBmb3IgdGhlIHJlcXVlc3RlZCBjb25uZWN0aW9uIGFzIGFuIGludGVnZXIgdmFsdWUuIEEgdmFsdWUgb2YKICogREIyX0FVVE9DT01NSVRfT0ZGIGluZGljYXRlcyB0aGF0IEFVVE9DT01NSVQgaXMgb2ZmLCB3aGlsZSBhIHZhbHVlIG9mIERCMl9BVVRPQ09NTUlUX09OIGluZGljYXRlcyB0aGF0CiAqIEFVVE9DT01NSVQgaXMgb24uCiAqCiAqIFdoZW4gZGIyX2F1dG9jb21taXQgcmVjZWl2ZXMgYm90aCB0aGUKICogY29ubmVjdGlvbiBwYXJhbWV0ZXIgYW5kCiAqIGF1dG9jb21taXQgcGFyYW1ldGVyLCBpdCBhdHRlbXB0cyB0byBzZXQgdGhlCiAqIEFVVE9DT01NSVQgc3RhdGUgb2YgdGhlIHJlcXVlc3RlZCBjb25uZWN0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9hdXRvY29tbWl0KCRjb25uZWN0aW9uLCBpbnQgJHZhbHVlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2F1dG9jb21taXQoJGNvbm5lY3Rpb24sICR2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2F1dG9jb21taXQoJGNvbm5lY3Rpb24pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEJpbmRzIGEgUEhQIHZhcmlhYmxlIHRvIGFuIFNRTCBzdGF0ZW1lbnQgcGFyYW1ldGVyIGluIGEgc3RhdGVtZW50IHJlc291cmNlCiAqIHJldHVybmVkIGJ5IGRiMl9wcmVwYXJlLiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHlvdSBtb3JlCiAqIGNvbnRyb2wgb3ZlciB0aGUgcGFyYW1ldGVyIHR5cGUsIGRhdGEgdHlwZSwgcHJlY2lzaW9uLCBhbmQgc2NhbGUgZm9yIHRoZQogKiBwYXJhbWV0ZXIgdGhhbiBzaW1wbHkgcGFzc2luZyB0aGUgdmFyaWFibGUgYXMgcGFydCBvZiB0aGUgb3B0aW9uYWwgaW5wdXQKICogYXJyYXkgdG8gZGIyX2V4ZWN1dGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHByZXBhcmVkIHN0YXRlbWVudCByZXR1cm5lZCBmcm9tIGRiMl9wcmVwYXJlLgogKiBAcGFyYW0gaW50ICRwYXJhbWV0ZXJfbnVtYmVyIFNwZWNpZmllcyB0aGUgMS1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIHByZXBhcmVkCiAqIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGVfbmFtZSBBIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBQSFAgdmFyaWFibGUgdG8gYmluZCB0byB0aGUKICogcGFyYW1ldGVyIHNwZWNpZmllZCBieSBwYXJhbWV0ZXJfbnVtYmVyLgogKiBAcGFyYW0gaW50ICRwYXJhbWV0ZXJfdHlwZSBBIGNvbnN0YW50IHNwZWNpZnlpbmcgd2hldGhlciB0aGUgUEhQIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogU1FMIHBhcmFtZXRlciBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIgKERCMl9QQVJBTV9JTiksCiAqIGFuIG91dHB1dCBwYXJhbWV0ZXIgKERCMl9QQVJBTV9PVVQpLCBvciBhcyBhCiAqIHBhcmFtZXRlciB0aGF0IGFjY2VwdHMgaW5wdXQgYW5kIHJldHVybnMgb3V0cHV0CiAqIChEQjJfUEFSQU1fSU5PVVQpLiBUbyBhdm9pZCBtZW1vcnkgb3ZlcmhlYWQsIHlvdSBjYW4KICogYWxzbyBzcGVjaWZ5IERCMl9QQVJBTV9GSUxFIHRvIGJpbmQgdGhlIFBIUCB2YXJpYWJsZQogKiB0byB0aGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBsYXJnZSBvYmplY3QgKEJMT0IsIENMT0IsIG9yIERCQ0xPQikKICogZGF0YS4KICogQHBhcmFtIGludCAkZGF0YV90eXBlIEEgY29uc3RhbnQgc3BlY2lmeWluZyB0aGUgU1FMIGRhdGEgdHlwZSB0aGF0IHRoZSBQSFAgdmFyaWFibGUgc2hvdWxkIGJlCiAqIGJvdW5kIGFzOiBvbmUgb2YgREIyX0JJTkFSWSwKICogREIyX0NIQVIsIERCMl9ET1VCTEUsIG9yCiAqIERCMl9MT05HIC4KICogQHBhcmFtIGludCAkcHJlY2lzaW9uIFNwZWNpZmllcyB0aGUgcHJlY2lzaW9uIHdpdGggd2hpY2ggdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogZGF0YWJhc2UuIFRoaXMgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgWE1MIG91dHB1dCB2YWx1ZXMKICogZnJvbSBzdG9yZWQgcHJvY2VkdXJlcy4gQSBub24tbmVnYXRpdmUgdmFsdWUgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YKICogdGhlIFhNTCBkYXRhIHRoYXQgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZGF0YWJhc2UuIElmIHRoaXMgcGFyYW1ldGVyCiAqIGlzIG5vdCB1c2VkLCBhIGRlZmF1bHQgb2YgMU1CIHdpbGwgYmUgYXNzdW1lZCBmb3IgcmV0cmlldmluZyB0aGUgWE1MCiAqIG91dHB1dCB2YWx1ZSBmcm9tIHRoZSBzdG9yZWQgcHJvY2VkdXJlLgogKiBAcGFyYW0gaW50ICRzY2FsZSBTcGVjaWZpZXMgdGhlIHNjYWxlIHdpdGggd2hpY2ggdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byB0aGUKICogZGF0YWJhc2UuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfYmluZF9wYXJhbSgkc3RtdCwgaW50ICRwYXJhbWV0ZXJfbnVtYmVyLCBzdHJpbmcgJHZhcmlhYmxlX25hbWUsIGludCAkcGFyYW1ldGVyX3R5cGUgPSBudWxsLCBpbnQgJGRhdGFfdHlwZSA9IDAsIGludCAkcHJlY2lzaW9uID0gLTEsIGludCAkc2NhbGUgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNjYWxlICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxkYjJfYmluZF9wYXJhbSgkc3RtdCwgJHBhcmFtZXRlcl9udW1iZXIsICR2YXJpYWJsZV9uYW1lLCAkcGFyYW1ldGVyX3R5cGUsICRkYXRhX3R5cGUsICRwcmVjaXNpb24sICRzY2FsZSk7CiAgICB9IGVsc2VpZiAoJHByZWNpc2lvbiAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9iaW5kX3BhcmFtKCRzdG10LCAkcGFyYW1ldGVyX251bWJlciwgJHZhcmlhYmxlX25hbWUsICRwYXJhbWV0ZXJfdHlwZSwgJGRhdGFfdHlwZSwgJHByZWNpc2lvbik7CiAgICB9IGVsc2VpZiAoJGRhdGFfdHlwZSAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2JpbmRfcGFyYW0oJHN0bXQsICRwYXJhbWV0ZXJfbnVtYmVyLCAkdmFyaWFibGVfbmFtZSwgJHBhcmFtZXRlcl90eXBlLCAkZGF0YV90eXBlKTsKICAgIH0gZWxzZWlmICgkcGFyYW1ldGVyX3R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9iaW5kX3BhcmFtKCRzdG10LCAkcGFyYW1ldGVyX251bWJlciwgJHZhcmlhYmxlX25hbWUsICRwYXJhbWV0ZXJfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2JpbmRfcGFyYW0oJHN0bXQsICRwYXJhbWV0ZXJfbnVtYmVyLCAkdmFyaWFibGVfbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCByZWFkLW9ubHkgcHJvcGVydGllcyB0aGF0IHJldHVybgogKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgREIyIGRhdGFiYXNlIGNsaWVudC4gVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cwogKiB0aGUgREIyIGNsaWVudCBwcm9wZXJ0aWVzOgogKgogKiBEQjIgY2xpZW50IHByb3BlcnRpZXMKICoKICoKICoKICogUHJvcGVydHkgbmFtZQogKiBSZXR1cm4gdHlwZQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBBUFBMX0NPREVQQUdFCiAqIGludAogKiBUaGUgYXBwbGljYXRpb24gY29kZSBwYWdlLgogKgogKgogKiBDT05OX0NPREVQQUdFCiAqIGludAogKiBUaGUgY29kZSBwYWdlIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLgogKgogKgogKiBEQVRBX1NPVVJDRV9OQU1FCiAqIHN0cmluZwogKiBUaGUgZGF0YSBzb3VyY2UgbmFtZSAoRFNOKSB1c2VkIHRvIGNyZWF0ZSB0aGUgY3VycmVudCBjb25uZWN0aW9uCiAqIHRvIHRoZSBkYXRhYmFzZS4KICoKICoKICogRFJJVkVSX05BTUUKICogc3RyaW5nCiAqIFRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW1wbGVtZW50cyB0aGUgREIyIENhbGwKICogTGV2ZWwgSW50ZXJmYWNlIChDTEkpIHNwZWNpZmljYXRpb24uCiAqCiAqCiAqIERSSVZFUl9PREJDX1ZFUgogKiBzdHJpbmcKICogVGhlIHZlcnNpb24gb2YgT0RCQyB0aGF0IHRoZSBEQjIgY2xpZW50IHN1cHBvcnRzLiBUaGlzIHJldHVybnMgYQogKiBzdHJpbmcgIk1NLm1tIiB3aGVyZSBNTSBpcyB0aGUgbWFqb3IgdmVyc2lvbiBhbmQKICogbW0gaXMgdGhlIG1pbm9yIHZlcnNpb24uIFRoZSBEQjIgY2xpZW50IGFsd2F5cwogKiByZXR1cm5zICIwMy41MSIuCiAqCiAqCiAqCiAqIERSSVZFUl9WRVIKICogc3RyaW5nCiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjbGllbnQsIGluIHRoZSBmb3JtIG9mIGEgc3RyaW5nICJNTS5tbS51dXV1IiB3aGVyZQogKiBNTSBpcyB0aGUgbWFqb3IgdmVyc2lvbiwKICogbW0gaXMgdGhlIG1pbm9yIHZlcnNpb24sCiAqIGFuZCB1dXV1IGlzIHRoZSB1cGRhdGUuIEZvciBleGFtcGxlLCAiMDguMDIuMDAwMSIKICogcmVwcmVzZW50cyBtYWpvciB2ZXJzaW9uIDgsIG1pbm9yIHZlcnNpb24gMiwgdXBkYXRlIDEuCiAqCiAqCiAqCiAqIE9EQkNfU1FMX0NPTkZPUk1BTkNFCiAqIHN0cmluZwogKgogKiBUaGUgbGV2ZWwgb2YgT0RCQyBTUUwgZ3JhbW1hciBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudDoKICoKICoKICogTUlOSU1VTQogKgogKgogKiBTdXBwb3J0cyB0aGUgbWluaW11bSBPREJDIFNRTCBncmFtbWFyLgogKgogKgogKgogKgogKiBDT1JFCiAqCiAqCiAqIFN1cHBvcnRzIHRoZSBjb3JlIE9EQkMgU1FMIGdyYW1tYXIuCiAqCiAqCiAqCiAqCiAqIEVYVEVOREVECiAqCiAqCiAqIFN1cHBvcnRzIGV4dGVuZGVkIE9EQkMgU1FMIGdyYW1tYXIuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIE9EQkNfVkVSCiAqIHN0cmluZwogKiBUaGUgdmVyc2lvbiBvZiBPREJDIHRoYXQgdGhlIE9EQkMgZHJpdmVyIG1hbmFnZXIgc3VwcG9ydHMuIFRoaXMKICogcmV0dXJucyBhIHN0cmluZyAiTU0ubW0ucnJyciIgd2hlcmUgTU0gaXMgdGhlIG1ham9yCiAqIHZlcnNpb24sIG1tIGlzIHRoZSBtaW5vciB2ZXJzaW9uLCBhbmQKICogcnJyciBpcyB0aGUgcmVsZWFzZS4gVGhlIERCMiBjbGllbnQgYWx3YXlzIHJldHVybnMKICogIjAzLjAxLjAwMDAiLgogKgogKgogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gU3BlY2lmaWVzIGFuIGFjdGl2ZSBEQjIgY2xpZW50IGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gb2JqZWN0IFJldHVybnMgYW4gb2JqZWN0IG9uIGEgc3VjY2Vzc2Z1bCBjYWxsLiBSZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24pOiBvYmplY3QKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYjJfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY2xvc2VzIGEgREIyIGNsaWVudCBjb25uZWN0aW9uIGNyZWF0ZWQgd2l0aAogKiBkYjJfY29ubmVjdCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZwogKiByZXNvdXJjZXMgdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICoKICogSWYgeW91IGF0dGVtcHQgdG8gY2xvc2UgYSBwZXJzaXN0ZW50IERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0LCB0aGUgY2xvc2UgcmVxdWVzdCBpcyBpZ25vcmVkIGFuZCB0aGUKICogcGVyc2lzdGVudCBEQjIgY2xpZW50IGNvbm5lY3Rpb24gcmVtYWlucyBhdmFpbGFibGUgZm9yIHRoZSBuZXh0IGNhbGxlci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFNwZWNpZmllcyBhbiBhY3RpdmUgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX2Nsb3NlKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9jbG9zZSgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbW1pdHMgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24gb24gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlIGFuZAogKiBiZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24uIFBIUCBhcHBsaWNhdGlvbnMgbm9ybWFsbHkgZGVmYXVsdCB0byBBVVRPQ09NTUlUCiAqIG1vZGUsIHNvIGRiMl9jb21taXQgaXMgbm90IG5lY2Vzc2FyeSB1bmxlc3MgQVVUT0NPTU1JVAogKiBoYXMgYmVlbiB0dXJuZWQgb2ZmIGZvciB0aGUgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEEgdmFsaWQgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZSB2YXJpYWJsZSBhcyByZXR1cm5lZCBmcm9tCiAqIGRiMl9jb25uZWN0IG9yIGRiMl9wY29ubmVjdC4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9jb21taXQoJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2NvbW1pdCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGRiMl9leGVjdXRlIGV4ZWN1dGVzIGFuIFNRTCBzdGF0ZW1lbnQgdGhhdCB3YXMKICogcHJlcGFyZWQgYnkgZGIyX3ByZXBhcmUuCiAqCiAqIElmIHRoZSBTUUwgc3RhdGVtZW50IHJldHVybnMgYSByZXN1bHQgc2V0LCBmb3IgZXhhbXBsZSwgYSBTRUxFQ1Qgc3RhdGVtZW50CiAqIG9yIGEgQ0FMTCB0byBhIHN0b3JlZCBwcm9jZWR1cmUgdGhhdCByZXR1cm5zIG9uZSBvciBtb3JlIHJlc3VsdCBzZXRzLCB5b3UKICogY2FuIHJldHJpZXZlIGEgcm93IGFzIGFuIGFycmF5IGZyb20gdGhlIHN0bXQgcmVzb3VyY2UKICogdXNpbmcgZGIyX2ZldGNoX2Fzc29jLAogKiBkYjJfZmV0Y2hfYm90aCwgb3IKICogZGIyX2ZldGNoX2FycmF5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZQogKiBkYjJfZmV0Y2hfcm93IHRvIG1vdmUgdGhlIHJlc3VsdCBzZXQgcG9pbnRlciB0byB0aGUKICogbmV4dCByb3cgYW5kIGZldGNoIGEgY29sdW1uIGF0IGEgdGltZSBmcm9tIHRoYXQgcm93IHdpdGgKICogZGIyX3Jlc3VsdC4KICoKICogUmVmZXIgdG8gZGIyX3ByZXBhcmUgZm9yIGEgYnJpZWYgZGlzY3Vzc2lvbiBvZiB0aGUKICogYWR2YW50YWdlcyBvZiB1c2luZyBkYjJfcHJlcGFyZSBhbmQKICogZGIyX2V4ZWN1dGUgcmF0aGVyIHRoYW4gZGIyX2V4ZWMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHByZXBhcmVkIHN0YXRlbWVudCByZXR1cm5lZCBmcm9tIGRiMl9wcmVwYXJlLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMgQW4gYXJyYXkgb2YgaW5wdXQgcGFyYW1ldGVycyBtYXRjaGluZyBhbnkgcGFyYW1ldGVyIG1hcmtlcnMgY29udGFpbmVkCiAqIGluIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfZXhlY3V0ZSgkc3RtdCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtZXRlcnMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGRiMl9leGVjdXRlKCRzdG10LCAkcGFyYW1ldGVycyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZGIyX2V4ZWN1dGUoJHN0bXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyB0aGUgc3lzdGVtIGFuZCBkYXRhYmFzZSByZXNvdXJjZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgcmVzdWx0CiAqIHNldC4gVGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZCBpbXBsaWNpdGx5IHdoZW4gYSBzY3JpcHQgZmluaXNoZXMsIGJ1dCB5b3UKICogY2FuIGNhbGwgZGIyX2ZyZWVfcmVzdWx0IHRvIGV4cGxpY2l0bHkgZnJlZSB0aGUgcmVzdWx0CiAqIHNldCByZXNvdXJjZXMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IEEgdmFsaWQgc3RhdGVtZW50IHJlc291cmNlLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX2ZyZWVfcmVzdWx0KCRzdG10KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9mcmVlX3Jlc3VsdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZyZWVzIHRoZSBzeXN0ZW0gYW5kIGRhdGFiYXNlIHJlc291cmNlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzdGF0ZW1lbnQKICogcmVzb3VyY2UuIFRoZXNlIHJlc291cmNlcyBhcmUgZnJlZWQgaW1wbGljaXRseSB3aGVuIGEgc2NyaXB0IGZpbmlzaGVzLCBidXQKICogeW91IGNhbiBjYWxsIGRiMl9mcmVlX3N0bXQgdG8gZXhwbGljaXRseSBmcmVlIHRoZQogKiBzdGF0ZW1lbnQgcmVzb3VyY2VzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBBIHZhbGlkIHN0YXRlbWVudCByZXNvdXJjZS4KICogQHRocm93cyBJYm1EYjJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRiMl9mcmVlX3N0bXQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2ZyZWVfc3RtdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgb3B0aW9uIHZhbHVlIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZQogKiBvciBhIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfcHJlcGFyZSBvciBhIHZhbGlkIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXMKICogcmV0dXJuZWQgZnJvbSBkYjJfY29ubmVjdCBvcgogKiBkYjJfcGNvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbiBBIHZhbGlkIHN0YXRlbWVudCBvciBjb25uZWN0aW9uIG9wdGlvbnMuIFRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQogKiBhcyBvZiBpYm1fZGIyIHZlcnNpb24gMS42LjAuIFRoZXkgcHJvdmlkZSB1c2VmdWwgdHJhY2tpbmcgaW5mb3JtYXRpb24KICogdGhhdCBjYW4gYmUgc2V0IGR1cmluZyBleGVjdXRpb24gd2l0aCBkYjJfZ2V0X29wdGlvbi4KICoKICoKICogUHJpb3IgdmVyc2lvbnMgb2YgaWJtX2RiMiBkbyBub3Qgc3VwcG9ydCB0aGVzZSBuZXcgb3B0aW9ucy4KICoKICoKICogV2hlbiB0aGUgdmFsdWUgaW4gZWFjaCBvcHRpb24gaXMgYmVpbmcgc2V0LCBzb21lIHNlcnZlcnMgbWlnaHQgbm90IGhhbmRsZQogKiB0aGUgZW50aXJlIGxlbmd0aCBwcm92aWRlZCBhbmQgbWlnaHQgdHJ1bmNhdGUgdGhlIHZhbHVlLgogKgogKgogKiBUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBzcGVjaWZpZWQgaW4gZWFjaCBvcHRpb24gaXMgY29udmVydGVkIGNvcnJlY3RseQogKiB3aGVuIHRyYW5zbWl0dGVkIHRvIGEgaG9zdCBzeXN0ZW0sIHVzZSBvbmx5IHRoZSBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaLAogKiAwIHRocm91Z2ggOSwgYW5kIHRoZSB1bmRlcnNjb3JlIChfKSBvciBwZXJpb2QgKC4pLgogKgogKgogKgogKgogKiB1c2VyaWQKICoKICoKICogU1FMX0FUVFJfSU5GT19VU0VSSUQgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgdXNlciBJRCBzZW50IHRvIHRoZSBob3N0CiAqIGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTYgY2hhcmFjdGVycy4KICogVGhpcyB1c2VyLWlkIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiB1c2VyLWlkLCBpdCBpcyBmb3IKICogaWRlbnRpZmljYXRpb24gcHVycG9zZXMgb25seSBhbmQgaXMgbm90IHVzZWQgZm9yIGFueSBhdXRob3JpemF0aW9uLgogKgogKgogKgogKgogKgogKgogKiBhY2N0c3RyCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fQUNDVFNUUiAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhY2NvdW50aW5nIHN0cmluZyBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMjAwIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIGFwcGxuYW1lCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fQVBQTE5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMzIgY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICogd3Jrc3RubmFtZQogKgogKgogKiBTUUxfQVRUUl9JTkZPX1dSS1NUTk5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgd29ya3N0YXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTggY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICoKICogUHJpb3IgdmVyc2lvbnMgb2YgaWJtX2RiMiBkbyBub3Qgc3VwcG9ydCB0aGVzZSBuZXcgb3B0aW9ucy4KICoKICogV2hlbiB0aGUgdmFsdWUgaW4gZWFjaCBvcHRpb24gaXMgYmVpbmcgc2V0LCBzb21lIHNlcnZlcnMgbWlnaHQgbm90IGhhbmRsZQogKiB0aGUgZW50aXJlIGxlbmd0aCBwcm92aWRlZCBhbmQgbWlnaHQgdHJ1bmNhdGUgdGhlIHZhbHVlLgogKgogKiBUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBzcGVjaWZpZWQgaW4gZWFjaCBvcHRpb24gaXMgY29udmVydGVkIGNvcnJlY3RseQogKiB3aGVuIHRyYW5zbWl0dGVkIHRvIGEgaG9zdCBzeXN0ZW0sIHVzZSBvbmx5IHRoZSBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaLAogKiAwIHRocm91Z2ggOSwgYW5kIHRoZSB1bmRlcnNjb3JlIChfKSBvciBwZXJpb2QgKC4pLgogKgogKiBTUUxfQVRUUl9JTkZPX1VTRVJJRCAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB1c2VyIElEIHNlbnQgdG8gdGhlIGhvc3QKICogZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqIFNRTF9BVFRSX0lORk9fQUNDVFNUUiAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhY2NvdW50aW5nIHN0cmluZyBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMjAwIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICogU1FMX0FUVFJfSU5GT19BUFBMTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMzIgY2hhcmFjdGVycy4KICoKICogU1FMX0FUVFJfSU5GT19XUktTVE5OQU1FIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IHdvcmtzdGF0aW9uIG5hbWUgc2VudCB0byB0aGUKICogaG9zdCBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE4IGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxOCBjaGFyYWN0ZXJzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjdXJyZW50IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24gYXR0cmlidXRlIHByb3ZpZGVkIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfZ2V0X29wdGlvbigkcmVzb3VyY2UsIHN0cmluZyAkb3B0aW9uKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX2dldF9vcHRpb24oJHJlc291cmNlLCAkb3B0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElibURiMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyBhIERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0IGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc291cmNlcwogKiB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLgogKgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGk1L09TIGluIHJlc3BvbnNlIHRvIGk1L09TIHN5c3RlbQogKiBhZG1pbmlzdHJhdGlvbiByZXF1ZXN0cy4KICoKICoKICoKICogSWYgeW91IGhhdmUgYSBwZXJzaXN0ZW50IERCMiBjbGllbnQgY29ubmVjdGlvbiBjcmVhdGVkIHdpdGgKICogZGIyX3Bjb25uZWN0LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZQogKiBjb25uZWN0aW9uLiBUbyBhdm9pZCBzdWJzdGFudGlhbCBjb25uZWN0aW9uIHBlcmZvcm1hbmNlIHBlbmFsdGllcywgdGhpcwogKiBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIHJhcmUgY2FzZXMgd2hlbiB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uCiAqIGhhcyBiZWNvbWUgdW5yZXNwb25zaXZlIG9yIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gd2lsbCBub3QgYmUgbmVlZGVkIGZvcgogKiBhIGxvbmcgcGVyaW9kIG9mIHRpbWUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgU3BlY2lmaWVzIGFuIGFjdGl2ZSBEQjIgY2xpZW50IGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfcGNsb3NlKCRyZXNvdXJjZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkYjJfcGNsb3NlKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvbGxzIGJhY2sgYW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24gb24gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlIGFuZAogKiBiZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24uIFBIUCBhcHBsaWNhdGlvbnMgbm9ybWFsbHkgZGVmYXVsdCB0byBBVVRPQ09NTUlUCiAqIG1vZGUsIHNvIGRiMl9yb2xsYmFjayBub3JtYWxseSBoYXMgbm8gZWZmZWN0IHVubGVzcwogKiBBVVRPQ09NTUlUIGhhcyBiZWVuIHR1cm5lZCBvZmYgZm9yIHRoZSBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQSB2YWxpZCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlIHZhcmlhYmxlIGFzIHJldHVybmVkIGZyb20KICogZGIyX2Nvbm5lY3Qgb3IgZGIyX3Bjb25uZWN0LgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX3JvbGxiYWNrKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRiMl9yb2xsYmFjaygkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJYm1EYjJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCByZWFkLW9ubHkgcHJvcGVydGllcyB0aGF0IHJldHVybgogKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSUJNIERCMiwgQ2xvdWRzY2FwZSwgb3IgQXBhY2hlIERlcmJ5IGRhdGFiYXNlIHNlcnZlci4KICogVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgZGF0YWJhc2Ugc2VydmVyIHByb3BlcnRpZXM6CiAqCiAqIERhdGFiYXNlIHNlcnZlciBwcm9wZXJ0aWVzCiAqCiAqCiAqCiAqIFByb3BlcnR5IG5hbWUKICogUmV0dXJuIHR5cGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogREJNU19OQU1FCiAqIHN0cmluZwogKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2Ugc2VydmVyIHRvIHdoaWNoIHlvdSBhcmUKICogY29ubmVjdGVkLiBGb3IgREIyIHNlcnZlcnMgdGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mCiAqIERCMiBmb2xsb3dlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaAogKiB0aGUgZGF0YWJhc2Ugc2VydmVyIGlzIHJ1bm5pbmcuCiAqCiAqCiAqIERCTVNfVkVSCiAqIHN0cmluZwogKiBUaGUgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugc2VydmVyLCBpbiB0aGUgZm9ybSBvZiBhIHN0cmluZwogKiAiTU0ubW0udXV1dSIgd2hlcmUgTU0gaXMgdGhlIG1ham9yIHZlcnNpb24sCiAqIG1tIGlzIHRoZSBtaW5vciB2ZXJzaW9uLAogKiBhbmQgdXV1dSBpcyB0aGUgdXBkYXRlLiBGb3IgZXhhbXBsZSwgIjA4LjAyLjAwMDEiCiAqIHJlcHJlc2VudHMgbWFqb3IgdmVyc2lvbiA4LCBtaW5vciB2ZXJzaW9uIDIsIHVwZGF0ZSAxLgogKgogKgogKgogKiBEQl9DT0RFUEFHRQogKiBpbnQKICogVGhlIGNvZGUgcGFnZSBvZiB0aGUgZGF0YWJhc2UgdG8gd2hpY2ggeW91IGFyZSBjb25uZWN0ZWQuCiAqCiAqCiAqIERCX05BTUUKICogc3RyaW5nCiAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byB3aGljaCB5b3UgYXJlIGNvbm5lY3RlZC4KICoKICoKICogREZUX0lTT0xBVElPTgogKiBzdHJpbmcKICoKICogVGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHN1cHBvcnRlZCBieSB0aGUKICogc2VydmVyOgogKgogKgogKiBVUgogKgogKgogKiBVbmNvbW1pdHRlZCByZWFkOiBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSB2aXNpYmxlIGJ5IGFsbAogKiBjb25jdXJyZW50IHRyYW5zYWN0aW9ucy4KICoKICoKICoKICoKICogQ1MKICoKICoKICogQ3Vyc29yIHN0YWJpbGl0eTogYSByb3cgcmVhZCBieSBvbmUgdHJhbnNhY3Rpb24gY2FuIGJlIGFsdGVyZWQgYW5kCiAqIGNvbW1pdHRlZCBieSBhIHNlY29uZCBjb25jdXJyZW50IHRyYW5zYWN0aW9uLgogKgogKgogKgogKgogKiBSUwogKgogKgogKiBSZWFkIHN0YWJpbGl0eTogYSB0cmFuc2FjdGlvbiBjYW4gYWRkIG9yIHJlbW92ZSByb3dzIG1hdGNoaW5nIGEKICogc2VhcmNoIGNvbmRpdGlvbiBvciBhIHBlbmRpbmcgdHJhbnNhY3Rpb24uCiAqCiAqCiAqCiAqCiAqIFJSCiAqCiAqCiAqIFJlcGVhdGFibGUgcmVhZDogZGF0YSBhZmZlY3RlZCBieSBwZW5kaW5nIHRyYW5zYWN0aW9uIGlzIG5vdAogKiBhdmFpbGFibGUgdG8gb3RoZXIgdHJhbnNhY3Rpb25zLgogKgogKgogKgogKgogKiBOQwogKgogKgogKiBObyBjb21taXQ6IGFueSBjaGFuZ2VzIGFyZSB2aXNpYmxlIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsCiAqIG9wZXJhdGlvbi4gRXhwbGljaXQgY29tbWl0cyBhbmQgcm9sbGJhY2tzIGFyZSBub3QgYWxsb3dlZC4KICoKICoKICoKICoKICoKICoKICoKICoKICogSURFTlRJRklFUl9RVU9URV9DSEFSCiAqIHN0cmluZwogKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gZGVsaW1pdCBhbiBpZGVudGlmaWVyLgogKgogKgogKiBJTlNUX05BTUUKICogc3RyaW5nCiAqIFRoZSBpbnN0YW5jZSBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyIHRoYXQgY29udGFpbnMgdGhlCiAqIGRhdGFiYXNlLgogKgogKgogKiBJU09MQVRJT05fT1BUSU9OCiAqIGFycmF5CiAqIEFuIGFycmF5IG9mIHRoZSBpc29sYXRpb24gb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlCiAqIGRhdGFiYXNlIHNlcnZlci4gVGhlIGlzb2xhdGlvbiBvcHRpb25zIGFyZSBkZXNjcmliZWQgaW4KICogdGhlIERGVF9JU09MQVRJT04gcHJvcGVydHkuCiAqCiAqCiAqIEtFWVdPUkRTCiAqIGFycmF5CiAqIEFuIGFycmF5IG9mIHRoZSBrZXl3b3JkcyByZXNlcnZlZCBieSB0aGUgZGF0YWJhc2UKICogc2VydmVyLgogKgogKgogKiBMSUtFX0VTQ0FQRV9DTEFVU0UKICogYm9vbAogKiBUUlVFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlCiAqIHVzZSBvZiAlIGFuZCBfIHdpbGRjYXJkCiAqIGNoYXJhY3RlcnMuIEZBTFNFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZG9lcyBub3QKICogc3VwcG9ydCB0aGVzZSB3aWxkY2FyZCBjaGFyYWN0ZXJzLgogKgogKgogKiBNQVhfQ09MX05BTUVfTEVOCiAqIGludAogKiBNYXhpbXVtIGxlbmd0aCBvZiBhIGNvbHVtbiBuYW1lIHN1cHBvcnRlZCBieSB0aGUgZGF0YWJhc2UKICogc2VydmVyLCBleHByZXNzZWQgaW4gYnl0ZXMuCiAqCiAqCiAqIE1BWF9JREVOVElGSUVSX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYW4gU1FMIGlkZW50aWZpZXIgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBjaGFyYWN0ZXJzLgogKgogKgogKiBNQVhfSU5ERVhfU0laRQogKiBpbnQKICogTWF4aW11bSBzaXplIG9mIGNvbHVtbnMgY29tYmluZWQgaW4gYW4gaW5kZXggc3VwcG9ydGVkIGJ5IHRoZQogKiBkYXRhYmFzZSBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1BST0NfTkFNRV9MRU4KICogaW50CiAqIE1heGltdW0gbGVuZ3RoIG9mIGEgcHJvY2VkdXJlIG5hbWUgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1JPV19TSVpFCiAqIGludAogKiBNYXhpbXVtIGxlbmd0aCBvZiBhIHJvdyBpbiBhIGJhc2UgdGFibGUgc3VwcG9ydGVkIGJ5IHRoZQogKiBkYXRhYmFzZSBzZXJ2ZXIsIGV4cHJlc3NlZCBpbiBieXRlcy4KICoKICoKICogTUFYX1NDSEVNQV9OQU1FX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYSBzY2hlbWEgbmFtZSBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBNQVhfU1RBVEVNRU5UX0xFTgogKiBpbnQKICogTWF4aW11bSBsZW5ndGggb2YgYW4gU1FMIHN0YXRlbWVudCBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBNQVhfVEFCTEVfTkFNRV9MRU4KICogaW50CiAqIE1heGltdW0gbGVuZ3RoIG9mIGEgdGFibGUgbmFtZSBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciwgZXhwcmVzc2VkIGluIGJ5dGVzLgogKgogKgogKiBOT05fTlVMTEFCTEVfQ09MVU1OUwogKiBib29sCiAqIFRSVUUgaWYgdGhlIGRhdGFiYXNlIHNlcnZlciBzdXBwb3J0cyBjb2x1bW5zIHRoYXQgY2FuIGJlCiAqIGRlZmluZWQgYXMgTk9UIE5VTEwsIEZBTFNFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydAogKiBjb2x1bW5zIGRlZmluZWQgYXMgTk9UIE5VTEwuCiAqCiAqCiAqIFBST0NFRFVSRVMKICogYm9vbAogKiBUUlVFIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlIHVzZSBvZiB0aGUgQ0FMTAogKiBzdGF0ZW1lbnQgdG8gY2FsbCBzdG9yZWQgcHJvY2VkdXJlcywgRkFMU0UgaWYgdGhlIGRhdGFiYXNlCiAqIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBDQUxMIHN0YXRlbWVudC4KICoKICoKICogU1BFQ0lBTF9DSEFSUwogKiBzdHJpbmcKICogQSBzdHJpbmcgY29udGFpbmluZyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgb3RoZXIgdGhhbgogKiBhLVosIDAtOSwgYW5kIHVuZGVyc2NvcmUgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiBpZGVudGlmaWVyIG5hbWUuCiAqCiAqCiAqIFNRTF9DT05GT1JNQU5DRQogKiBzdHJpbmcKICoKICogVGhlIGxldmVsIG9mIGNvbmZvcm1hbmNlIHRvIHRoZSBBTlNJL0lTTyBTUUwtOTIgc3BlY2lmaWNhdGlvbgogKiBvZmZlcmVkIGJ5IHRoZSBkYXRhYmFzZSBzZXJ2ZXI6CiAqCiAqCiAqIEVOVFJZCiAqCiAqCiAqIEVudHJ5LWxldmVsIFNRTC05MiBjb21wbGlhbmNlLgogKgogKgogKgogKgogKiBGSVBTMTI3CiAqCiAqCiAqIEZJUFMtMTI3LTIgdHJhbnNpdGlvbmFsIGNvbXBsaWFuY2UuCiAqCiAqCiAqCiAqCiAqIEZVTEwKICoKICoKICogRnVsbCBsZXZlbCBTUUwtOTIgY29tcGxpYW5jZS4KICoKICoKICoKICoKICogSU5URVJNRURJQVRFCiAqCiAqCiAqIEludGVybWVkaWF0ZSBsZXZlbCBTUUwtOTIgY29tcGxpYW5jZS4KICoKICoKICoKICoKICoKICoKICoKICoKICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFNwZWNpZmllcyBhbiBhY3RpdmUgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKiBAcmV0dXJuIG9iamVjdCBSZXR1cm5zIGFuIG9iamVjdCBvbiBhIHN1Y2Nlc3NmdWwgY2FsbC4gUmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIElibURiMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGIyX3NlcnZlcl9pbmZvKCRjb25uZWN0aW9uKTogb2JqZWN0CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX3NlcnZlcl9pbmZvKCRjb25uZWN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElibURiMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIG9wdGlvbnMgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlIG9yIGEgY29ubmVjdGlvbiByZXNvdXJjZS4gWW91CiAqIGNhbm5vdCBzZXQgb3B0aW9ucyBmb3IgcmVzdWx0IHNldCByZXNvdXJjZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfcHJlcGFyZSBvciBhIHZhbGlkIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXMKICogcmV0dXJuZWQgZnJvbSBkYjJfY29ubmVjdCBvcgogKiBkYjJfcGNvbm5lY3QuCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHZhbGlkIHN0YXRlbWVudCBvciBjb25uZWN0aW9uCiAqIG9wdGlvbnMuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBhdXRvY29tbWl0IHZhbHVlcywKICogY3Vyc29yIHR5cGVzIChzY3JvbGxhYmxlIG9yIGZvcndhcmQpLCBhbmQgdG8gc3BlY2lmeSB0aGUgY2FzZSBvZgogKiB0aGUgY29sdW1uIG5hbWVzIChsb3dlciwgdXBwZXIsIG9yIG5hdHVyYWwpIHRoYXQgd2lsbCBhcHBlYXIgaW4gYQogKiByZXN1bHQgc2V0LgogKgogKgogKiBhdXRvY29tbWl0CiAqCiAqCiAqIFBhc3NpbmcgREIyX0FVVE9DT01NSVRfT04gdHVybnMKICogYXV0b2NvbW1pdCBvbiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKiBQYXNzaW5nIERCMl9BVVRPQ09NTUlUX09GRiB0dXJucwogKiBhdXRvY29tbWl0IG9mZiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKgogKgogKiBjdXJzb3IKICoKICoKICogUGFzc2luZyBEQjJfRk9SV0FSRF9PTkxZIHNwZWNpZmllcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlLiBUaGlzIGlzIHRoZQogKiBkZWZhdWx0IGN1cnNvciB0eXBlLCBhbmQgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkYXRhYmFzZQogKiBzZXJ2ZXJzLgogKgogKgogKiBQYXNzaW5nIERCMl9TQ1JPTExBQkxFIHNwZWNpZmllcyBhCiAqIHNjcm9sbGFibGUgY3Vyc29yIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZS4gU2Nyb2xsYWJsZQogKiBjdXJzb3JzIGVuYWJsZSByZXN1bHQgc2V0IHJvd3MgdG8gYmUgYWNjZXNzZWQgaW4KICogbm9uLXNlcXVlbnRpYWwgb3JkZXIsIGJ1dCBhcmUgb25seSBzdXBwb3J0ZWQgYnkKICogSUJNIERCMiBVbml2ZXJzYWwgRGF0YWJhc2UgZGF0YWJhc2VzLgogKgogKgogKgogKgogKiBiaW5tb2RlCiAqCiAqCiAqIFBhc3NpbmcgREIyX0JJTkFSWSBzcGVjaWZpZXMgdGhhdAogKiBiaW5hcnkgZGF0YSB3aWxsIGJlIHJldHVybmVkIGFzIGlzLiBUaGlzIGlzIHRoZSBkZWZhdWx0CiAqIG1vZGUuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZwogKiBpYm1fZGIyLmJpbm1vZGU9MSBpbiBwaHAuaW5pLgogKgogKgogKiBQYXNzaW5nIERCMl9DT05WRVJUIHNwZWNpZmllcyB0aGF0CiAqIGJpbmFyeSBkYXRhIHdpbGwgYmUgY29udmVydGVkIHRvIGhleGFkZWNpbWFsIGVuY29kaW5nLAogKiBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBzdWNoLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCiAqIHNldHRpbmcgaWJtX2RiMi5iaW5tb2RlPTIgaW4gcGhwLmluaS4KICoKICoKICogUGFzc2luZyBEQjJfUEFTU1RIUlUgc3BlY2lmaWVzIHRoYXQKICogYmluYXJ5IGRhdGEgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gTlVMTC4gVGhpcyBpcyB0aGUKICogZXF1aXZhbGVudCBvZiBzZXR0aW5nIGlibV9kYjIuYmlubW9kZT0zCiAqIGluIHBocC5pbmkuCiAqCiAqCiAqCiAqCiAqIGRiMl9hdHRyX2Nhc2UKICoKICoKICogUGFzc2luZyBEQjJfQ0FTRV9MT1dFUiBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIGxvd2VyIGNhc2UuCiAqCiAqCiAqIFBhc3NpbmcgREIyX0NBU0VfVVBQRVIgc3BlY2lmaWVzIHRoYXQKICogY29sdW1uIG5hbWVzIG9mIHRoZSByZXN1bHQgc2V0IGFyZSByZXR1cm5lZCBpbiB1cHBlciBjYXNlLgogKgogKgogKiBQYXNzaW5nIERCMl9DQVNFX05BVFVSQUwgc3BlY2lmaWVzIHRoYXQKICogY29sdW1uIG5hbWVzIG9mIHRoZSByZXN1bHQgc2V0IGFyZSByZXR1cm5lZCBpbiBuYXR1cmFsCiAqIGNhc2UuCiAqCiAqCiAqCiAqCiAqIGRlZmVycmVkX3ByZXBhcmUKICoKICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PTiB0dXJucyBkZWZlcnJlZAogKiBwcmVwYXJlIG9uIGZvciB0aGUgc3BlY2lmaWVkIHN0YXRlbWVudCByZXNvdXJjZS4KICoKICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PRkYgdHVybnMgZGVmZXJyZWQKICogcHJlcGFyZSBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IHJlc291cmNlLgogKgogKgogKgogKgogKgogKiBQYXNzaW5nIERCMl9BVVRPQ09NTUlUX09OIHR1cm5zCiAqIGF1dG9jb21taXQgb24gZm9yIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfQVVUT0NPTU1JVF9PRkYgdHVybnMKICogYXV0b2NvbW1pdCBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfRk9SV0FSRF9PTkxZIHNwZWNpZmllcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IgZm9yIGEgc3RhdGVtZW50IHJlc291cmNlLiBUaGlzIGlzIHRoZQogKiBkZWZhdWx0IGN1cnNvciB0eXBlLCBhbmQgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkYXRhYmFzZQogKiBzZXJ2ZXJzLgogKgogKiBQYXNzaW5nIERCMl9TQ1JPTExBQkxFIHNwZWNpZmllcyBhCiAqIHNjcm9sbGFibGUgY3Vyc29yIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZS4gU2Nyb2xsYWJsZQogKiBjdXJzb3JzIGVuYWJsZSByZXN1bHQgc2V0IHJvd3MgdG8gYmUgYWNjZXNzZWQgaW4KICogbm9uLXNlcXVlbnRpYWwgb3JkZXIsIGJ1dCBhcmUgb25seSBzdXBwb3J0ZWQgYnkKICogSUJNIERCMiBVbml2ZXJzYWwgRGF0YWJhc2UgZGF0YWJhc2VzLgogKgogKiBQYXNzaW5nIERCMl9CSU5BUlkgc3BlY2lmaWVzIHRoYXQKICogYmluYXJ5IGRhdGEgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy4gVGhpcyBpcyB0aGUgZGVmYXVsdAogKiBtb2RlLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcKICogaWJtX2RiMi5iaW5tb2RlPTEgaW4gcGhwLmluaS4KICoKICogUGFzc2luZyBEQjJfQ09OVkVSVCBzcGVjaWZpZXMgdGhhdAogKiBiaW5hcnkgZGF0YSB3aWxsIGJlIGNvbnZlcnRlZCB0byBoZXhhZGVjaW1hbCBlbmNvZGluZywKICogYW5kIHdpbGwgYmUgcmV0dXJuZWQgYXMgc3VjaC4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZgogKiBzZXR0aW5nIGlibV9kYjIuYmlubW9kZT0yIGluIHBocC5pbmkuCiAqCiAqIFBhc3NpbmcgREIyX1BBU1NUSFJVIHNwZWNpZmllcyB0aGF0CiAqIGJpbmFyeSBkYXRhIHdpbGwgYmUgY29udmVydGVkIHRvIE5VTEwuIFRoaXMgaXMgdGhlCiAqIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpYm1fZGIyLmJpbm1vZGU9MwogKiBpbiBwaHAuaW5pLgogKgogKiBQYXNzaW5nIERCMl9DQVNFX0xPV0VSIHNwZWNpZmllcyB0aGF0CiAqIGNvbHVtbiBuYW1lcyBvZiB0aGUgcmVzdWx0IHNldCBhcmUgcmV0dXJuZWQgaW4gbG93ZXIgY2FzZS4KICoKICogUGFzc2luZyBEQjJfQ0FTRV9VUFBFUiBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIHVwcGVyIGNhc2UuCiAqCiAqIFBhc3NpbmcgREIyX0NBU0VfTkFUVVJBTCBzcGVjaWZpZXMgdGhhdAogKiBjb2x1bW4gbmFtZXMgb2YgdGhlIHJlc3VsdCBzZXQgYXJlIHJldHVybmVkIGluIG5hdHVyYWwKICogY2FzZS4KICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PTiB0dXJucyBkZWZlcnJlZAogKiBwcmVwYXJlIG9uIGZvciB0aGUgc3BlY2lmaWVkIHN0YXRlbWVudCByZXNvdXJjZS4KICoKICogUGFzc2luZyBEQjJfREVGRVJSRURfUFJFUEFSRV9PRkYgdHVybnMgZGVmZXJyZWQKICogcHJlcGFyZSBvZmYgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IHJlc291cmNlLgogKgogKiBUaGUgZm9sbG93aW5nIG5ldyBpNS9PUyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuNS4xCiAqIGFuZCBsYXRlci4gVGhlc2Ugb3B0aW9ucyBhcHBseSBvbmx5IHdoZW4gcnVubmluZyBQSFAgYW5kIGlibV9kYjIgbmF0aXZlbHkgb24gaTUgc3lzdGVtcy4KICoKICoKICogaTVfZmV0Y2hfb25seQogKgogKgogKiBEQjJfSTVfRkVUQ0hfT04gLSBDdXJzb3JzIGFyZSByZWFkLW9ubHkKICogYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBwb3NpdGlvbmVkIHVwZGF0ZXMgb3IgZGVsZXRlcy4gVGhpcwogKiBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgU1FMX0FUVFJfRk9SX0ZFVENIX09OTFkKICogZW52aXJvbm1lbnQgaGFzIGJlZW4gc2V0IHRvIFNRTF9GQUxTRS4KICoKICoKICogREIyX0k1X0ZFVENIX09GRiAtIEN1cnNvcnMgY2FuIGJlIHVzZWQKICogZm9yIHBvc2l0aW9uZWQgdXBkYXRlcyBhbmQgZGVsZXRlcy4KICoKICoKICoKICoKICoKICogREIyX0k1X0ZFVENIX09OIC0gQ3Vyc29ycyBhcmUgcmVhZC1vbmx5CiAqIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgcG9zaXRpb25lZCB1cGRhdGVzIG9yIGRlbGV0ZXMuIFRoaXMKICogaXMgdGhlIGRlZmF1bHQgdW5sZXNzIFNRTF9BVFRSX0ZPUl9GRVRDSF9PTkxZCiAqIGVudmlyb25tZW50IGhhcyBiZWVuIHNldCB0byBTUUxfRkFMU0UuCiAqCiAqIERCMl9JNV9GRVRDSF9PRkYgLSBDdXJzb3JzIGNhbiBiZSB1c2VkCiAqIGZvciBwb3NpdGlvbmVkIHVwZGF0ZXMgYW5kIGRlbGV0ZXMuCiAqCiAqIFRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbiBpcyBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuOC4wIGFuZCBsYXRlci4KICoKICoKICogcm93Y291bnQKICoKICoKICogREIyX1JPV0NPVU5UX1BSRUZFVENIX09OIC0gQ2xpZW50IGNhbiByZXF1ZXN0CiAqIHRoZSBmdWxsIHJvdyBjb3VudCBwcmlvciB0byBmZXRjaGluZywgd2hpY2ggbWVhbnMgdGhhdAogKiBkYjJfbnVtX3Jvd3MgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3Mgc2VsZWN0ZWQKICogZXZlbiB3aGVuIGEgUk9MTEZPUldBUkRfT05MWSBjdXJzb3IgaXMgdXNlZC4KICoKICoKICogREIyX1JPV0NPVU5UX1BSRUZFVENIX09GRiAtIENsaWVudCBjYW5ub3QgcmVxdWVzdAogKiB0aGUgZnVsbCByb3cgY291bnQgcHJpb3IgdG8gZmV0Y2hpbmcuCiAqCiAqCiAqCiAqCiAqCiAqIERCMl9ST1dDT1VOVF9QUkVGRVRDSF9PTiAtIENsaWVudCBjYW4gcmVxdWVzdAogKiB0aGUgZnVsbCByb3cgY291bnQgcHJpb3IgdG8gZmV0Y2hpbmcsIHdoaWNoIG1lYW5zIHRoYXQKICogZGIyX251bV9yb3dzIHJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHNlbGVjdGVkCiAqIGV2ZW4gd2hlbiBhIFJPTExGT1JXQVJEX09OTFkgY3Vyc29yIGlzIHVzZWQuCiAqCiAqIERCMl9ST1dDT1VOVF9QUkVGRVRDSF9PRkYgLSBDbGllbnQgY2Fubm90IHJlcXVlc3QKICogdGhlIGZ1bGwgcm93IGNvdW50IHByaW9yIHRvIGZldGNoaW5nLgogKgogKiBUaGUgZm9sbG93aW5nIG5ldyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gaWJtX2RiMiB2ZXJzaW9uIDEuNy4wIGFuZCBsYXRlci4KICoKICoKICogdHJ1c3RlZF91c2VyCiAqCiAqCiAqIFRvIHN3aXRjaCB0aGUgdXNlciB0byBhIHRydXN0ZWQgdXNlciwgcGFzcyB0aGUgVXNlciBJRCAoU3RyaW5nKQogKiBvZiB0aGUgdHJ1c3RlZCB1c2VyIGFzIHRoZSB2YWx1ZSBvZiB0aGlzIGtleS4gVGhpcyBvcHRpb24gY2FuCiAqIGJlIHNldCBvbiBhIGNvbm5lY3Rpb24gcmVzb3VyY2Ugb25seS4gVG8gdXNlIHRoaXMgb3B0aW9uLCB0cnVzdGVkCiAqIGNvbnRleHQgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKgogKgogKgogKiB0cnVzdGVkX3Bhc3N3b3JkCiAqCiAqCiAqIFRoZSBwYXNzd29yZCAoU3RyaW5nKSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwZWNpZmllZAogKiBieSB0aGUgdHJ1c3RlZF91c2VyIGtleS4KICoKICoKICoKICoKICoKICogVG8gc3dpdGNoIHRoZSB1c2VyIHRvIGEgdHJ1c3RlZCB1c2VyLCBwYXNzIHRoZSBVc2VyIElEIChTdHJpbmcpCiAqIG9mIHRoZSB0cnVzdGVkIHVzZXIgYXMgdGhlIHZhbHVlIG9mIHRoaXMga2V5LiBUaGlzIG9wdGlvbiBjYW4KICogYmUgc2V0IG9uIGEgY29ubmVjdGlvbiByZXNvdXJjZSBvbmx5LiBUbyB1c2UgdGhpcyBvcHRpb24sIHRydXN0ZWQKICogY29udGV4dCBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIFRoZSBwYXNzd29yZCAoU3RyaW5nKSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwZWNpZmllZAogKiBieSB0aGUgdHJ1c3RlZF91c2VyIGtleS4KICoKICogVGhlIGZvbGxvd2luZyBuZXcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIGlibV9kYjIgdmVyc2lvbiAxLjYuMCBhbmQgbGF0ZXIuCiAqIFRoZXNlIG9wdGlvbnMgcHJvdmlkZSB1c2VmdWwgdHJhY2tpbmcgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgYWNjZXNzZWQgZHVyaW5nCiAqIGV4ZWN1dGlvbiB3aXRoIGRiMl9nZXRfb3B0aW9uLgogKgogKgogKiBXaGVuIHRoZSB2YWx1ZSBpbiBlYWNoIG9wdGlvbiBpcyBiZWluZyBzZXQsIHNvbWUgc2VydmVycyBtaWdodCBub3QgaGFuZGxlCiAqIHRoZSBlbnRpcmUgbGVuZ3RoIHByb3ZpZGVkIGFuZCBtaWdodCB0cnVuY2F0ZSB0aGUgdmFsdWUuCiAqCiAqCiAqIFRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHNwZWNpZmllZCBpbiBlYWNoIG9wdGlvbiBpcyBjb252ZXJ0ZWQgY29ycmVjdGx5CiAqIHdoZW4gdHJhbnNtaXR0ZWQgdG8gYSBob3N0IHN5c3RlbSwgdXNlIG9ubHkgdGhlIGNoYXJhY3RlcnMgQSB0aHJvdWdoIFosCiAqIDAgdGhyb3VnaCA5LCBhbmQgdGhlIHVuZGVyc2NvcmUgKF8pIG9yIHBlcmlvZCAoLikuCiAqCiAqCiAqCiAqCiAqIHVzZXJpZAogKgogKgogKiBTUUxfQVRUUl9JTkZPX1VTRVJJRCAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB1c2VyIElEIHNlbnQgdG8gdGhlIGhvc3QKICogZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqCiAqCiAqCiAqCiAqCiAqCiAqIGFjY3RzdHIKICoKICoKICogU1FMX0FUVFJfSU5GT19BQ0NUU1RSIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFjY291bnRpbmcgc3RyaW5nIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICoKICoKICoKICoKICoKICogYXBwbG5hbWUKICoKICoKICogU1FMX0FUVFJfSU5GT19BUFBMTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKgogKgogKiB3cmtzdG5uYW1lCiAqCiAqCiAqIFNRTF9BVFRSX0lORk9fV1JLU1ROTkFNRSAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB3b3Jrc3RhdGlvbiBuYW1lIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxOCBjaGFyYWN0ZXJzLgogKgogKgogKgogKgogKgogKgogKgogKiBXaGVuIHRoZSB2YWx1ZSBpbiBlYWNoIG9wdGlvbiBpcyBiZWluZyBzZXQsIHNvbWUgc2VydmVycyBtaWdodCBub3QgaGFuZGxlCiAqIHRoZSBlbnRpcmUgbGVuZ3RoIHByb3ZpZGVkIGFuZCBtaWdodCB0cnVuY2F0ZSB0aGUgdmFsdWUuCiAqCiAqIFRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHNwZWNpZmllZCBpbiBlYWNoIG9wdGlvbiBpcyBjb252ZXJ0ZWQgY29ycmVjdGx5CiAqIHdoZW4gdHJhbnNtaXR0ZWQgdG8gYSBob3N0IHN5c3RlbSwgdXNlIG9ubHkgdGhlIGNoYXJhY3RlcnMgQSB0aHJvdWdoIFosCiAqIDAgdGhyb3VnaCA5LCBhbmQgdGhlIHVuZGVyc2NvcmUgKF8pIG9yIHBlcmlvZCAoLikuCiAqCiAqIFNRTF9BVFRSX0lORk9fVVNFUklEIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IHVzZXIgSUQgc2VudCB0byB0aGUgaG9zdAogKiBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE2IGNoYXJhY3RlcnMuCiAqIFRoaXMgdXNlci1pZCBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdXNlci1pZCwgaXQgaXMgZm9yCiAqIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCB1c2VkIGZvciBhbnkgYXV0aG9yaXphdGlvbi4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE2IGNoYXJhY3RlcnMuCiAqIFRoaXMgdXNlci1pZCBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdXNlci1pZCwgaXQgaXMgZm9yCiAqIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCB1c2VkIGZvciBhbnkgYXV0aG9yaXphdGlvbi4KICoKICogU1FMX0FUVFJfSU5GT19BQ0NUU1RSIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFjY291bnRpbmcgc3RyaW5nIHNlbnQgdG8gdGhlCiAqIGhvc3QgZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAyMDAgY2hhcmFjdGVycy4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDIwMCBjaGFyYWN0ZXJzLgogKgogKiBTUUxfQVRUUl9JTkZPX0FQUExOQU1FIC0gQSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkCiAqIGNoYXJhY3RlciBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIG5hbWUgc2VudCB0byB0aGUKICogaG9zdCBkYXRhYmFzZSBzZXJ2ZXIgd2hlbiB1c2luZyBEQjIgQ29ubmVjdC4KICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDMyIGNoYXJhY3RlcnMuCiAqCiAqCiAqCiAqIERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAzMiBjaGFyYWN0ZXJzLgogKgogKiBTUUxfQVRUUl9JTkZPX1dSS1NUTk5BTUUgLSBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICogY2hhcmFjdGVyIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjbGllbnQgd29ya3N0YXRpb24gbmFtZSBzZW50IHRvIHRoZQogKiBob3N0IGRhdGFiYXNlIHNlcnZlciB3aGVuIHVzaW5nIERCMiBDb25uZWN0LgogKgogKgogKiBEQjIgZm9yIHovT1MgYW5kIE9TLzM5MCBzZXJ2ZXJzIHN1cHBvcnQgdXAgdG8gYSBsZW5ndGggb2YgMTggY2hhcmFjdGVycy4KICoKICoKICoKICogREIyIGZvciB6L09TIGFuZCBPUy8zOTAgc2VydmVycyBzdXBwb3J0IHVwIHRvIGEgbGVuZ3RoIG9mIDE4IGNoYXJhY3RlcnMuCiAqIEBwYXJhbSBpbnQgJHR5cGUgUGFzc2luZyBEQjJfQVVUT0NPTU1JVF9PTiB0dXJucwogKiBhdXRvY29tbWl0IG9uIGZvciB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqCiAqIFBhc3NpbmcgREIyX0FVVE9DT01NSVRfT0ZGIHR1cm5zCiAqIGF1dG9jb21taXQgb2ZmIGZvciB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEB0aHJvd3MgSWJtRGIyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkYjJfc2V0X29wdGlvbigkcmVzb3VyY2UsIGFycmF5ICRvcHRpb25zLCBpbnQgJHR5cGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGIyX3NldF9vcHRpb24oJHJlc291cmNlLCAkb3B0aW9ucywgJHR5cGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWJtRGIyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/iconv.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJY29udkV4Y2VwdGlvbjsKCi8qKgogKiBSZXRyaWV2ZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvZiBpY29udiBleHRlbnNpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgVGhlIHZhbHVlIG9mIHRoZSBvcHRpb25hbCB0eXBlIGNhbiBiZToKICoKICogYWxsCiAqIGlucHV0X2VuY29kaW5nCiAqIG91dHB1dF9lbmNvZGluZwogKiBpbnRlcm5hbF9lbmNvZGluZwogKgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaWYKICogc3VjY2Vzc2Z1bC4KICoKICogSWYgdHlwZSBpcyBvbWl0dGVkIG9yIHNldCB0byAiYWxsIiwKICogaWNvbnZfZ2V0X2VuY29kaW5nIHJldHVybnMgYW4gYXJyYXkgdGhhdAogKiBzdG9yZXMgYWxsIHRoZXNlIHZhcmlhYmxlcy4KICogQHRocm93cyBJY29udkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWNvbnZfZ2V0X2VuY29kaW5nKHN0cmluZyAkdHlwZSA9ICJhbGwiKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGljb252X2dldF9lbmNvZGluZygkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJY29udkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBzcGVjaWZpZWQgYnkKICogdHlwZSB0byBjaGFyc2V0LgogKgogKiBAcGFyYW0gc3RyaW5nICR0eXBlIFRoZSB2YWx1ZSBvZiB0eXBlIGNhbiBiZSBhbnkgb25lIG9mIHRoZXNlOgogKgogKiBpbnB1dF9lbmNvZGluZwogKiBvdXRwdXRfZW5jb2RpbmcKICogaW50ZXJuYWxfZW5jb2RpbmcKICoKICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBUaGUgY2hhcmFjdGVyIHNldC4KICogQHRocm93cyBJY29udkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaWNvbnZfc2V0X2VuY29kaW5nKHN0cmluZyAkdHlwZSwgc3RyaW5nICRjaGFyc2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGljb252X3NldF9lbmNvZGluZygkdHlwZSwgJGNoYXJzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSWNvbnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBlcmZvcm1zIGEgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIG9uIHRoZSBzdHJpbmcKICogc3RyIGZyb20gaW5fY2hhcnNldAogKiB0byBvdXRfY2hhcnNldC4KICoKICogQHBhcmFtIHN0cmluZyAkaW5fY2hhcnNldCBUaGUgaW5wdXQgY2hhcnNldC4KICogQHBhcmFtIHN0cmluZyAkb3V0X2NoYXJzZXQgVGhlIG91dHB1dCBjaGFyc2V0LgogKgogKiBJZiB5b3UgYXBwZW5kIHRoZSBzdHJpbmcgLy9UUkFOU0xJVCB0bwogKiBvdXRfY2hhcnNldCB0cmFuc2xpdGVyYXRpb24gaXMgYWN0aXZhdGVkLiBUaGlzCiAqIG1lYW5zIHRoYXQgd2hlbiBhIGNoYXJhY3RlciBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiB0aGUgdGFyZ2V0IGNoYXJzZXQsCiAqIGl0IGNhbiBiZSBhcHByb3hpbWF0ZWQgdGhyb3VnaCBvbmUgb3Igc2V2ZXJhbCBzaW1pbGFybHkgbG9va2luZwogKiBjaGFyYWN0ZXJzLiBJZiB5b3UgYXBwZW5kIHRoZSBzdHJpbmcgLy9JR05PUkUsCiAqIGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIHRhcmdldCBjaGFyc2V0IGFyZSBzaWxlbnRseQogKiBkaXNjYXJkZWQuIE90aGVyd2lzZSwgRV9OT1RJQ0UgaXMgZ2VuZXJhdGVkIGFuZCB0aGUgZnVuY3Rpb24KICogd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIElmIGFuZCBob3cgLy9UUkFOU0xJVCB3b3JrcyBleGFjdGx5IGRlcGVuZHMgb24gdGhlCiAqIHN5c3RlbSdzIGljb252KCkgaW1wbGVtZW50YXRpb24gKGNmLiBJQ09OVl9JTVBMKS4KICogU29tZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGtub3duIHRvIGlnbm9yZSAvL1RSQU5TTElULAogKiBzbyB0aGUgY29udmVyc2lvbiBpcyBsaWtlbHkgdG8gZmFpbCBmb3IgY2hhcmFjdGVycyB3aGljaCBhcmUgaWxsZWdhbCBmb3IKICogdGhlIG91dF9jaGFyc2V0LgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuCiAqIEB0aHJvd3MgSWNvbnZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGljb252KHN0cmluZyAkaW5fY2hhcnNldCwgc3RyaW5nICRvdXRfY2hhcnNldCwgc3RyaW5nICRzdHIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpY29udigkaW5fY2hhcnNldCwgJG91dF9jaGFyc2V0LCAkc3RyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEljb252RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/image.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbWFnZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGUgZ2V0aW1hZ2VzaXplIGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5lIHRoZQogKiBzaXplIG9mIGFueSBzdXBwb3J0ZWQgZ2l2ZW4gaW1hZ2UgZmlsZSBhbmQgcmV0dXJuIHRoZSBkaW1lbnNpb25zIGFsb25nIHdpdGgKICogdGhlIGZpbGUgdHlwZSBhbmQgYSBoZWlnaHQvd2lkdGggdGV4dCBzdHJpbmcgdG8gYmUgdXNlZCBpbnNpZGUgYQogKiBub3JtYWwgSFRNTCBJTUcgdGFnIGFuZCB0aGUKICogY29ycmVzcG9uZGVudCBIVFRQIGNvbnRlbnQgdHlwZS4KICoKICogZ2V0aW1hZ2VzaXplIGNhbiBhbHNvIHJldHVybiBzb21lIG1vcmUgaW5mb3JtYXRpb24KICogaW4gaW1hZ2VpbmZvIHBhcmFtZXRlci4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBmaWxlIHlvdSB3aXNoIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCiAqIGFib3V0LiBJdCBjYW4gcmVmZXJlbmNlIGEgbG9jYWwgZmlsZSBvciAoY29uZmlndXJhdGlvbiBwZXJtaXR0aW5nKSBhCiAqIHJlbW90ZSBmaWxlIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHN0cmVhbXMuCiAqIEBwYXJhbSBhcnJheSAkaW1hZ2VpbmZvIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gZXh0cmFjdCBzb21lIGV4dGVuZGVkCiAqIGluZm9ybWF0aW9uIGZyb20gdGhlIGltYWdlIGZpbGUuIEN1cnJlbnRseSwgdGhpcyB3aWxsIHJldHVybiB0aGUKICogZGlmZmVyZW50IEpQRyBBUFAgbWFya2VycyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICogU29tZSBwcm9ncmFtcyB1c2UgdGhlc2UgQVBQIG1hcmtlcnMgdG8gZW1iZWQgdGV4dCBpbmZvcm1hdGlvbiBpbgogKiBpbWFnZXMuIEEgdmVyeSBjb21tb24gb25lIGlzIHRvIGVtYmVkCiAqIElQVEMgaW5mb3JtYXRpb24gaW4gdGhlIEFQUDEzIG1hcmtlci4KICogWW91IGNhbiB1c2UgdGhlIGlwdGNwYXJzZSBmdW5jdGlvbiB0byBwYXJzZSB0aGUKICogYmluYXJ5IEFQUDEzIG1hcmtlciBpbnRvIHNvbWV0aGluZyByZWFkYWJsZS4KICoKICogVGhlIGltYWdlaW5mbyBvbmx5IHN1cHBvcnRzCiAqIEpGSUYgZmlsZXMuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIHVwIHRvIDcgZWxlbWVudHMuIE5vdCBhbGwgaW1hZ2UgdHlwZXMgd2lsbCBpbmNsdWRlCiAqIHRoZSBjaGFubmVscyBhbmQgYml0cyBlbGVtZW50cy4KICoKICogSW5kZXggMCBhbmQgMSBjb250YWlucyByZXNwZWN0aXZlbHkgdGhlIHdpZHRoIGFuZCB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZS4KICoKICogSW5kZXggMiBpcyBvbmUgb2YgdGhlIElNQUdFVFlQRV9YWFggY29uc3RhbnRzIGluZGljYXRpbmcKICogdGhlIHR5cGUgb2YgdGhlIGltYWdlLgogKgogKiBJbmRleCAzIGlzIGEgdGV4dCBzdHJpbmcgd2l0aCB0aGUgY29ycmVjdAogKiBoZWlnaHQ9Inl5eSIgd2lkdGg9Inh4eCIgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQKICogZGlyZWN0bHkgaW4gYW4gSU1HIHRhZy4KICoKICogbWltZSBpcyB0aGUgY29ycmVzcG9uZGFudCBNSU1FIHR5cGUgb2YgdGhlIGltYWdlLgogKiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGRlbGl2ZXIgaW1hZ2VzIHdpdGggdGhlIGNvcnJlY3QgSFRUUAogKiBDb250ZW50LXR5cGUgaGVhZGVyOgogKgogKiBnZXRpbWFnZXNpemUgYW5kIE1JTUUgdHlwZXMKICoKICoKICogXV0+CiAqCiAqCiAqCiAqIGNoYW5uZWxzIHdpbGwgYmUgMyBmb3IgUkdCIHBpY3R1cmVzIGFuZCA0IGZvciBDTVlLCiAqIHBpY3R1cmVzLgogKgogKiBiaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgZWFjaCBjb2xvci4KICoKICogRm9yIHNvbWUgaW1hZ2UgdHlwZXMsIHRoZSBwcmVzZW5jZSBvZiBjaGFubmVscyBhbmQKICogYml0cyB2YWx1ZXMgY2FuIGJlIGEgYml0CiAqIGNvbmZ1c2luZy4gQXMgYW4gZXhhbXBsZSwgR0lGIGFsd2F5cyB1c2VzIDMgY2hhbm5lbHMKICogcGVyIHBpeGVsLCBidXQgdGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBjYW5ub3QgYmUgY2FsY3VsYXRlZCBmb3IgYW4KICogYW5pbWF0ZWQgR0lGIHdpdGggYSBnbG9iYWwgY29sb3IgdGFibGUuCiAqCiAqIE9uIGZhaWx1cmUsIEZBTFNFIGlzIHJldHVybmVkLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRpbWFnZXNpemUoc3RyaW5nICRmaWxlbmFtZSwgYXJyYXkgJiRpbWFnZWluZm8gPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRpbWFnZXNpemUoJGZpbGVuYW1lLCAkaW1hZ2VpbmZvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlMndibXAgb3V0cHV0cyBvciBzYXZlIGEgV0JNUAogKiB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZW5hbWUgUGF0aCB0byB0aGUgc2F2ZWQgZmlsZS4gSWYgbm90IGdpdmVuLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlCiAqIG91dHB1dCBkaXJlY3RseS4KICogQHBhcmFtIGludCAkZm9yZWdyb3VuZCBZb3UgY2FuIHNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciB3aXRoIHRoaXMgcGFyYW1ldGVyIGJ5IHNldHRpbmcgYW4KICogaWRlbnRpZmllciBvYnRhaW5lZCBmcm9tIGltYWdlY29sb3JhbGxvY2F0ZS4KICogVGhlIGRlZmF1bHQgZm9yZWdyb3VuZCBjb2xvciBpcyBibGFjay4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Uyd2JtcCgkaW1hZ2UsID9zdHJpbmcgJGZpbGVuYW1lID0gbnVsbCwgaW50ICRmb3JlZ3JvdW5kID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmb3JlZ3JvdW5kICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSwgJGZpbGVuYW1lLCAkZm9yZWdyb3VuZCk7CiAgICB9IGVsc2VpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSwgJGZpbGVuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZTJ3Ym1wKCRpbWFnZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBhcnJheSAkYWZmaW5lIEFycmF5IHdpdGgga2V5cyAwIHRvIDUuCiAqIEBwYXJhbSBhcnJheSAkY2xpcCBBcnJheSB3aXRoIGtleXMgIngiLCAieSIsICJ3aWR0aCIgYW5kICJoZWlnaHQiLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybiBhZmZpbmVkIGltYWdlIHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWZmaW5lKCRpbWFnZSwgYXJyYXkgJGFmZmluZSwgYXJyYXkgJGNsaXAgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNsaXAgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lKCRpbWFnZSwgJGFmZmluZSwgJGNsaXApOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lKCRpbWFnZSwgJGFmZmluZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMsCiAqIHdoYXQgaXMgdXNlZnVsIGlmIG11bHRpcGxlIHRyYW5zZm9ybWF0aW9ucyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgc2FtZQogKiBpbWFnZSBpbiBvbmUgZ28uCiAqCiAqIEBwYXJhbSBhcnJheSAkbTEgQW4gYWZmaW5lIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAoYW4gYXJyYXkgd2l0aCBrZXlzCiAqIDAgdG8gNSBhbmQgZmxvYXQgdmFsdWVzKS4KICogQHBhcmFtIGFycmF5ICRtMiBBbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChhbiBhcnJheSB3aXRoIGtleXMKICogMCB0byA1IGFuZCBmbG9hdCB2YWx1ZXMpLgogKiBAcmV0dXJuIGFycmF5ezA6ZmxvYXQsMTpmbG9hdCwyOmZsb2F0LDM6ZmxvYXQsNDpmbG9hdCw1OmZsb2F0fSBBbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChhbiBhcnJheSB3aXRoIGtleXMKICogMCB0byA1IGFuZCBmbG9hdCB2YWx1ZXMpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWFmZmluZW1hdHJpeGNvbmNhdChhcnJheSAkbTEsIGFycmF5ICRtMik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQoJG0xLCAkbTIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBhbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgogKgogKiBAcGFyYW0gaW50ICR0eXBlIE9uZSBvZiB0aGUgSU1HX0FGRklORV8qIGNvbnN0YW50cy4KICogQHBhcmFtIGFycmF5fGZsb2F0ICRvcHRpb25zIElmIHR5cGUgaXMgSU1HX0FGRklORV9UUkFOU0xBVEUKICogb3IgSU1HX0FGRklORV9TQ0FMRSwKICogb3B0aW9ucyBoYXMgdG8gYmUgYW4gYXJyYXkgd2l0aCBrZXlzIHgKICogYW5kIHksIGJvdGggaGF2aW5nIGZsb2F0IHZhbHVlcy4KICoKICogSWYgdHlwZSBpcyBJTUdfQUZGSU5FX1JPVEFURSwKICogSU1HX0FGRklORV9TSEVBUl9IT1JJWk9OVEFMIG9yIElNR19BRkZJTkVfU0hFQVJfVkVSVElDQUwsCiAqIG9wdGlvbnMgaGFzIHRvIGJlIGEgZmxvYXQgc3BlY2lmeWluZyB0aGUgYW5nbGUuCiAqIEByZXR1cm4gYXJyYXl7MDpmbG9hdCwxOmZsb2F0LDI6ZmxvYXQsMzpmbG9hdCw0OmZsb2F0LDU6ZmxvYXR9IEFuIGFmZmluZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKGFuIGFycmF5IHdpdGgga2V5cwogKiAwIHRvIDUgYW5kIGZsb2F0IHZhbHVlcykuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWZmaW5lbWF0cml4Z2V0KGludCAkdHlwZSwgJG9wdGlvbnMgPSBudWxsKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWFmZmluZW1hdHJpeGdldCgkdHlwZSwgJG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlYWZmaW5lbWF0cml4Z2V0KCR0eXBlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlYWxwaGFibGVuZGluZyBhbGxvd3MgZm9yIHR3byBkaWZmZXJlbnQKICogbW9kZXMgb2YgZHJhd2luZyBvbiB0cnVlY29sb3IgaW1hZ2VzLiBJbiBibGVuZGluZyBtb2RlLCB0aGUKICogYWxwaGEgY2hhbm5lbCBjb21wb25lbnQgb2YgdGhlIGNvbG9yIHN1cHBsaWVkIHRvIGFsbCBkcmF3aW5nIGZ1bmN0aW9uLAogKiBzdWNoIGFzIGltYWdlc2V0cGl4ZWwgZGV0ZXJtaW5lcyBob3cgbXVjaCBvZiB0aGUKICogdW5kZXJseWluZyBjb2xvciBzaG91bGQgYmUgYWxsb3dlZCB0byBzaGluZSB0aHJvdWdoLiAgQXMgYSByZXN1bHQsIGdkCiAqIGF1dG9tYXRpY2FsbHkgYmxlbmRzIHRoZSBleGlzdGluZyBjb2xvciBhdCB0aGF0IHBvaW50IHdpdGggdGhlIGRyYXdpbmcgY29sb3IsCiAqIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgaW1hZ2UuICBUaGUgcmVzdWx0aW5nIHBpeGVsIGlzIG9wYXF1ZS4gIEluCiAqIG5vbi1ibGVuZGluZyBtb2RlLCB0aGUgZHJhd2luZyBjb2xvciBpcyBjb3BpZWQgbGl0ZXJhbGx5IHdpdGggaXRzIGFscGhhIGNoYW5uZWwKICogaW5mb3JtYXRpb24sIHJlcGxhY2luZyB0aGUgZGVzdGluYXRpb24gcGl4ZWwuICBCbGVuZGluZyBtb2RlIGlzIG5vdCBhdmFpbGFibGUKICogd2hlbiBkcmF3aW5nIG9uIHBhbGV0dGUgaW1hZ2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGJvb2wgJGJsZW5kbW9kZSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgYmxlbmRpbmcgbW9kZSBvciBub3QuIE9uIHRydWUgY29sb3IgaW1hZ2VzCiAqIHRoZSBkZWZhdWx0IHZhbHVlIGlzIFRSVUUgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIEZBTFNFCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYWxwaGFibGVuZGluZygkaW1hZ2UsIGJvb2wgJGJsZW5kbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFscGhhYmxlbmRpbmcoJGltYWdlLCAkYmxlbmRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBY3RpdmF0ZSB0aGUgZmFzdCBkcmF3aW5nIGFudGlhbGlhc2VkIG1ldGhvZHMgZm9yIGxpbmVzIGFuZCB3aXJlZCBwb2x5Z29ucy4KICogSXQgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBjb21wb25lbnRzLiBJdCB3b3JrcyB1c2luZyBhIGRpcmVjdCBibGVuZAogKiBvcGVyYXRpb24uIEl0IHdvcmtzIG9ubHkgd2l0aCB0cnVlY29sb3IgaW1hZ2VzLgogKgogKiBUaGlja25lc3MgYW5kIHN0eWxlZCBhcmUgbm90IHN1cHBvcnRlZC4KICoKICogVXNpbmcgYW50aWFsaWFzZWQgcHJpbWl0aXZlcyB3aXRoIHRyYW5zcGFyZW50IGJhY2tncm91bmQgY29sb3IgY2FuIGVuZCB3aXRoCiAqIHNvbWUgdW5leHBlY3RlZCByZXN1bHRzLiBUaGUgYmxlbmQgbWV0aG9kIHVzZXMgdGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW55CiAqIG90aGVyIGNvbG9ycy4gVGhlIGxhY2sgb2YgYWxwaGEgY29tcG9uZW50IHN1cHBvcnQgZG9lcyBub3QgYWxsb3cgYW4gYWxwaGEKICogYmFzZWQgYW50aWFsaWFzaW5nIG1ldGhvZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBib29sICRlbmFibGVkIFdoZXRoZXIgdG8gZW5hYmxlIGFudGlhbGlhc2luZyBvciBub3QuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYW50aWFsaWFzKCRpbWFnZSwgYm9vbCAkZW5hYmxlZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFudGlhbGlhcygkaW1hZ2UsICRlbmFibGVkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWFyYyBkcmF3cyBhbiBhcmMgb2YgY2lyY2xlIGNlbnRlcmVkIGF0IHRoZSBnaXZlbgogKiBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGFyYyB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBhcmMgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRzdGFydCBUaGUgYXJjIHN0YXJ0IGFuZ2xlLCBpbiBkZWdyZWVzLgogKiBAcGFyYW0gaW50ICRlbmQgVGhlIGFyYyBlbmQgYW5nbGUsIGluIGRlZ3JlZXMuCiAqIDDCsCBpcyBsb2NhdGVkIGF0IHRoZSB0aHJlZS1vJ2Nsb2NrIHBvc2l0aW9uLCBhbmQgdGhlIGFyYyBpcyBkcmF3bgogKiBjbG9ja3dpc2UuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWFyYygkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWFyYygkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRzdGFydCwgJGVuZCwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIG9yIHNhdmVzIGEgQk1QIHZlcnNpb24gb2YgdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKgogKiBOVUxMIGlzIGludmFsaWQgaWYgdGhlIGNvbXByZXNzZWQgYXJndW1lbnRzIGlzCiAqIG5vdCB1c2VkLgogKiBAcGFyYW0gYm9vbCAkY29tcHJlc3NlZCBXaGV0aGVyIHRoZSBCTVAgc2hvdWxkIGJlIGNvbXByZXNzZWQgd2l0aCBydW4tbGVuZ3RoIGVuY29kaW5nIChSTEUpLCBvciBub3QuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlYm1wKCRpbWFnZSwgJHRvID0gbnVsbCwgYm9vbCAkY29tcHJlc3NlZCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VibXAoJGltYWdlLCAkdG8sICRjb21wcmVzc2VkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWNoYXIgZHJhd3MgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgogKiBjIGluIHRoZSBpbWFnZSBpZGVudGlmaWVkIGJ5CiAqIGltYWdlIHdpdGggaXRzIHVwcGVyLWxlZnQgYXQKICogeCx5ICh0b3AgbGVmdCBpcyAwLAogKiAwKSB3aXRoIHRoZSBjb2xvciBjb2xvci4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQuCiAqIEBwYXJhbSBpbnQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBzdGFydC4KICogQHBhcmFtIHN0cmluZyAkYyBUaGUgY2hhcmFjdGVyIHRvIGRyYXcuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNoYXIoJGltYWdlLCBpbnQgJGZvbnQsIGludCAkeCwgaW50ICR5LCBzdHJpbmcgJGMsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjaGFyKCRpbWFnZSwgJGZvbnQsICR4LCAkeSwgJGMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRHJhd3MgdGhlIGNoYXJhY3RlciBjIHZlcnRpY2FsbHkgYXQgdGhlIHNwZWNpZmllZAogKiBjb29yZGluYXRlIG9uIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQuCiAqIEBwYXJhbSBpbnQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBzdGFydC4KICogQHBhcmFtIHN0cmluZyAkYyBUaGUgY2hhcmFjdGVyIHRvIGRyYXcuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNoYXJ1cCgkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkYywgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNoYXJ1cCgkaW1hZ2UsICRmb250LCAkeCwgJHksICRjLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjb2xvciBvZiB0aGUgcGl4ZWwgYXQgdGhlCiAqIHNwZWNpZmllZCBsb2NhdGlvbiBpbiB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IGltYWdlLgogKgogKiBJZiB0aGUgaW1hZ2UgaXMgYQogKiB0cnVlY29sb3IgaW1hZ2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgUkdCIHZhbHVlIG9mIHRoYXQgcGl4ZWwgYXMKICogaW50ZWdlci4gVXNlIGJpdHNoaWZ0aW5nIGFuZCBtYXNraW5nIHRvIGFjY2VzcyB0aGUgZGlzdGluY3QgcmVkLCBncmVlbiBhbmQgYmx1ZQogKiBjb21wb25lbnQgdmFsdWVzOgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjb2xvci4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb2xvcmF0KCRpbWFnZSwgaW50ICR4LCBpbnQgJHkpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvbG9yYXQoJGltYWdlLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGUtYWxsb2NhdGVzIGEgY29sb3IgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aAogKiBpbWFnZWNvbG9yYWxsb2NhdGUgb3IKICogaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgY29sb3IgaWRlbnRpZmllci4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb2xvcmRlYWxsb2NhdGUoJGltYWdlLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29sb3JkZWFsbG9jYXRlKCRpbWFnZSwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWtlcyB0aGUgY29sb3JzIG9mIHRoZSBwYWxldHRlIHZlcnNpb24gb2YgYW4gaW1hZ2UgbW9yZSBjbG9zZWx5IG1hdGNoIHRoZSB0cnVlIGNvbG9yIHZlcnNpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UxIEEgdHJ1ZWNvbG9yIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlMiBBIHBhbGV0dGUgaW1hZ2UgcmVzb3VyY2UgcG9pbnRpbmcgdG8gYW4gaW1hZ2UgdGhhdCBoYXMgdGhlIHNhbWUKICogc2l6ZSBhcyBpbWFnZTEuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY29sb3JtYXRjaCgkaW1hZ2UxLCAkaW1hZ2UyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29sb3JtYXRjaCgkaW1hZ2UxLCAkaW1hZ2UyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBcHBsaWVzIGEgY29udm9sdXRpb24gbWF0cml4IG9uIHRoZSBpbWFnZSwgdXNpbmcgdGhlIGdpdmVuIGNvZWZmaWNpZW50IGFuZAogKiBvZmZzZXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYXJyYXkgJG1hdHJpeCBBIDN4MyBtYXRyaXg6IGFuIGFycmF5IG9mIHRocmVlIGFycmF5cyBvZiB0aHJlZSBmbG9hdHMuCiAqIEBwYXJhbSBmbG9hdCAkZGl2IFRoZSBkaXZpc29yIG9mIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZvbHV0aW9uLCB1c2VkIGZvciBub3JtYWxpemF0aW9uLgogKiBAcGFyYW0gZmxvYXQgJG9mZnNldCBDb2xvciBvZmZzZXQuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY29udm9sdXRpb24oJGltYWdlLCBhcnJheSAkbWF0cml4LCBmbG9hdCAkZGl2LCBmbG9hdCAkb2Zmc2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29udm9sdXRpb24oJGltYWdlLCAkbWF0cml4LCAkZGl2LCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgcGFydCBvZiBzcmNfaW0gb250bwogKiBkc3RfaW0gc3RhcnRpbmcgYXQgdGhlIHgseSBjb29yZGluYXRlcwogKiBzcmNfeCwgc3JjX3kgIHdpdGgKICogYSB3aWR0aCBvZiBzcmNfdyBhbmQgYSBoZWlnaHQgb2YKICogc3JjX2guICBUaGUgcG9ydGlvbiBkZWZpbmVkIHdpbGwgYmUgY29waWVkCiAqIG9udG8gdGhlIHgseSBjb29yZGluYXRlcywgZHN0X3ggYW5kCiAqIGRzdF95LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW0gU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHkoJGRzdF9pbSwgJHNyY19pbSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRzcmNfdywgaW50ICRzcmNfaCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvcHkoJGRzdF9pbSwgJHNyY19pbSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkc3JjX3csICRzcmNfaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29weSBhIHBhcnQgb2Ygc3JjX2ltIG9udG8KICogZHN0X2ltIHN0YXJ0aW5nIGF0IHRoZSB4LHkgY29vcmRpbmF0ZXMKICogc3JjX3gsIHNyY195ICB3aXRoCiAqIGEgd2lkdGggb2Ygc3JjX3cgYW5kIGEgaGVpZ2h0IG9mCiAqIHNyY19oLiAgVGhlIHBvcnRpb24gZGVmaW5lZCB3aWxsIGJlIGNvcGllZAogKiBvbnRvIHRoZSB4LHkgY29vcmRpbmF0ZXMsIGRzdF94IGFuZAogKiBkc3RfeS4KICoKICogQHBhcmFtIHJlc291cmNlICRkc3RfaW0gRGVzdGluYXRpb24gaW1hZ2UgcmVzb3VyY2UuCiAqIEBwYXJhbSByZXNvdXJjZSAkc3JjX2ltIFNvdXJjZSBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIGludCAkZHN0X3ggeC1jb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHBvaW50LgogKiBAcGFyYW0gaW50ICRkc3RfeSB5LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY194IHgtY29vcmRpbmF0ZSBvZiBzb3VyY2UgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY195IHktY29vcmRpbmF0ZSBvZiBzb3VyY2UgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHNyY193IFNvdXJjZSB3aWR0aC4KICogQHBhcmFtIGludCAkc3JjX2ggU291cmNlIGhlaWdodC4KICogQHBhcmFtIGludCAkcGN0IFRoZSB0d28gaW1hZ2VzIHdpbGwgYmUgbWVyZ2VkIGFjY29yZGluZyB0byBwY3QKICogd2hpY2ggY2FuIHJhbmdlIGZyb20gMCB0byAxMDAuICBXaGVuIHBjdCA9IDAsCiAqIG5vIGFjdGlvbiBpcyB0YWtlbiwgd2hlbiAxMDAgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGlkZW50aWNhbGx5CiAqIHRvIGltYWdlY29weSBmb3IgcGFsbGV0ZSBpbWFnZXMsIGV4Y2VwdCBmb3IKICogaWdub3JpbmcgYWxwaGEgY29tcG9uZW50cywgd2hpbGUgaXQgaW1wbGVtZW50cyBhbHBoYSB0cmFuc3BhcmVuY3kKICogZm9yIHRydWUgY29sb3VyIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb3B5bWVyZ2UoJGRzdF9pbSwgJHNyY19pbSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRzcmNfdywgaW50ICRzcmNfaCwgaW50ICRwY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjb3B5bWVyZ2UoJGRzdF9pbSwgJHNyY19pbSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkc3JjX3csICRzcmNfaCwgJHBjdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2Vjb3B5bWVyZ2VncmF5IGNvcHkgYSBwYXJ0IG9mIHNyY19pbSBvbnRvCiAqIGRzdF9pbSBzdGFydGluZyBhdCB0aGUgeCx5IGNvb3JkaW5hdGVzCiAqIHNyY194LCBzcmNfeSAgd2l0aAogKiBhIHdpZHRoIG9mIHNyY193IGFuZCBhIGhlaWdodCBvZgogKiBzcmNfaC4gIFRoZSBwb3J0aW9uIGRlZmluZWQgd2lsbCBiZSBjb3BpZWQKICogb250byB0aGUgeCx5IGNvb3JkaW5hdGVzLCBkc3RfeCBhbmQKICogZHN0X3kuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGltYWdlY29weW1lcmdlIGV4Y2VwdAogKiB0aGF0IHdoZW4gbWVyZ2luZyBpdCBwcmVzZXJ2ZXMgdGhlIGh1ZSBvZiB0aGUgc291cmNlIGJ5IGNvbnZlcnRpbmcKICogdGhlIGRlc3RpbmF0aW9uIHBpeGVscyB0byBncmF5IHNjYWxlIGJlZm9yZSB0aGUgY29weSBvcGVyYXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZHN0X2ltIERlc3RpbmF0aW9uIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gcmVzb3VyY2UgJHNyY19pbSBTb3VyY2UgaW1hZ2UgcmVzb3VyY2UuCiAqIEBwYXJhbSBpbnQgJGRzdF94IHgtY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3kgeS1jb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfeCB4LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfeSB5LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICRzcmNfdyBTb3VyY2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJHNyY19oIFNvdXJjZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJHBjdCBUaGUgc3JjX2ltIHdpbGwgYmUgY2hhbmdlZCB0byBncmF5c2NhbGUgYWNjb3JkaW5nCiAqIHRvIHBjdCB3aGVyZSAwIGlzIGZ1bGx5IGdyYXlzY2FsZSBhbmQgMTAwIGlzCiAqIHVuY2hhbmdlZC4gV2hlbiBwY3QgPSAxMDAgdGhpcyBmdW5jdGlvbiBiZWhhdmVzCiAqIGlkZW50aWNhbGx5IHRvIGltYWdlY29weSBmb3IgcGFsbGV0ZSBpbWFnZXMsIGV4Y2VwdCBmb3IKICogaWdub3JpbmcgYWxwaGEgY29tcG9uZW50cywgd2hpbGUKICogaXQgaW1wbGVtZW50cyBhbHBoYSB0cmFuc3BhcmVuY3kgZm9yIHRydWUgY29sb3VyIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjb3B5bWVyZ2VncmF5KCRkc3RfaW0sICRzcmNfaW0sIGludCAkZHN0X3gsIGludCAkZHN0X3ksIGludCAkc3JjX3gsIGludCAkc3JjX3ksIGludCAkc3JjX3csIGludCAkc3JjX2gsIGludCAkcGN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY29weW1lcmdlZ3JheSgkZHN0X2ltLCAkc3JjX2ltLCAkZHN0X3gsICRkc3RfeSwgJHNyY194LCAkc3JjX3ksICRzcmNfdywgJHNyY19oLCAkcGN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWNvcHlyZXNhbXBsZWQgY29waWVzIGEgcmVjdGFuZ3VsYXIKICogcG9ydGlvbiBvZiBvbmUgaW1hZ2UgdG8gYW5vdGhlciBpbWFnZSwgc21vb3RobHkgaW50ZXJwb2xhdGluZyBwaXhlbAogKiB2YWx1ZXMgc28gdGhhdCwgaW4gcGFydGljdWxhciwgcmVkdWNpbmcgdGhlIHNpemUgb2YgYW4gaW1hZ2Ugc3RpbGwKICogcmV0YWlucyBhIGdyZWF0IGRlYWwgb2YgY2xhcml0eS4KICoKICogSW4gb3RoZXIgd29yZHMsIGltYWdlY29weXJlc2FtcGxlZCB3aWxsIHRha2UgYQogKiByZWN0YW5ndWxhciBhcmVhIGZyb20gc3JjX2ltYWdlIG9mIHdpZHRoCiAqIHNyY193IGFuZCBoZWlnaHQgc3JjX2ggYXQKICogcG9zaXRpb24gKHNyY194LHNyY195KQogKiBhbmQgcGxhY2UgaXQgaW4gYSByZWN0YW5ndWxhciBhcmVhIG9mIGRzdF9pbWFnZQogKiBvZiB3aWR0aCBkc3RfdyBhbmQgaGVpZ2h0IGRzdF9oCiAqIGF0IHBvc2l0aW9uIChkc3RfeCxkc3RfeSkuCiAqCiAqIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGFuZCB3aWR0aCBhbmQgaGVpZ2h0cwogKiBkaWZmZXIsIGFwcHJvcHJpYXRlIHN0cmV0Y2hpbmcgb3Igc2hyaW5raW5nIG9mIHRoZSBpbWFnZSBmcmFnbWVudAogKiB3aWxsIGJlIHBlcmZvcm1lZC4gVGhlIGNvb3JkaW5hdGVzIHJlZmVyIHRvIHRoZSB1cHBlciBsZWZ0CiAqIGNvcm5lci4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29weSByZWdpb25zIHdpdGhpbiB0aGUKICogc2FtZSBpbWFnZSAoaWYgZHN0X2ltYWdlIGlzIHRoZSBzYW1lIGFzCiAqIHNyY19pbWFnZSkgYnV0IGlmIHRoZSByZWdpb25zIG92ZXJsYXAgdGhlCiAqIHJlc3VsdHMgd2lsbCBiZSB1bnByZWRpY3RhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbWFnZSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW1hZ2UgU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3cgRGVzdGluYXRpb24gd2lkdGguCiAqIEBwYXJhbSBpbnQgJGRzdF9oIERlc3RpbmF0aW9uIGhlaWdodC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHlyZXNhbXBsZWQoJGRzdF9pbWFnZSwgJHNyY19pbWFnZSwgaW50ICRkc3RfeCwgaW50ICRkc3RfeSwgaW50ICRzcmNfeCwgaW50ICRzcmNfeSwgaW50ICRkc3RfdywgaW50ICRkc3RfaCwgaW50ICRzcmNfdywgaW50ICRzcmNfaCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNvcHlyZXNhbXBsZWQoJGRzdF9pbWFnZSwgJHNyY19pbWFnZSwgJGRzdF94LCAkZHN0X3ksICRzcmNfeCwgJHNyY195LCAkZHN0X3csICRkc3RfaCwgJHNyY193LCAkc3JjX2gpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlY29weXJlc2l6ZWQgY29waWVzIGEgcmVjdGFuZ3VsYXIKICogcG9ydGlvbiBvZiBvbmUgaW1hZ2UgdG8gYW5vdGhlciBpbWFnZS4KICogZHN0X2ltYWdlIGlzIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSwKICogc3JjX2ltYWdlIGlzIHRoZSBzb3VyY2UgaW1hZ2UgaWRlbnRpZmllci4KICoKICogSW4gb3RoZXIgd29yZHMsIGltYWdlY29weXJlc2l6ZWQgd2lsbCB0YWtlIGEKICogcmVjdGFuZ3VsYXIgYXJlYSBmcm9tIHNyY19pbWFnZSBvZiB3aWR0aAogKiBzcmNfdyBhbmQgaGVpZ2h0IHNyY19oIGF0CiAqIHBvc2l0aW9uIChzcmNfeCxzcmNfeSkKICogYW5kIHBsYWNlIGl0IGluIGEgcmVjdGFuZ3VsYXIgYXJlYSBvZiBkc3RfaW1hZ2UKICogb2Ygd2lkdGggZHN0X3cgYW5kIGhlaWdodCBkc3RfaAogKiBhdCBwb3NpdGlvbiAoZHN0X3gsZHN0X3kpLgogKgogKiBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBhbmQgd2lkdGggYW5kIGhlaWdodHMKICogZGlmZmVyLCBhcHByb3ByaWF0ZSBzdHJldGNoaW5nIG9yIHNocmlua2luZyBvZiB0aGUgaW1hZ2UgZnJhZ21lbnQKICogd2lsbCBiZSBwZXJmb3JtZWQuIFRoZSBjb29yZGluYXRlcyByZWZlciB0byB0aGUgdXBwZXIgbGVmdAogKiBjb3JuZXIuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29weSByZWdpb25zIHdpdGhpbiB0aGUKICogc2FtZSBpbWFnZSAoaWYgZHN0X2ltYWdlIGlzIHRoZSBzYW1lIGFzCiAqIHNyY19pbWFnZSkgYnV0IGlmIHRoZSByZWdpb25zIG92ZXJsYXAgdGhlCiAqIHJlc3VsdHMgd2lsbCBiZSB1bnByZWRpY3RhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRzdF9pbWFnZSBEZXN0aW5hdGlvbiBpbWFnZSByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRzcmNfaW1hZ2UgU291cmNlIGltYWdlIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRkc3RfeCB4LWNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGRzdF95IHktY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjX3kgeS1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkZHN0X3cgRGVzdGluYXRpb24gd2lkdGguCiAqIEBwYXJhbSBpbnQgJGRzdF9oIERlc3RpbmF0aW9uIGhlaWdodC4KICogQHBhcmFtIGludCAkc3JjX3cgU291cmNlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRzcmNfaCBTb3VyY2UgaGVpZ2h0LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNvcHlyZXNpemVkKCRkc3RfaW1hZ2UsICRzcmNfaW1hZ2UsIGludCAkZHN0X3gsIGludCAkZHN0X3ksIGludCAkc3JjX3gsIGludCAkc3JjX3ksIGludCAkZHN0X3csIGludCAkZHN0X2gsIGludCAkc3JjX3csIGludCAkc3JjX2gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjb3B5cmVzaXplZCgkZHN0X2ltYWdlLCAkc3JjX2ltYWdlLCAkZHN0X3gsICRkc3RfeSwgJHNyY194LCAkc3JjX3ksICRkc3RfdywgJGRzdF9oLCAkc3JjX3csICRzcmNfaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2VjcmVhdGUgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyBhIGJsYW5rIGltYWdlIG9mIHNwZWNpZmllZCBzaXplLgogKgogKiBJbiBnZW5lcmFsLCB3ZSByZWNvbW1lbmQgdGhlIHVzZSBvZgogKiBpbWFnZWNyZWF0ZXRydWVjb2xvciBpbnN0ZWFkIG9mCiAqIGltYWdlY3JlYXRlIHNvIHRoYXQgaW1hZ2UgcHJvY2Vzc2luZyBvY2N1cnMgb24gdGhlCiAqIGhpZ2hlc3QgcXVhbGl0eSBpbWFnZSBwb3NzaWJsZS4gSWYgeW91IHdhbnQgdG8gb3V0cHV0IGEgcGFsZXR0ZSBpbWFnZSwgdGhlbgogKiBpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSBzaG91bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5CiAqIGJlZm9yZSBzYXZpbmcgdGhlIGltYWdlIHdpdGggaW1hZ2Vwbmcgb3IKICogaW1hZ2VnaWYuCiAqCiAqIEBwYXJhbSBpbnQgJHdpZHRoIFRoZSBpbWFnZSB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBpbWFnZSBoZWlnaHQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGUoaW50ICR3aWR0aCwgaW50ICRoZWlnaHQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGUoJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbWJtcCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgQk1QIGltYWdlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbWJtcChzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWJtcCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QgZmlsZSBvciBVUkwuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEdEIGZpbGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tZ2Qoc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb21nZCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QyIGZpbGUgb3IgVVJMLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBHRDIgaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tZ2QyKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9tZ2QyKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBhIGdpdmVuIHBhcnQgb2YgR0QyIGZpbGUgb3IgVVJMLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBHRDIgaW1hZ2UuCiAqIEBwYXJhbSBpbnQgJHNyY1ggeC1jb29yZGluYXRlIG9mIHNvdXJjZSBwb2ludC4KICogQHBhcmFtIGludCAkc3JjWSB5LWNvb3JkaW5hdGUgb2Ygc291cmNlIHBvaW50LgogKiBAcGFyYW0gaW50ICR3aWR0aCBTb3VyY2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBTb3VyY2UgaGVpZ2h0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbWdkMnBhcnQoc3RyaW5nICRmaWxlbmFtZSwgaW50ICRzcmNYLCBpbnQgJHNyY1ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWdkMnBhcnQoJGZpbGVuYW1lLCAkc3JjWCwgJHNyY1ksICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZWNyZWF0ZWZyb21naWYgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEdJRiBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb21naWYoc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb21naWYoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbWpwZWcgcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIEpQRUcgaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9tanBlZyhzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbWpwZWcoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRlZnJvbXBuZyByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgUE5HIGltYWdlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRlZnJvbXBuZyhzdHJpbmcgJGZpbGVuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRlZnJvbXBuZygkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9td2JtcCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgV0JNUCBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb213Ym1wKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9td2JtcCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9td2VicCByZXR1cm5zIGFuIGltYWdlIGlkZW50aWZpZXIKICogcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBvYnRhaW5lZCBmcm9tIHRoZSBnaXZlbiBmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgV2ViUCBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb213ZWJwKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9td2VicCgkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VjcmVhdGVmcm9teGJtIHJldHVybnMgYW4gaW1hZ2UgaWRlbnRpZmllcgogKiByZXByZXNlbnRpbmcgdGhlIGltYWdlIG9idGFpbmVkIGZyb20gdGhlIGdpdmVuIGZpbGVuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBYQk0gaW1hZ2UuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9ycy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VjcmVhdGVmcm9teGJtKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VjcmVhdGVmcm9teGJtKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZWNyZWF0ZWZyb214cG0gcmV0dXJucyBhbiBpbWFnZSBpZGVudGlmaWVyCiAqIHJlcHJlc2VudGluZyB0aGUgaW1hZ2Ugb2J0YWluZWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFhQTSBpbWFnZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3JzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyZWF0ZWZyb214cG0oc3RyaW5nICRmaWxlbmFtZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWNyZWF0ZWZyb214cG0oJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlY3JlYXRldHJ1ZWNvbG9yIHJldHVybnMgYW4gaW1hZ2UgaWRlbnRpZmllcgogKiByZXByZXNlbnRpbmcgYSBibGFjayBpbWFnZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuCiAqCiAqIEBwYXJhbSBpbnQgJHdpZHRoIEltYWdlIHdpZHRoLgogKiBAcGFyYW0gaW50ICRoZWlnaHQgSW1hZ2UgaGVpZ2h0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW1hZ2UgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcnMuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlY3JlYXRldHJ1ZWNvbG9yKGludCAkd2lkdGgsIGludCAkaGVpZ2h0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlY3JlYXRldHJ1ZWNvbG9yKCR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcm9wcyBhbiBpbWFnZSB0byB0aGUgZ2l2ZW4gcmVjdGFuZ3VsYXIgYXJlYSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIGltYWdlLgogKiBUaGUgZ2l2ZW4gaW1hZ2UgaXMgbm90IG1vZGlmaWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRyZWN0IFRoZSBjcm9wcGluZyByZWN0YW5nbGUgYXMgYXJyYXkgd2l0aCBrZXlzCiAqIHgsIHksIHdpZHRoIGFuZAogKiBoZWlnaHQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJuIGNyb3BwZWQgaW1hZ2UgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vjcm9wKCRpbWFnZSwgYXJyYXkgJHJlY3QpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjcm9wKCRpbWFnZSwgJHJlY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQXV0b21hdGljYWxseSBjcm9wcyBhbiBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCiAqIG1vZGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRtb2RlIE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogQHBhcmFtIGZsb2F0ICR0aHJlc2hvbGQKICogQHBhcmFtIGludCAkY29sb3IKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgY3JvcHBlZCBpbWFnZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBJZiB0aGUgY29tcGxldGUgaW1hZ2Ugd2FzIGNyb3BwZWQsIGltYWdlY3JvcCByZXR1cm5zIEZBTFNFLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWNyb3BhdXRvKCRpbWFnZSwgaW50ICRtb2RlID0gSU1HX0NST1BfREVGQVVMVCwgZmxvYXQgJHRocmVzaG9sZCA9IC41LCBpbnQgJGNvbG9yID0gLTEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vjcm9wYXV0bygkaW1hZ2UsICRtb2RlLCAkdGhyZXNob2xkLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBVc2UgY29tYmluYXRpb24gb2YKICogaW1hZ2VzZXRzdHlsZSBhbmQgaW1hZ2VsaW5lCiAqIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4MSBVcHBlciBsZWZ0IHggY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeTEgVXBwZXIgbGVmdCB5IGNvb3JkaW5hdGUgMCwgMCBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZS4KICogQHBhcmFtIGludCAkeDIgQm90dG9tIHJpZ2h0IHggY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeTIgQm90dG9tIHJpZ2h0IHkgY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkY29sb3IgVGhlIGZpbGwgY29sb3IuIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWRhc2hlZGxpbmUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZGFzaGVkbGluZSgkaW1hZ2UsICR4MSwgJHkxLCAkeDIsICR5MiwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWRlc3Ryb3kgZnJlZXMgYW55IG1lbW9yeSBhc3NvY2lhdGVkCiAqIHdpdGggaW1hZ2UgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWRlc3Ryb3koJGltYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZGVzdHJveSgkaW1hZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGFuIGVsbGlwc2UgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGVsbGlwc2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBUaGUgZWxsaXBzZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBjb2xvciBvZiB0aGUgZWxsaXBzZS4gQSBjb2xvciBpZGVudGlmaWVyIGNyZWF0ZWQgd2l0aCBpbWFnZWNvbG9yYWxsb2NhdGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZWxsaXBzZSgkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZWxsaXBzZSgkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgYSBmbG9vZCBmaWxsIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlICh0b3AgbGVmdCBpcyAwLCAwKQogKiB3aXRoIHRoZSBnaXZlbiBjb2xvciBpbiB0aGUKICogaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiBzdGFydCBwb2ludC4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUgb2Ygc3RhcnQgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsKCRpbWFnZSwgaW50ICR4LCBpbnQgJHksIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsKCRpbWFnZSwgJHgsICR5LCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcGFydGlhbCBhcmMgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlIGluIHRoZQogKiBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGFyYyB3aWR0aC4KICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBhcmMgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRzdGFydCBUaGUgYXJjIHN0YXJ0IGFuZ2xlLCBpbiBkZWdyZWVzLgogKiBAcGFyYW0gaW50ICRlbmQgVGhlIGFyYyBlbmQgYW5nbGUsIGluIGRlZ3JlZXMuCiAqIDDCsCBpcyBsb2NhdGVkIGF0IHRoZSB0aHJlZS1vJ2Nsb2NrIHBvc2l0aW9uLCBhbmQgdGhlIGFyYyBpcyBkcmF3bgogKiBjbG9ja3dpc2UuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAcGFyYW0gaW50ICRzdHlsZSBBIGJpdHdpc2UgT1Igb2YgdGhlIGZvbGxvd2luZyBwb3NzaWJpbGl0aWVzOgogKgogKiBJTUdfQVJDX1BJRQogKiBJTUdfQVJDX0NIT1JECiAqIElNR19BUkNfTk9GSUxMCiAqIElNR19BUkNfRURHRUQKICoKICogSU1HX0FSQ19QSUUgYW5kIElNR19BUkNfQ0hPUkQgYXJlCiAqIG11dHVhbGx5IGV4Y2x1c2l2ZTsgSU1HX0FSQ19DSE9SRCBqdXN0CiAqIGNvbm5lY3RzIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGFuZ2xlcyB3aXRoIGEgc3RyYWlnaHQgbGluZSwgd2hpbGUKICogSU1HX0FSQ19QSUUgcHJvZHVjZXMgYSByb3VuZGVkIGVkZ2UuCiAqIElNR19BUkNfTk9GSUxMIGluZGljYXRlcyB0aGF0IHRoZSBhcmMKICogb3IgY2hvcmQgc2hvdWxkIGJlIG91dGxpbmVkLCBub3QgZmlsbGVkLiAgSU1HX0FSQ19FREdFRCwKICogdXNlZCB0b2dldGhlciB3aXRoIElNR19BUkNfTk9GSUxMLCBpbmRpY2F0ZXMgdGhhdCB0aGUKICogYmVnaW5uaW5nIGFuZCBlbmRpbmcgYW5nbGVzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGNlbnRlciAtIHRoaXMgaXMgYQogKiBnb29kIHdheSB0byBvdXRsaW5lIChyYXRoZXIgdGhhbiBmaWxsKSBhICdwaWUgc2xpY2UnLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGxlZGFyYygkaW1hZ2UsIGludCAkY3gsIGludCAkY3ksIGludCAkd2lkdGgsIGludCAkaGVpZ2h0LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgaW50ICRjb2xvciwgaW50ICRzdHlsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZpbGxlZGFyYygkaW1hZ2UsICRjeCwgJGN5LCAkd2lkdGgsICRoZWlnaHQsICRzdGFydCwgJGVuZCwgJGNvbG9yLCAkc3R5bGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGFuIGVsbGlwc2UgY2VudGVyZWQgYXQgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlIG9uIHRoZSBnaXZlbgogKiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGN4IHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyLgogKiBAcGFyYW0gaW50ICRjeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KICogQHBhcmFtIGludCAkd2lkdGggVGhlIGVsbGlwc2Ugd2lkdGguCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBUaGUgZWxsaXBzZSBoZWlnaHQuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsZWRlbGxpcHNlKCRpbWFnZSwgaW50ICRjeCwgaW50ICRjeSwgaW50ICR3aWR0aCwgaW50ICRoZWlnaHQsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsZWRlbGxpcHNlKCRpbWFnZSwgJGN4LCAkY3ksICR3aWR0aCwgJGhlaWdodCwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWZpbGxlZHBvbHlnb24gY3JlYXRlcyBhIGZpbGxlZCBwb2x5Z29uCiAqIGluIHRoZSBnaXZlbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBhcnJheSAkcG9pbnRzIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHggYW5kIHkKICogY29vcmRpbmF0ZXMgb2YgdGhlIHBvbHlnb25zIHZlcnRpY2VzIGNvbnNlY3V0aXZlbHkuCiAqIEBwYXJhbSBpbnQgJG51bV9wb2ludHMgVG90YWwgbnVtYmVyIG9mIHBvaW50cyAodmVydGljZXMpLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IDMuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGxlZHBvbHlnb24oJGltYWdlLCBhcnJheSAkcG9pbnRzLCBpbnQgJG51bV9wb2ludHMsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VmaWxsZWRwb2x5Z29uKCRpbWFnZSwgJHBvaW50cywgJG51bV9wb2ludHMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIHJlY3RhbmdsZSBmaWxsZWQgd2l0aCBjb2xvciBpbiB0aGUgZ2l2ZW4KICogaW1hZ2Ugc3RhcnRpbmcgYXQgcG9pbnQgMSBhbmQgZW5kaW5nIGF0IHBvaW50IDIuCiAqIDAsIDAgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4MSB4LWNvb3JkaW5hdGUgZm9yIHBvaW50IDEuCiAqIEBwYXJhbSBpbnQgJHkxIHktY29vcmRpbmF0ZSBmb3IgcG9pbnQgMS4KICogQHBhcmFtIGludCAkeDIgeC1jb29yZGluYXRlIGZvciBwb2ludCAyLgogKiBAcGFyYW0gaW50ICR5MiB5LWNvb3JkaW5hdGUgZm9yIHBvaW50IDIuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBmaWxsIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZmlsbGVkcmVjdGFuZ2xlKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlZmlsbHRvYm9yZGVyIHBlcmZvcm1zIGEgZmxvb2QgZmlsbAogKiB3aG9zZSBib3JkZXIgY29sb3IgaXMgZGVmaW5lZCBieSBib3JkZXIuCiAqIFRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGZpbGwgaXMgeCwKICogeSAodG9wIGxlZnQgaXMgMCwgMCkgYW5kIHRoZSByZWdpb24gaXMKICogZmlsbGVkIHdpdGggY29sb3IgY29sb3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiBzdGFydC4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUgb2Ygc3RhcnQuCiAqIEBwYXJhbSBpbnQgJGJvcmRlciBUaGUgYm9yZGVyIGNvbG9yLiBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHBhcmFtIGludCAkY29sb3IgVGhlIGZpbGwgY29sb3IuIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbGx0b2JvcmRlcigkaW1hZ2UsIGludCAkeCwgaW50ICR5LCBpbnQgJGJvcmRlciwgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZpbGx0b2JvcmRlcigkaW1hZ2UsICR4LCAkeSwgJGJvcmRlciwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWZpbHRlciBhcHBsaWVzIHRoZSBnaXZlbiBmaWx0ZXIKICogZmlsdGVydHlwZSBvbiB0aGUgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRmaWx0ZXJ0eXBlIGZpbHRlcnR5cGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBJTUdfRklMVEVSX05FR0FURTogUmV2ZXJzZXMgYWxsIGNvbG9ycyBvZgogKiB0aGUgaW1hZ2UuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfR1JBWVNDQUxFOiBDb252ZXJ0cyB0aGUgaW1hZ2UgaW50bwogKiBncmF5c2NhbGUgYnkgY2hhbmdpbmcgdGhlIHJlZCwgZ3JlZW4gYW5kIGJsdWUgY29tcG9uZW50cyB0byB0aGVpcgogKiB3ZWlnaHRlZCBzdW0gdXNpbmcgdGhlIHNhbWUgY29lZmZpY2llbnRzIGFzIHRoZSBSRUMuNjAxIGx1bWEgKFknKQogKiBjYWxjdWxhdGlvbi4gVGhlIGFscGhhIGNvbXBvbmVudHMgYXJlIHJldGFpbmVkLiBGb3IgcGFsZXR0ZSBpbWFnZXMgdGhlCiAqIHJlc3VsdCBtYXkgZGlmZmVyIGR1ZSB0byBwYWxldHRlIGxpbWl0YXRpb25zLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX0JSSUdIVE5FU1M6IENoYW5nZXMgdGhlIGJyaWdodG5lc3MKICogb2YgdGhlIGltYWdlLiBVc2UgYXJnMSB0byBzZXQgdGhlIGxldmVsIG9mCiAqIGJyaWdodG5lc3MuIFRoZSByYW5nZSBmb3IgdGhlIGJyaWdodG5lc3MgaXMgLTI1NSB0byAyNTUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfQ09OVFJBU1Q6IENoYW5nZXMgdGhlIGNvbnRyYXN0IG9mCiAqIHRoZSBpbWFnZS4gVXNlIGFyZzEgdG8gc2V0IHRoZSBsZXZlbCBvZgogKiBjb250cmFzdC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9DT0xPUklaRTogTGlrZQogKiBJTUdfRklMVEVSX0dSQVlTQ0FMRSwgZXhjZXB0IHlvdSBjYW4gc3BlY2lmeSB0aGUKICogY29sb3IuIFVzZSBhcmcxLCBhcmcyIGFuZAogKiBhcmczIGluIHRoZSBmb3JtIG9mCiAqIHJlZCwgZ3JlZW4sCiAqIGJsdWUgYW5kIGFyZzQgZm9yIHRoZQogKiBhbHBoYSBjaGFubmVsLiBUaGUgcmFuZ2UgZm9yIGVhY2ggY29sb3IgaXMgMCB0byAyNTUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfRURHRURFVEVDVDogVXNlcyBlZGdlIGRldGVjdGlvbiB0bwogKiBoaWdobGlnaHQgdGhlIGVkZ2VzIGluIHRoZSBpbWFnZS4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9FTUJPU1M6IEVtYm9zc2VzIHRoZSBpbWFnZS4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9HQVVTU0lBTl9CTFVSOiBCbHVycyB0aGUgaW1hZ2UgdXNpbmcKICogdGhlIEdhdXNzaWFuIG1ldGhvZC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TRUxFQ1RJVkVfQkxVUjogQmx1cnMgdGhlIGltYWdlLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX01FQU5fUkVNT1ZBTDogVXNlcyBtZWFuIHJlbW92YWwgdG8KICogYWNoaWV2ZSBhICJza2V0Y2h5IiBlZmZlY3QuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU01PT1RIOiBNYWtlcyB0aGUgaW1hZ2Ugc21vb3RoZXIuCiAqIFVzZSBhcmcxIHRvIHNldCB0aGUgbGV2ZWwgb2Ygc21vb3RobmVzcy4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9QSVhFTEFURTogQXBwbGllcyBwaXhlbGF0aW9uIGVmZmVjdAogKiB0byB0aGUgaW1hZ2UsIHVzZSBhcmcxIHRvIHNldCB0aGUgYmxvY2sgc2l6ZQogKiBhbmQgYXJnMiB0byBzZXQgdGhlIHBpeGVsYXRpb24gZWZmZWN0IG1vZGUuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU0NBVFRFUjogQXBwbGllcyBzY2F0dGVyIGVmZmVjdAogKiB0byB0aGUgaW1hZ2UsIHVzZSBhcmcxIGFuZAogKiBhcmcyIHRvIGRlZmluZSB0aGUgZWZmZWN0IHN0cmVuZ3RoIGFuZAogKiBhZGRpdGlvbmFsbHkgYXJnMyB0byBvbmx5IGFwcGx5IHRoZQogKiBvbiBzZWxlY3QgcGl4ZWwgY29sb3JzLgogKgogKgogKgogKiBAcGFyYW0gaW50ICRhcmcxCiAqCiAqCiAqIElNR19GSUxURVJfQlJJR0hUTkVTUzogQnJpZ2h0bmVzcyBsZXZlbC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9DT05UUkFTVDogQ29udHJhc3QgbGV2ZWwuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfQ09MT1JJWkU6IFZhbHVlIG9mIHJlZCBjb21wb25lbnQuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfU01PT1RIOiBTbW9vdGhuZXNzIGxldmVsLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX1BJWEVMQVRFOiBCbG9jayBzaXplIGluIHBpeGVscy4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TQ0FUVEVSOiBFZmZlY3Qgc3Vic3RyYWN0aW9uIGxldmVsLgogKiBUaGlzIG11c3Qgbm90IGJlIGhpZ2hlciBvciBlcXVhbCB0byB0aGUgYWRkaXRpb24gbGV2ZWwgc2V0IHdpdGgKICogYXJnMi4KICoKICoKICoKICogQHBhcmFtIGludCAkYXJnMgogKgogKgogKiBJTUdfRklMVEVSX0NPTE9SSVpFOiBWYWx1ZSBvZiBncmVlbiBjb21wb25lbnQuCiAqCiAqCiAqCiAqCiAqIElNR19GSUxURVJfUElYRUxBVEU6IFdoZXRoZXIgdG8gdXNlIGFkdmFuY2VkIHBpeGVsYXRpb24KICogZWZmZWN0IG9yIG5vdCAoZGVmYXVsdHMgdG8gRkFMU0UpLgogKgogKgogKgogKgogKiBJTUdfRklMVEVSX1NDQVRURVI6IEVmZmVjdCBhZGRpdGlvbiBsZXZlbC4KICoKICoKICoKICogQHBhcmFtIGludCAkYXJnMwogKgogKgogKiBJTUdfRklMVEVSX0NPTE9SSVpFOiBWYWx1ZSBvZiBibHVlIGNvbXBvbmVudC4KICoKICoKICoKICoKICogSU1HX0ZJTFRFUl9TQ0FUVEVSOiBPcHRpb25hbCBhcnJheSBpbmRleGVkIGNvbG9yIHZhbHVlcwogKiB0byBhcHBseSBlZmZlY3QgYXQuCiAqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGFyZzQKICoKICoKICogSU1HX0ZJTFRFUl9DT0xPUklaRTogQWxwaGEgY2hhbm5lbCwgQSB2YWx1ZQogKiBiZXR3ZWVuIDAgYW5kIDEyNy4gMCBpbmRpY2F0ZXMgY29tcGxldGVseSBvcGFxdWUgd2hpbGUgMTI3IGluZGljYXRlcwogKiBjb21wbGV0ZWx5IHRyYW5zcGFyZW50LgogKgogKgogKgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWZpbHRlcigkaW1hZ2UsIGludCAkZmlsdGVydHlwZSwgaW50ICRhcmcxID0gbnVsbCwgaW50ICRhcmcyID0gbnVsbCwgaW50ICRhcmczID0gbnVsbCwgaW50ICRhcmc0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmc0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSwgJGFyZzIsICRhcmczLCAkYXJnNCk7CiAgICB9IGVsc2VpZiAoJGFyZzMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdlZmlsdGVyKCRpbWFnZSwgJGZpbHRlcnR5cGUsICRhcmcxLCAkYXJnMiwgJGFyZzMpOwogICAgfSBlbHNlaWYgKCRhcmcyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSwgJGFyZzIpOwogICAgfSBlbHNlaWYgKCRhcmcxICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZWZpbHRlcigkaW1hZ2UsICRmaWx0ZXJ0eXBlLCAkYXJnMSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcaW1hZ2VmaWx0ZXIoJGltYWdlLCAkZmlsdGVydHlwZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmxpcHMgdGhlIGltYWdlIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkbW9kZSBGbGlwIG1vZGUsIHRoaXMgY2FuIGJlIG9uZSBvZiB0aGUgSU1HX0ZMSVBfKiBjb25zdGFudHM6CiAqCiAqCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIE1lYW5pbmcKICoKICoKICoKICoKICogSU1HX0ZMSVBfSE9SSVpPTlRBTAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5LgogKgogKgogKgogKiBJTUdfRkxJUF9WRVJUSUNBTAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgdmVydGljYWxseS4KICoKICoKICoKICogSU1HX0ZMSVBfQk9USAogKgogKiBGbGlwcyB0aGUgaW1hZ2UgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZmxpcCgkaW1hZ2UsIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWZsaXAoJGltYWdlLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXBwbGllcyBnYW1tYSBjb3JyZWN0aW9uIHRvIHRoZSBnaXZlbiBnZCBpbWFnZQogKiBnaXZlbiBhbiBpbnB1dCBhbmQgYW4gb3V0cHV0IGdhbW1hLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGZsb2F0ICRpbnB1dGdhbW1hIFRoZSBpbnB1dCBnYW1tYS4KICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYSBUaGUgb3V0cHV0IGdhbW1hLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWdhbW1hY29ycmVjdCgkaW1hZ2UsIGZsb2F0ICRpbnB1dGdhbW1hLCBmbG9hdCAkb3V0cHV0Z2FtbWEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VnYW1tYWNvcnJlY3QoJGltYWdlLCAkaW5wdXRnYW1tYSwgJG91dHB1dGdhbW1hKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgR0QgaW1hZ2UgdG8gdGhlIGdpdmVuIHRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWdkKCRpbWFnZSwgJHRvID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdkKCRpbWFnZSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgR0QyIGltYWdlIHRvIHRoZSBnaXZlbiB0by4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICogQHBhcmFtIGludCAkY2h1bmtfc2l6ZSBDaHVuayBzaXplLgogKiBAcGFyYW0gaW50ICR0eXBlIEVpdGhlciBJTUdfR0QyX1JBVyBvcgogKiBJTUdfR0QyX0NPTVBSRVNTRUQuIERlZmF1bHQgaXMKICogSU1HX0dEMl9SQVcuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZ2QyKCRpbWFnZSwgJHRvID0gbnVsbCwgaW50ICRjaHVua19zaXplID0gMTI4LCBpbnQgJHR5cGUgPSBJTUdfR0QyX1JBVyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdkMigkaW1hZ2UsICR0bywgJGNodW5rX3NpemUsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZWdpZiBjcmVhdGVzIHRoZSBHSUYKICogZmlsZSBpbiB0byBmcm9tIHRoZSBpbWFnZSBpbWFnZS4gVGhlCiAqIGltYWdlIGFyZ3VtZW50IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUKICogaW1hZ2VjcmVhdGUgb3IgaW1hZ2VjcmVhdGVmcm9tKgogKiBmdW5jdGlvbi4KICoKICogVGhlIGltYWdlIGZvcm1hdCB3aWxsIGJlIEdJRjg3YSB1bmxlc3MgdGhlCiAqIGltYWdlIGhhcyBiZWVuIG1hZGUgdHJhbnNwYXJlbnQgd2l0aAogKiBpbWFnZWNvbG9ydHJhbnNwYXJlbnQsIGluIHdoaWNoIGNhc2UgdGhlCiAqIGltYWdlIGZvcm1hdCB3aWxsIGJlIEdJRjg5YS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VnaWYoJGltYWdlLCAkdG8gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZ2lmKCRpbWFnZSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHcmFicyBhIHNjcmVlbnNob3Qgb2YgdGhlIHdob2xlIHNjcmVlbi4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIGltYWdlIHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VncmFic2NyZWVuKCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZWdyYWJzY3JlZW4oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdyYWJzIGEgd2luZG93IG9yIGl0cyBjbGllbnQgYXJlYSB1c2luZyBhIHdpbmRvd3MgaGFuZGxlIChIV05EIHByb3BlcnR5IGluIENPTSBpbnN0YW5jZSkKICoKICogQHBhcmFtIGludCAkd2luZG93X2hhbmRsZSBUaGUgSFdORCB3aW5kb3cgSUQuCiAqIEBwYXJhbSBpbnQgJGNsaWVudF9hcmVhIEluY2x1ZGUgdGhlIGNsaWVudCBhcmVhIG9mIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3cuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlZ3JhYndpbmRvdyhpbnQgJHdpbmRvd19oYW5kbGUsIGludCAkY2xpZW50X2FyZWEgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlZ3JhYndpbmRvdygkd2luZG93X2hhbmRsZSwgJGNsaWVudF9hcmVhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdlanBlZyBjcmVhdGVzIGEgSlBFRyBmaWxlIGZyb20KICogdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAcGFyYW0gaW50ICRxdWFsaXR5IHF1YWxpdHkgaXMgb3B0aW9uYWwsIGFuZCByYW5nZXMgZnJvbSAwICh3b3JzdAogKiBxdWFsaXR5LCBzbWFsbGVyIGZpbGUpIHRvIDEwMCAoYmVzdCBxdWFsaXR5LCBiaWdnZXN0IGZpbGUpLiBUaGUKICogZGVmYXVsdCAoLTEpIHVzZXMgdGhlIGRlZmF1bHQgSUpHIHF1YWxpdHkgdmFsdWUgKGFib3V0IDc1KS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VqcGVnKCRpbWFnZSwgJHRvID0gbnVsbCwgaW50ICRxdWFsaXR5ID0gLTEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VqcGVnKCRpbWFnZSwgJHRvLCAkcXVhbGl0eSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0IHRoZSBhbHBoYSBibGVuZGluZyBmbGFnIHRvIHVzZSBsYXllcmluZyBlZmZlY3RzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkZWZmZWN0IE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICoKICogSU1HX0VGRkVDVF9SRVBMQUNFCiAqCiAqCiAqIFVzZSBwaXhlbCByZXBsYWNlbWVudCAoZXF1aXZhbGVudCBvZiBwYXNzaW5nIFRSVUUgdG8KICogaW1hZ2VhbHBoYWJsZW5kaW5nKQogKgogKgogKgogKgogKiBJTUdfRUZGRUNUX0FMUEhBQkxFTkQKICoKICoKICogVXNlIG5vcm1hbCBwaXhlbCBibGVuZGluZyAoZXF1aXZhbGVudCBvZiBwYXNzaW5nIEZBTFNFIHRvCiAqIGltYWdlYWxwaGFibGVuZGluZykKICoKICoKICoKICoKICogSU1HX0VGRkVDVF9OT1JNQUwKICoKICoKICogU2FtZSBhcyBJTUdfRUZGRUNUX0FMUEhBQkxFTkQuCiAqCiAqCiAqCiAqCiAqIElNR19FRkZFQ1RfT1ZFUkxBWQogKgogKgogKiBPdmVybGF5IGhhcyB0aGUgZWZmZWN0IHRoYXQgYmxhY2sgYmFja2dyb3VuZCBwaXhlbHMgd2lsbCByZW1haW4KICogYmxhY2ssIHdoaXRlIGJhY2tncm91bmQgcGl4ZWxzIHdpbGwgcmVtYWluIHdoaXRlLCBidXQgZ3JleQogKiBiYWNrZ3JvdW5kIHBpeGVscyB3aWxsIHRha2UgdGhlIGNvbG91ciBvZiB0aGUgZm9yZWdyb3VuZCBwaXhlbC4KICoKICoKICoKICoKICogSU1HX0VGRkVDVF9NVUxUSVBMWQogKgogKgogKiBPdmVybGF5cyB3aXRoIGEgbXVsdGlwbHkgZWZmZWN0LgogKgogKgogKgogKgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWxheWVyZWZmZWN0KCRpbWFnZSwgaW50ICRlZmZlY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VsYXllcmVmZmVjdCgkaW1hZ2UsICRlZmZlY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgbGluZSBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gcG9pbnRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkeDEgeC1jb29yZGluYXRlIGZvciBmaXJzdCBwb2ludC4KICogQHBhcmFtIGludCAkeTEgeS1jb29yZGluYXRlIGZvciBmaXJzdCBwb2ludC4KICogQHBhcmFtIGludCAkeDIgeC1jb29yZGluYXRlIGZvciBzZWNvbmQgcG9pbnQuCiAqIEBwYXJhbSBpbnQgJHkyIHktY29vcmRpbmF0ZSBmb3Igc2Vjb25kIHBvaW50LgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgbGluZSBjb2xvci4gQSBjb2xvciBpZGVudGlmaWVyIGNyZWF0ZWQgd2l0aCBpbWFnZWNvbG9yYWxsb2NhdGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlbGluZSgkaW1hZ2UsIGludCAkeDEsIGludCAkeTEsIGludCAkeDIsIGludCAkeTIsIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VsaW5lKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlbG9hZGZvbnQgbG9hZHMgYSB1c2VyLWRlZmluZWQgYml0bWFwIGFuZCByZXR1cm5zCiAqIGl0cyBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBmb250IGZpbGUgZm9ybWF0IGlzIGN1cnJlbnRseSBiaW5hcnkgYW5kIGFyY2hpdGVjdHVyZQogKiBkZXBlbmRlbnQuICBUaGlzIG1lYW5zIHlvdSBzaG91bGQgZ2VuZXJhdGUgdGhlIGZvbnQgZmlsZXMgb24gdGhlCiAqIHNhbWUgdHlwZSBvZiBDUFUgYXMgdGhlIG1hY2hpbmUgeW91IGFyZSBydW5uaW5nIFBIUCBvbi4KICoKICoKICogRm9udCBmaWxlIGZvcm1hdAogKgogKgogKgogKiBieXRlIHBvc2l0aW9uCiAqIEMgZGF0YSB0eXBlCiAqIGRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIGJ5dGUgMC0zCiAqIGludAogKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZm9udAogKgogKgogKiBieXRlIDQtNwogKiBpbnQKICoKICogdmFsdWUgb2YgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBmb250IChvZnRlbiAzMiBmb3Igc3BhY2UpCiAqCiAqCiAqCiAqIGJ5dGUgOC0xMQogKiBpbnQKICogcGl4ZWwgd2lkdGggb2YgZWFjaCBjaGFyYWN0ZXIKICoKICoKICogYnl0ZSAxMi0xNQogKiBpbnQKICogcGl4ZWwgaGVpZ2h0IG9mIGVhY2ggY2hhcmFjdGVyCiAqCiAqCiAqIGJ5dGUgMTYtCiAqIGNoYXIKICoKICogYXJyYXkgd2l0aCBjaGFyYWN0ZXIgZGF0YSwgb25lIGJ5dGUgcGVyIHBpeGVsIGluIGVhY2gKICogY2hhcmFjdGVyLCBmb3IgYSB0b3RhbCBvZiAobmNoYXJzKndpZHRoKmhlaWdodCkgYnl0ZXMuCiAqCiAqCiAqCiAqCiAqCiAqIEByZXR1cm4gaW50IFRoZSBmb250IGlkZW50aWZpZXIgd2hpY2ggaXMgYWx3YXlzIGJpZ2dlciB0aGFuIDUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgKICogYnVpbHQtaW4gZm9udHNzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZWxvYWRmb250KHN0cmluZyAkZmlsZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlbG9hZGZvbnQoJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogaW1hZ2VvcGVucG9seWdvbiBkcmF3cyBhbiBvcGVuIHBvbHlnb24gb24gdGhlIGdpdmVuCiAqIGltYWdlLiBDb250cmFyeSB0byBpbWFnZXBvbHlnb24sCiAqIG5vIGxpbmUgaXMgZHJhd24gYmV0d2VlbiB0aGUgbGFzdCBhbmQgdGhlIGZpcnN0IHBvaW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRwb2ludHMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcG9seWdvbidzIHZlcnRpY2VzLCBlLmcuOgogKgogKgogKgogKgogKiBwb2ludHNbMF0KICogPSB4MAogKgogKgogKiBwb2ludHNbMV0KICogPSB5MAogKgogKgogKiBwb2ludHNbMl0KICogPSB4MQogKgogKgogKiBwb2ludHNbM10KICogPSB5MQogKgogKgogKgogKgogKiBAcGFyYW0gaW50ICRudW1fcG9pbnRzIFRvdGFsIG51bWJlciBvZiBwb2ludHMgKHZlcnRpY2VzKSwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAzLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VvcGVucG9seWdvbigkaW1hZ2UsIGFycmF5ICRwb2ludHMsIGludCAkbnVtX3BvaW50cywgaW50ICRjb2xvcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZW9wZW5wb2x5Z29uKCRpbWFnZSwgJHBvaW50cywgJG51bV9wb2ludHMsICRjb2xvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0cyBvciBzYXZlcyBhIFBORyBpbWFnZSBmcm9tIHRoZSBnaXZlbgogKiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBtaXhlZCAkdG8gVGhlIHBhdGggb3IgYW4gb3BlbiBzdHJlYW0gcmVzb3VyY2UgKHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYmVpbmcgY2xvc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucykgdG8gc2F2ZSB0aGUgZmlsZSB0by4gSWYgbm90IHNldCBvciBOVUxMLCB0aGUgcmF3IGltYWdlIHN0cmVhbSB3aWxsIGJlIG91dHB1dHRlZCBkaXJlY3RseS4KICoKICogTlVMTCBpcyBpbnZhbGlkIGlmIHRoZSBxdWFsaXR5IGFuZAogKiBmaWx0ZXJzIGFyZ3VtZW50cyBhcmUgbm90IHVzZWQuCiAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgQ29tcHJlc3Npb24gbGV2ZWw6IGZyb20gMCAobm8gY29tcHJlc3Npb24pIHRvIDkuCiAqIFRoZSBkZWZhdWx0ICgtMSkgdXNlcyB0aGUgemxpYiBjb21wcmVzc2lvbiBkZWZhdWx0LgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIHpsaWIgbWFudWFsLgogKiBAcGFyYW0gaW50ICRmaWx0ZXJzIEFsbG93cyByZWR1Y2luZyB0aGUgUE5HIGZpbGUgc2l6ZS4gSXQgaXMgYSBiaXRtYXNrIGZpZWxkIHdoaWNoIG1heSBiZQogKiBzZXQgdG8gYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBQTkdfRklMVEVSX1hYWAogKiBjb25zdGFudHMuIFBOR19OT19GSUxURVIgb3IKICogUE5HX0FMTF9GSUxURVJTIG1heSBhbHNvIGJlIHVzZWQgdG8gcmVzcGVjdGl2ZWx5CiAqIGRpc2FibGUgb3IgYWN0aXZhdGUgYWxsIGZpbHRlcnMuCiAqIFRoZSBkZWZhdWx0IHZhbHVlICgtMSkgZGlzYWJsZXMgZmlsdGVyaW5nLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXBuZygkaW1hZ2UsICR0byA9IG51bGwsIGludCAkcXVhbGl0eSA9IC0xLCBpbnQgJGZpbHRlcnMgPSAtMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXBuZygkaW1hZ2UsICR0bywgJHF1YWxpdHksICRmaWx0ZXJzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZXBvbHlnb24gY3JlYXRlcyBhIHBvbHlnb24gaW4gdGhlIGdpdmVuCiAqIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGFycmF5ICRwb2ludHMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcG9seWdvbidzIHZlcnRpY2VzLCBlLmcuOgogKgogKgogKgogKgogKiBwb2ludHNbMF0KICogPSB4MAogKgogKgogKiBwb2ludHNbMV0KICogPSB5MAogKgogKgogKiBwb2ludHNbMl0KICogPSB4MQogKgogKgogKiBwb2ludHNbM10KICogPSB5MQogKgogKgogKgogKgogKiBAcGFyYW0gaW50ICRudW1fcG9pbnRzIFRvdGFsIG51bWJlciBvZiBwb2ludHMgKHZlcnRpY2VzKSwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCAzLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2Vwb2x5Z29uKCRpbWFnZSwgYXJyYXkgJHBvaW50cywgaW50ICRudW1fcG9pbnRzLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlcG9seWdvbigkaW1hZ2UsICRwb2ludHMsICRudW1fcG9pbnRzLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlcmVjdGFuZ2xlIGNyZWF0ZXMgYSByZWN0YW5nbGUgc3RhcnRpbmcgYXQKICogdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHgxIFVwcGVyIGxlZnQgeCBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICR5MSBVcHBlciBsZWZ0IHkgY29vcmRpbmF0ZQogKiAwLCAwIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLgogKiBAcGFyYW0gaW50ICR4MiBCb3R0b20gcmlnaHQgeCBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICR5MiBCb3R0b20gcmlnaHQgeSBjb29yZGluYXRlLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VyZWN0YW5nbGUoJGltYWdlLCBpbnQgJHgxLCBpbnQgJHkxLCBpbnQgJHgyLCBpbnQgJHkyLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlcmVjdGFuZ2xlKCRpbWFnZSwgJHgxLCAkeTEsICR4MiwgJHkyLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvdGF0ZXMgdGhlIGltYWdlIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBhbmdsZSBpbiBkZWdyZWVzLgogKgogKiBUaGUgY2VudGVyIG9mIHJvdGF0aW9uIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGltYWdlLCBhbmQgdGhlIHJvdGF0ZWQKICogaW1hZ2UgbWF5IGhhdmUgZGlmZmVyZW50IGRpbWVuc2lvbnMgdGhhbiB0aGUgb3JpZ2luYWwgaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIFJvdGF0aW9uIGFuZ2xlLCBpbiBkZWdyZWVzLiBUaGUgcm90YXRpb24gYW5nbGUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAqIG51bWJlciBvZiBkZWdyZWVzIHRvIHJvdGF0ZSB0aGUgaW1hZ2UgYW50aWNsb2Nrd2lzZS4KICogQHBhcmFtIGludCAkYmdkX2NvbG9yIFNwZWNpZmllcyB0aGUgY29sb3Igb2YgdGhlIHVuY292ZXJlZCB6b25lIGFmdGVyIHRoZSByb3RhdGlvbgogKiBAcGFyYW0gaW50ICRkdW1teSBUaGlzIHBhcmFtZXRlciBpcyB1bnVzZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBpbWFnZSByZXNvdXJjZSBmb3IgdGhlIHJvdGF0ZWQgaW1hZ2UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlcm90YXRlKCRpbWFnZSwgZmxvYXQgJGFuZ2xlLCBpbnQgJGJnZF9jb2xvciwgaW50ICRkdW1teSA9IDApCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2Vyb3RhdGUoJGltYWdlLCAkYW5nbGUsICRiZ2RfY29sb3IsICRkdW1teSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXNhdmVhbHBoYSBzZXRzIHRoZSBmbGFnIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0byByZXRhaW4KICogZnVsbCBhbHBoYSBjaGFubmVsIGluZm9ybWF0aW9uIChhcyBvcHBvc2VkIHRvIHNpbmdsZS1jb2xvciB0cmFuc3BhcmVuY3kpCiAqIHdoZW4gc2F2aW5nIFBORyBpbWFnZXMuCiAqCiAqIEFscGhhYmxlbmRpbmcgaGFzIHRvIGJlIGRpc2FibGVkIChpbWFnZWFscGhhYmxlbmRpbmcoJGltLCBmYWxzZSkpCiAqIHRvIHJldGFpbiB0aGUgYWxwaGEtY2hhbm5lbCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYm9vbCAkc2F2ZWZsYWcgV2hldGhlciB0byBzYXZlIHRoZSBhbHBoYSBjaGFubmVsIG9yIG5vdC4gRGVmYXVsdHMgdG8gRkFMU0UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2F2ZWFscGhhKCRpbWFnZSwgYm9vbCAkc2F2ZWZsYWcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzYXZlYWxwaGEoJGltYWdlLCAkc2F2ZWZsYWcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2NhbGUgc2NhbGVzIGFuIGltYWdlIHVzaW5nIHRoZSBnaXZlbgogKiBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJG5ld193aWR0aCBUaGUgd2lkdGggdG8gc2NhbGUgdGhlIGltYWdlIHRvLgogKiBAcGFyYW0gaW50ICRuZXdfaGVpZ2h0IFRoZSBoZWlnaHQgdG8gc2NhbGUgdGhlIGltYWdlIHRvLiBJZiBvbWl0dGVkIG9yIG5lZ2F0aXZlLCB0aGUgYXNwZWN0CiAqIHJhdGlvIHdpbGwgYmUgcHJlc2VydmVkLgogKiBAcGFyYW0gaW50ICRtb2RlIE9uZSBvZiBJTUdfTkVBUkVTVF9ORUlHSEJPVVIsCiAqIElNR19CSUxJTkVBUl9GSVhFRCwKICogSU1HX0JJQ1VCSUMsCiAqIElNR19CSUNVQklDX0ZJWEVEIG9yIGFueXRoaW5nIGVsc2UgKHdpbGwgdXNlIHR3bwogKiBwYXNzKS4KICoKICoKICogSU1HX1dFSUdIVEVENCBpcyBub3QgeWV0IHN1cHBvcnRlZC4KICoKICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm4gdGhlIHNjYWxlZCBpbWFnZSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNjYWxlKCRpbWFnZSwgaW50ICRuZXdfd2lkdGgsIGludCAkbmV3X2hlaWdodCA9IC0xLCBpbnQgJG1vZGUgPSBJTUdfQklMSU5FQVJfRklYRUQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzY2FsZSgkaW1hZ2UsICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0LCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXNldGJydXNoIHNldHMgdGhlIGJydXNoIGltYWdlIHRvIGJlCiAqIHVzZWQgYnkgYWxsIGxpbmUgZHJhd2luZyBmdW5jdGlvbnMgKHN1Y2ggYXMgaW1hZ2VsaW5lCiAqIGFuZCBpbWFnZXBvbHlnb24pIHdoZW4gZHJhd2luZyB3aXRoIHRoZSBzcGVjaWFsCiAqIGNvbG9ycyBJTUdfQ09MT1JfQlJVU0hFRCBvcgogKiBJTUdfQ09MT1JfU1RZTEVEQlJVU0hFRC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSByZXNvdXJjZSAkYnJ1c2ggQW4gaW1hZ2UgcmVzb3VyY2UuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0YnJ1c2goJGltYWdlLCAkYnJ1c2gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRicnVzaCgkaW1hZ2UsICRicnVzaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW1hZ2VzZXRjbGlwIHNldHMgdGhlIGN1cnJlbnQgY2xpcHBpbmcgcmVjdGFuZ2xlLCBpLmUuCiAqIHRoZSBhcmVhIGJleW9uZCB3aGljaCBubyBwaXhlbHMgd2lsbCBiZSBkcmF3bi4KICoKICogQHBhcmFtIHJlc291cmNlICRpbSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHgxIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5MSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGludCAkeDIgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5MiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciByaWdodCBjb3JuZXIuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0Y2xpcCgkaW0sIGludCAkeDEsIGludCAkeTEsIGludCAkeDIsIGludCAkeTIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRjbGlwKCRpbSwgJHgxLCAkeTEsICR4MiwgJHkyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBpbnRlcnBvbGF0aW9uIG1ldGhvZCwgc2V0dGluZyBhbiBpbnRlcnBvbGF0aW9uIG1ldGhvZCBhZmZlY3RzIHRoZSByZW5kZXJpbmcKICogb2YgdmFyaW91cyBmdW5jdGlvbnMgaW4gR0QsIHN1Y2ggYXMgdGhlIGltYWdlcm90YXRlIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIGludCAkbWV0aG9kIFRoZSBpbnRlcnBvbGF0aW9uIG1ldGhvZCwgd2hpY2ggY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBJTUdfQkVMTDogQmVsbCBmaWx0ZXIuCiAqCiAqCiAqCiAqCiAqIElNR19CRVNTRUw6IEJlc3NlbCBmaWx0ZXIuCiAqCiAqCiAqCiAqCiAqIElNR19CSUNVQklDOiBCaWN1YmljIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19CSUNVQklDX0ZJWEVEOiBGaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmljdWJpYyBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfQklMSU5FQVJfRklYRUQ6IEZpeGVkIHBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSAgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiAoZGVmYXVsdCAoYWxzbyBvbiBpbWFnZSBjcmVhdGlvbikpLgogKgogKgogKgogKgogKiBJTUdfQkxBQ0tNQU46IEJsYWNrbWFuIHdpbmRvdyBmdW5jdGlvbi4KICoKICoKICoKICoKICogSU1HX0JPWDogQm94IGJsdXIgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfQlNQTElORTogU3BsaW5lIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19DQVRNVUxMUk9NOiBDdWJpYyBIZXJtaXRlIHNwbGluZSBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfR0FVU1NJQU46IEdhdXNzaWFuIGZ1bmN0aW9uLgogKgogKgogKgogKgogKiBJTUdfR0VORVJBTElaRURfQ1VCSUM6IEdlbmVyYWxpemVkIGN1YmljIHNwbGluZSBmcmFjdGFsIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19IRVJNSVRFOiBIZXJtaXRlIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqCiAqIElNR19IQU1NSU5HOiBIYW1taW5nIGZpbHRlci4KICoKICoKICoKICoKICogSU1HX0hBTk5JTkc6IEhhbm5pbmcgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfTUlUQ0hFTEw6IE1pdGNoZWxsIGZpbHRlci4KICoKICoKICoKICoKICogSU1HX1BPV0VSOiBQb3dlciBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfUVVBRFJBVElDOiBJbnZlcnNlIHF1YWRyYXRpYyBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfU0lOQzogU2luYyBmdW5jdGlvbi4KICoKICoKICoKICoKICogSU1HX05FQVJFU1RfTkVJR0hCT1VSOiBOZWFyZXN0IG5laWdoYm91ciBpbnRlcnBvbGF0aW9uLgogKgogKgogKgogKgogKiBJTUdfV0VJR0hURUQ0OiBXZWlnaHRpbmcgZmlsdGVyLgogKgogKgogKgogKgogKiBJTUdfVFJJQU5HTEU6IFRyaWFuZ2xlIGludGVycG9sYXRpb24uCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0aW50ZXJwb2xhdGlvbigkaW1hZ2UsIGludCAkbWV0aG9kID0gSU1HX0JJTElORUFSX0ZJWEVEKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0aW50ZXJwb2xhdGlvbigkaW1hZ2UsICRtZXRob2QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0cGl4ZWwgZHJhd3MgYSBwaXhlbCBhdCB0aGUgc3BlY2lmaWVkCiAqIGNvb3JkaW5hdGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZS4KICogQHBhcmFtIGludCAkeSB5LWNvb3JkaW5hdGUuCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNldHBpeGVsKCRpbWFnZSwgaW50ICR4LCBpbnQgJHksIGludCAkY29sb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hZ2VzZXRwaXhlbCgkaW1hZ2UsICR4LCAkeSwgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbWFnZXNldHN0eWxlIHNldHMgdGhlIHN0eWxlIHRvIGJlIHVzZWQgYnkgYWxsCiAqIGxpbmUgZHJhd2luZyBmdW5jdGlvbnMgKHN1Y2ggYXMgaW1hZ2VsaW5lCiAqIGFuZCBpbWFnZXBvbHlnb24pIHdoZW4gZHJhd2luZyB3aXRoIHRoZSBzcGVjaWFsCiAqIGNvbG9yIElNR19DT0xPUl9TVFlMRUQgb3IgbGluZXMgb2YgaW1hZ2VzIHdpdGggY29sb3IKICogSU1HX0NPTE9SX1NUWUxFREJSVVNIRUQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYXJyYXkgJHN0eWxlIEFuIGFycmF5IG9mIHBpeGVsIGNvbG9ycy4gWW91IGNhbiB1c2UgdGhlCiAqIElNR19DT0xPUl9UUkFOU1BBUkVOVCBjb25zdGFudCB0byBhZGQgYQogKiB0cmFuc3BhcmVudCBwaXhlbC4KICogTm90ZSB0aGF0IHN0eWxlIG11c3Qgbm90IGJlIGFuIGVtcHR5IGFycmF5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXNldHN0eWxlKCRpbWFnZSwgYXJyYXkgJHN0eWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0c3R5bGUoJGltYWdlLCAkc3R5bGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0dGhpY2tuZXNzIHNldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgbGluZXMKICogZHJhd24gd2hlbiBkcmF3aW5nIHJlY3RhbmdsZXMsIHBvbHlnb25zLCBhcmNzIGV0Yy4gdG8KICogdGhpY2tuZXNzIHBpeGVscy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJHRoaWNrbmVzcyBUaGlja25lc3MsIGluIHBpeGVscy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzZXR0aGlja25lc3MoJGltYWdlLCBpbnQgJHRoaWNrbmVzcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXNldHRoaWNrbmVzcygkaW1hZ2UsICR0aGlja25lc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGltYWdlc2V0dGlsZSBzZXRzIHRoZSB0aWxlIGltYWdlIHRvIGJlCiAqIHVzZWQgYnkgYWxsIHJlZ2lvbiBmaWxsaW5nIGZ1bmN0aW9ucyAoc3VjaCBhcyBpbWFnZWZpbGwKICogYW5kIGltYWdlZmlsbGVkcG9seWdvbikgd2hlbiBmaWxsaW5nIHdpdGggdGhlIHNwZWNpYWwKICogY29sb3IgSU1HX0NPTE9SX1RJTEVELgogKgogKiBBIHRpbGUgaXMgYW4gaW1hZ2UgdXNlZCB0byBmaWxsIGFuIGFyZWEgd2l0aCBhIHJlcGVhdGVkIHBhdHRlcm4uIEFueQogKiBHRCBpbWFnZSBjYW4gYmUgdXNlZCBhcyBhIHRpbGUsIGFuZCBieSBzZXR0aW5nIHRoZSB0cmFuc3BhcmVudCBjb2xvciBpbmRleCBvZiB0aGUgdGlsZQogKiBpbWFnZSB3aXRoIGltYWdlY29sb3J0cmFuc3BhcmVudCwgYSB0aWxlIGFsbG93cyBjZXJ0YWluIHBhcnRzCiAqIG9mIHRoZSB1bmRlcmx5aW5nIGFyZWEgdG8gc2hpbmUgdGhyb3VnaCBjYW4gYmUgY3JlYXRlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSByZXNvdXJjZSAkdGlsZSBUaGUgaW1hZ2UgcmVzb3VyY2UgdG8gYmUgdXNlZCBhcyBhIHRpbGUuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdlc2V0dGlsZSgkaW1hZ2UsICR0aWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc2V0dGlsZSgkaW1hZ2UsICR0aWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHN0cmluZyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gaW50ICRmb250IENhbiBiZSAxLCAyLCAzLCA0LCA1IGZvciBidWlsdC1pbgogKiBmb250cyBpbiBsYXRpbjIgZW5jb2RpbmcgKHdoZXJlIGhpZ2hlciBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gbGFyZ2VyIGZvbnRzKSBvciBhbnkgb2YgeW91cgogKiBvd24gZm9udCBpZGVudGlmaWVycyByZWdpc3RlcmVkIHdpdGggaW1hZ2Vsb2FkZm9udC4KICogQHBhcmFtIGludCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGNvbG9yIEEgY29sb3IgaWRlbnRpZmllciBjcmVhdGVkIHdpdGggaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXN0cmluZygkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkc3RyaW5nLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc3RyaW5nKCRpbWFnZSwgJGZvbnQsICR4LCAkeSwgJHN0cmluZywgJGNvbG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHN0cmluZyB2ZXJ0aWNhbGx5IGF0IHRoZSBnaXZlbgogKiBjb29yZGluYXRlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEBwYXJhbSBpbnQgJGZvbnQgQ2FuIGJlIDEsIDIsIDMsIDQsIDUgZm9yIGJ1aWx0LWluCiAqIGZvbnRzIGluIGxhdGluMiBlbmNvZGluZyAod2hlcmUgaGlnaGVyIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byBsYXJnZXIgZm9udHMpIG9yIGFueSBvZiB5b3VyCiAqIG93biBmb250IGlkZW50aWZpZXJzIHJlZ2lzdGVyZWQgd2l0aCBpbWFnZWxvYWRmb250LgogKiBAcGFyYW0gaW50ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gaW50ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyB0byBiZSB3cml0dGVuLgogKiBAcGFyYW0gaW50ICRjb2xvciBBIGNvbG9yIGlkZW50aWZpZXIgY3JlYXRlZCB3aXRoIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzdHJpbmd1cCgkaW1hZ2UsIGludCAkZm9udCwgaW50ICR4LCBpbnQgJHksIHN0cmluZyAkc3RyaW5nLCBpbnQgJGNvbG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdlc3RyaW5ndXAoJGltYWdlLCAkZm9udCwgJHgsICR5LCAkc3RyaW5nLCAkY29sb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBnaXZlbiBpbWFnZSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFnZSBBbiBpbWFnZSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBpbWFnZSBjcmVhdGlvbiBmdW5jdGlvbnMsCiAqIHN1Y2ggYXMgaW1hZ2VjcmVhdGV0cnVlY29sb3IuCiAqIEByZXR1cm4gaW50IFJldHVybiB0aGUgd2lkdGggb2YgdGhlIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzeCgkaW1hZ2UpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXN4KCRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGdpdmVuIGltYWdlIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHJldHVybiBpbnQgUmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIGltYWdlcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2VzeSgkaW1hZ2UpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXN5KCRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSBjb252ZXJ0cyBhIHRydWVjb2xvciBpbWFnZQogKiB0byBhIHBhbGV0dGUgaW1hZ2UuIFRoZSBjb2RlIGZvciB0aGlzIGZ1bmN0aW9uIHdhcyBvcmlnaW5hbGx5IGRyYXduIGZyb20KICogdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAgbGlicmFyeSBjb2RlLCB3aGljaCBpcyBleGNlbGxlbnQuIFRoZSBjb2RlCiAqIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHByZXNlcnZlIGFzIG11Y2ggYWxwaGEgY2hhbm5lbCBpbmZvcm1hdGlvbiBhcwogKiBwb3NzaWJsZSBpbiB0aGUgcmVzdWx0aW5nIHBhbGV0dGUsIGluIGFkZGl0aW9uIHRvIHByZXNlcnZpbmcgY29sb3JzIGFzCiAqIHdlbGwgYXMgcG9zc2libGUuIFRoaXMgZG9lcyBub3Qgd29yayBhcyB3ZWxsIGFzIG1pZ2h0IGJlIGhvcGVkLiBJdCBpcwogKiB1c3VhbGx5IGJlc3QgdG8gc2ltcGx5IHByb2R1Y2UgYSB0cnVlY29sb3Igb3V0cHV0IGltYWdlIGluc3RlYWQsIHdoaWNoCiAqIGd1YXJhbnRlZXMgdGhlIGhpZ2hlc3Qgb3V0cHV0IHF1YWxpdHkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gYm9vbCAkZGl0aGVyIEluZGljYXRlcyBpZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGRpdGhlcmVkIC0gaWYgaXQgaXMgVFJVRSB0aGVuCiAqIGRpdGhlcmluZyB3aWxsIGJlIHVzZWQgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBtb3JlIHNwZWNrbGVkIGltYWdlIGJ1dAogKiB3aXRoIGJldHRlciBjb2xvciBhcHByb3hpbWF0aW9uLgogKiBAcGFyYW0gaW50ICRuY29sb3JzIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyB0aGF0IHNob3VsZCBiZSByZXRhaW5lZCBpbiB0aGUgcGFsZXR0ZS4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUoJGltYWdlLCBib29sICRkaXRoZXIsIGludCAkbmNvbG9ycyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSgkaW1hZ2UsICRkaXRoZXIsICRuY29sb3JzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBpbiBwaXhlbHMKICogZm9yIGEgVHJ1ZVR5cGUgdGV4dC4KICoKICogQHBhcmFtIGZsb2F0ICRzaXplIFRoZSBmb250IHNpemUgaW4gcG9pbnRzLgogKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIEFuZ2xlIGluIGRlZ3JlZXMgaW4gd2hpY2ggdGV4dCB3aWxsIGJlIG1lYXN1cmVkLgogKiBAcGFyYW0gc3RyaW5nICRmb250ZmlsZSBUaGUgcGF0aCB0byB0aGUgVHJ1ZVR5cGUgZm9udCB5b3Ugd2lzaCB0byB1c2UuCiAqCiAqIERlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIHRoZSBHRCBsaWJyYXJ5IFBIUCBpcyB1c2luZywgd2hlbgogKiBmb250ZmlsZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgbGVhZGluZwogKiAvIHRoZW4gLnR0ZiB3aWxsIGJlIGFwcGVuZGVkCiAqIHRvIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxpYnJhcnkgd2lsbCBhdHRlbXB0IHRvIHNlYXJjaCBmb3IgdGhhdAogKiBmaWxlbmFtZSBhbG9uZyBhIGxpYnJhcnktZGVmaW5lZCBmb250IHBhdGguCiAqCiAqIFdoZW4gdXNpbmcgdmVyc2lvbnMgb2YgdGhlIEdEIGxpYnJhcnkgbG93ZXIgdGhhbiAyLjAuMTgsIGEgc3BhY2UgY2hhcmFjdGVyLAogKiByYXRoZXIgdGhhbiBhIHNlbWljb2xvbiwgd2FzIHVzZWQgYXMgdGhlICdwYXRoIHNlcGFyYXRvcicgZm9yIGRpZmZlcmVudCBmb250IGZpbGVzLgogKiBVbmludGVudGlvbmFsIHVzZSBvZiB0aGlzIGZlYXR1cmUgd2lsbCByZXN1bHQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZToKICogV2FybmluZzogQ291bGQgbm90IGZpbmQvb3BlbiBmb250LiBGb3IgdGhlc2UgYWZmZWN0ZWQgdmVyc2lvbnMsIHRoZQogKiBvbmx5IHNvbHV0aW9uIGlzIG1vdmluZyB0aGUgZm9udCB0byBhIHBhdGggd2hpY2ggZG9lcyBub3QgY29udGFpbiBzcGFjZXMuCiAqCiAqIEluIG1hbnkgY2FzZXMgd2hlcmUgYSBmb250IHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBzY3JpcHQgdXNpbmcgaXQKICogdGhlIGZvbGxvd2luZyB0cmljayB3aWxsIGFsbGV2aWF0ZSBhbnkgaW5jbHVkZSBwcm9ibGVtcy4KICoKICoKICogXV0+CiAqCiAqCiAqIE5vdGUgdGhhdCBvcGVuX2Jhc2VkaXIgZG9lcwogKiBub3QgYXBwbHkgdG8gZm9udGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgVGhlIHN0cmluZyB0byBiZSBtZWFzdXJlZC4KICogQHJldHVybiBhcnJheSBpbWFnZXR0ZmJib3ggcmV0dXJucyBhbiBhcnJheSB3aXRoIDgKICogZWxlbWVudHMgcmVwcmVzZW50aW5nIGZvdXIgcG9pbnRzIG1ha2luZyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZQogKiB0ZXh0IG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGVycm9yLgogKgogKgogKgogKgogKiBrZXkKICogY29udGVudHMKICoKICoKICoKICoKICogMAogKiBsb3dlciBsZWZ0IGNvcm5lciwgWCBwb3NpdGlvbgogKgogKgogKiAxCiAqIGxvd2VyIGxlZnQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDIKICogbG93ZXIgcmlnaHQgY29ybmVyLCBYIHBvc2l0aW9uCiAqCiAqCiAqIDMKICogbG93ZXIgcmlnaHQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDQKICogdXBwZXIgcmlnaHQgY29ybmVyLCBYIHBvc2l0aW9uCiAqCiAqCiAqIDUKICogdXBwZXIgcmlnaHQgY29ybmVyLCBZIHBvc2l0aW9uCiAqCiAqCiAqIDYKICogdXBwZXIgbGVmdCBjb3JuZXIsIFggcG9zaXRpb24KICoKICoKICogNwogKiB1cHBlciBsZWZ0IGNvcm5lciwgWSBwb3NpdGlvbgogKgogKgogKgogKgogKgogKiBUaGUgcG9pbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgdGV4dCByZWdhcmRsZXNzIG9mIHRoZQogKiBhbmdsZSwgc28gInVwcGVyIGxlZnQiIG1lYW5zIGluIHRoZSB0b3AgbGVmdC1oYW5kCiAqIGNvcm5lciBzZWVpbmcgdGhlIHRleHQgaG9yaXpvbnRhbGx5LgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXR0ZmJib3goZmxvYXQgJHNpemUsIGZsb2F0ICRhbmdsZSwgc3RyaW5nICRmb250ZmlsZSwgc3RyaW5nICR0ZXh0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXR0ZmJib3goJHNpemUsICRhbmdsZSwgJGZvbnRmaWxlLCAkdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBXcml0ZXMgdGhlIGdpdmVuIHRleHQgaW50byB0aGUgaW1hZ2UgdXNpbmcgVHJ1ZVR5cGUKICogZm9udHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJHNpemUgVGhlIGZvbnQgc2l6ZSBpbiBwb2ludHMuCiAqIEBwYXJhbSBmbG9hdCAkYW5nbGUgVGhlIGFuZ2xlIGluIGRlZ3JlZXMsIHdpdGggMCBkZWdyZWVzIGJlaW5nIGxlZnQtdG8tcmlnaHQgcmVhZGluZyB0ZXh0LgogKiBIaWdoZXIgdmFsdWVzIHJlcHJlc2VudCBhIGNvdW50ZXItY2xvY2t3aXNlIHJvdGF0aW9uLiBGb3IgZXhhbXBsZSwgYQogKiB2YWx1ZSBvZiA5MCB3b3VsZCByZXN1bHQgaW4gYm90dG9tLXRvLXRvcCByZWFkaW5nIHRleHQuCiAqIEBwYXJhbSBpbnQgJHggVGhlIGNvb3JkaW5hdGVzIGdpdmVuIGJ5IHggYW5kCiAqIHkgd2lsbCBkZWZpbmUgdGhlIGJhc2Vwb2ludCBvZiB0aGUgZmlyc3QKICogY2hhcmFjdGVyIChyb3VnaGx5IHRoZSBsb3dlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2hhcmFjdGVyKS4gVGhpcwogKiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaW1hZ2VzdHJpbmcsIHdoZXJlCiAqIHggYW5kIHkgZGVmaW5lIHRoZQogKiB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgInRvcCBsZWZ0IgogKiBpcyAwLCAwLgogKiBAcGFyYW0gaW50ICR5IFRoZSB5LW9yZGluYXRlLiBUaGlzIHNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmb250cyBiYXNlbGluZSwgbm90IHRoZQogKiB2ZXJ5IGJvdHRvbSBvZiB0aGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gaW50ICRjb2xvciBUaGUgY29sb3IgaW5kZXguIFVzaW5nIHRoZSBuZWdhdGl2ZSBvZiBhIGNvbG9yIGluZGV4IGhhcyB0aGUgZWZmZWN0IG9mCiAqIHR1cm5pbmcgb2ZmIGFudGlhbGlhc2luZy4gU2VlIGltYWdlY29sb3JhbGxvY2F0ZS4KICogQHBhcmFtIHN0cmluZyAkZm9udGZpbGUgVGhlIHBhdGggdG8gdGhlIFRydWVUeXBlIGZvbnQgeW91IHdpc2ggdG8gdXNlLgogKgogKiBEZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgR0QgbGlicmFyeSBQSFAgaXMgdXNpbmcsIHdoZW4KICogZm9udGZpbGUgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGxlYWRpbmcKICogLyB0aGVuIC50dGYgd2lsbCBiZSBhcHBlbmRlZAogKiB0byB0aGUgZmlsZW5hbWUgYW5kIHRoZSBsaWJyYXJ5IHdpbGwgYXR0ZW1wdCB0byBzZWFyY2ggZm9yIHRoYXQKICogZmlsZW5hbWUgYWxvbmcgYSBsaWJyYXJ5LWRlZmluZWQgZm9udCBwYXRoLgogKgogKiBXaGVuIHVzaW5nIHZlcnNpb25zIG9mIHRoZSBHRCBsaWJyYXJ5IGxvd2VyIHRoYW4gMi4wLjE4LCBhIHNwYWNlIGNoYXJhY3RlciwKICogcmF0aGVyIHRoYW4gYSBzZW1pY29sb24sIHdhcyB1c2VkIGFzIHRoZSAncGF0aCBzZXBhcmF0b3InIGZvciBkaWZmZXJlbnQgZm9udCBmaWxlcy4KICogVW5pbnRlbnRpb25hbCB1c2Ugb2YgdGhpcyBmZWF0dXJlIHdpbGwgcmVzdWx0IGluIHRoZSB3YXJuaW5nIG1lc3NhZ2U6CiAqIFdhcm5pbmc6IENvdWxkIG5vdCBmaW5kL29wZW4gZm9udC4gRm9yIHRoZXNlIGFmZmVjdGVkIHZlcnNpb25zLCB0aGUKICogb25seSBzb2x1dGlvbiBpcyBtb3ZpbmcgdGhlIGZvbnQgdG8gYSBwYXRoIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gc3BhY2VzLgogKgogKiBJbiBtYW55IGNhc2VzIHdoZXJlIGEgZm9udCByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgc2NyaXB0IHVzaW5nIGl0CiAqIHRoZSBmb2xsb3dpbmcgdHJpY2sgd2lsbCBhbGxldmlhdGUgYW55IGluY2x1ZGUgcHJvYmxlbXMuCiAqCiAqCiAqIF1dPgogKgogKgogKiBOb3RlIHRoYXQgb3Blbl9iYXNlZGlyIGRvZXMKICogbm90IGFwcGx5IHRvIGZvbnRmaWxlLgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHN0cmluZyBpbiBVVEYtOCBlbmNvZGluZy4KICoKICogTWF5IGluY2x1ZGUgZGVjaW1hbCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChvZiB0aGUgZm9ybToKICogJmFtcDsjODM2NDspIHRvIGFjY2VzcyBjaGFyYWN0ZXJzIGluIGEgZm9udCBiZXlvbmQgcG9zaXRpb24gMTI3LgogKiBUaGUgaGV4YWRlY2ltYWwgZm9ybWF0IChsaWtlICZhbXA7I3hBOTspIGlzIHN1cHBvcnRlZC4KICogU3RyaW5ncyBpbiBVVEYtOCBlbmNvZGluZyBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5LgogKgogKiBOYW1lZCBlbnRpdGllcywgc3VjaCBhcyAmYW1wO2NvcHk7LCBhcmUgbm90IHN1cHBvcnRlZC4gQ29uc2lkZXIgdXNpbmcKICogaHRtbF9lbnRpdHlfZGVjb2RlCiAqIHRvIGRlY29kZSB0aGVzZSBuYW1lZCBlbnRpdGllcyBpbnRvIFVURi04IHN0cmluZ3MuCiAqCiAqIElmIGEgY2hhcmFjdGVyIGlzIHVzZWQgaW4gdGhlIHN0cmluZyB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogKiBmb250LCBhIGhvbGxvdyByZWN0YW5nbGUgd2lsbCByZXBsYWNlIHRoZSBjaGFyYWN0ZXIuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIDggZWxlbWVudHMgcmVwcmVzZW50aW5nIGZvdXIgcG9pbnRzIG1ha2luZyB0aGUKICogYm91bmRpbmcgYm94IG9mIHRoZSB0ZXh0LiBUaGUgb3JkZXIgb2YgdGhlIHBvaW50cyBpcyBsb3dlciBsZWZ0LCBsb3dlcgogKiByaWdodCwgdXBwZXIgcmlnaHQsIHVwcGVyIGxlZnQuIFRoZSBwb2ludHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0CiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZ2xlLCBzbyAidXBwZXIgbGVmdCIgbWVhbnMgaW4gdGhlIHRvcCBsZWZ0LWhhbmQKICogY29ybmVyIHdoZW4geW91IHNlZSB0aGUgdGV4dCBob3Jpem9udGFsbHkuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdldHRmdGV4dCgkaW1hZ2UsIGZsb2F0ICRzaXplLCBmbG9hdCAkYW5nbGUsIGludCAkeCwgaW50ICR5LCBpbnQgJGNvbG9yLCBzdHJpbmcgJGZvbnRmaWxlLCBzdHJpbmcgJHRleHQpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYWdldHRmdGV4dCgkaW1hZ2UsICRzaXplLCAkYW5nbGUsICR4LCAkeSwgJGNvbG9yLCAkZm9udGZpbGUsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGltYWdld2JtcCBvdXRwdXRzIG9yIHNhdmUgYSBXQk1QCiAqIHZlcnNpb24gb2YgdGhlIGdpdmVuIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIG1peGVkICR0byBUaGUgcGF0aCBvciBhbiBvcGVuIHN0cmVhbSByZXNvdXJjZSAod2hpY2ggaXMgYXV0b21hdGljYWxseSBiZWluZyBjbG9zZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zKSB0byBzYXZlIHRoZSBmaWxlIHRvLiBJZiBub3Qgc2V0IG9yIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0dGVkIGRpcmVjdGx5LgogKiBAcGFyYW0gaW50ICRmb3JlZ3JvdW5kIFlvdSBjYW4gc2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHdpdGggdGhpcyBwYXJhbWV0ZXIgYnkgc2V0dGluZyBhbgogKiBpZGVudGlmaWVyIG9idGFpbmVkIGZyb20gaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIGlzIGJsYWNrLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXdibXAoJGltYWdlLCAkdG8gPSBudWxsLCBpbnQgJGZvcmVncm91bmQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZvcmVncm91bmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdld2JtcCgkaW1hZ2UsICR0bywgJGZvcmVncm91bmQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGltYWdld2JtcCgkaW1hZ2UsICR0byk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0cyBvciBzYXZlcyBhIFdlYlAgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gaW1hZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UgQW4gaW1hZ2UgcmVzb3VyY2UsIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgaW1hZ2UgY3JlYXRpb24gZnVuY3Rpb25zLAogKiBzdWNoIGFzIGltYWdlY3JlYXRldHJ1ZWNvbG9yLgogKiBAcGFyYW0gbWl4ZWQgJHRvIFRoZSBwYXRoIG9yIGFuIG9wZW4gc3RyZWFtIHJlc291cmNlICh3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGJlaW5nIGNsb3NlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMpIHRvIHNhdmUgdGhlIGZpbGUgdG8uIElmIG5vdCBzZXQgb3IgTlVMTCwgdGhlIHJhdyBpbWFnZSBzdHJlYW0gd2lsbCBiZSBvdXRwdXR0ZWQgZGlyZWN0bHkuCiAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgcXVhbGl0eSByYW5nZXMgZnJvbSAwICh3b3JzdAogKiBxdWFsaXR5LCBzbWFsbGVyIGZpbGUpIHRvIDEwMCAoYmVzdCBxdWFsaXR5LCBiaWdnZXN0IGZpbGUpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFnZXdlYnAoJGltYWdlLCAkdG8gPSBudWxsLCBpbnQgJHF1YWxpdHkgPSA4MCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFnZXdlYnAoJGltYWdlLCAkdG8sICRxdWFsaXR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIG9yIHNhdmUgYW4gWEJNIHZlcnNpb24gb2YgdGhlIGdpdmVuCiAqIGltYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlIEFuIGltYWdlIHJlc291cmNlLCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIGltYWdlIGNyZWF0aW9uIGZ1bmN0aW9ucywKICogc3VjaCBhcyBpbWFnZWNyZWF0ZXRydWVjb2xvci4KICogQHBhcmFtIHN0cmluZ3xudWxsICRmaWxlbmFtZSBUaGUgcGF0aCB0byBzYXZlIHRoZSBmaWxlIHRvLCBnaXZlbiBhcyBzdHJpbmcuIElmIE5VTEwsIHRoZSByYXcgaW1hZ2Ugc3RyZWFtIHdpbGwgYmUgb3V0cHV0IGRpcmVjdGx5LgogKgogKiBUaGUgZmlsZW5hbWUgKHdpdGhvdXQgdGhlIC54Ym0gZXh0ZW5zaW9uKSBpcyBhbHNvCiAqIHVzZWQgZm9yIHRoZSBDIGlkZW50aWZpZXJzIG9mIHRoZSBYQk0sIHdoZXJlYnkgbm9uCiAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9mIHRoZSBjdXJyZW50IGxvY2FsZSBhcmUgc3Vic3RpdHV0ZWQgYnkKICogdW5kZXJzY29yZXMuIElmIGZpbGVuYW1lIGlzIHNldCB0byBOVUxMLAogKiBpbWFnZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBDIGlkZW50aWZpZXJzLgogKiBAcGFyYW0gaW50ICRmb3JlZ3JvdW5kIFlvdSBjYW4gc2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHdpdGggdGhpcyBwYXJhbWV0ZXIgYnkgc2V0dGluZyBhbgogKiBpZGVudGlmaWVyIG9idGFpbmVkIGZyb20gaW1hZ2Vjb2xvcmFsbG9jYXRlLgogKiBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIGlzIGJsYWNrLiBBbGwgb3RoZXIgY29sb3JzIGFyZSB0cmVhdGVkIGFzCiAqIGJhY2tncm91bmQuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYWdleGJtKCRpbWFnZSwgP3N0cmluZyAkZmlsZW5hbWUsIGludCAkZm9yZWdyb3VuZCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZm9yZWdyb3VuZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW1hZ2V4Ym0oJGltYWdlLCAkZmlsZW5hbWUsICRmb3JlZ3JvdW5kKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbWFnZXhibSgkaW1hZ2UsICRmaWxlbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW1iZWRzIGJpbmFyeSBJUFRDIGRhdGEgaW50byBhIEpQRUcgaW1hZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGlwdGNkYXRhIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGpwZWdfZmlsZV9uYW1lIFBhdGggdG8gdGhlIEpQRUcgaW1hZ2UuCiAqIEBwYXJhbSBpbnQgJHNwb29sIFNwb29sIGZsYWcuIElmIHRoZSBzcG9vbCBmbGFnIGlzIGxlc3MgdGhhbiAyIHRoZW4gdGhlIEpQRUcgd2lsbCBiZQogKiByZXR1cm5lZCBhcyBhIHN0cmluZy4gT3RoZXJ3aXNlIHRoZSBKUEVHIHdpbGwgYmUgcHJpbnRlZCB0byBTVERPVVQuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgc3Bvb2wgaXMgbGVzcyB0aGFuIDIsIHRoZSBKUEVHIHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaXB0Y2VtYmVkKHN0cmluZyAkaXB0Y2RhdGEsIHN0cmluZyAkanBlZ19maWxlX25hbWUsIGludCAkc3Bvb2wgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlwdGNlbWJlZCgkaXB0Y2RhdGEsICRqcGVnX2ZpbGVfbmFtZSwgJHNwb29sKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBhcnNlcyBhbiBJUFRDIGJsb2NrIGludG8gaXRzIHNpbmdsZSB0YWdzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpcHRjYmxvY2sgQSBiaW5hcnkgSVBUQyBibG9jay4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IHVzaW5nIHRoZSB0YWdtYXJrZXIgYXMgYW4gaW5kZXggYW5kIHRoZSB2YWx1ZSBhcyB0aGUKICogdmFsdWUuIEl0IHJldHVybnMgRkFMU0Ugb24gZXJyb3Igb3IgaWYgbm8gSVBUQyBkYXRhIHdhcyBmb3VuZC4KICogQHRocm93cyBJbWFnZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaXB0Y3BhcnNlKHN0cmluZyAkaXB0Y2Jsb2NrKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpcHRjcGFyc2UoJGlwdGNibG9jayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFnZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb252ZXJ0cyBhIEpQRUcgZmlsZSBpbnRvIGEgV0JNUCBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRqcGVnbmFtZSBQYXRoIHRvIEpQRUcgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkd2JtcG5hbWUgUGF0aCB0byBkZXN0aW5hdGlvbiBXQk1QIGZpbGUuCiAqIEBwYXJhbSBpbnQgJGRlc3RfaGVpZ2h0IERlc3RpbmF0aW9uIGltYWdlIGhlaWdodC4KICogQHBhcmFtIGludCAkZGVzdF93aWR0aCBEZXN0aW5hdGlvbiBpbWFnZSB3aWR0aC4KICogQHBhcmFtIGludCAkdGhyZXNob2xkIFRocmVzaG9sZCB2YWx1ZSwgYmV0d2VlbiAwIGFuZCA4IChpbmNsdXNpdmUpLgogKiBAdGhyb3dzIEltYWdlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBqcGVnMndibXAoc3RyaW5nICRqcGVnbmFtZSwgc3RyaW5nICR3Ym1wbmFtZSwgaW50ICRkZXN0X2hlaWdodCwgaW50ICRkZXN0X3dpZHRoLCBpbnQgJHRocmVzaG9sZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxqcGVnMndibXAoJGpwZWduYW1lLCAkd2JtcG5hbWUsICRkZXN0X2hlaWdodCwgJGRlc3Rfd2lkdGgsICR0aHJlc2hvbGQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hZ2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbnZlcnRzIGEgUE5HIGZpbGUgaW50byBhIFdCTVAgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkcG5nbmFtZSBQYXRoIHRvIFBORyBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICR3Ym1wbmFtZSBQYXRoIHRvIGRlc3RpbmF0aW9uIFdCTVAgZmlsZS4KICogQHBhcmFtIGludCAkZGVzdF9oZWlnaHQgRGVzdGluYXRpb24gaW1hZ2UgaGVpZ2h0LgogKiBAcGFyYW0gaW50ICRkZXN0X3dpZHRoIERlc3RpbmF0aW9uIGltYWdlIHdpZHRoLgogKiBAcGFyYW0gaW50ICR0aHJlc2hvbGQgVGhyZXNob2xkIHZhbHVlLCBiZXR3ZWVuIDAgYW5kIDggKGluY2x1c2l2ZSkuCiAqIEB0aHJvd3MgSW1hZ2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBuZzJ3Ym1wKHN0cmluZyAkcG5nbmFtZSwgc3RyaW5nICR3Ym1wbmFtZSwgaW50ICRkZXN0X2hlaWdodCwgaW50ICRkZXN0X3dpZHRoLCBpbnQgJHRocmVzaG9sZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwbmcyd2JtcCgkcG5nbmFtZSwgJHdibXBuYW1lLCAkZGVzdF9oZWlnaHQsICRkZXN0X3dpZHRoLCAkdGhyZXNob2xkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYWdlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/imap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbWFwRXhjZXB0aW9uOwoKLyoqCiAqIEFwcGVuZHMgYSBzdHJpbmcgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkIG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBhcHBlbmQsIGFzIGEgc3RyaW5nCiAqCiAqIFdoZW4gdGFsa2luZyB0byB0aGUgQ3lydXMgSU1BUCBzZXJ2ZXIsIHlvdSBtdXN0IHVzZSAiXHJcbiIgYXMKICogeW91ciBlbmQtb2YtbGluZSB0ZXJtaW5hdG9yIGluc3RlYWQgb2YgIlxuIiBvciB0aGUgb3BlcmF0aW9uIHdpbGwKICogZmFpbAogKiBAcGFyYW0gc3RyaW5nICRvcHRpb25zIElmIHByb3ZpZGVkLCB0aGUgb3B0aW9ucyB3aWxsIGFsc28gYmUgd3JpdHRlbgogKiB0byB0aGUgbWFpbGJveAogKiBAcGFyYW0gc3RyaW5nICRpbnRlcm5hbF9kYXRlIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCwgaXQgd2lsbCBzZXQgdGhlIElOVEVSTkFMREFURSBvbiB0aGUgYXBwZW5kZWQgbWVzc2FnZS4gIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgZGF0ZSBzdHJpbmcgdGhhdCBjb25mb3JtcyB0byB0aGUgcmZjMjA2MCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBkYXRlX3RpbWUgdmFsdWUuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9hcHBlbmQoJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gsIHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRvcHRpb25zID0gbnVsbCwgc3RyaW5nICRpbnRlcm5hbF9kYXRlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2FwcGVuZCgkaW1hcF9zdHJlYW0sICRtYWlsYm94LCAkbWVzc2FnZSwgJG9wdGlvbnMsICRpbnRlcm5hbF9kYXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENoZWNrcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBtYWlsYm94LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHJldHVybiBcc3RkQ2xhc3MgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqCiAqCiAqIERhdGUgLSBjdXJyZW50IHN5c3RlbSB0aW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gUkZDMjgyMgogKgogKgogKgogKgogKiBEcml2ZXIgLSBwcm90b2NvbCB1c2VkIHRvIGFjY2VzcyB0aGlzIG1haWxib3g6CiAqIFBPUDMsIElNQVAsIE5OVFAKICoKICoKICoKICoKICogTWFpbGJveCAtIHRoZSBtYWlsYm94IG5hbWUKICoKICoKICoKICoKICogTm1zZ3MgLSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gKICoKICoKICoKICoKICogUmVjZW50IC0gbnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlcyBpbiB0aGUgbWFpbGJveAogKgogKgogKgogKgogKiBSZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jaGVjaygkaW1hcF9zdHJlYW0pOiBcc3RkQ2xhc3MKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NoZWNrKCRpbWFwX3N0cmVhbSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgc3RvcmUgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQKICogZmxhZyB0byB0aGUgZmxhZ3Mgc2V0IGZvciB0aGUKICogbWVzc2FnZXMgaW4gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJHNlcXVlbmNlIEEgc2VxdWVuY2Ugb2YgbWVzc2FnZSBudW1iZXJzLiBZb3UgY2FuIGVudW1lcmF0ZSBkZXNpcmVkIG1lc3NhZ2VzCiAqIHdpdGggdGhlIFgsWSBzeW50YXgsIG9yIHJldHJpZXZlIGFsbCBtZXNzYWdlcwogKiB3aXRoaW4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgWDpZIHN5bnRheAogKiBAcGFyYW0gc3RyaW5nICRmbGFnIFRoZSBmbGFncyB3aGljaCB5b3UgY2FuIHVuc2V0IGFyZSAiXFxTZWVuIiwgIlxcQW5zd2VyZWQiLCAiXFxGbGFnZ2VkIiwKICogIlxcRGVsZXRlZCIsIGFuZCAiXFxEcmFmdCIgKGFzIGRlZmluZWQgYnkgUkZDMjA2MCkKICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGFyZSBhIGJpdCBtYXNrIGFuZCBtYXkgY29udGFpbgogKiB0aGUgc2luZ2xlIG9wdGlvbjoKICoKICoKICoKICogU1RfVUlEIC0gVGhlIHNlcXVlbmNlIGFyZ3VtZW50IGNvbnRhaW5zIFVJRHMKICogaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jbGVhcmZsYWdfZnVsbCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkc2VxdWVuY2UsIHN0cmluZyAkZmxhZywgaW50ICRvcHRpb25zID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NsZWFyZmxhZ19mdWxsKCRpbWFwX3N0cmVhbSwgJHNlcXVlbmNlLCAkZmxhZywgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2xvc2VzIHRoZSBpbWFwIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJGZsYWcgSWYgc2V0IHRvIENMX0VYUFVOR0UsIHRoZSBmdW5jdGlvbiB3aWxsIHNpbGVudGx5CiAqIGV4cHVuZ2UgdGhlIG1haWxib3ggYmVmb3JlIGNsb3NpbmcsIHJlbW92aW5nIGFsbCBtZXNzYWdlcyBtYXJrZWQgZm9yCiAqIGRlbGV0aW9uLiBZb3UgY2FuIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcgYnkgdXNpbmcKICogaW1hcF9leHB1bmdlCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9jbG9zZSgkaW1hcF9zdHJlYW0sIGludCAkZmxhZyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9jbG9zZSgkaW1hcF9zdHJlYW0sICRmbGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgbWFpbGJveCBzcGVjaWZpZWQgYnkgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbi4gTmFtZXMgY29udGFpbmluZyBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlcnMgc2hvdWxkIGJlCiAqIGVuY29kZWQgYnkgaW1hcF91dGY3X2VuY29kZQogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfY3JlYXRlbWFpbGJveCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2NyZWF0ZW1haWxib3goJGltYXBfc3RyZWFtLCAkbWFpbGJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWxldGVzIHRoZSBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfZGVsZXRlbWFpbGJveCgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2RlbGV0ZW1haWxib3goJGltYXBfc3RyZWFtLCAkbWFpbGJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIGFsbCB0aGUgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBtZXNzYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkb3B0aW9ucyBUaGlzIG9wdGlvbmFsIHBhcmFtZXRlciBvbmx5IGhhcyBhIHNpbmdsZSBvcHRpb24sCiAqIEZUX1VJRCwgd2hpY2ggdGVsbHMgdGhlIGZ1bmN0aW9uIHRvIHRyZWF0IHRoZQogKiBtc2dfbnVtYmVyIGFyZ3VtZW50IGFzIGEKICogVUlELgogKiBAcmV0dXJuIFxzdGRDbGFzcyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdy4KICoKICoKICoKICogUmV0dXJuZWQgT2JqZWN0IGZvciBpbWFwX2ZldGNoc3RydWN0dXJlCiAqCiAqCiAqCiAqCiAqIHR5cGUKICogUHJpbWFyeSBib2R5IHR5cGUKICoKICoKICogZW5jb2RpbmcKICogQm9keSB0cmFuc2ZlciBlbmNvZGluZwogKgogKgogKiBpZnN1YnR5cGUKICogVFJVRSBpZiB0aGVyZSBpcyBhIHN1YnR5cGUgc3RyaW5nCiAqCiAqCiAqIHN1YnR5cGUKICogTUlNRSBzdWJ0eXBlCiAqCiAqCiAqIGlmZGVzY3JpcHRpb24KICogVFJVRSBpZiB0aGVyZSBpcyBhIGRlc2NyaXB0aW9uIHN0cmluZwogKgogKgogKiBkZXNjcmlwdGlvbgogKiBDb250ZW50IGRlc2NyaXB0aW9uIHN0cmluZwogKgogKgogKiBpZmlkCiAqIFRSVUUgaWYgdGhlcmUgaXMgYW4gaWRlbnRpZmljYXRpb24gc3RyaW5nCiAqCiAqCiAqIGlkCiAqIElkZW50aWZpY2F0aW9uIHN0cmluZwogKgogKgogKiBsaW5lcwogKiBOdW1iZXIgb2YgbGluZXMKICoKICoKICogYnl0ZXMKICogTnVtYmVyIG9mIGJ5dGVzCiAqCiAqCiAqIGlmZGlzcG9zaXRpb24KICogVFJVRSBpZiB0aGVyZSBpcyBhIGRpc3Bvc2l0aW9uIHN0cmluZwogKgogKgogKiBkaXNwb3NpdGlvbgogKiBEaXNwb3NpdGlvbiBzdHJpbmcKICoKICoKICogaWZkcGFyYW1ldGVycwogKiBUUlVFIGlmIHRoZSBkcGFyYW1ldGVycyBhcnJheSBleGlzdHMKICoKICoKICogZHBhcmFtZXRlcnMKICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aGVyZSBlYWNoIG9iamVjdCBoYXMgYW4KICogImF0dHJpYnV0ZSIgYW5kIGEgInZhbHVlIgogKiBwcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZQogKiBDb250ZW50LWRpc3Bvc2l0aW9uIE1JTUUKICogaGVhZGVyLgogKgogKgogKiBpZnBhcmFtZXRlcnMKICogVFJVRSBpZiB0aGUgcGFyYW1ldGVycyBhcnJheSBleGlzdHMKICoKICoKICogcGFyYW1ldGVycwogKiBBbiBhcnJheSBvZiBvYmplY3RzIHdoZXJlIGVhY2ggb2JqZWN0IGhhcyBhbgogKiAiYXR0cmlidXRlIiBhbmQgYSAidmFsdWUiCiAqIHByb3BlcnR5LgogKgogKgogKiBwYXJ0cwogKiBBbiBhcnJheSBvZiBvYmplY3RzIGlkZW50aWNhbCBpbiBzdHJ1Y3R1cmUgdG8gdGhlIHRvcC1sZXZlbAogKiBvYmplY3QsIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBNSU1FIGJvZHkKICogcGFydC4KICoKICoKICoKICoKICoKICoKICogUHJpbWFyeSBib2R5IHR5cGUgKHZhbHVlIG1heSB2YXJ5IHdpdGggdXNlZCBsaWJyYXJ5LCB1c2Ugb2YgY29uc3RhbnRzIGlzIHJlY29tbWVuZGVkKQogKgogKgogKiBWYWx1ZVR5cGVDb25zdGFudAogKgogKgogKiAwdGV4dFRZUEVURVhUCiAqIDFtdWx0aXBhcnRUWVBFTVVMVElQQVJUCiAqIDJtZXNzYWdlVFlQRU1FU1NBR0UKICogM2FwcGxpY2F0aW9uVFlQRUFQUExJQ0FUSU9OCiAqIDRhdWRpb1RZUEVBVURJTwogKiA1aW1hZ2VUWVBFSU1BR0UKICogNnZpZGVvVFlQRVZJREVPCiAqIDdtb2RlbFRZUEVNT0RFTAogKiA4b3RoZXJUWVBFT1RIRVIKICoKICoKICoKICoKICoKICogVHJhbnNmZXIgZW5jb2RpbmdzICh2YWx1ZSBtYXkgdmFyeSB3aXRoIHVzZWQgbGlicmFyeSwgdXNlIG9mIGNvbnN0YW50cyBpcyByZWNvbW1lbmRlZCkKICoKICoKICogVmFsdWVUeXBlQ29uc3RhbnQKICoKICoKICogMDdiaXRFTkM3QklUCiAqIDE4Yml0RU5DOEJJVAogKiAyQmluYXJ5RU5DQklOQVJZCiAqIDNCYXNlNjRFTkNCQVNFNjQKICogNFF1b3RlZC1QcmludGFibGVFTkNRVU9URURQUklOVEFCTEUKICogNW90aGVyRU5DT1RIRVIKICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX2ZldGNoc3RydWN0dXJlKCRpbWFwX3N0cmVhbSwgaW50ICRtc2dfbnVtYmVyLCBpbnQgJG9wdGlvbnMgPSAwKTogXHN0ZENsYXNzCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9mZXRjaHN0cnVjdHVyZSgkaW1hcF9zdHJlYW0sICRtc2dfbnVtYmVyLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFB1cmdlcyB0aGUgY2FjaGUgb2YgZW50cmllcyBvZiBhIHNwZWNpZmljIHR5cGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gaW50ICRjYWNoZXMgU3BlY2lmaWVzIHRoZSBjYWNoZSB0byBwdXJnZS4gSXQgbWF5IG9uZSBvciBhIGNvbWJpbmF0aW9uCiAqIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogKiBJTUFQX0dDX0VMVCAobWVzc2FnZSBjYWNoZSBlbGVtZW50cyksCiAqIElNQVBfR0NfRU5WIChlbnZlbG9wZSBhbmQgYm9kaWVzKSwKICogSU1BUF9HQ19URVhUUyAodGV4dHMpLgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfZ2MoJGltYXBfc3RyZWFtLCBpbnQgJGNhY2hlcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2djKCRpbWFwX3N0cmVhbSwgJGNhY2hlcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBtZXNzYWdlIG51bWJlciBieSByZWFkaW5nIGl0cyBoZWFkZXJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZnJvbWxlbmd0aCBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoZnJvbSBwcm9wZXJ0eS4KICogTXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KICogQHBhcmFtIGludCAkc3ViamVjdGxlbmd0aCBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoc3ViamVjdCBwcm9wZXJ0eQogKiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0aG9zdAogKiBAcmV0dXJuIFxzdGRDbGFzcyBSZXR1cm5zIEZBTFNFIG9uIGVycm9yIG9yLCBpZiBzdWNjZXNzZnVsLCB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqCiAqCiAqIHRvYWRkcmVzcyAtIGZ1bGwgdG86IGxpbmUsIHVwIHRvIDEwMjQgY2hhcmFjdGVycwogKgogKgogKgogKgogKiB0byAtIGFuIGFycmF5IG9mIG9iamVjdHMgZnJvbSB0aGUgVG86IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiBmcm9tYWRkcmVzcyAtIGZ1bGwgZnJvbTogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqCiAqIGZyb20gLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIEZyb206IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiBjY2FkZHJlc3MgLSBmdWxsIGNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogY2MgLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIENjOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcKICogcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwKICogbWFpbGJveCwgYW5kIGhvc3QKICoKICoKICoKICoKICogYmNjYWRkcmVzcyAtIGZ1bGwgYmNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogYmNjIC0gYW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBCY2M6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiByZXBseV90b2FkZHJlc3MgLSBmdWxsIFJlcGx5LVRvOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogcmVwbHlfdG8gLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJlcGx5LVRvOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcKICogcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwKICogbWFpbGJveCwgYW5kIGhvc3QKICoKICoKICoKICoKICogc2VuZGVyYWRkcmVzcyAtIGZ1bGwgc2VuZGVyOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogc2VuZGVyIC0gYW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBTZW5kZXI6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZwogKiBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLAogKiBtYWlsYm94LCBhbmQgaG9zdAogKgogKgogKgogKgogKiByZXR1cm5fcGF0aGFkZHJlc3MgLSBmdWxsIFJldHVybi1QYXRoOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnMKICoKICoKICoKICoKICogcmV0dXJuX3BhdGggLSBhbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJldHVybi1QYXRoOiBsaW5lLCB3aXRoIHRoZQogKiBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsCiAqIGFkbCwgbWFpbGJveCwgYW5kCiAqIGhvc3QKICoKICoKICoKICoKICogcmVtYWlsIC0KICoKICoKICoKICoKICogZGF0ZSAtIFRoZSBtZXNzYWdlIGRhdGUgYXMgZm91bmQgaW4gaXRzIGhlYWRlcnMKICoKICoKICoKICoKICogRGF0ZSAtIFNhbWUgYXMgZGF0ZQogKgogKgogKgogKgogKiBzdWJqZWN0IC0gVGhlIG1lc3NhZ2Ugc3ViamVjdAogKgogKgogKgogKgogKiBTdWJqZWN0IC0gU2FtZSBhcyBzdWJqZWN0CiAqCiAqCiAqCiAqCiAqIGluX3JlcGx5X3RvIC0KICoKICoKICoKICoKICogbWVzc2FnZV9pZCAtCiAqCiAqCiAqCiAqCiAqIG5ld3Nncm91cHMgLQogKgogKgogKgogKgogKiBmb2xsb3d1cF90byAtCiAqCiAqCiAqCiAqCiAqIHJlZmVyZW5jZXMgLQogKgogKgogKgogKgogKiBSZWNlbnQgLSBSIGlmIHJlY2VudCBhbmQgc2VlbiwgTgogKiBpZiByZWNlbnQgYW5kIG5vdCBzZWVuLCAnICcgaWYgbm90IHJlY2VudC4KICoKICoKICoKICoKICogVW5zZWVuIC0gVSBpZiBub3Qgc2VlbiBBTkQgbm90IHJlY2VudCwgJyAnIGlmIHNlZW4KICogT1Igbm90IHNlZW4gYW5kIHJlY2VudAogKgogKgogKgogKgogKiBGbGFnZ2VkIC0gRiBpZiBmbGFnZ2VkLCAnICcgaWYgbm90IGZsYWdnZWQKICoKICoKICoKICoKICogQW5zd2VyZWQgLSBBIGlmIGFuc3dlcmVkLCAnICcgaWYgdW5hbnN3ZXJlZAogKgogKgogKgogKgogKiBEZWxldGVkIC0gRCBpZiBkZWxldGVkLCAnICcgaWYgbm90IGRlbGV0ZWQKICoKICoKICoKICoKICogRHJhZnQgLSBYIGlmIGRyYWZ0LCAnICcgaWYgbm90IGRyYWZ0CiAqCiAqCiAqCiAqCiAqIE1zZ25vIC0gVGhlIG1lc3NhZ2UgbnVtYmVyCiAqCiAqCiAqCiAqCiAqIE1haWxEYXRlIC0KICoKICoKICoKICoKICogU2l6ZSAtIFRoZSBtZXNzYWdlIHNpemUKICoKICoKICoKICoKICogdWRhdGUgLSBtYWlsIG1lc3NhZ2UgZGF0ZSBpbiBVbml4IHRpbWUKICoKICoKICoKICoKICogZmV0Y2hmcm9tIC0gZnJvbSBsaW5lIGZvcm1hdHRlZCB0byBmaXQgZnJvbWxlbmd0aAogKiBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqCiAqIGZldGNoc3ViamVjdCAtIHN1YmplY3QgbGluZSBmb3JtYXR0ZWQgdG8gZml0CiAqIHN1YmplY3RsZW5ndGggY2hhcmFjdGVycwogKgogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfaGVhZGVyaW5mbygkaW1hcF9zdHJlYW0sIGludCAkbXNnX251bWJlciwgaW50ICRmcm9tbGVuZ3RoID0gMCwgaW50ICRzdWJqZWN0bGVuZ3RoID0gMCwgc3RyaW5nICRkZWZhdWx0aG9zdCA9IG51bGwpOiBcc3RkQ2xhc3MKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX2hlYWRlcmluZm8oJGltYXBfc3RyZWFtLCAkbXNnX251bWJlciwgJGZyb21sZW5ndGgsICRzdWJqZWN0bGVuZ3RoLCAkZGVmYXVsdGhvc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGUgYSBNSU1FIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGdpdmVuIGVudmVsb3BlCiAqIGFuZCBib2R5IHNlY3Rpb25zLgogKgogKiBAcGFyYW0gYXJyYXkgJGVudmVsb3BlIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlciBmaWVsZHMuIFZhbGlkIGtleXMgYXJlOiAicmVtYWlsIiwKICogInJldHVybl9wYXRoIiwgImRhdGUiLCAiZnJvbSIsICJyZXBseV90byIsICJpbl9yZXBseV90byIsICJzdWJqZWN0IiwKICogInRvIiwgImNjIiwgImJjYyIgYW5kICJtZXNzYWdlX2lkIiwgd2hpY2ggc2V0IHRoZSByZXNwZWN0aXZlIG1lc3NhZ2UgaGVhZGVycyB0byB0aGUgZ2l2ZW4gc3RyaW5nLgogKiBUbyBzZXQgYWRkaXRpb25hbCBoZWFkZXJzLCB0aGUga2V5ICJjdXN0b21faGVhZGVycyIgaXMgc3VwcG9ydGVkLCB3aGljaCBleHBlY3RzCiAqIGFuIGFycmF5IG9mIHRob3NlIGhlYWRlcnMsIGUuZy4gWyJVc2VyLUFnZW50OiBNeSBNYWlsIENsaWVudCJdLgogKiBAcGFyYW0gYXJyYXkgJGJvZHkgQW4gaW5kZXhlZCBhcnJheSBvZiBib2RpZXMuIFRoZSBmaXJzdCBib2R5IGlzIHRoZSBtYWluIGJvZHkgb2YgdGhlIG1lc3NhZ2U7CiAqIG9ubHkgaWYgaXQgaGFzIGEgdHlwZSBvZiBUWVBFTVVMVElQQVJULCBmdXJ0aGVyIGJvZGllcwogKiBhcmUgcHJvY2Vzc2VkOyB0aGVzZSBib2RpZXMgY29uc3RpdHV0ZSB0aGUgYm9kaWVzIG9mIHRoZSBwYXJ0cy4KICoKICoKICogQm9keSBBcnJheSBTdHJ1Y3R1cmUKICoKICoKICoKICogS2V5CiAqIFR5cGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogdHlwZQogKiBpbnQKICoKICogVGhlIE1JTUUgdHlwZS4KICogT25lIG9mIFRZUEVURVhUIChkZWZhdWx0KSwgVFlQRU1VTFRJUEFSVCwKICogVFlQRU1FU1NBR0UsIFRZUEVBUFBMSUNBVElPTiwKICogVFlQRUFVRElPLCBUWVBFSU1BR0UsCiAqIFRZUEVNT0RFTCBvciBUWVBFT1RIRVIuCiAqCiAqCiAqCiAqIGVuY29kaW5nCiAqIGludAogKgogKiBUaGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy4KICogT25lIG9mIEVOQzdCSVQgKGRlZmF1bHQpLCBFTkM4QklULAogKiBFTkNCSU5BUlksIEVOQ0JBU0U2NCwKICogRU5DUVVPVEVEUFJJTlRBQkxFIG9yIEVOQ09USEVSLgogKgogKgogKgogKiBjaGFyc2V0CiAqIHN0cmluZwogKiBUaGUgY2hhcnNldCBwYXJhbWV0ZXIgb2YgdGhlIE1JTUUgdHlwZS4KICoKICoKICogdHlwZS5wYXJhbWV0ZXJzCiAqIGFycmF5CiAqIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIENvbnRlbnQtVHlwZSBwYXJhbWV0ZXIgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcy4KICoKICoKICogc3VidHlwZQogKiBzdHJpbmcKICogVGhlIE1JTUUgc3VidHlwZSwgZS5nLiAnanBlZycgZm9yIFRZUEVJTUFHRS4KICoKICoKICogaWQKICogc3RyaW5nCiAqIFRoZSBDb250ZW50LUlELgogKgogKgogKiBkZXNjcmlwdGlvbgogKiBzdHJpbmcKICogVGhlIENvbnRlbnQtRGVzY3JpcHRpb24uCiAqCiAqCiAqIGRpc3Bvc2l0aW9uLnR5cGUKICogc3RyaW5nCiAqIFRoZSBDb250ZW50LURpc3Bvc2l0aW9uLCBlLmcuICdhdHRhY2htZW50Jy4KICoKICoKICogZGlzcG9zaXRpb24KICogYXJyYXkKICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgQ29udGVudC1EaXNwb3NpdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcy4KICoKICoKICogY29udGVudHMuZGF0YQogKiBzdHJpbmcKICogVGhlIHBheWxvYWQuCiAqCiAqCiAqIGxpbmVzCiAqIGludAogKiBUaGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpbiBsaW5lcy4KICoKICoKICogYnl0ZXMKICogaW50CiAqIFRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIGluIGJ5dGVzLgogKgogKgogKiBtZDUKICogc3RyaW5nCiAqIFRoZSBNRDUgY2hlY2tzdW0gb2YgdGhlIHBheWxvYWQuCiAqCiAqCiAqCiAqCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIE1JTUUgbWVzc2FnZSBhcyBzdHJpbmcuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9tYWlsX2NvbXBvc2UoYXJyYXkgJGVudmVsb3BlLCBhcnJheSAkYm9keSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbF9jb21wb3NlKCRlbnZlbG9wZSwgJGJvZHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb3BpZXMgbWFpbCBtZXNzYWdlcyBzcGVjaWZpZWQgYnkgbXNnbGlzdAogKiB0byBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1zZ2xpc3QgbXNnbGlzdCBpcyBhIHJhbmdlIG5vdCBqdXN0IG1lc3NhZ2UKICogbnVtYmVycyAoYXMgZGVzY3JpYmVkIGluIFJGQzIwNjApLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGlzIGEgYml0bWFzayBvZiBvbmUgb3IgbW9yZSBvZgogKgogKgogKgogKiBDUF9VSUQgLSB0aGUgc2VxdWVuY2UgbnVtYmVycyBjb250YWluIFVJRFMKICoKICoKICoKICoKICogQ1BfTU9WRSAtIERlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbQogKiB0aGUgY3VycmVudCBtYWlsYm94IGFmdGVyIGNvcHlpbmcKICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWxfY29weSgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbXNnbGlzdCwgc3RyaW5nICRtYWlsYm94LCBpbnQgJG9wdGlvbnMgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbF9jb3B5KCRpbWFwX3N0cmVhbSwgJG1zZ2xpc3QsICRtYWlsYm94LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNb3ZlcyBtYWlsIG1lc3NhZ2VzIHNwZWNpZmllZCBieSBtc2dsaXN0IHRvIHRoZQogKiBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1zZ2xpc3QgbXNnbGlzdCBpcyBhIHJhbmdlIG5vdCBqdXN0IG1lc3NhZ2UgbnVtYmVycwogKiAoYXMgZGVzY3JpYmVkIGluIFJGQzIwNjApLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIGludCAkb3B0aW9ucyBvcHRpb25zIGlzIGEgYml0bWFzayBhbmQgbWF5IGNvbnRhaW4gdGhlIHNpbmdsZSBvcHRpb246CiAqCiAqCiAqCiAqIENQX1VJRCAtIHRoZSBzZXF1ZW5jZSBudW1iZXJzIGNvbnRhaW4gVUlEUwogKgogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfbWFpbF9tb3ZlKCRpbWFwX3N0cmVhbSwgc3RyaW5nICRtc2dsaXN0LCBzdHJpbmcgJG1haWxib3gsIGludCAkb3B0aW9ucyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9tYWlsX21vdmUoJGltYXBfc3RyZWFtLCAkbXNnbGlzdCwgJG1haWxib3gsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHNlbmRpbmcgb2YgZW1haWxzIHdpdGggY29ycmVjdCBoYW5kbGluZyBvZgogKiBDYyBhbmQgQmNjIHJlY2VpdmVycy4KICoKICogVGhlIHBhcmFtZXRlcnMgdG8sIGNjCiAqIGFuZCBiY2MgYXJlIGFsbCBzdHJpbmdzIGFuZCBhcmUgYWxsIHBhcnNlZAogKiBhcyBSRkM4MjIgYWRkcmVzcyBsaXN0cy4KICoKICogQHBhcmFtIHN0cmluZyAkdG8gVGhlIHJlY2VpdmVyCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIG1haWwgc3ViamVjdAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtYWlsIGJvZHksIHNlZSBpbWFwX21haWxfY29tcG9zZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2hlYWRlcnMgQXMgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBoZWFkZXJzIHRvIGJlIHNldCBvbiB0aGUgbWFpbAogKiBAcGFyYW0gc3RyaW5nICRjYwogKiBAcGFyYW0gc3RyaW5nICRiY2MgVGhlIHJlY2VpdmVycyBzcGVjaWZpZWQgaW4gYmNjIHdpbGwgZ2V0IHRoZQogKiBtYWlsLCBidXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGhlYWRlcnMuCiAqIEBwYXJhbSBzdHJpbmcgJHJwYXRoIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHJldHVybiBwYXRoIHVwb24gbWFpbCBkZWxpdmVyeSBmYWlsdXJlLgogKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIFBIUCBhcyBhIG1haWwgY2xpZW50IGZvciBtdWx0aXBsZSB1c2Vycy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWwoc3RyaW5nICR0bywgc3RyaW5nICRzdWJqZWN0LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkYWRkaXRpb25hbF9oZWFkZXJzID0gbnVsbCwgc3RyaW5nICRjYyA9IG51bGwsIHN0cmluZyAkYmNjID0gbnVsbCwgc3RyaW5nICRycGF0aCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9tYWlsKCR0bywgJHN1YmplY3QsICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzLCAkY2MsICRiY2MsICRycGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDaGVja3MgdGhlIGN1cnJlbnQgbWFpbGJveCBzdGF0dXMgb24gdGhlIHNlcnZlci4gSXQgaXMgc2ltaWxhciB0bwogKiBpbWFwX3N0YXR1cywgYnV0IHdpbGwgYWRkaXRpb25hbGx5IHN1bSB1cCB0aGUgc2l6ZSBvZgogKiBhbGwgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gsIHdoaWNoIHdpbGwgdGFrZSBzb21lIGFkZGl0aW9uYWwgdGltZSB0bwogKiBleGVjdXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHJldHVybiBcc3RkQ2xhc3MgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqCiAqIE1haWxib3ggcHJvcGVydGllcwogKgogKgogKgogKiBEYXRlCiAqIGRhdGUgb2YgbGFzdCBjaGFuZ2UgKGN1cnJlbnQgZGF0ZXRpbWUpCiAqCiAqCiAqIERyaXZlcgogKiBkcml2ZXIKICoKICoKICogTWFpbGJveAogKiBuYW1lIG9mIHRoZSBtYWlsYm94CiAqCiAqCiAqIE5tc2dzCiAqIG51bWJlciBvZiBtZXNzYWdlcwogKgogKgogKiBSZWNlbnQKICogbnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlcwogKgogKgogKiBVbnJlYWQKICogbnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlcwogKgogKgogKiBEZWxldGVkCiAqIG51bWJlciBvZiBkZWxldGVkIG1lc3NhZ2VzCiAqCiAqCiAqIFNpemUKICogbWFpbGJveCBzaXplCiAqCiAqCiAqCiAqCiAqCiAqIFJldHVybnMgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX21haWxib3htc2dpbmZvKCRpbWFwX3N0cmVhbSk6IFxzdGRDbGFzcwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbWFpbGJveG1zZ2luZm8oJGltYXBfc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGVjb2RlIGEgbW9kaWZpZWQgVVRGLTcgKGFzIHNwZWNpZmllZCBpbiBSRkMgMjA2MCwgc2VjdGlvbiA1LjEuMykgc3RyaW5nIHRvIFVURi04LgogKgogKiBAcGFyYW0gc3RyaW5nICRpbiBBIHN0cmluZyBlbmNvZGVkIGluIG1vZGlmaWVkIFVURi03LgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGluIGNvbnZlcnRlZCB0byBVVEYtOC4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX211dGY3X3RvX3V0Zjgoc3RyaW5nICRpbik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbXV0ZjdfdG9fdXRmOCgkaW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIGN1cnJlbnQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEByZXR1cm4gaW50IFJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBjdXJyZW50IG1haWxib3gsIGFzIGFuIGludGVnZXIuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9udW1fbXNnKCRpbWFwX3N0cmVhbSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfbnVtX21zZygkaW1hcF9zdHJlYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBPcGVucyBhbiBJTUFQIHN0cmVhbSB0byBhIG1haWxib3guCiAqCiAqIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBvcGVuIHN0cmVhbXMgdG8gUE9QMyBhbmQKICogTk5UUCBzZXJ2ZXJzLCBidXQgc29tZSBmdW5jdGlvbnMgYW5kIGZlYXR1cmVzIGFyZSBvbmx5CiAqIGF2YWlsYWJsZSBvbiBJTUFQIHNlcnZlcnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggQSBtYWlsYm94IG5hbWUgY29uc2lzdHMgb2YgYSBzZXJ2ZXIgYW5kIGEgbWFpbGJveCBwYXRoIG9uIHRoaXMgc2VydmVyLgogKiBUaGUgc3BlY2lhbCBuYW1lIElOQk9YIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgdXNlcnMKICogcGVyc29uYWwgbWFpbGJveC4gTWFpbGJveCBuYW1lcyB0aGF0IGNvbnRhaW4gaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXJzCiAqIGJlc2lkZXMgdGhvc2UgaW4gdGhlIHByaW50YWJsZSBBU0NJSSBzcGFjZSBoYXZlIHRvIGJlIGVuY29kZWQgd2l0aAogKiBpbWFwX3V0ZjdfZW5jb2RlLgogKgogKiBUaGUgc2VydmVyIHBhcnQsIHdoaWNoIGlzIGVuY2xvc2VkIGluICd7JyBhbmQgJ30nLCBjb25zaXN0cyBvZiB0aGUgc2VydmVycwogKiBuYW1lIG9yIGlwIGFkZHJlc3MsIGFuIG9wdGlvbmFsIHBvcnQgKHByZWZpeGVkIGJ5ICc6JyksIGFuZCBhbiBvcHRpb25hbAogKiBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIChwcmVmaXhlZCBieSAnLycpLgogKgogKiBUaGUgc2VydmVyIHBhcnQgaXMgbWFuZGF0b3J5IGluIGFsbCBtYWlsYm94CiAqIHBhcmFtZXRlcnMuCiAqCiAqIEFsbCBuYW1lcyB3aGljaCBzdGFydCB3aXRoIHsgYXJlIHJlbW90ZSBuYW1lcywgYW5kIGFyZQogKiBpbiB0aGUgZm9ybSAieyIgcmVtb3RlX3N5c3RlbV9uYW1lIFsiOiIgcG9ydF0gW2ZsYWdzXSAifSIKICogW21haWxib3hfbmFtZV0gd2hlcmU6CiAqCiAqCiAqCiAqIHJlbW90ZV9zeXN0ZW1fbmFtZSAtIEludGVybmV0IGRvbWFpbiBuYW1lIG9yCiAqIGJyYWNrZXRlZCBJUCBhZGRyZXNzIG9mIHNlcnZlci4KICoKICoKICoKICoKICogcG9ydCAtIG9wdGlvbmFsIFRDUCBwb3J0IG51bWJlciwgZGVmYXVsdCBpcyB0aGUKICogZGVmYXVsdCBwb3J0IGZvciB0aGF0IHNlcnZpY2UKICoKICoKICoKICoKICogZmxhZ3MgLSBvcHRpb25hbCBmbGFncywgc2VlIGZvbGxvd2luZyB0YWJsZS4KICoKICoKICoKICoKICogbWFpbGJveF9uYW1lIC0gcmVtb3RlIG1haWxib3ggbmFtZSwgZGVmYXVsdCBpcyBJTkJPWAogKgogKgogKgogKgogKgogKiBPcHRpb25hbCBmbGFncyBmb3IgbmFtZXMKICoKICoKICoKICogRmxhZwogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAvc2VydmljZT1zZXJ2aWNlCiAqIG1haWxib3ggYWNjZXNzIHNlcnZpY2UsIGRlZmF1bHQgaXMgImltYXAiCiAqCiAqCiAqIC91c2VyPXVzZXIKICogcmVtb3RlIHVzZXIgbmFtZSBmb3IgbG9naW4gb24gdGhlIHNlcnZlcgogKgogKgogKiAvYXV0aHVzZXI9dXNlcgogKiByZW1vdGUgYXV0aGVudGljYXRpb24gdXNlcjsgaWYgc3BlY2lmaWVkIHRoaXMgaXMgdGhlIHVzZXIgbmFtZQogKiB3aG9zZSBwYXNzd29yZCBpcyB1c2VkIChlLmcuIGFkbWluaXN0cmF0b3IpCiAqCiAqCiAqIC9hbm9ueW1vdXMKICogcmVtb3RlIGFjY2VzcyBhcyBhbm9ueW1vdXMgdXNlcgogKgogKgogKiAvZGVidWcKICogcmVjb3JkIHByb3RvY29sIHRlbGVtZXRyeSBpbiBhcHBsaWNhdGlvbidzIGRlYnVnIGxvZwogKgogKgogKiAvc2VjdXJlCiAqIGRvIG5vdCB0cmFuc21pdCBhIHBsYWludGV4dCBwYXNzd29yZCBvdmVyIHRoZSBuZXR3b3JrCiAqCiAqCiAqIC9pbWFwLCAvaW1hcDIsCiAqIC9pbWFwMmJpcywgL2ltYXA0LAogKiAvaW1hcDRyZXYxCiAqIGVxdWl2YWxlbnQgdG8gL3NlcnZpY2U9aW1hcAogKgogKgogKiAvcG9wMwogKiBlcXVpdmFsZW50IHRvIC9zZXJ2aWNlPXBvcDMKICoKICoKICogL25udHAKICogZXF1aXZhbGVudCB0byAvc2VydmljZT1ubnRwCiAqCiAqCiAqIC9ub3JzaAogKiBkbyBub3QgdXNlIHJzaCBvciBzc2ggdG8gZXN0YWJsaXNoIGEgcHJlYXV0aGVudGljYXRlZCBJTUFQCiAqIHNlc3Npb24KICoKICoKICogL3NzbAogKiB1c2UgdGhlIFNlY3VyZSBTb2NrZXQgTGF5ZXIgdG8gZW5jcnlwdCB0aGUgc2Vzc2lvbgogKgogKgogKiAvdmFsaWRhdGUtY2VydAogKiB2YWxpZGF0ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBUTFMvU1NMIHNlcnZlciAodGhpcyBpcyB0aGUgZGVmYXVsdAogKiBiZWhhdmlvcikKICoKICoKICogL25vdmFsaWRhdGUtY2VydAogKiBkbyBub3QgdmFsaWRhdGUgY2VydGlmaWNhdGVzIGZyb20gVExTL1NTTCBzZXJ2ZXIsIG5lZWRlZCBpZgogKiBzZXJ2ZXIgdXNlcyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMKICoKICoKICogL3RscwogKiBmb3JjZSB1c2Ugb2Ygc3RhcnQtVExTIHRvIGVuY3J5cHQgdGhlIHNlc3Npb24sIGFuZCByZWplY3QKICogY29ubmVjdGlvbiB0byBzZXJ2ZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQKICoKICoKICogL25vdGxzCiAqIGRvIG5vdCBkbyBzdGFydC1UTFMgdG8gZW5jcnlwdCB0aGUgc2Vzc2lvbiwgZXZlbiB3aXRoIHNlcnZlcnMKICogdGhhdCBzdXBwb3J0IGl0CiAqCiAqCiAqIC9yZWFkb25seQogKiByZXF1ZXN0IHJlYWQtb25seSBtYWlsYm94IG9wZW4gKElNQVAgb25seTsgaWdub3JlZCBvbiBOTlRQLCBhbmQKICogYW4gZXJyb3Igd2l0aCBTTVRQIGFuZCBQT1AzKQogKgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgdXNlciBuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXJuYW1lCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgVGhlIG9wdGlvbnMgYXJlIGEgYml0IG1hc2sgd2l0aCBvbmUgb3IgbW9yZSBvZgogKiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBPUF9SRUFET05MWSAtIE9wZW4gbWFpbGJveCByZWFkLW9ubHkKICoKICoKICoKICoKICogT1BfQU5PTllNT1VTIC0gRG9uJ3QgdXNlIG9yIHVwZGF0ZSBhCiAqIC5uZXdzcmMgZm9yIG5ld3MgKE5OVFAgb25seSkKICoKICoKICoKICoKICogT1BfSEFMRk9QRU4gLSBGb3IgSU1BUAogKiBhbmQgTk5UUCBuYW1lcywgb3BlbiBhIGNvbm5lY3Rpb24gYnV0CiAqIGRvbid0IG9wZW4gYSBtYWlsYm94LgogKgogKgogKgogKgogKiBDTF9FWFBVTkdFIC0gRXhwdW5nZSBtYWlsYm94IGF1dG9tYXRpY2FsbHkgdXBvbiBtYWlsYm94IGNsb3NlCiAqIChzZWUgYWxzbyBpbWFwX2RlbGV0ZSBhbmQKICogaW1hcF9leHB1bmdlKQogKgogKgogKgogKgogKiBPUF9ERUJVRyAtIERlYnVnIHByb3RvY29sIG5lZ290aWF0aW9ucwogKgogKgogKgogKgogKiBPUF9TSE9SVENBQ0hFIC0gU2hvcnQgKGVsdC1vbmx5KSBjYWNoaW5nCiAqCiAqCiAqCiAqCiAqIE9QX1NJTEVOVCAtIERvbid0IHBhc3MgdXAgZXZlbnRzIChpbnRlcm5hbCB1c2UpCiAqCiAqCiAqCiAqCiAqIE9QX1BST1RPVFlQRSAtIFJldHVybiBkcml2ZXIgcHJvdG90eXBlCiAqCiAqCiAqCiAqCiAqIE9QX1NFQ1VSRSAtIERvbid0IGRvIG5vbi1zZWN1cmUgYXV0aGVudGljYXRpb24KICoKICoKICoKICogQHBhcmFtIGludCAkbl9yZXRyaWVzIE51bWJlciBvZiBtYXhpbXVtIGNvbm5lY3QgYXR0ZW1wdHMKICogQHBhcmFtIGFycmF5fG51bGwgJHBhcmFtcyBDb25uZWN0aW9uIHBhcmFtZXRlcnMsIHRoZSBmb2xsb3dpbmcgKHN0cmluZykga2V5cyBtYXliZSB1c2VkCiAqIHRvIHNldCBvbmUgb3IgbW9yZSBjb25uZWN0aW9uIHBhcmFtZXRlcnM6CiAqCiAqCiAqCiAqIERJU0FCTEVfQVVUSEVOVElDQVRPUiAtIERpc2FibGUgYXV0aGVudGljYXRpb24gcHJvcGVydGllcwogKgogKgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gSU1BUCBzdHJlYW0gb24gc3VjY2Vzcy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX29wZW4oc3RyaW5nICRtYWlsYm94LCBzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBpbnQgJG9wdGlvbnMgPSAwLCBpbnQgJG5fcmV0cmllcyA9IDAsID9hcnJheSAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX29wZW4oJG1haWxib3gsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkb3B0aW9ucywgJG5fcmV0cmllcywgJHBhcmFtcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmVuYW1lcyBvbiBvbGQgbWFpbGJveCB0byBuZXcgbWFpbGJveCAoc2VlCiAqIGltYXBfb3BlbiBmb3IgdGhlIGZvcm1hdCBvZgogKiBtYm94IG5hbWVzKS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9tYm94IFRoZSBvbGQgbWFpbGJveCBuYW1lLCBzZWUgaW1hcF9vcGVuIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19tYm94IFRoZSBuZXcgbWFpbGJveCBuYW1lLCBzZWUgaW1hcF9vcGVuIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9yZW5hbWVtYWlsYm94KCRpbWFwX3N0cmVhbSwgc3RyaW5nICRvbGRfbWJveCwgc3RyaW5nICRuZXdfbWJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3JlbmFtZW1haWxib3goJGltYXBfc3RyZWFtLCAkb2xkX21ib3gsICRuZXdfbWJveCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTYXZlcyBhIHBhcnQgb3IgdGhlIHdob2xlIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkZmlsZSBUaGUgcGF0aCB0byB0aGUgc2F2ZWQgZmlsZSBhcyBhIHN0cmluZywgb3IgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IKICogcmV0dXJuZWQgYnkgZm9wZW4uCiAqIEBwYXJhbSBpbnQgJG1zZ19udW1iZXIgVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIEBwYXJhbSBzdHJpbmcgJHBhcnRfbnVtYmVyIFRoZSBwYXJ0IG51bWJlci4gSXQgaXMgYSBzdHJpbmcgb2YgaW50ZWdlcnMgZGVsaW1pdGVkIGJ5IHBlcmlvZCB3aGljaAogKiBpbmRleCBpbnRvIGEgYm9keSBwYXJ0IGxpc3QgYXMgcGVyIHRoZSBJTUFQNCBzcGVjaWZpY2F0aW9uCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQSBiaXRtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKICoKICoKICoKICogRlRfVUlEIC0gVGhlIG1zZ19udW1iZXIgaXMgYSBVSUQKICoKICoKICoKICoKICogRlRfUEVFSyAtIERvIG5vdCBzZXQgdGhlIFxTZWVuIGZsYWcgaWYKICogbm90IGFscmVhZHkgc2V0CiAqCiAqCiAqCiAqCiAqIEZUX0lOVEVSTkFMIC0gVGhlIHJldHVybiBzdHJpbmcgaXMgaW4KICogaW50ZXJuYWwgZm9ybWF0LCB3aWxsIG5vdCBjYW5vbmljYWxpemUgdG8gQ1JMRi4KICoKICoKICoKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3NhdmVib2R5KCRpbWFwX3N0cmVhbSwgJGZpbGUsIGludCAkbXNnX251bWJlciwgc3RyaW5nICRwYXJ0X251bWJlciA9ICIiLCBpbnQgJG9wdGlvbnMgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2F2ZWJvZHkoJGltYXBfc3RyZWFtLCAkZmlsZSwgJG1zZ19udW1iZXIsICRwYXJ0X251bWJlciwgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW1hcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBhbiB1cHBlciBsaW1pdCBxdW90YSBvbiBhIHBlciBtYWlsYm94IGJhc2lzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZyAkcXVvdGFfcm9vdCBUaGUgbWFpbGJveCB0byBoYXZlIGEgcXVvdGEgc2V0LiBUaGlzIHNob3VsZCBmb2xsb3cgdGhlIElNQVAgc3RhbmRhcmQKICogZm9ybWF0IGZvciBhIG1haWxib3g6IHVzZXIubmFtZS4KICogQHBhcmFtIGludCAkcXVvdGFfbGltaXQgVGhlIG1heGltdW0gc2l6ZSAoaW4gS0IpIGZvciB0aGUgcXVvdGFfcm9vdAogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfc2V0X3F1b3RhKCRpbWFwX3N0cmVhbSwgc3RyaW5nICRxdW90YV9yb290LCBpbnQgJHF1b3RhX2xpbWl0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2V0X3F1b3RhKCRpbWFwX3N0cmVhbSwgJHF1b3RhX3Jvb3QsICRxdW90YV9saW1pdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBBQ0wgZm9yIGEgZ2l2aW5nIG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHBhcmFtIHN0cmluZyAkaWQgVGhlIHVzZXIgdG8gZ2l2ZSB0aGUgcmlnaHRzIHRvLgogKiBAcGFyYW0gc3RyaW5nICRyaWdodHMgVGhlIHJpZ2h0cyB0byBnaXZlIHRvIHRoZSB1c2VyLiBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIGRlbGV0ZQogKiBhY2wuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9zZXRhY2woJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gsIHN0cmluZyAkaWQsIHN0cmluZyAkcmlnaHRzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGltYXBfc2V0YWNsKCRpbWFwX3N0cmVhbSwgJG1haWxib3gsICRpZCwgJHJpZ2h0cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDYXVzZXMgYSBzdG9yZSB0byBhZGQgdGhlIHNwZWNpZmllZCBmbGFnIHRvIHRoZQogKiBmbGFncyBzZXQgZm9yIHRoZSBtZXNzYWdlcyBpbiB0aGUgc3BlY2lmaWVkCiAqIHNlcXVlbmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIHN0cmluZyAkc2VxdWVuY2UgQSBzZXF1ZW5jZSBvZiBtZXNzYWdlIG51bWJlcnMuIFlvdSBjYW4gZW51bWVyYXRlIGRlc2lyZWQgbWVzc2FnZXMKICogd2l0aCB0aGUgWCxZIHN5bnRheCwgb3IgcmV0cmlldmUgYWxsIG1lc3NhZ2VzCiAqIHdpdGhpbiBhbiBpbnRlcnZhbCB3aXRoIHRoZSBYOlkgc3ludGF4CiAqIEBwYXJhbSBzdHJpbmcgJGZsYWcgVGhlIGZsYWdzIHdoaWNoIHlvdSBjYW4gc2V0IGFyZSBcU2VlbiwKICogXEFuc3dlcmVkLCBcRmxhZ2dlZCwKICogXERlbGV0ZWQsIGFuZCBcRHJhZnQgYXMKICogZGVmaW5lZCBieSBSRkMyMDYwLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEEgYml0IG1hc2sgdGhhdCBtYXkgY29udGFpbiB0aGUgc2luZ2xlIG9wdGlvbjoKICoKICoKICoKICogU1RfVUlEIC0gVGhlIHNlcXVlbmNlIGFyZ3VtZW50IGNvbnRhaW5zIFVJRHMKICogaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF9zZXRmbGFnX2Z1bGwoJGltYXBfc3RyZWFtLCBzdHJpbmcgJHNlcXVlbmNlLCBzdHJpbmcgJGZsYWcsIGludCAkb3B0aW9ucyA9IE5JTCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3NldGZsYWdfZnVsbCgkaW1hcF9zdHJlYW0sICRzZXF1ZW5jZSwgJGZsYWcsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgYW5kIHNvcnRzIG1lc3NhZ2UgbnVtYmVycyBieSB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJGNyaXRlcmlhIENyaXRlcmlhIGNhbiBiZSBvbmUgKGFuZCBvbmx5IG9uZSkgb2YgdGhlIGZvbGxvd2luZzoKICoKICoKICoKICogU09SVERBVEUgLSBtZXNzYWdlIERhdGUKICoKICoKICoKICoKICogU09SVEFSUklWQUwgLSBhcnJpdmFsIGRhdGUKICoKICoKICoKICoKICogU09SVEZST00gLSBtYWlsYm94IGluIGZpcnN0IEZyb20gYWRkcmVzcwogKgogKgogKgogKgogKiBTT1JUU1VCSkVDVCAtIG1lc3NhZ2Ugc3ViamVjdAogKgogKgogKgogKgogKiBTT1JUVE8gLSBtYWlsYm94IGluIGZpcnN0IFRvIGFkZHJlc3MKICoKICoKICoKICoKICogU09SVENDIC0gbWFpbGJveCBpbiBmaXJzdCBjYyBhZGRyZXNzCiAqCiAqCiAqCiAqCiAqIFNPUlRTSVpFIC0gc2l6ZSBvZiBtZXNzYWdlIGluIG9jdGV0cwogKgogKgogKgogKiBAcGFyYW0gaW50ICRyZXZlcnNlIFNldCB0aGlzIHRvIDEgZm9yIHJldmVyc2Ugc29ydGluZwogKiBAcGFyYW0gaW50ICRvcHRpb25zIFRoZSBvcHRpb25zIGFyZSBhIGJpdG1hc2sgb2Ygb25lIG9yIG1vcmUgb2YgdGhlCiAqIGZvbGxvd2luZzoKICoKICoKICoKICogU0VfVUlEIC0gUmV0dXJuIFVJRHMgaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzCiAqCiAqCiAqCiAqCiAqIFNFX05PUFJFRkVUQ0ggLSBEb24ndCBwcmVmZXRjaCBzZWFyY2hlZCBtZXNzYWdlcwogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzZWFyY2hfY3JpdGVyaWEgSU1BUDItZm9ybWF0IHNlYXJjaCBjcml0ZXJpYSBzdHJpbmcuIEZvciBkZXRhaWxzIHNlZQogKiBpbWFwX3NlYXJjaC4KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBNSU1FIGNoYXJhY3RlciBzZXQgdG8gdXNlIHdoZW4gc29ydGluZyBzdHJpbmdzLgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBudW1iZXJzIHNvcnRlZCBieSB0aGUgZ2l2ZW4KICogcGFyYW1ldGVycy4KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3NvcnQoJGltYXBfc3RyZWFtLCBpbnQgJGNyaXRlcmlhLCBpbnQgJHJldmVyc2UsIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkc2VhcmNoX2NyaXRlcmlhID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF9zb3J0KCRpbWFwX3N0cmVhbSwgJGNyaXRlcmlhLCAkcmV2ZXJzZSwgJG9wdGlvbnMsICRzZWFyY2hfY3JpdGVyaWEsICRjaGFyc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3Vic2NyaWJlIHRvIGEgbmV3IG1haWxib3guCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcF9zdHJlYW0gQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkKICogaW1hcF9vcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IFRoZSBtYWlsYm94IG5hbWUsIHNlZSBpbWFwX29wZW4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3N1YnNjcmliZSgkaW1hcF9zdHJlYW0sIHN0cmluZyAkbWFpbGJveCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3N1YnNjcmliZSgkaW1hcF9zdHJlYW0sICRtYWlsYm94KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgYSB0cmVlIG9mIGEgdGhyZWFkZWQgbWVzc2FnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMKICogQHJldHVybiBhcnJheSBpbWFwX3RocmVhZCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcKICogYSB0cmVlIG9mIG1lc3NhZ2VzIHRocmVhZGVkIGJ5IFJFRkVSRU5DRVMuCiAqCiAqIEV2ZXJ5IG1lc3NhZ2UgaW4gdGhlIGN1cnJlbnQgbWFpbGJveCB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IHRocmVlIGVudHJpZXMKICogaW4gdGhlIHJlc3VsdGluZyBhcnJheToKICoKICoKICogJHRocmVhZFsiWFgubnVtIl0gLSBjdXJyZW50IG1lc3NhZ2UgbnVtYmVyCiAqCiAqCiAqICR0aHJlYWRbIlhYLm5leHQiXQogKgogKgogKiAkdGhyZWFkWyJYWC5icmFuY2giXQogKgogKgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdGhyZWFkKCRpbWFwX3N0cmVhbSwgaW50ICRvcHRpb25zID0gU0VfRlJFRSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF90aHJlYWQoJGltYXBfc3RyZWFtLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgb3IgZmV0Y2hlcyB0aGUgaW1hcCB0aW1lb3V0LgogKgogKiBAcGFyYW0gaW50ICR0aW1lb3V0X3R5cGUgT25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIElNQVBfT1BFTlRJTUVPVVQsCiAqIElNQVBfUkVBRFRJTUVPVVQsCiAqIElNQVBfV1JJVEVUSU1FT1VULCBvcgogKiBJTUFQX0NMT1NFVElNRU9VVC4KICogQHBhcmFtIGludCAkdGltZW91dCBUaGUgdGltZW91dCwgaW4gc2Vjb25kcy4KICogQHJldHVybiBtaXhlZCBJZiB0aGUgdGltZW91dCBwYXJhbWV0ZXIgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uCiAqIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBJZiB0aW1lb3V0ICBpcyBub3QgcHJvdmlkZWQgb3IgZXZhbHVhdGVzIHRvIC0xLAogKiB0aGUgY3VycmVudCB0aW1lb3V0IHZhbHVlIG9mIHRpbWVvdXRfdHlwZSBpcwogKiByZXR1cm5lZCBhcyBhbiBpbnRlZ2VyLgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdGltZW91dChpbnQgJHRpbWVvdXRfdHlwZSwgaW50ICR0aW1lb3V0ID0gLTEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF90aW1lb3V0KCR0aW1lb3V0X3R5cGUsICR0aW1lb3V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVtb3ZlcyB0aGUgZGVsZXRpb24gZmxhZyBmb3IgYSBzcGVjaWZpZWQgbWVzc2FnZSwgd2hpY2ggaXMgc2V0IGJ5CiAqIGltYXBfZGVsZXRlIG9yIGltYXBfbWFpbF9tb3ZlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXBfc3RyZWFtIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5CiAqIGltYXBfb3Blbi4KICogQHBhcmFtIGludCAkbXNnX251bWJlciBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHRocm93cyBJbWFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbWFwX3VuZGVsZXRlKCRpbWFwX3N0cmVhbSwgaW50ICRtc2dfbnVtYmVyLCBpbnQgJGZsYWdzID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3VuZGVsZXRlKCRpbWFwX3N0cmVhbSwgJG1zZ19udW1iZXIsICRmbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbWFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBzcGVjaWZpZWQgbWFpbGJveC4KICoKICogQHBhcmFtIHJlc291cmNlICRpbWFwX3N0cmVhbSBBbiBJTUFQIHN0cmVhbSByZXR1cm5lZCBieQogKiBpbWFwX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggVGhlIG1haWxib3ggbmFtZSwgc2VlIGltYXBfb3BlbiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiBAdGhyb3dzIEltYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGltYXBfdW5zdWJzY3JpYmUoJGltYXBfc3RyZWFtLCBzdHJpbmcgJG1haWxib3gpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW1hcF91bnN1YnNjcmliZSgkaW1hcF9zdHJlYW0sICRtYWlsYm94KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVuY29kZSBhIFVURi04IHN0cmluZyB0byBtb2RpZmllZCBVVEYtNyAoYXMgc3BlY2lmaWVkIGluIFJGQyAyMDYwLCBzZWN0aW9uIDUuMS4zKS4KICoKICogQHBhcmFtIHN0cmluZyAkaW4gQSBVVEYtOCBlbmNvZGVkIHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBpbiBjb252ZXJ0ZWQgdG8gbW9kaWZpZWQgVVRGLTcuCiAqIEB0aHJvd3MgSW1hcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW1hcF91dGY4X3RvX211dGY3KHN0cmluZyAkaW4pOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbWFwX3V0ZjhfdG9fbXV0ZjcoJGluKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEltYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/info.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbmZvRXhjZXB0aW9uOwoKLyoqCiAqIFNldHMgdGhlIHByb2Nlc3MgdGl0bGUgdmlzaWJsZSBpbiB0b29scyBzdWNoIGFzIHRvcCBhbmQKICogcHMuIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaW4KICogQ0xJIG1vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIFRoZSBuZXcgdGl0bGUuCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY2xpX3NldF9wcm9jZXNzX3RpdGxlKHN0cmluZyAkdGl0bGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2xpX3NldF9wcm9jZXNzX3RpdGxlKCR0aXRsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMb2FkcyB0aGUgUEhQIGV4dGVuc2lvbiBnaXZlbiBieSB0aGUgcGFyYW1ldGVyCiAqIGxpYnJhcnkuCiAqCiAqIFVzZSBleHRlbnNpb25fbG9hZGVkIHRvIHRlc3Qgd2hldGhlciBhIGdpdmVuCiAqIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBvciBub3QuIFRoaXMgd29ya3Mgb24gYm90aCBidWlsdC1pbgogKiBleHRlbnNpb25zIGFuZCBkeW5hbWljYWxseSBsb2FkZWQgb25lcyAoZWl0aGVyIHRocm91Z2ggcGhwLmluaSBvcgogKiBkbCkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGxpYnJhcnkgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB0aGUgZmlsZW5hbWUgb2YgdGhlCiAqIGV4dGVuc2lvbiB0byBsb2FkIHdoaWNoIGFsc28gZGVwZW5kcyBvbiB5b3VyIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwKICogdGhlIHNvY2tldHMgZXh0ZW5zaW9uIChpZiBjb21waWxlZAogKiBhcyBhIHNoYXJlZCBtb2R1bGUsIG5vdCB0aGUgZGVmYXVsdCEpIHdvdWxkIGJlIGNhbGxlZAogKiBzb2NrZXRzLnNvIG9uIFVuaXggcGxhdGZvcm1zIHdoZXJlYXMgaXQgaXMgY2FsbGVkCiAqIHBocF9zb2NrZXRzLmRsbCBvbiB0aGUgV2luZG93cyBwbGF0Zm9ybS4KICoKICogVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIGxvYWRlZCBmcm9tIGRlcGVuZHMgb24geW91cgogKiBwbGF0Zm9ybToKICoKICogV2luZG93cyAtIElmIG5vdCBleHBsaWNpdGx5IHNldCBpbiB0aGUgcGhwLmluaSwgdGhlIGV4dGVuc2lvbiBpcwogKiBsb2FkZWQgZnJvbSBDOlxwaHA1XCBieSBkZWZhdWx0LgogKgogKiBVbml4IC0gSWYgbm90IGV4cGxpY2l0bHkgc2V0IGluIHRoZSBwaHAuaW5pLCB0aGUgZGVmYXVsdCBleHRlbnNpb24KICogZGlyZWN0b3J5IGRlcGVuZHMgb24KICoKICoKICoKICogd2hldGhlciBQSFAgaGFzIGJlZW4gYnVpbHQgd2l0aCAtLWVuYWJsZS1kZWJ1ZwogKiBvciBub3QKICoKICoKICoKICoKICogd2hldGhlciBQSFAgaGFzIGJlZW4gYnVpbHQgd2l0aCAoZXhwZXJpbWVudGFsKSBaVFMgKFplbmQgVGhyZWFkIFNhZmV0eSkKICogc3VwcG9ydCBvciBub3QKICoKICoKICoKICoKICogdGhlIGN1cnJlbnQgaW50ZXJuYWwgWkVORF9NT0RVTEVfQVBJX05PIChaZW5kCiAqIGludGVybmFsIG1vZHVsZSBBUEkgbnVtYmVyLCB3aGljaCBpcyBiYXNpY2FsbHkgdGhlIGRhdGUgb24gd2hpY2ggYQogKiBtYWpvciBtb2R1bGUgQVBJIGNoYW5nZSBoYXBwZW5lZCwgZS5nLiAyMDAxMDkwMSkKICoKICoKICoKICogVGFraW5nIGludG8gYWNjb3VudCB0aGUgYWJvdmUsIHRoZSBkaXJlY3RvcnkgdGhlbiBkZWZhdWx0cyB0bwogKiAmbHQ7aW5zdGFsbC1kaXImZ3Q7L2xpYi9waHAvZXh0ZW5zaW9ucy8gJmx0O2RlYnVnLW9yLW5vdCZndDstJmx0O3p0cy1vci1ub3QmZ3Q7LVpFTkRfTU9EVUxFX0FQSV9OTywKICogZS5nLgogKiAvdXNyL2xvY2FsL3BocC9saWIvcGhwL2V4dGVuc2lvbnMvZGVidWctbm9uLXp0cy0yMDAxMDkwMQogKiBvcgogKiAvdXNyL2xvY2FsL3BocC9saWIvcGhwL2V4dGVuc2lvbnMvbm8tZGVidWctenRzLTIwMDEwOTAxLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRsKHN0cmluZyAkbGlicmFyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkbCgkbGlicmFyeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgbWFpbiBzY3JpcHQgb2YgZXhlY3V0aW9uLgogKgogKiBJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lCiAqIG9mIGEgZGlmZmVyZW50IGZpbGUsIGNvbnNpZGVyIHVzaW5nIGZpbGVtdGltZS4KICoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgdGltZSBvZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gb2YgdGhlIGN1cnJlbnQKICogcGFnZS4gVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgVW5peCB0aW1lc3RhbXAsIHN1aXRhYmxlIGZvcgogKiBmZWVkaW5nIHRvIGRhdGUuCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0bGFzdG1vZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRsYXN0bW9kKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGdyb3VwIElEIG9mIHRoZSBjdXJyZW50IHNjcmlwdC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteWdpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteWdpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBzY3JpcHQuCiAqCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGN1cnJlbnQgc2NyaXB0J3MgaW5vZGUgYXMgYW4gaW50ZWdlci4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteWlub2RlKCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdldG15aW5vZGUoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcyBJRC4KICoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY3VycmVudCBQSFAgcHJvY2VzcyBJRC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteXBpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteXBpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB1c2VyIElEIG9mIHRoZSBjdXJyZW50IHNjcmlwdC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRteXVpZCgpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRteXVpZCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQYXJzZXMgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHNjcmlwdC4KICoKICogQHBhcmFtIHN0cmluZyAkb3B0aW9ucwogKiBAcGFyYW0gYXJyYXkgJGxvbmdvcHRzCiAqIEBwYXJhbSBpbnR8bnVsbCAkb3B0aW5kCiAqIEByZXR1cm4gYXJyYXl8YXJyYXl8YXJyYXkgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBvcHRpb24gLyBhcmd1bWVudCBwYWlycy4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRvcHQoc3RyaW5nICRvcHRpb25zLCBhcnJheSAkbG9uZ29wdHMgPSBudWxsLCA/aW50ICYkb3B0aW5kID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkb3B0aW5kICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRvcHQoJG9wdGlvbnMsICRsb25nb3B0cywgJG9wdGluZCk7CiAgICB9IGVsc2VpZiAoJGxvbmdvcHRzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRvcHQoJG9wdGlvbnMsICRsb25nb3B0cyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcZ2V0b3B0KCRvcHRpb25zKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHZhcm5hbWUgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5hbWUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhcyBhIHN0cmluZyBvbiBzdWNjZXNzLCBvciBhbgogKiBlbXB0eSBzdHJpbmcgZm9yIG51bGwgdmFsdWVzLiBSZXR1cm5zIEZBTFNFIGlmIHRoZQogKiBjb25maWd1cmF0aW9uIG9wdGlvbiBkb2Vzbid0IGV4aXN0LgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluaV9nZXQoc3RyaW5nICR2YXJuYW1lKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5pX2dldCgkdmFybmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgogKiB3aWxsIGtlZXAgdGhpcyBuZXcgdmFsdWUgZHVyaW5nIHRoZSBzY3JpcHQncyBleGVjdXRpb24sIGFuZCB3aWxsIGJlIHJlc3RvcmVkCiAqIGF0IHRoZSBzY3JpcHQncyBlbmRpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHZhcm5hbWUgTm90IGFsbCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgY2FuIGJlIGNoYW5nZWQgdXNpbmcKICogaW5pX3NldC4gVGhlcmUgaXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgb3B0aW9ucwogKiBpbiB0aGUgYXBwZW5kaXguCiAqIEBwYXJhbSBzdHJpbmd8aW50fGZsb2F0fGJvb2wgJG5ld3ZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBvcHRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG9sZCB2YWx1ZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluaV9zZXQoc3RyaW5nICR2YXJuYW1lLCAkbmV3dmFsdWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmlfc2V0KCR2YXJuYW1lLCAkbmV3dmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHByaW50cyBvdXQgdGhlIGNyZWRpdHMgbGlzdGluZyB0aGUgUEhQIGRldmVsb3BlcnMsCiAqIG1vZHVsZXMsIGV0Yy4gSXQgZ2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBIVE1MIGNvZGVzIHRvIGluc2VydAogKiB0aGUgaW5mb3JtYXRpb24gaW4gYSBwYWdlLgogKgogKiBAcGFyYW0gaW50ICRmbGFnIFRvIGdlbmVyYXRlIGEgY3VzdG9tIGNyZWRpdHMgcGFnZSwgeW91IG1heSB3YW50IHRvIHVzZSB0aGUKICogZmxhZyBwYXJhbWV0ZXIuCiAqCiAqCiAqIFByZS1kZWZpbmVkIHBocGNyZWRpdHMgZmxhZ3MKICoKICoKICoKICogbmFtZQogKiBkZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBDUkVESVRTX0FMTAogKgogKiBBbGwgdGhlIGNyZWRpdHMsIGVxdWl2YWxlbnQgdG8gdXNpbmc6IENSRURJVFNfRE9DUyArCiAqIENSRURJVFNfR0VORVJBTCArIENSRURJVFNfR1JPVVAgKwogKiBDUkVESVRTX01PRFVMRVMgKyBDUkVESVRTX0ZVTExQQUdFLgogKiBJdCBnZW5lcmF0ZXMgYSBjb21wbGV0ZSBzdGFuZC1hbG9uZSBIVE1MIHBhZ2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFncy4KICoKICoKICoKICogQ1JFRElUU19ET0NTCiAqIFRoZSBjcmVkaXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvbiB0ZWFtCiAqCiAqCiAqIENSRURJVFNfRlVMTFBBR0UKICoKICogVXN1YWxseSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIG90aGVyIGZsYWdzLiAgSW5kaWNhdGVzCiAqIHRoYXQgYSBjb21wbGV0ZSBzdGFuZC1hbG9uZSBIVE1MIHBhZ2UgbmVlZHMgdG8gYmUKICogcHJpbnRlZCBpbmNsdWRpbmcgdGhlIGluZm9ybWF0aW9uIGluZGljYXRlZCBieSB0aGUgb3RoZXIKICogZmxhZ3MuCiAqCiAqCiAqCiAqIENSRURJVFNfR0VORVJBTAogKgogKiBHZW5lcmFsIGNyZWRpdHM6IExhbmd1YWdlIGRlc2lnbiBhbmQgY29uY2VwdCwgUEhQIGF1dGhvcnMKICogYW5kIFNBUEkgbW9kdWxlLgogKgogKgogKgogKiBDUkVESVRTX0dST1VQCiAqIEEgbGlzdCBvZiB0aGUgY29yZSBkZXZlbG9wZXJzCiAqCiAqCiAqIENSRURJVFNfTU9EVUxFUwogKgogKiBBIGxpc3Qgb2YgdGhlIGV4dGVuc2lvbiBtb2R1bGVzIGZvciBQSFAsIGFuZCB0aGVpciBhdXRob3JzCiAqCiAqCiAqCiAqIENSRURJVFNfU0FQSQogKgogKiBBIGxpc3Qgb2YgdGhlIHNlcnZlciBBUEkgbW9kdWxlcyBmb3IgUEhQLCBhbmQgdGhlaXIgYXV0aG9ycwogKgogKgogKgogKgogKgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBocGNyZWRpdHMoaW50ICRmbGFnID0gQ1JFRElUU19BTEwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGhwY3JlZGl0cygkZmxhZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXRzIGEgbGFyZ2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mICBQSFAuCiAqIFRoaXMgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQgUEhQIGNvbXBpbGF0aW9uIG9wdGlvbnMgYW5kIGV4dGVuc2lvbnMsCiAqIHRoZSBQSFAgdmVyc2lvbiwgc2VydmVyIGluZm9ybWF0aW9uIGFuZCBlbnZpcm9ubWVudCAoaWYgY29tcGlsZWQgYXMgYQogKiBtb2R1bGUpLCB0aGUgUEhQIGVudmlyb25tZW50LCBPUyB2ZXJzaW9uIGluZm9ybWF0aW9uLCBwYXRocywgbWFzdGVyIGFuZAogKiBsb2NhbCB2YWx1ZXMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCBIVFRQIGhlYWRlcnMsIGFuZCB0aGUgUEhQIExpY2Vuc2UuCiAqCiAqIEJlY2F1c2UgZXZlcnkgc3lzdGVtIGlzIHNldHVwIGRpZmZlcmVudGx5LCBwaHBpbmZvIGlzCiAqIGNvbW1vbmx5IHVzZWQgdG8gY2hlY2sgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgZm9yIGF2YWlsYWJsZQogKiBwcmVkZWZpbmVkIHZhcmlhYmxlcwogKiBvbiBhIGdpdmVuIHN5c3RlbS4KICoKICogcGhwaW5mbyBpcyBhbHNvIGEgdmFsdWFibGUgZGVidWdnaW5nIHRvb2wgYXMgaXQKICogY29udGFpbnMgYWxsIEVHUENTIChFbnZpcm9ubWVudCwgR0VULCBQT1NULCBDb29raWUsIFNlcnZlcikgZGF0YS4KICoKICogQHBhcmFtIGludCAkd2hhdCBUaGUgb3V0cHV0IG1heSBiZSBjdXN0b21pemVkIGJ5IHBhc3Npbmcgb25lIG9yIG1vcmUgb2YgdGhlCiAqIGZvbGxvd2luZyBjb25zdGFudHMgYml0d2lzZSB2YWx1ZXMgc3VtbWVkCiAqIHRvZ2V0aGVyIGluIHRoZSBvcHRpb25hbCB3aGF0IHBhcmFtZXRlci4KICogT25lIGNhbiBhbHNvIGNvbWJpbmUgdGhlIHJlc3BlY3RpdmUgY29uc3RhbnRzIG9yIGJpdHdpc2UgdmFsdWVzCiAqIHRvZ2V0aGVyIHdpdGggdGhlIGJpdHdpc2Ugb3Igb3BlcmF0b3IuCiAqCiAqCiAqIHBocGluZm8gb3B0aW9ucwogKgogKgogKgogKiBOYW1lIChjb25zdGFudCkKICogVmFsdWUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogSU5GT19HRU5FUkFMCiAqIDEKICoKICogVGhlIGNvbmZpZ3VyYXRpb24gbGluZSwgcGhwLmluaSBsb2NhdGlvbiwgYnVpbGQgZGF0ZSwgV2ViCiAqIFNlcnZlciwgU3lzdGVtIGFuZCBtb3JlLgogKgogKgogKgogKiBJTkZPX0NSRURJVFMKICogMgogKgogKiBQSFAgQ3JlZGl0cy4gIFNlZSBhbHNvIHBocGNyZWRpdHMuCiAqCiAqCiAqCiAqIElORk9fQ09ORklHVVJBVElPTgogKiA0CiAqCiAqIEN1cnJlbnQgTG9jYWwgYW5kIE1hc3RlciB2YWx1ZXMgZm9yIFBIUCBkaXJlY3RpdmVzLiAgU2VlCiAqIGFsc28gaW5pX2dldC4KICoKICoKICoKICogSU5GT19NT0RVTEVTCiAqIDgKICoKICogTG9hZGVkIG1vZHVsZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgc2V0dGluZ3MuICBTZWUgYWxzbwogKiBnZXRfbG9hZGVkX2V4dGVuc2lvbnMuCiAqCiAqCiAqCiAqIElORk9fRU5WSVJPTk1FTlQKICogMTYKICoKICogRW52aXJvbm1lbnQgVmFyaWFibGUgaW5mb3JtYXRpb24gdGhhdCdzIGFsc28gYXZhaWxhYmxlIGluCiAqICRfRU5WLgogKgogKgogKgogKiBJTkZPX1ZBUklBQkxFUwogKiAzMgogKgogKiBTaG93cyBhbGwKICogcHJlZGVmaW5lZCB2YXJpYWJsZXMgZnJvbSBFR1BDUyAoRW52aXJvbm1lbnQsIEdFVCwKICogUE9TVCwgQ29va2llLCBTZXJ2ZXIpLgogKgogKgogKgogKiBJTkZPX0xJQ0VOU0UKICogNjQKICoKICogUEhQIExpY2Vuc2UgaW5mb3JtYXRpb24uICBTZWUgYWxzbyB0aGUgbGljZW5zZSBGQVEuCiAqCiAqCiAqCiAqIElORk9fQUxMCiAqIC0xCiAqCiAqIFNob3dzIGFsbCBvZiB0aGUgYWJvdmUuCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgSW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGhwaW5mbyhpbnQgJHdoYXQgPSBJTkZPX0FMTCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwaHBpbmZvKCR3aGF0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgc2V0dGluZyB0byB0aGUgc2VydmVyIGVudmlyb25tZW50LiAgVGhlCiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgb25seSBleGlzdCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50CiAqIHJlcXVlc3QuIEF0IHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgdGhlIGVudmlyb25tZW50IGlzIHJlc3RvcmVkIHRvIGl0cwogKiBvcmlnaW5hbCBzdGF0ZS4KICoKICogQHBhcmFtIHN0cmluZyAkc2V0dGluZyBUaGUgc2V0dGluZywgbGlrZSAiRk9PPUJBUiIKICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwdXRlbnYoc3RyaW5nICRzZXR0aW5nKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHB1dGVudigkc2V0dGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBpbmNsdWRlX3BhdGgKICogY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NyaXB0LgogKgogKiBAcGFyYW0gc3RyaW5nICRuZXdfaW5jbHVkZV9wYXRoIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBpbmNsdWRlX3BhdGgKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgb2xkIGluY2x1ZGVfcGF0aCBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIEluZm9FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNldF9pbmNsdWRlX3BhdGgoc3RyaW5nICRuZXdfaW5jbHVkZV9wYXRoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2V0X2luY2x1ZGVfcGF0aCgkbmV3X2luY2x1ZGVfcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmZvRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYSBzY3JpcHQgaXMgYWxsb3dlZCB0byBydW4uIElmIHRoaXMgaXMgcmVhY2hlZCwKICogdGhlIHNjcmlwdCByZXR1cm5zIGEgZmF0YWwgZXJyb3IuIFRoZSBkZWZhdWx0IGxpbWl0IGlzIDMwIHNlY29uZHMgb3IsIGlmCiAqIGl0IGV4aXN0cywgdGhlIG1heF9leGVjdXRpb25fdGltZSB2YWx1ZSBkZWZpbmVkIGluIHRoZQogKiBwaHAuaW5pLgogKgogKiBXaGVuIGNhbGxlZCwgc2V0X3RpbWVfbGltaXQgcmVzdGFydHMgdGhlIHRpbWVvdXQKICogY291bnRlciBmcm9tIHplcm8uIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgdGltZW91dCBpcyB0aGUgZGVmYXVsdCAzMAogKiBzZWNvbmRzLCBhbmQgMjUgc2Vjb25kcyBpbnRvIHNjcmlwdCBleGVjdXRpb24gYSBjYWxsIHN1Y2ggYXMKICogc2V0X3RpbWVfbGltaXQoMjApIGlzIG1hZGUsIHRoZSBzY3JpcHQgd2lsbCBydW4gZm9yIGEKICogdG90YWwgb2YgNDUgc2Vjb25kcyBiZWZvcmUgdGltaW5nIG91dC4KICoKICogQHBhcmFtIGludCAkc2Vjb25kcyBUaGUgbWF4aW11bSBleGVjdXRpb24gdGltZSwgaW4gc2Vjb25kcy4gSWYgc2V0IHRvIHplcm8sIG5vIHRpbWUgbGltaXQKICogaXMgaW1wb3NlZC4KICogQHRocm93cyBJbmZvRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXRfdGltZV9saW1pdChpbnQgJHNlY29uZHMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2V0X3RpbWVfbGltaXQoJHNlY29uZHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5mb0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ingres-ii.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbmdyZXNpaUV4Y2VwdGlvbjsKCi8qKgogKiBpbmdyZXNfYXV0b2NvbW1pdCBpcyBjYWxsZWQgYmVmb3JlIG9wZW5pbmcgYQogKiB0cmFuc2FjdGlvbiAoYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvCiAqIGluZ3Jlc19xdWVyeSBvciBqdXN0IGFmdGVyIGEgY2FsbCB0bwogKiBpbmdyZXNfcm9sbGJhY2sgb3IKICogaW5ncmVzX2NvbW1pdCkgdG8gc3dpdGNoIHRoZQogKiBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHNlcnZlciBvbiBvciBvZmYgKHdoZW4gdGhlIHNjcmlwdCBiZWdpbnMKICogdGhlIGF1dG9jb21taXQgbW9kZSBpcyBvZmYpLgogKgogKiBXaGVuIGF1dG9jb21taXQgbW9kZSBpcyBvbiwgZXZlcnkgcXVlcnkgaXMgYXV0b21hdGljYWxseQogKiBjb21taXR0ZWQgYnkgdGhlIHNlcnZlciwgYXMgaWYgaW5ncmVzX2NvbW1pdAogKiB3YXMgY2FsbGVkIGFmdGVyIGV2ZXJ5IGNhbGwgdG8gaW5ncmVzX3F1ZXJ5LgogKiBUbyBzZWUgaWYgYXV0b2NvbW1pdCBpcyBlbmFibGVkIHVzZSwKICogaW5ncmVzX2F1dG9jb21taXRfc3RhdGUuCiAqCiAqIEJ5IGRlZmF1bHQgSW5ncmVzIHdpbGwgcm9sbGJhY2sgYW55IHVuY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhdCB0aGUgZW5kIG9mCiAqIGEgcmVxdWVzdC4gVXNlIHRoaXMgZnVuY3Rpb24gb3IgaW5ncmVzX2NvbW1pdCB0bwogKiBlbnN1cmUgeW91ciBkYXRhIGlzIGNvbW1pdHRlZCB0byB0aGUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2F1dG9jb21taXQoJGxpbmspOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5ncmVzX2F1dG9jb21taXQoJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19jbG9zZSBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8KICogdGhlIEluZ3JlcyBzZXJ2ZXIgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBsaW5rLgogKgogKiBpbmdyZXNfY2xvc2UgaXMgdXN1YWxseSB1bm5lY2Vzc2FyeSwgYXMgaXQKICogd2lsbCBub3QgY2xvc2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBhbmQgYWxsIG5vbi1wZXJzaXN0ZW50IGNvbm5lY3Rpb25zCiAqIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2Nsb3NlKCRsaW5rKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19jbG9zZSgkbGluayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmdyZXNpaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogaW5ncmVzX2NvbW1pdCBjb21taXRzIHRoZSBjdXJyZW50bHkgb3BlbgogKiB0cmFuc2FjdGlvbiwgbWFraW5nIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRhdGFiYXNlIHBlcm1hbmVudC4KICoKICogVGhpcyBjbG9zZXMgdGhlIHRyYW5zYWN0aW9uLiBBIG5ldyB0cmFuc2FjdGlvbiBjYW4gYmUgb3BlbmVkIGJ5IHNlbmRpbmcgYQogKiBxdWVyeSB3aXRoIGluZ3Jlc19xdWVyeS4KICoKICogWW91IGNhbiBhbHNvIGhhdmUgdGhlIHNlcnZlciBjb21taXQgYXV0b21hdGljYWxseSBhZnRlciBldmVyeQogKiBxdWVyeSBieSBjYWxsaW5nIGluZ3Jlc19hdXRvY29tbWl0IGJlZm9yZQogKiBvcGVuaW5nIHRoZSB0cmFuc2FjdGlvbi4KICoKICogQnkgZGVmYXVsdCBJbmdyZXMgd2lsbCByb2xsIGJhY2sgYW55IHVuY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhdCB0aGUgZW5kIG9mCiAqIGEgcmVxdWVzdC4gVXNlIHRoaXMgZnVuY3Rpb24gb3IgaW5ncmVzX2F1dG9jb21taXQgdG8KICogZW5zdXJlIHlvdXIgdGhhdCBkYXRhIGlzIGNvbW1pdHRlZCB0byB0aGUgZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2NvbW1pdCgkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfY29tbWl0KCRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbmdyZXNfY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gd2l0aCB0aGUKICogZ2l2ZW4gSW5ncmVzIGRhdGFiYXNlLgogKgogKiBUaGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgd2hlbiB0aGUgc2NyaXB0IGVuZHMgb3Igd2hlbgogKiBpbmdyZXNfY2xvc2UgaXMgY2FsbGVkIG9uIHRoaXMgbGluay4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2UgVGhlIGRhdGFiYXNlIG5hbWUuIE11c3QgZm9sbG93IHRoZSBzeW50YXg6CiAqCiAqIFt2bm9kZTo6XWRibmFtZVsvc3ZyX2NsYXNzXQogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgSW5ncmVzIHVzZXIgbmFtZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHVzZXJuYW1lCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBpbmdyZXNfY29ubmVjdCBvcHRpb25zCiAqCiAqCiAqCiAqCiAqIE9wdGlvbiBuYW1lCiAqIE9wdGlvbiB0eXBlCiAqIERlc2NyaXB0aW9uCiAqIEV4YW1wbGUKICoKICoKICoKICoKICogZGF0ZV9jZW50dXJ5X2JvdW5kYXJ5CiAqIGludGVnZXIKICogVGhlIHRocmVzaG9sZCBieSB3aGljaCBhIDItZGlnaXQgeWVhciBpcyBkZXRlcm1pbmVkIHRvIGJlIGluCiAqIHRoZSBjdXJyZW50IGNlbnR1cnkgb3IgaW4gdGhlIG5leHQgY2VudHVyeS4gRXF1aXZhbGVudCB0byBJSV9EQVRFX0NFTlRVUllfQk9VTkRBUlkuCiAqIDUwCiAqCiAqCiAqIGdyb3VwCiAqIHN0cmluZwogKiBTcGVjaWZpZXMgdGhlIGdyb3VwIElEIG9mIHRoZSB1c2VyLCBlcXVpdmFsZW50IHRvIHRoZSAiLUciCiAqIGZsYWcKICogcGF5cm9sbAogKgogKgogKiByb2xlCiAqIHN0cmluZwogKiBUaGUgcm9sZSBJRCBvZiB0aGUgYXBwbGljYXRpb24uIElmIGEgcm9sZSBwYXNzd29yZCBpcwogKiByZXF1aXJlZCwgdGhlIHBhcmFtZXRlciB2YWx1ZSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzICJyb2xlL3Bhc3N3b3JkIgogKgogKgogKiBlZmZlY3RpdmVfdXNlcgogKiBzdHJpbmcKICogVGhlIGluZ3JlcyB1c2VyIGFjY291bnQgYmVpbmcgaW1wZXJzb25hdGVkLCBlcXVpdmFsZW50IHRvIHRoZSAiLXUiIGZsYWcKICogYW5vdGhlcl91c2VyCiAqCiAqCiAqIGRibXNfcGFzc3dvcmQKICogc3RyaW5nCiAqIFRoZSBpbnRlcm5hbCBkYXRhYmFzZSBwYXNzd29yZCBmb3IgdGhlIHVzZXIgY29ubmVjdGluZyB0byBJbmdyZXMKICogczNjcjN0CiAqCiAqCiAqIHRhYmxlX3N0cnVjdHVyZQogKiBzdHJpbmcKICoKICogVGhlIGRlZmF1bHQgc3RydWN0dXJlIGZvciBuZXcgdGFibGVzLgogKiBWYWxpZCB2YWx1ZXMgZm9yIHRhYmxlX3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQlRSRUUKICogSU5HUkVTX1NUUlVDVFVSRV9IQVNICiAqIElOR1JFU19TVFJVQ1RVUkVfSEVBUAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DQlRSRUUKICogSU5HUkVTX1NUUlVDVFVSRV9DSVNBTQogKiBJTkdSRVNfU1RSVUNUVVJFX0NIQVNICiAqIElOR1JFU19TVFJVQ1RVUkVfQ0hFQVAKICoKICoKICoKICogSU5HUkVTX1NUUlVDVFVSRV9CVFJFRQogKgogKgogKiBpbmRleF9zdHJ1Y3R1cmUKICogc3RyaW5nCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHNlY29uZGFyeSBpbmRleGVzLiBWYWxpZCB2YWx1ZXMKICogZm9yIGluZGV4X3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICoKICoKICoKICogSU5HUkVTX1NUUlVDVFVSRV9IQVNICiAqCiAqCiAqIGxvZ2luX2xvY2FsCiAqIGJvb2xlYW4KICogRGV0ZXJtaW5lcyBob3cgdGhlIGNvbm5lY3Rpb24gdXNlciBJRCBhbmQgcGFzc3dvcmQgYXJlCiAqIHVzZWQgd2hlbiBhIFZOT0RFIGlzIGluY2x1ZGVkIGluIHRoZSB0YXJnZXQgZGF0YWJhc2Ugc3RyaW5nLgogKiBJZiBzZXQgdG8gVFJVRSwgdGhlIHVzZXIgSUQgYW5kIHBhc3N3b3JkIGFyZSB1c2VkIHRvIGxvY2FsbHkgYWNjZXNzCiAqIHRoZSBWTk9ERSwgYW5kIHRoZSBWTk9ERSBsb2dpbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUgREJNUwogKiBjb25uZWN0aW9uLiBJZiBzZXQgdG8gRkFMU0UsIHRoZSBwcm9jZXNzIHVzZXIgSUQgaXMgdXNlZCB0byBhY2Nlc3MKICogdGhlIFZOT0RFLCBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlciBJRCBhbmQgcGFzc3dvcmQgYXJlIHVzZWQgaW4gcGxhY2UKICogb2YgdGhlIFZOT0RFIGxvZ2luIGluZm9ybWF0aW9uIHRvIGVzdGFibGlzaCB0aGUgREJNUyBjb25uZWN0aW9uLgogKiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIG5vIFZOT0RFIGlzIGluY2x1ZGVkIGluIHRoZSB0YXJnZXQKICogZGF0YWJhc2Ugc3RyaW5nLiBUaGUgZGVmYXVsdCBpcyBGQUxTRS4KICogVFJVRQogKgogKgogKiB0aW1lem9uZQogKiBzdHJpbmcKICogQ29udHJvbHMgdGhlIHRpbWV6b25lIG9mIHRoZSBzZXNzaW9uLiBJZiBub3Qgc2V0IGl0IHdpbGwKICogZGVmYXVsdCB0byB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9USU1FWk9ORV9OQU1FLiBJZgogKiBJSV9USU1FWk9ORV9OQU1FIGlzIG5vdCBkZWZpbmVkLCBOQS1QQUNJRklDIChHTVQtOCB3aXRoIERheWxpZ2h0CiAqIFNhdmluZ3MpIGlzIHVzZWQuCiAqCiAqCiAqIGRhdGVfZm9ybWF0CiAqIGludGVnZXIKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0IHRoZSBkZWZhdWx0IGRhdGUgZm9ybWF0IGlzIFVTLCBlLmcuIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUw0CiAqCiAqCiAqIGRlY2ltYWxfc2VwYXJhdG9yCiAqIHN0cmluZwogKiBUaGUgY2hhcmFjdGVyIGlkZW50aWZpZXIgZm9yIGRlY2ltYWwgZGF0YQogKiAiLCIKICoKICoKICogbW9uZXlfbG9ydAogKiBpbnRlZ2VyCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqCiAqCiAqIElOR1JFU19NT05FWV9UUkFJTElORwogKgogKgogKiBtb25leV9zaWduCiAqIHN0cmluZwogKiBUaGUgY3VycmVuY3kgc3ltYm9sIHRvIGJlIHVzZWQgd2l0aCB0aGUgTU9ORVkgZGF0YXR5cGUKICog4oKsCiAqCiAqCiAqIG1vbmV5X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFRoZSBwcmVjaXNpb24gb2YgdGhlIE1PTkVZIGRhdGF0eXBlCiAqIDMKICoKICoKICogZmxvYXQ0X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFByZWNpc2lvbiBvZiB0aGUgRkxPQVQ0IGRhdGF0eXBlCiAqIDEwCiAqCiAqCiAqIGZsb2F0OF9wcmVjaXNpb24KICogaW50ZWdlcgogKiBQcmVjaXNpb24gb2YgdGhlIEZMT0FUOCBkYXRhCiAqIDEwCiAqCiAqCiAqIGJsb2Jfc2VnbWVudF9sZW5ndGgKICogaW50ZWdlcgogKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gZmV0Y2ggYXQgYSB0aW1lIHdoZW4gcmV0cmlldmluZwogKiBCTE9CIG9yIENMT0IgZGF0YSwgZGVmYXVsdHMgdG8gNDA5NiBieXRlcyB3aGVuIG5vdCBleHBsaWNpdGx5IHNldAogKiA4MTkyCiAqCiAqCiAqCiAqCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHRhYmxlcy4KICogVmFsaWQgdmFsdWVzIGZvciB0YWJsZV9zdHJ1Y3R1cmUgYXJlOgogKgogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0hFQVAKICogSU5HUkVTX1NUUlVDVFVSRV9JU0FNCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0NIRUFQCiAqCiAqCiAqIFRoZSBkZWZhdWx0IHN0cnVjdHVyZSBmb3IgbmV3IHNlY29uZGFyeSBpbmRleGVzLiBWYWxpZCB2YWx1ZXMKICogZm9yIGluZGV4X3N0cnVjdHVyZSBhcmU6CiAqCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfQ0lTQU0KICogSU5HUkVTX1NUUlVDVFVSRV9DSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0JUUkVFCiAqIElOR1JFU19TVFJVQ1RVUkVfSEFTSAogKiBJTkdSRVNfU1RSVUNUVVJFX0lTQU0KICoKICoKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0IHRoZSBkZWZhdWx0IGRhdGUgZm9ybWF0IGlzIFVTLCBlLmcuIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIEluZ3JlcyBsaW5rIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2Nvbm5lY3Qoc3RyaW5nICRkYXRhYmFzZSA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgYXJyYXkgJG9wdGlvbnMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19jb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2Nvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRkYXRhYmFzZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2Nvbm5lY3QoJGRhdGFiYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRXhlY3V0ZSBhIHF1ZXJ5IHByZXBhcmVkIHVzaW5nIGluZ3Jlc19wcmVwYXJlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHF1ZXJ5IGlkZW50aWZpZXIKICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSB1c2VkIHdpdGggdGhlIHF1ZXJ5CiAqIEBwYXJhbSBzdHJpbmcgJHR5cGVzIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBzZXF1ZW5jZSBvZiB0eXBlcyBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMKICogcGFzc2VkLiBTZWUgdGhlIHR5cGVzIHBhcmFtZXRlciBpbgogKiBpbmdyZXNfcXVlcnkgZm9yIHRoZSBsaXN0IG9mIHR5cGUgY29kZXMuCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19leGVjdXRlKCRyZXN1bHQsIGFycmF5ICRwYXJhbXMgPSBudWxsLCBzdHJpbmcgJHR5cGVzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCR0eXBlcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX2V4ZWN1dGUoJHJlc3VsdCwgJHBhcmFtcywgJHR5cGVzKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfZXhlY3V0ZSgkcmVzdWx0LCAkcGFyYW1zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfZXhlY3V0ZSgkcmVzdWx0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBpbmdyZXNfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIGEgZmllbGQKICogaW4gYSBxdWVyeSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSBxdWVyeSByZXN1bHQgaWRlbnRpZmllcgogKiBAcGFyYW0gaW50ICRpbmRleCBpbmRleCBpcyB0aGUgZmllbGQgd2hvc2UgbmFtZSB3aWxsIGJlCiAqIHJldHJpZXZlZC4KICoKICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBpbmRleCBkZXBlbmQgdXBvbgogKiB0aGUgdmFsdWUKICogb2YgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0LgogKiBJZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQKICogaXMgMSAodGhlIGRlZmF1bHQpCiAqIHRoZW4gaW5kZXggbXVzdCBiZQogKiBiZXR3ZWVuIDEgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZAogKiBieSBpbmdyZXNfbnVtX2ZpZWxkcy4gSWYgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0CiAqIGlzIDAgdGhlbiBpbmRleCBtdXN0CiAqIGJlIGJldHdlZW4gMAogKiBhbmQgaW5ncmVzX251bV9maWVsZHMgLQogKiAxLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZmllbGQKICogaW4gYSBxdWVyeSByZXN1bHQKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRpbmRleCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19maWVsZF9uYW1lKCRyZXN1bHQsICRpbmRleCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBJbmdyZXNpaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXQgdGhlIHR5cGUgb2YgYSBmaWVsZCBpbiBhIHF1ZXJ5IHJlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHF1ZXJ5IHJlc3VsdCBpZGVudGlmaWVyCiAqIEBwYXJhbSBpbnQgJGluZGV4IGluZGV4IGlzIHRoZSBmaWVsZCB3aG9zZSB0eXBlIHdpbGwgYmUKICogcmV0cmlldmVkLgogKgogKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIGluZGV4IGRlcGVuZCB1cG9uCiAqIHRoZSB2YWx1ZQogKiBvZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQuCiAqIElmIGluZ3Jlcy5hcnJheV9pbmRleF9zdGFydAogKiBpcyAxICh0aGUgZGVmYXVsdCkKICogdGhlbiBpbmRleCBtdXN0IGJlCiAqIGJldHdlZW4gMSBhbmQgdGhlIHZhbHVlIHJldHVybmVkCiAqIGJ5IGluZ3Jlc19udW1fZmllbGRzLiBJZiBpbmdyZXMuYXJyYXlfaW5kZXhfc3RhcnQKICogaXMgMCB0aGVuIGluZGV4IG11c3QKICogYmUgYmV0d2VlbiAwCiAqIGFuZCBpbmdyZXNfbnVtX2ZpZWxkcyAtCiAqIDEuCiAqIEByZXR1cm4gc3RyaW5nIGluZ3Jlc19maWVsZF90eXBlIHJldHVybnMgdGhlIHR5cGUgb2YgYQogKiBmaWVsZCBpbiBhIHF1ZXJ5IHJlc3VsdC4gIEV4YW1wbGVzIG9mCiAqIHR5cGVzIHJldHVybmVkIGFyZSBJSUFQSV9CWVRFX1RZUEUsCiAqIElJQVBJX0NIQV9UWVBFLCBJSUFQSV9EVEVfVFlQRSwKICogSUlBUElfRkxUX1RZUEUsIElJQVBJX0lOVF9UWVBFLAogKiBJSUFQSV9WQ0hfVFlQRS4gU29tZSBvZiB0aGVzZSB0eXBlcyBjYW4gbWFwIHRvIG1vcmUKICogdGhhbiBvbmUgU1FMIHR5cGUgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgdGhlIGZpZWxkIChzZWUKICogaW5ncmVzX2ZpZWxkX2xlbmd0aCkuIEZvciBleGFtcGxlCiAqIElJQVBJX0ZMVF9UWVBFIGNhbiBiZSBhIGZsb2F0NCBvciBhIGZsb2F0OC4gRm9yIGRldGFpbGVkCiAqIGluZm9ybWF0aW9uLCBzZWUgdGhlIEluZ3JlcyBPcGVuQVBJIFVzZXIgR3VpZGUsIEFwcGVuZGl4CiAqICJEYXRhIFR5cGVzIiBpbiB0aGUgSW5ncmVzIGRvY3VtZW50YXRpb24uCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19maWVsZF90eXBlKCRyZXN1bHQsIGludCAkaW5kZXgpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfZmllbGRfdHlwZSgkcmVzdWx0LCAkaW5kZXgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHF1ZXJ5IHJlc3VsdCBpZGVudGlmaWVyCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19mcmVlX3Jlc3VsdCgkcmVzdWx0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVuIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGFuIEluZ3JlcyBkYXRhYmFzZS4KICoKICogVGhlcmUgYXJlIG9ubHkgdHdvIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQKICogaW5ncmVzX2Nvbm5lY3Q6IEZpcnN0LCB3aGVuIGNvbm5lY3RpbmcsIHRoZQogKiBmdW5jdGlvbiB3aWxsIGluaXRpYWxseSB0cnkgdG8gZmluZCBhIChwZXJzaXN0ZW50KSBsaW5rIHRoYXQgaXMKICogYWxyZWFkeSBvcGVuZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiAgSWYgb25lIGlzIGZvdW5kLCBhbgogKiBpZGVudGlmaWVyIGZvciBpdCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2Ygb3BlbmluZyBhIG5ldwogKiBjb25uZWN0aW9uLiBTZWNvbmQsIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBJbmdyZXMgc2VydmVyIHdpbGwgbm90CiAqIGJlIGNsb3NlZCB3aGVuIHRoZSBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBlbmRzLiAgSW5zdGVhZCwgdGhlCiAqIGxpbmsgd2lsbCByZW1haW4gb3BlbiBmb3IgZnV0dXJlIHVzZQogKiAoaW5ncmVzX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IGluZ3Jlc19wY29ubmVjdCkuIFRoaXMgdHlwZQogKiBvZiBsaW5rIGlzIHRoZXJlZm9yZSBjYWxsZWQgInBlcnNpc3RlbnQiLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZSBUaGUgZGF0YWJhc2UgbmFtZS4gTXVzdCBmb2xsb3cgdGhlIHN5bnRheDoKICoKICogW3Zub2RlOjpdZGJuYW1lWy9zdnJfY2xhc3NdCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBJbmdyZXMgdXNlciBuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdXNlcm5hbWUKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFNlZSBpbmdyZXNfY29ubmVjdCBmb3IgdGhlIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0CiAqIGNhbiBiZSBwYXNzZWQKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIEluZ3JlcyBsaW5rIHJlc291cmNlIG9uIHN1Y2Nlc3MKICogQHRocm93cyBJbmdyZXNpaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ncmVzX3Bjb25uZWN0KHN0cmluZyAkZGF0YWJhc2UgPSBudWxsLCBzdHJpbmcgJHVzZXJuYW1lID0gbnVsbCwgc3RyaW5nICRwYXNzd29yZCA9IG51bGwsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxpbmdyZXNfcGNvbm5lY3QoJGRhdGFiYXNlLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJG9wdGlvbnMpOwogICAgfSBlbHNlaWYgKCRwYXNzd29yZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgfSBlbHNlaWYgKCR1c2VybmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcaW5ncmVzX3Bjb25uZWN0KCRkYXRhYmFzZSwgJHVzZXJuYW1lKTsKICAgIH0gZWxzZWlmICgkZGF0YWJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19wY29ubmVjdCgkZGF0YWJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGluZ3Jlc19wY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXN1bHQKICogcmVzb3VyY2UgYmVmb3JlIGlzc3VpbmcgYSBmZXRjaC4gIElmIGluZ3Jlcy5hcnJheV9pbmRleF9zdGFydAogKiBpcyBzZXQgdG8gMCB0aGVuIHRoZSBmaXJzdCByb3cgaXMgMCBlbHNlIGl0IGlzIDEuCiAqIGluZ3Jlc19yZXN1bHRfc2VlayBjYW4gYmUgdXNlZCBvbmx5IHdpdGggcXVlcmllcyB0aGF0CiAqIG1ha2UgdXNlIG9mIHNjcm9sbGFibGUKICogY3Vyc29ycy4gSXQgY2Fubm90IGJlIHVzZWQgd2l0aAogKiBpbmdyZXNfdW5idWZmZXJlZF9xdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCBpZGVudGlmaWVyIGZvciBhIHF1ZXJ5CiAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uIFRoZSByb3cgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBvbi4gSWYgaW5ncmVzLmFycmF5X2luZGV4X3N0YXJ0CiAqIGlzIHNldCB0byAwLCB0aGVuIHRoZSBmaXJzdCByb3cgaXMgMCwgZWxzZSBpdCBpcyAxCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19yZXN1bHRfc2VlaygkcmVzdWx0LCBpbnQgJHBvc2l0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19yZXN1bHRfc2VlaygkcmVzdWx0LCAkcG9zaXRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19yb2xsYmFjayByb2xscyBiYWNrIHRoZSBjdXJyZW50bHkKICogb3BlbiB0cmFuc2FjdGlvbiwgYWN0dWFsbHkgY2FuY2VsbGluZyBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZQogKiBkYXRhYmFzZSBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLgogKgogKiBUaGlzIGNsb3NlcyB0aGUgdHJhbnNhY3Rpb24uIEEgbmV3IHRyYW5zYWN0aW9uIGNhbiBiZSBvcGVuZWQgYnkgc2VuZGluZyBhCiAqIHF1ZXJ5IHdpdGggaW5ncmVzX3F1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgVGhlIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19yb2xsYmFjaygkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmdyZXNfcm9sbGJhY2soJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5ncmVzaWlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIGluZ3Jlc19zZXRfZW52aXJvbm1lbnQgaXMgY2FsbGVkIHRvIHNldCBlbnZpcm9ubWVudGFsCiAqIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dCBvZiBjZXJ0YWluIHZhbHVlcyBmcm9tIEluZ3Jlcywgc3VjaCBhcyB0aGUKICogdGltZXpvbmUsIGRhdGUgZm9ybWF0LCBkZWNpbWFsIGNoYXJhY3RlciBzZXBhcmF0b3IsIGFuZCBmbG9hdCBwcmVjaXNpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBUaGUgY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGVudW1lcmF0ZWQgYXJyYXkgb2Ygb3B0aW9uIG5hbWUvdmFsdWUgcGFpcnMuIFRoZSBmb2xsb3dpbmcgdGFibGUKICogbGlzdHMgdGhlIG9wdGlvbiBuYW1lIGFuZCB0aGUgZXhwZWN0ZWQgdHlwZQogKgogKgogKgogKgogKgogKiBPcHRpb24gbmFtZQogKiBPcHRpb24gdHlwZQogKiBEZXNjcmlwdGlvbgogKiBFeGFtcGxlCiAqCiAqCiAqCiAqCiAqIGRhdGVfY2VudHVyeV9ib3VuZGFyeQogKiBpbnRlZ2VyCiAqIFRoZSB0aHJlc2hvbGQgYnkgd2hpY2ggYSAyLWRpZ2l0IHllYXIgaXMgZGV0ZXJtaW5lZCB0byBiZSBpbgogKiB0aGUgY3VycmVudCBjZW50dXJ5IG9yIGluIHRoZSBuZXh0IGNlbnR1cnkuIEVxdWl2YWxlbnQgdG8gSUlfREFURV9DRU5UVVJZX0JPVU5EQVJZCiAqIDUwCiAqCiAqCiAqIHRpbWV6b25lCiAqIHN0cmluZwogKiBDb250cm9scyB0aGUgdGltZXpvbmUgb2YgdGhlIHNlc3Npb24uIElmIG5vdCBzZXQsIGl0IHdpbGwKICogZGVmYXVsdCB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9USU1FWk9ORV9OQU1FLiBJZgogKiBJSV9USU1FWk9ORV9OQU1FIGlzIG5vdCBkZWZpbmVkLCBOQS1QQUNJRklDIChHTVQtOCB3aXRoIERheWxpZ2h0CiAqIFNhdmluZ3MpIGlzIHVzZWQuCiAqIFVOSVRFRC1LSU5HRE9NCiAqCiAqCiAqIGRhdGVfZm9ybWF0CiAqIGludGVnZXIKICogU2V0cyB0aGUgYWxsb3dhYmxlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGZvciBJbmdyZXMgZGF0ZXMuCiAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IElJX0RBVEVfRk9STUFULiBJZiBJSV9EQVRFX0ZPUk1BVCBpcwogKiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBkYXRlIGZvcm1hdCBpcyBVUywgZm9yIGV4YW1wbGUgbW0vZGQveXkuIFZhbGlkIHZhbHVlcwogKiBmb3IgZGF0ZV9mb3JtYXQgYXJlOgogKgogKiBJTkdSRVNfREFURV9ETVkKICogSU5HUkVTX0RBVEVfRklOSVNICiAqIElOR1JFU19EQVRFX0dFUk1BTgogKiBJTkdSRVNfREFURV9JU08KICogSU5HUkVTX0RBVEVfSVNPNAogKiBJTkdSRVNfREFURV9NRFkKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTAogKiBJTkdSRVNfREFURV9NVUxUSU5BVElPTkFMNAogKiBJTkdSRVNfREFURV9ZTUQKICogSU5HUkVTX0RBVEVfVVMKICoKICoKICoKICogSU5HUkVTX0RBVEVfSVNPNAogKgogKgogKiBkZWNpbWFsX3NlcGFyYXRvcgogKiBzdHJpbmcKICogVGhlIGNoYXJhY3RlciBpZGVudGlmaWVyIGZvciBkZWNpbWFsIGRhdGEKICogIiwiCiAqCiAqCiAqIG1vbmV5X2xvcnQKICogaW50ZWdlcgogKiBMZWFkaW5nIG9yIHRyYWlsaW5nIGN1cnJlbmN5IHNpZ24uIFZhbGlkIHZhbHVlcyBmb3IgbW9uZXlfbG9ydAogKiBhcmU6CiAqCiAqIElOR1JFU19NT05FWV9MRUFESU5HCiAqIElOR1JFU19NT05FWV9UUkFJTElORwogKgogKgogKgogKiBJTkdSRVNfTU9ORVlfTEVBRElORwogKgogKgogKiBtb25leV9zaWduCiAqIHN0cmluZwogKiBUaGUgY3VycmVuY3kgc3ltYm9sIHRvIGJlIHVzZWQgd2l0aCB0aGUgTU9ORVkgZGF0YXR5cGUKICog4oKsCiAqCiAqCiAqIG1vbmV5X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFRoZSBwcmVjaXNpb24gb2YgdGhlIE1PTkVZIGRhdGF0eXBlCiAqIDIKICoKICoKICogZmxvYXQ0X3ByZWNpc2lvbgogKiBpbnRlZ2VyCiAqIFByZWNpc2lvbiBvZiB0aGUgRkxPQVQ0IGRhdGF0eXBlCiAqIDEwCiAqCiAqCiAqIGZsb2F0OF9wcmVjaXNpb24KICogaW50ZWdlcgogKiBQcmVjaXNpb24gb2YgdGhlIEZMT0FUOCBkYXRhCiAqIDEwCiAqCiAqCiAqIGJsb2Jfc2VnbWVudF9sZW5ndGgKICogaW50ZWdlcgogKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gZmV0Y2ggYXQgYSB0aW1lIHdoZW4gcmV0cmlldmluZwogKiBCTE9CIG9yIENMT0IgZGF0YS4gRGVmYXVsdHMgdG8gNDA5NiBieXRlcyB3aGVuIG5vdCBzZXQgZXhwbGljaXRseQogKiA4MTkyCiAqCiAqCiAqCiAqCiAqCiAqIFNldHMgdGhlIGFsbG93YWJsZSBpbnB1dCBhbmQgb3V0cHV0IGZvcm1hdCBmb3IgSW5ncmVzIGRhdGVzLgogKiBEZWZhdWx0cyB0byB0aGUgdmFsdWUgZGVmaW5lZCBieSBJSV9EQVRFX0ZPUk1BVC4gSWYgSUlfREFURV9GT1JNQVQgaXMKICogbm90IHNldCwgdGhlIGRlZmF1bHQgZGF0ZSBmb3JtYXQgaXMgVVMsIGZvciBleGFtcGxlIG1tL2RkL3l5LiBWYWxpZCB2YWx1ZXMKICogZm9yIGRhdGVfZm9ybWF0IGFyZToKICoKICogSU5HUkVTX0RBVEVfRE1ZCiAqIElOR1JFU19EQVRFX0ZJTklTSAogKiBJTkdSRVNfREFURV9HRVJNQU4KICogSU5HUkVTX0RBVEVfSVNPCiAqIElOR1JFU19EQVRFX0lTTzQKICogSU5HUkVTX0RBVEVfTURZCiAqIElOR1JFU19EQVRFX01VTFRJTkFUSU9OQUwKICogSU5HUkVTX0RBVEVfTVVMVElOQVRJT05BTDQKICogSU5HUkVTX0RBVEVfWU1ECiAqIElOR1JFU19EQVRFX1VTCiAqCiAqCiAqIExlYWRpbmcgb3IgdHJhaWxpbmcgY3VycmVuY3kgc2lnbi4gVmFsaWQgdmFsdWVzIGZvciBtb25leV9sb3J0CiAqIGFyZToKICoKICogSU5HUkVTX01PTkVZX0xFQURJTkcKICogSU5HUkVTX01PTkVZX1RSQUlMSU5HCiAqCiAqIEB0aHJvd3MgSW5ncmVzaWlFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZ3Jlc19zZXRfZW52aXJvbm1lbnQoJGxpbmssIGFycmF5ICRvcHRpb25zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZ3Jlc19zZXRfZW52aXJvbm1lbnQoJGxpbmssICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEluZ3Jlc2lpRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/inotify.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xJbm90aWZ5RXhjZXB0aW9uOwoKLyoqCiAqIEluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZSBmb3IgdXNlIHdpdGgKICogaW5vdGlmeV9hZGRfd2F0Y2gKICoKICogQHJldHVybiByZXNvdXJjZSBBIHN0cmVhbSByZXNvdXJjZS4KICogQHRocm93cyBJbm90aWZ5RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbm90aWZ5X2luaXQoKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlub3RpZnlfaW5pdCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSW5vdGlmeUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBpbm90aWZ5X3JtX3dhdGNoIHJlbW92ZXMgdGhlIHdhdGNoCiAqIHdhdGNoX2Rlc2NyaXB0b3IgZnJvbSB0aGUgaW5vdGlmeSBpbnN0YW5jZQogKiBpbm90aWZ5X2luc3RhbmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlub3RpZnlfaW5zdGFuY2UgUmVzb3VyY2UgcmV0dXJuZWQgYnkKICogaW5vdGlmeV9pbml0CiAqIEBwYXJhbSBpbnQgJHdhdGNoX2Rlc2NyaXB0b3IgV2F0Y2ggdG8gcmVtb3ZlIGZyb20gdGhlIGluc3RhbmNlCiAqIEB0aHJvd3MgSW5vdGlmeUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5vdGlmeV9ybV93YXRjaCgkaW5vdGlmeV9pbnN0YW5jZSwgaW50ICR3YXRjaF9kZXNjcmlwdG9yKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGlub3RpZnlfcm1fd2F0Y2goJGlub3RpZnlfaW5zdGFuY2UsICR3YXRjaF9kZXNjcmlwdG9yKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IElub3RpZnlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/json.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xKc29uRXhjZXB0aW9uOwoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3VwcGxpZWQKICogdmFsdWUuCiAqCiAqIFRoZSBlbmNvZGluZyBpcyBhZmZlY3RlZCBieSB0aGUgc3VwcGxpZWQgb3B0aW9ucwogKiBhbmQgYWRkaXRpb25hbGx5IHRoZSBlbmNvZGluZyBvZiBmbG9hdCB2YWx1ZXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YKICogc2VyaWFsaXplX3ByZWNpc2lvbi4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgYmVpbmcgZW5jb2RlZC4gQ2FuIGJlIGFueSB0eXBlIGV4Y2VwdAogKiBhIHJlc291cmNlLgogKgogKiBBbGwgc3RyaW5nIGRhdGEgbXVzdCBiZSBVVEYtOCBlbmNvZGVkLgogKgogKiBQSFAgaW1wbGVtZW50cyBhIHN1cGVyc2V0IG9mIEpTT04gYXMgc3BlY2lmaWVkIGluIHRoZSBvcmlnaW5hbAogKiBSRkMgNzE1OS4KICogQHBhcmFtIGludCAkb3B0aW9ucyBCaXRtYXNrIGNvbnNpc3Rpbmcgb2YKICogSlNPTl9GT1JDRV9PQkpFQ1QsCiAqIEpTT05fSEVYX1FVT1QsCiAqIEpTT05fSEVYX1RBRywKICogSlNPTl9IRVhfQU1QLAogKiBKU09OX0hFWF9BUE9TLAogKiBKU09OX0lOVkFMSURfVVRGOF9JR05PUkUsCiAqIEpTT05fSU5WQUxJRF9VVEY4X1NVQlNUSVRVVEUsCiAqIEpTT05fTlVNRVJJQ19DSEVDSywKICogSlNPTl9QQVJUSUFMX09VVFBVVF9PTl9FUlJPUiwKICogSlNPTl9QUkVTRVJWRV9aRVJPX0ZSQUNUSU9OLAogKiBKU09OX1BSRVRUWV9QUklOVCwKICogSlNPTl9VTkVTQ0FQRURfTElORV9URVJNSU5BVE9SUywKICogSlNPTl9VTkVTQ0FQRURfU0xBU0hFUywKICogSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSwKICogSlNPTl9USFJPV19PTl9FUlJPUi4KICogVGhlIGJlaGF2aW91ciBvZiB0aGVzZSBjb25zdGFudHMgaXMgZGVzY3JpYmVkIG9uIHRoZQogKiBKU09OIGNvbnN0YW50cyBwYWdlLgogKiBAcGFyYW0gaW50ICRkZXB0aCBTZXQgdGhlIG1heGltdW0gZGVwdGguIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBKU09OIGVuY29kZWQgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgSnNvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24ganNvbl9lbmNvZGUoJHZhbHVlLCBpbnQgJG9wdGlvbnMgPSAwLCBpbnQgJGRlcHRoID0gNTEyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcanNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucywgJGRlcHRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEpzb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgZXJyb3Igc3RyaW5nIG9mIHRoZSBsYXN0IGpzb25fZW5jb2RlIG9yIGpzb25fZGVjb2RlCiAqIGNhbGwsIHdoaWNoIGRpZCBub3Qgc3BlY2lmeSBKU09OX1RIUk9XX09OX0VSUk9SLgogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIG9uIHN1Y2Nlc3MsICJObyBlcnJvciIgaWYgbm8KICogZXJyb3IgaGFzIG9jY3VycmVkLgogKiBAdGhyb3dzIEpzb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGpzb25fbGFzdF9lcnJvcl9tc2coKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcanNvbl9sYXN0X2Vycm9yX21zZygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgSnNvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ldap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMZGFwRXhjZXB0aW9uOwoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9hZGQgYnV0IHJldHVybnMgdGhlIExEQVAgcmVzdWx0IHJlc291cmNlIHRvIGJlIHBhcnNlZCB3aXRoIGxkYXBfcGFyc2VfcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllcgogKiBAcGFyYW0gc3RyaW5nICRkbgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2FkZF9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkZW50cnksICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFkZCBlbnRyaWVzIGluIHRoZSBMREFQIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIGFycmF5ICRlbnRyeSBBbiBhcnJheSB0aGF0IHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudHJ5LiBUaGUgdmFsdWVzIGluCiAqIHRoZSBlbnRyaWVzIGFyZSBpbmRleGVkIGJ5IGluZGl2aWR1YWwgYXR0cmlidXRlcy4KICogSW4gY2FzZSBvZiBtdWx0aXBsZSB2YWx1ZXMgZm9yIGFuIGF0dHJpYnV0ZSwgdGhleSBhcmUgaW5kZXhlZCB1c2luZwogKiBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDAuCiAqCiAqCiAqCiAqIF1dPgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfYWRkKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2FkZCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9iaW5kIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZ3xudWxsICRiaW5kX3JkbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGJpbmRfcGFzc3dvcmQKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2JpbmRfZXh0KCRsaW5rX2lkZW50aWZpZXIsID9zdHJpbmcgJGJpbmRfcmRuID0gbnVsbCwgP3N0cmluZyAkYmluZF9wYXNzd29yZCA9IG51bGwsIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9iaW5kX2V4dCgkbGlua19pZGVudGlmaWVyLCAkYmluZF9yZG4sICRiaW5kX3Bhc3N3b3JkLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBCaW5kcyB0byB0aGUgTERBUCBkaXJlY3Rvcnkgd2l0aCBzcGVjaWZpZWQgUkROIGFuZCBwYXNzd29yZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRiaW5kX3JkbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGJpbmRfcGFzc3dvcmQKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2JpbmQoJGxpbmtfaWRlbnRpZmllciwgP3N0cmluZyAkYmluZF9yZG4gPSBudWxsLCA/c3RyaW5nICRiaW5kX3Bhc3N3b3JkID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2JpbmQoJGxpbmtfaWRlbnRpZmllciwgJGJpbmRfcmRuLCAkYmluZF9wYXNzd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXRyaWV2ZSB0aGUgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbiBzZW5kIGJ5IHRoZSBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvb2tpZSBBbiBvcGFxdWUgc3RydWN0dXJlIHNlbnQgYnkgdGhlIHNlcnZlci4KICogQHBhcmFtIGludHxudWxsICRlc3RpbWF0ZWQgVGhlIGVzdGltYXRlZCBudW1iZXIgb2YgZW50cmllcyB0byByZXRyaWV2ZS4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlKCRsaW5rLCAkcmVzdWx0LCA/c3RyaW5nICYkY29va2llID0gbnVsbCwgP2ludCAmJGVzdGltYXRlZCA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZSgkbGluaywgJHJlc3VsdCwgJGNvb2tpZSwgJGVzdGltYXRlZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmFibGUgTERBUCBwYWdpbmF0aW9uIGJ5IHNlbmRpbmcgdGhlIHBhZ2luYXRpb24gY29udHJvbCAocGFnZSBzaXplLCBjb29raWUuLi4pLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIGludCAkcGFnZXNpemUgVGhlIG51bWJlciBvZiBlbnRyaWVzIGJ5IHBhZ2UuCiAqIEBwYXJhbSBib29sICRpc2NyaXRpY2FsIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWdpbmF0aW9uIGlzIGNyaXRpY2FsIG9yIG5vdC4KICogSWYgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgcGFnaW5hdGlvbiwgdGhlIHNlYXJjaAogKiB3aWxsIHJldHVybiBubyByZXN1bHQuCiAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBBbiBvcGFxdWUgc3RydWN0dXJlIHNlbnQgYnkgdGhlIHNlcnZlcgogKiAobGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZSkuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCgkbGluaywgaW50ICRwYWdlc2l6ZSwgYm9vbCAkaXNjcml0aWNhbCA9IGZhbHNlLCBzdHJpbmcgJGNvb2tpZSA9ICIiKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfY29udHJvbF9wYWdlZF9yZXN1bHQoJGxpbmssICRwYWdlc2l6ZSwgJGlzY3JpdGljYWwsICRjb29raWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc3RvcmVkIGluIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgc2VhcmNoCiAqIG9wZXJhdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkZW50aWZpZXIgVGhlIGludGVybmFsIExEQVAgcmVzdWx0LgogKiBAcmV0dXJuIGludCBSZXR1cm5zIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSByZXN1bHQuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9jb3VudF9lbnRyaWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfY291bnRfZW50cmllcygkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfZGVsZXRlIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZyAkZG4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2RlbGV0ZV9leHQoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2RlbGV0ZV9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEZWxldGVzIGEgcGFydGljdWxhciBlbnRyeSBpbiBMREFQIGRpcmVjdG9yeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2RlbGV0ZSgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfZGVsZXRlKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBlcmZvcm1zIGEgUEFTU1dEIGV4dGVuZGVkIG9wZXJhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXIgZG4gb2YgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBvZi4KICogQHBhcmFtIHN0cmluZyAkb2xkcHcgVGhlIG9sZCBwYXNzd29yZCBvZiB0aGlzIHVzZXIuIE1heSBiZSBvbW1pdGVkIGRlcGVuZGluZyBvZiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4KICogQHBhcmFtIHN0cmluZyAkbmV3cHcgVGhlIG5ldyBwYXNzd29yZCBmb3IgdGhpcyB1c2VyLiBNYXkgYmUgb21pdHRlZCBvciBlbXB0eSB0byBoYXZlIGEgZ2VuZXJhdGVkIHBhc3N3b3JkLgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIElmIHByb3ZpZGVkLCBhIHBhc3N3b3JkIHBvbGljeSByZXF1ZXN0IGNvbnRyb2wgaXMgc2VuZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCB0aGlzIGlzCiAqIGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIExEQVAgQ29udHJvbHMKICogcmV0dXJuZWQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgcGFzc3dvcmQgaWYgbmV3cHcgaXMgZW1wdHkgb3Igb21pdHRlZC4KICogT3RoZXJ3aXNlIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcF9wYXNzd2QoJGxpbmssIHN0cmluZyAkdXNlciA9ICIiLCBzdHJpbmcgJG9sZHB3ID0gIiIsIHN0cmluZyAkbmV3cHcgPSAiIiwgYXJyYXkgJiRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9leG9wX3Bhc3N3ZCgkbGluaywgJHVzZXIsICRvbGRwdywgJG5ld3B3LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQZXJmb3JtcyBhIFdIT0FNSSBleHRlbmRlZCBvcGVyYXRpb24gYW5kIHJldHVybnMgdGhlIGRhdGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGF0YSByZXR1cm5lZCBieSB0aGUgc2VydmVyLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcF93aG9hbWkoJGxpbmspOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2V4b3Bfd2hvYW1pKCRsaW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGVyZm9ybXMgYW4gZXh0ZW5kZWQgb3BlcmF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgbGluayB3aXRoCiAqIHJlcW9pZCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24gYW5kCiAqIHJlcWRhdGEgdGhlIGRhdGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRyZXFvaWQgVGhlIGV4dGVuZGVkIG9wZXJhdGlvbiByZXF1ZXN0IE9JRC4gWW91IG1heSB1c2Ugb25lIG9mIExEQVBfRVhPUF9TVEFSVF9UTFMsIExEQVBfRVhPUF9NT0RJRllfUEFTU1dELCBMREFQX0VYT1BfUkVGUkVTSCwgTERBUF9FWE9QX1dIT19BTV9JLCBMREFQX0VYT1BfVFVSTiwgb3IgYSBzdHJpbmcgd2l0aCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gc2VuZC4KICogQHBhcmFtIHN0cmluZyAkcmVxZGF0YSBUaGUgZXh0ZW5kZWQgb3BlcmF0aW9uIHJlcXVlc3QgZGF0YS4gTWF5IGJlIE5VTEwgZm9yIHNvbWUgb3BlcmF0aW9ucyBsaWtlIExEQVBfRVhPUF9XSE9fQU1fSSwgbWF5IGFsc28gbmVlZCB0byBiZSBCRVIgZW5jb2RlZC4KICogQHBhcmFtIGFycmF5fG51bGwgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldGRhdGEgV2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgZXh0ZW5kZWQgb3BlcmF0aW9uIHJlc3BvbnNlIGRhdGEgaWYgcHJvdmlkZWQuCiAqIElmIG5vdCBwcm92aWRlZCB5b3UgbWF5IHVzZSBsZGFwX3BhcnNlX2V4b3Agb24gdGhlIHJlc3VsdCBvYmplY3QKICogbGF0ZXIgdG8gZ2V0IHRoaXMgZGF0YS4KICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXRvaWQgV2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcmVzcG9uc2UgT0lEIGlmIHByb3ZpZGVkLCB1c3VhbGx5IGVxdWFsIHRvIHRoZSByZXF1ZXN0IE9JRC4KICogQHJldHVybiBtaXhlZCBXaGVuIHVzZWQgd2l0aCByZXRkYXRhLCByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogV2hlbiB1c2VkIHdpdGhvdXQgcmV0ZGF0YSwgcmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZXhvcCgkbGluaywgc3RyaW5nICRyZXFvaWQsIHN0cmluZyAkcmVxZGF0YSA9IG51bGwsID9hcnJheSAkc2VydmVyY3RybHMgPSBudWxsLCA/c3RyaW5nICYkcmV0ZGF0YSA9IG51bGwsID9zdHJpbmcgJiRyZXRvaWQgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfZXhvcCgkbGluaywgJHJlcW9pZCwgJHJlcWRhdGEsICRzZXJ2ZXJjdHJscywgJHJldGRhdGEsICRyZXRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTcGxpdHMgdGhlIEROIHJldHVybmVkIGJ5IGxkYXBfZ2V0X2RuIGFuZCBicmVha3MgaXQKICogdXAgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBFYWNoIHBhcnQgaXMga25vd24gYXMgUmVsYXRpdmUgRGlzdGluZ3Vpc2hlZAogKiBOYW1lLCBvciBSRE4uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBpbnQgJHdpdGhfYXR0cmliIFVzZWQgdG8gcmVxdWVzdCBpZiB0aGUgUkROcyBhcmUgcmV0dXJuZWQgd2l0aCBvbmx5IHZhbHVlcyBvciB0aGVpcgogKiBhdHRyaWJ1dGVzIGFzIHdlbGwuICBUbyBnZXQgUkROcyB3aXRoIHRoZSBhdHRyaWJ1dGVzIChpLmUuIGluCiAqIGF0dHJpYnV0ZT12YWx1ZSBmb3JtYXQpIHNldCB3aXRoX2F0dHJpYiB0byAwCiAqIGFuZCB0byBnZXQgb25seSB2YWx1ZXMgc2V0IGl0IHRvIDEuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgRE4gY29tcG9uZW50cy4KICogVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFycmF5IGhhcyBjb3VudCBrZXkgYW5kCiAqIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByZXR1cm5lZCB2YWx1ZXMsIG5leHQgZWxlbWVudHMgYXJlIG51bWVyaWNhbGx5CiAqIGluZGV4ZWQgRE4gY29tcG9uZW50cy4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2V4cGxvZGVfZG4oc3RyaW5nICRkbiwgaW50ICR3aXRoX2F0dHJpYik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9leHBsb2RlX2RuKCRkbiwgJHdpdGhfYXR0cmliKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBnaXZlbiBlbnRyeS4gUmVtYWluaW5nIGF0dHJpYnV0ZXMgYXJlCiAqIHJldHJpZXZlZCBieSBjYWxsaW5nIGxkYXBfbmV4dF9hdHRyaWJ1dGUgc3VjY2Vzc2l2ZWx5LgogKgogKiBTaW1pbGFyIHRvIHJlYWRpbmcgZW50cmllcywgYXR0cmlidXRlcyBhcmUgYWxzbyByZWFkIG9uZSBieSBvbmUgZnJvbSBhCiAqIHBhcnRpY3VsYXIgZW50cnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBlbnRyeSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbgogKiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2ZpcnN0X2F0dHJpYnV0ZSgkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2ZpcnN0X2F0dHJpYnV0ZSgkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBlbnRyeSBpZGVudGlmaWVyIGZvciBmaXJzdCBlbnRyeSBpbiB0aGUgcmVzdWx0LiBUaGlzIGVudHJ5CiAqIGlkZW50aWZpZXIgaXMgdGhlbiBzdXBwbGllZCB0byBsZGFwX25leHRfZW50cnkKICogcm91dGluZSB0byBnZXQgc3VjY2Vzc2l2ZSBlbnRyaWVzIGZyb20gdGhlIHJlc3VsdC4KICoKICogRW50cmllcyBpbiB0aGUgTERBUCByZXN1bHQgYXJlIHJlYWQgc2VxdWVudGlhbGx5IHVzaW5nIHRoZQogKiBsZGFwX2ZpcnN0X2VudHJ5IGFuZAogKiBsZGFwX25leHRfZW50cnkgZnVuY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgcmVzdWx0IGVudHJ5IGlkZW50aWZpZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvbiBzdWNjZXNzIGFuZAogKiBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2ZpcnN0X2VudHJ5KCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2ZpcnN0X2VudHJ5KCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZyZWVzIHVwIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGludGVybmFsbHkgdG8gc3RvcmUgdGhlIHJlc3VsdC4gQWxsIHJlc3VsdAogKiBtZW1vcnkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIHNjcmlwdCB0ZXJtaW5hdGVzLgogKgogKiBUeXBpY2FsbHkgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgTERBUCByZXN1bHQgZ2V0cyBmcmVlZCBhdCB0aGUKICogZW5kIG9mIHRoZSBzY3JpcHQuIEluIGNhc2UgdGhlIHNjcmlwdCBpcyBtYWtpbmcgc3VjY2Vzc2l2ZSBzZWFyY2hlcyB3aGljaAogKiByZXR1cm4gbGFyZ2UgcmVzdWx0IHNldHMsIGxkYXBfZnJlZV9yZXN1bHQgY291bGQgYmUKICogY2FsbGVkIHRvIGtlZXAgdGhlIHJ1bnRpbWUgbWVtb3J5IHVzYWdlIGJ5IHRoZSBzY3JpcHQgbG93LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgYXR0cmlidXRlcyBhbmQgdmFsdWVzIGZyb20gYW4gZW50cnkgaW4gdGhlIHNlYXJjaCByZXN1bHQuCiAqCiAqIEhhdmluZyBsb2NhdGVkIGEgc3BlY2lmaWMgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSwgeW91IGNhbiBmaW5kIG91dCB3aGF0CiAqIGluZm9ybWF0aW9uIGlzIGhlbGQgZm9yIHRoYXQgZW50cnkgYnkgdXNpbmcgdGhpcyBjYWxsLiBZb3Ugd291bGQgdXNlIHRoaXMKICogY2FsbCBmb3IgYW4gYXBwbGljYXRpb24gd2hpY2ggImJyb3dzZXMiIGRpcmVjdG9yeSBlbnRyaWVzIGFuZC9vciB3aGVyZSB5b3UKICogZG8gbm90IGtub3cgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJpZXMuIEluIG1hbnkgYXBwbGljYXRpb25zCiAqIHlvdSB3aWxsIGJlIHNlYXJjaGluZyBmb3IgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgc3VjaCBhcyBhbiBlbWFpbCBhZGRyZXNzIG9yCiAqIGEgc3VybmFtZSwgYW5kIHdvbid0IGNhcmUgd2hhdCBvdGhlciBkYXRhIGlzIGhlbGQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBhcnJheSBSZXR1cm5zIGEgY29tcGxldGUgZW50cnkgaW5mb3JtYXRpb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheQogKiBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2dldF9hdHRyaWJ1dGVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfYXR0cmlidXRlcygkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBGaW5kcyBvdXQgdGhlIEROIG9mIGFuIGVudHJ5IGluIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgRE4gb2YgdGhlIHJlc3VsdCBlbnRyeSBhbmQgRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9nZXRfZG4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfZG4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVhZHMgbXVsdGlwbGUgZW50cmllcyBmcm9tIHRoZSBnaXZlbiByZXN1bHQsIGFuZCB0aGVuIHJlYWRpbmcgdGhlCiAqIGF0dHJpYnV0ZXMgYW5kIG11bHRpcGxlIHZhbHVlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWRlbnRpZmllcgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYSBjb21wbGV0ZSByZXN1bHQgaW5mb3JtYXRpb24gaW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBvbgogKiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBlcnJvci4KICoKICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXkgaXMgYXMgZm9sbG93cy4KICogVGhlIGF0dHJpYnV0ZSBpbmRleCBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLiAoQXR0cmlidXRlcyBhcmUKICogY2FzZS1pbnNlbnNpdGl2ZSBmb3IgZGlyZWN0b3J5IHNlcnZlcnMsIGJ1dCBub3Qgd2hlbiB1c2VkIGFzCiAqIGFycmF5IGluZGljZXMuKQogKgogKgogKgogKgogKgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X2VudHJpZXMoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9pZGVudGlmaWVyKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX2dldF9lbnRyaWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgcmV0dmFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIGludCAkb3B0aW9uIFRoZSBwYXJhbWV0ZXIgb3B0aW9uIGNhbiBiZSBvbmUgb2Y6CiAqCiAqCiAqCiAqCiAqIE9wdGlvbgogKiBUeXBlCiAqIHNpbmNlCiAqCiAqCiAqCiAqCiAqIExEQVBfT1BUX0RFUkVGCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfU0laRUxJTUlUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfVElNRUxJTUlUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfTkVUV09SS19USU1FT1VUCiAqIGludGVnZXIKICoKICoKICoKICogTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX05VTUJFUgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0RJQUdOT1NUSUNfTUVTU0FHRQogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFRkVSUkFMUwogKiBib29sCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFU1RBUlQKICogYm9vbAogKgogKgogKgogKiBMREFQX09QVF9IT1NUX05BTUUKICogc3RyaW5nCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX1NUUklORwogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfTUFUQ0hFRF9ETgogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfU0VSVkVSX0NPTlRST0xTCiAqIGFycmF5CiAqCiAqCiAqCiAqIExEQVBfT1BUX0NMSUVOVF9DT05UUk9MUwogKiBhcnJheQogKgogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9JRExFCiAqIGludAogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9LRUVQQUxJVkVfUFJPQkVTCiAqIGludAogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9LRUVQQUxJVkVfSU5URVJWQUwKICogaW50CiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DQUNFUlRESVIKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DQUNFUlRGSUxFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfQ0VSVEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DSVBIRVJfU1VJVEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxDSEVDSwogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfTk9ORQogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfUEVFUgogKiBpbnRlZ2VyCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19DUkxfQUxMCiAqIGludGVnZXIKICogNy4xCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19ESEZJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19LRVlJTEUKICogc3RyaW5nCiAqIDcuMQogKgogKgogKiBMREFQX09QVF9YX1RMU19QQUNLQUdFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfTUlOCiAqIGludGVnZXIKICogNy4xCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFCiAqIHN0cmluZwogKiA3LjEKICoKICoKICogTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJUCiAqIGludGVnZXIKICoKICoKICoKICoKICoKICogQHBhcmFtIG1peGVkICRyZXR2YWwgVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgb3B0aW9uIHZhbHVlLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X29wdGlvbigkbGlua19pZGVudGlmaWVyLCBpbnQgJG9wdGlvbiwgJiRyZXR2YWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfb3B0aW9uKCRsaW5rX2lkZW50aWZpZXIsICRvcHRpb24sICRyZXR2YWwpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgYWxsIHRoZSB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBpbiB0aGUgZW50cnkgaW4gdGhlIHJlc3VsdC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGV4YWN0bHkgbGlrZSBsZGFwX2dldF92YWx1ZXMKICogZXhjZXB0IHRoYXQgaXQgaGFuZGxlcyBiaW5hcnkgZGF0YSBhbmQgbm90IHN0cmluZyBkYXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZQogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgYXR0cmlidXRlIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uCiAqIGVycm9yLiBJbmRpdmlkdWFsIHZhbHVlcyBhcmUgYWNjZXNzZWQgYnkgaW50ZWdlciBpbmRleCBpbiB0aGUgYXJyYXkuIFRoZQogKiBmaXJzdCBpbmRleCBpcyAwLiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBjYW4gYmUgZm91bmQgYnkgaW5kZXhpbmcgImNvdW50IgogKiBpbiB0aGUgcmVzdWx0YW50IGFycmF5LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfZ2V0X3ZhbHVlc19sZW4oJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyLCBzdHJpbmcgJGF0dHJpYnV0ZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfdmFsdWVzX2xlbigkbGlua19pZGVudGlmaWVyLCAkcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIsICRhdHRyaWJ1dGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyBhbGwgdGhlIHZhbHVlcyBvZiB0aGUgYXR0cmlidXRlIGluIHRoZSBlbnRyeSBpbiB0aGUgcmVzdWx0LgogKgogKiBUaGlzIGNhbGwgbmVlZHMgYSByZXN1bHRfZW50cnlfaWRlbnRpZmllciwKICogc28gbmVlZHMgdG8gYmUgcHJlY2VkZWQgYnkgb25lIG9mIHRoZSBsZGFwIHNlYXJjaCBjYWxscyBhbmQgb25lCiAqIG9mIHRoZSBjYWxscyB0byBnZXQgYW4gaW5kaXZpZHVhbCBlbnRyeS4KICoKICogWW91IGFwcGxpY2F0aW9uIHdpbGwgZWl0aGVyIGJlIGhhcmQgY29kZWQgdG8gbG9vayBmb3IgY2VydGFpbgogKiBhdHRyaWJ1dGVzIChzdWNoIGFzICJzdXJuYW1lIiBvciAibWFpbCIpIG9yIHlvdSB3aWxsIGhhdmUgdG8gdXNlCiAqIHRoZSBsZGFwX2dldF9hdHRyaWJ1dGVzIGNhbGwgdG8gd29yayBvdXQKICogd2hhdCBhdHRyaWJ1dGVzIGV4aXN0IGZvciBhIGdpdmVuIGVudHJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZQogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgYXR0cmlidXRlIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uCiAqIGVycm9yLiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBjYW4gYmUgZm91bmQgYnkgaW5kZXhpbmcgImNvdW50IiBpbiB0aGUKICogcmVzdWx0YW50IGFycmF5LiBJbmRpdmlkdWFsIHZhbHVlcyBhcmUgYWNjZXNzZWQgYnkgaW50ZWdlciBpbmRleCBpbiB0aGUKICogYXJyYXkuICBUaGUgZmlyc3QgaW5kZXggaXMgMC4KICoKICogTERBUCBhbGxvd3MgbW9yZSB0aGFuIG9uZSBlbnRyeSBmb3IgYW4gYXR0cmlidXRlLCBzbyBpdCBjYW4sIGZvciBleGFtcGxlLAogKiBzdG9yZSBhIG51bWJlciBvZiBlbWFpbCBhZGRyZXNzZXMgZm9yIG9uZSBwZXJzb24ncyBkaXJlY3RvcnkgZW50cnkgYWxsCiAqIGxhYmVsZWQgd2l0aCB0aGUgYXR0cmlidXRlICJtYWlsIgogKgogKgogKiByZXR1cm5fdmFsdWVbImNvdW50Il0gPSBudW1iZXIgb2YgdmFsdWVzIGZvciBhdHRyaWJ1dGUKICogcmV0dXJuX3ZhbHVlWzBdID0gZmlyc3QgdmFsdWUgb2YgYXR0cmlidXRlCiAqIHJldHVybl92YWx1ZVtpXSA9IGl0aCB2YWx1ZSBvZiBhdHRyaWJ1dGUKICoKICoKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX2dldF92YWx1ZXMoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyLCBzdHJpbmcgJGF0dHJpYnV0ZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9nZXRfdmFsdWVzKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllciwgJGF0dHJpYnV0ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBlcmZvcm1zIHRoZSBzZWFyY2ggZm9yIGEgc3BlY2lmaWVkIGZpbHRlciBvbiB0aGUKICogZGlyZWN0b3J5IHdpdGggdGhlIHNjb3BlIExEQVBfU0NPUEVfT05FTEVWRUwuCiAqCiAqIExEQVBfU0NPUEVfT05FTEVWRUwgbWVhbnMgdGhhdCB0aGUgc2VhcmNoIHNob3VsZCBvbmx5CiAqIHJldHVybiBpbmZvcm1hdGlvbiB0aGF0IGlzIGF0IHRoZSBsZXZlbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUKICogYmFzZV9kbiBnaXZlbiBpbiB0aGUgY2FsbC4KICogKEVxdWl2YWxlbnQgdG8gdHlwaW5nICJscyIgYW5kIGdldHRpbmcgYSBsaXN0IG9mIGZpbGVzIGFuZCBmb2xkZXJzIGluIHRoZQogKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LikKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkYmFzZV9kbiBUaGUgYmFzZSBETiBmb3IgdGhlIGRpcmVjdG9yeS4KICogQHBhcmFtIHN0cmluZyAkZmlsdGVyCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkYmFzZV9kbiwgc3RyaW5nICRmaWx0ZXIsIGFycmF5ICRhdHRyaWJ1dGVzID0gbnVsbCwgaW50ICRhdHRyc29ubHkgPSAwLCBpbnQgJHNpemVsaW1pdCA9IC0xLCBpbnQgJHRpbWVsaW1pdCA9IC0xLCBpbnQgJGRlcmVmID0gTERBUF9ERVJFRl9ORVZFUiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXJ2ZXJjdHJscyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmLCAkc2VydmVyY3RybHMpOwogICAgfSBlbHNlaWYgKCRkZXJlZiAhPT0gTERBUF9ERVJFRl9ORVZFUikgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9saXN0KCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCk7CiAgICB9IGVsc2VpZiAoJHNpemVsaW1pdCAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfbGlzdCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQpOwogICAgfSBlbHNlaWYgKCRhdHRyc29ubHkgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfbGlzdCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX2xpc3QoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX2xpc3QoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfbW9kX2FkZCBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGRuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX21vZF9hZGRfZXh0KCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBZGRzIG9uZSBvciBtb3JlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gdGhlIHNwZWNpZmllZCBkbi4KICogVG8gYWRkIGEgd2hvbGUgbmV3IG9iamVjdCBzZWUgbGRhcF9hZGQgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgbGlzdGluZyB0aGUgYXR0aXJidXRlIHZhbHVlcyB0byBhZGQuIElmIGFuIGF0dHJpYnV0ZSB3YXMgbm90IGV4aXN0aW5nIHlldCBpdCB3aWxsIGJlIGFkZGVkLiBJZiBhbiBhdHRyaWJ1dGUgaXMgZXhpc3RpbmcgeW91IGNhbiBvbmx5IGFkZCB2YWx1ZXMgdG8gaXQgaWYgaXQgc3VwcG9ydHMgbXVsdGlwbGUgdmFsdWVzLgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfbW9kX2FkZCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfYWRkKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRG9lcyB0aGUgc2FtZSB0aGluZyBhcyBsZGFwX21vZF9kZWwgYnV0IHJldHVybnMgdGhlIExEQVAgcmVzdWx0IHJlc291cmNlIHRvIGJlIHBhcnNlZCB3aXRoIGxkYXBfcGFyc2VfcmVzdWx0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllcgogKiBAcGFyYW0gc3RyaW5nICRkbgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9tb2RfZGVsX2V4dCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfZGVsX2V4dCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmVtb3ZlcyBvbmUgb3IgbW9yZSBhdHRyaWJ1dGUgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCBkbi4KICogT2JqZWN0IGRlbGV0aW9ucyBhcmUgZG9uZSBieSB0aGUKICogbGRhcF9kZWxldGUgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9kZWwoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJGVudHJ5LCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbW9kX2RlbCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRlbnRyeSwgJHNlcnZlcmN0cmxzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9tb2RfcmVwbGFjZSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyCiAqIEBwYXJhbSBzdHJpbmcgJGRuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscwogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gTERBUCByZXN1bHQgaWRlbnRpZmllci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlX2V4dCgkbGlua19pZGVudGlmaWVyLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9tb2RfcmVwbGFjZV9leHQoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkZW50cnksICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlcGxhY2VzIG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRuLgogKiBJdCBtYXkgYWxzbyBhZGQgb3IgcmVtb3ZlIGF0dHJpYnV0ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGRuIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIEBwYXJhbSBhcnJheSAkZW50cnkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgbGlzdGluZyB0aGUgYXR0cmlidXRlcyB0byByZXBsYWNlLiBTZW5kaW5nIGFuIGVtcHR5IGFycmF5IGFzIHZhbHVlIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUsIHdoaWxlIHNlbmRpbmcgYW4gYXR0cmlidXRlIG5vdCBleGlzdGluZyB5ZXQgb24gdGhpcyBlbnRyeSB3aWxsIGFkZCBpdC4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX21vZF9yZXBsYWNlKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTW9kaWZpZXMgYW4gZXhpc3RpbmcgZW50cnkgaW4gdGhlIExEQVAgZGlyZWN0b3J5LiBBbGxvd3MgZGV0YWlsZWQKICogc3BlY2lmaWNhdGlvbiBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byBwZXJmb3JtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRkbiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5IEFuIGFycmF5IHRoYXQgc3BlY2lmaWVzIHRoZSBtb2RpZmljYXRpb25zIHRvIG1ha2UuIEVhY2ggZW50cnkgaW4gdGhpcwogKiBhcnJheSBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHR3byBvciB0aHJlZSBrZXlzOgogKiBhdHRyaWIgbWFwcyB0byB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIG1vZGlmeSwKICogbW9kdHlwZSBtYXBzIHRvIHRoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBwZXJmb3JtLAogKiBhbmQgKGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtb2RpZmljYXRpb24pIHZhbHVlcwogKiBtYXBzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSB2YWx1ZXMgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4KICoKICogUG9zc2libGUgdmFsdWVzIGZvciBtb2R0eXBlIGluY2x1ZGU6CiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX0FERAogKgogKgogKiBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyBhZGRlZCAoYXMKICogYW4gYWRkaXRpb25hbCB2YWx1ZSkgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuCiAqCiAqCiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX1JFTU9WRQogKgogKgogKiBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyByZW1vdmVkCiAqIGZyb20gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieSBhdHRyaWIuIEFueSB2YWx1ZSBvZgogKiB0aGUgYXR0cmlidXRlIG5vdCBjb250YWluZWQgaW4gdGhlIHZhbHVlcyBhcnJheQogKiB3aWxsIHJlbWFpbiB1bnRvdWNoZWQuCiAqCiAqCiAqCiAqCiAqIExEQVBfTU9ESUZZX0JBVENIX1JFTU9WRV9BTEwKICoKICoKICogQWxsIHZhbHVlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYnkKICogYXR0cmliLiBBIHZhbHVlcyBlbnRyeSBtdXN0CiAqIG5vdCBiZSBwcm92aWRlZC4KICoKICoKICoKICoKICogTERBUF9NT0RJRllfQkFUQ0hfUkVQTEFDRQogKgogKgogKiBBbGwgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQKICogdGhyb3VnaCB2YWx1ZXMuCiAqCiAqCiAqCiAqCiAqCiAqIEVhY2ggdmFsdWUgc3BlY2lmaWVkIHRocm91Z2ggdmFsdWVzIGlzIGFkZGVkIChhcwogKiBhbiBhZGRpdGlvbmFsIHZhbHVlKSB0byB0aGUgYXR0cmlidXRlIG5hbWVkIGJ5CiAqIGF0dHJpYi4KICoKICogRWFjaCB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaCB2YWx1ZXMgaXMgcmVtb3ZlZAogKiBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYnkgYXR0cmliLiBBbnkgdmFsdWUgb2YKICogdGhlIGF0dHJpYnV0ZSBub3QgY29udGFpbmVkIGluIHRoZSB2YWx1ZXMgYXJyYXkKICogd2lsbCByZW1haW4gdW50b3VjaGVkLgogKgogKiBBbGwgdmFsdWVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuIEEgdmFsdWVzIGVudHJ5IG11c3QKICogbm90IGJlIHByb3ZpZGVkLgogKgogKiBBbGwgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQKICogdGhyb3VnaCB2YWx1ZXMuCiAqCiAqIE5vdGUgdGhhdCBhbnkgdmFsdWUgZm9yIGF0dHJpYiBtdXN0IGJlIGEgc3RyaW5nLCBhbnkKICogdmFsdWUgZm9yIHZhbHVlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGFuZAogKiBhbnkgdmFsdWUgZm9yIG1vZHR5cGUgbXVzdCBiZSBvbmUgb2YgdGhlCiAqIExEQVBfTU9ESUZZX0JBVENIXyogY29uc3RhbnRzIGxpc3RlZCBhYm92ZS4KICogQHBhcmFtIGFycmF5ICRzZXJ2ZXJjdHJscyBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIHZhbHVlcyBpcyBhZGRlZCAoYXMKICogYW4gYWRkaXRpb25hbCB2YWx1ZSkgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiBhdHRyaWIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9tb2RpZnlfYmF0Y2goJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgYXJyYXkgJGVudHJ5LCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbW9kaWZ5X2JhdGNoKCRsaW5rX2lkZW50aWZpZXIsICRkbiwgJGVudHJ5LCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBhdHRyaWJ1dGVzIGluIGFuIGVudHJ5LiBUaGUgZmlyc3QgY2FsbCB0bwogKiBsZGFwX25leHRfYXR0cmlidXRlIGlzIG1hZGUgd2l0aCB0aGUKICogcmVzdWx0X2VudHJ5X2lkZW50aWZpZXIgcmV0dXJuZWQgZnJvbQogKiBsZGFwX2ZpcnN0X2F0dHJpYnV0ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuZXh0IGF0dHJpYnV0ZSBpbiBhbiBlbnRyeSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbgogKiBlcnJvci4KICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX25leHRfYXR0cmlidXRlKCRsaW5rX2lkZW50aWZpZXIsICRyZXN1bHRfZW50cnlfaWRlbnRpZmllcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfbmV4dF9hdHRyaWJ1dGUoJGxpbmtfaWRlbnRpZmllciwgJHJlc3VsdF9lbnRyeV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGFyc2UgTERBUCBleHRlbmRlZCBvcGVyYXRpb24gZGF0YSBmcm9tIHJlc3VsdCBvYmplY3QgcmVzdWx0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBBbiBMREFQIHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgbGRhcF9leG9wLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldGRhdGEgV2lsbCBiZSBmaWxsZWQgYnkgdGhlIHJlc3BvbnNlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcmV0b2lkIFdpbGwgYmUgZmlsbGVkIGJ5IHRoZSByZXNwb25zZSBPSUQuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9wYXJzZV9leG9wKCRsaW5rLCAkcmVzdWx0LCA/c3RyaW5nICYkcmV0ZGF0YSA9IG51bGwsID9zdHJpbmcgJiRyZXRvaWQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfcGFyc2VfZXhvcCgkbGluaywgJHJlc3VsdCwgJHJldGRhdGEsICRyZXRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGFyc2VzIGFuIExEQVAgc2VhcmNoIHJlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IEFuIExEQVAgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBsZGFwX2xpc3Qgb3IKICogbGRhcF9zZWFyY2guCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyY29kZSBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlIExEQVAgZXJyb3IgY29kZSBpbgogKiB0aGUgcmVzdWx0LCBvciAwIGlmIG5vIGVycm9yIG9jY3VycmVkLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG1hdGNoZWRkbiBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gYSBtYXRjaGVkIEROIGlmIG9uZSB3YXMKICogcmVjb2duaXNlZCB3aXRoaW4gdGhlIHJlcXVlc3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHNldCB0byBOVUxMLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVycm1zZyBBIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlIExEQVAgZXJyb3IgbWVzc2FnZSBpbgogKiB0aGUgcmVzdWx0LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZWZlcnJhbHMgQSByZWZlcmVuY2UgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgc2V0IHRvIGFuIGFycmF5IHNldAogKiB0byBhbGwgb2YgdGhlIHJlZmVycmFsIHN0cmluZ3MgaW4gdGhlIHJlc3VsdCwgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm8KICogcmVmZXJyYWxzIHdlcmUgcmV0dXJuZWQuCiAqIEBwYXJhbSBhcnJheXxudWxsICRzZXJ2ZXJjdHJscyBBbiBhcnJheSBvZiBMREFQIENvbnRyb2xzIHdoaWNoIGhhdmUgYmVlbiBzZW50IHdpdGggdGhlIHJlc3BvbnNlLgogKiBAdGhyb3dzIExkYXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGxkYXBfcGFyc2VfcmVzdWx0KCRsaW5rLCAkcmVzdWx0LCA/aW50ICYkZXJyY29kZSwgP3N0cmluZyAmJG1hdGNoZWRkbiA9IG51bGwsID9zdHJpbmcgJiRlcnJtc2cgPSBudWxsLCA/YXJyYXkgJiRyZWZlcnJhbHMgPSBudWxsLCA/YXJyYXkgJiRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9wYXJzZV9yZXN1bHQoJGxpbmssICRyZXN1bHQsICRlcnJjb2RlLCAkbWF0Y2hlZGRuLCAkZXJybXNnLCAkcmVmZXJyYWxzLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgdGhlIHNlYXJjaCBmb3IgYSBzcGVjaWZpZWQgZmlsdGVyIG9uIHRoZQogKiBkaXJlY3Rvcnkgd2l0aCB0aGUgc2NvcGUgTERBUF9TQ09QRV9CQVNFLiBTbyBpdCBpcwogKiBlcXVpdmFsZW50IHRvIHJlYWRpbmcgYW4gZW50cnkgZnJvbSB0aGUgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRiYXNlX2RuIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXIgQW4gZW1wdHkgZmlsdGVyIGlzIG5vdCBhbGxvd2VkLiBJZiB5b3Ugd2FudCB0byByZXRyaWV2ZSBhYnNvbHV0ZWx5IGFsbAogKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBlbnRyeSwgdXNlIGEgZmlsdGVyIG9mCiAqIG9iamVjdENsYXNzPSouIElmIHlvdSBrbm93IHdoaWNoIGVudHJ5IHR5cGVzIGFyZQogKiB1c2VkIG9uIHRoZSBkaXJlY3Rvcnkgc2VydmVyLCB5b3UgbWlnaHQgdXNlIGFuIGFwcHJvcHJpYXRlIGZpbHRlciBzdWNoCiAqIGFzIG9iamVjdENsYXNzPWluZXRPcmdQZXJzb24uCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkYmFzZV9kbiwgc3RyaW5nICRmaWx0ZXIsIGFycmF5ICRhdHRyaWJ1dGVzID0gbnVsbCwgaW50ICRhdHRyc29ubHkgPSAwLCBpbnQgJHNpemVsaW1pdCA9IC0xLCBpbnQgJHRpbWVsaW1pdCA9IC0xLCBpbnQgJGRlcmVmID0gTERBUF9ERVJFRl9ORVZFUiwgYXJyYXkgJHNlcnZlcmN0cmxzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXJ2ZXJjdHJscyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmLCAkc2VydmVyY3RybHMpOwogICAgfSBlbHNlaWYgKCRkZXJlZiAhPT0gTERBUF9ERVJFRl9ORVZFUikgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9yZWFkKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCk7CiAgICB9IGVsc2VpZiAoJHNpemVsaW1pdCAhPT0gLTEpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfcmVhZCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQpOwogICAgfSBlbHNlaWYgKCRhdHRyc29ubHkgIT09IDApIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfcmVhZCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3JlYWQoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3JlYWQoJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfcmVuYW1lIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIHN0cmluZyAkZG4KICogQHBhcmFtIHN0cmluZyAkbmV3cmRuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld3BhcmVudAogKiBAcGFyYW0gYm9vbCAkZGVsZXRlb2xkcmRuCiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIExEQVAgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZW5hbWVfZXh0KCRsaW5rX2lkZW50aWZpZXIsIHN0cmluZyAkZG4sIHN0cmluZyAkbmV3cmRuLCBzdHJpbmcgJG5ld3BhcmVudCwgYm9vbCAkZGVsZXRlb2xkcmRuLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfcmVuYW1lX2V4dCgkbGlua19pZGVudGlmaWVyLCAkZG4sICRuZXdyZG4sICRuZXdwYXJlbnQsICRkZWxldGVvbGRyZG4sICRzZXJ2ZXJjdHJscyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBMZGFwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBlbnRyeSBzcGVjaWZpZWQgYnkgZG4gaXMgcmVuYW1lZC9tb3ZlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZG4gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogQHBhcmFtIHN0cmluZyAkbmV3cmRuIFRoZSBuZXcgUkROLgogKiBAcGFyYW0gc3RyaW5nICRuZXdwYXJlbnQgVGhlIG5ldyBwYXJlbnQvc3VwZXJpb3IgZW50cnkuCiAqIEBwYXJhbSBib29sICRkZWxldGVvbGRyZG4gSWYgVFJVRSB0aGUgb2xkIFJETiB2YWx1ZShzKSBpcyByZW1vdmVkLCBlbHNlIHRoZSBvbGQgUkROIHZhbHVlKHMpCiAqIGlzIHJldGFpbmVkIGFzIG5vbi1kaXN0aW5ndWlzaGVkIHZhbHVlcyBvZiB0aGUgZW50cnkuCiAqIEBwYXJhbSBhcnJheSAkc2VydmVyY3RybHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9yZW5hbWUoJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRkbiwgc3RyaW5nICRuZXdyZG4sIHN0cmluZyAkbmV3cGFyZW50LCBib29sICRkZWxldGVvbGRyZG4sIGFycmF5ICRzZXJ2ZXJjdHJscyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbGRhcF9yZW5hbWUoJGxpbmtfaWRlbnRpZmllciwgJGRuLCAkbmV3cmRuLCAkbmV3cGFyZW50LCAkZGVsZXRlb2xkcmRuLCAkc2VydmVyY3RybHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rCiAqIEBwYXJhbSBzdHJpbmcgJGJpbmRkbgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gc3RyaW5nICRzYXNsX21lY2gKICogQHBhcmFtIHN0cmluZyAkc2FzbF9yZWFsbQogKiBAcGFyYW0gc3RyaW5nICRzYXNsX2F1dGhjX2lkCiAqIEBwYXJhbSBzdHJpbmcgJHNhc2xfYXV0aHpfaWQKICogQHBhcmFtIHN0cmluZyAkcHJvcHMKICogQHRocm93cyBMZGFwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsZGFwX3Nhc2xfYmluZCgkbGluaywgc3RyaW5nICRiaW5kZG4gPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgc3RyaW5nICRzYXNsX21lY2ggPSBudWxsLCBzdHJpbmcgJHNhc2xfcmVhbG0gPSBudWxsLCBzdHJpbmcgJHNhc2xfYXV0aGNfaWQgPSBudWxsLCBzdHJpbmcgJHNhc2xfYXV0aHpfaWQgPSBudWxsLCBzdHJpbmcgJHByb3BzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX3Nhc2xfYmluZCgkbGluaywgJGJpbmRkbiwgJHBhc3N3b3JkLCAkc2FzbF9tZWNoLCAkc2FzbF9yZWFsbSwgJHNhc2xfYXV0aGNfaWQsICRzYXNsX2F1dGh6X2lkLCAkcHJvcHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGRhcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGVyZm9ybXMgdGhlIHNlYXJjaCBmb3IgYSBzcGVjaWZpZWQgZmlsdGVyIG9uIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgc2NvcGUKICogb2YgTERBUF9TQ09QRV9TVUJUUkVFLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2VhcmNoaW5nCiAqIHRoZSBlbnRpcmUgZGlyZWN0b3J5LgogKgogKiBGcm9tIDQuMC41IG9uIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBkbyBwYXJhbGxlbCBzZWFyY2hlcy4gVG8gZG8gdGhpcwogKiB5b3UgdXNlIGFuIGFycmF5IG9mIGxpbmsgaWRlbnRpZmllcnMsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGlkZW50aWZpZXIsCiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gSWYgeW91IGRvbid0IHdhbnQgdGhlIHNhbWUgYmFzZSBETiBhbmQgdGhlCiAqIHNhbWUgZmlsdGVyIGZvciBhbGwgdGhlIHNlYXJjaGVzLCB5b3UgY2FuIGFsc28gdXNlIGFuIGFycmF5IG9mIGJhc2UgRE5zCiAqIGFuZC9vciBhbiBhcnJheSBvZiBmaWx0ZXJzLiBUaG9zZSBhcnJheXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplIGFzCiAqIHRoZSBsaW5rIGlkZW50aWZpZXIgYXJyYXkgc2luY2UgdGhlIGZpcnN0IGVudHJpZXMgb2YgdGhlIGFycmF5cyBhcmUKICogdXNlZCBmb3Igb25lIHNlYXJjaCwgdGhlIHNlY29uZCBlbnRyaWVzIGFyZSB1c2VkIGZvciBhbm90aGVyLCBhbmQgc28KICogb24uIFdoZW4gZG9pbmcgcGFyYWxsZWwgc2VhcmNoZXMgYW4gYXJyYXkgb2Ygc2VhcmNoIHJlc3VsdAogKiBpZGVudGlmaWVycyBpcyByZXR1cm5lZCwgZXhjZXB0IGluIGNhc2Ugb2YgZXJyb3IsIHRoZW4gdGhlIGVudHJ5CiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlYXJjaCB3aWxsIGJlIEZBTFNFLiBUaGlzIGlzIHZlcnkgbXVjaCBsaWtlCiAqIHRoZSB2YWx1ZSBub3JtYWxseSByZXR1cm5lZCwgZXhjZXB0IHRoYXQgYSByZXN1bHQgaWRlbnRpZmllciBpcyBhbHdheXMKICogcmV0dXJuZWQgd2hlbiBhIHNlYXJjaCB3YXMgbWFkZS4gVGhlcmUgYXJlIHNvbWUgcmFyZSBjYXNlcyB3aGVyZSB0aGUKICogbm9ybWFsIHNlYXJjaCByZXR1cm5zIEZBTFNFIHdoaWxlIHRoZSBwYXJhbGxlbCBzZWFyY2ggcmV0dXJucyBhbgogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8YXJyYXkgJGxpbmtfaWRlbnRpZmllciBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRiYXNlX2RuIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXIgVGhlIHNlYXJjaCBmaWx0ZXIgY2FuIGJlIHNpbXBsZSBvciBhZHZhbmNlZCwgdXNpbmcgYm9vbGVhbiBvcGVyYXRvcnMgaW4KICogdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIExEQVAgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBOZXRzY2FwZSBEaXJlY3RvcnkgU0RLIG9yCiAqIFJGQzQ1MTUgZm9yIGZ1bGwKICogaW5mb3JtYXRpb24gb24gZmlsdGVycykuCiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqCiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiBAcGFyYW0gaW50ICRhdHRyc29ubHkgU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqCiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIEBwYXJhbSBpbnQgJHRpbWVsaW1pdCBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBob3cgbG9uZyBpcyBzcGVuZCBvbiB0aGUgc2VhcmNoLiBTZXR0aW5nCiAqIHRoaXMgdG8gMCBtZWFucyBubyBsaW1pdC4KICoKICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgdGltZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIEBwYXJhbSBpbnQgJGRlcmVmIFNwZWNpZmllcyBob3cgYWxpYXNlcyBzaG91bGQgYmUgaGFuZGxlZCBkdXJpbmcgdGhlIHNlYXJjaC4gSXQgY2FuIGJlCiAqIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKgogKiBMREFQX0RFUkVGX05FVkVSIC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9TRUFSQ0hJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgZHVyaW5nIHRoZSBzZWFyY2ggYnV0IG5vdCB3aGVuIGxvY2F0aW5nIHRoZSBiYXNlIG9iamVjdAogKiBvZiB0aGUgc2VhcmNoLgogKgogKgogKgogKgogKiBMREFQX0RFUkVGX0ZJTkRJTkcgLSBhbGlhc2VzIHNob3VsZCBiZQogKiBkZXJlZmVyZW5jZWQgd2hlbiBsb2NhdGluZyB0aGUgYmFzZSBvYmplY3QgYnV0IG5vdCBkdXJpbmcgdGhlIHNlYXJjaC4KICoKICoKICoKICoKICogTERBUF9ERVJFRl9BTFdBWVMgLSBhbGlhc2VzIHNob3VsZCBiZSBkZXJlZmVyZW5jZWQKICogYWx3YXlzLgogKgogKgogKgogKiBAcGFyYW0gYXJyYXkgJHNlcnZlcmN0cmxzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzZWFyY2ggcmVzdWx0IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgc3RyaW5nICRiYXNlX2RuLCBzdHJpbmcgJGZpbHRlciwgYXJyYXkgJGF0dHJpYnV0ZXMgPSBudWxsLCBpbnQgJGF0dHJzb25seSA9IDAsIGludCAkc2l6ZWxpbWl0ID0gLTEsIGludCAkdGltZWxpbWl0ID0gLTEsIGludCAkZGVyZWYgPSBMREFQX0RFUkVGX05FVkVSLCBhcnJheSAkc2VydmVyY3RybHMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlcnZlcmN0cmxzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHksICRzaXplbGltaXQsICR0aW1lbGltaXQsICRkZXJlZiwgJHNlcnZlcmN0cmxzKTsKICAgIH0gZWxzZWlmICgkZGVyZWYgIT09IExEQVBfREVSRUZfTkVWRVIpIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfc2VhcmNoKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyLCAkYXR0cmlidXRlcywgJGF0dHJzb25seSwgJHNpemVsaW1pdCwgJHRpbWVsaW1pdCwgJGRlcmVmKTsKICAgIH0gZWxzZWlmICgkdGltZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzLCAkYXR0cnNvbmx5LCAkc2l6ZWxpbWl0LCAkdGltZWxpbWl0KTsKICAgIH0gZWxzZWlmICgkc2l6ZWxpbWl0ICE9PSAtMSkgewogICAgICAgICRyZXN1bHQgPSBcbGRhcF9zZWFyY2goJGxpbmtfaWRlbnRpZmllciwgJGJhc2VfZG4sICRmaWx0ZXIsICRhdHRyaWJ1dGVzLCAkYXR0cnNvbmx5LCAkc2l6ZWxpbWl0KTsKICAgIH0gZWxzZWlmICgkYXR0cnNvbmx5ICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMsICRhdHRyc29ubHkpOwogICAgfSBlbHNlaWYgKCRhdHRyaWJ1dGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxsZGFwX3NlYXJjaCgkbGlua19pZGVudGlmaWVyLCAkYmFzZV9kbiwgJGZpbHRlciwgJGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGxkYXBfc2VhcmNoKCRsaW5rX2lkZW50aWZpZXIsICRiYXNlX2RuLCAkZmlsdGVyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24gdG8gYmUgbmV3dmFsLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgcGFyYW1ldGVyIG9wdGlvbiBjYW4gYmUgb25lIG9mOgogKgogKgogKgogKgogKiBPcHRpb24KICogVHlwZQogKiBBdmFpbGFibGUgc2luY2UKICoKICoKICoKICoKICogTERBUF9PUFRfREVSRUYKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9TSVpFTElNSVQKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9USU1FTElNSVQKICogaW50ZWdlcgogKgogKgogKgogKiBMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQKICogaW50ZWdlcgogKiBQSFAgNS4zLjAKICoKICoKICogTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX05VTUJFUgogKiBpbnRlZ2VyCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFRkVSUkFMUwogKiBib29sCiAqCiAqCiAqCiAqIExEQVBfT1BUX1JFU1RBUlQKICogYm9vbAogKgogKgogKgogKiBMREFQX09QVF9IT1NUX05BTUUKICogc3RyaW5nCiAqCiAqCiAqCiAqIExEQVBfT1BUX0VSUk9SX1NUUklORwogKiBzdHJpbmcKICoKICoKICoKICogTERBUF9PUFRfRElBR05PU1RJQ19NRVNTQUdFCiAqIHN0cmluZwogKgogKgogKgogKiBMREFQX09QVF9NQVRDSEVEX0ROCiAqIHN0cmluZwogKgogKgogKgogKiBMREFQX09QVF9TRVJWRVJfQ09OVFJPTFMKICogYXJyYXkKICoKICoKICoKICogTERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTCiAqIGFycmF5CiAqCiAqCiAqCiAqIExEQVBfT1BUX1hfS0VFUEFMSVZFX0lETEUKICogaW50CiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9QUk9CRVMKICogaW50CiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX0tFRVBBTElWRV9JTlRFUlZBTAogKiBpbnQKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NBQ0VSVERJUgogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NBQ0VSVEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19DRVJURklMRQogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NJUEhFUl9TVUlURQogKiBzdHJpbmcKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTENIRUNLCiAqIGludGVnZXIKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX0NSTEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19ESEZJTEUKICogc3RyaW5nCiAqIFBIUCA3LjEuMAogKgogKgogKiBMREFQX09QVF9YX1RMU19LRVlGSUxFCiAqIHN0cmluZwogKiBQSFAgNy4xLjAKICoKICoKICogTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfTUlOCiAqIGludGVnZXIKICogUEhQIDcuMS4wCiAqCiAqCiAqIExEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFCiAqIHN0cmluZwogKiBQSFAgNy4xLjAKICoKICoKICogTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJUCiAqIGludGVnZXIKICogUEhQIDcuMC41CiAqCiAqCiAqCiAqCiAqCiAqIExEQVBfT1BUX1NFUlZFUl9DT05UUk9MUyBhbmQKICogTERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTIHJlcXVpcmUgYSBsaXN0IG9mCiAqIGNvbnRyb2xzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgb2YgY29udHJvbHMuIEEKICogY29udHJvbCBjb25zaXN0cyBvZiBhbiBvaWQgaWRlbnRpZnlpbmcgdGhlIGNvbnRyb2wsCiAqIGFuIG9wdGlvbmFsIHZhbHVlLCBhbmQgYW4gb3B0aW9uYWwgZmxhZyBmb3IKICogY3JpdGljYWxpdHkuIEluIFBIUCBhIGNvbnRyb2wgaXMgZ2l2ZW4gYnkgYW4KICogYXJyYXkgY29udGFpbmluZyBhbiBlbGVtZW50IHdpdGggdGhlIGtleSBvaWQKICogYW5kIHN0cmluZyB2YWx1ZSwgYW5kIHR3byBvcHRpb25hbCBlbGVtZW50cy4gVGhlIG9wdGlvbmFsCiAqIGVsZW1lbnRzIGFyZSBrZXkgdmFsdWUgd2l0aCBzdHJpbmcgdmFsdWUKICogYW5kIGtleSBpc2NyaXRpY2FsIHdpdGggYm9vbGVhbiB2YWx1ZS4KICogaXNjcml0aWNhbCBkZWZhdWx0cyB0byBGQUxTRQogKiBpZiBub3Qgc3VwcGxpZWQuIFNlZSBkcmFmdC1pZXRmLWxkYXBleHQtbGRhcC1jLWFwaS14eC50eHQKICogZm9yIGRldGFpbHMuIFNlZSBhbHNvIHRoZSBzZWNvbmQgZXhhbXBsZSBiZWxvdy4KICogQHBhcmFtIG1peGVkICRuZXd2YWwgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBvcHRpb24uCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF9zZXRfb3B0aW9uKCRsaW5rX2lkZW50aWZpZXIsIGludCAkb3B0aW9uLCAkbmV3dmFsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxkYXBfc2V0X29wdGlvbigkbGlua19pZGVudGlmaWVyLCAkb3B0aW9uLCAkbmV3dmFsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFVuYmluZHMgZnJvbSB0aGUgTERBUCBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QuCiAqIEB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGRhcF91bmJpbmQoJGxpbmtfaWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsZGFwX3VuYmluZCgkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExkYXBFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/libxml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMaWJ4bWxFeGNlcHRpb247CgovKioKICogUmV0cmlldmUgbGFzdCBlcnJvciBmcm9tIGxpYnhtbC4KICoKICogQHJldHVybiBcTGliWE1MRXJyb3IgUmV0dXJucyBhIExpYlhNTEVycm9yIG9iamVjdCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdGhlCiAqIGJ1ZmZlciwgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIExpYnhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGlieG1sX2dldF9sYXN0X2Vycm9yKCk6IFxMaWJYTUxFcnJvcgp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGxpYnhtbF9nZXRfbGFzdF9lcnJvcigpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTGlieG1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENoYW5nZXMgdGhlIGRlZmF1bHQgZXh0ZXJuYWwgZW50aXR5IGxvYWRlci4KICoKICogQHBhcmFtIGNhbGxhYmxlICRyZXNvbHZlcl9mdW5jdGlvbiBBIGNhbGxhYmxlIHRoYXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLiBUd28gc3RyaW5ncywgYSBwdWJsaWMgaWQKICogYW5kIHN5c3RlbSBpZCwgYW5kIGEgY29udGV4dCAoYW4gYXJyYXkgd2l0aCBmb3VyIGtleXMpIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4KICogVGhpcyBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGEgcmVzb3VyY2UsIGEgc3RyaW5nIGZyb20gd2hpY2ggYSByZXNvdXJjZSBjYW4gYmUKICogb3BlbmVkLCBvciBOVUxMLgogKiBAdGhyb3dzIExpYnhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbGlieG1sX3NldF9leHRlcm5hbF9lbnRpdHlfbG9hZGVyKGNhbGxhYmxlICRyZXNvbHZlcl9mdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXIoJHJlc29sdmVyX2Z1bmN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IExpYnhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/lzf.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xMemZFeGNlcHRpb247CgovKioKICogbHpmX2NvbXByZXNzIGNvbXByZXNzZXMgdGhlIGdpdmVuCiAqIGRhdGEgc3RyaW5nIHVzaW5nIExaRiBlbmNvZGluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAqIEB0aHJvd3MgTHpmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBsemZfY29tcHJlc3Moc3RyaW5nICRkYXRhKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbHpmX2NvbXByZXNzKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEx6ZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBsemZfY29tcHJlc3MgZGVjb21wcmVzc2VzIHRoZSBnaXZlbgogKiBkYXRhIHN0cmluZyBjb250YWluaW5nIGx6ZiBlbmNvZGVkIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGNvbXByZXNzZWQgc3RyaW5nLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KICogQHRocm93cyBMemZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGx6Zl9kZWNvbXByZXNzKHN0cmluZyAkZGF0YSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGx6Zl9kZWNvbXByZXNzKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEx6ZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mailparse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNYWlscGFyc2VFeGNlcHRpb247CgovKioKICogRXh0cmFjdHMvZGVjb2RlcyBhIG1lc3NhZ2Ugc2VjdGlvbiBmcm9tIHRoZSBzdXBwbGllZCBmaWxlbmFtZS4KICoKICogVGhlIGNvbnRlbnRzIG9mIHRoZSBzZWN0aW9uIHdpbGwgYmUgZGVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdHJhbnNmZXIKICogZW5jb2RpbmcgLSBiYXNlNjQsIHF1b3RlZC1wcmludGFibGUgYW5kIHV1ZW5jb2RlZCB0ZXh0IGFyZSBzdXBwb3J0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgQSB2YWxpZCBNSU1FIHJlc291cmNlLCBjcmVhdGVkIHdpdGgKICogbWFpbHBhcnNlX21zZ19jcmVhdGUuCiAqIEBwYXJhbSBtaXhlZCAkZmlsZW5hbWUgQ2FuIGJlIGEgZmlsZSBuYW1lIG9yIGEgdmFsaWQgc3RyZWFtIHJlc291cmNlLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrZnVuYyBJZiBzZXQsIHRoaXMgbXVzdCBiZSBlaXRoZXIgYSB2YWxpZCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgcGFzc2VkIHRoZQogKiBleHRyYWN0ZWQgc2VjdGlvbiwgb3IgTlVMTCB0byBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZQogKiBleHRyYWN0ZWQgc2VjdGlvbi4KICoKICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGNvbnRlbnRzIHdpbGwgYmUgc2VudCB0byAic3Rkb3V0Ii4KICogQHJldHVybiBzdHJpbmcgSWYgY2FsbGJhY2tmdW5jIGlzIG5vdCBOVUxMIHJldHVybnMgVFJVRSBvbgogKiBzdWNjZXNzLgogKgogKiBJZiBjYWxsYmFja2Z1bmMgaXMgc2V0IHRvIE5VTEwsIHJldHVybnMgdGhlCiAqIGV4dHJhY3RlZCBzZWN0aW9uIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZSgkbWltZW1haWwsICRmaWxlbmFtZSwgY2FsbGFibGUgJGNhbGxiYWNrZnVuYyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFja2Z1bmMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUoJG1pbWVtYWlsLCAkZmlsZW5hbWUsICRjYWxsYmFja2Z1bmMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUoJG1pbWVtYWlsLCAkZmlsZW5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWFpbHBhcnNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZyZWVzIGEgTUlNRSByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCBBIHZhbGlkIE1JTUUgcmVzb3VyY2UgYWxsb2NhdGVkIGJ5CiAqIG1haWxwYXJzZV9tc2dfY3JlYXRlIG9yCiAqIG1haWxwYXJzZV9tc2dfcGFyc2VfZmlsZS4KICogQHRocm93cyBNYWlscGFyc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9tc2dfZnJlZSgkbWltZW1haWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWFpbHBhcnNlX21zZ19mcmVlKCRtaW1lbWFpbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhcnNlcyBhIGZpbGUuCiAqIFRoaXMgaXMgdGhlIG9wdGltYWwgd2F5IG9mIHBhcnNpbmcgYSBtYWlsIGZpbGUgdGhhdCB5b3UgaGF2ZSBvbiBkaXNrLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlIGhvbGRpbmcgdGhlIG1lc3NhZ2UuCiAqIFRoZSBmaWxlIGlzIG9wZW5lZCBhbmQgc3RyZWFtZWQgdGhyb3VnaCB0aGUgcGFyc2VyLgogKgogKiBUaGUgbWVzc2FnZSBjb250YWluZWQgaW4gZmlsZW5hbWUgaXMgc3VwcG9zZWQgdG8gZW5kIHdpdGggYSBuZXdsaW5lCiAqIChDUkxGKTsgb3RoZXJ3aXNlIHRoZSBsYXN0IGxpbmUgb2YgdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcGFyc2VkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNSU1FIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlKHN0cmluZyAkZmlsZW5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlKCRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW5jcmVtZW50YWxseSBwYXJzZSBkYXRhIGludG8gdGhlIHN1cHBsaWVkIG1pbWUgbWFpbCByZXNvdXJjZS4KICoKICogVGhpcyBmdW5jdGlvbiBhbGxvdyB5b3UgdG8gc3RyZWFtIHBvcnRpb25zIG9mIGEgZmlsZSBhdCBhIHRpbWUsIHJhdGhlcgogKiB0aGFuIHJlYWQgYW5kIHBhcnNlIHRoZSB3aG9sZSB0aGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCBBIHZhbGlkIE1JTUUgcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGZpbmFsIGNodW5rIG9mIGRhdGEgaXMgc3VwcG9zZWQgdG8gZW5kIHdpdGggYSBuZXdsaW5lCiAqIChDUkxGKTsgb3RoZXJ3aXNlIHRoZSBsYXN0IGxpbmUgb2YgdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcGFyc2VkLgogKiBAdGhyb3dzIE1haWxwYXJzZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19wYXJzZSgkbWltZW1haWwsIHN0cmluZyAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYWlscGFyc2VfbXNnX3BhcnNlKCRtaW1lbWFpbCwgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWFpbHBhcnNlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdHJlYW1zIGRhdGEgZnJvbSB0aGUgc291cmNlIGZpbGUgcG9pbnRlciwgYXBwbHkKICogZW5jb2RpbmcgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHBvaW50ZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc291cmNlZnAgQSB2YWxpZCBmaWxlIGhhbmRsZS4gVGhlIGZpbGUgaXMgc3RyZWFtZWQgdGhyb3VnaCB0aGUgcGFyc2VyLgogKiBAcGFyYW0gcmVzb3VyY2UgJGRlc3RmcCBUaGUgZGVzdGluYXRpb24gZmlsZSBoYW5kbGUgaW4gd2hpY2ggdGhlIGVuY29kZWQgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIE9uZSBvZiB0aGUgY2hhcmFjdGVyIGVuY29kaW5ncyBzdXBwb3J0ZWQgYnkgdGhlCiAqIG1ic3RyaW5nIG1vZHVsZS4KICogQHRocm93cyBNYWlscGFyc2VFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9zdHJlYW1fZW5jb2RlKCRzb3VyY2VmcCwgJGRlc3RmcCwgc3RyaW5nICRlbmNvZGluZyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYWlscGFyc2Vfc3RyZWFtX2VuY29kZSgkc291cmNlZnAsICRkZXN0ZnAsICRlbmNvZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYWlscGFyc2VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mbstring.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNYnN0cmluZ0V4Y2VwdGlvbjsKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRjcAogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3BlY2lmaWMgY2hhcmFjdGVyLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9jaHIoaW50ICRjcCwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmNvZGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbWJfY2hyKCRjcCwgJGVuY29kaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9jaHIoJGNwKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGF1dG9tYXRpYyBjaGFyYWN0ZXIKICogZW5jb2RpbmcgZGV0ZWN0aW9uIG9yZGVyIHRvIGVuY29kaW5nX2xpc3QuCiAqCiAqIEBwYXJhbSBtaXhlZCAkZW5jb2RpbmdfbGlzdCBlbmNvZGluZ19saXN0IGlzIGFuIGFycmF5IG9yCiAqIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZy4gU2VlIHN1cHBvcnRlZCBlbmNvZGluZ3MuCiAqCiAqIElmIGVuY29kaW5nX2xpc3QgaXMgb21pdHRlZCwgaXQgcmV0dXJucwogKiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZW5jb2RpbmcgZGV0ZWN0aW9uIG9yZGVyIGFzIGFycmF5LgogKgogKiBUaGlzIHNldHRpbmcgYWZmZWN0cyBtYl9kZXRlY3RfZW5jb2RpbmcgYW5kCiAqIG1iX3NlbmRfbWFpbC4KICoKICogbWJzdHJpbmcgY3VycmVudGx5IGltcGxlbWVudHMgdGhlIGZvbGxvd2luZwogKiBlbmNvZGluZyBkZXRlY3Rpb24gZmlsdGVycy4gSWYgdGhlcmUgaXMgYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlCiAqIGZvciB0aGUgZm9sbG93aW5nIGVuY29kaW5ncywgZW5jb2RpbmcgZGV0ZWN0aW9uIHdpbGwgZmFpbC4KICoKICogRm9yIElTTy04ODU5LSosIG1ic3RyaW5nCiAqIGFsd2F5cyBkZXRlY3RzIGFzIElTTy04ODU5LSouCiAqCiAqIEZvciBVVEYtMTYsIFVURi0zMiwKICogVUNTMiBhbmQgVUNTNCwgZW5jb2RpbmcKICogZGV0ZWN0aW9uIHdpbGwgZmFpbCBhbHdheXMuCiAqIEByZXR1cm4gYm9vbHxhcnJheSBXaGVuIHNldHRpbmcgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBvcmRlciwgVFJVRSBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLgogKgogKiBXaGVuIGdldHRpbmcgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBvcmRlciwgYW4gb3JkZXJlZCBhcnJheSBvZiB0aGUgZW5jb2RpbmdzIGlzIHJldHVybmVkLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9kZXRlY3Rfb3JkZXIoJGVuY29kaW5nX2xpc3QgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nX2xpc3QgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2RldGVjdF9vcmRlcigkZW5jb2RpbmdfbGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWJfZGV0ZWN0X29yZGVyKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsaWFzZXMgZm9yIGEga25vd24gZW5jb2RpbmcgdHlwZS4KICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIGVuY29kaW5nIHR5cGUgYmVpbmcgY2hlY2tlZCwgZm9yIGFsaWFzZXMuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgb2YgZW5jb2RpbmcgYWxpYXNlcyBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VuY29kaW5nX2FsaWFzZXMoc3RyaW5nICRlbmNvZGluZyk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfZW5jb2RpbmdfYWxpYXNlcygkZW5jb2RpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2NhbnMgc3RyaW5nIGZvciBtYXRjaGVzIHRvCiAqIHBhdHRlcm4sIHRoZW4gcmVwbGFjZXMgdGhlIG1hdGNoZWQgdGV4dAogKiB3aXRoIHRoZSBvdXRwdXQgb2YgY2FsbGJhY2sgZnVuY3Rpb24uCiAqCiAqIFRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gbWJfZXJlZ19yZXBsYWNlLAogKiBleGNlcHQgZm9yIHRoZSBmYWN0IHRoYXQgaW5zdGVhZCBvZgogKiByZXBsYWNlbWVudCBwYXJhbWV0ZXIsIG9uZSBzaG91bGQgc3BlY2lmeSBhCiAqIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICoKICogTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgaW4gcGF0dGVybi4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYW5kIHBhc3NlZCBhbiBhcnJheSBvZiBtYXRjaGVkIGVsZW1lbnRzCiAqIGluIHRoZSAgc3ViamVjdCBzdHJpbmcuIFRoZSBjYWxsYmFjayBzaG91bGQKICogcmV0dXJuIHRoZSByZXBsYWNlbWVudCBzdHJpbmcuCiAqCiAqIFlvdSdsbCBvZnRlbiBuZWVkIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogKiBmb3IgYSBtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2sgaW4ganVzdCBvbmUgcGxhY2UuCiAqIEluIHRoaXMgY2FzZSB5b3UgY2FuIHVzZSBhbgogKiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8KICogZGVjbGFyZSB0aGUgY2FsbGJhY2sgd2l0aGluIHRoZSBjYWxsIHRvCiAqIG1iX2VyZWdfcmVwbGFjZV9jYWxsYmFjay4gQnkgZG9pbmcgaXQgdGhpcyB3YXkKICogeW91IGhhdmUgYWxsIGluZm9ybWF0aW9uIGZvciB0aGUgY2FsbCBpbiBvbmUgcGxhY2UgYW5kIGRvIG5vdAogKiBjbHV0dGVyIHRoZSBmdW5jdGlvbiBuYW1lc3BhY2Ugd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgbmFtZQogKiBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyBiZWluZyBjaGVja2VkLgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gVGhlIHNlYXJjaCBvcHRpb24uIFNlZSBtYl9yZWdleF9zZXRfb3B0aW9ucyBmb3IgZXhwbGFuYXRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXN1bHRhbnQgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VyZWdfcmVwbGFjZV9jYWxsYmFjayhzdHJpbmcgJHBhdHRlcm4sIGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkb3B0aW9uID0gIm1zciIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2soJHBhdHRlcm4sICRjYWxsYmFjaywgJHN0cmluZywgJG9wdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KICoKICogTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgaW4gcGF0dGVybi4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZW1lbnQgVGhlIHJlcGxhY2VtZW50IHRleHQuCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIGJlaW5nIGNoZWNrZWQuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbgogKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzdWx0YW50IHN0cmluZyBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9lcmVnX3JlcGxhY2Uoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHJlcGxhY2VtZW50LCBzdHJpbmcgJHN0cmluZywgc3RyaW5nICRvcHRpb24gPSAibXNyIik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkc3RyaW5nLCAkb3B0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEByZXR1cm4gYXJyYXkKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ19zZWFyY2hfZ2V0cmVncygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX2dldHJlZ3MoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1iX2VyZWdfc2VhcmNoX2luaXQgc2V0cwogKiBzdHJpbmcgYW5kIHBhdHRlcm4KICogZm9yIGEgbXVsdGlieXRlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvcgogKiBtYl9lcmVnX3NlYXJjaCwKICogbWJfZXJlZ19zZWFyY2hfcG9zLCBhbmQKICogbWJfZXJlZ19zZWFyY2hfcmVncy4KICoKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzZWFyY2ggc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSBzZWFyY2ggcGF0dGVybi4KICogQHBhcmFtIHN0cmluZyAkb3B0aW9uIFRoZSBzZWFyY2ggb3B0aW9uLiBTZWUgbWJfcmVnZXhfc2V0X29wdGlvbnMgZm9yIGV4cGxhbmF0aW9uLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9lcmVnX3NlYXJjaF9pbml0KHN0cmluZyAkc3RyaW5nLCBzdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBzdHJpbmcgJG9wdGlvbiA9ICJtc3IiKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbiAhPT0gIm1zciIpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX2luaXQoJHN0cmluZywgJHBhdHRlcm4sICRvcHRpb24pOwogICAgfSBlbHNlaWYgKCRwYXR0ZXJuICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9lcmVnX3NlYXJjaF9pbml0KCRzdHJpbmcsICRwYXR0ZXJuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9lcmVnX3NlYXJjaF9pbml0KCRzdHJpbmcpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgdGhlIG1hdGNoZWQgcGFydCBvZiBhIG11bHRpYnl0ZSByZWd1bGFyIGV4cHJlc3Npb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHNlYXJjaCBwYXR0ZXJuLgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gVGhlIHNlYXJjaCBvcHRpb24uIFNlZSBtYl9yZWdleF9zZXRfb3B0aW9ucyBmb3IgZXhwbGFuYXRpb24uCiAqIEByZXR1cm4gYXJyYXkKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ19zZWFyY2hfcmVncyhzdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBzdHJpbmcgJG9wdGlvbiA9ICJtcyIpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG9wdGlvbiAhPT0gIm1zIikgewogICAgICAgICRyZXN1bHQgPSBcbWJfZXJlZ19zZWFyY2hfcmVncygkcGF0dGVybiwgJG9wdGlvbik7CiAgICB9IGVsc2VpZiAoJHBhdHRlcm4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3JlZ3MoJHBhdHRlcm4pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3JlZ3MoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0byBzZXQuIElmIGl0IGlzIG5lZ2F0aXZlLCBpdCBjb3VudHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2VyZWdfc2VhcmNoX3NldHBvcyhpbnQgJHBvc2l0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX2VyZWdfc2VhcmNoX3NldHBvcygkcG9zaXRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLiAgTXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQuIFRoZSBjYXNlIHdpbGwgYmUgaWdub3JlZC4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZSBUaGUgcmVwbGFjZW1lbnQgdGV4dC4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzZWFyY2hlZCBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbgogKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzdWx0YW50IHN0cmluZy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfZXJlZ2lfcmVwbGFjZShzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkcmVwbGFjZSwgc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkb3B0aW9uID0gIm1zcmkiKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfZXJlZ2lfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2UsICRzdHJpbmcsICRvcHRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0L0dldCB0aGUgSFRUUCBvdXRwdXQgY2hhcmFjdGVyIGVuY29kaW5nLgogKiBPdXRwdXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSB0aGUgc2V0IGludGVybmFsIGVuY29kaW5nIHRvIGVuY29kaW5nLgogKgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBJZiBlbmNvZGluZyBpcyBzZXQsCiAqIG1iX2h0dHBfb3V0cHV0IHNldHMgdGhlIEhUVFAgb3V0cHV0IGNoYXJhY3RlcgogKiBlbmNvZGluZyB0byBlbmNvZGluZy4KICoKICogSWYgZW5jb2RpbmcgaXMgb21pdHRlZCwKICogbWJfaHR0cF9vdXRwdXQgcmV0dXJucyB0aGUgY3VycmVudCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgZW5jb2RpbmcgaXMgb21pdHRlZCwKICogbWJfaHR0cF9vdXRwdXQgcmV0dXJucyB0aGUgY3VycmVudCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSwKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2h0dHBfb3V0cHV0KHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9odHRwX291dHB1dCgkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2h0dHBfb3V0cHV0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXQvR2V0IHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIgZW5jb2RpbmcKICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgZW5jb2RpbmcgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBuYW1lCiAqIHVzZWQgZm9yIHRoZSBIVFRQIGlucHV0IGNoYXJhY3RlciBlbmNvZGluZyBjb252ZXJzaW9uLCBIVFRQIG91dHB1dAogKiBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbiwgYW5kIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZwogKiBmb3Igc3RyaW5nIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBtYnN0cmluZyBtb2R1bGUuCiAqIFlvdSBzaG91bGQgbm90aWNlIHRoYXQgdGhlIGludGVybmFsIGVuY29kaW5nIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBmb3IgbXVsdGlieXRlIHJlZ2V4LgogKiBAcmV0dXJuIHN0cmluZ3xib29sIElmIGVuY29kaW5nIGlzIHNldCwgdGhlbgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogSW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBtdWx0aWJ5dGUgcmVnZXggaXMgTk9UIGNoYW5nZWQuCiAqIElmIGVuY29kaW5nIGlzIG9taXR0ZWQsIHRoZW4KICogdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGVuY29kaW5nIG5hbWUgaXMgcmV0dXJuZWQuCiAqIEB0aHJvd3MgTWJzdHJpbmdFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1iX2ludGVybmFsX2VuY29kaW5nKHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9pbnRlcm5hbF9lbmNvZGluZygkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX2ludGVybmFsX2VuY29kaW5nKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICogQHJldHVybiBpbnQgUmV0dXJucyBhIGNvZGUgcG9pbnQgb2YgY2hhcmFjdGVyLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9vcmQoc3RyaW5nICRzdHIsIHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX29yZCgkc3RyLCAkZW5jb2RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX29yZCgkc3RyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFBhcnNlcyBHRVQvUE9TVC9DT09LSUUgZGF0YSBhbmQKICogc2V0cyBnbG9iYWwgdmFyaWFibGVzLiBTaW5jZSBQSFAgZG9lcyBub3QgcHJvdmlkZSByYXcgUE9TVC9DT09LSUUKICogZGF0YSwgaXQgY2FuIG9ubHkgYmUgdXNlZCBmb3IgR0VUIGRhdGEgZm9yIG5vdy4gSXQgcGFyc2VzIFVSTAogKiBlbmNvZGVkIGRhdGEsIGRldGVjdHMgZW5jb2RpbmcsIGNvbnZlcnRzIGNvZGluZyB0byBpbnRlcm5hbAogKiBlbmNvZGluZyBhbmQgc2V0IHZhbHVlcyB0byB0aGUgcmVzdWx0IGFycmF5IG9yCiAqIGdsb2JhbCB2YXJpYWJsZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kZWRfc3RyaW5nIFRoZSBVUkwgZW5jb2RlZCBkYXRhLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkcmVzdWx0IEFuIGFycmF5IGNvbnRhaW5pbmcgZGVjb2RlZCBhbmQgY2hhcmFjdGVyIGVuY29kZWQgY29udmVydGVkIHZhbHVlcy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfcGFyc2Vfc3RyKHN0cmluZyAkZW5jb2RlZF9zdHJpbmcsID9hcnJheSAmJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtYl9wYXJzZV9zdHIoJGVuY29kZWRfc3RyaW5nLCAkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQvR2V0IGNoYXJhY3RlciBlbmNvZGluZyBmb3IgYSBtdWx0aWJ5dGUgcmVnZXguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBlbmNvZGluZwogKiBwYXJhbWV0ZXIgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIGludGVybmFsIGNoYXJhY3RlcgogKiBlbmNvZGluZyB2YWx1ZSB3aWxsIGJlIHVzZWQuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfcmVnZXhfZW5jb2Rpbmcoc3RyaW5nICRlbmNvZGluZyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1iX3JlZ2V4X2VuY29kaW5nKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbWJfcmVnZXhfZW5jb2RpbmcoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1ic3RyaW5nRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGVtYWlsLiBIZWFkZXJzIGFuZCBtZXNzYWdlcyBhcmUgY29udmVydGVkIGFuZCBlbmNvZGVkIGFjY29yZGluZwogKiB0byB0aGUgbWJfbGFuZ3VhZ2Ugc2V0dGluZy4gSXQncyBhIHdyYXBwZXIgZnVuY3Rpb24KICogZm9yIG1haWwsIHNvIHNlZSBhbHNvIG1haWwgZm9yIGRldGFpbHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRvIFRoZSBtYWlsIGFkZHJlc3NlcyBiZWluZyBzZW50IHRvLiBNdWx0aXBsZQogKiByZWNpcGllbnRzIG1heSBiZSBzcGVjaWZpZWQgYnkgcHV0dGluZyBhIGNvbW1hIGJldHdlZW4gZWFjaAogKiBhZGRyZXNzIGluIHRvLgogKiBUaGlzIHBhcmFtZXRlciBpcyBub3QgYXV0b21hdGljYWxseSBlbmNvZGVkLgogKiBAcGFyYW0gc3RyaW5nICRzdWJqZWN0IFRoZSBzdWJqZWN0IG9mIHRoZSBtYWlsLgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtZXNzYWdlIG9mIHRoZSBtYWlsLgogKiBAcGFyYW0gc3RyaW5nfGFycmF5fG51bGwgJGFkZGl0aW9uYWxfaGVhZGVycyBTdHJpbmcgb3IgYXJyYXkgdG8gYmUgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW1haWwgaGVhZGVyLgogKgogKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGFkZCBleHRyYSBoZWFkZXJzIChGcm9tLCBDYywgYW5kIEJjYykuCiAqIE11bHRpcGxlIGV4dHJhIGhlYWRlcnMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGEgQ1JMRiAoXHJcbikuCiAqIFZhbGlkYXRlIHBhcmFtZXRlciBub3QgdG8gYmUgaW5qZWN0ZWQgdW53YW50ZWQgaGVhZGVycyBieSBhdHRhY2tlcnMuCiAqCiAqIElmIGFuIGFycmF5IGlzIHBhc3NlZCwgaXRzIGtleXMgYXJlIHRoZSBoZWFkZXIgbmFtZXMgYW5kIGl0cwogKiB2YWx1ZXMgYXJlIHRoZSByZXNwZWN0aXZlIGhlYWRlciB2YWx1ZXMuCiAqCiAqIFdoZW4gc2VuZGluZyBtYWlsLCB0aGUgbWFpbCBtdXN0IGNvbnRhaW4KICogYSBGcm9tIGhlYWRlci4gVGhpcyBjYW4gYmUgc2V0IHdpdGggdGhlCiAqIGFkZGl0aW9uYWxfaGVhZGVycyBwYXJhbWV0ZXIsIG9yIGEgZGVmYXVsdAogKiBjYW4gYmUgc2V0IGluIHBocC5pbmkuCiAqCiAqIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvcgogKiBtZXNzYWdlIHNpbWlsYXIgdG8gV2FybmluZzogbWFpbCgpOiAic2VuZG1haWxfZnJvbSIgbm90CiAqIHNldCBpbiBwaHAuaW5pIG9yIGN1c3RvbSAiRnJvbToiIGhlYWRlciBtaXNzaW5nLgogKiBUaGUgRnJvbSBoZWFkZXIgc2V0cyBhbHNvCiAqIFJldHVybi1QYXRoIHVuZGVyIFdpbmRvd3MuCiAqCiAqIElmIG1lc3NhZ2VzIGFyZSBub3QgcmVjZWl2ZWQsIHRyeSB1c2luZyBhIExGIChcbikgb25seS4KICogU29tZSBVbml4IG1haWwgdHJhbnNmZXIgYWdlbnRzIChtb3N0IG5vdGFibHkKICogcW1haWwpIHJlcGxhY2UgTEYgYnkgQ1JMRgogKiBhdXRvbWF0aWNhbGx5ICh3aGljaCBsZWFkcyB0byBkb3VibGluZyBDUiBpZiBDUkxGIGlzIHVzZWQpLgogKiBUaGlzIHNob3VsZCBiZSBhIGxhc3QgcmVzb3J0LCBhcyBpdCBkb2VzIG5vdCBjb21wbHkgd2l0aAogKiBSRkMgMjgyMi4KICogQHBhcmFtIHN0cmluZyAkYWRkaXRpb25hbF9wYXJhbWV0ZXIgYWRkaXRpb25hbF9wYXJhbWV0ZXIgaXMgYSBNVEEgY29tbWFuZCBsaW5lCiAqIHBhcmFtZXRlci4gSXQgaXMgdXNlZnVsIHdoZW4gc2V0dGluZyB0aGUgY29ycmVjdCBSZXR1cm4tUGF0aAogKiBoZWFkZXIgd2hlbiB1c2luZyBzZW5kbWFpbC4KICoKICogVGhpcyBwYXJhbWV0ZXIgaXMgZXNjYXBlZCBieSBlc2NhcGVzaGVsbGNtZCBpbnRlcm5hbGx5CiAqIHRvIHByZXZlbnQgY29tbWFuZCBleGVjdXRpb24uIGVzY2FwZXNoZWxsY21kIHByZXZlbnRzCiAqIGNvbW1hbmQgZXhlY3V0aW9uLCBidXQgYWxsb3dzIHRvIGFkZCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuIEZvciBzZWN1cml0eSByZWFzb24sCiAqIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSB2YWxpZGF0ZWQuCiAqCiAqIFNpbmNlIGVzY2FwZXNoZWxsY21kIGlzIGFwcGxpZWQgYXV0b21hdGljYWxseSwgc29tZSBjaGFyYWN0ZXJzCiAqIHRoYXQgYXJlIGFsbG93ZWQgYXMgZW1haWwgYWRkcmVzc2VzIGJ5IGludGVybmV0IFJGQ3MgY2Fubm90IGJlIHVzZWQuIFByb2dyYW1zCiAqIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHVzZSB0aGVzZSBjaGFyYWN0ZXJzIG1haWwgY2Fubm90IGJlIHVzZWQuCiAqCiAqIFRoZSB1c2VyIHRoYXQgdGhlIHdlYnNlcnZlciBydW5zIGFzIHNob3VsZCBiZSBhZGRlZCBhcyBhIHRydXN0ZWQgdXNlciB0byB0aGUKICogc2VuZG1haWwgY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGEgJ1gtV2FybmluZycgaGVhZGVyIGZyb20gYmVpbmcgYWRkZWQKICogdG8gdGhlIG1lc3NhZ2Ugd2hlbiB0aGUgZW52ZWxvcGUgc2VuZGVyICgtZikgaXMgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLgogKiBGb3Igc2VuZG1haWwgdXNlcnMsIHRoaXMgZmlsZSBpcyAvZXRjL21haWwvdHJ1c3RlZC11c2Vycy4KICogQHRocm93cyBNYnN0cmluZ0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWJfc2VuZF9tYWlsKHN0cmluZyAkdG8sIHN0cmluZyAkc3ViamVjdCwgc3RyaW5nICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzID0gbnVsbCwgc3RyaW5nICRhZGRpdGlvbmFsX3BhcmFtZXRlciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWJfc2VuZF9tYWlsKCR0bywgJHN1YmplY3QsICRtZXNzYWdlLCAkYWRkaXRpb25hbF9oZWFkZXJzLCAkYWRkaXRpb25hbF9wYXJhbWV0ZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgVGhlIHN0cmluZyBiZWluZyBzcGxpdC4KICogQHBhcmFtIGludCAkbGltaXQKICogQHJldHVybiBhcnJheSBUaGUgcmVzdWx0IGFzIGFuIGFycmF5LgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9zcGxpdChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3RyaW5nLCBpbnQgJGxpbWl0ID0gLTEpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1iX3NwbGl0KCRwYXR0ZXJuLCAkc3RyaW5nLCAkbGltaXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWJzdHJpbmdFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBzdHJpbmdzLCBpdCBpcyBhIHZlcnNpb24gb2Ygc3RyX3NwbGl0IHdpdGggc3VwcG9ydCBmb3IgZW5jb2RpbmdzIG9mIHZhcmlhYmxlIGNoYXJhY3RlciBzaXplIGFzIHdlbGwgYXMgZml4ZWQtc2l6ZSBlbmNvZGluZ3Mgb2YgMSwyIG9yIDQgYnl0ZSBjaGFyYWN0ZXJzLgogKiBJZiB0aGUgc3BsaXRfbGVuZ3RoIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIHRoZSBzdHJpbmcgaXMgYnJva2VuIGRvd24gaW50byBjaHVua3Mgb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggaW4gY2hhcmFjdGVycyAobm90IGJ5dGVzKS4KICogVGhlIGVuY29kaW5nIHBhcmFtZXRlciBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgYW5kIGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZG8gc28uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRvIHNwbGl0IGludG8gY2hhcmFjdGVycyBvciBjaHVua3MuCiAqIEBwYXJhbSBpbnQgJHNwbGl0X2xlbmd0aCBJZiBzcGVjaWZpZWQsIGVhY2ggZWxlbWVudCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBjb21wb3NlZCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBUaGUgZW5jb2RpbmcKICogcGFyYW1ldGVyIGlzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIKICogZW5jb2RpbmcgdmFsdWUgd2lsbCBiZSB1c2VkLgogKgogKiBBIHN0cmluZyBzcGVjaWZ5aW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGVuY29kaW5ncy4KICogQHJldHVybiBhcnJheSBtYl9zdHJfc3BsaXQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLgogKiBAdGhyb3dzIE1ic3RyaW5nRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtYl9zdHJfc3BsaXQoc3RyaW5nICRzdHJpbmcsIGludCAkc3BsaXRfbGVuZ3RoID0gMSwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9zdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aCwgJGVuY29kaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtYl9zdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNYnN0cmluZ0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/misc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNaXNjRXhjZXB0aW9uOwoKLyoqCiAqIERlZmluZXMgYSBuYW1lZCBjb25zdGFudCBhdCBydW50aW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudC4KICoKICogSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIGNvbnN0YW50cyB3aXRoIHJlc2VydmVkIG9yCiAqIGV2ZW4gaW52YWxpZCBuYW1lcywgd2hvc2UgdmFsdWUgY2FuIChvbmx5KSBiZSByZXRyaWV2ZWQgd2l0aAogKiBjb25zdGFudC4gSG93ZXZlciwgZG9pbmcgc28gaXMgbm90IHJlY29tbWVuZGVkLgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQuIEluIFBIUCA1LCB2YWx1ZSBtdXN0CiAqIGJlIGEgc2NhbGFyIHZhbHVlIChpbnRlZ2VyLAogKiBmbG9hdCwgc3RyaW5nLCBib29sZWFuLCBvcgogKiBOVUxMKS4gSW4gUEhQIDcsIGFycmF5IHZhbHVlcyBhcmUgYWxzbyBhY2NlcHRlZC4KICoKICogV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHJlc291cmNlIGNvbnN0YW50cywgaXQgaXMKICogbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KICogQHBhcmFtIGJvb2wgJGNhc2VfaW5zZW5zaXRpdmUgSWYgc2V0IHRvIFRSVUUsIHRoZSBjb25zdGFudCB3aWxsIGJlIGRlZmluZWQgY2FzZS1pbnNlbnNpdGl2ZS4KICogVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgY2FzZS1zZW5zaXRpdmU7IGkuZS4KICogQ09OU1RBTlQgYW5kIENvbnN0YW50IHJlcHJlc2VudAogKiBkaWZmZXJlbnQgdmFsdWVzLgogKgogKiBDYXNlLWluc2Vuc2l0aXZlIGNvbnN0YW50cyBhcmUgc3RvcmVkIGFzIGxvd2VyLWNhc2UuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGVmaW5lKHN0cmluZyAkbmFtZSwgJHZhbHVlLCBib29sICRjYXNlX2luc2Vuc2l0aXZlID0gZmFsc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZGVmaW5lKCRuYW1lLCAkdmFsdWUsICRjYXNlX2luc2Vuc2l0aXZlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByaW50cyBvdXQgb3IgcmV0dXJucyBhIHN5bnRheCBoaWdobGlnaHRlZCB2ZXJzaW9uIG9mIHRoZSBjb2RlIGNvbnRhaW5lZAogKiBpbiBmaWxlbmFtZSB1c2luZyB0aGUgY29sb3JzIGRlZmluZWQgaW4gdGhlCiAqIGJ1aWx0LWluIHN5bnRheCBoaWdobGlnaHRlciBmb3IgUEhQLgogKgogKiBNYW55IHNlcnZlcnMgYXJlIGNvbmZpZ3VyZWQgdG8gYXV0b21hdGljYWxseSBoaWdobGlnaHQgZmlsZXMKICogd2l0aCBhIHBocHMgZXh0ZW5zaW9uLiBGb3IgZXhhbXBsZSwKICogZXhhbXBsZS5waHBzIHdoZW4gdmlld2VkIHdpbGwgc2hvdyB0aGUKICogc3ludGF4IGhpZ2hsaWdodGVkIHNvdXJjZSBvZiB0aGUgZmlsZS4gVG8gZW5hYmxlIHRoaXMsIGFkZCB0aGlzCiAqIGxpbmUgdG8gdGhlIGh0dHBkLmNvbmY6CiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFBIUCBmaWxlIHRvIGJlIGhpZ2hsaWdodGVkLgogKiBAcGFyYW0gYm9vbCAkcmV0dXJuIFNldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlCiAqIGhpZ2hsaWdodGVkIGNvZGUuCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgSWYgcmV0dXJuIGlzIHNldCB0byBUUlVFLCByZXR1cm5zIHRoZSBoaWdobGlnaHRlZAogKiBjb2RlIGFzIGEgc3RyaW5nIGluc3RlYWQgb2YgcHJpbnRpbmcgaXQgb3V0LiBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuCiAqIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoaWdobGlnaHRfZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBib29sICRyZXR1cm4gPSBmYWxzZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoaWdobGlnaHRfZmlsZSgkZmlsZW5hbWUsICRyZXR1cm4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIFBIUCBjb2RlIHRvIGJlIGhpZ2hsaWdodGVkLiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoZSBvcGVuaW5nIHRhZy4KICogQHBhcmFtIGJvb2wgJHJldHVybiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gVFJVRSB0byBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZQogKiBoaWdobGlnaHRlZCBjb2RlLgogKiBAcmV0dXJuIHN0cmluZ3xib29sIElmIHJldHVybiBpcyBzZXQgdG8gVFJVRSwgcmV0dXJucyB0aGUgaGlnaGxpZ2h0ZWQKICogY29kZSBhcyBhIHN0cmluZyBpbnN0ZWFkIG9mIHByaW50aW5nIGl0IG91dC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybgogKiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGlnaGxpZ2h0X3N0cmluZyhzdHJpbmcgJHN0ciwgYm9vbCAkcmV0dXJuID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaGlnaGxpZ2h0X3N0cmluZygkc3RyLCAkcmV0dXJuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGFjayBnaXZlbiBhcmd1bWVudHMgaW50byBhIGJpbmFyeSBzdHJpbmcgYWNjb3JkaW5nIHRvCiAqIGZvcm1hdC4KICoKICogVGhlIGlkZWEgZm9yIHRoaXMgZnVuY3Rpb24gd2FzIHRha2VuIGZyb20gUGVybCBhbmQgYWxsIGZvcm1hdHRpbmcgY29kZXMKICogd29yayB0aGUgc2FtZSBhcyBpbiBQZXJsLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBmb3JtYXR0aW5nIGNvZGVzIHRoYXQgYXJlCiAqIG1pc3Npbmcgc3VjaCBhcyBQZXJsJ3MgInUiIGZvcm1hdCBjb2RlLgogKgogKiBOb3RlIHRoYXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMgb25seQogKiBhZmZlY3RzIHRoZSBmdW5jdGlvbiB1bnBhY2ssIHdoZXJlIGFzCiAqIGZ1bmN0aW9uIHBhY2sgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGZvcgogKiBzaWduZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCBjb2Rlcy4KICoKICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IFRoZSBmb3JtYXQgc3RyaW5nIGNvbnNpc3RzIG9mIGZvcm1hdCBjb2RlcwogKiBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByZXBlYXRlciBhcmd1bWVudC4gVGhlIHJlcGVhdGVyIGFyZ3VtZW50IGNhbgogKiBiZSBlaXRoZXIgYW4gaW50ZWdlciB2YWx1ZSBvciAqIGZvciByZXBlYXRpbmcgdG8KICogdGhlIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4gRm9yIGEsIEEsIGgsIEggdGhlIHJlcGVhdCBjb3VudCBzcGVjaWZpZXMKICogaG93IG1hbnkgY2hhcmFjdGVycyBvZiBvbmUgZGF0YSBhcmd1bWVudCBhcmUgdGFrZW4sIGZvciBAIGl0IGlzIHRoZQogKiBhYnNvbHV0ZSBwb3NpdGlvbiB3aGVyZSB0byBwdXQgdGhlIG5leHQgZGF0YSwgZm9yIGV2ZXJ5dGhpbmcgZWxzZSB0aGUKICogcmVwZWF0IGNvdW50IHNwZWNpZmllcyBob3cgbWFueSBkYXRhIGFyZ3VtZW50cyBhcmUgY29uc3VtZWQgYW5kIHBhY2tlZAogKiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IHN0cmluZy4KICoKICogQ3VycmVudGx5IGltcGxlbWVudGVkIGZvcm1hdHMgYXJlOgogKgogKiBwYWNrIGZvcm1hdCBjaGFyYWN0ZXJzCiAqCiAqCiAqCiAqIENvZGUKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogYQogKiBOVUwtcGFkZGVkIHN0cmluZwogKgogKgogKiBBCiAqIFNQQUNFLXBhZGRlZCBzdHJpbmcKICoKICogaAogKiBIZXggc3RyaW5nLCBsb3cgbmliYmxlIGZpcnN0CiAqCiAqIEgKICogSGV4IHN0cmluZywgaGlnaCBuaWJibGUgZmlyc3QKICogY3NpZ25lZCBjaGFyCiAqCiAqIEMKICogdW5zaWduZWQgY2hhcgogKgogKiBzCiAqIHNpZ25lZCBzaG9ydCAoYWx3YXlzIDE2IGJpdCwgbWFjaGluZSBieXRlIG9yZGVyKQogKgogKgogKiBTCiAqIHVuc2lnbmVkIHNob3J0IChhbHdheXMgMTYgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIG4KICogdW5zaWduZWQgc2hvcnQgKGFsd2F5cyAxNiBiaXQsIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogdgogKiB1bnNpZ25lZCBzaG9ydCAoYWx3YXlzIDE2IGJpdCwgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBpCiAqIHNpZ25lZCBpbnRlZ2VyIChtYWNoaW5lIGRlcGVuZGVudCBzaXplIGFuZCBieXRlIG9yZGVyKQogKgogKgogKiBJCiAqIHVuc2lnbmVkIGludGVnZXIgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIGwKICogc2lnbmVkIGxvbmcgKGFsd2F5cyAzMiBiaXQsIG1hY2hpbmUgYnl0ZSBvcmRlcikKICoKICoKICogTAogKiB1bnNpZ25lZCBsb25nIChhbHdheXMgMzIgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIE4KICogdW5zaWduZWQgbG9uZyAoYWx3YXlzIDMyIGJpdCwgYmlnIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBWCiAqIHVuc2lnbmVkIGxvbmcgKGFsd2F5cyAzMiBiaXQsIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogcQogKiBzaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIFEKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBtYWNoaW5lIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIEoKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIFAKICogdW5zaWduZWQgbG9uZyBsb25nIChhbHdheXMgNjQgYml0LCBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIGYKICogZmxvYXQgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIHJlcHJlc2VudGF0aW9uKQogKgogKgogKiBnCiAqIGZsb2F0IChtYWNoaW5lIGRlcGVuZGVudCBzaXplLCBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIpCiAqCiAqCiAqIEcKICogZmxvYXQgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUsIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcikKICoKICoKICogZAogKiBkb3VibGUgKG1hY2hpbmUgZGVwZW5kZW50IHNpemUgYW5kIHJlcHJlc2VudGF0aW9uKQogKgogKgogKiBlCiAqIGRvdWJsZSAobWFjaGluZSBkZXBlbmRlbnQgc2l6ZSwgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiBFCiAqIGRvdWJsZSAobWFjaGluZSBkZXBlbmRlbnQgc2l6ZSwgYmlnIGVuZGlhbiBieXRlIG9yZGVyKQogKgogKgogKiB4CiAqIE5VTCBieXRlCiAqCiAqCiAqIFgKICogQmFjayB1cCBvbmUgYnl0ZQogKgogKgogKiBaCiAqIE5VTC1wYWRkZWQgc3RyaW5nIChuZXcgaW4gUEhQIDUuNSkKICoKICoKICogQAogKiBOVUwtZmlsbCB0byBhYnNvbHV0ZSBwb3NpdGlvbgogKgogKgogKgogKgogKiBAcGFyYW0gbWl4ZWQgJHBhcmFtcwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgYmluYXJ5IHN0cmluZyBjb250YWluaW5nIGRhdGEuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGFjayhzdHJpbmcgJGZvcm1hdCwgLi4uJHBhcmFtcyk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHBhY2soJGZvcm1hdCwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGFjaygkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udmVydCBzdHJpbmcgZnJvbSBvbmUgY29kZXBhZ2UgdG8gYW5vdGhlci4KICoKICogQHBhcmFtIGludHxzdHJpbmcgJGluX2NvZGVwYWdlIFRoZSBjb2RlcGFnZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCiAqIEVpdGhlciB0aGUgY29kZXBhZ2UgbmFtZSBvciBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50fHN0cmluZyAkb3V0X2NvZGVwYWdlIFRoZSBjb2RlcGFnZSB0byBjb252ZXJ0IHRoZSBzdWJqZWN0IHN0cmluZyB0by4KICogRWl0aGVyIHRoZSBjb2RlcGFnZSBuYW1lIG9yIGlkZW50aWZpZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIHN0cmluZyB0byBjb252ZXJ0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgc3ViamVjdCBzdHJpbmcgY29udmVydGVkIHRvCiAqIG91dF9jb2RlcGFnZS4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzYXBpX3dpbmRvd3NfY3BfY29udigkaW5fY29kZXBhZ2UsICRvdXRfY29kZXBhZ2UsIHN0cmluZyAkc3ViamVjdCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c19jcF9jb252KCRpbl9jb2RlcGFnZSwgJG91dF9jb2RlcGFnZSwgJHN1YmplY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IG51bGwpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldCB0aGUgY29kZXBhZ2Ugb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KICoKICogQHBhcmFtIGludCAkY3AgQSBjb2RlcGFnZSBpZGVudGlmaWVyLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNhcGlfd2luZG93c19jcF9zZXQoaW50ICRjcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzYXBpX3dpbmRvd3NfY3Bfc2V0KCRjcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIENUUkwgZXZlbnQgdG8gYW5vdGhlciBwcm9jZXNzIGluIHRoZSBzYW1lIHByb2Nlc3MgZ3JvdXAuCiAqCiAqIEBwYXJhbSBpbnQgJGV2ZW50IFRoZSBDVFJMIGV2ZW4gdG8gc2VuZDsKICogZWl0aGVyIFBIUF9XSU5ET1dTX0VWRU5UX0NUUkxfQwogKiBvciBQSFBfV0lORE9XU19FVkVOVF9DVFJMX0JSRUFLLgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIElEIG9mIHRoZSBwcm9jZXNzIHRvIHdoaWNoIHRvIHNlbmQgdGhlIGV2ZW50IHRvLiBJZiAwCiAqIGlzIGdpdmVuLCB0aGUgZXZlbnQgaXMgc2VudCB0byBhbGwgcHJvY2Vzc2VzIG9mIHRoZSBwcm9jZXNzIGdyb3VwLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNhcGlfd2luZG93c19nZW5lcmF0ZV9jdHJsX2V2ZW50KGludCAkZXZlbnQsIGludCAkcGlkID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzYXBpX3dpbmRvd3NfZ2VuZXJhdGVfY3RybF9ldmVudCgkZXZlbnQsICRwaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogSWYgZW5hYmxlIGlzIG9taXR0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUgaWYgdGhlIHN0cmVhbSBzdHJlYW0gaGFzIFZUMTAwIGNvbnRyb2wgY29kZXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgogKgogKiBJZiBlbmFibGUgaXMgc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFZUMTAwIGZlYXR1cmVzIG9mIHRoZSBzdHJlYW0gc3RyZWFtLgogKiBJZiB0aGUgZmVhdHVyZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZW5hYmxlZCAob3IgZGlzYWJsZWQpLgogKgogKiBBdCBzdGFydHVwLCBQSFAgdHJpZXMgdG8gZW5hYmxlIHRoZSBWVDEwMCBmZWF0dXJlIG9mIHRoZSBTVERPVVQvU1RERVJSIHN0cmVhbXMuIEJ5IHRoZSB3YXksIGlmIHRob3NlIHN0cmVhbXMgYXJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlLCB0aGUgVlQxMDAgZmVhdHVyZXMgbWF5IG5vdCBiZSBlbmFibGVkLgogKgogKiBJZiBWVDEwMCBzdXBwb3J0IGlzIGVuYWJsZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBjb250cm9sIHNlcXVlbmNlcyBhcyB0aGV5IGFyZSBrbm93biBmcm9tIHRoZSBWVDEwMCB0ZXJtaW5hbC4KICogVGhleSBhbGxvdyB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSB0ZXJtaW5hbCdzIG91dHB1dC4gT24gV2luZG93cyB0aGVzZSBzZXF1ZW5jZXMgYXJlIGNhbGxlZCBDb25zb2xlIFZpcnR1YWwgVGVybWluYWwgU2VxdWVuY2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgc3RyZWFtIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiB3aWxsIG9wZXJhdGUuCiAqIEBwYXJhbSBib29sICRlbmFibGUgSWYgc3BlY2lmaWVkLCB0aGUgVlQxMDAgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgKGlmIFRSVUUpIG9yIGRpc2FibGVkIChpZiBGQUxTRSkuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQoJHN0cmVhbSwgYm9vbCAkZW5hYmxlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmFibGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCRzdHJlYW0sICRlbmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCRzdHJlYW0pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkc2Vjb25kcyBIYWx0IHRpbWUgaW4gc2Vjb25kcy4KICogQHJldHVybiBpbnQgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCiAqCiAqIElmIHRoZSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgc2xlZXAgcmV0dXJucwogKiBhIG5vbi16ZXJvIHZhbHVlLiBPbiBXaW5kb3dzLCB0aGlzIHZhbHVlIHdpbGwgYWx3YXlzIGJlCiAqIDE5MiAodGhlIHZhbHVlIG9mIHRoZQogKiBXQUlUX0lPX0NPTVBMRVRJT04gY29uc3RhbnQgd2l0aGluIHRoZSBXaW5kb3dzIEFQSSkuCiAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IHRvCiAqIHNsZWVwLgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNsZWVwKGludCAkc2Vjb25kcyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNsZWVwKCRzZWNvbmRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRGVsYXlzIHByb2dyYW0gZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mCiAqIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzLgogKgogKiBAcGFyYW0gaW50ICRzZWNvbmRzIE11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4KICogQHBhcmFtIGludCAkbmFub3NlY29uZHMgTXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiAxIGJpbGxpb24uCiAqIEByZXR1cm4gYXJyYXl7MDppbnQsMTppbnR9fGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIElmIHRoZSBkZWxheSB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpbGwgYmUKICogcmV0dXJuZWQgd2l0aCB0aGUgY29tcG9uZW50czoKICoKICoKICoKICogc2Vjb25kcyAtIG51bWJlciBvZiBzZWNvbmRzIHJlbWFpbmluZyBpbgogKiB0aGUgZGVsYXkKICoKICoKICoKICoKICogbmFub3NlY29uZHMgLSBudW1iZXIgb2YgbmFub3NlY29uZHMKICogcmVtYWluaW5nIGluIHRoZSBkZWxheQogKgogKgogKgogKiBAdGhyb3dzIE1pc2NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHRpbWVfbmFub3NsZWVwKGludCAkc2Vjb25kcywgaW50ICRuYW5vc2Vjb25kcykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx0aW1lX25hbm9zbGVlcCgkc2Vjb25kcywgJG5hbm9zZWNvbmRzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1pc2NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTWFrZXMgdGhlIHNjcmlwdCBzbGVlcCB1bnRpbCB0aGUgc3BlY2lmaWVkCiAqIHRpbWVzdGFtcC4KICoKICogQHBhcmFtIGZsb2F0ICR0aW1lc3RhbXAgVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzY3JpcHQgc2hvdWxkIHdha2UuCiAqIEB0aHJvd3MgTWlzY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdGltZV9zbGVlcF91bnRpbChmbG9hdCAkdGltZXN0YW1wKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHRpbWVfc2xlZXBfdW50aWwoJHRpbWVzdGFtcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNaXNjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnBhY2tzIGZyb20gYSBiaW5hcnkgc3RyaW5nIGludG8gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgogKiBmb3JtYXQuCiAqCiAqIFRoZSB1bnBhY2tlZCBkYXRhIGlzIHN0b3JlZCBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4gVG8KICogYWNjb21wbGlzaCB0aGlzIHlvdSBoYXZlIHRvIG5hbWUgdGhlIGRpZmZlcmVudCBmb3JtYXQgY29kZXMgYW5kCiAqIHNlcGFyYXRlIHRoZW0gYnkgYSBzbGFzaCAvLiBJZiBhIHJlcGVhdGVyIGFyZ3VtZW50IGlzIHByZXNlbnQsCiAqIHRoZW4gZWFjaCBvZiB0aGUgYXJyYXkga2V5cyB3aWxsIGhhdmUgYSBzZXF1ZW5jZSBudW1iZXIgYmVoaW5kCiAqIHRoZSBnaXZlbiBuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgU2VlIHBhY2sgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBmb3JtYXQgY29kZXMuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHBhY2tlZCBkYXRhLgogKiBAcGFyYW0gaW50ICRvZmZzZXQgVGhlIG9mZnNldCB0byBiZWdpbiB1bnBhY2tpbmcgZnJvbS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgdW5wYWNrZWQgZWxlbWVudHMgb2YgYmluYXJ5CiAqIHN0cmluZy4KICogQHRocm93cyBNaXNjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1bnBhY2soc3RyaW5nICRmb3JtYXQsIHN0cmluZyAkZGF0YSwgaW50ICRvZmZzZXQgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1bnBhY2soJGZvcm1hdCwgJGRhdGEsICRvZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTWlzY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/msql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNc3FsRXhjZXB0aW9uOwoKLyoqCiAqIFJldHVybnMgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgYnkgdGhlIGxhc3QgU0VMRUNULCBVUERBVEUgb3IgREVMRVRFCiAqIHF1ZXJ5IGFzc29jaWF0ZWQgd2l0aCByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBhZmZlY3RlZCByb3dzIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9hZmZlY3RlZF9yb3dzKCRyZXN1bHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2FmZmVjdGVkX3Jvd3MoJHJlc3VsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfY2xvc2UgY2xvc2VzIHRoZSBub24tcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvCiAqIHRoZSBtU1FMIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluayBpZGVudGlmaWVyLgogKgogKiBVc2luZyBtc3FsX2Nsb3NlIGlzbid0IHVzdWFsbHkgbmVjZXNzYXJ5LCBhcwogKiBub24tcGVyc2lzdGVudCBvcGVuIGxpbmtzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZQogKiBzY3JpcHQncyBleGVjdXRpb24uIFNlZSBhbHNvIGZyZWVpbmcgcmVzb3VyY2VzLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfY2xvc2UoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY2xvc2UoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zcWxfY29ubmVjdCBlc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSBtU1FMCiAqIHNlcnZlci4KICoKICogSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIG1zcWxfY29ubmVjdCB3aXRoCiAqIHRoZSBzYW1lIGFyZ3VtZW50cywgbm8gbmV3IGxpbmsgd2lsbCBiZSBlc3RhYmxpc2hlZCwgYnV0IGluc3RlYWQsIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkgb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4KICoKICogVGhlIGxpbmsgdG8gdGhlIHNlcnZlciB3aWxsIGJlIGNsb3NlZCBhcyBzb29uIGFzIHRoZSBleGVjdXRpb24gb2YgdGhlCiAqIHNjcmlwdCBlbmRzLCB1bmxlc3MgaXQncyBjbG9zZWQgZWFybGllciBieSBleHBsaWNpdGx5IGNhbGxpbmcKICogbXNxbF9jbG9zZS4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgVGhlIGhvc3RuYW1lIGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gZS5nLgogKiBob3N0bmFtZSxwb3J0LgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBieSB0aGUgbWVhbnMgb2YgYSBVbml4CiAqIGRvbWFpbiBzb2NrZXQsIGJlaW5nIHRoZW4gbW9yZSBlZmZpY2llbnQgdGhlbiBhIGxvY2FsaG9zdCBUQ1Agc29ja2V0CiAqIGNvbm5lY3Rpb24uCiAqCiAqIFdoaWxlIHRoaXMgZnVuY3Rpb24gd2lsbCBhY2NlcHQgYSBjb2xvbiAoOikgYXMgYQogKiBob3N0L3BvcnQgc2VwYXJhdG9yLCBhIGNvbW1hICgsKSBpcyB0aGUgcHJlZmVycmVkCiAqIG1ldGhvZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUgbVNRTCBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2Nvbm5lY3Qoc3RyaW5nICRob3N0bmFtZSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkaG9zdG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY29ubmVjdCgkaG9zdG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfY29ubmVjdCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3FsX2NyZWF0ZV9kYiBhdHRlbXB0cyB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2Ugb24KICogdGhlIG1TUUwgc2VydmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBtU1FMIGRhdGFiYXNlLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfY3JlYXRlX2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2NyZWF0ZV9kYigkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9jcmVhdGVfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBtU1FMIHJlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeQogKiBpZGVudGlmaWVyIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgcm93IG51bWJlci4gIFRoZSBuZXh0IGNhbGwKICogdG8gbXNxbF9mZXRjaF9yb3cgd291bGQgcmV0dXJuIHRoYXQKICogcm93LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIFRoZSBzZWVrZWQgcm93IG51bWJlci4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2RhdGFfc2VlaygkcmVzdWx0LCBpbnQgJHJvd19udW1iZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9kYXRhX3NlZWsoJHJlc3VsdCwgJHJvd19udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9kYl9xdWVyeSBzZWxlY3RzIGEgZGF0YWJhc2UgYW5kIGV4ZWN1dGVzIGEgcXVlcnkKICogb24gaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBuYW1lIG9mIHRoZSBtU1FMIGRhdGFiYXNlLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHF1ZXJ5LgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBtU1FMIHF1ZXJ5IGlkZW50aWZpZXIgdG8gdGhlIHF1ZXJ5IHJlc3VsdC4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2RiX3F1ZXJ5KHN0cmluZyAkZGF0YWJhc2UsIHN0cmluZyAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kYl9xdWVyeSgkZGF0YWJhc2UsICRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kYl9xdWVyeSgkZGF0YWJhc2UsICRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfZHJvcF9kYiBhdHRlbXB0cyB0byBkcm9wIChyZW1vdmUpIGEgZGF0YWJhc2UKICogZnJvbSB0aGUgbVNRTCBzZXJ2ZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfZHJvcF9kYihzdHJpbmcgJGRhdGFiYXNlX25hbWUsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGxpbmtfaWRlbnRpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9kcm9wX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX2Ryb3BfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNxbF9maWVsZF9sZW4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQKICogZmllbGQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgbnVtZXJpY2FsIGZpZWxkIG9mZnNldC4gVGhlCiAqIGZpZWxkX29mZnNldCBzdGFydHMgYXQgMS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9maWVsZF9sZW4oJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkZmllbGRfb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNxbF9maWVsZF9uYW1lIGdldHMgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZAogKiBpbmRleC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAxLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZmllbGQuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGZpZWxkIG9mZnNldC4gSWYgdGhlIG5leHQgY2FsbCB0bwogKiBtc3FsX2ZldGNoX2ZpZWxkIHdvbid0IGluY2x1ZGUgYSBmaWVsZCBvZmZzZXQsIHRoaXMKICogZmllbGQgd291bGQgYmUgcmV0dXJuZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG1zcWxfcXVlcnkuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBUaGUgbnVtZXJpY2FsIGZpZWxkIG9mZnNldC4gVGhlCiAqIGZpZWxkX29mZnNldCBzdGFydHMgYXQgMS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZpZWxkX3NlZWsoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGFibGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZpZWxkIGlzIGluLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfZmllbGRfdGFibGUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX3RhYmxlKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBtc3FsX2ZpZWxkX3R5cGUgZ2V0cyB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkCiAqIGluZGV4LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBtc3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSB0eXBlIG9mIHRoZSBmaWVsZC4gT25lIG9mIGludCwKICogY2hhciwgcmVhbCwgaWRlbnQsCiAqIG51bGwgb3IgdW5rbm93bi4gVGhpcyBmdW5jdGlvbnMgd2lsbAogKiByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGZpZWxkX29mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfZnJlZV9yZXN1bHQgZnJlZXMgdGhlIG1lbW9yeSBhc3NvY2lhdGVkCiAqIHdpdGggcXVlcnlfaWRlbnRpZmllci4gIFdoZW4gUEhQIGNvbXBsZXRlcyBhCiAqIHJlcXVlc3QsIHRoaXMgbWVtb3J5IGlzIGZyZWVkIGF1dG9tYXRpY2FsbHksIHNvIHlvdSBvbmx5IG5lZWQgdG8KICogY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdSBkb24ndCB1c2UgdG9vCiAqIG11Y2ggbWVtb3J5IHdoaWxlIHRoZSBzY3JpcHQgaXMgcnVubmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXNxbF9xdWVyeS4KICogQHRocm93cyBNc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zcWxfcGNvbm5lY3QgYWN0cyB2ZXJ5IG11Y2ggbGlrZQogKiBtc3FsX2Nvbm5lY3Qgd2l0aCB0d28gbWFqb3IgZGlmZmVyZW5jZXMuCiAqCiAqIEZpcnN0LCB3aGVuIGNvbm5lY3RpbmcsIHRoZSBmdW5jdGlvbiB3b3VsZCBmaXJzdCB0cnkgdG8gZmluZCBhCiAqIChwZXJzaXN0ZW50KSBsaW5rIHRoYXQncyBhbHJlYWR5IG9wZW4gd2l0aCB0aGUgc2FtZSBob3N0LgogKiBJZiBvbmUgaXMgZm91bmQsIGFuIGlkZW50aWZpZXIgZm9yIGl0IHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiBvcGVuaW5nCiAqIGEgbmV3IGNvbm5lY3Rpb24uCiAqCiAqIFNlY29uZCwgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFNRTCBzZXJ2ZXIgd2lsbCBub3QgYmUgY2xvc2VkIHdoZW4gdGhlCiAqIGV4ZWN1dGlvbiBvZiB0aGUgc2NyaXB0IGVuZHMuICBJbnN0ZWFkLCB0aGUgbGluayB3aWxsIHJlbWFpbiBvcGVuIGZvcgogKiBmdXR1cmUgdXNlIChtc3FsX2Nsb3NlIHdpbGwgbm90IGNsb3NlIGxpbmtzCiAqIGVzdGFibGlzaGVkIGJ5IHRoaXMgZnVuY3Rpb24pLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0bmFtZSBUaGUgaG9zdG5hbWUgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyLiBlLmcuCiAqIGhvc3RuYW1lLHBvcnQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGJ5IHRoZSBtZWFucyBvZiBhIFVuaXgKICogZG9tYWluIHNvY2tldCwgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhIGxvY2FsaG9zdCBUQ1Agc29ja2V0CiAqIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHBvc2l0aXZlIG1TUUwgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9wY29ubmVjdChzdHJpbmcgJGhvc3RuYW1lID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRob3N0bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9wY29ubmVjdCgkaG9zdG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfcGNvbm5lY3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE1zcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXNxbF9xdWVyeSBzZW5kcyBhIHF1ZXJ5IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlCiAqIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbmsKICogaWRlbnRpZmllci4KICoKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIFNRTCBxdWVyeS4KICogQHBhcmFtIHJlc291cmNlfG51bGwgJGxpbmtfaWRlbnRpZmllciBUaGUgbVNRTCBjb25uZWN0aW9uLgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieSBtc3FsX2Nvbm5lY3QKICogaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZXN0YWJsaXNoIGEKICogbGluayBhcyBpZiBtc3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZCwgYW5kIHVzZSBpdC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUgbVNRTCBxdWVyeSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXNxbF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsaW5rX2lkZW50aWZpZXIgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG1zcWxfcXVlcnkoJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX3F1ZXJ5KCRxdWVyeSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG1zcWxfc2VsZWN0X2RiIHNldHMgdGhlIGN1cnJlbnQgYWN0aXZlIGRhdGFiYXNlIG9uCiAqIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCiAqIGxpbmtfaWRlbnRpZmllci4KICoKICogU3Vic2VxdWVudCBjYWxscyB0byBtc3FsX3F1ZXJ5IHdpbGwgYmUgbWFkZSBvbiB0aGUKICogYWN0aXZlIGRhdGFiYXNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBkYXRhYmFzZSBuYW1lLgogKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkbGlua19pZGVudGlmaWVyIFRoZSBtU1FMIGNvbm5lY3Rpb24uCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5IG1zcWxfY29ubmVjdAogKiBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYQogKiBsaW5rIGFzIGlmIG1zcWxfY29ubmVjdCB3YXMgY2FsbGVkLCBhbmQgdXNlIGl0LgogKiBAdGhyb3dzIE1zcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGlua19pZGVudGlmaWVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxtc3FsX3NlbGVjdF9kYigkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcbXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlX25hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbEV4Y2VwdGlvbjsKCi8qKgogKiBteXNxbF9jbG9zZSBjbG9zZXMgdGhlIG5vbi1wZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8KICogdGhlIE15U1FMIHNlcnZlciB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluayBpZGVudGlmaWVyLiBJZgogKiBsaW5rX2lkZW50aWZpZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBvcGVuZWQKICogbGluayBpcyB1c2VkLgogKgogKgogKiBPcGVuIG5vbi1wZXJzaXN0ZW50IE15U1FMIGNvbm5lY3Rpb25zIGFuZCByZXN1bHQgc2V0cyBhcmUgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgd2hlbiBhCiAqIFBIUCBzY3JpcHQgZmluaXNoZXMgaXRzIGV4ZWN1dGlvbi4gU28sIHdoaWxlIGV4cGxpY2l0bHkgY2xvc2luZyBvcGVuCiAqIGNvbm5lY3Rpb25zIGFuZCBmcmVlaW5nIHJlc3VsdCBzZXRzIGlzIG9wdGlvbmFsLCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZC4KICogVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiByZXNvdXJjZXMgdG8gUEhQIGFuZCBNeVNRTCwgd2hpY2ggY2FuCiAqIGltcHJvdmUgcGVyZm9ybWFuY2UuIEZvciByZWxhdGVkIGluZm9ybWF0aW9uLCBzZWUKICogZnJlZWluZyByZXNvdXJjZXMKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yCiAqIGVzdGFibGlzaGVkLCBhbiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMKICogZ2VuZXJhdGVkLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9jbG9zZSgkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9jbG9zZSgkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPcGVucyBvciByZXVzZXMgYSBjb25uZWN0aW9uIHRvIGEgTXlTUUwgc2VydmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXIgVGhlIE15U1FMIHNlcnZlci4gSXQgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyLiBlLmcuCiAqICJob3N0bmFtZTpwb3J0IiBvciBhIHBhdGggdG8gYSBsb2NhbCBzb2NrZXQgZS5nLiAiOi9wYXRoL3RvL3NvY2tldCIgZm9yCiAqIHRoZSBsb2NhbGhvc3QuCiAqCiAqIElmIHRoZSBQSFAgZGlyZWN0aXZlCiAqIG15c3FsLmRlZmF1bHRfaG9zdCBpcyB1bmRlZmluZWQgKGRlZmF1bHQpLCB0aGVuIHRoZSBkZWZhdWx0CiAqIHZhbHVlIGlzICdsb2NhbGhvc3Q6MzMwNicuIEluIFNRTCBzYWZlIG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQKICogYW5kIHZhbHVlICdsb2NhbGhvc3Q6MzMwNicgaXMgYWx3YXlzIHVzZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VybmFtZS4gRGVmYXVsdCB2YWx1ZSBpcyBkZWZpbmVkIGJ5IG15c3FsLmRlZmF1bHRfdXNlci4gSW4KICogU1FMIHNhZmUgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBhbmQgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdGhhdAogKiBvd25zIHRoZSBzZXJ2ZXIgcHJvY2VzcyBpcyB1c2VkLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQuIERlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZCBieSBteXNxbC5kZWZhdWx0X3Bhc3N3b3JkLiBJbgogKiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGFuZCBlbXB0eSBwYXNzd29yZCBpcyB1c2VkLgogKiBAcGFyYW0gYm9vbCAkbmV3X2xpbmsgSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIG15c3FsX2Nvbm5lY3QKICogd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMsIG5vIG5ldyBsaW5rIHdpbGwgYmUgZXN0YWJsaXNoZWQsIGJ1dAogKiBpbnN0ZWFkLCB0aGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBhbHJlYWR5IG9wZW5lZCBsaW5rIHdpbGwgYmUKICogcmV0dXJuZWQuIFRoZSBuZXdfbGluayBwYXJhbWV0ZXIgbW9kaWZpZXMgdGhpcwogKiBiZWhhdmlvciBhbmQgbWFrZXMgbXlzcWxfY29ubmVjdCBhbHdheXMgb3BlbgogKiBhIG5ldyBsaW5rLCBldmVuIGlmIG15c3FsX2Nvbm5lY3Qgd2FzIGNhbGxlZAogKiBiZWZvcmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLgogKiBJbiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiBAcGFyYW0gaW50ICRjbGllbnRfZmxhZ3MgVGhlIGNsaWVudF9mbGFncyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAqIDEyOCAoZW5hYmxlIExPQUQgREFUQSBMT0NBTCBoYW5kbGluZyksCiAqIE1ZU1FMX0NMSUVOVF9TU0wsCiAqIE1ZU1FMX0NMSUVOVF9DT01QUkVTUywKICogTVlTUUxfQ0xJRU5UX0lHTk9SRV9TUEFDRSBvcgogKiBNWVNRTF9DTElFTlRfSU5URVJBQ1RJVkUuCiAqIFJlYWQgdGhlIHNlY3Rpb24gYWJvdXQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogKiBJbiBTUUwgc2FmZSBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBNeVNRTCBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfY29ubmVjdChzdHJpbmcgJHNlcnZlciA9IG51bGwsIHN0cmluZyAkdXNlcm5hbWUgPSBudWxsLCBzdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgYm9vbCAkbmV3X2xpbmsgPSBmYWxzZSwgaW50ICRjbGllbnRfZmxhZ3MgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNsaWVudF9mbGFncyAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJG5ld19saW5rLCAkY2xpZW50X2ZsYWdzKTsKICAgIH0gZWxzZWlmICgkbmV3X2xpbmsgIT09IGZhbHNlKSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCRzZXJ2ZXIsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkbmV3X2xpbmspOwogICAgfSBlbHNlaWYgKCRwYXNzd29yZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9IGVsc2VpZiAoJHVzZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCRzZXJ2ZXIsICR1c2VybmFtZSk7CiAgICB9IGVsc2VpZiAoJHNlcnZlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcbXlzcWxfY29ubmVjdCgkc2VydmVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxteXNxbF9jb25uZWN0KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBteXNxbF9jcmVhdGVfZGIgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbmV3CiAqIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbGluawogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBiZWluZyBjcmVhdGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfY3JlYXRlX2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfY3JlYXRlX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBteXNxbF9kYXRhX3NlZWsgbW92ZXMgdGhlIGludGVybmFsIHJvdwogKiBwb2ludGVyIG9mIHRoZSBNeVNRTCByZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVzdWx0CiAqIGlkZW50aWZpZXIgdG8gcG9pbnQgdG8gdGhlIHNwZWNpZmllZCByb3cgbnVtYmVyLiAgVGhlIG5leHQgY2FsbAogKiB0byBhIE15U1FMIGZldGNoIGZ1bmN0aW9uLCBzdWNoIGFzIG15c3FsX2ZldGNoX2Fzc29jLAogKiB3b3VsZCByZXR1cm4gdGhhdCByb3cuCiAqCiAqIHJvd19udW1iZXIgc3RhcnRzIGF0IDAuIFRoZQogKiByb3dfbnVtYmVyIHNob3VsZCBiZSBhIHZhbHVlIGluIHRoZSByYW5nZSBmcm9tIDAgdG8KICogbXlzcWxfbnVtX3Jvd3MgLSAxLiBIb3dldmVyIGlmIHRoZSByZXN1bHQgc2V0CiAqIGlzIGVtcHR5IChteXNxbF9udW1fcm93cyA9PSAwKSwgYSBzZWVrIHRvIDAgd2lsbAogKiBmYWlsIHdpdGggYW4gRV9XQVJOSU5HIGFuZAogKiBteXNxbF9kYXRhX3NlZWsgd2lsbCByZXR1cm4gRkFMU0UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIFRoZSBkZXNpcmVkIHJvdyBudW1iZXIgb2YgdGhlIG5ldyByZXN1bHQgcG9pbnRlci4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGF0YV9zZWVrKCRyZXN1bHQsIGludCAkcm93X251bWJlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9kYXRhX3NlZWsoJHJlc3VsdCwgJHJvd19udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlIHRoZSBkYXRhYmFzZSBuYW1lIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX2xpc3RfZGJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHBvaW50ZXIgZnJvbSBhIGNhbGwgdG8gbXlzcWxfbGlzdF9kYnMuCiAqIEBwYXJhbSBpbnQgJHJvdyBUaGUgaW5kZXggaW50byB0aGUgcmVzdWx0IHNldC4KICogQHBhcmFtIG1peGVkICRmaWVsZCBUaGUgZmllbGQgbmFtZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGF0YWJhc2UgbmFtZSBvbiBzdWNjZXNzLiBJZiBGQUxTRQogKiBpcyByZXR1cm5lZCwgdXNlIG15c3FsX2Vycm9yIHRvIGRldGVybWluZSB0aGUgbmF0dXJlCiAqIG9mIHRoZSBlcnJvci4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGJfbmFtZSgkcmVzdWx0LCBpbnQgJHJvdywgJGZpZWxkID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2RiX25hbWUoJHJlc3VsdCwgJHJvdywgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG15c3FsX2RiX3F1ZXJ5IHNlbGVjdHMgYSBkYXRhYmFzZSwgYW5kIGV4ZWN1dGVzIGEKICogcXVlcnkgb24gaXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBNeVNRTCBxdWVyeS4KICoKICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiByZXNvdXJjZXxib29sIFJldHVybnMgYSBwb3NpdGl2ZSBNeVNRTCByZXN1bHQgcmVzb3VyY2UgdG8gdGhlIHF1ZXJ5IHJlc3VsdC4gVGhlIGZ1bmN0aW9uIGFsc28gcmV0dXJucyBUUlVFL0ZBTFNFIGZvcgogKiBJTlNFUlQvVVBEQVRFL0RFTEVURQogKiBxdWVyaWVzIHRvIGluZGljYXRlIHN1Y2Nlc3MvZmFpbHVyZS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZGJfcXVlcnkoc3RyaW5nICRkYXRhYmFzZSwgc3RyaW5nICRxdWVyeSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZGJfcXVlcnkoJGRhdGFiYXNlLCAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZHJvcF9kYiBhdHRlbXB0cyB0byBkcm9wIChyZW1vdmUpIGFuCiAqIGVudGlyZSBkYXRhYmFzZSBmcm9tIHRoZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKICogbGluayBpZGVudGlmaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlCiAqIG15c3FsX3F1ZXJ5IHRvIGlzc3VlIGFuIHNxbAogKiBEUk9QIERBVEFCQVNFIHN0YXRlbWVudCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IHdpbGwgYmUgZGVsZXRlZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2Ryb3BfZGIoc3RyaW5nICRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9kcm9wX2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGxlbmd0aHMgb2YgZWFjaCBmaWVsZAogKiBpbiB0aGUgbGFzdCByb3cgZmV0Y2hlZCBieSBNeVNRTC4KICoKICogbXlzcWxfZmV0Y2hfbGVuZ3RocyBzdG9yZXMgdGhlIGxlbmd0aHMgb2YKICogZWFjaCByZXN1bHQgY29sdW1uIGluIHRoZSBsYXN0IHJvdyByZXR1cm5lZCBieQogKiBteXNxbF9mZXRjaF9yb3csCiAqIG15c3FsX2ZldGNoX2Fzc29jLAogKiBteXNxbF9mZXRjaF9hcnJheSwgYW5kCiAqIG15c3FsX2ZldGNoX29iamVjdCBpbiBhbiBhcnJheSwgc3RhcnRpbmcgYXQKICogb2Zmc2V0IDAuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGxlbmd0aHMgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfbGVuZ3RocygkcmVzdWx0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9mZXRjaF9sZW5ndGhzKCRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZmllbGRfZmxhZ3MgcmV0dXJucyB0aGUgZmllbGQgZmxhZ3Mgb2YKICogdGhlIHNwZWNpZmllZCBmaWVsZC4gVGhlIGZsYWdzIGFyZSByZXBvcnRlZCBhcyBhIHNpbmdsZSB3b3JkCiAqIHBlciBmbGFnIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZSwgc28gdGhhdCB5b3UgY2FuIHNwbGl0IHRoZQogKiByZXR1cm5lZCB2YWx1ZSB1c2luZyBleHBsb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAwLiBJZgogKiBmaWVsZF9vZmZzZXQgZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIG9mIGxldmVsCiAqIEVfV0FSTklORyBpcyBhbHNvIGlzc3VlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvZiBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdC4KICoKICogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgcmVwb3J0ZWQsIGlmIHlvdXIgdmVyc2lvbiBvZiBNeVNRTAogKiBpcyBjdXJyZW50IGVub3VnaCB0byBzdXBwb3J0IHRoZW06ICJub3RfbnVsbCIsCiAqICJwcmltYXJ5X2tleSIsICJ1bmlxdWVfa2V5IiwKICogIm11bHRpcGxlX2tleSIsICJibG9iIiwKICogInVuc2lnbmVkIiwgInplcm9maWxsIiwKICogImJpbmFyeSIsICJlbnVtIiwKICogImF1dG9faW5jcmVtZW50IiBhbmQgInRpbWVzdGFtcCIuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX2ZsYWdzKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZmllbGRfZmxhZ3MoJHJlc3VsdCwgJGZpZWxkX29mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBteXNxbF9maWVsZF9sZW4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZQogKiBzcGVjaWZpZWQgZmllbGQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDAuIElmCiAqIGZpZWxkX29mZnNldCBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igb2YgbGV2ZWwKICogRV9XQVJOSU5HIGlzIGFsc28gaXNzdWVkLgogKiBAcmV0dXJuIGludCBUaGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW5kZXggb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsIGludCAkZmllbGRfb2Zmc2V0KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZQogKiBzcGVjaWZpZWQgZmllbGQgaW5kZXguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgVGhlIG51bWVyaWNhbCBmaWVsZCBvZmZzZXQuIFRoZQogKiBmaWVsZF9vZmZzZXQgc3RhcnRzIGF0IDAuIElmCiAqIGZpZWxkX29mZnNldCBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igb2YgbGV2ZWwKICogRV9XQVJOSU5HIGlzIGFsc28gaXNzdWVkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluZGV4IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgaW50ICRmaWVsZF9vZmZzZXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2Vla3MgdG8gdGhlIHNwZWNpZmllZCBmaWVsZCBvZmZzZXQuICBJZiB0aGUgbmV4dCBjYWxsIHRvCiAqIG15c3FsX2ZldGNoX2ZpZWxkIGRvZXNuJ3QgaW5jbHVkZSBhIGZpZWxkCiAqIG9mZnNldCwgdGhlIGZpZWxkIG9mZnNldCBzcGVjaWZpZWQgaW4KICogbXlzcWxfZmllbGRfc2VlayB3aWxsIGJlIHJldHVybmVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0IFRoZSBudW1lcmljYWwgZmllbGQgb2Zmc2V0LiBUaGUKICogZmllbGRfb2Zmc2V0IHN0YXJ0cyBhdCAwLiBJZgogKiBmaWVsZF9vZmZzZXQgZG9lcyBub3QgZXhpc3QsIGFuIGVycm9yIG9mIGxldmVsCiAqIEVfV0FSTklORyBpcyBhbHNvIGlzc3VlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZmllbGRfc2VlaygkcmVzdWx0LCBpbnQgJGZpZWxkX29mZnNldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG15c3FsX2ZyZWVfcmVzdWx0IHdpbGwgZnJlZSBhbGwgbWVtb3J5CiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzdWx0IGlkZW50aWZpZXIgcmVzdWx0LgogKgogKiBteXNxbF9mcmVlX3Jlc3VsdCBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBpZgogKiB5b3UgYXJlIGNvbmNlcm5lZCBhYm91dCBob3cgbXVjaCBtZW1vcnkgaXMgYmVpbmcgdXNlZCBmb3IgcXVlcmllcwogKiB0aGF0IHJldHVybiBsYXJnZSByZXN1bHQgc2V0cy4gIEFsbCBhc3NvY2lhdGVkIHJlc3VsdCBtZW1vcnkgaXMKICogYXV0b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQncyBleGVjdXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiBjb25uZWN0aW9uIGluIHVzZSBmb3IgdGhlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyB0aGUKICogc2VydmVyIGhvc3QgbmFtZS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBNeVNRTCBjb25uZWN0aW9uIGluIHVzZSBmb3IgdGhlCiAqIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2dldF9ob3N0X2luZm8oJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9nZXRfaG9zdF9pbmZvKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBNeVNRTCBwcm90b2NvbC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIE15U1FMIHByb3RvY29sIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX2dldF9wcm90b19pbmZvKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZ2V0X3Byb3RvX2luZm8oJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIE15U1FMIHNlcnZlciB2ZXJzaW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgTXlTUUwgc2VydmVyIHZlcnNpb24gb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFzdCBxdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlbWVudCBvbiBzdWNjZXNzLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cgZm9yIHdoaWNoIHN0YXRlbWVudHMgcHJvdmlkZSBpbmZvcm1hdGlvbiwKICogYW5kIHdoYXQgdGhlIHJldHVybmVkIHZhbHVlIG1heSBsb29rIGxpa2UuIFN0YXRlbWVudHMgdGhhdCBhcmUgbm90IGxpc3RlZAogKiB3aWxsIHJldHVybiBGQUxTRS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfaW5mbygkbGlua19pZGVudGlmaWVyID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2luZm8oJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHBvaW50ZXIgY29udGFpbmluZyB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmcm9tIHRoZQogKiBjdXJyZW50IG15c3FsIGRhZW1vbi4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHJlc3VsdCBwb2ludGVyIHJlc291cmNlIG9uIHN1Y2Nlc3MuIFVzZSB0aGUgbXlzcWxfdGFibGVuYW1lIGZ1bmN0aW9uIHRvIHRyYXZlcnNlCiAqIHRoaXMgcmVzdWx0IHBvaW50ZXIsIG9yIGFueSBmdW5jdGlvbiBmb3IgcmVzdWx0IHRhYmxlcywgc3VjaCBhcwogKiBteXNxbF9mZXRjaF9hcnJheS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9kYnMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbGlzdF9kYnMoJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRhYmxlIG5hbWUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gSXQgaXMgcHJlZmVyYWJsZSB0byB1c2UKICogbXlzcWxfcXVlcnkgdG8gaXNzdWUgYW4gU1FMIFNIT1cgQ09MVU1OUyBGUk9NCiAqIHRhYmxlIFtMSUtFICduYW1lJ10gc3RhdGVtZW50IGluc3RlYWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlX25hbWUgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRoYXQncyBiZWluZyBxdWVyaWVkLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0aGF0J3MgYmVpbmcgcXVlcmllZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSByZXN1bHQgcG9pbnRlciByZXNvdXJjZSBvbiBzdWNjZXNzLgogKgogKiBUaGUgcmV0dXJuZWQgcmVzdWx0IGNhbiBiZSB1c2VkIHdpdGggbXlzcWxfZmllbGRfZmxhZ3MsCiAqIG15c3FsX2ZpZWxkX2xlbiwKICogbXlzcWxfZmllbGRfbmFtZSBhbmQKICogbXlzcWxfZmllbGRfdHlwZS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9maWVsZHMoc3RyaW5nICRkYXRhYmFzZV9uYW1lLCBzdHJpbmcgJHRhYmxlX25hbWUsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX2xpc3RfZmllbGRzKCRkYXRhYmFzZV9uYW1lLCAkdGFibGVfbmFtZSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgTXlTUUwgc2VydmVyIHRocmVhZHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbGlzdF9wcm9jZXNzZXMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbGlzdF9wcm9jZXNzZXMoJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHRhYmxlIG5hbWVzIGZyb20gYSBNeVNRTCBkYXRhYmFzZS4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBJdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQogKiBteXNxbF9xdWVyeSB0byBpc3N1ZSBhbiBTUUwgU0hPVyBUQUJMRVMKICogW0ZST00gZGJfbmFtZV0gW0xJS0UgJ3BhdHRlcm4nXSBzdGF0ZW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2UgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICoKICogVXNlIHRoZSBteXNxbF90YWJsZW5hbWUgZnVuY3Rpb24gdG8KICogdHJhdmVyc2UgdGhpcyByZXN1bHQgcG9pbnRlciwgb3IgYW55IGZ1bmN0aW9uIGZvciByZXN1bHQgdGFibGVzLAogKiBzdWNoIGFzIG15c3FsX2ZldGNoX2FycmF5LgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9saXN0X3RhYmxlcyhzdHJpbmcgJGRhdGFiYXNlLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9saXN0X3RhYmxlcygkZGF0YWJhc2UsICRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2YgZmllbGRzIGZyb20gYSBxdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgVGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0CiAqIGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8KICogbXlzcWxfcXVlcnkuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHJlc3VsdCBzZXQgcmVzb3VyY2Ugb24KICogc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIHJvd3MgZnJvbSBhIHJlc3VsdCBzZXQuIFRoaXMgY29tbWFuZCBpcyBvbmx5IHZhbGlkCiAqIGZvciBzdGF0ZW1lbnRzIGxpa2UgU0VMRUNUIG9yIFNIT1cgdGhhdCByZXR1cm4gYW4gYWN0dWFsIHJlc3VsdCBzZXQuCiAqIFRvIHJldHJpZXZlIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSBhIElOU0VSVCwgVVBEQVRFLCBSRVBMQUNFIG9yCiAqIERFTEVURSBxdWVyeSwgdXNlIG15c3FsX2FmZmVjdGVkX3Jvd3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFRoZSByZXN1bHQgcmVzb3VyY2UgdGhhdAogKiBpcyBiZWluZyBldmFsdWF0ZWQuIFRoaXMgcmVzdWx0IGNvbWVzIGZyb20gYSBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5LgogKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gYSByZXN1bHQgc2V0IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX251bV9yb3dzKCRyZXN1bHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9udW1fcm93cygkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG15c3FsX3F1ZXJ5IHNlbmRzIGEgdW5pcXVlIHF1ZXJ5IChtdWx0aXBsZSBxdWVyaWVzCiAqIGFyZSBub3Qgc3VwcG9ydGVkKSB0byB0aGUgY3VycmVudGx5CiAqIGFjdGl2ZSBkYXRhYmFzZSBvbiB0aGUgc2VydmVyIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIHNwZWNpZmllZCBsaW5rX2lkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IEFuIFNRTCBxdWVyeQogKgogKiBUaGUgcXVlcnkgc3RyaW5nIHNob3VsZCBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uCiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBGb3IgU0VMRUNULCBTSE9XLCBERVNDUklCRSwgRVhQTEFJTiBhbmQgb3RoZXIgc3RhdGVtZW50cyByZXR1cm5pbmcgcmVzdWx0c2V0LAogKiBteXNxbF9xdWVyeQogKiByZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICoKICogRm9yIG90aGVyIHR5cGUgb2YgU1FMIHN0YXRlbWVudHMsIElOU0VSVCwgVVBEQVRFLCBERUxFVEUsIERST1AsIGV0YywKICogbXlzcWxfcXVlcnkgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoZSByZXR1cm5lZCByZXN1bHQgcmVzb3VyY2Ugc2hvdWxkIGJlIHBhc3NlZCB0bwogKiBteXNxbF9mZXRjaF9hcnJheSwgYW5kIG90aGVyCiAqIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHJlc3VsdCB0YWJsZXMsIHRvIGFjY2VzcyB0aGUgcmV0dXJuZWQgZGF0YS4KICoKICogVXNlIG15c3FsX251bV9yb3dzIHRvIGZpbmQgb3V0IGhvdyBtYW55IHJvd3MKICogd2VyZSByZXR1cm5lZCBmb3IgYSBTRUxFQ1Qgc3RhdGVtZW50IG9yCiAqIG15c3FsX2FmZmVjdGVkX3Jvd3MgdG8gZmluZCBvdXQgaG93IG1hbnkKICogcm93cyB3ZXJlIGFmZmVjdGVkIGJ5IGEgREVMRVRFLCBJTlNFUlQsIFJFUExBQ0UsIG9yIFVQREFURQogKiBzdGF0ZW1lbnQuCiAqCiAqIG15c3FsX3F1ZXJ5IHdpbGwgYWxzbyBmYWlsIGFuZCByZXR1cm4gRkFMU0UKICogaWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgdGFibGUocykgcmVmZXJlbmNlZCBieQogKiB0aGUgcXVlcnkuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX3F1ZXJ5KHN0cmluZyAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgdW5lc2NhcGVkX3N0cmluZywKICogdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBjb25uZWN0aW9uIHNvIHRoYXQgaXQKICogaXMgc2FmZSB0byBwbGFjZSBpdCBpbiBhIG15c3FsX3F1ZXJ5LiBJZiBiaW5hcnkgZGF0YQogKiBpcyB0byBiZSBpbnNlcnRlZCwgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuCiAqCiAqIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyBjYWxscyBNeVNRTCdzIGxpYnJhcnkgZnVuY3Rpb24KICogbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nLCB3aGljaCBwcmVwZW5kcyBiYWNrc2xhc2hlcyB0byB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CiAqIFx4MDAsIFxuLAogKiBcciwgXCwgJywKICogIiBhbmQgXHgxYS4KICoKICogVGhpcyBmdW5jdGlvbiBtdXN0IGFsd2F5cyAod2l0aCBmZXcgZXhjZXB0aW9ucykgYmUgdXNlZCB0byBtYWtlIGRhdGEKICogc2FmZSBiZWZvcmUgc2VuZGluZyBhIHF1ZXJ5IHRvIE15U1FMLgogKgogKiBAcGFyYW0gc3RyaW5nICR1bmVzY2FwZWRfc3RyaW5nIFRoZSBzdHJpbmcgdGhhdCBpcyB0byBiZSBlc2NhcGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgTXlzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyhzdHJpbmcgJHVuZXNjYXBlZF9zdHJpbmcsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR1bmVzY2FwZWRfc3RyaW5nLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgY29udGVudHMgb2Ygb25lIGNlbGwgZnJvbSBhIE15U1FMIHJlc3VsdCBzZXQuCiAqCiAqIFdoZW4gd29ya2luZyBvbiBsYXJnZSByZXN1bHQgc2V0cywgeW91IHNob3VsZCBjb25zaWRlciB1c2luZyBvbmUKICogb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGZldGNoIGFuIGVudGlyZSByb3cgKHNwZWNpZmllZCBiZWxvdykuICBBcwogKiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSBjZWxscyBpbiBvbmUKICogZnVuY3Rpb24gY2FsbCwgdGhleSdyZSBNVUNIIHF1aWNrZXIgdGhhbgogKiBteXNxbF9yZXN1bHQuICBBbHNvLCBub3RlIHRoYXQgc3BlY2lmeWluZyBhCiAqIG51bWVyaWMgb2Zmc2V0IGZvciB0aGUgZmllbGQgYXJndW1lbnQgaXMgbXVjaCBxdWlja2VyIHRoYW4KICogc3BlY2lmeWluZyBhIGZpZWxkbmFtZSBvciB0YWJsZW5hbWUuZmllbGRuYW1lIGFyZ3VtZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBUaGUgcmVzdWx0IHJlc291cmNlIHRoYXQKICogaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0bwogKiBteXNxbF9xdWVyeS4KICogQHBhcmFtIGludCAkcm93IFRoZSByb3cgbnVtYmVyIGZyb20gdGhlIHJlc3VsdCB0aGF0J3MgYmVpbmcgcmV0cmlldmVkLiBSb3cgbnVtYmVycwogKiBzdGFydCBhdCAwLgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIFRoZSBuYW1lIG9yIG9mZnNldCBvZiB0aGUgZmllbGQgYmVpbmcgcmV0cmlldmVkLgogKgogKiBJdCBjYW4gYmUgdGhlIGZpZWxkJ3Mgb2Zmc2V0LCB0aGUgZmllbGQncyBuYW1lLCBvciB0aGUgZmllbGQncyB0YWJsZQogKiBkb3QgZmllbGQgbmFtZSAodGFibGVuYW1lLmZpZWxkbmFtZSkuIElmIHRoZSBjb2x1bW4gbmFtZSBoYXMgYmVlbgogKiBhbGlhc2VkICgnc2VsZWN0IGZvbyBhcyBiYXIgZnJvbS4uLicpLCB1c2UgdGhlIGFsaWFzIGluc3RlYWQgb2YgdGhlCiAqIGNvbHVtbiBuYW1lLiBJZiB1bmRlZmluZWQsIHRoZSBmaXJzdCBmaWVsZCBpcyByZXRyaWV2ZWQuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb250ZW50cyBvZiBvbmUgY2VsbCBmcm9tIGEgTXlTUUwgcmVzdWx0IHNldCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9yZXN1bHQoJHJlc3VsdCwgaW50ICRyb3csICRmaWVsZCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF9yZXN1bHQoJHJlc3VsdCwgJHJvdywgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgYWN0aXZlIGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIGxpbmsgaWRlbnRpZmllci4gRXZlcnkgc3Vic2VxdWVudCBjYWxsIHRvCiAqIG15c3FsX3F1ZXJ5IHdpbGwgYmUgbWFkZSBvbiB0aGUgYWN0aXZlIGRhdGFiYXNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGF0IGlzIHRvIGJlIHNlbGVjdGVkLgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBUaGUgTXlTUUwgY29ubmVjdGlvbi4gSWYgdGhlCiAqIGxpbmsgaWRlbnRpZmllciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbGFzdCBsaW5rIG9wZW5lZCBieQogKiBteXNxbF9jb25uZWN0IGlzIGFzc3VtZWQuIElmIG5vIHN1Y2ggbGluayBpcyBmb3VuZCwgaXQKICogd2lsbCB0cnkgdG8gY3JlYXRlIG9uZSBhcyBpZiBteXNxbF9jb25uZWN0IGhhZCBiZWVuIGNhbGxlZAogKiB3aXRoIG5vIGFyZ3VtZW50cy4gSWYgbm8gY29ubmVjdGlvbiBpcyBmb3VuZCBvciBlc3RhYmxpc2hlZCwgYW4KICogRV9XQVJOSU5HIGxldmVsIGVycm9yIGlzIGdlbmVyYXRlZC4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfc2VsZWN0X2RiKHN0cmluZyAkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgQSB2YWxpZCBjaGFyYWN0ZXIgc2V0IG5hbWUuCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAdGhyb3dzIE15c3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbF9zZXRfY2hhcnNldChzdHJpbmcgJGNoYXJzZXQsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3NldF9jaGFyc2V0KCRjaGFyc2V0LCAkbGlua19pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIHRhYmxlIG5hbWUgZnJvbSBhIHJlc3VsdC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBJdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQogKiBteXNxbF9xdWVyeSB0byBpc3N1ZSBhbiBTUUwgU0hPVyBUQUJMRVMKICogW0ZST00gZGJfbmFtZV0gW0xJS0UgJ3BhdHRlcm4nXSBzdGF0ZW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgQSByZXN1bHQgcG9pbnRlciByZXNvdXJjZSB0aGF0J3MgcmV0dXJuZWQgZnJvbQogKiBteXNxbF9saXN0X3RhYmxlcy4KICogQHBhcmFtIGludCAkaSBUaGUgaW50ZWdlciBpbmRleCAocm93L3RhYmxlIG51bWJlcikKICogQHJldHVybiBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9uIHN1Y2Nlc3MuCiAqCiAqIFVzZSB0aGUgbXlzcWxfdGFibGVuYW1lIGZ1bmN0aW9uIHRvCiAqIHRyYXZlcnNlIHRoaXMgcmVzdWx0IHBvaW50ZXIsIG9yIGFueSBmdW5jdGlvbiBmb3IgcmVzdWx0IHRhYmxlcywKICogc3VjaCBhcyBteXNxbF9mZXRjaF9hcnJheS4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdGFibGVuYW1lKCRyZXN1bHQsIGludCAkaSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsX3RhYmxlbmFtZSgkcmVzdWx0LCAkaSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdGhyZWFkIElELiBJZiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LCBhbmQgYSByZWNvbm5lY3QKICogd2l0aCBteXNxbF9waW5nIGlzIGV4ZWN1dGVkLCB0aGUgdGhyZWFkIElEIHdpbGwKICogY2hhbmdlLiBUaGlzIG1lYW5zIG9ubHkgcmV0cmlldmUgdGhlIHRocmVhZCBJRCB3aGVuIG5lZWRlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgVGhlIE15U1FMIGNvbm5lY3Rpb24uIElmIHRoZQogKiBsaW5rIGlkZW50aWZpZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgbGluayBvcGVuZWQgYnkKICogbXlzcWxfY29ubmVjdCBpcyBhc3N1bWVkLiBJZiBubyBzdWNoIGxpbmsgaXMgZm91bmQsIGl0CiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBvbmUgYXMgaWYgbXlzcWxfY29ubmVjdCBoYWQgYmVlbiBjYWxsZWQKICogd2l0aCBubyBhcmd1bWVudHMuIElmIG5vIGNvbm5lY3Rpb24gaXMgZm91bmQgb3IgZXN0YWJsaXNoZWQsIGFuCiAqIEVfV0FSTklORyBsZXZlbCBlcnJvciBpcyBnZW5lcmF0ZWQuCiAqIEByZXR1cm4gaW50IFRoZSB0aHJlYWQgSUQgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdGhyZWFkX2lkKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxfdGhyZWFkX2lkKCRsaW5rX2lkZW50aWZpZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSBzZW5kcyB0aGUgU1FMIHF1ZXJ5CiAqIHF1ZXJ5IHRvIE15U1FMIHdpdGhvdXQgYXV0b21hdGljYWxseQogKiBmZXRjaGluZyBhbmQgYnVmZmVyaW5nIHRoZSByZXN1bHQgcm93cyBhcwogKiBteXNxbF9xdWVyeSBkb2VzLiAgVGhpcyBzYXZlcyBhIGNvbnNpZGVyYWJsZQogKiBhbW91bnQgb2YgbWVtb3J5IHdpdGggU1FMIHF1ZXJpZXMgdGhhdCBwcm9kdWNlIGxhcmdlIHJlc3VsdCBzZXRzLAogKiBhbmQgeW91IGNhbiBzdGFydCB3b3JraW5nIG9uIHRoZSByZXN1bHQgc2V0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZQogKiBmaXJzdCByb3cgaGFzIGJlZW4gcmV0cmlldmVkIGFzIHlvdSBkb24ndCBoYXZlIHRvIHdhaXQgdW50aWwgdGhlCiAqIGNvbXBsZXRlIFNRTCBxdWVyeSBoYXMgYmVlbiBwZXJmb3JtZWQuICBUbyB1c2UKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSB3aGlsZSBtdWx0aXBsZSBkYXRhYmFzZQogKiBjb25uZWN0aW9ucyBhcmUgb3BlbiwgeW91IG11c3Qgc3BlY2lmeSB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyCiAqIGxpbmtfaWRlbnRpZmllciB0byBpZGVudGlmeSB3aGljaCBjb25uZWN0aW9uCiAqIHlvdSB3YW50IHRvIHVzZS4KICoKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIFNRTCBxdWVyeSB0byBleGVjdXRlLgogKgogKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFRoZSBNeVNRTCBjb25uZWN0aW9uLiBJZiB0aGUKICogbGluayBpZGVudGlmaWVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXN0IGxpbmsgb3BlbmVkIGJ5CiAqIG15c3FsX2Nvbm5lY3QgaXMgYXNzdW1lZC4gSWYgbm8gc3VjaCBsaW5rIGlzIGZvdW5kLCBpdAogKiB3aWxsIHRyeSB0byBjcmVhdGUgb25lIGFzIGlmIG15c3FsX2Nvbm5lY3QgaGFkIGJlZW4gY2FsbGVkCiAqIHdpdGggbm8gYXJndW1lbnRzLiBJZiBubyBjb25uZWN0aW9uIGlzIGZvdW5kIG9yIGVzdGFibGlzaGVkLCBhbgogKiBFX1dBUk5JTkcgbGV2ZWwgZXJyb3IgaXMgZ2VuZXJhdGVkLgogKiBAcmV0dXJuIHJlc291cmNlfGJvb2wgRm9yIFNFTEVDVCwgU0hPVywgREVTQ1JJQkUgb3IgRVhQTEFJTiBzdGF0ZW1lbnRzLAogKiBteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5CiAqIHJldHVybnMgYSByZXNvdXJjZSBvbiBzdWNjZXNzLgogKgogKiBGb3Igb3RoZXIgdHlwZSBvZiBTUUwgc3RhdGVtZW50cywgVVBEQVRFLCBERUxFVEUsIERST1AsIGV0YywKICogbXlzcWxfdW5idWZmZXJlZF9xdWVyeSByZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBNeXNxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxfdW5idWZmZXJlZF9xdWVyeShzdHJpbmcgJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5KCRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqli.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbGlFeGNlcHRpb247CgovKioKICogUmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICogQXZhaWxhYmxlIG9ubHkgd2l0aCBteXNxbG5kLgogKgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gZW1wdHkgYXJyYXkgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIE15c3FsaUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbXlzcWxpX2dldF9jYWNoZV9zdGF0cygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsaV9nZXRfY2FjaGVfc3RhdHMoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsaUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIGNsaWVudCBwZXItcHJvY2VzcyBzdGF0aXN0aWNzLgogKiBBdmFpbGFibGUgb25seSB3aXRoIG15c3FsbmQuCiAqCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIGNsaWVudCBzdGF0cyBpZiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgTXlzcWxpRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbGlfZ2V0X2NsaWVudF9zdGF0cygpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsaV9nZXRfY2xpZW50X3N0YXRzKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbGlFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqlndMs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbG5kTXNFeGNlcHRpb247CgovKioKICogUmV0dXJucyBhIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgc2VydmVycy4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcmV0dXJuIGFycmF5IEZBTFNFIG9uIGVycm9yLiBPdGhlcndpc2UsIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0d28gZW50cmllcwogKiBtYXN0ZXJzIGFuZCBzbGF2ZXMgZWFjaCBvZiB3aGljaCBjb250YWlucwogKiBhbiBhcnJheSBsaXN0aW5nIGFsbCBjb3JyZXNwb25kaW5nIHNlcnZlcnMuCiAqCiAqIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBhbmQgZGVidWcgdGhlIGxpc3Qgb2Ygc2VydmVycyBjdXJyZW50bHkKICogdXNlZCBieSB0aGUgcGx1Z2luLiBJdCBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlIGxpc3Qgb2Ygc2VydmVycyBjaGFuZ2VzIGF0CiAqIHJ1bnRpbWUsIGZvciBleGFtcGxlLCB3aGVuIHVzaW5nIE15U1FMIEZhYnJpYy4KICoKICogbWFzdGVycyBhbmQgc2xhdmVzIHNlcnZlciBlbnRyaWVzCiAqIEB0aHJvd3MgTXlzcWxuZE1zRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX21zX2R1bXBfc2VydmVycygkY29ubmVjdGlvbik6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxuZF9tc19kdW1wX3NlcnZlcnMoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIE15U1FMIEZhYnJpYyByZWxhdGVkLgogKgogKiBTd2l0Y2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIG5vZGVzIGhhbmRsaW5nIGdsb2JhbCBzaGFyZGluZyBxdWVyaWVzCiAqIGZvciB0aGUgZ2l2ZW4gdGFibGUgbmFtZS4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcGFyYW0gbWl4ZWQgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUgdG8gYXNrIEZhYnJpYyBhYm91dC4KICogQHJldHVybiBhcnJheSBGQUxTRSBvbiBlcnJvci4gT3RoZXJ3aXNlLCBUUlVFCiAqIEB0aHJvd3MgTXlzcWxuZE1zRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXlzcWxuZF9tc19mYWJyaWNfc2VsZWN0X2dsb2JhbCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIE15U1FMIEZhYnJpYyByZWxhdGVkLgogKgogKiBTd2l0Y2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNoYXJkcyByZXNwb25zaWJsZSBmb3IgdGhlCiAqIGdpdmVuIHRhYmxlIG5hbWUgYW5kIHNoYXJkIGtleS4KICoKICogQHBhcmFtIG1peGVkICRjb25uZWN0aW9uIEEgTXlTUUwgY29ubmVjdGlvbiBoYW5kbGUgb2J0YWluZWQgZnJvbSBhbnkgb2YgdGhlCiAqIGNvbm5lY3QgZnVuY3Rpb25zIG9mIHRoZSBteXNxbGksCiAqIG15c3FsIG9yCiAqIFBET19NWVNRTCBleHRlbnNpb25zLgogKiBAcGFyYW0gbWl4ZWQgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUgdG8gYXNrIEZhYnJpYyBhYm91dC4KICogQHBhcmFtIG1peGVkICRzaGFyZF9rZXkgVGhlIHNoYXJkIGtleSB0byBhc2sgRmFicmljIGFib3V0LgogKiBAcmV0dXJuIGFycmF5IEZBTFNFIG9uIGVycm9yLiBPdGhlcndpc2UsIFRSVUUKICogQHRocm93cyBNeXNxbG5kTXNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRzaGFyZF9rZXkpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRzaGFyZF9rZXkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTXlzcWxuZE1zRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBsYXN0IHVzZWQgY29ubmVjdGlvbiBmcm9tIHRoZSBwbHVnaW5zCiAqIGNvbm5lY3Rpb24gcG9vbCBjdXJyZW50bHkgcG9pbnRlZCB0byBieSB0aGUgdXNlciBjb25uZWN0aW9uIGhhbmRsZS4gSWYgdXNpbmcgdGhlCiAqIHBsdWdpbiwgYSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlIHJlcHJlc2VudHMgYSBwb29sIG9mIGRhdGFiYXNlIGNvbm5lY3Rpb25zLgogKiBJdCBpcyBub3QgcG9zc2libGUgdG8gdGVsbCBmcm9tIHRoZSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlcyBwcm9wZXJ0aWVzIHRvIHdoaWNoCiAqIGRhdGFiYXNlIHNlcnZlciBmcm9tIHRoZSBwb29sIHRoZSB1c2VyIGNvbm5lY3Rpb24gaGFuZGxlIHBvaW50cy4KICoKICogVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlYnVnIG9yIG1vbml0b3IgUEVDTCBteXNxbG5kX21zLgogKgogKiBAcGFyYW0gbWl4ZWQgJGNvbm5lY3Rpb24gQSBNeVNRTCBjb25uZWN0aW9uIGhhbmRsZSBvYnRhaW5lZCBmcm9tIGFueSBvZiB0aGUKICogY29ubmVjdCBmdW5jdGlvbnMgb2YgdGhlIG15c3FsaSwKICogbXlzcWwgb3IKICogUERPX01ZU1FMIGV4dGVuc2lvbnMuCiAqIEByZXR1cm4gYXJyYXkgRkFMU0Ugb24gZXJyb3IuIE90aGVyd2lzZSwgYW4KICogYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjb25uZWN0aW9uIHVzZWQgdG8KICogZXhlY3V0ZSB0aGUgbGFzdCBzdGF0ZW1lbnQgb24uCiAqCiAqIEFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY29ubmVjdGlvbi4KICogQHRocm93cyBNeXNxbG5kTXNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG15c3FsbmRfbXNfZ2V0X2xhc3RfdXNlZF9jb25uZWN0aW9uKCRjb25uZWN0aW9uKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX21zX2dldF9sYXN0X3VzZWRfY29ubmVjdGlvbigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kTXNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/mysqlndQc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xNeXNxbG5kUWNFeGNlcHRpb247CgovKioKICogRmx1c2ggYWxsIGNhY2hlIGNvbnRlbnRzLgogKgogKiBGbHVzaGluZyB0aGUgY2FjaGUgaXMgYSBzdG9yYWdlIGhhbmRsZXIgcmVzcG9uc2liaWxpdHkuCiAqIEFsbCBidWlsdC1pbiBzdG9yYWdlIGhhbmRsZXIgYnV0IHRoZQogKiBtZW1jYWNoZSBzdG9yYWdlCiAqIGhhbmRsZXIgc3VwcG9ydCBmbHVzaGluZyB0aGUgY2FjaGUuIFRoZQogKiBtZW1jYWNoZQogKiBzdG9yYWdlIGhhbmRsZXIgY2Fubm90IGZsdXNoIGl0cyBjYWNoZSBjb250ZW50cy4KICoKICogVXNlci1kZWZpbmVkIHN0b3JhZ2UgaGFuZGxlciBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24uCiAqCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX2NsZWFyX2NhY2hlKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX3FjX2NsZWFyX2NhY2hlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kUWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluc3RhbGxzIGEgY2FsbGJhY2sgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgc3RhdGVtZW50IGlzIGNhY2hlZC4KICoKICogVGhlcmUgYXJlIHNldmVyYWwgd2F5cyBvZiBoaW50aW5nIFBFTEMvbXlzcWxuZF9xYyB0byBjYWNoZSBhIHF1ZXJ5LgogKiBCeSBkZWZhdWx0LCBQRUNML215c3FsbmRfcWMgYXR0ZW1wdHMgdG8gY2FjaGUgYSBpZiBjYWNoaW5nIG9mIGFsbCBzdGF0ZW1lbnRzCiAqIGlzIGVuYWJsZWQgb3IgdGhlIHF1ZXJ5IHN0cmluZyBiZWdpbnMgd2l0aCBhIGNlcnRhaW4gU1FMIGhpbnQuCiAqIFRoZSBwbHVnaW4gaW50ZXJuYWxseSBjYWxscyBhIGZ1bmN0aW9uIG5hbWVkIGlzX3NlbGVjdCgpCiAqIHRvIGZpbmQgb3V0LiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgdXNlci1kZWZpbmVkIGNhbGxiYWNrLgogKiBUaGVuLCB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwbHVnaW4KICogYXR0ZW1wdHMgdG8gY2FjaGUgYSBzdGF0ZW1lbnQuIEJlY2F1c2UgdGhlIGludGVybmFsIGZ1bmN0aW9uIGlzIHJlcGxhY2VkCiAqIHdpdGggdGhlIGNhbGxiYWNrLCB0aGUgY2FsbGJhY2sgZ2FpbnMgZnVsbCBjb250cm9sLiBUaGUgY2FsbGJhY2sgaXMgZnJlZQogKiB0byBpZ25vcmUgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBteXNxbG5kX3FjLmNhY2hlX2J5X2RlZmF1bHQKICogYW5kIFNRTCBoaW50cy4KICoKICogVGhlIGNhbGxiYWNrIGlzIGludm9rZWQgZm9yIGV2ZXJ5IHN0YXRlbWVudCBpbnNwZWN0ZWQgYnkgdGhlIHBsdWdpbi4KICogSXQgaXMgZ2l2ZW4gdGhlIHN0YXRlbWVudHMgc3RyaW5nIGFzIGEgcGFyYW1ldGVyLiBUaGUgY2FsbGJhY2sgcmV0dXJucwogKiBGQUxTRSBpZiB0aGUgc3RhdGVtZW50IHNoYWxsIG5vdCBiZSBjYWNoZWQuIEl0IHJldHVybnMgVFJVRSB0bwogKiBtYWtlIHRoZSBwbHVnaW4gYXR0ZW1wdCB0byBjYWNoZSB0aGUgc3RhdGVtZW50cyByZXN1bHQgc2V0LCBpZiBhbnkuCiAqIEEgc28tY3JlYXRlZCBjYWNoZSBlbnRyeSBpcyBnaXZlbiB0aGUgZGVmYXVsdCBUVEwgc2V0IHdpdGggdGhlCiAqIFBIUCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBteXNxbG5kX3FjLnR0bC4KICogSWYgYSBkaWZmZXJlbnQgVFRMIHNoYWxsIGJlIHVzZWQsIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgbnVtZXJpYwogKiB2YWx1ZSB0byBiZSB1c2VkIGFzIHRoZSBUVEwuCiAqCiAqIFRoZSBpbnRlcm5hbCBpc19zZWxlY3QgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwKICogY2FjaGUgc3RvcmFnZSBoYW5kbGVyIGludGVyZmFjZS4gVGh1cywgYSB1c2VyLWRlZmluZWQgc3RvcmFnZSBoYW5kbGVyCiAqIG9mZmVycyB0aGUgc2FtZSBjYXBhYmlsaXRpZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGNhbGxiYWNrCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX3NldF9pc19zZWxlY3Qoc3RyaW5nICRjYWxsYmFjaykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxteXNxbG5kX3FjX3NldF9pc19zZWxlY3QoJGNhbGxiYWNrKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE15c3FsbmRRY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIHRoZSBzdG9yYWdlIGhhbmRsZXIgdXNlZCBieSB0aGUgcXVlcnkgY2FjaGUuIEEgbGlzdCBvZiBhdmFpbGFibGUKICogc3RvcmFnZSBoYW5kbGVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tCiAqIG15c3FsbmRfcWNfZ2V0X2F2YWlsYWJsZV9oYW5kbGVycy4KICogV2hpY2ggc3RvcmFnZSBhcmUgYXZhaWxhYmxlIGRlcGVuZHMgb24gdGhlIGNvbXBpbGUgdGltZQogKiBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWVyeSBjYWNoZSBwbHVnaW4uIFRoZQogKiBkZWZhdWx0IHN0b3JhZ2UgaGFuZGxlciBpcyBhbHdheXMgYXZhaWxhYmxlLgogKiBBbGwgb3RoZXIgc3RvcmFnZSBoYW5kbGVyIG11c3QgYmUgZW5hYmxlZCBleHBsaWNpdGx5IHdoZW4gYnVpbGRpbmcgdGhlCiAqIGV4dGVuc2lvbi4KICoKICogQHBhcmFtIHN0cmluZyAkaGFuZGxlciBIYW5kbGVyIGNhbiBiZSBvZiB0eXBlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgYQogKiBidWlsdC1pbiBzdG9yYWdlIGhhbmRsZXIgb3IgYW4gb2JqZWN0IG9mIHR5cGUKICogbXlzcWxuZF9xY19oYW5kbGVyX2RlZmF1bHQuCiAqIFRoZSBuYW1lcyBvZiB0aGUgYnVpbHQtaW4gc3RvcmFnZSBoYW5kbGVyIGFyZQogKiBkZWZhdWx0LAogKiBBUEMsCiAqIE1FTUNBQ0hFLAogKiBzcWxpdGUuCiAqIEB0aHJvd3MgTXlzcWxuZFFjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBteXNxbG5kX3FjX3NldF9zdG9yYWdlX2hhbmRsZXIoc3RyaW5nICRoYW5kbGVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG15c3FsbmRfcWNfc2V0X3N0b3JhZ2VfaGFuZGxlcigkaGFuZGxlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBNeXNxbG5kUWNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/network.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xOZXR3b3JrRXhjZXB0aW9uOwoKLyoqCiAqIGNsb3NlbG9nIGNsb3NlcyB0aGUgZGVzY3JpcHRvciBiZWluZyB1c2VkIHRvIHdyaXRlIHRvCiAqIHRoZSBzeXN0ZW0gbG9nZ2VyLiAgVGhlIHVzZSBvZiBjbG9zZWxvZyBpcyBvcHRpb25hbC4KICoKICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbG9zZWxvZygpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY2xvc2Vsb2coKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZldGNoIEROUyBSZXNvdXJjZSBSZWNvcmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KICogaG9zdG5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhvc3RuYW1lIGhvc3RuYW1lIHNob3VsZCBiZSBhIHZhbGlkIEROUyBob3N0bmFtZSBzdWNoCiAqIGFzICJ3d3cuZXhhbXBsZS5jb20iLiBSZXZlcnNlIGxvb2t1cHMgY2FuIGJlIGdlbmVyYXRlZAogKiB1c2luZyBpbi1hZGRyLmFycGEgbm90YXRpb24sIGJ1dAogKiBnZXRob3N0YnlhZGRyIGlzIG1vcmUgc3VpdGFibGUgZm9yCiAqIHRoZSBtYWpvcml0eSBvZiByZXZlcnNlIGxvb2t1cHMuCiAqCiAqIFBlciBETlMgc3RhbmRhcmRzLCBlbWFpbCBhZGRyZXNzZXMgYXJlIGdpdmVuIGluIHVzZXIuaG9zdCBmb3JtYXQgKGZvcgogKiBleGFtcGxlOiBob3N0bWFzdGVyLmV4YW1wbGUuY29tIGFzIG9wcG9zZWQgdG8gaG9zdG1hc3RlckBleGFtcGxlLmNvbSksCiAqIGJlIHN1cmUgdG8gY2hlY2sgdGhpcyB2YWx1ZSBhbmQgbW9kaWZ5IGlmIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgaXQKICogd2l0aCBhIGZ1bmN0aW9ucyBzdWNoIGFzIG1haWwuCiAqIEBwYXJhbSBpbnQgJHR5cGUgQnkgZGVmYXVsdCwgZG5zX2dldF9yZWNvcmQgd2lsbCBzZWFyY2ggZm9yIGFueQogKiByZXNvdXJjZSByZWNvcmRzIGFzc29jaWF0ZWQgd2l0aCBob3N0bmFtZS4KICogVG8gbGltaXQgdGhlIHF1ZXJ5LCBzcGVjaWZ5IHRoZSBvcHRpb25hbCB0eXBlCiAqIHBhcmFtZXRlci4gTWF5IGJlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogRE5TX0EsIEROU19DTkFNRSwKICogRE5TX0hJTkZPLCBETlNfQ0FBLAogKiBETlNfTVgsIEROU19OUywKICogRE5TX1BUUiwgRE5TX1NPQSwKICogRE5TX1RYVCwgRE5TX0FBQUEsCiAqIEROU19TUlYsIEROU19OQVBUUiwKICogRE5TX0E2LCBETlNfQUxMCiAqIG9yIEROU19BTlkuCiAqCiAqIEJlY2F1c2Ugb2YgZWNjZW50cmljaXRpZXMgaW4gdGhlIHBlcmZvcm1hbmNlIG9mIGxpYnJlc29sdgogKiBiZXR3ZWVuIHBsYXRmb3JtcywgRE5TX0FOWSB3aWxsIG5vdAogKiBhbHdheXMgcmV0dXJuIGV2ZXJ5IHJlY29yZCwgdGhlIHNsb3dlciBETlNfQUxMCiAqIHdpbGwgY29sbGVjdCBhbGwgcmVjb3JkcyBtb3JlIHJlbGlhYmx5LgogKgogKiBETlNfQ0FBIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4KICogQHBhcmFtIGFycmF5fG51bGwgJGF1dGhucyBQYXNzZWQgYnkgcmVmZXJlbmNlIGFuZCwgaWYgZ2l2ZW4sIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggUmVzb3VyY2UKICogUmVjb3JkcyBmb3IgdGhlIEF1dGhvcml0YXRpdmUgTmFtZSBTZXJ2ZXJzLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkYWRkdGwgUGFzc2VkIGJ5IHJlZmVyZW5jZSBhbmQsIGlmIGdpdmVuLCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGFueQogKiBBZGRpdGlvbmFsIFJlY29yZHMuCiAqIEBwYXJhbSBib29sICRyYXcgVGhlIHR5cGUgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJhdyBETlMgdHlwZSBJRAogKiAodGhlIEROU18qIGNvbnN0YW50cyBjYW5ub3QgYmUgdXNlZCkuCiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBjb250YWluIGEgZGF0YSBrZXksIHdoaWNoIG5lZWRzCiAqIHRvIGJlIG1hbnVhbGx5IHBhcnNlZC4KICogQHJldHVybiBhcnJheSBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzLiBFYWNoIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5zCiAqIGF0IG1pbmltdW0gdGhlIGZvbGxvd2luZyBrZXlzOgogKgogKiBCYXNpYyBETlMgYXR0cmlidXRlcwogKgogKgogKgogKiBBdHRyaWJ1dGUKICogTWVhbmluZwogKgogKgogKgogKgogKiBob3N0CiAqCiAqIFRoZSByZWNvcmQgaW4gdGhlIEROUyBuYW1lc3BhY2UgdG8gd2hpY2ggdGhlIHJlc3Qgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSByZWZlcnMuCiAqCiAqCiAqCiAqIGNsYXNzCiAqCiAqIGRuc19nZXRfcmVjb3JkIG9ubHkgcmV0dXJucyBJbnRlcm5ldCBjbGFzcyByZWNvcmRzIGFuZCBhcwogKiBzdWNoIHRoaXMgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIHJldHVybiBJTi4KICoKICoKICoKICogdHlwZQogKgogKiBTdHJpbmcgY29udGFpbmluZyB0aGUgcmVjb3JkIHR5cGUuICBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgd2lsbCBhbHNvIGJlIGNvbnRhaW5lZAogKiBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IGRlcGVuZGFudCBvbiB0aGUgdmFsdWUgb2YgdHlwZS4gU2VlIHRhYmxlIGJlbG93LgogKgogKgogKgogKiB0dGwKICoKICogIlRpbWUgVG8gTGl2ZSIgcmVtYWluaW5nIGZvciB0aGlzIHJlY29yZC4gVGhpcyB3aWxsIG5vdCBlcXVhbAogKiB0aGUgcmVjb3JkJ3Mgb3JpZ2luYWwgdHRsLCBidXQgd2lsbCByYXRoZXIgZXF1YWwgdGhlIG9yaWdpbmFsIHR0bCBtaW51cyB3aGF0ZXZlcgogKiBsZW5ndGggb2YgdGltZSBoYXMgcGFzc2VkIHNpbmNlIHRoZSBhdXRob3JpdGF0aXZlIG5hbWUgc2VydmVyIHdhcyBxdWVyaWVkLgogKgogKgogKgogKgogKgogKgogKgogKiBPdGhlciBrZXlzIGluIGFzc29jaWF0aXZlIGFycmF5cyBkZXBlbmRhbnQgb24gJ3R5cGUnCiAqCiAqCiAqCiAqIFR5cGUKICogRXh0cmEgQ29sdW1ucwogKgogKgogKgogKgogKiBBCiAqCiAqIGlwOiBBbiBJUHY0IGFkZHJlc3NlcyBpbiBkb3R0ZWQgZGVjaW1hbCBub3RhdGlvbi4KICoKICoKICoKICogTVgKICoKICogcHJpOiBQcmlvcml0eSBvZiBtYWlsIGV4Y2hhbmdlci4KICogTG93ZXIgbnVtYmVycyBpbmRpY2F0ZSBncmVhdGVyIHByaW9yaXR5LgogKiB0YXJnZXQ6IEZRRE4gb2YgdGhlIG1haWwgZXhjaGFuZ2VyLgogKiBTZWUgYWxzbyBkbnNfZ2V0X214LgogKgogKgogKgogKiBDTkFNRQogKgogKiB0YXJnZXQ6IEZRRE4gb2YgbG9jYXRpb24gaW4gRE5TIG5hbWVzcGFjZSB0byB3aGljaAogKiB0aGUgcmVjb3JkIGlzIGFsaWFzZWQuCiAqCiAqCiAqCiAqIE5TCiAqCiAqIHRhcmdldDogRlFETiBvZiB0aGUgbmFtZSBzZXJ2ZXIgd2hpY2ggaXMgYXV0aG9yaXRhdGl2ZQogKiBmb3IgdGhpcyBob3N0bmFtZS4KICoKICoKICoKICogUFRSCiAqCiAqIHRhcmdldDogTG9jYXRpb24gd2l0aGluIHRoZSBETlMgbmFtZXNwYWNlIHRvIHdoaWNoCiAqIHRoaXMgcmVjb3JkIHBvaW50cy4KICoKICoKICoKICogVFhUCiAqCiAqIHR4dDogQXJiaXRyYXJ5IHN0cmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlY29yZC4KICoKICoKICoKICogSElORk8KICoKICogY3B1OiBJQU5BIG51bWJlciBkZXNpZ25hdGluZyB0aGUgQ1BVIG9mIHRoZSBtYWNoaW5lCiAqIHJlZmVyZW5jZWQgYnkgdGhpcyByZWNvcmQuCiAqIG9zOiBJQU5BIG51bWJlciBkZXNpZ25hdGluZyB0aGUgT3BlcmF0aW5nIFN5c3RlbSBvbgogKiB0aGUgbWFjaGluZSByZWZlcmVuY2VkIGJ5IHRoaXMgcmVjb3JkLgogKiBTZWUgSUFOQSdzIE9wZXJhdGluZyBTeXN0ZW0KICogTmFtZXMgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHZhbHVlcy4KICoKICoKICoKICogQ0FBCiAqCiAqIGZsYWdzOiBBIG9uZS1ieXRlIGJpdGZpZWxkOyBjdXJyZW50bHkgb25seSBiaXQgMCBpcyBkZWZpbmVkLAogKiBtZWFuaW5nICdjcml0aWNhbCc7IG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KICogdGFnOiBUaGUgQ0FBIHRhZyBuYW1lIChhbHBoYW51bWVyaWMgQVNDSUkgc3RyaW5nKS4KICogdmFsdWU6IFRoZSBDQUEgdGFnIHZhbHVlIChiaW5hcnkgc3RyaW5nLCBtYXkgdXNlIHN1YmZvcm1hdHMpLgogKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzZWU6IFJGQyA2ODQ0CiAqCiAqCiAqCiAqIFNPQQogKgogKiBtbmFtZTogRlFETiBvZiB0aGUgbWFjaGluZSBmcm9tIHdoaWNoIHRoZSByZXNvdXJjZQogKiByZWNvcmRzIG9yaWdpbmF0ZWQuCiAqIHJuYW1lOiBFbWFpbCBhZGRyZXNzIG9mIHRoZSBhZG1pbmlzdHJhdGl2ZSBjb250YWN0CiAqIGZvciB0aGlzIGRvbWFpbi4KICogc2VyaWFsOiBTZXJpYWwgIyBvZiB0aGlzIHJldmlzaW9uIG9mIHRoZSByZXF1ZXN0ZWQKICogZG9tYWluLgogKiByZWZyZXNoOiBSZWZyZXNoIGludGVydmFsIChzZWNvbmRzKSBzZWNvbmRhcnkgbmFtZQogKiBzZXJ2ZXJzIHNob3VsZCB1c2Ugd2hlbiB1cGRhdGluZyByZW1vdGUgY29waWVzIG9mIHRoaXMgZG9tYWluLgogKiByZXRyeTogTGVuZ3RoIG9mIHRpbWUgKHNlY29uZHMpIHRvIHdhaXQgYWZ0ZXIgYQogKiBmYWlsZWQgcmVmcmVzaCBiZWZvcmUgbWFraW5nIGEgc2Vjb25kIGF0dGVtcHQuCiAqIGV4cGlyZTogTWF4aW11bSBsZW5ndGggb2YgdGltZSAoc2Vjb25kcykgYSBzZWNvbmRhcnkKICogRE5TIHNlcnZlciBzaG91bGQgcmV0YWluIHJlbW90ZSBjb3BpZXMgb2YgdGhlIHpvbmUgZGF0YSB3aXRob3V0IGEKICogc3VjY2Vzc2Z1bCByZWZyZXNoIGJlZm9yZSBkaXNjYXJkaW5nLgogKiBtaW5pbXVtLXR0bDogTWluaW11bSBsZW5ndGggb2YgdGltZSAoc2Vjb25kcykgYQogKiBjbGllbnQgY2FuIGNvbnRpbnVlIHRvIHVzZSBhIEROUyByZXNvbHV0aW9uIGJlZm9yZSBpdCBzaG91bGQgcmVxdWVzdAogKiBhIG5ldyByZXNvbHV0aW9uIGZyb20gdGhlIHNlcnZlci4gIENhbiBiZSBvdmVycmlkZGVuIGJ5IGluZGl2aWR1YWwKICogcmVzb3VyY2UgcmVjb3Jkcy4KICoKICoKICoKICogQUFBQQogKgogKiBpcHY2OiBJUHY2IGFkZHJlc3MKICoKICoKICoKICogQTYoUEhQICZndDs9IDUuMS4wKQogKgogKiBtYXNrbGVuOiBMZW5ndGggKGluIGJpdHMpIHRvIGluaGVyaXQgZnJvbSB0aGUgdGFyZ2V0CiAqIHNwZWNpZmllZCBieSBjaGFpbi4KICogaXB2NjogQWRkcmVzcyBmb3IgdGhpcyBzcGVjaWZpYyByZWNvcmQgdG8gbWVyZ2Ugd2l0aAogKiBjaGFpbi4KICogY2hhaW46IFBhcmVudCByZWNvcmQgdG8gbWVyZ2Ugd2l0aAogKiBpcHY2IGRhdGEuCiAqCiAqCiAqCiAqIFNSVgogKgogKiBwcmk6IChQcmlvcml0eSkgbG93ZXN0IHByaW9yaXRpZXMgc2hvdWxkIGJlIHVzZWQgZmlyc3QuCiAqIHdlaWdodDogUmFua2luZyB0byB3ZWlnaHQgd2hpY2ggb2YgY29tbW9ubHkgcHJpb3JpdGl6ZWQKICogdGFyZ2V0cyBzaG91bGQgYmUgY2hvc2VuIGF0IHJhbmRvbS4KICogdGFyZ2V0IGFuZCBwb3J0OiBob3N0bmFtZSBhbmQgcG9ydAogKiB3aGVyZSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgY2FuIGJlIGZvdW5kLgogKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzZWU6IFJGQyAyNzgyCiAqCiAqCiAqCiAqIE5BUFRSCiAqCiAqIG9yZGVyIGFuZCBwcmVmOiBFcXVpdmFsZW50IHRvCiAqIHByaSBhbmQgd2VpZ2h0IGFib3ZlLgogKiBmbGFncywgc2VydmljZXMsIHJlZ2V4LAogKiBhbmQgcmVwbGFjZW1lbnQ6IFBhcmFtZXRlcnMgYXMgZGVmaW5lZCBieQogKiBSRkMgMjkxNS4KICoKICoKICoKICoKICoKICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBkbnNfZ2V0X3JlY29yZChzdHJpbmcgJGhvc3RuYW1lLCBpbnQgJHR5cGUgPSBETlNfQU5ZLCA/YXJyYXkgJiRhdXRobnMgPSBudWxsLCA/YXJyYXkgJiRhZGR0bCA9IG51bGwsIGJvb2wgJHJhdyA9IGZhbHNlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkbnNfZ2V0X3JlY29yZCgkaG9zdG5hbWUsICR0eXBlLCAkYXV0aG5zLCAkYWRkdGwsICRyYXcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWF0ZXMgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5CiAqIGhvc3RuYW1lLgogKgogKiBQSFAgc3VwcG9ydHMgdGFyZ2V0cyBpbiB0aGUgSW50ZXJuZXQgYW5kIFVuaXggZG9tYWlucyBhcyBkZXNjcmliZWQgaW4KICogLiAgQSBsaXN0IG9mIHN1cHBvcnRlZCB0cmFuc3BvcnRzIGNhbiBhbHNvIGJlCiAqIHJldHJpZXZlZCB1c2luZyBzdHJlYW1fZ2V0X3RyYW5zcG9ydHMuCiAqCiAqIFRoZSBzb2NrZXQgd2lsbCBieSBkZWZhdWx0IGJlIG9wZW5lZCBpbiBibG9ja2luZyBtb2RlLiAgWW91IGNhbgogKiBzd2l0Y2ggaXQgdG8gbm9uLWJsb2NraW5nIG1vZGUgYnkgdXNpbmcKICogc3RyZWFtX3NldF9ibG9ja2luZy4KICoKICogVGhlIGZ1bmN0aW9uIHN0cmVhbV9zb2NrZXRfY2xpZW50IGlzIHNpbWlsYXIgYnV0CiAqIHByb3ZpZGVzIGEgcmljaGVyIHNldCBvZiBvcHRpb25zLCBpbmNsdWRpbmcgbm9uLWJsb2NraW5nIGNvbm5lY3Rpb24gYW5kIHRoZQogKiBhYmlsaXR5IHRvIHByb3ZpZGUgYSBzdHJlYW0gY29udGV4dC4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgSWYgT3BlblNTTCBzdXBwb3J0IGlzCiAqIGluc3RhbGxlZCwgeW91IG1heSBwcmVmaXggdGhlIGhvc3RuYW1lCiAqIHdpdGggZWl0aGVyIHNzbDovLyBvciB0bHM6Ly8gdG8KICogdXNlIGFuIFNTTCBvciBUTFMgY2xpZW50IGNvbm5lY3Rpb24gb3ZlciBUQ1AvSVAgdG8gY29ubmVjdCB0byB0aGUKICogcmVtb3RlIGhvc3QuCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgbnVtYmVyLiBUaGlzIGNhbiBiZSBvbWl0dGVkIGFuZCBza2lwcGVkIHdpdGgKICogLTEgZm9yIHRyYW5zcG9ydHMgdGhhdCBkbyBub3QgdXNlIHBvcnRzLCBzdWNoIGFzCiAqIHVuaXg6Ly8uCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJybm8gSWYgcHJvdmlkZWQsIGhvbGRzIHRoZSBzeXN0ZW0gbGV2ZWwgZXJyb3IgbnVtYmVyIHRoYXQgb2NjdXJyZWQgaW4gdGhlCiAqIHN5c3RlbS1sZXZlbCBjb25uZWN0KCkgY2FsbC4KICoKICogSWYgdGhlIHZhbHVlIHJldHVybmVkIGluIGVycm5vIGlzCiAqIDAgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBGQUxTRSwgaXQgaXMgYW4KICogaW5kaWNhdGlvbiB0aGF0IHRoZSBlcnJvciBvY2N1cnJlZCBiZWZvcmUgdGhlCiAqIGNvbm5lY3QoKSBjYWxsLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhCiAqIHByb2JsZW0gaW5pdGlhbGl6aW5nIHRoZSBzb2NrZXQuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZXJyc3RyIFRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RyaW5nLgogKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXQgVGhlIGNvbm5lY3Rpb24gdGltZW91dCwgaW4gc2Vjb25kcy4KICoKICogSWYgeW91IG5lZWQgdG8gc2V0IGEgdGltZW91dCBmb3IgcmVhZGluZy93cml0aW5nIGRhdGEgb3ZlciB0aGUKICogc29ja2V0LCB1c2Ugc3RyZWFtX3NldF90aW1lb3V0LCBhcyB0aGUKICogdGltZW91dCBwYXJhbWV0ZXIgdG8KICogZnNvY2tvcGVuIG9ubHkgYXBwbGllcyB3aGlsZSBjb25uZWN0aW5nIHRoZQogKiBzb2NrZXQuCiAqIEByZXR1cm4gcmVzb3VyY2UgZnNvY2tvcGVuIHJldHVybnMgYSBmaWxlIHBvaW50ZXIgd2hpY2ggbWF5IGJlIHVzZWQKICogdG9nZXRoZXIgd2l0aCB0aGUgb3RoZXIgZmlsZSBmdW5jdGlvbnMgKHN1Y2ggYXMKICogZmdldHMsIGZnZXRzcywKICogZndyaXRlLCBmY2xvc2UsIGFuZAogKiBmZW9mKS4gSWYgdGhlIGNhbGwgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIEZBTFNFCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZnNvY2tvcGVuKHN0cmluZyAkaG9zdG5hbWUsIGludCAkcG9ydCA9IC0xLCA/aW50ICYkZXJybm8gPSBudWxsLCA/c3RyaW5nICYkZXJyc3RyID0gbnVsbCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGZzb2Nrb3BlbigkaG9zdG5hbWUsICRwb3J0LCAkZXJybm8sICRlcnJzdHIsICR0aW1lb3V0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxmc29ja29wZW4oJGhvc3RuYW1lLCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZ2V0aG9zdG5hbWUgZ2V0cyB0aGUgc3RhbmRhcmQgaG9zdCBuYW1lIGZvcgogKiB0aGUgbG9jYWwgbWFjaGluZS4KICoKICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBob3N0bmFtZSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UgaXMKICogcmV0dXJuZWQuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0aG9zdG5hbWUoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ2V0aG9zdG5hbWUoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE5ldHdvcmtFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogZ2V0cHJvdG9ieW5hbWUgcmV0dXJucyB0aGUgcHJvdG9jb2wgbnVtYmVyCiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdG9jb2wgbmFtZSBhcyBwZXIKICogL2V0Yy9wcm90b2NvbHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIHByb3RvY29sIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHByb3RvY29sIG51bWJlci4KICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRwcm90b2J5bmFtZShzdHJpbmcgJG5hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnZXRwcm90b2J5bmFtZSgkbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGdldHByb3RvYnludW1iZXIgcmV0dXJucyB0aGUgcHJvdG9jb2wgbmFtZQogKiBhc3NvY2lhdGVkIHdpdGggcHJvdG9jb2wgbnVtYmVyIGFzIHBlcgogKiAvZXRjL3Byb3RvY29scy4KICoKICogQHBhcmFtIGludCAkbnVtYmVyIFRoZSBwcm90b2NvbCBudW1iZXIuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHByb3RvY29sIG5hbWUgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ2V0cHJvdG9ieW51bWJlcihpbnQgJG51bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGdldHByb3RvYnludW1iZXIoJG51bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBQSFAgc3RhcnRzIHNlbmRpbmcgb3V0cHV0LgogKgogKiBUaGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQganVzdCBhZnRlciBQSFAgcHJlcGFyZXMgYWxsCiAqIGhlYWRlcnMgdG8gYmUgc2VudCwgYW5kIGJlZm9yZSBhbnkgb3RoZXIgb3V0cHV0IGlzIHNlbnQsIGNyZWF0aW5nIGEgd2luZG93CiAqIHRvIG1hbmlwdWxhdGUgdGhlIG91dGdvaW5nIGhlYWRlcnMgYmVmb3JlIGJlaW5nIHNlbnQuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgRnVuY3Rpb24gY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBoZWFkZXJzIGFyZSBzZW50LiBJdCBnZXRzIG5vIHBhcmFtZXRlcnMKICogYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KICogQHRocm93cyBOZXR3b3JrRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2soY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaygkY2FsbGJhY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkaW5fYWRkciBBIDMyYml0IElQdjQsIG9yIDEyOGJpdCBJUHY2IGFkZHJlc3MuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFkZHJlc3MuCiAqIEB0aHJvd3MgTmV0d29ya0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5ldF9udG9wKHN0cmluZyAkaW5fYWRkcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZXRfbnRvcCgkaW5fYWRkcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5sb2cgb3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBzeXN0ZW0KICogbG9nZ2VyIGZvciBhIHByb2dyYW0uCiAqCiAqIFRoZSB1c2Ugb2Ygb3BlbmxvZyBpcyBvcHRpb25hbC4gSXQKICogd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNhbGxlZCBieSBzeXNsb2cgaWYKICogbmVjZXNzYXJ5LCBpbiB3aGljaCBjYXNlIGlkZW50IHdpbGwgZGVmYXVsdAogKiB0byBGQUxTRS4KICoKICogQHBhcmFtIHN0cmluZyAkaWRlbnQgVGhlIHN0cmluZyBpZGVudCBpcyBhZGRlZCB0byBlYWNoIG1lc3NhZ2UuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgb3B0aW9uIGFyZ3VtZW50IGlzIHVzZWQgdG8gaW5kaWNhdGUKICogd2hhdCBsb2dnaW5nIG9wdGlvbnMgd2lsbCBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyBhIGxvZyBtZXNzYWdlLgogKgogKiBvcGVubG9nIE9wdGlvbnMKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogTE9HX0NPTlMKICoKICogaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hpbGUgc2VuZGluZyBkYXRhIHRvIHRoZSBzeXN0ZW0gbG9nZ2VyLAogKiB3cml0ZSBkaXJlY3RseSB0byB0aGUgc3lzdGVtIGNvbnNvbGUKICoKICoKICoKICogTE9HX05ERUxBWQogKgogKiBvcGVuIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBsb2dnZXIgaW1tZWRpYXRlbHkKICoKICoKICoKICogTE9HX09ERUxBWQogKgogKiAoZGVmYXVsdCkgZGVsYXkgb3BlbmluZyB0aGUgY29ubmVjdGlvbiB1bnRpbCB0aGUgZmlyc3QKICogbWVzc2FnZSBpcyBsb2dnZWQKICoKICoKICoKICogTE9HX1BFUlJPUgogKiBwcmludCBsb2cgbWVzc2FnZSBhbHNvIHRvIHN0YW5kYXJkIGVycm9yCiAqCiAqCiAqIExPR19QSUQKICogaW5jbHVkZSBQSUQgd2l0aCBlYWNoIG1lc3NhZ2UKICoKICoKICoKICoKICogWW91IGNhbiB1c2Ugb25lIG9yIG1vcmUgb2YgdGhlc2Ugb3B0aW9ucy4gV2hlbiB1c2luZyBtdWx0aXBsZSBvcHRpb25zCiAqIHlvdSBuZWVkIHRvIE9SIHRoZW0sIGkuZS4gdG8gb3BlbiB0aGUgY29ubmVjdGlvbgogKiBpbW1lZGlhdGVseSwgd3JpdGUgdG8gdGhlIGNvbnNvbGUgYW5kIGluY2x1ZGUgdGhlIFBJRCBpbiBlYWNoIG1lc3NhZ2UsCiAqIHlvdSB3aWxsIHVzZTogTE9HX0NPTlMgfCBMT0dfTkRFTEFZIHwgTE9HX1BJRAogKiBAcGFyYW0gaW50ICRmYWNpbGl0eSBUaGUgZmFjaWxpdHkgYXJndW1lbnQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQKICogdHlwZSBvZiBwcm9ncmFtIGlzIGxvZ2dpbmcgdGhlIG1lc3NhZ2UuIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5CiAqIChpbiB5b3VyIG1hY2hpbmUncyBzeXNsb2cgY29uZmlndXJhdGlvbikgaG93IG1lc3NhZ2VzIGNvbWluZyBmcm9tCiAqIGRpZmZlcmVudCBmYWNpbGl0aWVzIHdpbGwgYmUgaGFuZGxlZC4KICoKICogb3BlbmxvZyBGYWNpbGl0aWVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIExPR19BVVRICiAqCiAqIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHVzZQogKiBMT0dfQVVUSFBSSVYgaW5zdGVhZAogKiBpbiBzeXN0ZW1zIHdoZXJlIHRoYXQgY29uc3RhbnQgaXMgZGVmaW5lZCkKICoKICoKICoKICogTE9HX0FVVEhQUklWCiAqIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHByaXZhdGUpCiAqCiAqCiAqIExPR19DUk9OCiAqIGNsb2NrIGRhZW1vbiAoY3JvbiBhbmQgYXQpCiAqCiAqCiAqIExPR19EQUVNT04KICogb3RoZXIgc3lzdGVtIGRhZW1vbnMKICoKICoKICogTE9HX0tFUk4KICoga2VybmVsIG1lc3NhZ2VzCiAqCiAqCiAqIExPR19MT0NBTDAgLi4uIExPR19MT0NBTDcKICogcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZSwgdGhlc2UgYXJlIG5vdCBhdmFpbGFibGUgaW4gV2luZG93cwogKgogKgogKiBMT0dfTFBSCiAqIGxpbmUgcHJpbnRlciBzdWJzeXN0ZW0KICoKICoKICogTE9HX01BSUwKICogbWFpbCBzdWJzeXN0ZW0KICoKICoKICogTE9HX05FV1MKICogVVNFTkVUIG5ld3Mgc3Vic3lzdGVtCiAqCiAqCiAqIExPR19TWVNMT0cKICogbWVzc2FnZXMgZ2VuZXJhdGVkIGludGVybmFsbHkgYnkgc3lzbG9nZAogKgogKgogKiBMT0dfVVNFUgogKiBnZW5lcmljIHVzZXItbGV2ZWwgbWVzc2FnZXMKICoKICoKICogTE9HX1VVQ1AKICogVVVDUCBzdWJzeXN0ZW0KICoKICoKICoKICoKICoKICogTE9HX1VTRVIgaXMgdGhlIG9ubHkgdmFsaWQgbG9nIHR5cGUgdW5kZXIgV2luZG93cwogKiBvcGVyYXRpbmcgc3lzdGVtcwogKiBAdGhyb3dzIE5ldHdvcmtFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5sb2coc3RyaW5nICRpZGVudCwgaW50ICRvcHRpb24sIGludCAkZmFjaWxpdHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbmxvZygkaWRlbnQsICRvcHRpb24sICRmYWNpbGl0eSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBOZXR3b3JrRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBzeXNsb2cgZ2VuZXJhdGVzIGEgbG9nIG1lc3NhZ2UgdGhhdCB3aWxsIGJlCiAqIGRpc3RyaWJ1dGVkIGJ5IHRoZSBzeXN0ZW0gbG9nZ2VyLgogKgogKiBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIHVzZXIgZGVmaW5lZCBsb2cgaGFuZGxlciwgc2VlIHRoZQogKiBzeXNsb2cuY29uZgogKiA1IFVuaXggbWFudWFsIHBhZ2UuICBNb3JlCiAqIGluZm9ybWF0aW9uIG9uIHRoZSBzeXNsb2cgZmFjaWxpdGllcyBhbmQgb3B0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgbWFuCiAqIHBhZ2VzIGZvciBzeXNsb2cKICogMyBvbiBVbml4IG1hY2hpbmVzLgogKgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBwcmlvcml0eSBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmYWNpbGl0eSBhbmQKICogdGhlIGxldmVsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogKgogKiBzeXNsb2cgUHJpb3JpdGllcyAoaW4gZGVzY2VuZGluZyBvcmRlcikKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogTE9HX0VNRVJHCiAqIHN5c3RlbSBpcyB1bnVzYWJsZQogKgogKgogKiBMT0dfQUxFUlQKICogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkKICoKICoKICogTE9HX0NSSVQKICogY3JpdGljYWwgY29uZGl0aW9ucwogKgogKgogKiBMT0dfRVJSCiAqIGVycm9yIGNvbmRpdGlvbnMKICoKICoKICogTE9HX1dBUk5JTkcKICogd2FybmluZyBjb25kaXRpb25zCiAqCiAqCiAqIExPR19OT1RJQ0UKICogbm9ybWFsLCBidXQgc2lnbmlmaWNhbnQsIGNvbmRpdGlvbgogKgogKgogKiBMT0dfSU5GTwogKiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UKICoKICoKICogTE9HX0RFQlVHCiAqIGRlYnVnLWxldmVsIG1lc3NhZ2UKICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kLCBleGNlcHQgdGhhdCB0aGUgdHdvIGNoYXJhY3RlcnMKICogJW0gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcKICogKHN0cmVycm9yKSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcmVzZW50IHZhbHVlIG9mCiAqIGVycm5vLgogKiBAdGhyb3dzIE5ldHdvcmtFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN5c2xvZyhpbnQgJHByaW9yaXR5LCBzdHJpbmcgJG1lc3NhZ2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3lzbG9nKCRwcmlvcml0eSwgJG1lc3NhZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgTmV0d29ya0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/oci8.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPY2k4RXhjZXB0aW9uOwoKLyoqCiAqIEJpbmRzIHRoZSBQSFAgYXJyYXkgdmFyX2FycmF5IHRvIHRoZSBPcmFjbGUKICogcGxhY2Vob2xkZXIgbmFtZSwgd2hpY2ggcG9pbnRzIHRvIGFuIE9yYWNsZSBQTC9TUUwKICogYXJyYXkuIFdoZXRoZXIgaXQgd2lsbCBiZSB1c2VkIGZvciBpbnB1dCBvciBvdXRwdXQgd2lsbCBiZSBkZXRlcm1pbmVkIGF0CiAqIHJ1bi10aW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgT3JhY2xlIHBsYWNlaG9sZGVyLgogKiBAcGFyYW0gYXJyYXkgJHZhcl9hcnJheSBBbiBhcnJheS4KICogQHBhcmFtIGludCAkbWF4X3RhYmxlX2xlbmd0aCBTZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBib3RoIGZvciBpbmNvbWluZyBhbmQgcmVzdWx0IGFycmF5cy4KICogQHBhcmFtIGludCAkbWF4X2l0ZW1fbGVuZ3RoIFNldHMgbWF4aW11bSBsZW5ndGggZm9yIGFycmF5IGl0ZW1zLiBJZiBub3Qgc3BlY2lmaWVkIG9yIGVxdWFscyB0byAtMSwKICogb2NpX2JpbmRfYXJyYXlfYnlfbmFtZSB3aWxsIGZpbmQgdGhlIGxvbmdlc3QKICogZWxlbWVudCBpbiB0aGUgaW5jb21pbmcgYXJyYXkgYW5kIHdpbGwgdXNlIGl0IGFzIHRoZSBtYXhpbXVtIGxlbmd0aC4KICogQHBhcmFtIGludCAkdHlwZSBTaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlIHR5cGUgb2YgUEwvU1FMIGFycmF5IGl0ZW1zLiBTZWUgbGlzdCBvZgogKiBhdmFpbGFibGUgdHlwZXMgYmVsb3c6CiAqCiAqCiAqCiAqCiAqIFNRTFRfTlVNIC0gZm9yIGFycmF5cyBvZiBOVU1CRVIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfSU5UIC0gZm9yIGFycmF5cyBvZiBJTlRFR0VSIChOb3RlOiBJTlRFR0VSCiAqIGl0IGlzIGFjdHVhbGx5IGEgc3lub255bSBmb3IgTlVNQkVSKDM4KSwgYnV0CiAqIFNRTFRfTlVNIHR5cGUgd29uJ3Qgd29yayBpbiB0aGlzIGNhc2UgZXZlbgogKiB0aG91Z2ggdGhleSBhcmUgc3lub255bXMpLgogKgogKgogKgogKgogKiBTUUxUX0ZMVCAtIGZvciBhcnJheXMgb2YgRkxPQVQuCiAqCiAqCiAqCiAqCiAqIFNRTFRfQUZDIC0gZm9yIGFycmF5cyBvZiBDSEFSLgogKgogKgogKgogKgogKiBTUUxUX0NIUiAtIGZvciBhcnJheXMgb2YgVkFSQ0hBUjIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfVkNTIC0gZm9yIGFycmF5cyBvZiBWQVJDSEFSLgogKgogKgogKgogKgogKiBTUUxUX0FWQyAtIGZvciBhcnJheXMgb2YgQ0hBUlouCiAqCiAqCiAqCiAqCiAqIFNRTFRfU1RSIC0gZm9yIGFycmF5cyBvZiBTVFJJTkcuCiAqCiAqCiAqCiAqCiAqIFNRTFRfTFZDIC0gZm9yIGFycmF5cyBvZiBMT05HIFZBUkNIQVIuCiAqCiAqCiAqCiAqCiAqIFNRTFRfT0RUIC0gZm9yIGFycmF5cyBvZiBEQVRFLgogKgogKgogKgogKgogKiBTUUxUX05VTSAtIGZvciBhcnJheXMgb2YgTlVNQkVSLgogKgogKiBTUUxUX0lOVCAtIGZvciBhcnJheXMgb2YgSU5URUdFUiAoTm90ZTogSU5URUdFUgogKiBpdCBpcyBhY3R1YWxseSBhIHN5bm9ueW0gZm9yIE5VTUJFUigzOCksIGJ1dAogKiBTUUxUX05VTSB0eXBlIHdvbid0IHdvcmsgaW4gdGhpcyBjYXNlIGV2ZW4KICogdGhvdWdoIHRoZXkgYXJlIHN5bm9ueW1zKS4KICoKICogU1FMVF9GTFQgLSBmb3IgYXJyYXlzIG9mIEZMT0FULgogKgogKiBTUUxUX0FGQyAtIGZvciBhcnJheXMgb2YgQ0hBUi4KICoKICogU1FMVF9DSFIgLSBmb3IgYXJyYXlzIG9mIFZBUkNIQVIyLgogKgogKiBTUUxUX1ZDUyAtIGZvciBhcnJheXMgb2YgVkFSQ0hBUi4KICoKICogU1FMVF9BVkMgLSBmb3IgYXJyYXlzIG9mIENIQVJaLgogKgogKiBTUUxUX1NUUiAtIGZvciBhcnJheXMgb2YgU1RSSU5HLgogKgogKiBTUUxUX0xWQyAtIGZvciBhcnJheXMgb2YgTE9ORyBWQVJDSEFSLgogKgogKiBTUUxUX09EVCAtIGZvciBhcnJheXMgb2YgREFURS4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfYmluZF9hcnJheV9ieV9uYW1lKCRzdGF0ZW1lbnQsIHN0cmluZyAkbmFtZSwgYXJyYXkgJiR2YXJfYXJyYXksIGludCAkbWF4X3RhYmxlX2xlbmd0aCwgaW50ICRtYXhfaXRlbV9sZW5ndGggPSAtMSwgaW50ICR0eXBlID0gU1FMVF9BRkMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2JpbmRfYXJyYXlfYnlfbmFtZSgkc3RhdGVtZW50LCAkbmFtZSwgJHZhcl9hcnJheSwgJG1heF90YWJsZV9sZW5ndGgsICRtYXhfaXRlbV9sZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEJpbmRzIGEgUEhQIHZhcmlhYmxlIHZhcmlhYmxlIHRvIHRoZSBPcmFjbGUKICogYmluZCB2YXJpYWJsZSBwbGFjZWhvbGRlciBidl9uYW1lLiAgQmluZGluZwogKiBpcyBpbXBvcnRhbnQgZm9yIE9yYWNsZSBkYXRhYmFzZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBhcyBhIHdheSB0bwogKiBhdm9pZCBTUUwgSW5qZWN0aW9uIHNlY3VyaXR5IGlzc3Vlcy4KICoKICogQmluZGluZyBhbGxvd3MgdGhlIGRhdGFiYXNlIHRvIHJldXNlIHRoZSBzdGF0ZW1lbnQgY29udGV4dCBhbmQKICogY2FjaGVzIGZyb20gcHJldmlvdXMgZXhlY3V0aW9ucyBvZiB0aGUgc3RhdGVtZW50LCBldmVuIGlmIGFub3RoZXIKICogdXNlciBvciBwcm9jZXNzIG9yaWdpbmFsbHkgZXhlY3V0ZWQgaXQuICBCaW5kaW5nIHJlZHVjZXMgU1FMCiAqIEluamVjdGlvbiBjb25jZXJucyBiZWNhdXNlIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmQKICogdmFyaWFibGUgaXMgbmV2ZXIgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBTUUwgc3RhdGVtZW50LiAgSXQgZG9lcwogKiBub3QgbmVlZCBxdW90aW5nIG9yIGVzY2FwaW5nLgogKgogKiBQSFAgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIGJvdW5kIGNhbiBiZSBjaGFuZ2VkIGFuZCB0aGUKICogc3RhdGVtZW50IHJlLWV4ZWN1dGVkIHdpdGhvdXQgbmVlZGluZyB0byByZS1wYXJzZSB0aGUgc3RhdGVtZW50IG9yCiAqIHJlLWJpbmQuCiAqCiAqIEluIE9yYWNsZSwgYmluZCB2YXJpYWJsZXMgYXJlIGNvbW1vbmx5IGRpdmlkZWQKICogaW50byBJTiBiaW5kcyBmb3IgdmFsdWVzIHRoYXQgYXJlIHBhc3NlZCBpbnRvCiAqIHRoZSBkYXRhYmFzZSwgYW5kIE9VVCBiaW5kcyBmb3IgdmFsdWVzIHRoYXQgYXJlCiAqIHJldHVybmVkIHRvIFBIUC4gIEEgYmluZCB2YXJpYWJsZSBtYXkgYmUKICogYm90aCBJTiBhbmQgT1VULiAgV2hldGhlciBhCiAqIGJpbmQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIGZvciBpbnB1dCBvciBvdXRwdXQgaXMgZGV0ZXJtaW5lZCBhdAogKiBydW4tdGltZS4KICoKICogWW91IG11c3Qgc3BlY2lmeSBtYXhsZW5ndGggd2hlbiB1c2luZwogKiBhbiBPVVQgYmluZCBzbyB0aGF0IFBIUCBhbGxvY2F0ZXMgZW5vdWdoIG1lbW9yeQogKiB0byBob2xkIHRoZSByZXR1cm5lZCB2YWx1ZS4KICoKICogRm9yIElOIGJpbmRzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHNldAogKiB0aGUgbWF4bGVuZ3RoIGxlbmd0aCBpZiB0aGUgc3RhdGVtZW50IGlzCiAqIHJlLWV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIFBIUAogKiB2YXJpYWJsZS4gIE90aGVyd2lzZSBPcmFjbGUgbWF5IHRydW5jYXRlIGRhdGEgdG8gdGhlIGxlbmd0aCBvZiB0aGUKICogaW5pdGlhbCBQSFAgdmFyaWFibGUgdmFsdWUuICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSBtYXhpbXVtCiAqIGxlbmd0aCB3aWxsIGJlLCB0aGVuIHJlLWNhbGwgb2NpX2JpbmRfYnlfbmFtZQogKiB3aXRoIHRoZSBjdXJyZW50IGRhdGEgc2l6ZSBwcmlvciB0bwogKiBlYWNoIG9jaV9leGVjdXRlIGNhbGwuIEJpbmRpbmcgYW4KICogdW5uZWNlc3NhcmlseSBsYXJnZSBsZW5ndGggd2lsbCBoYXZlIGFuIGltcGFjdCBvbiBwcm9jZXNzIG1lbW9yeQogKiBpbiB0aGUgZGF0YWJhc2UuCiAqCiAqIEEgYmluZCBjYWxsIHRlbGxzIE9yYWNsZSB3aGljaCBtZW1vcnkgYWRkcmVzcyB0byByZWFkIGRhdGEgZnJvbS4KICogRm9yIElOIGJpbmRzIHRoYXQgYWRkcmVzcyBuZWVkcyB0byBjb250YWluCiAqIHZhbGlkIGRhdGEgd2hlbiBvY2lfZXhlY3V0ZSBpcyBjYWxsZWQuICBUaGlzCiAqIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGJvdW5kIG11c3QgcmVtYWluIGluIHNjb3BlIHVudGlsCiAqIGV4ZWN1dGlvbi4gIElmIGl0IGRvZXNuJ3QsIHVuZXhwZWN0ZWQgcmVzdWx0cyBvciBlcnJvcnMgc3VjaCBhcwogKiAiT1JBLTAxNDYwOiB1bmltcGxlbWVudGVkIG9yIHVucmVhc29uYWJsZSBjb252ZXJzaW9uIHJlcXVlc3RlZCIKICogbWF5IG9jY3VyLiAgRm9yIE9VVCBiaW5kcyBvbmUgc3ltcHRvbSBpcyBubwogKiB2YWx1ZSBiZWluZyBzZXQgaW4gdGhlIFBIUCB2YXJpYWJsZS4KICoKICogRm9yIGEgc3RhdGVtZW50IHRoYXQgaXMgcmVwZWF0ZWRseSBleGVjdXRlZCwgYmluZGluZyB2YWx1ZXMgdGhhdAogKiBuZXZlciBjaGFuZ2UgbWF5IHJlZHVjZSB0aGUgYWJpbGl0eSBvZiB0aGUgT3JhY2xlIG9wdGltaXplciB0bwogKiBjaG9vc2UgdGhlIGJlc3Qgc3RhdGVtZW50IGV4ZWN1dGlvbiBwbGFuLiAgTG9uZyBydW5uaW5nIHN0YXRlbWVudHMKICogdGhhdCBhcmUgcmFyZWx5IHJlLWV4ZWN1dGVkIG1heSBub3QgYmVuZWZpdCBmcm9tIGJpbmRpbmcuICBIb3dldmVyCiAqIGluIGJvdGggY2FzZXMsIGJpbmRpbmcgbWlnaHQgYmUgc2FmZXIgdGhhbiBqb2luaW5nIHN0cmluZ3MgaW50byBhCiAqIFNRTCBzdGF0ZW1lbnQsIGFzIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayBpZiB1bmZpbHRlcmVkIHVzZXIKICogdGV4dCBpcyBjb25jYXRlbmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQgaWRlbnRpZmVyLgogKiBAcGFyYW0gc3RyaW5nICRidl9uYW1lIFRoZSBjb2xvbi1wcmVmaXhlZCBiaW5kIHZhcmlhYmxlIHBsYWNlaG9sZGVyIHVzZWQgaW4gdGhlCiAqIHN0YXRlbWVudC4gIFRoZSBjb2xvbiBpcyBvcHRpb25hbAogKiBpbiBidl9uYW1lLiBPcmFjbGUgZG9lcyBub3QgdXNlIHF1ZXN0aW9uCiAqIG1hcmtzIGZvciBwbGFjZWhvbGRlcnMuCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFibGUgVGhlIFBIUCB2YXJpYWJsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYnZfbmFtZQogKiBAcGFyYW0gaW50ICRtYXhsZW5ndGggU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRhLiBJZiB5b3Ugc2V0IGl0IHRvIC0xLCB0aGlzCiAqIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxlbmd0aAogKiBvZiB2YXJpYWJsZSB0byBzZXQgdGhlIG1heGltdW0KICogbGVuZ3RoLiBJbiB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlIG11c3QKICogZXhpc3QgYW5kIGNvbnRhaW4gZGF0YQogKiB3aGVuIG9jaV9iaW5kX2J5X25hbWUgaXMgY2FsbGVkLgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSBkYXRhdHlwZSB0aGF0IE9yYWNsZSB3aWxsIHRyZWF0IHRoZSBkYXRhIGFzLiAgVGhlCiAqIGRlZmF1bHQgdHlwZSB1c2VkCiAqIGlzIFNRTFRfQ0hSLiBPcmFjbGUgd2lsbCBjb252ZXJ0IHRoZSBkYXRhCiAqIGJldHdlZW4gdGhpcyB0eXBlIGFuZCB0aGUgZGF0YWJhc2UgY29sdW1uIChvciBQTC9TUUwgdmFyaWFibGUKICogdHlwZSksIHdoZW4gcG9zc2libGUuCiAqCiAqIElmIHlvdSBuZWVkIHRvIGJpbmQgYW4gYWJzdHJhY3QgZGF0YXR5cGUgKExPQi9ST1dJRC9CRklMRSkgeW91CiAqIG5lZWQgdG8gYWxsb2NhdGUgaXQgZmlyc3QgdXNpbmcgdGhlCiAqIG9jaV9uZXdfZGVzY3JpcHRvciBmdW5jdGlvbi4gVGhlCiAqIGxlbmd0aCBpcyBub3QgdXNlZCBmb3IgYWJzdHJhY3QgZGF0YXR5cGVzCiAqIGFuZCBzaG91bGQgYmUgc2V0IHRvIC0xLgogKgogKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHR5cGUgYXJlOgogKgogKgogKgogKiBTUUxUX0JGSUxFRSBvciBPQ0lfQl9CRklMRQogKiAtIGZvciBCRklMRXM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0ZJTEVFIG9yIE9DSV9CX0NGSUxFRQogKiAtIGZvciBDRklMRXM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0xPQiBvciBPQ0lfQl9DTE9CCiAqIC0gZm9yIENMT0JzOwogKgogKgogKgogKgogKiBTUUxUX0JMT0Igb3IgT0NJX0JfQkxPQgogKiAtIGZvciBCTE9CczsKICoKICoKICoKICoKICogU1FMVF9SREQgb3IgT0NJX0JfUk9XSUQKICogLSBmb3IgUk9XSURzOwogKgogKgogKgogKgogKiBTUUxUX05UWSBvciBPQ0lfQl9OVFkKICogLSBmb3IgbmFtZWQgZGF0YXR5cGVzOwogKgogKgogKgogKgogKiBTUUxUX0lOVCBvciBPQ0lfQl9JTlQgLSBmb3IgaW50ZWdlcnM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfQ0hSIC0gZm9yIFZBUkNIQVJzOwogKgogKgogKgogKgogKiBTUUxUX0JJTiBvciBPQ0lfQl9CSU4KICogLSBmb3IgUkFXIGNvbHVtbnM7CiAqCiAqCiAqCiAqCiAqIFNRTFRfTE5HIC0gZm9yIExPTkcgY29sdW1uczsKICoKICoKICoKICoKICogU1FMVF9MQkkgLSBmb3IgTE9ORyBSQVcgY29sdW1uczsKICoKICoKICoKICoKICogU1FMVF9SU0VUIC0gZm9yIGN1cnNvcnMgY3JlYXRlZAogKiB3aXRoIG9jaV9uZXdfY3Vyc29yOwogKgogKgogKgogKgogKiBTUUxUX0JPTCBvciBPQ0lfQl9CT0wKICogLSBmb3IgUEwvU1FMIEJPT0xFQU5zIChSZXF1aXJlcyBPQ0k4IDIuMC43IGFuZCBPcmFjbGUgRGF0YWJhc2UgMTJjKQogKgogKgogKgogKgogKiBTUUxUX0JGSUxFRSBvciBPQ0lfQl9CRklMRQogKiAtIGZvciBCRklMRXM7CiAqCiAqIFNRTFRfQ0ZJTEVFIG9yIE9DSV9CX0NGSUxFRQogKiAtIGZvciBDRklMRXM7CiAqCiAqIFNRTFRfQ0xPQiBvciBPQ0lfQl9DTE9CCiAqIC0gZm9yIENMT0JzOwogKgogKiBTUUxUX0JMT0Igb3IgT0NJX0JfQkxPQgogKiAtIGZvciBCTE9CczsKICoKICogU1FMVF9SREQgb3IgT0NJX0JfUk9XSUQKICogLSBmb3IgUk9XSURzOwogKgogKiBTUUxUX05UWSBvciBPQ0lfQl9OVFkKICogLSBmb3IgbmFtZWQgZGF0YXR5cGVzOwogKgogKiBTUUxUX0lOVCBvciBPQ0lfQl9JTlQgLSBmb3IgaW50ZWdlcnM7CiAqCiAqIFNRTFRfQ0hSIC0gZm9yIFZBUkNIQVJzOwogKgogKiBTUUxUX0JJTiBvciBPQ0lfQl9CSU4KICogLSBmb3IgUkFXIGNvbHVtbnM7CiAqCiAqIFNRTFRfTE5HIC0gZm9yIExPTkcgY29sdW1uczsKICoKICogU1FMVF9MQkkgLSBmb3IgTE9ORyBSQVcgY29sdW1uczsKICoKICogU1FMVF9SU0VUIC0gZm9yIGN1cnNvcnMgY3JlYXRlZAogKiB3aXRoIG9jaV9uZXdfY3Vyc29yOwogKgogKiBTUUxUX0JPTCBvciBPQ0lfQl9CT0wKICogLSBmb3IgUEwvU1FMIEJPT0xFQU5zIChSZXF1aXJlcyBPQ0k4IDIuMC43IGFuZCBPcmFjbGUgRGF0YWJhc2UgMTJjKQogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9iaW5kX2J5X25hbWUoJHN0YXRlbWVudCwgc3RyaW5nICRidl9uYW1lLCAmJHZhcmlhYmxlLCBpbnQgJG1heGxlbmd0aCA9IC0xLCBpbnQgJHR5cGUgPSBTUUxUX0NIUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfYmluZF9ieV9uYW1lKCRzdGF0ZW1lbnQsICRidl9uYW1lLCAkdmFyaWFibGUsICRtYXhsZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEludmFsaWRhdGVzIGEgY3Vyc29yLCBmcmVlaW5nIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcyBhbmQgY2FuY2VscyB0aGUKICogYWJpbGl0eSB0byByZWFkIGZyb20gaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEFuIE9DSSBzdGF0ZW1lbnQuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2NhbmNlbCgkc3RhdGVtZW50KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9jYW5jZWwoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBVbnNldHMgY29ubmVjdGlvbi4gIFRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlCiAqIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGlmIG5vIG90aGVyIHJlc291cmNlcyBhcmUgdXNpbmcgaXQgYW5kIGlmIGl0CiAqIHdhcyBjcmVhdGVkIHdpdGggb2NpX2Nvbm5lY3QKICogb3Igb2NpX25ld19jb25uZWN0LgogKgogKiBJdCBpcyByZWNvbW1lbmRlZCB0byBjbG9zZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkCiAqIGJlY2F1c2UgdGhpcyBtYWtlcyBkYXRhYmFzZSByZXNvdXJjZXMgYXZhaWxhYmxlIGZvciBvdGhlciB1c2Vycy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9jbG9zZSgkY29ubmVjdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfY2xvc2UoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyB0aGUgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24gZm9yIHRoZQogKiBPcmFjbGUgY29ubmVjdGlvbi4gIEEgY29tbWl0IGVuZHMgdGhlCiAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIG1ha2VzIHBlcm1hbmVudCBhbGwgY2hhbmdlcy4gIEl0IHJlbGVhc2VzCiAqIGFsbCBsb2NrcyBoZWxkLgogKgogKiBBIHRyYW5zYWN0aW9uIGJlZ2lucyB3aGVuIHRoZSBmaXJzdCBTUUwgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyBkYXRhCiAqIGlzIGV4ZWN1dGVkIHdpdGggb2NpX2V4ZWN1dGUgdXNpbmcKICogdGhlIE9DSV9OT19BVVRPX0NPTU1JVCBmbGFnLiAgRnVydGhlciBkYXRhCiAqIGNoYW5nZXMgbWFkZSBieSBvdGhlciBzdGF0ZW1lbnRzIGJlY29tZSBwYXJ0IG9mIHRoZSBzYW1lCiAqIHRyYW5zYWN0aW9uLiAgRGF0YSBjaGFuZ2VzIG1hZGUgaW4gYSB0cmFuc2FjdGlvbiBhcmUgdGVtcG9yYXJ5CiAqIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suICBPdGhlciB1c2VycyBvZgogKiB0aGUgZGF0YWJhc2Ugd2lsbCBub3Qgc2VlIHRoZSBjaGFuZ2VzIHVudGlsIHRoZXkgYXJlIGNvbW1pdHRlZC4KICoKICogV2hlbiBpbnNlcnRpbmcgb3IgdXBkYXRpbmcgZGF0YSwgdXNpbmcgdHJhbnNhY3Rpb25zIGlzIHJlY29tbWVuZGVkCiAqIGZvciByZWxhdGlvbmFsIGRhdGEgY29uc2lzdGVuY3kgYW5kIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwgb3Igb2NpX25ld19jb25uZWN0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9jb21taXQoJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2NvbW1pdCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG5lZWRlZCBmb3IgbW9zdCBvdGhlciBPQ0k4IG9wZXJhdGlvbnMuCiAqCiAqIFNlZSBDb25uZWN0aW9uIEhhbmRsaW5nIGZvcgogKiBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgY29ubmVjdGlvbgogKiBwb29saW5nLgogKgogKiBGcm9tIFBIUCA1LjEuMiAoUEVDTCBPQ0k4IDEuMSkgb2NpX2Nsb3NlIGNhbgogKiBiZSB1c2VkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogKgogKiBUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNhbGxzIHRvIG9jaV9jb25uZWN0CiAqIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyB3aWxsIHJldHVybiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcmV0dXJuZWQKICogZnJvbSB0aGUgZmlyc3QgY2FsbC4gVGhpcyBtZWFucyB0aGF0IHRyYW5zYWN0aW9ucyBpbiBvbmUgaGFuZGxlIGFyZQogKiBhbHNvIGluIHRoZSBvdGhlciBoYW5kbGVzLCBiZWNhdXNlIHRoZXkgdXNlIHRoZQogKiBzYW1lIHVuZGVybHlpbmcgZGF0YWJhc2UgY29ubmVjdGlvbi4gSWYgdHdvCiAqIGhhbmRsZXMgbmVlZCB0byBiZSB0cmFuc2FjdGlvbmFsbHkgaXNvbGF0ZWQgZnJvbSBlYWNoIG90aGVyLCB1c2UKICogb2NpX25ld19jb25uZWN0IGluc3RlYWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBPcmFjbGUgdXNlciBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBDb250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIFRXT19UQVNLIChvbiBMaW51eCkKICogb3IgTE9DQUwgKG9uIFdpbmRvd3MpCiAqIGFuZCBPUkFDTEVfU0lEIHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqCiAqCiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICoKICoKICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuICBBbHRlcm5hdGl2ZWx5CiAqIHNldCBUTlNfQURNSU4gc28KICogdGhhdCAkVE5TX0FETUlOL3Ruc25hbWVzLm9yYSBpcyByZWFkLiAgTWFrZSBzdXJlCiAqIHRoZSB3ZWIgZGFlbW9uIGhhcyByZWFkIGFjY2VzcyB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBEZXRlcm1pbmVzCiAqIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQgbGlicmFyaWVzLiAgVGhlIGNoYXJhY3RlcgogKiBzZXQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBkYXRhYmFzZS4gIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gIERlcGVuZGluZyBvbiB0aGUgY2hhcmFjdGVyIHNldHMgdGhpcyBtYXkKICogbm90IGdpdmUgdXNhYmxlIHJlc3VsdHMuICBDb252ZXJzaW9uIGFsc28gYWRkcyBzb21lIHRpbWUgb3ZlcmhlYWQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZQogKiBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcyBkZXRlcm1pbmUgYSBjaGFyYWN0ZXIgc2V0IGZyb20KICogdGhlIE5MU19MQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiBQYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGNhbgogKiByZWR1Y2UgdGhlIHRpbWUgdGFrZW4gdG8gY29ubmVjdC4KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFRoaXMKICogcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBzaW5jZSB2ZXJzaW9uIFBIUCA1IChQRUNMIE9DSTggMS4xKSBhbmQgYWNjZXB0cyB0aGUKICogZm9sbG93aW5nIHZhbHVlczogT0NJX0RFRkFVTFQsCiAqIE9DSV9TWVNPUEVSIGFuZCBPQ0lfU1lTREJBLgogKiBJZiBlaXRoZXIgT0NJX1NZU09QRVIgb3IKICogT0NJX1NZU0RCQSB3ZXJlIHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeQogKiB0byBlc3RhYmxpc2ggcHJpdmlsZWdlZCBjb25uZWN0aW9uIHVzaW5nIGV4dGVybmFsIGNyZWRlbnRpYWxzLgogKiBQcml2aWxlZ2VkIGNvbm5lY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgdGhlbSB5b3UKICogbmVlZCB0byBzZXQgb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogdG8gT24uCiAqCiAqCiAqIFBIUCA1LjMgKFBFQ0wgT0NJOCAxLjMuNCkgaW50cm9kdWNlZCB0aGUKICogT0NJX0NSRURfRVhUIG1vZGUgdmFsdWUuIFRoaXMgdGVsbHMgT3JhY2xlIHRvIHVzZQogKiBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQogKiBkYXRhYmFzZS4gIFRoZSBPQ0lfQ1JFRF9FWFQgZmxhZyBjYW4gb25seSBiZSB1c2VkCiAqIHdpdGggdXNlcm5hbWUgb2YgIi8iIGFuZCBhIGVtcHR5IHBhc3N3b3JkLgogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBtYXkgYmUgT24gb3IgT2ZmLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgbWF5IGJlIGNvbWJpbmVkIHdpdGggdGhlCiAqIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgbW9kZXMuCiAqCiAqCiAqIE9DSV9DUkVEX0VYVCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZm9yCiAqIHNlY3VyaXR5IHJlYXNvbnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfY29ubmVjdChzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJGNvbm5lY3Rpb25fc3RyaW5nID0gbnVsbCwgc3RyaW5nICRjaGFyYWN0ZXJfc2V0ID0gbnVsbCwgaW50ICRzZXNzaW9uX21vZGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlc3Npb25fbW9kZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2NpX2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQsICRzZXNzaW9uX21vZGUpOwogICAgfSBlbHNlaWYgKCRjaGFyYWN0ZXJfc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCk7CiAgICB9IGVsc2VpZiAoJGNvbm5lY3Rpb25fc3RyaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFzc29jaWF0ZXMgYSBQSFAgdmFyaWFibGUgd2l0aCBhIGNvbHVtbiBmb3IgcXVlcnkgZmV0Y2hlcyB1c2luZyBvY2lfZmV0Y2guCiAqCiAqIFRoZSBvY2lfZGVmaW5lX2J5X25hbWUgY2FsbCBtdXN0IG9jY3VyIGJlZm9yZQogKiBleGVjdXRpbmcgb2NpX2V4ZWN1dGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IG9jaV9wYXJzZSBhbmQgZXhlY3V0ZWQKICogYnkgb2NpX2V4ZWN1dGUsIG9yIGEgUkVGCiAqIENVUlNPUiBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgVGhlIGNvbHVtbiBuYW1lIHVzZWQgaW4gdGhlIHF1ZXJ5LgogKgogKiBVc2UgdXBwZXJjYXNlIGZvciBPcmFjbGUncyBkZWZhdWx0LCBub24tY2FzZSBzZW5zaXRpdmUgY29sdW1uCiAqIG5hbWVzLiAgVXNlIHRoZSBleGFjdCBjb2x1bW4gbmFtZSBjYXNlIGZvciBjYXNlLXNlbnNpdGl2ZQogKiBjb2x1bW4gbmFtZXMuCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFibGUgVGhlIFBIUCB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmV0dXJuZWQgY29sdW1uIHZhbHVlLgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSBkYXRhIHR5cGUgdG8gYmUgcmV0dXJuZWQuICBHZW5lcmFsbHkgbm90IG5lZWRlZC4gIE5vdGUgdGhhdAogKiBPcmFjbGUtc3R5bGUgZGF0YSBjb252ZXJzaW9ucyBhcmUgbm90IHBlcmZvcm1lZC4gIEZvciBleGFtcGxlLAogKiBTUUxUX0lOVCB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSByZXR1cm5lZAogKiBkYXRhIHR5cGUgd2lsbCBzdGlsbCBiZSBTUUxUX0NIUi4KICoKICogWW91IGNhbiBvcHRpb25hbGx5IHVzZSBvY2lfbmV3X2Rlc2NyaXB0b3IKICogdG8gYWxsb2NhdGUgTE9CL1JPV0lEL0JGSUxFIGRlc2NyaXB0b3JzLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9kZWZpbmVfYnlfbmFtZSgkc3RhdGVtZW50LCBzdHJpbmcgJGNvbHVtbl9uYW1lLCAmJHZhcmlhYmxlLCBpbnQgJHR5cGUgPSBTUUxUX0NIUik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZGVmaW5lX2J5X25hbWUoJHN0YXRlbWVudCwgJGNvbHVtbl9uYW1lLCAkdmFyaWFibGUsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4ZWN1dGVzIGEgc3RhdGVtZW50IHByZXZpb3VzbHkgcmV0dXJuZWQKICogZnJvbSBvY2lfcGFyc2UuCiAqCiAqIEFmdGVyIGV4ZWN1dGlvbiwgc3RhdGVtZW50cyBsaWtlIElOU0VSVCB3aWxsCiAqIGhhdmUgZGF0YSBjb21taXR0ZWQgdG8gdGhlIGRhdGFiYXNlIGJ5IGRlZmF1bHQuICBGb3Igc3RhdGVtZW50cwogKiBsaWtlIFNFTEVDVCwgZXhlY3V0aW9uIHBlcmZvcm1zIHRoZSBsb2dpYyBvZiB0aGUKICogcXVlcnkuIFF1ZXJ5IHJlc3VsdHMgY2FuIHN1YnNlcXVlbnRseSBiZSBmZXRjaGVkIGluIFBIUCB3aXRoCiAqIGZ1bmN0aW9ucyBsaWtlIG9jaV9mZXRjaF9hcnJheS4KICoKICogRWFjaCBwYXJzZWQgc3RhdGVtZW50IG1heSBiZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1lcywgc2F2aW5nIHRoZQogKiBjb3N0IG9mIHJlLXBhcnNpbmcuICBUaGlzIGlzIGNvbW1vbmx5IHVzZWQKICogZm9yIElOU0VSVCBzdGF0ZW1lbnRzIHdoZW4gZGF0YSBpcyBib3VuZAogKiB3aXRoIG9jaV9iaW5kX2J5X25hbWUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRtb2RlIEFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICoKICogRXhlY3V0aW9uIE1vZGVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIE9DSV9DT01NSVRfT05fU1VDQ0VTUwogKiBBdXRvbWF0aWNhbGx5IGNvbW1pdCBhbGwgb3V0c3RhbmRpbmcgY2hhbmdlcyBmb3IKICogdGhpcyBjb25uZWN0aW9uIHdoZW4gdGhlIHN0YXRlbWVudCBoYXMgc3VjY2VlZGVkLiBUaGlzCiAqIGlzIHRoZSBkZWZhdWx0LgogKgogKgogKiBPQ0lfREVTQ1JJQkVfT05MWQogKiBNYWtlIHF1ZXJ5IG1ldGEgZGF0YSBhdmFpbGFibGUgdG8gZnVuY3Rpb25zCiAqIGxpa2Ugb2NpX2ZpZWxkX25hbWUgYnV0IGRvIG5vdAogKiBjcmVhdGUgYSByZXN1bHQgc2V0LiBBbnkgc3Vic2VxdWVudCBmZXRjaCBjYWxsIHN1Y2gKICogYXMgb2NpX2ZldGNoX2FycmF5IHdpbGwKICogZmFpbC4KICoKICoKICogT0NJX05PX0FVVE9fQ09NTUlUCiAqIERvIG5vdCBhdXRvbWF0aWNhbGx5IGNvbW1pdCBjaGFuZ2VzLiAgUHJpb3IgdG8gUEhQCiAqIDUuMy4yIChQRUNMIE9DSTggMS40KQogKiB1c2UgT0NJX0RFRkFVTFQgd2hpY2ggaXMgZXF1aXZhbGVudAogKiB0byBPQ0lfTk9fQVVUT19DT01NSVQuCiAqCiAqCiAqCiAqCiAqCiAqIFVzaW5nIE9DSV9OT19BVVRPX0NPTU1JVCBtb2RlIHN0YXJ0cyBvciBjb250aW51ZXMgYQogKiB0cmFuc2FjdGlvbi4gVHJhbnNhY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrIHdoZW4KICogdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBvciB3aGVuIHRoZSBzY3JpcHQgZW5kcy4gIEV4cGxpY2l0bHkKICogY2FsbCBvY2lfY29tbWl0IHRvIGNvbW1pdCBhIHRyYW5zYWN0aW9uLAogKiBvciBvY2lfcm9sbGJhY2sgdG8gYWJvcnQgaXQuCiAqCiAqIFdoZW4gaW5zZXJ0aW5nIG9yIHVwZGF0aW5nIGRhdGEsIHVzaW5nIHRyYW5zYWN0aW9ucyBpcwogKiByZWNvbW1lbmRlZCBmb3IgcmVsYXRpb25hbCBkYXRhIGNvbnNpc3RlbmN5IGFuZCBmb3IgcGVyZm9ybWFuY2UKICogcmVhc29ucy4KICoKICogSWYgT0NJX05PX0FVVE9fQ09NTUlUIG1vZGUgaXMgdXNlZCBmb3IgYW55CiAqIHN0YXRlbWVudCBpbmNsdWRpbmcgcXVlcmllcywgYW5kCiAqIG9jaV9jb21taXQKICogb3Igb2NpX3JvbGxiYWNrIGlzIG5vdCBzdWJzZXF1ZW50bHkKICogY2FsbGVkLCB0aGVuIE9DSTggd2lsbCBwZXJmb3JtIGEgcm9sbGJhY2sgYXQgdGhlIGVuZCBvZiB0aGUKICogc2NyaXB0IGV2ZW4gaWYgbm8gZGF0YSB3YXMgY2hhbmdlZC4gIFRvIGF2b2lkIGFuIHVubmVjZXNzYXJ5CiAqIHJvbGxiYWNrLCBtYW55IHNjcmlwdHMgZG8gbm90CiAqIHVzZSBPQ0lfTk9fQVVUT19DT01NSVQgbW9kZSBmb3IgcXVlcmllcyBvcgogKiBQTC9TUUwuICBCZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHJhbnNhY3Rpb25hbAogKiBjb25zaXN0ZW5jeSBmb3IgdGhlIGFwcGxpY2F0aW9uIHdoZW4KICogdXNpbmcgb2NpX2V4ZWN1dGUgd2l0aCBkaWZmZXJlbnQgbW9kZXMgaW4KICogdGhlIHNhbWUgc2NyaXB0LgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9leGVjdXRlKCRzdGF0ZW1lbnQsIGludCAkbW9kZSA9IE9DSV9DT01NSVRfT05fU1VDQ0VTUyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZXhlY3V0ZSgkc3RhdGVtZW50LCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGZXRjaGVzIG11bHRpcGxlIHJvd3MgZnJvbSBhIHF1ZXJ5IGludG8gYSB0d28tZGltZW5zaW9uYWwgYXJyYXkuCiAqIEJ5IGRlZmF1bHQsIGFsbCByb3dzIGFyZSByZXR1cm5lZC4KICoKICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9ubHkgb25jZSBmb3IgZWFjaCBxdWVyeSBleGVjdXRlZAogKiB3aXRoIG9jaV9leGVjdXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSTggc3RhdGVtZW50CiAqIGlkZW50aWZpZXIgY3JlYXRlZCBieSBvY2lfcGFyc2UgYW5kIGV4ZWN1dGVkCiAqIGJ5IG9jaV9leGVjdXRlLCBvciBhIFJFRgogKiBDVVJTT1Igc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBhcnJheXxudWxsICRvdXRwdXQgVGhlIHZhcmlhYmxlIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIHJvd3MuCiAqCiAqIExPQiBjb2x1bW5zIGFyZSByZXR1cm5lZCBhcyBzdHJpbmdzLCB3aGVyZSBPcmFjbGUgc3VwcG9ydHMKICogY29udmVyc2lvbi4KICoKICogU2VlIG9jaV9mZXRjaF9hcnJheSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKiBvbiBob3cgZGF0YSBhbmQgdHlwZXMgYXJlIGZldGNoZWQuCiAqIEBwYXJhbSBpbnQgJHNraXAgVGhlIG51bWJlciBvZiBpbml0aWFsIHJvd3MgdG8gZGlzY2FyZCB3aGVuIGZldGNoaW5nIHRoZQogKiByZXN1bHQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAsIHNvIHRoZSBmaXJzdCByb3cgb253YXJkcyBpcwogKiByZXR1cm5lZC4KICogQHBhcmFtIGludCAkbWF4cm93cyBUaGUgbnVtYmVyIG9mIHJvd3MgdG8gcmV0dXJuLiAgVGhlIGRlZmF1bHQgaXMgLTEgbWVhbmluZyByZXR1cm4KICogYWxsIHRoZSByb3dzIGZyb20gc2tpcCArIDEgb253YXJkcy4KICogQHBhcmFtIGludCAkZmxhZ3MgUGFyYW1ldGVyIGZsYWdzIGluZGljYXRlcyB0aGUgYXJyYXkKICogc3RydWN0dXJlIGFuZCB3aGV0aGVyIGFzc29jaWF0aXZlIGFycmF5cyBzaG91bGQgYmUgdXNlZC4KICoKICogb2NpX2ZldGNoX2FsbCBBcnJheSBTdHJ1Y3R1cmUgTW9kZXMKICoKICoKICoKICogQ29uc3RhbnQKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogT0NJX0ZFVENIU1RBVEVNRU5UX0JZX1JPVwogKiBUaGUgb3V0ZXIgYXJyYXkgd2lsbCBjb250YWluIG9uZSBzdWItYXJyYXkgcGVyIHF1ZXJ5CiAqIHJvdy4KICoKICoKICogT0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTgogKiBUaGUgb3V0ZXIgYXJyYXkgd2lsbCBjb250YWluIG9uZSBzdWItYXJyYXkgcGVyIHF1ZXJ5CiAqIGNvbHVtbi4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KICoKICoKICoKICoKICoKICogQXJyYXlzIGNhbiBiZSBpbmRleGVkIGVpdGhlciBieSBjb2x1bW4gaGVhZGluZyBvciBudW1lcmljYWxseS4KICogT25seSBvbmUgaW5kZXggbW9kZSB3aWxsIGJlIHJldHVybmVkLgogKgogKiBvY2lfZmV0Y2hfYWxsIEFycmF5IEluZGV4IE1vZGVzCiAqCiAqCiAqCiAqIENvbnN0YW50CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIE9DSV9OVU0KICogTnVtZXJpYyBpbmRleGVzIGFyZSB1c2VkIGZvciBlYWNoIGNvbHVtbidzIGFycmF5LgogKgogKgogKiBPQ0lfQVNTT0MKICogQXNzb2NpYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4ncwogKiBhcnJheS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KICoKICoKICoKICoKICoKICogVXNlIHRoZSBhZGRpdGlvbiBvcGVyYXRvciAiKyIgdG8gY2hvb3NlIGEgY29tYmluYXRpb24KICogb2YgYXJyYXkgc3RydWN0dXJlIGFuZCBpbmRleCBtb2Rlcy4KICoKICogT3JhY2xlJ3MgZGVmYXVsdCwgbm9uLWNhc2Ugc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUKICogdXBwZXJjYXNlIGFycmF5IGtleXMuICBDYXNlLXNlbnNpdGl2ZSBjb2x1bW4gbmFtZXMgd2lsbCBoYXZlCiAqIGFycmF5IGtleXMgdXNpbmcgdGhlIGV4YWN0IGNvbHVtbiBjYXNlLgogKiBVc2UgdmFyX2R1bXAKICogb24gb3V0cHV0IHRvIHZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgY2FzZQogKiB0byB1c2UgZm9yIGVhY2ggcXVlcnkuCiAqCiAqIFF1ZXJpZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBvbmUgY29sdW1uIHdpdGggdGhlIHNhbWUgbmFtZQogKiBzaG91bGQgdXNlIGNvbHVtbiBhbGlhc2VzLiAgT3RoZXJ3aXNlIG9ubHkgb25lIG9mIHRoZSBjb2x1bW5zCiAqIHdpbGwgYXBwZWFyIGluIGFuIGFzc29jaWF0aXZlIGFycmF5LgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBvdXRwdXQsIHdoaWNoCiAqIG1heSBiZSAwIG9yIG1vcmUuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZldGNoX2FsbCgkc3RhdGVtZW50LCA/YXJyYXkgJiRvdXRwdXQsIGludCAkc2tpcCA9IDAsIGludCAkbWF4cm93cyA9IC0xLCBpbnQgJGZsYWdzID0gT0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTiArIE9DSV9BU1NPQyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9mZXRjaF9hbGwoJHN0YXRlbWVudCwgJG91dHB1dCwgJHNraXAsICRtYXhyb3dzLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBuYW1lIGFzIGEgc3RyaW5ncy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfbmFtZSgkc3RhdGVtZW50LCAkZmllbGQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfbmFtZSgkc3RhdGVtZW50LCAkZmllbGQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHByZWNpc2lvbiBvZiB0aGUgZmllbGQuCiAqCiAqIEZvciBGTE9BVCBjb2x1bW5zLCBwcmVjaXNpb24gaXMgbm9uemVybyBhbmQgc2NhbGUgaXMgLTEyNy4KICogSWYgcHJlY2lzaW9uIGlzIDAsIHRoZW4gY29sdW1uIGlzIE5VTUJFUi4gRWxzZSBpdCdzCiAqIE5VTUJFUihwcmVjaXNpb24sIHNjYWxlKS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBwcmVjaXNpb24gYXMgYW4gaW50ZWdlcnMuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX3ByZWNpc2lvbigkc3RhdGVtZW50LCAkZmllbGQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfcHJlY2lzaW9uKCRzdGF0ZW1lbnQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgdGhlIHNjYWxlIG9mIHRoZSBjb2x1bW4gd2l0aCBmaWVsZCBpbmRleC4KICoKICogRm9yIEZMT0FUIGNvbHVtbnMsIHByZWNpc2lvbiBpcyBub256ZXJvIGFuZCBzY2FsZSBpcyAtMTI3LgogKiBJZiBwcmVjaXNpb24gaXMgMCwgdGhlbiBjb2x1bW4gaXMgTlVNQkVSLiBFbHNlIGl0J3MKICogTlVNQkVSKHByZWNpc2lvbiwgc2NhbGUpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHNjYWxlIGFzIGFuIGludGVnZXJzLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9maWVsZF9zY2FsZSgkc3RhdGVtZW50LCAkZmllbGQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfZmllbGRfc2NhbGUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgc2l6ZSBvZiBhIGZpZWxkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIHNpemUgb2YgYSBmaWVsZCBpbiBieXRlc3MuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX3NpemUoJHN0YXRlbWVudCwgJGZpZWxkKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3NpemUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBPcmFjbGUncyByYXcgIlNRTFQiIGRhdGEgdHlwZSBvZiB0aGUgZmllbGQuCiAqCiAqIElmIHlvdSB3YW50IGEgZmllbGQncyB0eXBlIG5hbWUsIHRoZW4gdXNlIG9jaV9maWVsZF90eXBlIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIENhbiBiZSB0aGUgZmllbGQncyBpbmRleCAoMS1iYXNlZCkgb3IgbmFtZS4KICogQHJldHVybiBpbnQgUmV0dXJucyBPcmFjbGUncyByYXcgZGF0YSB0eXBlIGFzIGEgbnVtYmVycy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfdHlwZV9yYXcoJHN0YXRlbWVudCwgJGZpZWxkKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3R5cGVfcmF3KCRzdGF0ZW1lbnQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYSBmaWVsZCdzIGRhdGEgdHlwZSBuYW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHBhcmFtIG1peGVkICRmaWVsZCBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgZmllbGQgZGF0YSB0eXBlIGFzIGEgc3RyaW5ncy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfdHlwZSgkc3RhdGVtZW50LCAkZmllbGQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZpZWxkX3R5cGUoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRnJlZXMgYSBkZXNjcmlwdG9yIGFsbG9jYXRlZCBieSBvY2lfbmV3X2Rlc2NyaXB0b3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGVzY3JpcHRvcgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9mcmVlX2Rlc2NyaXB0b3IoJGRlc2NyaXB0b3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZyZWVfZGVzY3JpcHRvcigkZGVzY3JpcHRvcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIE9yYWNsZSdzIGN1cnNvciBvciBzdGF0ZW1lbnQsIHdoaWNoIHdhcwogKiByZWNlaXZlZCBmcm9tIGFzIGEgcmVzdWx0IG9mIG9jaV9wYXJzZSBvciBvYnRhaW5lZAogKiBmcm9tIE9yYWNsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX2ZyZWVfc3RhdGVtZW50KCRzdGF0ZW1lbnQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX2ZyZWVfc3RhdGVtZW50KCRzdGF0ZW1lbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWxsb2NhdGVzIGEgbmV3IGNvbGxlY3Rpb24gb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICogb2NpX2Nvbm5lY3Qgb3Igb2NpX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICR0ZG8gU2hvdWxkIGJlIGEgdmFsaWQgbmFtZWQgdHlwZSAodXBwZXJjYXNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFNob3VsZCBwb2ludCB0byB0aGUgc2NoZW1lLCB3aGVyZSB0aGUgbmFtZWQgdHlwZSB3YXMgY3JlYXRlZC4gVGhlIG5hbWUKICogb2YgdGhlIGN1cnJlbnQgdXNlciBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICogQHJldHVybiBcT0NJLUNvbGxlY3Rpb24gUmV0dXJucyBhIG5ldyBPQ0lDb2xsZWN0aW9uIG9iamVjdC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbmV3X2NvbGxlY3Rpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkdGRvLCBzdHJpbmcgJHNjaGVtYSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19jb2xsZWN0aW9uKCRjb25uZWN0aW9uLCAkdGRvLCAkc2NoZW1hKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogRXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB0byBhbiBPcmFjbGUgc2VydmVyIGFuZCBsb2dzIG9uLgogKgogKiBVbmxpa2Ugb2NpX2Nvbm5lY3QgYW5kCiAqIG9jaV9wY29ubmVjdCwgb2NpX25ld19jb25uZWN0CiAqIGRvZXMgbm90IGNhY2hlIGNvbm5lY3Rpb25zIGFuZCB3aWxsIGFsd2F5cyByZXR1cm4gYSBicmFuZC1uZXcgZnJlc2hseQogKiBvcGVuZWQgY29ubmVjdGlvbiBoYW5kbGUuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMKICogdHJhbnNhY3Rpb25hbCBpc29sYXRpb24gYmV0d2VlbiB0d28gc2V0cyBvZiBxdWVyaWVzLgogKgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgT3JhY2xlIHVzZXIgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciB1c2VybmFtZS4KICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgQ29udGFpbnMKICogdGhlIE9yYWNsZSBpbnN0YW5jZSB0byBjb25uZWN0IHRvLiBJdCBjYW4gYmUKICogYW4gRWFzeSBDb25uZWN0CiAqIHN0cmluZywgb3IgYSBDb25uZWN0IE5hbWUgZnJvbQogKiB0aGUgdG5zbmFtZXMub3JhIGZpbGUsIG9yIHRoZSBuYW1lIG9mIGEgbG9jYWwKICogT3JhY2xlIGluc3RhbmNlLgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCBQSFAgdXNlcwogKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyBUV09fVEFTSyAob24gTGludXgpCiAqIG9yIExPQ0FMIChvbiBXaW5kb3dzKQogKiBhbmQgT1JBQ0xFX1NJRCB0byBkZXRlcm1pbmUgdGhlCiAqIE9yYWNsZSBpbnN0YW5jZSB0byBjb25uZWN0IHRvLgogKgogKgogKiBUbyB1c2UgdGhlIEVhc3kgQ29ubmVjdCBuYW1pbmcgbWV0aG9kLCBQSFAgbXVzdCBiZSBsaW5rZWQgd2l0aCBPcmFjbGUKICogMTBnIG9yIGdyZWF0ZXIgQ2xpZW50IGxpYnJhcmllcy4gVGhlIEVhc3kgQ29ubmVjdCBzdHJpbmcgZm9yIE9yYWNsZQogKiAxMGcgaXMgb2YgdGhlIGZvcm06CiAqIFsvL11ob3N0X25hbWVbOnBvcnRdWy9zZXJ2aWNlX25hbWVdLiBGcm9tIE9yYWNsZQogKiAxMWcsIHRoZSBzeW50YXggaXM6CiAqIFsvL11ob3N0X25hbWVbOnBvcnRdWy9zZXJ2aWNlX25hbWVdWzpzZXJ2ZXJfdHlwZV1bL2luc3RhbmNlX25hbWVdLgogKiBTZXJ2aWNlIG5hbWVzIGNhbiBiZSBmb3VuZCBieSBydW5uaW5nIHRoZSBPcmFjbGUKICogdXRpbGl0eSBsc25yY3RsIHN0YXR1cyBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyCiAqIG1hY2hpbmUuCiAqCiAqCiAqIFRoZSB0bnNuYW1lcy5vcmEgZmlsZSBjYW4gYmUgaW4gdGhlIE9yYWNsZSBOZXQKICogc2VhcmNoIHBhdGgsIHdoaWNoCiAqIGluY2x1ZGVzICRPUkFDTEVfSE9NRS9uZXR3b3JrL2FkbWluCiAqIGFuZCAvZXRjLiAgQWx0ZXJuYXRpdmVseQogKiBzZXQgVE5TX0FETUlOIHNvCiAqIHRoYXQgJFROU19BRE1JTi90bnNuYW1lcy5vcmEgaXMgcmVhZC4gIE1ha2Ugc3VyZQogKiB0aGUgd2ViIGRhZW1vbiBoYXMgcmVhZCBhY2Nlc3MgdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJhY3Rlcl9zZXQgRGV0ZXJtaW5lcwogKiB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcy4gIFRoZSBjaGFyYWN0ZXIKICogc2V0IGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgZGF0YWJhc2UuICBJZgogKiBpdCBkb2Vzbid0IG1hdGNoLCBPcmFjbGUgd2lsbCBkbyBpdHMgYmVzdCB0byBjb252ZXJ0IGRhdGEgdG8gYW5kIGZyb20KICogdGhlIGRhdGFiYXNlIGNoYXJhY3RlciBzZXQuICBEZXBlbmRpbmcgb24gdGhlIGNoYXJhY3RlciBzZXRzIHRoaXMgbWF5CiAqIG5vdCBnaXZlIHVzYWJsZSByZXN1bHRzLiAgQ29udmVyc2lvbiBhbHNvIGFkZHMgc29tZSB0aW1lIG92ZXJoZWFkLgogKgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICogT3JhY2xlIENsaWVudCBsaWJyYXJpZXMgZGV0ZXJtaW5lIGEgY2hhcmFjdGVyIHNldCBmcm9tCiAqIHRoZSBOTFNfTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICoKICogUGFzc2luZyB0aGlzIHBhcmFtZXRlciBjYW4KICogcmVkdWNlIHRoZSB0aW1lIHRha2VuIHRvIGNvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJHNlc3Npb25fbW9kZSBUaGlzCiAqIHBhcmFtZXRlciBpcyBhdmFpbGFibGUgc2luY2UgdmVyc2lvbiBQSFAgNSAoUEVDTCBPQ0k4IDEuMSkgYW5kIGFjY2VwdHMgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXM6IE9DSV9ERUZBVUxULAogKiBPQ0lfU1lTT1BFUiBhbmQgT0NJX1NZU0RCQS4KICogSWYgZWl0aGVyIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgd2VyZSBzcGVjaWZpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkKICogdG8gZXN0YWJsaXNoIHByaXZpbGVnZWQgY29ubmVjdGlvbiB1c2luZyBleHRlcm5hbCBjcmVkZW50aWFscy4KICogUHJpdmlsZWdlZCBjb25uZWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gZW5hYmxlIHRoZW0geW91CiAqIG5lZWQgdG8gc2V0IG9jaTgucHJpdmlsZWdlZF9jb25uZWN0CiAqIHRvIE9uLgogKgogKgogKiBQSFAgNS4zIChQRUNMIE9DSTggMS4zLjQpIGludHJvZHVjZWQgdGhlCiAqIE9DSV9DUkVEX0VYVCBtb2RlIHZhbHVlLiBUaGlzIHRlbGxzIE9yYWNsZSB0byB1c2UKICogRXh0ZXJuYWwgb3IgT1MgYXV0aGVudGljYXRpb24sIHdoaWNoIG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUKICogZGF0YWJhc2UuICBUaGUgT0NJX0NSRURfRVhUIGZsYWcgY2FuIG9ubHkgYmUgdXNlZAogKiB3aXRoIHVzZXJuYW1lIG9mICIvIiBhbmQgYSBlbXB0eSBwYXNzd29yZC4KICogb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogbWF5IGJlIE9uIG9yIE9mZi4KICoKICoKICogT0NJX0NSRURfRVhUIG1heSBiZSBjb21iaW5lZCB3aXRoIHRoZQogKiBPQ0lfU1lTT1BFUiBvcgogKiBPQ0lfU1lTREJBIG1vZGVzLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIGZvcgogKiBzZWN1cml0eSByZWFzb25zLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX25ld19jb25uZWN0KHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcGFzc3dvcmQsIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgPSBudWxsLCBzdHJpbmcgJGNoYXJhY3Rlcl9zZXQgPSBudWxsLCBpbnQgJHNlc3Npb25fbW9kZSA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkc2Vzc2lvbl9tb2RlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfbmV3X2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQsICRzZXNzaW9uX21vZGUpOwogICAgfSBlbHNlaWYgKCRjaGFyYWN0ZXJfc2V0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfbmV3X2Nvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZywgJGNoYXJhY3Rlcl9zZXQpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uX3N0cmluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2NpX25ld19jb25uZWN0KCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29ubmVjdGlvbl9zdHJpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9uZXdfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFsbG9jYXRlcyBhIG5ldyBzdGF0ZW1lbnQgaGFuZGxlIG9uIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0IG9yIG9jaV9wY29ubmVjdC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgbmV3IHN0YXRlbWVudCBoYW5kbGUuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX25ld19jdXJzb3IoJGNvbm5lY3Rpb24pCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19jdXJzb3IoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBbGxvY2F0ZXMgcmVzb3VyY2VzIHRvIGhvbGQgZGVzY3JpcHRvciBvciBMT0IgbG9jYXRvci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0IG9yIG9jaV9wY29ubmVjdC4KICogQHBhcmFtIGludCAkdHlwZSBWYWxpZCB2YWx1ZXMgZm9yIHR5cGUgYXJlOgogKiBPQ0lfRFRZUEVfRklMRSwgT0NJX0RUWVBFX0xPQiBhbmQKICogT0NJX0RUWVBFX1JPV0lELgogKiBAcmV0dXJuIFxPQ0ktTG9iIFJldHVybnMgYSBuZXcgTE9CIG9yIEZJTEUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbmV3X2Rlc2NyaXB0b3IoJGNvbm5lY3Rpb24sIGludCAkdHlwZSA9IE9DSV9EVFlQRV9MT0IpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX25ld19kZXNjcmlwdG9yKCRjb25uZWN0aW9uLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBnaXZlbiBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhcyBhbiBpbnRlZ2Vycy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfbnVtX2ZpZWxkcygkc3RhdGVtZW50KTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX251bV9maWVsZHMoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGR1cmluZyBzdGF0ZW1lbnQgZXhlY3V0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYXMgYW4gaW50ZWdlcnMuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX251bV9yb3dzKCRzdGF0ZW1lbnQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfbnVtX3Jvd3MoJHN0YXRlbWVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIHNxbF90ZXh0IHVzaW5nCiAqIGNvbm5lY3Rpb24gYW5kIHJldHVybnMgdGhlIHN0YXRlbWVudCBpZGVudGlmaWVyLAogKiB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIG9jaV9iaW5kX2J5X25hbWUsCiAqIG9jaV9leGVjdXRlIGFuZCBvdGhlciBmdW5jdGlvbnMuCiAqCiAqIFN0YXRlbWVudCBpZGVudGlmaWVycyBjYW4gYmUgZnJlZWQKICogd2l0aCBvY2lfZnJlZV9zdGF0ZW1lbnQgb3IgYnkgc2V0dGluZyB0aGUKICogdmFyaWFibGUgdG8gTlVMTC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3FsX3RleHQgVGhlIFNRTCBvciBQTC9TUUwgc3RhdGVtZW50LgogKgogKiBTUUwgc3RhdGVtZW50cyBzaG91bGQgbm90IGVuZCB3aXRoIGEKICogc2VtaS1jb2xvbiAoIjsiKS4gIFBML1NRTAogKiBzdGF0ZW1lbnRzIHNob3VsZCBlbmQgd2l0aCBhIHNlbWktY29sb24KICogKCI7IikuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0YXRlbWVudCBoYW5kbGUgb24gc3VjY2Vzcy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcGFyc2UoJGNvbm5lY3Rpb24sIHN0cmluZyAkc3FsX3RleHQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3BhcnNlKCRjb25uZWN0aW9uLCAkc3FsX3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDcmVhdGVzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGFuIE9yYWNsZSBzZXJ2ZXIgYW5kIGxvZ3Mgb24uCiAqCiAqIFBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXJlIGNhY2hlZCBhbmQgcmUtdXNlZCBiZXR3ZWVuIHJlcXVlc3RzLCByZXN1bHRpbmcKICogaW4gcmVkdWNlZCBvdmVyaGVhZCBvbiBlYWNoIHBhZ2UgbG9hZDsgYSB0eXBpY2FsIFBIUCBhcHBsaWNhdGlvbiB3aWxsIGhhdmUKICogYSBzaW5nbGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIG9wZW4gYWdhaW5zdCBhbiAgT3JhY2xlIHNlcnZlciBwZXIgQXBhY2hlCiAqIGNoaWxkIHByb2Nlc3MgKG9yIFBIUCBGYXN0Q0dJL0NHSSBwcm9jZXNzKS4gU2VlIHRoZSBQZXJzaXN0ZW50IERhdGFiYXNlCiAqIENvbm5lY3Rpb25zIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSBPcmFjbGUgdXNlciBuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lLgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBDb250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIFRXT19UQVNLIChvbiBMaW51eCkKICogb3IgTE9DQUwgKG9uIFdpbmRvd3MpCiAqIGFuZCBPUkFDTEVfU0lEIHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqCiAqCiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICoKICoKICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuICBBbHRlcm5hdGl2ZWx5CiAqIHNldCBUTlNfQURNSU4gc28KICogdGhhdCAkVE5TX0FETUlOL3Ruc25hbWVzLm9yYSBpcyByZWFkLiAgTWFrZSBzdXJlCiAqIHRoZSB3ZWIgZGFlbW9uIGhhcyByZWFkIGFjY2VzcyB0byB0aGUgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBEZXRlcm1pbmVzCiAqIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQgbGlicmFyaWVzLiAgVGhlIGNoYXJhY3RlcgogKiBzZXQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBkYXRhYmFzZS4gIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gIERlcGVuZGluZyBvbiB0aGUgY2hhcmFjdGVyIHNldHMgdGhpcyBtYXkKICogbm90IGdpdmUgdXNhYmxlIHJlc3VsdHMuICBDb252ZXJzaW9uIGFsc28gYWRkcyBzb21lIHRpbWUgb3ZlcmhlYWQuCiAqCiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZQogKiBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcyBkZXRlcm1pbmUgYSBjaGFyYWN0ZXIgc2V0IGZyb20KICogdGhlIE5MU19MQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiBQYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGNhbgogKiByZWR1Y2UgdGhlIHRpbWUgdGFrZW4gdG8gY29ubmVjdC4KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFRoaXMKICogcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBzaW5jZSB2ZXJzaW9uIFBIUCA1IChQRUNMIE9DSTggMS4xKSBhbmQgYWNjZXB0cyB0aGUKICogZm9sbG93aW5nIHZhbHVlczogT0NJX0RFRkFVTFQsCiAqIE9DSV9TWVNPUEVSIGFuZCBPQ0lfU1lTREJBLgogKiBJZiBlaXRoZXIgT0NJX1NZU09QRVIgb3IKICogT0NJX1NZU0RCQSB3ZXJlIHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeQogKiB0byBlc3RhYmxpc2ggcHJpdmlsZWdlZCBjb25uZWN0aW9uIHVzaW5nIGV4dGVybmFsIGNyZWRlbnRpYWxzLgogKiBQcml2aWxlZ2VkIGNvbm5lY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgdGhlbSB5b3UKICogbmVlZCB0byBzZXQgb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogdG8gT24uCiAqCiAqCiAqIFBIUCA1LjMgKFBFQ0wgT0NJOCAxLjMuNCkgaW50cm9kdWNlZCB0aGUKICogT0NJX0NSRURfRVhUIG1vZGUgdmFsdWUuIFRoaXMgdGVsbHMgT3JhY2xlIHRvIHVzZQogKiBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQogKiBkYXRhYmFzZS4gIFRoZSBPQ0lfQ1JFRF9FWFQgZmxhZyBjYW4gb25seSBiZSB1c2VkCiAqIHdpdGggdXNlcm5hbWUgb2YgIi8iIGFuZCBhIGVtcHR5IHBhc3N3b3JkLgogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBtYXkgYmUgT24gb3IgT2ZmLgogKgogKgogKiBPQ0lfQ1JFRF9FWFQgbWF5IGJlIGNvbWJpbmVkIHdpdGggdGhlCiAqIE9DSV9TWVNPUEVSIG9yCiAqIE9DSV9TWVNEQkEgbW9kZXMuCiAqCiAqCiAqIE9DSV9DUkVEX0VYVCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZm9yCiAqIHNlY3VyaXR5IHJlYXNvbnMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcGNvbm5lY3Qoc3RyaW5nICR1c2VybmFtZSwgc3RyaW5nICRwYXNzd29yZCwgc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyA9IG51bGwsIHN0cmluZyAkY2hhcmFjdGVyX3NldCA9IG51bGwsIGludCAkc2Vzc2lvbl9tb2RlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXNzaW9uX21vZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9wY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCwgJHNlc3Npb25fbW9kZSk7CiAgICB9IGVsc2VpZiAoJGNoYXJhY3Rlcl9zZXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9jaV9wY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCk7CiAgICB9IGVsc2VpZiAoJGNvbm5lY3Rpb25fc3RyaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvY2lfcGNvbm5lY3QoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRjb25uZWN0aW9uX3N0cmluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2NpX3Bjb25uZWN0KCR1c2VybmFtZSwgJHBhc3N3b3JkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgZGF0YSBmcm9tIGZpZWxkIGluIHRoZSBjdXJyZW50IHJvdywKICogZmV0Y2hlZCBieSBvY2lfZmV0Y2guCiAqCiAqIEZvciBkZXRhaWxzIG9uIHRoZSBkYXRhIHR5cGUgbWFwcGluZyBwZXJmb3JtZWQgYnkKICogdGhlIE9DSTggZXh0ZW5zaW9uLCBzZWUgdGhlIGRhdGF0eXBlcwogKiBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudAogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIENhbiBiZSBlaXRoZXIgdXNlIHRoZSBjb2x1bW4gbnVtYmVyICgxLWJhc2VkKSBvciB0aGUgY29sdW1uIG5hbWUuCiAqIFRoZSBjYXNlIG9mIHRoZSBjb2x1bW4gbmFtZSBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgT3JhY2xlIG1ldGEgZGF0YQogKiBkZXNjcmliZXMgdGhlIGNvbHVtbiBhcywgd2hpY2ggaXMgdXBwZXJjYXNlIGZvciBjb2x1bW5zIGNyZWF0ZWQKICogY2FzZSBpbnNlbnNpdGl2ZWx5LgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYXMgc3RyaW5ncyBleGNlcHQgZm9yIGFic3RyYWN0IHR5cGVzIChST1dJRHMsIExPQnMgYW5kCiAqIEZJTEVzKS4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcmVzdWx0KCRzdGF0ZW1lbnQsICRmaWVsZCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9yZXN1bHQoJHN0YXRlbWVudCwgJGZpZWxkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV2ZXJ0cyBhbGwgdW5jb21taXR0ZWQgY2hhbmdlcyBmb3IgdGhlIE9yYWNsZQogKiBjb25uZWN0aW9uIGFuZCBlbmRzIHRoZSB0cmFuc2FjdGlvbi4gIEl0CiAqIHJlbGVhc2VzIGFsbCBsb2NrcyBoZWxkLiAgQWxsIE9yYWNsZSBTQVZFUE9JTlRTCiAqIGFyZSBlcmFzZWQuCiAqCiAqIEEgdHJhbnNhY3Rpb24gYmVnaW5zIHdoZW4gdGhlIGZpcnN0IFNRTCBzdGF0ZW1lbnQgdGhhdCBjaGFuZ2VzIGRhdGEKICogaXMgZXhlY3V0ZWQgd2l0aCBvY2lfZXhlY3V0ZSB1c2luZwogKiB0aGUgT0NJX05PX0FVVE9fQ09NTUlUIGZsYWcuICBGdXJ0aGVyIGRhdGEKICogY2hhbmdlcyBtYWRlIGJ5IG90aGVyIHN0YXRlbWVudHMgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUKICogdHJhbnNhY3Rpb24uICBEYXRhIGNoYW5nZXMgbWFkZSBpbiBhIHRyYW5zYWN0aW9uIGFyZSB0ZW1wb3JhcnkKICogdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gIE90aGVyIHVzZXJzIG9mCiAqIHRoZSBkYXRhYmFzZSB3aWxsIG5vdCBzZWUgdGhlIGNoYW5nZXMgdW50aWwgdGhleSBhcmUgY29tbWl0dGVkLgogKgogKiBXaGVuIGluc2VydGluZyBvciB1cGRhdGluZyBkYXRhLCB1c2luZyB0cmFuc2FjdGlvbnMgaXMgcmVjb21tZW5kZWQKICogZm9yIHJlbGF0aW9uYWwgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiBvY2lfY29ubmVjdCwgb2NpX3Bjb25uZWN0CiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfcm9sbGJhY2soJGNvbm5lY3Rpb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3JvbGxiYWNrKCRjb25uZWN0aW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgT3JhY2xlIERhdGFiYXNlIHZlcnNpb24gYW5kIGF2YWlsYWJsZSBvcHRpb25zCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXJ2ZXJfdmVyc2lvbigkY29ubmVjdGlvbik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXJ2ZXJfdmVyc2lvbigkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGFjdGlvbiBuYW1lIGZvciBPcmFjbGUgdHJhY2luZy4KICoKICogVGhlIGFjdGlvbiBuYW1lIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGF0YWJhc2Ugd2hlbiB0aGUgbmV4dAogKiAncm91bmQtdHJpcCcgZnJvbSBQSFAgdG8gdGhlIGRhdGFiYXNlIG9jY3VycywgdHlwaWNhbGx5IHdoZW4gYW4gU1FMCiAqIHN0YXRlbWVudCBpcyBleGVjdXRlZC4KICoKICogVGhlIGFjdGlvbiBuYW1lIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLiAgSXQgY2FuIGJlIHVzZWQgZm9yCiAqIHRyYWNpbmcgYW5kIG1vbml0b3Jpbmcgc3VjaCBhcyB3aXRoIFYkU1FMQVJFQQogKiBhbmQgREJNU19NT05JVE9SLlNFUlZfTU9EX0FDVF9TVEFUX0VOQUJMRS4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkYWN0aW9uX25hbWUgVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDMyIGJ5dGVzIGxvbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9hY3Rpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkYWN0aW9uX25hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9hY3Rpb24oJGNvbm5lY3Rpb24sICRhY3Rpb25fbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGEgdGltZW91dCBsaW1pdGluZyB0aGUgbWF4aXVtIHRpbWUgYSBkYXRhYmFzZSByb3VuZC10cmlwIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBtYXkgdGFrZS4KICoKICogRWFjaCBPQ0k4IG9wZXJhdGlvbiBtYXkgbWFrZSB6ZXJvIG9yIG1vcmUgY2FsbHMgdG8gT3JhY2xlJ3MgY2xpZW50CiAqIGxpYnJhcnkuICBUaGVzZSBpbnRlcm5hbCBjYWxscyBtYXkgdGhlbiBtYXkgbWFrZSB6ZXJvIG9yIG1vcmUKICogcm91bmQtdHJpcHMgdG8gT3JhY2xlIERhdGFiYXNlLiAgSWYgYW55IG9uZSBvZiB0aG9zZSByb3VuZC10cmlwcwogKiB0YWtlcyBtb3JlIHRoYW4gdGltZV9vdXQgbWlsbGlzZWNvbmRzLCB0aGVuIHRoZQogKiBvcGVyYXRpb24gaXMgY2FuY2VsbGVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24uCiAqCiAqIFRoZSB0aW1lX291dCB2YWx1ZSBhcHBsaWVzIHRvIGVhY2ggcm91bmQtdHJpcAogKiBpbmRpdmlkdWFsbHksIG5vdCB0byB0aGUgc3VtIG9mIGFsbCByb3VuZC10cmlwcy4gIFRpbWUgc3BlbnQKICogcHJvY2Vzc2luZyBpbiBQSFAgT0NJOCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgZWFjaAogKiByb3VuZC10cmlwIGlzIG5vdCBjb3VudGVkLgogKgogKiBXaGVuIGEgY2FsbCBpcyBpbnRlcnJ1cHRlZCwgT3JhY2xlIHdpbGwgYXR0ZW1wdCB0byBjbGVhbiB1cCB0aGUKICogY29ubmVjdGlvbiBmb3IgcmV1c2UuICBUaGlzIG9wZXJhdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBmb3IKICogYW5vdGhlciB0aW1lX291dCBwZXJpb2QuICBEZXBlbmRpbmcgb24gdGhlCiAqIG91dGNvbWUgb2YgdGhlIGNsZWFudXAsIHRoZSBjb25uZWN0aW9uIG1heSBvciBtYXkgbm90IGJlIHJldXNhYmxlLgogKgogKiBXaGVuIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXJlIHVzZWQsIHRoZSB0aW1lb3V0IHZhbHVlIHdpbGwgYmUKICogcmV0YWluZWQgYWNyb3NzIFBIUCByZXF1ZXN0cy4KICoKICogVGhlIG9jaV9zZXRfY2FsbF90aW1lb3V0IGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQogKiB3aGVuIE9DSTggdXNlcyBPcmFjbGUgMTggKG9yIGxhdGVyKSBDbGllbnQgbGlicmFyaWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogcmV0dXJuZWQgYnkgb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAcGFyYW0gaW50ICR0aW1lX291dCBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGFueSBzaW5nbGUgcm91bmQtdHJpcCBiZXR3ZWVuIFBIUCBhbmQgT3JhY2xlIERhdGFiYXNlIG1heSB0YWtlLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXRfY2FsbF90aW1lb3V0KCRjb25uZWN0aW9uLCBpbnQgJHRpbWVfb3V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfY2FsbF90aW1lb3V0KCRjb25uZWN0aW9uLCAkdGltZV9vdXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY2xpZW50IGlkZW50aWZpZXIgdXNlZCBieSB2YXJpb3VzIGRhdGFiYXNlIGNvbXBvbmVudHMgdG8KICogaWRlbnRpZnkgbGlnaHR3ZWlnaHQgYXBwbGljYXRpb24gdXNlcnMgd2hvIGF1dGhlbnRpY2F0ZSBhcyB0aGUgc2FtZQogKiBkYXRhYmFzZSB1c2VyLgogKgogKiBUaGUgY2xpZW50IGlkZW50aWZpZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXRhYmFzZSB3aGVuIHRoZSBuZXh0CiAqICdyb3VuZC10cmlwJyBmcm9tIFBIUCB0byB0aGUgZGF0YWJhc2Ugb2NjdXJzLCB0eXBpY2FsbHkgd2hlbiBhbiBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgaWRlbnRpZmllciBjYW4gc3Vic2VxdWVudGx5IGJlIHF1ZXJpZWQsIGZvciBleGFtcGxlCiAqIHdpdGggU0VMRUNUIFNZU19DT05URVhUKCdVU0VSRU5WJywnQ0xJRU5UX0lERU5USUZJRVInKQogKiBGUk9NIERVQUwuICBEYXRhYmFzZSBhZG1pbmlzdHJhdGlvbiB2aWV3cyBzdWNoCiAqIGFzIFYkU0VTU0lPTiB3aWxsIGFsc28gY29udGFpbiB0aGUgdmFsdWUuICBJdAogKiBjYW4gYmUgdXNlZCB3aXRoIERCTVNfTU9OSVRPUi5DTElFTlRfSURfVFJBQ0VfRU5BQkxFCiAqIGZvciB0cmFjaW5nIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhdWRpdGluZy4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGFnZSByZXF1ZXN0cyB0aGF0IHVzZSB0aGUgc2FtZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiByZXR1cm5lZCBieSBvY2lfY29ubmVjdCwgb2NpX3Bjb25uZWN0LAogKiBvciBvY2lfbmV3X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGNsaWVudF9pZGVudGlmaWVyIFVzZXIgY2hvc2VuIHN0cmluZyB1cCB0byA2NCBieXRlcyBsb25nLgogKiBAdGhyb3dzIE9jaThFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXIoJGNvbm5lY3Rpb24sIHN0cmluZyAkY2xpZW50X2lkZW50aWZpZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9jbGllbnRfaWRlbnRpZmllcigkY29ubmVjdGlvbiwgJGNsaWVudF9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGNsaWVudCBpbmZvcm1hdGlvbiBmb3IgT3JhY2xlIHRyYWNpbmcuCiAqCiAqIFRoZSBjbGllbnQgaW5mb3JtYXRpb24gaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXRhYmFzZSB3aGVuIHRoZSBuZXh0CiAqICdyb3VuZC10cmlwJyBmcm9tIFBIUCB0byB0aGUgZGF0YWJhc2Ugb2NjdXJzLCB0eXBpY2FsbHkgd2hlbiBhbiBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgY2xpZW50IGluZm9ybWF0aW9uIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlCiAqIGFkbWluaXN0cmF0aW9uIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLgogKgogKiBUaGUgdmFsdWUgbWF5IGJlIHJldGFpbmVkIGFjcm9zcyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogcmV0dXJuZWQgYnkgb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdCwKICogb3Igb2NpX25ld19jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfaW5mbyBVc2VyIGNob3NlbiBzdHJpbmcgdXAgdG8gNjQgYnl0ZXMgbG9uZy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2NsaWVudF9pbmZvKCRjb25uZWN0aW9uLCBzdHJpbmcgJGNsaWVudF9pbmZvKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfY2xpZW50X2luZm8oJGNvbm5lY3Rpb24sICRjbGllbnRfaW5mbyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBEQk9QIGZvciBPcmFjbGUgdHJhY2luZy4KICoKICogVGhlIGRhdGFiYXNlIG9wZXJhdGlvbiBuYW1lIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGF0YWJhc2Ugd2hlbiB0aGUgbmV4dAogKiAncm91bmQtdHJpcCcgZnJvbSBQSFAgdG8gdGhlIGRhdGFiYXNlIG9jY3VycywgdHlwaWNhbGx5IHdoZW4gYSBTUUwKICogc3RhdGVtZW50IGlzIGV4ZWN1dGVkLgogKgogKiBUaGUgZGF0YWJhc2Ugb3BlcmF0aW9uIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTUUxfTU9OSVRPUi4KICoKICogVGhlIG9jaV9zZXRfZGJfb3BlcmF0aW9uIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQogKiB3aGVuIE9DSTggdXNlcyBPcmFjbGUgMTIgKG9yIGxhdGVyKSBDbGllbnQgbGlicmFyaWVzIGFuZCBPcmFjbGUgRGF0YWJhc2UgMTIgKG9yIGxhdGVyKS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGJvcCBVc2VyIGNob3NlbiBzdHJpbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9kYl9vcGVyYXRpb24oJGNvbm5lY3Rpb24sIHN0cmluZyAkZGJvcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfc2V0X2RiX29wZXJhdGlvbigkY29ubmVjdGlvbiwgJGRib3ApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgZGF0YWJhc2UgImVkaXRpb24iIG9mIG9iamVjdHMgdG8gYmUgdXNlZCBieSBhIHN1YnNlcXVlbnQKICogY29ubmVjdGlvbnMuCiAqCiAqIE9yYWNsZSBFZGl0aW9ucyBhbGxvdyBjb25jdXJyZW50IHZlcnNpb25zIG9mIGFwcGxpY2F0aW9ucyB0byBydW4KICogdXNpbmcgdGhlIHNhbWUgc2NoZW1hIGFuZCBvYmplY3QgbmFtZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IKICogdXBncmFkaW5nIGxpdmUgc3lzdGVtcy4KICoKICogQ2FsbCBvY2lfc2V0X2VkaXRpb24gYmVmb3JlIGNhbGxpbmcKICogb2NpX2Nvbm5lY3QsIG9jaV9wY29ubmVjdAogKiBvciBvY2lfbmV3X2Nvbm5lY3QuCiAqCiAqIElmIGFuIGVkaXRpb24gaXMgc2V0IHRoYXQgaXMgbm90IHZhbGlkIGluIHRoZSBkYXRhYmFzZSwgY29ubmVjdGlvbgogKiB3aWxsIGZhaWwgZXZlbiBpZiBvY2lfc2V0X2VkaXRpb24gcmV0dXJucyBzdWNjZXNzLgogKgogKiBXaGVuIHVzaW5nIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIGlmIGEgY29ubmVjdGlvbiB3aXRoIHRoZQogKiByZXF1ZXN0ZWQgZWRpdGlvbiBzZXR0aW5nIGFscmVhZHkgZXhpc3RzLCBpdCBpcyByZXVzZWQuICBPdGhlcndpc2UsCiAqIGEgZGlmZmVyZW50IHBlcnNpc3RlbnQgY29ubmVjdGlvbiBpcyBjcmVhdGVkCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVkaXRpb24gT3JhY2xlIERhdGFiYXNlIGVkaXRpb24gbmFtZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCB0aGUgU1FMCiAqICJDUkVBVEUgRURJVElPTiIgY29tbWFuZC4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2VkaXRpb24oc3RyaW5nICRlZGl0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zZXRfZWRpdGlvbigkZWRpdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBtb2R1bGUgbmFtZSBmb3IgT3JhY2xlIHRyYWNpbmcuCiAqCiAqIFRoZSBtb2R1bGUgbmFtZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGRhdGFiYXNlIHdoZW4gdGhlIG5leHQKICogJ3JvdW5kLXRyaXAnIGZyb20gUEhQIHRvIHRoZSBkYXRhYmFzZSBvY2N1cnMsIHR5cGljYWxseSB3aGVuIGFuIFNRTAogKiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuCiAqCiAqIFRoZSBuYW1lIGNhbiBzdWJzZXF1ZW50bHkgYmUgcXVlcmllZCBmcm9tIGRhdGFiYXNlIGFkbWluaXN0cmF0aW9uCiAqIHZpZXdzIHN1Y2ggYXMgViRTRVNTSU9OLiAgSXQgY2FuIGJlIHVzZWQgZm9yCiAqIHRyYWNpbmcgYW5kIG1vbml0b3Jpbmcgc3VjaCBhcyB3aXRoIFYkU1FMQVJFQQogKiBhbmQgREJNU19NT05JVE9SLlNFUlZfTU9EX0FDVF9TVEFUX0VOQUJMRS4KICoKICogVGhlIHZhbHVlIG1heSBiZSByZXRhaW5lZCBhY3Jvc3MgcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IG9jaV9jb25uZWN0LCBvY2lfcGNvbm5lY3QsCiAqIG9yIG9jaV9uZXdfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUgVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDQ4IGJ5dGVzIGxvbmcuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9tb2R1bGVfbmFtZSgkY29ubmVjdGlvbiwgc3RyaW5nICRtb2R1bGVfbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvY2lfc2V0X21vZHVsZV9uYW1lKCRjb25uZWN0aW9uLCAkbW9kdWxlX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT2NpOEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbnVtYmVyIG9mIHJvd3MgdG8gYmUgYnVmZmVyZWQgYnkgdGhlIE9yYWNsZSBDbGllbnQKICogbGlicmFyaWVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBxdWVyeSBjYWxsCiAqIHRvIG9jaV9leGVjdXRlIGFuZCBmb3IgZWFjaCBzdWJzZXF1ZW50CiAqIGludGVybmFsIGZldGNoIHJlcXVlc3QgdG8gdGhlIGRhdGFiYXNlLiAgRm9yIHF1ZXJpZXMgcmV0dXJuaW5nIGEKICogbGFyZ2UgbnVtYmVyIG9mIHJvd3MsIHBlcmZvcm1hbmNlIGNhbiBiZSBzaWduaWZpY2FudGx5IGltcHJvdmVkIGJ5CiAqIGluY3JlYXNpbmcgdGhlIHByZWZldGNoIGNvdW50IGFib3ZlIHRoZQogKiBkZWZhdWx0IG9jaTguZGVmYXVsdF9wcmVmZXRjaAogKiB2YWx1ZS4KICoKICogUHJlZmV0Y2hpbmcgaXMgT3JhY2xlJ3MgZWZmaWNpZW50IHdheSBvZiByZXR1cm5pbmcgbW9yZSB0aGFuIG9uZQogKiBkYXRhIHJvdyBmcm9tIHRoZSBkYXRhYmFzZSBpbiBlYWNoIG5ldHdvcmsgcmVxdWVzdC4gIFRoaXMgY2FuCiAqIHJlc3VsdCBpbiBiZXR0ZXIgbmV0d29yayBhbmQgQ1BVIHV0aWxpemF0aW9uLiAgVGhlIGJ1ZmZlcmluZyBvZgogKiByb3dzIGlzIGludGVybmFsIHRvIE9DSTggYW5kIHRoZSBiZWhhdmlvciBvZiBPQ0k4IGZldGNoaW5nCiAqIGZ1bmN0aW9ucyBpcyB1bmNoYW5nZWQgcmVnYXJkbGVzcyBvZiB0aGUgcHJlZmV0Y2ggY291bnQuIEZvcgogKiBleGFtcGxlLCBvY2lfZmV0Y2hfcm93IHdpbGwgYWx3YXlzIHJldHVybiBvbmUKICogcm93LiAgVGhlIHByZWZldGNoIGJ1ZmZlciBpcyBwZXItc3RhdGVtZW50IGFuZCBpcyBub3QgdXNlZCBieQogKiByZS1leGVjdXRlZCBzdGF0ZW1lbnRzIG9yIGJ5IG90aGVyIGNvbm5lY3Rpb25zLgogKgogKiBDYWxsIG9jaV9zZXRfcHJlZmV0Y2ggYmVmb3JlCiAqIGNhbGxpbmcgb2NpX2V4ZWN1dGUuCiAqCiAqIEEgdHVuaW5nIGdvYWwgaXMgdG8gc2V0IHRoZSBwcmVmZXRjaCB2YWx1ZSB0byBhIHJlYXNvbmFibGUgc2l6ZSBmb3IKICogdGhlIG5ldHdvcmsgYW5kIGRhdGFiYXNlIHRvIGhhbmRsZS4gIEZvciBxdWVyaWVzIHJldHVybmluZyBhIHZlcnkKICogbGFyZ2UgbnVtYmVyIG9mIHJvd3MsIG92ZXJhbGwgc3lzdGVtIGVmZmljaWVuY3kgbWlnaHQgYmUgYmV0dGVyIGlmCiAqIHJvd3MgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZSBpbiBzZXZlcmFsIGNodW5rcyAoaS5lIHNldCB0aGUKICogcHJlZmV0Y2ggdmFsdWUgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2Ygcm93cykuICBUaGlzIGFsbG93cyB0aGUKICogZGF0YWJhc2UgdG8gaGFuZGxlIG90aGVyIHVzZXJzJyBzdGF0ZW1lbnRzIHdoaWxlIHRoZSBQSFAgc2NyaXB0IGlzCiAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgc2V0IG9mIHJvd3MuCiAqCiAqIFF1ZXJ5IHByZWZldGNoaW5nIHdhcyBpbnRyb2R1Y2VkIGluIE9yYWNsZSA4aS4gIFJFRiBDVVJTT1IKICogcHJlZmV0Y2hpbmcgd2FzIGludHJvZHVjZWQgaW4gT3JhY2xlIDExZ1IyIGFuZCBvY2N1cnMgd2hlbiBQSFAgaXMKICogbGlua2VkIHdpdGggT3JhY2xlIDExZ1IyIChvciBsYXRlcikgQ2xpZW50IGxpYnJhcmllcy4KICogTmVzdGVkIGN1cnNvciBwcmVmZXRjaGluZyB3YXMKICogaW50cm9kdWNlZCBpbiBPcmFjbGUgMTFnUjIgYW5kIHJlcXVpcmVzIGJvdGggdGhlIE9yYWNsZSBDbGllbnQKICogbGlicmFyaWVzIGFuZCB0aGUgZGF0YWJhc2UgdG8gYmUgdmVyc2lvbiAxMWdSMiBvciBncmVhdGVyLgogKgogKiBQcmVmZXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcXVlcmllcyBjb250YWluIExPTkcgb3IgTE9CCiAqIGNvbHVtbnMuICBUaGUgcHJlZmV0Y2ggdmFsdWUgaXMgaWdub3JlZCBhbmQgc2luZ2xlLXJvdyBmZXRjaGVzIHdpbGwKICogYmUgdXNlZCBpbiBhbGwgdGhlIHNpdHVhdGlvbnMgd2hlbiBwcmVmZXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkLgogKgogKiBXaGVuIHVzaW5nIE9yYWNsZSBEYXRhYmFzZSAxMmMsIHRoZSBwcmVmZXRjaAogKiB2YWx1ZSBzZXQgYnkgUEhQIGNhbiBiZSBvdmVycmlkZGVuIGJ5IE9yYWNsZSdzCiAqIGNsaWVudCBvcmFhY2Nlc3MueG1sIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFJlZmVyCiAqIHRvIE9yYWNsZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgQSB2YWxpZCBPQ0k4IHN0YXRlbWVudAogKiBpZGVudGlmaWVyIGNyZWF0ZWQgYnkgb2NpX3BhcnNlIGFuZCBleGVjdXRlZAogKiBieSBvY2lfZXhlY3V0ZSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRyb3dzIFRoZSBudW1iZXIgb2Ygcm93cyB0byBiZSBwcmVmZXRjaGVkLCAmZ3Q7PSAwCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3NldF9wcmVmZXRjaCgkc3RhdGVtZW50LCBpbnQgJHJvd3MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2NpX3NldF9wcmVmZXRjaCgkc3RhdGVtZW50LCAkcm93cyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGEga2V5d29yZCBpZGVudGlmeWluZyB0aGUgdHlwZSBvZiB0aGUKICogT0NJOCBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQgaWRlbnRpZmllciBmcm9tIG9jaV9wYXJzZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgdHlwZSBvZiBzdGF0ZW1lbnQgYXMgb25lIG9mIHRoZQogKiBmb2xsb3dpbmcgc3RyaW5ncy4KICoKICogU3RhdGVtZW50IHR5cGUKICoKICoKICoKICogUmV0dXJuIFN0cmluZwogKiBOb3RlcwogKgogKgogKgogKgogKiBBTFRFUgogKgogKgogKgogKiBCRUdJTgogKgogKgogKgogKiBDQUxMCiAqIEludHJvZHVjZWQgaW4gUEhQIDUuMi4xIChQRUNMIE9DSTggMS4yLjMpCiAqCiAqCiAqIENSRUFURQogKgogKgogKgogKiBERUNMQVJFCiAqCiAqCiAqCiAqIERFTEVURQogKgogKgogKgogKiBEUk9QCiAqCiAqCiAqCiAqIElOU0VSVAogKgogKgogKgogKiBTRUxFQ1QKICoKICoKICoKICogVVBEQVRFCiAqCiAqCiAqCiAqIFVOS05PVy4KICogQHRocm93cyBPY2k4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvY2lfc3RhdGVtZW50X3R5cGUoJHN0YXRlbWVudCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV9zdGF0ZW1lbnRfdHlwZSgkc3RhdGVtZW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9jaThFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVW5yZWdpc3RlciB0aGUgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gY29ubmVjdGlvbgogKiBieSBvY2lfcmVnaXN0ZXJfdGFmX2NhbGxiYWNrLiBTZWUKICogT0NJOCBUcmFuc3BhcmVudCBBcHBsaWNhdGlvbiBGYWlsb3ZlciAoVEFGKSBTdXBwb3J0CiAqIGZvciBpbmZvcm1hdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCiAqIEB0aHJvd3MgT2NpOEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2NpX3VucmVnaXN0ZXJfdGFmX2NhbGxiYWNrKCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaygkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPY2k4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/opcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPcGNhY2hlRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY29tcGlsZXMgYSBQSFAgc2NyaXB0IGFuZCBhZGRzIGl0IHRvIHRoZSBvcGNvZGUgY2FjaGUgd2l0aG91dAogKiBleGVjdXRpbmcgaXQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbWUgdGhlIGNhY2hlIGFmdGVyIGEgV2ViIHNlcnZlcgogKiByZXN0YXJ0IGJ5IHByZS1jYWNoaW5nIGZpbGVzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiBsYXRlciByZXF1ZXN0cy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgcGF0aCB0byB0aGUgUEhQIHNjcmlwdCB0byBiZSBjb21waWxlZC4KICogQHRocm93cyBPcGNhY2hlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGNhY2hlX2NvbXBpbGVfZmlsZShzdHJpbmcgJGZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BjYWNoZV9jb21waWxlX2ZpbGUoJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BjYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZSBpbnN0YW5jZQogKgogKiBAcGFyYW0gYm9vbCAkZ2V0X3NjcmlwdHMgSW5jbHVkZSBzY3JpcHQgc3BlY2lmaWMgc3RhdGUgaW5mb3JtYXRpb24KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uLCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgc2NyaXB0IHNwZWNpZmljIHN0YXRlIGluZm9ybWF0aW9uLgogKiBAdGhyb3dzIE9wY2FjaGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wY2FjaGVfZ2V0X3N0YXR1cyhib29sICRnZXRfc2NyaXB0cyA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wY2FjaGVfZ2V0X3N0YXR1cygkZ2V0X3NjcmlwdHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BjYWNoZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/openssl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPcGVuc3NsRXhjZXB0aW9uOwoKLyoqCiAqIEdldHMgdGhlIGNpcGhlciBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKGl2KSBsZW5ndGguCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZCwgc2VlIG9wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzIGZvciBhIGxpc3Qgb2YgcG90ZW50aWFsIHZhbHVlcy4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgY2lwaGVyIGxlbmd0aCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aChzdHJpbmcgJG1ldGhvZCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkbWV0aG9kKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUgdGFrZXMgdGhlIENlcnRpZmljYXRlCiAqIFNpZ25pbmcgUmVxdWVzdCByZXByZXNlbnRlZCBieSBjc3IgYW5kIHNhdmVzIGl0CiAqIGluIFBFTSBmb3JtYXQgaW50byB0aGUgZmlsZSBuYW1lZCBieSBvdXRmaWxlbmFtZS4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkY3NyIFNlZSBDU1IgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUoJGNzciwgc3RyaW5nICRvdXRmaWxlbmFtZSwgYm9vbCAkbm90ZXh0ID0gdHJ1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZSgkY3NyLCAkb3V0ZmlsZW5hbWUsICRub3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZXhwb3J0IHRha2VzIHRoZSBDZXJ0aWZpY2F0ZSBTaWduaW5nCiAqIFJlcXVlc3QgcmVwcmVzZW50ZWQgYnkgY3NyIGFuZCBzdG9yZXMgaXQgaW4KICogUEVNIGZvcm1hdCBpbiBvdXQsIHdoaWNoIGlzIHBhc3NlZCBieQogKiByZWZlcmVuY2UuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGNzciBTZWUgQ1NSIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3V0IG9uIHN1Y2Nlc3MsIHRoaXMgc3RyaW5nIHdpbGwgY29udGFpbiB0aGUgUEVNIGVuY29kZWQgQ1NSCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZXhwb3J0KCRjc3IsID9zdHJpbmcgJiRvdXQsIGJvb2wgJG5vdGV4dCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9jc3JfZXhwb3J0KCRjc3IsICRvdXQsICRub3RleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QgcmV0dXJucyBzdWJqZWN0CiAqIGRpc3Rpbmd1aXNoZWQgbmFtZSBpbmZvcm1hdGlvbiBlbmNvZGVkIGluIHRoZSBjc3IKICogaW5jbHVkaW5nIGZpZWxkcyBjb21tb25OYW1lIChDTiksIG9yZ2FuaXphdGlvbk5hbWUgKE8pLCBjb3VudHJ5TmFtZSAoQykgZXRjLgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICRjc3IgU2VlIENTUiBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gYm9vbCAkdXNlX3Nob3J0bmFtZXMgc2hvcnRuYW1lcyBjb250cm9scyBob3cgdGhlIGRhdGEgaXMgaW5kZXhlZCBpbiB0aGUKICogYXJyYXkgLSBpZiBzaG9ydG5hbWVzIGlzIFRSVUUgKHRoZSBkZWZhdWx0KSB0aGVuCiAqIGZpZWxkcyB3aWxsIGJlIGluZGV4ZWQgd2l0aCB0aGUgc2hvcnQgbmFtZSBmb3JtLCBvdGhlcndpc2UsIHRoZSBsb25nIG5hbWUKICogZm9ybSB3aWxsIGJlIHVzZWQgLSBlLmcuOiBDTiBpcyB0aGUgc2hvcnRuYW1lIGZvcm0gb2YgY29tbW9uTmFtZS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggc3ViamVjdCBkZXNjcmlwdGlvbi4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdCgkY3NyLCBib29sICR1c2Vfc2hvcnRuYW1lcyA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0KCRjc3IsICR1c2Vfc2hvcnRuYW1lcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfY3NyX25ldyBnZW5lcmF0ZXMgYSBuZXcgQ1NSIChDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QpCiAqIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBkbi4KICoKICogQHBhcmFtIGFycmF5ICRkbiBUaGUgRGlzdGluZ3Vpc2hlZCBOYW1lIG9yIHN1YmplY3QgZmllbGRzIHRvIGJlIHVzZWQgaW4gdGhlIGNlcnRpZmljYXRlLgogKiBAcGFyYW0gcmVzb3VyY2UgJHByaXZrZXkgcHJpdmtleSBzaG91bGQgYmUgc2V0IHRvIGEgcHJpdmF0ZSBrZXkgdGhhdCB3YXMKICogcHJldmlvdXNseSBnZW5lcmF0ZWQgYnkgb3BlbnNzbF9wa2V5X25ldyAob3IKICogb3RoZXJ3aXNlIG9idGFpbmVkIGZyb20gdGhlIG90aGVyIG9wZW5zc2xfcGtleSBmYW1pbHkgb2YgZnVuY3Rpb25zKS4KICogVGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIHBvcnRpb24gb2YgdGhlIGtleSB3aWxsIGJlIHVzZWQgdG8gc2lnbiB0aGUKICogQ1NSLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgQnkgZGVmYXVsdCwgdGhlIGluZm9ybWF0aW9uIGluIHlvdXIgc3lzdGVtIG9wZW5zc2wuY29uZgogKiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHJlcXVlc3Q7IHlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBzZWN0aW9uIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ19zZWN0aW9uX3NlY3Rpb24ga2V5IG9mCiAqIGNvbmZpZ2FyZ3MuICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZQogKiBvcGVuc3NsIGNvbmZpZ3VyYXRpb24gZmlsZSBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUKICogY29uZmlnIGtleSB0byB0aGUgcGF0aCBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byB1c2UuCiAqIFRoZSBmb2xsb3dpbmcga2V5cywgaWYgcHJlc2VudCBpbiBjb25maWdhcmdzCiAqIGJlaGF2ZSBhcyB0aGVpciBlcXVpdmFsZW50cyBpbiB0aGUgb3BlbnNzbC5jb25mLCBhcwogKiBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LgogKgogKiBDb25maWd1cmF0aW9uIG92ZXJyaWRlcwogKgogKgogKgogKiBjb25maWdhcmdzIGtleQogKiB0eXBlCiAqIG9wZW5zc2wuY29uZiBlcXVpdmFsZW50CiAqIGRlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIGRpZ2VzdF9hbGcKICogc3RyaW5nCiAqIGRlZmF1bHRfbWQKICogRGlnZXN0IG1ldGhvZCBvciBzaWduYXR1cmUgaGFzaCwgdXN1YWxseSBvbmUgb2Ygb3BlbnNzbF9nZXRfbWRfbWV0aG9kcwogKgogKgogKiB4NTA5X2V4dGVuc2lvbnMKICogc3RyaW5nCiAqIHg1MDlfZXh0ZW5zaW9ucwogKiBTZWxlY3RzIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiB4NTA5CiAqIGNlcnRpZmljYXRlCiAqCiAqCiAqIHJlcV9leHRlbnNpb25zCiAqIHN0cmluZwogKiByZXFfZXh0ZW5zaW9ucwogKiBTZWxlY3RzIHdoaWNoIGV4dGVuc2lvbnMgc2hvdWxkIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIENTUgogKgogKgogKiBwcml2YXRlX2tleV9iaXRzCiAqIGludGVnZXIKICogZGVmYXVsdF9iaXRzCiAqIFNwZWNpZmllcyBob3cgbWFueSBiaXRzIHNob3VsZCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcHJpdmF0ZQogKiBrZXkKICoKICoKICogcHJpdmF0ZV9rZXlfdHlwZQogKiBpbnRlZ2VyCiAqIG5vbmUKICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHByaXZhdGUga2V5IHRvIGNyZWF0ZS4gIFRoaXMgY2FuIGJlIG9uZQogKiBvZiBPUEVOU1NMX0tFWVRZUEVfRFNBLAogKiBPUEVOU1NMX0tFWVRZUEVfREgsCiAqIE9QRU5TU0xfS0VZVFlQRV9SU0Egb3IKICogT1BFTlNTTF9LRVlUWVBFX0VDLgogKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBPUEVOU1NMX0tFWVRZUEVfUlNBLgogKgogKgogKgogKiBlbmNyeXB0X2tleQogKiBib29sZWFuCiAqIGVuY3J5cHRfa2V5CiAqIFNob3VsZCBhbiBleHBvcnRlZCBrZXkgKHdpdGggcGFzc3BocmFzZSkgYmUgZW5jcnlwdGVkPwogKgogKgogKiBlbmNyeXB0X2tleV9jaXBoZXIKICogaW50ZWdlcgogKiBub25lCiAqCiAqIE9uZSBvZiBjaXBoZXIgY29uc3RhbnRzLgogKgogKgogKgogKiBjdXJ2ZV9uYW1lCiAqIHN0cmluZwogKiBub25lCiAqCiAqIE9uZSBvZiBvcGVuc3NsX2dldF9jdXJ2ZV9uYW1lcy4KICoKICoKICoKICogY29uZmlnCiAqIHN0cmluZwogKiBOL0EKICoKICogUGF0aCB0byB5b3VyIG93biBhbHRlcm5hdGl2ZSBvcGVuc3NsLmNvbmYgZmlsZS4KICoKICoKICoKICoKICoKICogQHBhcmFtIGFycmF5ICRleHRyYWF0dHJpYnMgZXh0cmFhdHRyaWJzIGlzIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsCiAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENTUi4gIEJvdGggZG4gYW5kCiAqIGV4dHJhYXR0cmlicyBhcmUgYXNzb2NpYXRpdmUgYXJyYXlzIHdob3NlIGtleXMgYXJlCiAqIGNvbnZlcnRlZCB0byBPSURzIGFuZCBhcHBsaWVkIHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgdGhlIENTUi4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9uZXcoYXJyYXkgJGRuLCAmJHByaXZrZXksIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCwgYXJyYXkgJGV4dHJhYXR0cmlicyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXh0cmFhdHRyaWJzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9uZXcoJGRuLCAkcHJpdmtleSwgJGNvbmZpZ2FyZ3MsICRleHRyYWF0dHJpYnMpOwogICAgfSBlbHNlaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX2Nzcl9uZXcoJGRuLCAkcHJpdmtleSwgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX25ldygkZG4sICRwcml2a2V5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9jc3Jfc2lnbiBnZW5lcmF0ZXMgYW4geDUwOSBjZXJ0aWZpY2F0ZQogKiByZXNvdXJjZSBmcm9tIHRoZSBnaXZlbiBDU1IuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGNzciBBIENTUiBwcmV2aW91c2x5IGdlbmVyYXRlZCBieSBvcGVuc3NsX2Nzcl9uZXcuCiAqIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXRoIHRvIGEgUEVNIGVuY29kZWQgQ1NSIHdoZW4gc3BlY2lmaWVkIGFzCiAqIGZpbGU6Ly9wYXRoL3RvL2NzciBvciBhbiBleHBvcnRlZCBzdHJpbmcgZ2VuZXJhdGVkCiAqIGJ5IG9wZW5zc2xfY3NyX2V4cG9ydC4KICogQHBhcmFtIG1peGVkICRjYWNlcnQgVGhlIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHNpZ25lZCBieSBjYWNlcnQuCiAqIElmIGNhY2VydCBpcyBOVUxMLCB0aGUgZ2VuZXJhdGVkIGNlcnRpZmljYXRlCiAqIHdpbGwgYmUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZXxhcnJheSAkcHJpdl9rZXkgcHJpdl9rZXkgaXMgdGhlIHByaXZhdGUga2V5IHRoYXQgY29ycmVzcG9uZHMgdG8KICogY2FjZXJ0LgogKiBAcGFyYW0gaW50ICRkYXlzIGRheXMgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZSBmb3Igd2hpY2ggdGhlCiAqIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHZhbGlkLCBpbiBkYXlzLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgWW91IGNhbiBmaW5ldHVuZSB0aGUgQ1NSIHNpZ25pbmcgYnkgY29uZmlnYXJncy4KICogU2VlIG9wZW5zc2xfY3NyX25ldyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAogKiBjb25maWdhcmdzLgogKiBAcGFyYW0gaW50ICRzZXJpYWwgQW4gb3B0aW9uYWwgdGhlIHNlcmlhbCBudW1iZXIgb2YgaXNzdWVkIGNlcnRpZmljYXRlLiBJZiBub3Qgc3BlY2lmaWVkCiAqIGl0IHdpbGwgZGVmYXVsdCB0byAwLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4geDUwOSBjZXJ0aWZpY2F0ZSByZXNvdXJjZSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCBpbnQgJGRheXMsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCwgaW50ICRzZXJpYWwgPSAwKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHNlcmlhbCAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9jc3Jfc2lnbigkY3NyLCAkY2FjZXJ0LCAkcHJpdl9rZXksICRkYXlzLCAkY29uZmlnYXJncywgJHNlcmlhbCk7CiAgICB9IGVsc2VpZiAoJGNvbmZpZ2FyZ3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCAkZGF5cywgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfY3NyX3NpZ24oJGNzciwgJGNhY2VydCwgJHByaXZfa2V5LCAkZGF5cyk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRha2VzIGEgcmF3IG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhbmQgZGVjcnlwdHMgaXQgdXNpbmcgYSBnaXZlbiBtZXRob2QgYW5kIGtleS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UgdG8gYmUgZGVjcnlwdGVkLgogKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIGNpcGhlciBtZXRob2QuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNpcGhlciBtZXRob2RzLCB1c2UKICogb3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHMuCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5LgogKiBAcGFyYW0gaW50ICRvcHRpb25zIG9wdGlvbnMgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1JBV19EQVRBLAogKiBPUEVOU1NMX1pFUk9fUEFERElORy4KICogQHBhcmFtIHN0cmluZyAkaXYgQSBub24tTlVMTCBJbml0aWFsaXphdGlvbiBWZWN0b3IuCiAqIEBwYXJhbSBzdHJpbmcgJHRhZyBUaGUgYXV0aGVudGljYXRpb24gdGFnIGluIEFFQUQgY2lwaGVyIG1vZGUuIElmIGl0IGlzIGluY29ycmVjdCwgdGhlIGF1dGhlbnRpY2F0aW9uIGZhaWxzIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBGQUxTRS4KICogQHBhcmFtIHN0cmluZyAkYWFkIEFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS4KICogQHJldHVybiBzdHJpbmcgVGhlIGRlY3J5cHRlZCBzdHJpbmcgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2RlY3J5cHQoc3RyaW5nICRkYXRhLCBzdHJpbmcgJG1ldGhvZCwgc3RyaW5nICRrZXksIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkaXYgPSAiIiwgc3RyaW5nICR0YWcgPSAiIiwgc3RyaW5nICRhYWQgPSAiIik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZGVjcnlwdCgkZGF0YSwgJG1ldGhvZCwgJGtleSwgJG9wdGlvbnMsICRpdiwgJHRhZywgJGFhZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzaGFyZWQgc2VjcmV0IHJldHVybmVkIGJ5IG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkgaXMKICogb2Z0ZW4gdXNlZCBhcyBhbiBlbmNyeXB0aW9uIGtleSB0byBzZWNyZXRseSBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIHBhcnR5LgogKiBUaGlzIGlzIGtub3duIGFzIHRoZSBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHB1Yl9rZXkgREggUHVibGljIGtleSBvZiB0aGUgcmVtb3RlIHBhcnR5LgogKiBAcGFyYW0gcmVzb3VyY2UgJGRoX2tleSBBIGxvY2FsIERIIHByaXZhdGUga2V5LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaWMga2V5IHRvIGJlIHNoYXJlZCB3aXRoIHRoZSByZW1vdGUgcGFydHkuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgc2hhcmVkIHNlY3JldCBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkoc3RyaW5nICRwdWJfa2V5LCAkZGhfa2V5KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9kaF9jb21wdXRlX2tleSgkcHViX2tleSwgJGRoX2tleSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbXB1dGVzIGEgZGlnZXN0IGhhc2ggdmFsdWUgZm9yIHRoZSBnaXZlbiBkYXRhIHVzaW5nIGEgZ2l2ZW4gbWV0aG9kLAogKiBhbmQgcmV0dXJucyBhIHJhdyBvciBiaW5oZXggZW5jb2RlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgZGlnZXN0IG1ldGhvZCB0byB1c2UsIGUuZy4gInNoYTI1NiIsIHNlZSBvcGVuc3NsX2dldF9tZF9tZXRob2RzIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGRpZ2VzdCBtZXRob2RzLgogKiBAcGFyYW0gYm9vbCAkcmF3X291dHB1dCBTZXR0aW5nIHRvIFRSVUUgd2lsbCByZXR1cm4gYXMgcmF3IG91dHB1dCBkYXRhLCBvdGhlcndpc2UgdGhlIHJldHVybgogKiB2YWx1ZSBpcyBiaW5oZXggZW5jb2RlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGlnZXN0ZWQgaGFzaCB2YWx1ZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfZGlnZXN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRtZXRob2QsIGJvb2wgJHJhd19vdXRwdXQgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZGlnZXN0KCRkYXRhLCAkbWV0aG9kLCAkcmF3X291dHB1dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfb3BlbiBvcGVucyAoZGVjcnlwdHMpCiAqIHNlYWxlZF9kYXRhIHVzaW5nIHRoZSBwcml2YXRlIGtleSBhc3NvY2lhdGVkIHdpdGgKICogdGhlIGtleSBpZGVudGlmaWVyIHByaXZfa2V5X2lkIGFuZCB0aGUgZW52ZWxvcGUga2V5CiAqIGVudl9rZXksIGFuZCBmaWxscwogKiBvcGVuX2RhdGEgd2l0aCB0aGUgZGVjcnlwdGVkIGRhdGEuCiAqIFRoZSBlbnZlbG9wZSBrZXkgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlCiAqIGRhdGEgYXJlIHNlYWxlZCBhbmQgY2FuIG9ubHkgYmUgdXNlZCBieSBvbmUgc3BlY2lmaWMgcHJpdmF0ZSBrZXkuIFNlZQogKiBvcGVuc3NsX3NlYWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlYWxlZF9kYXRhCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3Blbl9kYXRhIElmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwgdGhlIG9wZW5lZCBkYXRhIGlzIHJldHVybmVkIGluIHRoaXMKICogcGFyYW1ldGVyLgogKiBAcGFyYW0gc3RyaW5nICRlbnZfa2V5CiAqIEBwYXJhbSBzdHJpbmd8YXJyYXl8cmVzb3VyY2UgJHByaXZfa2V5X2lkCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4KICogQHBhcmFtIHN0cmluZyAkaXYgVGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX29wZW4oc3RyaW5nICRzZWFsZWRfZGF0YSwgP3N0cmluZyAmJG9wZW5fZGF0YSwgc3RyaW5nICRlbnZfa2V5LCAkcHJpdl9rZXlfaWQsIHN0cmluZyAkbWV0aG9kID0gIlJDNCIsIHN0cmluZyAkaXYgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGl2ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX29wZW4oJHNlYWxlZF9kYXRhLCAkb3Blbl9kYXRhLCAkZW52X2tleSwgJHByaXZfa2V5X2lkLCAkbWV0aG9kLCAkaXYpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfb3Blbigkc2VhbGVkX2RhdGEsICRvcGVuX2RhdGEsICRlbnZfa2V5LCAkcHJpdl9rZXlfaWQsICRtZXRob2QpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wYmtkZjIgY29tcHV0ZXMgUEJLREYyIChQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyKSwKICogYSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBkZWZpbmVkIGluIFBLQ1M1IHYyLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBQYXNzd29yZCBmcm9tIHdoaWNoIHRoZSBkZXJpdmVkIGtleSBpcyBnZW5lcmF0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQgUEJLREYyIHJlY29tbWVuZHMgYSBjcnl0b2dyYXBoaWMgc2FsdCBvZiBhdCBsZWFzdCA2NCBiaXRzICg4IGJ5dGVzKS4KICogQHBhcmFtIGludCAka2V5X2xlbmd0aCBMZW5ndGggb2YgZGVzaXJlZCBvdXRwdXQga2V5LgogKiBAcGFyYW0gaW50ICRpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBkZXNpcmVkLiBOSVNUCiAqIHJlY29tbWVuZHMgYXQgbGVhc3QgMTAsMDAwLgogKiBAcGFyYW0gc3RyaW5nICRkaWdlc3RfYWxnb3JpdGhtIE9wdGlvbmFsIGhhc2ggb3IgZGlnZXN0IGFsZ29yaXRobSBmcm9tIG9wZW5zc2xfZ2V0X21kX21ldGhvZHMuICBEZWZhdWx0cyB0byBTSEEtMS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyByYXcgYmluYXJ5IHN0cmluZy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3Bia2RmMihzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJHNhbHQsIGludCAka2V5X2xlbmd0aCwgaW50ICRpdGVyYXRpb25zLCBzdHJpbmcgJGRpZ2VzdF9hbGdvcml0aG0gPSAic2hhMSIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3Bia2RmMigkcGFzc3dvcmQsICRzYWx0LCAka2V5X2xlbmd0aCwgJGl0ZXJhdGlvbnMsICRkaWdlc3RfYWxnb3JpdGhtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUgc3RvcmVzCiAqIHg1MDkgaW50byBhIGZpbGUgbmFtZWQgYnkKICogZmlsZW5hbWUgaW4gYSBQS0NTIzEyIGZpbGUgZm9ybWF0LgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICR4NTA5IFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXl8cmVzb3VyY2UgJHByaXZfa2V5IFByaXZhdGUga2V5IGNvbXBvbmVudCBvZiBQS0NTIzEyIGZpbGUuCiAqIFNlZSBQdWJsaWMvUHJpdmF0ZSBLZXkgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkcGFzcyBFbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB1bmxvY2tpbmcgdGhlIFBLQ1MjMTIgZmlsZS4KICogQHBhcmFtIGFycmF5ICRhcmdzIE9wdGlvbmFsIGFycmF5LCBvdGhlciBrZXlzIHdpbGwgYmUgaWdub3JlZC4KICoKICoKICoKICoKICogS2V5CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqICJleHRyYWNlcnRzIgogKiBhcnJheSBvZiBleHRyYSBjZXJ0aWZpY2F0ZXMgb3IgYSBzaW5nbGUgY2VydGlmaWNhdGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFBLQ1MjMTIgZmlsZS4KICoKICoKICogImZyaWVuZGx5bmFtZSIKICogc3RyaW5nIHRvIGJlIHVzZWQgZm9yIHRoZSBzdXBwbGllZCBjZXJ0aWZpY2F0ZSBhbmQga2V5CiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUoJHg1MDksIHN0cmluZyAkZmlsZW5hbWUsICRwcml2X2tleSwgc3RyaW5nICRwYXNzLCBhcnJheSAkYXJncyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXJncyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUoJHg1MDksICRmaWxlbmFtZSwgJHByaXZfa2V5LCAkcGFzcywgJGFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlKCR4NTA5LCAkZmlsZW5hbWUsICRwcml2X2tleSwgJHBhc3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfZXhwb3J0IHN0b3JlcwogKiB4NTA5IGludG8gYSBzdHJpbmcgbmFtZWQgYnkKICogb3V0IGluIGEgUEtDUyMxMiBmaWxlIGZvcm1hdC4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkeDUwOSBTZWUgS2V5L0NlcnRpZmljYXRlIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkb3V0IE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBob2xkIHRoZSBQS0NTIzEyLgogKiBAcGFyYW0gc3RyaW5nfGFycmF5fHJlc291cmNlICRwcml2X2tleSBQcml2YXRlIGtleSBjb21wb25lbnQgb2YgUEtDUyMxMiBmaWxlLgogKiBTZWUgUHVibGljL1ByaXZhdGUgS2V5IHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3MgRW5jcnlwdGlvbiBwYXNzd29yZCBmb3IgdW5sb2NraW5nIHRoZSBQS0NTIzEyIGZpbGUuCiAqIEBwYXJhbSBhcnJheSAkYXJncyBPcHRpb25hbCBhcnJheSwgb3RoZXIga2V5cyB3aWxsIGJlIGlnbm9yZWQuCiAqCiAqCiAqCiAqCiAqIEtleQogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiAiZXh0cmFjZXJ0cyIKICogYXJyYXkgb2YgZXh0cmEgY2VydGlmaWNhdGVzIG9yIGEgc2luZ2xlIGNlcnRpZmljYXRlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQS0NTIzEyIGZpbGUuCiAqCiAqCiAqICJmcmllbmRseW5hbWUiCiAqIHN0cmluZyB0byBiZSB1c2VkIGZvciB0aGUgc3VwcGxpZWQgY2VydGlmaWNhdGUgYW5kIGtleQogKgogKgogKgogKgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtjczEyX2V4cG9ydCgkeDUwOSwgP3N0cmluZyAmJG91dCwgJHByaXZfa2V5LCBzdHJpbmcgJHBhc3MsIGFycmF5ICRhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrY3MxMl9leHBvcnQoJHg1MDksICRvdXQsICRwcml2X2tleSwgJHBhc3MsICRhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrY3MxMl9leHBvcnQoJHg1MDksICRvdXQsICRwcml2X2tleSwgJHBhc3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzMTJfcmVhZCBwYXJzZXMgdGhlIFBLQ1MjMTIgY2VydGlmaWNhdGUgc3RvcmUgc3VwcGxpZWQgYnkKICogcGtjczEyIGludG8gYSBhcnJheSBuYW1lZAogKiBjZXJ0cy4KICoKICogQHBhcmFtIHN0cmluZyAkcGtjczEyIFRoZSBjZXJ0aWZpY2F0ZSBzdG9yZSBjb250ZW50cywgbm90IGl0cyBmaWxlIG5hbWUuCiAqIEBwYXJhbSBhcnJheXxudWxsICRjZXJ0cyBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgaG9sZCB0aGUgQ2VydGlmaWNhdGUgU3RvcmUgRGF0YS4KICogQHBhcmFtIHN0cmluZyAkcGFzcyBFbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB1bmxvY2tpbmcgdGhlIFBLQ1MjMTIgZmlsZS4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3MxMl9yZWFkKHN0cmluZyAkcGtjczEyLCA/YXJyYXkgJiRjZXJ0cywgc3RyaW5nICRwYXNzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczEyX3JlYWQoJHBrY3MxMiwgJGNlcnRzLCAkcGFzcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEZWNyeXB0cyB0aGUgUy9NSU1FIGVuY3J5cHRlZCBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKICogaW5maWxlbmFtZSB1c2luZyB0aGUgY2VydGlmaWNhdGUgYW5kIGl0cwogKiBhc3NvY2lhdGVkIHByaXZhdGUga2V5IHNwZWNpZmllZCBieSByZWNpcGNlcnQgYW5kCiAqIHJlY2lwa2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG91dGZpbGVuYW1lIFRoZSBkZWNyeXB0ZWQgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieQogKiBvdXRmaWxlbmFtZS4KICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkcmVjaXBjZXJ0CiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHJlY2lwa2V5CiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19kZWNyeXB0KHN0cmluZyAkaW5maWxlbmFtZSwgc3RyaW5nICRvdXRmaWxlbmFtZSwgJHJlY2lwY2VydCwgJHJlY2lwa2V5ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRyZWNpcGtleSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19kZWNyeXB0KCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRyZWNpcGNlcnQsICRyZWNpcGtleSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19kZWNyeXB0KCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRyZWNpcGNlcnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzN19lbmNyeXB0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUKICogZmlsZSBuYW1lZCBpbmZpbGUgYW5kIGVuY3J5cHRzIHRoZW0gdXNpbmcgYW4gUkMyCiAqIDQwLWJpdCBjaXBoZXIgc28gdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHJlYWQgYnkgdGhlIGludGVuZGVkIHJlY2lwaWVudHMKICogc3BlY2lmaWVkIGJ5IHJlY2lwY2VydHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGluZmlsZQogKiBAcGFyYW0gc3RyaW5nICRvdXRmaWxlCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHJlY2lwY2VydHMgRWl0aGVyIGEgbG9uZSBYLjUwOSBjZXJ0aWZpY2F0ZSwgb3IgYW4gYXJyYXkgb2YgWC41MDkgY2VydGlmaWNhdGVzLgogKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMgaGVhZGVycyBpcyBhbiBhcnJheSBvZiBoZWFkZXJzIHRoYXQKICogd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEgYWZ0ZXIgaXQgaGFzIGJlZW4gZW5jcnlwdGVkLgogKgogKiBoZWFkZXJzIGNhbiBiZSBlaXRoZXIgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICoga2V5ZWQgYnkgaGVhZGVyIG5hbWUsIG9yIGFuIGluZGV4ZWQgYXJyYXksIHdoZXJlIGVhY2ggZWxlbWVudCBjb250YWlucwogKiBhIHNpbmdsZSBoZWFkZXIgbGluZS4KICogQHBhcmFtIGludCAkZmxhZ3MgZmxhZ3MgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25zIHRoYXQgYWZmZWN0CiAqIHRoZSBlbmNvZGluZyBwcm9jZXNzIC0gc2VlIFBLQ1M3CiAqIGNvbnN0YW50cy4KICogQHBhcmFtIGludCAkY2lwaGVyaWQgT25lIG9mIGNpcGhlciBjb25zdGFudHMuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19lbmNyeXB0KHN0cmluZyAkaW5maWxlLCBzdHJpbmcgJG91dGZpbGUsICRyZWNpcGNlcnRzLCBhcnJheSAkaGVhZGVycywgaW50ICRmbGFncyA9IDAsIGludCAkY2lwaGVyaWQgPSBPUEVOU1NMX0NJUEhFUl9SQzJfNDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19lbmNyeXB0KCRpbmZpbGUsICRvdXRmaWxlLCAkcmVjaXBjZXJ0cywgJGhlYWRlcnMsICRmbGFncywgJGNpcGhlcmlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGluZmlsZW5hbWUKICogQHBhcmFtIGFycmF5fG51bGwgJGNlcnRzCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19yZWFkKHN0cmluZyAkaW5maWxlbmFtZSwgP2FycmF5ICYkY2VydHMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19yZWFkKCRpbmZpbGVuYW1lLCAkY2VydHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2NzN19zaWduIHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQogKiBuYW1lZCBpbmZpbGVuYW1lIGFuZCBzaWducyB0aGVtIHVzaW5nIHRoZQogKiBjZXJ0aWZpY2F0ZSBhbmQgaXRzIG1hdGNoaW5nIHByaXZhdGUga2V5IHNwZWNpZmllZCBieQogKiBzaWduY2VydCBhbmQgcHJpdmtleQogKiBwYXJhbWV0ZXJzLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZpbGVuYW1lIFRoZSBpbnB1dCBmaWxlIHlvdSBhcmUgaW50ZW5kaW5nIHRvIGRpZ2l0YWxseSBzaWduLgogKiBAcGFyYW0gc3RyaW5nICRvdXRmaWxlbmFtZSBUaGUgZmlsZSB3aGljaCB0aGUgZGlnaXRhbCBzaWduYXR1cmUgd2lsbCBiZSB3cml0dGVuIHRvLgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICRzaWduY2VydCBUaGUgWC41MDkgY2VydGlmaWNhdGUgdXNlZCB0byBkaWdpdGFsbHkgc2lnbiBpbmZpbGVuYW1lLgogKiBTZWUgS2V5L0NlcnRpZmljYXRlIHBhcmFtZXRlcnMgZm9yIGEgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJHByaXZrZXkgcHJpdmtleSBpcyB0aGUgcHJpdmF0ZSBrZXkgY29ycmVzcG9uZGluZyB0byBzaWduY2VydC4KICogU2VlIFB1YmxpYy9Qcml2YXRlIEtleSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMgaGVhZGVycyBpcyBhbiBhcnJheSBvZiBoZWFkZXJzIHRoYXQKICogd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEgYWZ0ZXIgaXQgaGFzIGJlZW4gc2lnbmVkIChzZWUKICogb3BlbnNzbF9wa2NzN19lbmNyeXB0IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CiAqIHRoZSBmb3JtYXQgb2YgdGhpcyBwYXJhbWV0ZXIpLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgb3V0cHV0IC0gc2VlIFBLQ1M3IGNvbnN0YW50cy4KICogQHBhcmFtIHN0cmluZyAkZXh0cmFjZXJ0cyBleHRyYWNlcnRzIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZwogKiBhIGJ1bmNoIG9mIGV4dHJhIGNlcnRpZmljYXRlcyB0byBpbmNsdWRlIGluIHRoZSBzaWduYXR1cmUgd2hpY2ggY2FuIGZvcgogKiBleGFtcGxlIGJlIHVzZWQgdG8gaGVscCB0aGUgcmVjaXBpZW50IHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgdXNlZC4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3M3X3NpZ24oc3RyaW5nICRpbmZpbGVuYW1lLCBzdHJpbmcgJG91dGZpbGVuYW1lLCAkc2lnbmNlcnQsICRwcml2a2V5LCBhcnJheSAkaGVhZGVycywgaW50ICRmbGFncyA9IFBLQ1M3X0RFVEFDSEVELCBzdHJpbmcgJGV4dHJhY2VydHMgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGV4dHJhY2VydHMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtjczdfc2lnbigkaW5maWxlbmFtZSwgJG91dGZpbGVuYW1lLCAkc2lnbmNlcnQsICRwcml2a2V5LCAkaGVhZGVycywgJGZsYWdzLCAkZXh0cmFjZXJ0cyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2NzN19zaWduKCRpbmZpbGVuYW1lLCAkb3V0ZmlsZW5hbWUsICRzaWduY2VydCwgJHByaXZrZXksICRoZWFkZXJzLCAkZmxhZ3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlIHNhdmVzIGFuIGFzY2lpLWFybW91cmVkCiAqIChQRU0gZW5jb2RlZCkgcmVuZGl0aW9uIG9mIGtleSBpbnRvIHRoZSBmaWxlIG5hbWVkCiAqIGJ5IG91dGZpbGVuYW1lLgogKgogKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nfGFycmF5ICRrZXkKICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIGtleSBjYW4gYmUgb3B0aW9uYWxseSBwcm90ZWN0ZWQgYnkgYQogKiBwYXNzcGhyYXNlLgogKiBAcGFyYW0gYXJyYXkgJGNvbmZpZ2FyZ3MgY29uZmlnYXJncyBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlIGV4cG9ydAogKiBwcm9jZXNzIGJ5IHNwZWNpZnlpbmcgYW5kL29yIG92ZXJyaWRpbmcgb3B0aW9ucyBmb3IgdGhlIG9wZW5zc2wKICogY29uZmlndXJhdGlvbiBmaWxlLiBTZWUgb3BlbnNzbF9jc3JfbmV3IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ2FyZ3MuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKCRrZXksIHN0cmluZyAkb3V0ZmlsZW5hbWUsIHN0cmluZyAkcGFzc3BocmFzZSA9IG51bGwsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUoJGtleSwgJG91dGZpbGVuYW1lLCAkcGFzc3BocmFzZSwgJGNvbmZpZ2FyZ3MpOwogICAgfSBlbHNlaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUoJGtleSwgJG91dGZpbGVuYW1lLCAkcGFzc3BocmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKCRrZXksICRvdXRmaWxlbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3BrZXlfZXhwb3J0IGV4cG9ydHMKICoga2V5IGFzIGEgUEVNIGVuY29kZWQgc3RyaW5nIGFuZCBzdG9yZXMgaXQgaW50bwogKiBvdXQgKHdoaWNoIGlzIHBhc3NlZCBieSByZWZlcmVuY2UpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGtleQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG91dAogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFRoZSBrZXkgaXMgb3B0aW9uYWxseSBwcm90ZWN0ZWQgYnkgcGFzc3BocmFzZS4KICogQHBhcmFtIGFycmF5ICRjb25maWdhcmdzIGNvbmZpZ2FyZ3MgY2FuIGJlIHVzZWQgdG8gZmluZS10dW5lIHRoZSBleHBvcnQKICogcHJvY2VzcyBieSBzcGVjaWZ5aW5nIGFuZC9vciBvdmVycmlkaW5nIG9wdGlvbnMgZm9yIHRoZSBvcGVuc3NsCiAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFNlZSBvcGVuc3NsX2Nzcl9uZXcgZm9yIG1vcmUKICogaW5mb3JtYXRpb24gYWJvdXQgY29uZmlnYXJncy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfZXhwb3J0KCRrZXksID9zdHJpbmcgJiRvdXQsIHN0cmluZyAkcGFzc3BocmFzZSA9IG51bGwsIGFycmF5ICRjb25maWdhcmdzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfZXhwb3J0KCRrZXksICRvdXQsICRwYXNzcGhyYXNlLCAkY29uZmlnYXJncyk7CiAgICB9IGVsc2VpZiAoJHBhc3NwaHJhc2UgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtleV9leHBvcnQoJGtleSwgJG91dCwgJHBhc3NwaHJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcGtleV9leHBvcnQoJGtleSwgJG91dCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUgcGFyc2VzCiAqIGtleSBhbmQgcHJlcGFyZXMgaXQgZm9yIHVzZSBieSBvdGhlciBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBrZXkgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKiBhIHN0cmluZyBoYXZpbmcgdGhlIGZvcm1hdAogKiBmaWxlOi8vcGF0aC90by9maWxlLnBlbS4gVGhlIG5hbWVkIGZpbGUgbXVzdAogKiBjb250YWluIGEgUEVNIGVuY29kZWQgY2VydGlmaWNhdGUvcHJpdmF0ZSBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKgogKgogKiBBIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBwYXNzcGhyYXNlIG11c3QgYmUgdXNlZAogKiBpZiB0aGUgc3BlY2lmaWVkIGtleSBpcyBlbmNyeXB0ZWQgKHByb3RlY3RlZCBieSBhIHBhc3NwaHJhc2UpLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBrZXkgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZShzdHJpbmcgJGtleSwgc3RyaW5nICRwYXNzcGhyYXNlID0gIiIpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKCRrZXksICRwYXNzcGhyYXNlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMgZXh0cmFjdHMgdGhlIHB1YmxpYyBrZXkgZnJvbQogKiBjZXJ0aWZpY2F0ZSBhbmQgcHJlcGFyZXMgaXQgZm9yIHVzZSBieSBvdGhlcgogKiBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZXxzdHJpbmcgJGNlcnRpZmljYXRlIGNlcnRpZmljYXRlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICoKICogYW4gWC41MDkgY2VydGlmaWNhdGUgcmVzb3VyY2UKICogYSBzdHJpbmcgaGF2aW5nIHRoZSBmb3JtYXQKICogZmlsZTovL3BhdGgvdG8vZmlsZS5wZW0uIFRoZSBuYW1lZCBmaWxlIG11c3QKICogY29udGFpbiBhIFBFTSBlbmNvZGVkIGNlcnRpZmljYXRlL3B1YmxpYyBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKgogKgogKiBBIFBFTSBmb3JtYXR0ZWQgcHVibGljIGtleS4KICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcG9zaXRpdmUga2V5IHJlc291cmNlIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygkY2VydGlmaWNhdGUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoJGNlcnRpZmljYXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF9wa2V5X25ldyBnZW5lcmF0ZXMgYSBuZXcgcHJpdmF0ZSBhbmQgcHVibGljCiAqIGtleSBwYWlyLiAgVGhlIHB1YmxpYyBjb21wb25lbnQgb2YgdGhlIGtleSBjYW4gYmUgb2J0YWluZWQgdXNpbmcKICogb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMuCiAqCiAqIEBwYXJhbSBhcnJheSAkY29uZmlnYXJncyBZb3UgY2FuIGZpbmV0dW5lIHRoZSBrZXkgZ2VuZXJhdGlvbiAoc3VjaCBhcyBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YKICogYml0cykgdXNpbmcgY29uZmlnYXJncy4gIFNlZQogKiBvcGVuc3NsX2Nzcl9uZXcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICogY29uZmlnYXJncy4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIHBrZXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfbmV3KGFycmF5ICRjb25maWdhcmdzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25maWdhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfbmV3KCRjb25maWdhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3BrZXlfbmV3KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0IGRlY3J5cHRzCiAqIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBlbmNyeXB0ZWQgdmlhCiAqIG9wZW5zc2xfcHVibGljX2VuY3J5cHQgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGludG8KICogZGVjcnlwdGVkLgogKgogKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGUuZy4gdG8gZGVjcnlwdCBkYXRhIHdoaWNoIGlzIHN1cHBvc2VkIHRvIG9ubHkgYmUgYXZhaWxhYmxlIHRvIHlvdS4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRlY3J5cHRlZAogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlfGFycmF5ICRrZXkga2V5IG11c3QgYmUgdGhlIHByaXZhdGUga2V5IGNvcnJlc3BvbmRpbmcgdGhhdAogKiB3YXMgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLgogKiBAcGFyYW0gaW50ICRwYWRkaW5nIHBhZGRpbmcgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1BLQ1MxX1BBRERJTkcsCiAqIE9QRU5TU0xfU1NMVjIzX1BBRERJTkcsCiAqIE9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HLAogKiBPUEVOU1NMX05PX1BBRERJTkcuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoc3RyaW5nICRkYXRhLCA/c3RyaW5nICYkZGVjcnlwdGVkLCAka2V5LCBpbnQgJHBhZGRpbmcgPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoJGRhdGEsICRkZWNyeXB0ZWQsICRrZXksICRwYWRkaW5nKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0IGVuY3J5cHRzIGRhdGEKICogd2l0aCBwcml2YXRlIGtleSBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW50bwogKiBjcnlwdGVkLiBFbmNyeXB0ZWQgZGF0YSBjYW4gYmUgZGVjcnlwdGVkIHZpYQogKiBvcGVuc3NsX3B1YmxpY19kZWNyeXB0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGUuZy4gdG8gc2lnbiBkYXRhIChvciBpdHMgaGFzaCkgdG8gcHJvdmUgdGhhdCBpdAogKiBpcyBub3Qgd3JpdHRlbiBieSBzb21lb25lIGVsc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZ3xudWxsICRjcnlwdGVkCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2V8YXJyYXkgJGtleQogKiBAcGFyYW0gaW50ICRwYWRkaW5nIHBhZGRpbmcgY2FuIGJlIG9uZSBvZgogKiBPUEVOU1NMX1BLQ1MxX1BBRERJTkcsCiAqIE9QRU5TU0xfTk9fUEFERElORy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRjcnlwdGVkLCAka2V5LCBpbnQgJHBhZGRpbmcgPSBPUEVOU1NMX1BLQ1MxX1BBRERJTkcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF9wcml2YXRlX2VuY3J5cHQoJGRhdGEsICRjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3B1YmxpY19kZWNyeXB0IGRlY3J5cHRzCiAqIGRhdGEgdGhhdCB3YXMgcHJldmlvdXMgZW5jcnlwdGVkIHZpYQogKiBvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW50bwogKiBkZWNyeXB0ZWQuCiAqCiAqIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gZS5nLiB0byBjaGVjayBpZiB0aGUgbWVzc2FnZSB3YXMgd3JpdHRlbiBieSB0aGUKICogb3duZXIgb2YgdGhlIHByaXZhdGUga2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGVjcnlwdGVkCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGtleSBrZXkgbXVzdCBiZSB0aGUgcHVibGljIGtleSBjb3JyZXNwb25kaW5nIHRoYXQKICogd2FzIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS4KICogQHBhcmFtIGludCAkcGFkZGluZyBwYWRkaW5nIGNhbiBiZSBvbmUgb2YKICogT1BFTlNTTF9QS0NTMV9QQURESU5HLAogKiBPUEVOU1NMX05PX1BBRERJTkcuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wdWJsaWNfZGVjcnlwdChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRkZWNyeXB0ZWQsICRrZXksIGludCAkcGFkZGluZyA9IE9QRU5TU0xfUEtDUzFfUEFERElORyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3B1YmxpY19kZWNyeXB0KCRkYXRhLCAkZGVjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3B1YmxpY19lbmNyeXB0IGVuY3J5cHRzIGRhdGEKICogd2l0aCBwdWJsaWMga2V5IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbnRvCiAqIGNyeXB0ZWQuIEVuY3J5cHRlZCBkYXRhIGNhbiBiZSBkZWNyeXB0ZWQgdmlhCiAqIG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0LgogKgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGUuZy4gdG8gZW5jcnlwdCBtZXNzYWdlIHdoaWNoIGNhbiBiZSB0aGVuIHJlYWQKICogb25seSBieSBvd25lciBvZiB0aGUgcHJpdmF0ZSBrZXkuIEl0IGNhbiBiZSBhbHNvIHVzZWQgdG8gc3RvcmUgc2VjdXJlIGRhdGEKICogaW4gZGF0YWJhc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZ3xudWxsICRjcnlwdGVkIFRoaXMgd2lsbCBob2xkIHRoZSByZXN1bHQgb2YgdGhlIGVuY3J5cHRpb24uCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGtleSBUaGUgcHVibGljIGtleS4KICogQHBhcmFtIGludCAkcGFkZGluZyBwYWRkaW5nIGNhbiBiZSBvbmUgb2YKICogT1BFTlNTTF9QS0NTMV9QQURESU5HLAogKiBPUEVOU1NMX1NTTFYyM19QQURESU5HLAogKiBPUEVOU1NMX1BLQ1MxX09BRVBfUEFERElORywKICogT1BFTlNTTF9OT19QQURESU5HLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfcHVibGljX2VuY3J5cHQoc3RyaW5nICRkYXRhLCA/c3RyaW5nICYkY3J5cHRlZCwgJGtleSwgaW50ICRwYWRkaW5nID0gT1BFTlNTTF9QS0NTMV9QQURESU5HKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfcHVibGljX2VuY3J5cHQoJGRhdGEsICRjcnlwdGVkLCAka2V5LCAkcGFkZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZW5lcmF0ZXMgYSBzdHJpbmcgb2YgcHNldWRvLXJhbmRvbSBieXRlcywgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAqIGRldGVybWluZWQgYnkgdGhlIGxlbmd0aCBwYXJhbWV0ZXIuCiAqCiAqIEl0IGFsc28gaW5kaWNhdGVzIGlmIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIGFsZ29yaXRobSB3YXMgdXNlZCB0byBwcm9kdWNlIHRoZQogKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLCBhbmQgZG9lcyB0aGlzIHZpYSB0aGUgb3B0aW9uYWwgY3J5cHRvX3N0cm9uZwogKiBwYXJhbWV0ZXIuIEl0J3MgcmFyZSBmb3IgdGhpcyB0byBiZSBGQUxTRSwgYnV0IHNvbWUgc3lzdGVtcyBtYXkgYmUgYnJva2VuIG9yIG9sZC4KICoKICogQHBhcmFtIGludCAkbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGRlc2lyZWQgc3RyaW5nIG9mIGJ5dGVzLiBNdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gUEhQIHdpbGwKICogdHJ5IHRvIGNhc3QgdGhpcyBwYXJhbWV0ZXIgdG8gYSBub24tbnVsbCBpbnRlZ2VyIHRvIHVzZSBpdC4KICogQHBhcmFtIGJvb2x8bnVsbCAkY3J5cHRvX3N0cm9uZyBJZiBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24sIHRoaXMgd2lsbCBob2xkIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGRldGVybWluZXMKICogaWYgdGhlIGFsZ29yaXRobSB1c2VkIHdhcyAiY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIiwgZS5nLiwgc2FmZSBmb3IgdXNhZ2Ugd2l0aCBHUEcsCiAqIHBhc3N3b3JkcywgZXRjLiBUUlVFIGlmIGl0IGRpZCwgb3RoZXJ3aXNlIEZBTFNFCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGdlbmVyYXRlZCBzdHJpbmcgb2YgYnl0ZXMgb24gc3VjY2Vzcy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoaW50ICRsZW5ndGgsID9ib29sICYkY3J5cHRvX3N0cm9uZyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoJGxlbmd0aCwgJGNyeXB0b19zdHJvbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBvcGVuc3NsX3NlYWwgc2VhbHMgKGVuY3J5cHRzKQogKiBkYXRhIGJ5IHVzaW5nIHRoZSBnaXZlbiBtZXRob2Qgd2l0aCBhIHJhbmRvbWx5IGdlbmVyYXRlZAogKiBzZWNyZXQga2V5LiBUaGUga2V5IGlzIGVuY3J5cHRlZCB3aXRoIGVhY2ggb2YgdGhlIHB1YmxpYyBrZXlzCiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpZmllcnMgaW4gcHViX2tleV9pZHMKICogYW5kIGVhY2ggZW5jcnlwdGVkIGtleSBpcyByZXR1cm5lZAogKiBpbiBlbnZfa2V5cy4gVGhpcyBtZWFucyB0aGF0IG9uZSBjYW4gc2VuZAogKiBzZWFsZWQgZGF0YSB0byBtdWx0aXBsZSByZWNpcGllbnRzIChwcm92aWRlZCBvbmUgaGFzIG9idGFpbmVkIHRoZWlyCiAqIHB1YmxpYyBrZXlzKS4gRWFjaCByZWNpcGllbnQgbXVzdCByZWNlaXZlIGJvdGggdGhlIHNlYWxlZCBkYXRhIGFuZAogKiB0aGUgZW52ZWxvcGUga2V5IHRoYXQgd2FzIGVuY3J5cHRlZCB3aXRoIHRoZSByZWNpcGllbnQncyBwdWJsaWMga2V5LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIHNlYWwuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2VhbGVkX2RhdGEgVGhlIHNlYWxlZCBkYXRhLgogKiBAcGFyYW0gYXJyYXkgJGVudl9rZXlzIEFycmF5IG9mIGVuY3J5cHRlZCBrZXlzLgogKiBAcGFyYW0gYXJyYXkgJHB1Yl9rZXlfaWRzIEFycmF5IG9mIHB1YmxpYyBrZXkgcmVzb3VyY2UgaWRlbnRpZmllcnMuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4KICogQHBhcmFtIHN0cmluZyAkaXYgVGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzZWFsZWQgZGF0YSBvbiBzdWNjZXNzLgogKiBJZiBzdWNjZXNzZnVsIHRoZSBzZWFsZWQgZGF0YSBpcyByZXR1cm5lZCBpbgogKiBzZWFsZWRfZGF0YSwgYW5kIHRoZSBlbnZlbG9wZSBrZXlzIGluCiAqIGVudl9rZXlzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfc2VhbChzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRzZWFsZWRfZGF0YSwgYXJyYXkgJiRlbnZfa2V5cywgYXJyYXkgJHB1Yl9rZXlfaWRzLCBzdHJpbmcgJG1ldGhvZCA9ICJSQzQiLCBzdHJpbmcgJiRpdiA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3NlYWwoJGRhdGEsICRzZWFsZWRfZGF0YSwgJGVudl9rZXlzLCAkcHViX2tleV9pZHMsICRtZXRob2QsICRpdik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIG9wZW5zc2xfc2lnbiBjb21wdXRlcyBhIHNpZ25hdHVyZSBmb3IgdGhlCiAqIHNwZWNpZmllZCBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBjcnlwdG9ncmFwaGljCiAqIGRpZ2l0YWwgc2lnbmF0dXJlIHVzaW5nIHRoZSBwcml2YXRlIGtleSBhc3NvY2lhdGVkIHdpdGgKICogcHJpdl9rZXlfaWQuIE5vdGUgdGhhdCB0aGUgZGF0YSBpdHNlbGYgaXMKICogbm90IGVuY3J5cHRlZC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIG9mIGRhdGEgeW91IHdpc2ggdG8gc2lnbgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNpZ25hdHVyZSBJZiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bCB0aGUgc2lnbmF0dXJlIGlzIHJldHVybmVkIGluCiAqIHNpZ25hdHVyZS4KICogQHBhcmFtIHJlc291cmNlfHN0cmluZyAkcHJpdl9rZXlfaWQgcmVzb3VyY2UgLSBhIGtleSwgcmV0dXJuZWQgYnkgb3BlbnNzbF9nZXRfcHJpdmF0ZWtleQogKgogKiBzdHJpbmcgLSBhIFBFTSBmb3JtYXR0ZWQga2V5CiAqIEBwYXJhbSBpbnR8c3RyaW5nICRzaWduYXR1cmVfYWxnIGludCAtIG9uZSBvZiB0aGVzZSBTaWduYXR1cmUgQWxnb3JpdGhtcy4KICoKICogc3RyaW5nIC0gYSB2YWxpZCBzdHJpbmcgcmV0dXJuZWQgYnkgb3BlbnNzbF9nZXRfbWRfbWV0aG9kcyBleGFtcGxlLCAic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iIG9yICJzaGEzODQiLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfc2lnbihzdHJpbmcgJGRhdGEsID9zdHJpbmcgJiRzaWduYXR1cmUsICRwcml2X2tleV9pZCwgJHNpZ25hdHVyZV9hbGcgPSBPUEVOU1NMX0FMR09fU0hBMSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRwcml2X2tleV9pZCwgJHNpZ25hdHVyZV9hbGcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3BlbnNzbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlIHN0b3JlcwogKiB4NTA5IGludG8gYSBmaWxlIG5hbWVkIGJ5CiAqIG91dGZpbGVuYW1lIGluIGEgUEVNIGVuY29kZWQgZm9ybWF0LgogKgogKiBAcGFyYW0gc3RyaW5nfHJlc291cmNlICR4NTA5IFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHBhcmFtIHN0cmluZyAkb3V0ZmlsZW5hbWUgUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIEBwYXJhbSBib29sICRub3RleHQKICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBub3RleHQgYWZmZWN0cwogKiB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQ7IGlmIGl0IGlzIEZBTFNFLCB0aGVuIGFkZGl0aW9uYWwgaHVtYW4tcmVhZGFibGUKICogaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKICogbm90ZXh0IGlzIFRSVUUuCiAqIEB0aHJvd3MgT3BlbnNzbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlKCR4NTA5LCBzdHJpbmcgJG91dGZpbGVuYW1lLCBib29sICRub3RleHQgPSB0cnVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZSgkeDUwOSwgJG91dGZpbGVuYW1lLCAkbm90ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG9wZW5zc2xfeDUwOV9leHBvcnQgc3RvcmVzCiAqIHg1MDkgaW50byBhIHN0cmluZyBuYW1lZCBieQogKiBvdXRwdXQgaW4gYSBQRU0gZW5jb2RlZCBmb3JtYXQuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJHg1MDkgU2VlIEtleS9DZXJ0aWZpY2F0ZSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG91dHB1dCBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgaG9sZCB0aGUgUEVNLgogKiBAcGFyYW0gYm9vbCAkbm90ZXh0CiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgbm90ZXh0IGFmZmVjdHMKICogdGhlIHZlcmJvc2l0eSBvZiB0aGUgb3V0cHV0OyBpZiBpdCBpcyBGQUxTRSwgdGhlbiBhZGRpdGlvbmFsIGh1bWFuLXJlYWRhYmxlCiAqIGluZm9ybWF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuIFRoZSBkZWZhdWx0IHZhbHVlIG9mCiAqIG5vdGV4dCBpcyBUUlVFLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9leHBvcnQoJHg1MDksID9zdHJpbmcgJiRvdXRwdXQsIGJvb2wgJG5vdGV4dCA9IHRydWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X2V4cG9ydCgkeDUwOSwgJG91dHB1dCwgJG5vdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQgcmV0dXJucyB0aGUgZGlnZXN0IG9mCiAqIHg1MDkgYXMgYSBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJHg1MDkgU2VlIEtleS9DZXJ0aWZpY2F0ZSBwYXJhbWV0ZXJzIGZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLgogKiBAcGFyYW0gc3RyaW5nICRoYXNoX2FsZ29yaXRobSBUaGUgZGlnZXN0IG1ldGhvZCBvciBoYXNoIGFsZ29yaXRobSB0byB1c2UsIGUuZy4gInNoYTI1NiIsIG9uZSBvZiBvcGVuc3NsX2dldF9tZF9tZXRob2RzLgogKiBAcGFyYW0gYm9vbCAkcmF3X291dHB1dCBXaGVuIHNldCB0byBUUlVFLCBvdXRwdXRzIHJhdyBiaW5hcnkgZGF0YS4gRkFMU0Ugb3V0cHV0cyBsb3dlcmNhc2UgaGV4aXRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNhbGN1bGF0ZWQgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgYXMgbG93ZXJjYXNlIGhleGl0cyB1bmxlc3MgcmF3X291dHB1dCBpcyBzZXQgdG8gVFJVRSBpbiB3aGljaCBjYXNlIHRoZSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCBpcyByZXR1cm5lZC4KICoKICogUmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCgkeDUwOSwgc3RyaW5nICRoYXNoX2FsZ29yaXRobSA9ICJzaGExIiwgYm9vbCAkcmF3X291dHB1dCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X2ZpbmdlcnByaW50KCR4NTA5LCAkaGFzaF9hbGdvcml0aG0sICRyYXdfb3V0cHV0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE9wZW5zc2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogb3BlbnNzbF94NTA5X3JlYWQgcGFyc2VzIHRoZSBjZXJ0aWZpY2F0ZSBzdXBwbGllZCBieQogKiB4NTA5Y2VydGRhdGEgYW5kIHJldHVybnMgYSByZXNvdXJjZSBpZGVudGlmaWVyIGZvcgogKiBpdC4KICoKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkeDUwOWNlcnRkYXRhIFg1MDkgY2VydGlmaWNhdGUuIFNlZSBLZXkvQ2VydGlmaWNhdGUgcGFyYW1ldGVycyBmb3IgYSBsaXN0IG9mIHZhbGlkIHZhbHVlcy4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIE9wZW5zc2xFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9yZWFkKCR4NTA5Y2VydGRhdGEpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3BlbnNzbF94NTA5X3JlYWQoJHg1MDljZXJ0ZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/outcontrol.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xPdXRjb250cm9sRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSB0b3Btb3N0IG91dHB1dCBidWZmZXIgYW5kIHR1cm5zCiAqIG9mZiB0aGlzIG91dHB1dCBidWZmZXJpbmcuIElmIHlvdSB3YW50IHRvIGZ1cnRoZXIgcHJvY2VzcyB0aGUgYnVmZmVyJ3MKICogY29udGVudHMgeW91IGhhdmUgdG8gY2FsbCBvYl9nZXRfY29udGVudHMgYmVmb3JlCiAqIG9iX2VuZF9jbGVhbiBhcyB0aGUgYnVmZmVyIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQKICogd2hlbiBvYl9lbmRfY2xlYW4gaXMgY2FsbGVkLgogKgogKiBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIHN0YXJ0ZWQgYnkKICogb2Jfc3RhcnQgd2l0aCBQSFBfT1VUUFVUX0hBTkRMRVJfQ0xFQU5BQkxFCiAqIGFuZCBQSFBfT1VUUFVUX0hBTkRMRVJfUkVNT1ZBQkxFCiAqIGZsYWdzLiBPdGhlcndpc2Ugb2JfZW5kX2NsZWFuIHdpbGwgbm90IHdvcmsuCiAqCiAqIEB0aHJvd3MgT3V0Y29udHJvbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2JfZW5kX2NsZWFuKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvYl9lbmRfY2xlYW4oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IE91dGNvbnRyb2xFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgdG9wbW9zdCBvdXRwdXQgYnVmZmVyIChpZgogKiBhbnkpIGFuZCB0dXJuIHRoaXMgb3V0cHV0IGJ1ZmZlciBvZmYuICBJZiB5b3Ugd2FudCB0byBmdXJ0aGVyCiAqIHByb2Nlc3MgdGhlIGJ1ZmZlcidzIGNvbnRlbnRzIHlvdSBoYXZlIHRvIGNhbGwKICogb2JfZ2V0X2NvbnRlbnRzIGJlZm9yZQogKiBvYl9lbmRfZmx1c2ggYXMgdGhlIGJ1ZmZlciBjb250ZW50cyBhcmUKICogZGlzY2FyZGVkIGFmdGVyIG9iX2VuZF9mbHVzaCBpcyBjYWxsZWQuCiAqCiAqIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUgc3RhcnRlZCBieQogKiBvYl9zdGFydCB3aXRoIFBIUF9PVVRQVVRfSEFORExFUl9GTFVTSEFCTEUKICogYW5kIFBIUF9PVVRQVVRfSEFORExFUl9SRU1PVkFCTEUKICogZmxhZ3MuIE90aGVyd2lzZSBvYl9lbmRfZmx1c2ggd2lsbCBub3Qgd29yay4KICoKICogQHRocm93cyBPdXRjb250cm9sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvYl9lbmRfZmx1c2goKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9iX2VuZF9mbHVzaCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBhZGRzIGFub3RoZXIgbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSBVUkwgcmV3cml0ZSBtZWNoYW5pc20uCiAqIFRoZSBuYW1lIGFuZCB2YWx1ZSB3aWxsIGJlIGFkZGVkIHRvIFVSTHMgKGFzIEdFVCBwYXJhbWV0ZXIpIGFuZCBmb3JtcwogKiAoYXMgaGlkZGVuIGlucHV0IGZpZWxkcykgdGhlIHNhbWUgd2F5IGFzIHRoZSBzZXNzaW9uIElEIHdoZW4gdHJhbnNwYXJlbnQKICogVVJMIHJld3JpdGluZyBpcyBlbmFibGVkIHdpdGggc2Vzc2lvbi51c2VfdHJhbnNfc2lkLgogKgogKiBUaGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHVybF9yZXdyaXRlci50YWdzIGFuZAogKiB1cmxfcmV3cml0ZXIuaG9zdHMgcGhwLmluaQogKiBwYXJhbWV0ZXJzLgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBhdCBtb3N0IG9uY2UgcGVyIHJlcXVlc3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIHZhcmlhYmxlIG5hbWUuCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YXJpYWJsZSB2YWx1ZS4KICogQHRocm93cyBPdXRjb250cm9sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvdXRwdXRfYWRkX3Jld3JpdGVfdmFyKHN0cmluZyAkbmFtZSwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvdXRwdXRfYWRkX3Jld3JpdGVfdmFyKCRuYW1lLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIFVSTCByZXdyaXRlciBhbmQgcmVtb3ZlcyBhbGwgcmV3cml0ZQogKiB2YXJpYWJsZXMgcHJldmlvdXNseSBzZXQgYnkgdGhlIG91dHB1dF9hZGRfcmV3cml0ZV92YXIKICogZnVuY3Rpb24uCiAqCiAqIEB0aHJvd3MgT3V0Y29udHJvbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycygpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgT3V0Y29udHJvbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/password.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQYXNzd29yZEV4Y2VwdGlvbjsKCi8qKgogKiBwYXNzd29yZF9oYXNoIGNyZWF0ZXMgYSBuZXcgcGFzc3dvcmQgaGFzaCB1c2luZyBhIHN0cm9uZyBvbmUtd2F5IGhhc2hpbmcKICogYWxnb3JpdGhtLiBwYXNzd29yZF9oYXNoIGlzIGNvbXBhdGlibGUgd2l0aCBjcnlwdC4KICogVGhlcmVmb3JlLCBwYXNzd29yZCBoYXNoZXMgY3JlYXRlZCBieSBjcnlwdCBjYW4gYmUgdXNlZCB3aXRoCiAqIHBhc3N3b3JkX2hhc2guCiAqCiAqCiAqCiAqCiAqIFBBU1NXT1JEX0RFRkFVTFQgLSBVc2UgdGhlIGJjcnlwdCBhbGdvcml0aG0gKGRlZmF1bHQgYXMgb2YgUEhQIDUuNS4wKS4KICogTm90ZSB0aGF0IHRoaXMgY29uc3RhbnQgaXMgZGVzaWduZWQgdG8gY2hhbmdlIG92ZXIgdGltZSBhcyBuZXcgYW5kIHN0cm9uZ2VyIGFsZ29yaXRobXMgYXJlIGFkZGVkCiAqIHRvIFBIUC4gRm9yIHRoYXQgcmVhc29uLCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgZnJvbSB1c2luZyB0aGlzIGlkZW50aWZpZXIgY2FuIGNoYW5nZSBvdmVyCiAqIHRpbWUuIFRoZXJlZm9yZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbiBhIGRhdGFiYXNlIGNvbHVtbiB0aGF0IGNhbiBleHBhbmQKICogYmV5b25kIDYwIGNoYXJhY3RlcnMgKDI1NSBjaGFyYWN0ZXJzIHdvdWxkIGJlIGEgZ29vZCBjaG9pY2UpLgogKgogKgogKgogKgogKiBQQVNTV09SRF9CQ1JZUFQgLSBVc2UgdGhlIENSWVBUX0JMT1dGSVNIIGFsZ29yaXRobSB0bwogKiBjcmVhdGUgdGhlIGhhc2guIFRoaXMgd2lsbCBwcm9kdWNlIGEgc3RhbmRhcmQgY3J5cHQgY29tcGF0aWJsZSBoYXNoIHVzaW5nCiAqIHRoZSAiJDJ5JCIgaWRlbnRpZmllci4gVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBhIDYwIGNoYXJhY3RlciBzdHJpbmcuCiAqCiAqCiAqCiAqCiAqIFBBU1NXT1JEX0FSR09OMkkgLSBVc2UgdGhlIEFyZ29uMmkgaGFzaGluZyBhbGdvcml0aG0gdG8gY3JlYXRlIHRoZSBoYXNoLgogKiBUaGlzIGFsZ29yaXRobSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBQSFAgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBBcmdvbjIgc3VwcG9ydC4KICoKICoKICoKICoKICogUEFTU1dPUkRfQVJHT04ySUQgLSBVc2UgdGhlIEFyZ29uMmlkIGhhc2hpbmcgYWxnb3JpdGhtIHRvIGNyZWF0ZSB0aGUgaGFzaC4KICogVGhpcyBhbGdvcml0aG0gaXMgb25seSBhdmFpbGFibGUgaWYgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggQXJnb24yIHN1cHBvcnQuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIHNhbHQgKHN0cmluZykgLSB0byBtYW51YWxseSBwcm92aWRlIGEgc2FsdCB0byB1c2Ugd2hlbiBoYXNoaW5nIHRoZSBwYXNzd29yZC4KICogTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVycmlkZSBhbmQgcHJldmVudCBhIHNhbHQgZnJvbSBiZWluZyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICoKICoKICogSWYgb21pdHRlZCwgYSByYW5kb20gc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCBieSBwYXNzd29yZF9oYXNoIGZvcgogKiBlYWNoIHBhc3N3b3JkIGhhc2hlZC4gVGhpcyBpcyB0aGUgaW50ZW5kZWQgbW9kZSBvZiBvcGVyYXRpb24uCiAqCiAqCiAqCiAqIFRoZSBzYWx0IG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9mIFBIUCA3LjAuMC4gSXQgaXMgbm93CiAqIHByZWZlcnJlZCB0byBzaW1wbHkgdXNlIHRoZSBzYWx0IHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuCiAqCiAqCiAqCiAqCiAqCiAqIGNvc3QgKGludGVnZXIpIC0gd2hpY2ggZGVub3RlcyB0aGUgYWxnb3JpdGhtaWMgY29zdCB0aGF0IHNob3VsZCBiZSB1c2VkLgogKiBFeGFtcGxlcyBvZiB0aGVzZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBjcnlwdCBwYWdlLgogKgogKgogKiBJZiBvbWl0dGVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgMTAgd2lsbCBiZSB1c2VkLiBUaGlzIGlzIGEgZ29vZAogKiBiYXNlbGluZSBjb3N0LCBidXQgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyIGluY3JlYXNpbmcgaXQgZGVwZW5kaW5nIG9uIHlvdXIgaGFyZHdhcmUuCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIG1lbW9yeV9jb3N0IChpbnRlZ2VyKSAtIE1heGltdW0gbWVtb3J5IChpbiBraWJpYnl0ZXMpIHRoYXQgbWF5CiAqIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgQXJnb24yIGhhc2guIERlZmF1bHRzIHRvIFBBU1NXT1JEX0FSR09OMl9ERUZBVUxUX01FTU9SWV9DT1NULgogKgogKgogKgogKgogKiB0aW1lX2Nvc3QgKGludGVnZXIpIC0gTWF4aW11bSBhbW91bnQgb2YgdGltZSBpdCBtYXkKICogdGFrZSB0byBjb21wdXRlIHRoZSBBcmdvbjIgaGFzaC4gRGVmYXVsdHMgdG8gUEFTU1dPUkRfQVJHT04yX0RFRkFVTFRfVElNRV9DT1NULgogKgogKgogKgogKgogKiB0aHJlYWRzIChpbnRlZ2VyKSAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3IgY29tcHV0aW5nCiAqIHRoZSBBcmdvbjIgaGFzaC4gRGVmYXVsdHMgdG8gUEFTU1dPUkRfQVJHT04yX0RFRkFVTFRfVEhSRUFEUy4KICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgVGhlIHVzZXIncyBwYXNzd29yZC4KICoKICogVXNpbmcgdGhlIFBBU1NXT1JEX0JDUllQVCBhcyB0aGUKICogYWxnb3JpdGhtLCB3aWxsIHJlc3VsdAogKiBpbiB0aGUgcGFzc3dvcmQgcGFyYW1ldGVyIGJlaW5nIHRydW5jYXRlZCB0byBhCiAqIG1heGltdW0gbGVuZ3RoIG9mIDcyIGNoYXJhY3RlcnMuCiAqIEBwYXJhbSBpbnR8c3RyaW5nfG51bGwgJGFsZ28gQSBwYXNzd29yZCBhbGdvcml0aG0gY29uc3RhbnQgZGVub3RpbmcgdGhlIGFsZ29yaXRobSB0byB1c2Ugd2hlbiBoYXNoaW5nIHRoZSBwYXNzd29yZC4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgb3B0aW9ucy4gU2VlIHRoZSBwYXNzd29yZCBhbGdvcml0aG0gY29uc3RhbnRzIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucyBmb3IgZWFjaCBhbGdvcml0aG0uCiAqCiAqIElmIG9taXR0ZWQsIGEgcmFuZG9tIHNhbHQgd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGUgZGVmYXVsdCBjb3N0IHdpbGwgYmUKICogdXNlZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgaGFzaGVkIHBhc3N3b3JkLgogKgogKiBUaGUgdXNlZCBhbGdvcml0aG0sIGNvc3QgYW5kIHNhbHQgYXJlIHJldHVybmVkIGFzIHBhcnQgb2YgdGhlIGhhc2guIFRoZXJlZm9yZSwKICogYWxsIGluZm9ybWF0aW9uIHRoYXQncyBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBoYXNoIGlzIGluY2x1ZGVkIGluIGl0LiBUaGlzIGFsbG93cwogKiB0aGUgcGFzc3dvcmRfdmVyaWZ5IGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgaGFzaCB3aXRob3V0CiAqIG5lZWRpbmcgc2VwYXJhdGUgc3RvcmFnZSBmb3IgdGhlIHNhbHQgb3IgYWxnb3JpdGhtIGluZm9ybWF0aW9uLgogKiBAdGhyb3dzIFBhc3N3b3JkRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwYXNzd29yZF9oYXNoKHN0cmluZyAkcGFzc3dvcmQsICRhbGdvLCBhcnJheSAkb3B0aW9ucyA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwYXNzd29yZF9oYXNoKCRwYXNzd29yZCwgJGFsZ28sICRvcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwYXNzd29yZF9oYXNoKCRwYXNzd29yZCwgJGFsZ28pOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGFzc3dvcmRFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pcntl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY250bEV4Y2VwdGlvbjsKCi8qKgogKiBFeGVjdXRlcyB0aGUgcHJvZ3JhbSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggcGF0aCBtdXN0IGJlIHRoZSBwYXRoIHRvIGEgYmluYXJ5IGV4ZWN1dGFibGUgb3IgYQogKiBzY3JpcHQgd2l0aCBhIHZhbGlkIHBhdGggcG9pbnRpbmcgdG8gYW4gZXhlY3V0YWJsZSBpbiB0aGUgc2hlYmFuZyAoCiAqICMhL3Vzci9sb2NhbC9iaW4vcGVybCBmb3IgZXhhbXBsZSkgYXMgdGhlIGZpcnN0IGxpbmUuICBTZWUgeW91ciBzeXN0ZW0ncwogKiBtYW4gZXhlY3ZlKDIpIHBhZ2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAqIEBwYXJhbSBhcnJheSAkYXJncyBhcmdzIGlzIGFuIGFycmF5IG9mIGFyZ3VtZW50IHN0cmluZ3MgcGFzc2VkIHRvIHRoZQogKiBwcm9ncmFtLgogKiBAcGFyYW0gYXJyYXkgJGVudnMgZW52cyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBwYXNzZWQgYXMKICogZW52aXJvbm1lbnQgdG8gdGhlIHByb2dyYW0uICBUaGUgYXJyYXkgaXMgaW4gdGhlIGZvcm1hdCBvZiBuYW1lID0mZ3Q7IHZhbHVlLAogKiB0aGUga2V5IGJlaW5nIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGFuZCB0aGUgdmFsdWUgYmVpbmcKICogdGhlIHZhbHVlIG9mIHRoYXQgdmFyaWFibGUuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX2V4ZWMoc3RyaW5nICRwYXRoLCBhcnJheSAkYXJncyA9IG51bGwsIGFycmF5ICRlbnZzID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbnZzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9leGVjKCRwYXRoLCAkYXJncywgJGVudnMpOwogICAgfSBlbHNlaWYgKCRhcmdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9leGVjKCRwYXRoLCAkYXJncyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGNudGxfZXhlYygkcGF0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQY250bEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGNudGxfZ2V0cHJpb3JpdHkgZ2V0cyB0aGUgcHJpb3JpdHkgb2YKICogcGlkLiBCZWNhdXNlIHByaW9yaXR5IGxldmVscyBjYW4gZGlmZmVyIGJldHdlZW4KICogc3lzdGVtIHR5cGVzIGFuZCBrZXJuZWwgdmVyc2lvbnMsIHBsZWFzZSBzZWUgeW91ciBzeXN0ZW0ncyBnZXRwcmlvcml0eSgyKQogKiBtYW4gcGFnZSBmb3Igc3BlY2lmaWMgZGV0YWlscy4KICoKICogQHBhcmFtIGludCAkcGlkIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyB1c2VkLgogKiBAcGFyYW0gaW50ICRwcm9jZXNzX2lkZW50aWZpZXIgT25lIG9mIFBSSU9fUEdSUCwgUFJJT19VU0VSCiAqIG9yIFBSSU9fUFJPQ0VTUy4KICogQHJldHVybiBpbnQgcGNudGxfZ2V0cHJpb3JpdHkgcmV0dXJucyB0aGUgcHJpb3JpdHkgb2YgdGhlIHByb2Nlc3MuICBBIGxvd2VyIG51bWVyaWNhbCB2YWx1ZSBjYXVzZXMgbW9yZSBmYXZvcmFibGUKICogc2NoZWR1bGluZy4KICogQHRocm93cyBQY250bEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGNudGxfZ2V0cHJpb3JpdHkoaW50ICRwaWQgPSBudWxsLCBpbnQgJHByb2Nlc3NfaWRlbnRpZmllciA9IFBSSU9fUFJPQ0VTUyk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHByb2Nlc3NfaWRlbnRpZmllciAhPT0gUFJJT19QUk9DRVNTKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgkcGlkLCAkcHJvY2Vzc19pZGVudGlmaWVyKTsKICAgIH0gZWxzZWlmICgkcGlkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgkcGlkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9nZXRwcmlvcml0eSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGNudGxfc2V0cHJpb3JpdHkgc2V0cyB0aGUgcHJpb3JpdHkgb2YKICogcGlkLgogKgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSBwcmlvcml0eSBpcyBnZW5lcmFsbHkgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UKICogLTIwIHRvIDIwLiBUaGUgZGVmYXVsdCBwcmlvcml0eQogKiBpcyAwIHdoaWxlIGEgbG93ZXIgbnVtZXJpY2FsIHZhbHVlIGNhdXNlcyBtb3JlCiAqIGZhdm9yYWJsZSBzY2hlZHVsaW5nLiAgQmVjYXVzZSBwcmlvcml0eSBsZXZlbHMgY2FuIGRpZmZlciBiZXR3ZWVuCiAqIHN5c3RlbSB0eXBlcyBhbmQga2VybmVsIHZlcnNpb25zLCBwbGVhc2Ugc2VlIHlvdXIgc3lzdGVtJ3Mgc2V0cHJpb3JpdHkoMikKICogbWFuIHBhZ2UgZm9yIHNwZWNpZmljIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHBpZCBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgdXNlZC4KICogQHBhcmFtIGludCAkcHJvY2Vzc19pZGVudGlmaWVyIE9uZSBvZiBQUklPX1BHUlAsIFBSSU9fVVNFUgogKiBvciBQUklPX1BST0NFU1MuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX3NldHByaW9yaXR5KGludCAkcHJpb3JpdHksIGludCAkcGlkID0gbnVsbCwgaW50ICRwcm9jZXNzX2lkZW50aWZpZXIgPSBQUklPX1BST0NFU1MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcHJvY2Vzc19pZGVudGlmaWVyICE9PSBQUklPX1BST0NFU1MpIHsKICAgICAgICAkcmVzdWx0ID0gXHBjbnRsX3NldHByaW9yaXR5KCRwcmlvcml0eSwgJHBpZCwgJHByb2Nlc3NfaWRlbnRpZmllcik7CiAgICB9IGVsc2VpZiAoJHBpZCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGNudGxfc2V0cHJpb3JpdHkoJHByaW9yaXR5LCAkcGlkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwY250bF9zZXRwcmlvcml0eSgkcHJpb3JpdHkpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBwY250bF9zaWduYWxfZGlzcGF0Y2ggZnVuY3Rpb24gY2FsbHMgdGhlIHNpZ25hbAogKiBoYW5kbGVycyBpbnN0YWxsZWQgYnkgcGNudGxfc2lnbmFsIGZvciBlYWNoIHBlbmRpbmcKICogc2lnbmFsLgogKgogKiBAdGhyb3dzIFBjbnRsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwY250bF9zaWduYWxfZGlzcGF0Y2goKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBjbnRsX3NpZ25hbF9kaXNwYXRjaCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBwY250bF9zaWdwcm9jbWFzayBmdW5jdGlvbiBhZGRzLCByZW1vdmVzIG9yIHNldHMgYmxvY2tlZAogKiBzaWduYWxzLCBkZXBlbmRpbmcgb24gdGhlIGhvdyBwYXJhbWV0ZXIuCiAqCiAqIEBwYXJhbSBpbnQgJGhvdyBTZXRzIHRoZSBiZWhhdmlvciBvZiBwY250bF9zaWdwcm9jbWFzay4gUG9zc2libGUKICogdmFsdWVzOgogKgogKiBTSUdfQkxPQ0s6IEFkZCB0aGUgc2lnbmFscyB0byB0aGUKICogY3VycmVudGx5IGJsb2NrZWQgc2lnbmFscy4KICogU0lHX1VOQkxPQ0s6IFJlbW92ZSB0aGUgc2lnbmFscyBmcm9tIHRoZQogKiBjdXJyZW50bHkgYmxvY2tlZCBzaWduYWxzLgogKiBTSUdfU0VUTUFTSzogUmVwbGFjZSB0aGUgY3VycmVudGx5CiAqIGJsb2NrZWQgc2lnbmFscyBieSB0aGUgZ2l2ZW4gbGlzdCBvZiBzaWduYWxzLgogKgogKiBAcGFyYW0gYXJyYXkgJHNldCBMaXN0IG9mIHNpZ25hbHMuCiAqIEBwYXJhbSBhcnJheXxudWxsICRvbGRzZXQgVGhlIG9sZHNldCBwYXJhbWV0ZXIgaXMgc2V0IHRvIGFuIGFycmF5CiAqIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIHByZXZpb3VzbHkgYmxvY2tlZCBzaWduYWxzLgogKiBAdGhyb3dzIFBjbnRsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwY250bF9zaWdwcm9jbWFzayhpbnQgJGhvdywgYXJyYXkgJHNldCwgP2FycmF5ICYkb2xkc2V0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwY250bF9zaWdwcm9jbWFzaygkaG93LCAkc2V0LCAkb2xkc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBjbnRsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRlcnJubwogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGVycm9yIGRlc2NyaXB0aW9uIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGNudGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBjbnRsX3N0cmVycm9yKGludCAkZXJybm8pOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwY250bF9zdHJlcnJvcigkZXJybm8pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNudGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pcre.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY3JlRXhjZXB0aW9uOwoKLyoqCiAqIFNlYXJjaGVzIHN1YmplY3QgZm9yIGFsbCBtYXRjaGVzIHRvIHRoZSByZWd1bGFyCiAqIGV4cHJlc3Npb24gZ2l2ZW4gaW4gcGF0dGVybiBhbmQgcHV0cyB0aGVtIGluCiAqIG1hdGNoZXMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieQogKiBmbGFncy4KICoKICogQWZ0ZXIgdGhlIGZpcnN0IG1hdGNoIGlzIGZvdW5kLCB0aGUgc3Vic2VxdWVudCBzZWFyY2hlcyAgYXJlIGNvbnRpbnVlZAogKiBvbiBmcm9tIGVuZCBvZiB0aGUgbGFzdCBtYXRjaC4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBUaGUgcGF0dGVybiB0byBzZWFyY2ggZm9yLCBhcyBhIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdCBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gYXJyYXkgJG1hdGNoZXMgQXJyYXkgb2YgYWxsIG1hdGNoZXMgaW4gbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgb3JkZXJlZCBhY2NvcmRpbmcgdG8KICogZmxhZ3MuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIENhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKG5vdGUgdGhhdCBpdCBkb2Vzbid0IG1ha2UKICogc2Vuc2UgdG8gdXNlIFBSRUdfUEFUVEVSTl9PUkRFUiB0b2dldGhlciB3aXRoCiAqIFBSRUdfU0VUX09SREVSKToKICoKICoKICogUFJFR19QQVRURVJOX09SREVSCiAqCiAqCiAqIE9yZGVycyByZXN1bHRzIHNvIHRoYXQgJG1hdGNoZXNbMF0gaXMgYW4gYXJyYXkgb2YgZnVsbAogKiBwYXR0ZXJuIG1hdGNoZXMsICRtYXRjaGVzWzFdIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgbWF0Y2hlZCBieQogKiB0aGUgZmlyc3QgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuLCBhbmQgc28gb24uCiAqCiAqCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogZXhhbXBsZTogLCB0aGlzIGlzIGEgdGVzdAogKiBleGFtcGxlOiAsIHRoaXMgaXMgYSB0ZXN0CiAqIF1dPgogKgogKgogKiBTbywgJG91dFswXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2hlZCBmdWxsIHBhdHRlcm4sCiAqIGFuZCAkb3V0WzFdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgZW5jbG9zZWQgYnkgdGFncy4KICoKICoKICoKICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgbmFtZWQgc3VicGF0dGVybnMsICRtYXRjaGVzCiAqIGFkZGl0aW9uYWxseSBjb250YWlucyBlbnRyaWVzIGZvciBrZXlzIHdpdGggdGhlIHN1YnBhdHRlcm4gbmFtZS4KICoKICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgZHVwbGljYXRlIG5hbWVkIHN1YnBhdHRlcm5zLCBvbmx5IHRoZSByaWdodG1vc3QKICogc3VicGF0dGVybiBpcyBzdG9yZWQgaW4gJG1hdGNoZXNbTkFNRV0uCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogWzFdID0+IGJhcgogKiApCiAqIF1dPgogKgogKgogKgogKgogKgogKgogKiBQUkVHX1NFVF9PUkRFUgogKgogKgogKiBPcmRlcnMgcmVzdWx0cyBzbyB0aGF0ICRtYXRjaGVzWzBdIGlzIGFuIGFycmF5IG9mIGZpcnN0IHNldAogKiBvZiBtYXRjaGVzLCAkbWF0Y2hlc1sxXSBpcyBhbiBhcnJheSBvZiBzZWNvbmQgc2V0IG9mIG1hdGNoZXMsCiAqIGFuZCBzbyBvbi4KICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBleGFtcGxlOiAsIGV4YW1wbGU6CiAqIHRoaXMgaXMgYSB0ZXN0LCB0aGlzIGlzIGEgdGVzdAogKiBdXT4KICoKICoKICoKICoKICoKICoKICogUFJFR19PRkZTRVRfQ0FQVFVSRQogKgogKgogKiBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCAoaW4gYnl0ZXMpIHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgdmFsdWUgb2YKICogbWF0Y2hlcyBpbnRvIGFuIGFycmF5IG9mIGFycmF5cyB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGFuCiAqIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGF0IG9mZnNldCAwCiAqIGFuZCBpdHMgc3RyaW5nIG9mZnNldCBpbnRvIHN1YmplY3QgYXQgb2Zmc2V0CiAqIDEuCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vYmFyYmF6CiAqIFsxXSA9PiAwCiAqICkKICoKICogKQogKgogKiBbMV0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vCiAqIFsxXSA9PiAwCiAqICkKICoKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogKQogKgogKiBbM10gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmF6CiAqIFsxXSA9PiA2CiAqICkKICoKICogKQogKgogKiApCiAqIF1dPgogKgogKgogKgogKgogKgogKgogKiBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHVubWF0Y2hlZCBzdWJwYXR0ZXJucyBhcmUgcmVwb3J0ZWQgYXMgTlVMTDsKICogb3RoZXJ3aXNlIHRoZXkgYXJlIHJlcG9ydGVkIGFzIGFuIGVtcHR5IHN0cmluZy4KICoKICoKICoKICoKICoKICogT3JkZXJzIHJlc3VsdHMgc28gdGhhdCAkbWF0Y2hlc1swXSBpcyBhbiBhcnJheSBvZiBmdWxsCiAqIHBhdHRlcm4gbWF0Y2hlcywgJG1hdGNoZXNbMV0gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBtYXRjaGVkIGJ5CiAqIHRoZSBmaXJzdCBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm4sIGFuZCBzbyBvbi4KICoKICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBleGFtcGxlOiAsIHRoaXMgaXMgYSB0ZXN0CiAqIGV4YW1wbGU6ICwgdGhpcyBpcyBhIHRlc3QKICogXV0+CiAqCiAqCiAqIFNvLCAkb3V0WzBdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBtYXRjaGVkIGZ1bGwgcGF0dGVybiwKICogYW5kICRvdXRbMV0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyBlbmNsb3NlZCBieSB0YWdzLgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogU28sICRvdXRbMF0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IG1hdGNoZWQgZnVsbCBwYXR0ZXJuLAogKiBhbmQgJG91dFsxXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIGVuY2xvc2VkIGJ5IHRhZ3MuCiAqCiAqIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIG5hbWVkIHN1YnBhdHRlcm5zLCAkbWF0Y2hlcwogKiBhZGRpdGlvbmFsbHkgY29udGFpbnMgZW50cmllcyBmb3Iga2V5cyB3aXRoIHRoZSBzdWJwYXR0ZXJuIG5hbWUuCiAqCiAqIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGR1cGxpY2F0ZSBuYW1lZCBzdWJwYXR0ZXJucywgb25seSB0aGUgcmlnaHRtb3N0CiAqIHN1YnBhdHRlcm4gaXMgc3RvcmVkIGluICRtYXRjaGVzW05BTUVdLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqCiAqIFsxXSA9PiBiYXIKICogKQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIE9yZGVycyByZXN1bHRzIHNvIHRoYXQgJG1hdGNoZXNbMF0gaXMgYW4gYXJyYXkgb2YgZmlyc3Qgc2V0CiAqIG9mIG1hdGNoZXMsICRtYXRjaGVzWzFdIGlzIGFuIGFycmF5IG9mIHNlY29uZCBzZXQgb2YgbWF0Y2hlcywKICogYW5kIHNvIG9uLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIGV4YW1wbGU6ICwgZXhhbXBsZToKICogdGhpcyBpcyBhIHRlc3QsIHRoaXMgaXMgYSB0ZXN0CiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICogSWYgdGhpcyBmbGFnIGlzIHBhc3NlZCwgZm9yIGV2ZXJ5IG9jY3VycmluZyBtYXRjaCB0aGUgYXBwZW5kYW50IHN0cmluZwogKiBvZmZzZXQgKGluIGJ5dGVzKSB3aWxsIGFsc28gYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIHZhbHVlIG9mCiAqIG1hdGNoZXMgaW50byBhbiBhcnJheSBvZiBhcnJheXMgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqICkKICoKICogWzFdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGZvbwogKiBbMV0gPT4gMAogKiApCiAqCiAqICkKICoKICogWzJdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhcgogKiBbMV0gPT4gMwogKiApCiAqCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICoKICogKQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHVubWF0Y2hlZCBzdWJwYXR0ZXJucyBhcmUgcmVwb3J0ZWQgYXMgTlVMTDsKICogb3RoZXJ3aXNlIHRoZXkgYXJlIHJlcG9ydGVkIGFzIGFuIGVtcHR5IHN0cmluZy4KICoKICogSWYgbm8gb3JkZXIgZmxhZyBpcyBnaXZlbiwgUFJFR19QQVRURVJOX09SREVSIGlzCiAqIGFzc3VtZWQuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBPcmRlcnMgcmVzdWx0cyBzbyB0aGF0ICRtYXRjaGVzWzBdIGlzIGFuIGFycmF5IG9mIGZ1bGwKICogcGF0dGVybiBtYXRjaGVzLCAkbWF0Y2hlc1sxXSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIG1hdGNoZWQgYnkKICogdGhlIGZpcnN0IHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiwgYW5kIHNvIG9uLgogKgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIGV4YW1wbGU6ICwgdGhpcyBpcyBhIHRlc3QKICogZXhhbXBsZTogLCB0aGlzIGlzIGEgdGVzdAogKiBdXT4KICoKICoKICogU28sICRvdXRbMF0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IG1hdGNoZWQgZnVsbCBwYXR0ZXJuLAogKiBhbmQgJG91dFsxXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIGVuY2xvc2VkIGJ5IHRhZ3MuCiAqCiAqCiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBTbywgJG91dFswXSBjb250YWlucyBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbWF0Y2hlZCBmdWxsIHBhdHRlcm4sCiAqIGFuZCAkb3V0WzFdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgZW5jbG9zZWQgYnkgdGFncy4KICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgbmFtZWQgc3VicGF0dGVybnMsICRtYXRjaGVzCiAqIGFkZGl0aW9uYWxseSBjb250YWlucyBlbnRyaWVzIGZvciBrZXlzIHdpdGggdGhlIHN1YnBhdHRlcm4gbmFtZS4KICoKICogSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgZHVwbGljYXRlIG5hbWVkIHN1YnBhdHRlcm5zLCBvbmx5IHRoZSByaWdodG1vc3QKICogc3VicGF0dGVybiBpcyBzdG9yZWQgaW4gJG1hdGNoZXNbTkFNRV0uCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogWzFdID0+IGJhcgogKiApCiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgcGF0dGVybiBtYXRjaGVzICh3aGljaCBtaWdodCBiZSB6ZXJvKS4KICogQHRocm93cyBQY3JlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwcmVnX21hdGNoX2FsbChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgYXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IFBSRUdfUEFUVEVSTl9PUkRFUiwgaW50ICRvZmZzZXQgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sICRzdWJqZWN0LCAkbWF0Y2hlcywgJGZsYWdzLCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBjcmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2VhcmNoZXMgc3ViamVjdCBmb3IgYSBtYXRjaCB0byB0aGUgcmVndWxhcgogKiBleHByZXNzaW9uIGdpdmVuIGluIHBhdHRlcm4uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgYXMgYSBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIGlucHV0IHN0cmluZy4KICogQHBhcmFtIGFycmF5ICRtYXRjaGVzIElmIG1hdGNoZXMgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGgKICogdGhlIHJlc3VsdHMgb2Ygc2VhcmNoLiAkbWF0Y2hlc1swXSB3aWxsIGNvbnRhaW4gdGhlCiAqIHRleHQgdGhhdCBtYXRjaGVkIHRoZSBmdWxsIHBhdHRlcm4sICRtYXRjaGVzWzFdCiAqIHdpbGwgaGF2ZSB0aGUgdGV4dCB0aGF0IG1hdGNoZWQgdGhlIGZpcnN0IGNhcHR1cmVkIHBhcmVudGhlc2l6ZWQKICogc3VicGF0dGVybiwgYW5kIHNvIG9uLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOgogKgogKgogKiBQUkVHX09GRlNFVF9DQVBUVVJFCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IChpbiBieXRlcykgd2lsbCBhbHNvIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZgogKiBtYXRjaGVzIGludG8gYW4gYXJyYXkgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqIFsxXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBmb28KICogWzFdID0+IDAKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICogXV0+CiAqCiAqCiAqCiAqCiAqCiAqCiAqIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwKICoKICoKICogSWYgdGhpcyBmbGFnIGlzIHBhc3NlZCwgdW5tYXRjaGVkIHN1YnBhdHRlcm5zIGFyZSByZXBvcnRlZCBhcyBOVUxMOwogKiBvdGhlcndpc2UgdGhleSBhcmUgcmVwb3J0ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqCiAqIHN0cmluZygyKSAiYWMiCiAqIFsxXT0+CiAqIHN0cmluZygxKSAiYSIKICogWzJdPT4KICogc3RyaW5nKDApICIiCiAqIFszXT0+CiAqIHN0cmluZygxKSAiYyIKICogfQogKiBhcnJheSg0KSB7CiAqIFswXT0+CiAqIHN0cmluZygyKSAiYWMiCiAqIFsxXT0+CiAqIHN0cmluZygxKSAiYSIKICogWzJdPT4KICogTlVMTAogKiBbM109PgogKiBzdHJpbmcoMSkgImMiCiAqIH0KICogXV0+CiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IChpbiBieXRlcykgd2lsbCBhbHNvIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZgogKiBtYXRjaGVzIGludG8gYW4gYXJyYXkgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBhbgogKiBhcnJheSBjb25zaXN0aW5nIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBhdCBvZmZzZXQgMAogKiBhbmQgaXRzIHN0cmluZyBvZmZzZXQgaW50byBzdWJqZWN0IGF0IG9mZnNldAogKiAxLgogKgogKgogKgogKiBdXT4KICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqCiAqIEFycmF5CiAqICgKICogWzBdID0+IGZvb2JhcmJhegogKiBbMV0gPT4gMAogKiApCiAqCiAqIFsxXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBmb28KICogWzFdID0+IDAKICogKQogKgogKiBbMl0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gYmFyCiAqIFsxXSA9PiAzCiAqICkKICoKICogWzNdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhegogKiBbMV0gPT4gNgogKiApCiAqCiAqICkKICogXV0+CiAqCiAqCiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCB1bm1hdGNoZWQgc3VicGF0dGVybnMgYXJlIHJlcG9ydGVkIGFzIE5VTEw7CiAqIG90aGVyd2lzZSB0aGV5IGFyZSByZXBvcnRlZCBhcyBhbiBlbXB0eSBzdHJpbmcuCiAqCiAqCiAqCiAqIF1dPgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICoKICoKICogc3RyaW5nKDIpICJhYyIKICogWzFdPT4KICogc3RyaW5nKDEpICJhIgogKiBbMl09PgogKiBzdHJpbmcoMCkgIiIKICogWzNdPT4KICogc3RyaW5nKDEpICJjIgogKiB9CiAqIGFycmF5KDQpIHsKICogWzBdPT4KICogc3RyaW5nKDIpICJhYyIKICogWzFdPT4KICogc3RyaW5nKDEpICJhIgogKiBbMl09PgogKiBOVUxMCiAqIFszXT0+CiAqIHN0cmluZygxKSAiYyIKICogfQogKiBdXT4KICoKICoKICoKICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6CiAqIEBwYXJhbSBpbnQgJG9mZnNldCBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCAoaW4gYnl0ZXMpIHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgdmFsdWUgb2YKICogbWF0Y2hlcyBpbnRvIGFuIGFycmF5IHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaXMgYW4KICogYXJyYXkgY29uc2lzdGluZyBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcgYXQgb2Zmc2V0IDAKICogYW5kIGl0cyBzdHJpbmcgb2Zmc2V0IGludG8gc3ViamVjdCBhdCBvZmZzZXQKICogMS4KICoKICoKICoKICogXV0+CiAqCiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKgogKiBBcnJheQogKiAoCiAqIFswXSA9PiBmb29iYXJiYXoKICogWzFdID0+IDAKICogKQogKgogKiBbMV0gPT4gQXJyYXkKICogKAogKiBbMF0gPT4gZm9vCiAqIFsxXSA9PiAwCiAqICkKICoKICogWzJdID0+IEFycmF5CiAqICgKICogWzBdID0+IGJhcgogKiBbMV0gPT4gMwogKiApCiAqCiAqIFszXSA9PiBBcnJheQogKiAoCiAqIFswXSA9PiBiYXoKICogWzFdID0+IDYKICogKQogKgogKiApCiAqIF1dPgogKgogKgogKgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICogQHJldHVybiBpbnQgcHJlZ19tYXRjaCByZXR1cm5zIDEgaWYgdGhlIHBhdHRlcm4KICogbWF0Y2hlcyBnaXZlbiBzdWJqZWN0LCAwIGlmIGl0IGRvZXMgbm90LgogKiBAdGhyb3dzIFBjcmVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByZWdfbWF0Y2goc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGFycmF5ICYkbWF0Y2hlcyA9IG51bGwsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQY3JlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNwbGl0IHRoZSBnaXZlbiBzdHJpbmcgYnkgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgYXMgYSBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhlIGlucHV0IHN0cmluZy4KICogQHBhcmFtIGludHxudWxsICRsaW1pdCBJZiBzcGVjaWZpZWQsIHRoZW4gb25seSBzdWJzdHJpbmdzIHVwIHRvIGxpbWl0CiAqIGFyZSByZXR1cm5lZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgYmVpbmcgcGxhY2VkIGluIHRoZSBsYXN0CiAqIHN1YnN0cmluZy4gIEEgbGltaXQgb2YgLTEgb3IgMCBtZWFucyAibm8gbGltaXQiLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcKICogZmxhZ3MgKGNvbWJpbmVkIHdpdGggdGhlIHwgYml0d2lzZSBvcGVyYXRvcik6CiAqCiAqCiAqIFBSRUdfU1BMSVRfTk9fRU1QVFkKICoKICoKICogSWYgdGhpcyBmbGFnIGlzIHNldCwgb25seSBub24tZW1wdHkgcGllY2VzIHdpbGwgYmUgcmV0dXJuZWQgYnkKICogcHJlZ19zcGxpdC4KICoKICoKICoKICoKICogUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBpbiB0aGUgZGVsaW1pdGVyIHBhdHRlcm4KICogd2lsbCBiZSBjYXB0dXJlZCBhbmQgcmV0dXJuZWQgYXMgd2VsbC4KICoKICoKICoKICoKICogUFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRQogKgogKgogKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBmb3IgZXZlcnkgb2NjdXJyaW5nIG1hdGNoIHRoZSBhcHBlbmRhbnQgc3RyaW5nCiAqIG9mZnNldCB3aWxsIGFsc28gYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIHJldHVybgogKiB2YWx1ZSBpbiBhbiBhcnJheSB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhlCiAqIG1hdGNoZWQgc3RyaW5nIGF0IG9mZnNldCAwIGFuZCBpdHMgc3RyaW5nIG9mZnNldAogKiBpbnRvIHN1YmplY3QgYXQgb2Zmc2V0IDEuCiAqCiAqCiAqCiAqCiAqCiAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgcmV0dXJuCiAqIHZhbHVlIGluIGFuIGFycmF5IHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaXMgYW4gYXJyYXkgY29uc2lzdGluZyBvZiB0aGUKICogbWF0Y2hlZCBzdHJpbmcgYXQgb2Zmc2V0IDAgYW5kIGl0cyBzdHJpbmcgb2Zmc2V0CiAqIGludG8gc3ViamVjdCBhdCBvZmZzZXQgMS4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgc3Vic3RyaW5ncyBvZiBzdWJqZWN0CiAqIHNwbGl0IGFsb25nIGJvdW5kYXJpZXMgbWF0Y2hlZCBieSBwYXR0ZXJuLgogKiBAdGhyb3dzIFBjcmVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHByZWdfc3BsaXQoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsID9pbnQgJGxpbWl0ID0gLTEsIGludCAkZmxhZ3MgPSAwKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX3NwbGl0KCRwYXR0ZXJuLCAkc3ViamVjdCwgJGxpbWl0LCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pdf.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQZGZFeGNlcHRpb247CgovKioKICogQWN0aXZhdGVzIGEgcHJldmlvdXNseSBjcmVhdGVkIHN0cnVjdHVyZSBlbGVtZW50IG9yIG90aGVyIGNvbnRlbnQgaXRlbS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGlkCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWN0aXZhdGVfaXRlbSgkcGRmZG9jLCBpbnQgJGlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hY3RpdmF0ZV9pdGVtKCRwZGZkb2MsICRpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZCBhIGxpbmsgYW5ub3RhdGlvbiB0byBhIHRhcmdldCB3aXRoaW4gdGhlIGN1cnJlbnQgUERGIGZpbGUuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9jcmVhdGVfYWN0aW9uIHdpdGggdHlwZT1Hb1RvCiAqIGFuZCBQREZfY3JlYXRlX2Fubm90YXRpb24gd2l0aAogKiB0eXBlPUxpbmsgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR4CiAqIEBwYXJhbSBmbG9hdCAkbG93ZXJsZWZ0eQogKiBAcGFyYW0gZmxvYXQgJHVwcGVycmlnaHR4CiAqIEBwYXJhbSBmbG9hdCAkdXBwZXJyaWdodHkKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRkZXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX2xvY2FsbGluaygkcGRmZG9jLCBmbG9hdCAkbG93ZXJsZWZ0eCwgZmxvYXQgJGxvd2VybGVmdHksIGZsb2F0ICR1cHBlcnJpZ2h0eCwgZmxvYXQgJHVwcGVycmlnaHR5LCBpbnQgJHBhZ2UsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYWRkX2xvY2FsbGluaygkcGRmZG9jLCAkbG93ZXJsZWZ0eCwgJGxvd2VybGVmdHksICR1cHBlcnJpZ2h0eCwgJHVwcGVycmlnaHR5LCAkcGFnZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGEgbmFtZWQgZGVzdGluYXRpb24gb24gYW4gYXJiaXRyYXJ5IHBhZ2UgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9hZGRfbmFtZWRkZXN0KCRwZGZkb2MsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfbmFtZWRkZXN0KCRwZGZkb2MsICRuYW1lLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgYW4gYW5ub3RhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UKICogUERGX2NyZWF0ZV9hbm5vdGF0aW9uIHdpdGgKICogdHlwZT1UZXh0IGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkbGx4CiAqIEBwYXJhbSBmbG9hdCAkbGx5CiAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRzCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlCiAqIEBwYXJhbSBzdHJpbmcgJGljb24KICogQHBhcmFtIGludCAkb3BlbgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2FkZF9ub3RlKCRwZGZkb2MsIGZsb2F0ICRsbHgsIGZsb2F0ICRsbHksIGZsb2F0ICR1cngsIGZsb2F0ICR1cnksIHN0cmluZyAkY29udGVudHMsIHN0cmluZyAkdGl0bGUsIHN0cmluZyAkaWNvbiwgaW50ICRvcGVuKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfbm90ZSgkcGRmZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkY29udGVudHMsICR0aXRsZSwgJGljb24sICRvcGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWRkIGEgZmlsZSBsaW5rIGFubm90YXRpb24gdG8gYSBQREYgdGFyZ2V0LgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfY3JlYXRlX2FjdGlvbiB3aXRoCiAqIHR5cGU9R29Ub1IgYW5kCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiB3aXRoCiAqIHR5cGU9TGluayBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGJvdHRvbV9sZWZ0X3gKICogQHBhcmFtIGZsb2F0ICRib3R0b21fbGVmdF95CiAqIEBwYXJhbSBmbG9hdCAkdXBfcmlnaHRfeAogKiBAcGFyYW0gZmxvYXQgJHVwX3JpZ2h0X3kKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRkZXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX3BkZmxpbmsoJHBkZmRvYywgZmxvYXQgJGJvdHRvbV9sZWZ0X3gsIGZsb2F0ICRib3R0b21fbGVmdF95LCBmbG9hdCAkdXBfcmlnaHRfeCwgZmxvYXQgJHVwX3JpZ2h0X3ksIHN0cmluZyAkZmlsZW5hbWUsIGludCAkcGFnZSwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfcGRmbGluaygkcGRmZG9jLCAkYm90dG9tX2xlZnRfeCwgJGJvdHRvbV9sZWZ0X3ksICR1cF9yaWdodF94LCAkdXBfcmlnaHRfeSwgJGZpbGVuYW1lLCAkcGFnZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBZGRzIGFuIGV4aXN0aW5nIGltYWdlIGFzIHRodW1ibmFpbCBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYWRkX3RodW1ibmFpbCgkcGRmZG9jLCBpbnQgJGltYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9hZGRfdGh1bWJuYWlsKCRwZGZkb2MsICRpbWFnZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSB3ZWJsaW5rIGFubm90YXRpb24gdG8gYSB0YXJnZXQgdXJsIG9uIHRoZSBXZWIuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9jcmVhdGVfYWN0aW9uIHdpdGggdHlwZT1VUkkKICogYW5kIFBERl9jcmVhdGVfYW5ub3RhdGlvbiB3aXRoCiAqIHR5cGU9TGluayBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGxvd2VybGVmdHgKICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR5CiAqIEBwYXJhbSBmbG9hdCAkdXBwZXJyaWdodHgKICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eQogKiBAcGFyYW0gc3RyaW5nICR1cmwKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9hZGRfd2VibGluaygkcGRmZG9jLCBmbG9hdCAkbG93ZXJsZWZ0eCwgZmxvYXQgJGxvd2VybGVmdHksIGZsb2F0ICR1cHBlcnJpZ2h0eCwgZmxvYXQgJHVwcGVycmlnaHR5LCBzdHJpbmcgJHVybCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYWRkX3dlYmxpbmsoJHBkZmRvYywgJGxvd2VybGVmdHgsICRsb3dlcmxlZnR5LCAkdXBwZXJyaWdodHgsICR1cHBlcnJpZ2h0eSwgJHVybCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBmaWxlIGF0dGFjaG1lbnQgYW5ub3RhdGlvbi4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UKICogUERGX2NyZWF0ZV9hbm5vdGF0aW9uIHdpdGgKICogdHlwZT1GaWxlQXR0YWNobWVudCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGxseAogKiBAcGFyYW0gZmxvYXQgJGxseQogKiBAcGFyYW0gZmxvYXQgJHVyeAogKiBAcGFyYW0gZmxvYXQgJHVyeQogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRkZXNjcmlwdGlvbgogKiBAcGFyYW0gc3RyaW5nICRhdXRob3IKICogQHBhcmFtIHN0cmluZyAkbWltZXR5cGUKICogQHBhcmFtIHN0cmluZyAkaWNvbgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2F0dGFjaF9maWxlKCRwZGZkb2MsIGZsb2F0ICRsbHgsIGZsb2F0ICRsbHksIGZsb2F0ICR1cngsIGZsb2F0ICR1cnksIHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkZGVzY3JpcHRpb24sIHN0cmluZyAkYXV0aG9yLCBzdHJpbmcgJG1pbWV0eXBlLCBzdHJpbmcgJGljb24pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2F0dGFjaF9maWxlKCRwZGZkb2MsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSwgJGRlc2NyaXB0aW9uLCAkYXV0aG9yLCAkbWltZXR5cGUsICRpY29uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbGF5ZXIgZm9yIHN1YnNlcXVlbnQgb3V0cHV0IG9uIHRoZSBwYWdlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBQREYgMS41LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRsYXllcgogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2JlZ2luX2xheWVyKCRwZGZkb2MsIGludCAkbGF5ZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2JlZ2luX2xheWVyKCRwZGZkb2MsICRsYXllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQsIGFuZCBzcGVjaWZpZXMgdmFyaW91cyBvcHRpb25zLgogKiBUaGUgcGFyYW1ldGVycyB3aWR0aCBhbmQgaGVpZ2h0CiAqIGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbmV3IHBhZ2UgaW4gcG9pbnRzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICoKICogQ29tbW9uIFBhZ2UgU2l6ZXMgaW4gUG9pbnRzCiAqCiAqCiAqCiAqIG5hbWUKICogc2l6ZQogKgogKgogKgogKgogKiBBMAogKiAyMzgwIHggMzM2OAogKgogKgogKiBBMQogKiAxNjg0IHggMjM4MAogKgogKgogKiBBMgogKiAxMTkwIHggMTY4NAogKgogKgogKiBBMwogKiA4NDIgeCAxMTkwCiAqCiAqCiAqIEE0CiAqIDU5NSB4IDg0MgogKgogKgogKiBBNQogKiA0MjEgeCA1OTUKICoKICoKICogQTYKICogMjk3IHggNDIxCiAqCiAqCiAqIEI1CiAqIDUwMSB4IDcwOQogKgogKgogKiBsZXR0ZXIgKDguNSIgeCAxMSIpCiAqIDYxMiB4IDc5MgogKgogKgogKiBsZWdhbCAoOC41IiB4IDE0IikKICogNjEyIHggMTAwOAogKgogKgogKiBsZWRnZXIgKDE3IiB4IDExIikKICogMTIyNCB4IDc5MgogKgogKgogKiAxMSIgeCAxNyIKICogNzkyIHggMTIyNAogKgogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9iZWdpbl9wYWdlX2V4dCgkcGRmZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQsIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfYmVnaW5fcGFnZV9leHQoJHBkZmRvYywgJHdpZHRoLCAkaGVpZ2h0LCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIFBERl9iZWdpbl9wYWdlX2V4dCBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfYmVnaW5fcGFnZSgkcGRmZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2JlZ2luX3BhZ2UoJHBkZmRvYywgJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWRkcyBhIGNpcmNsZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRyCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2lyY2xlKCRwZGZkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2NpcmNsZSgkcGRmZG9jLCAkeCwgJHksICRyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVXNlcyB0aGUgY3VycmVudCBwYXRoIGFzIGNsaXBwaW5nIHBhdGgsIGFuZCB0ZXJtaW5hdGUgdGhlIHBhdGguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jbGlwKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbGlwKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2xvc2VzIHRoZSBwYWdlIGhhbmRsZSwgYW5kIGZyZWVzIGFsbCBwYWdlLXJlbGF0ZWQgcmVzb3VyY2VzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jbG9zZV9wZGlfcGFnZSgkcCwgaW50ICRwYWdlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZV9wZGlfcGFnZSgkcCwgJHBhZ2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgYWxsIG9wZW4gcGFnZSBoYW5kbGVzLCBhbmQgY2xvc2VzIHRoZSBpbnB1dCBQREYgZG9jdW1lbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNywKICogdXNlIFBERl9jbG9zZV9wZGlfZG9jdW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJGRvYwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2Nsb3NlX3BkaSgkcCwgaW50ICRkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2Nsb3NlX3BkaSgkcCwgJGRvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgZ2VuZXJhdGVkIFBERiBmaWxlLCBhbmQgZnJlZXMgYWxsIGRvY3VtZW50LXJlbGF0ZWQgcmVzb3VyY2VzLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfZW5kX2RvY3VtZW50IGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2Nsb3NlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgcGF0aCwgZmlsbHMsIGFuZCBzdHJva2VzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoX2ZpbGxfc3Ryb2tlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgdGhlIHBhdGgsIGFuZCBzdHJva2VzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoX3N0cm9rZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfY2xvc2VwYXRoX3N0cm9rZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgY3VycmVudCBwYXRoLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jbG9zZXBhdGgoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb25jYXRlbmF0ZXMgYSBtYXRyaXggdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gbWF0cml4IChDVE0pLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkYQogKiBAcGFyYW0gZmxvYXQgJGIKICogQHBhcmFtIGZsb2F0ICRjCiAqIEBwYXJhbSBmbG9hdCAkZAogKiBAcGFyYW0gZmxvYXQgJGUKICogQHBhcmFtIGZsb2F0ICRmCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY29uY2F0KCRwLCBmbG9hdCAkYSwgZmxvYXQgJGIsIGZsb2F0ICRjLCBmbG9hdCAkZCwgZmxvYXQgJGUsIGZsb2F0ICRmKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9jb25jYXQoJHAsICRhLCAkYiwgJGMsICRkLCAkZSwgJGYpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQcmludHMgdGV4dCBhdCB0aGUgbmV4dCBsaW5lLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9jb250aW51ZV90ZXh0KCRwLCBzdHJpbmcgJHRleHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2NvbnRpbnVlX3RleHQoJHAsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRHJhd3MgYSBCZXppZXIgY3VydmUgZnJvbSB0aGUgY3VycmVudCBwb2ludCwgdXNpbmcgMyBtb3JlIGNvbnRyb2wgcG9pbnRzLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkeDEKICogQHBhcmFtIGZsb2F0ICR5MQogKiBAcGFyYW0gZmxvYXQgJHgyCiAqIEBwYXJhbSBmbG9hdCAkeTIKICogQHBhcmFtIGZsb2F0ICR4MwogKiBAcGFyYW0gZmxvYXQgJHkzCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfY3VydmV0bygkcCwgZmxvYXQgJHgxLCBmbG9hdCAkeTEsIGZsb2F0ICR4MiwgZmxvYXQgJHkyLCBmbG9hdCAkeDMsIGZsb2F0ICR5Myk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfY3VydmV0bygkcCwgJHgxLCAkeTEsICR4MiwgJHkyLCAkeDMsICR5Myk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlbGV0ZXMgYSBQREZsaWIgb2JqZWN0LCBhbmQgZnJlZXMgYWxsIGludGVybmFsIHJlc291cmNlcy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZGVsZXRlKCRwZGZkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2RlbGV0ZSgkcGRmZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRGVhY3RpdmF0ZXMgYWxsIGFjdGl2ZSBsYXllcnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIFBERiAxLjUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX2xheWVyKCRwZGZkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2VuZF9sYXllcigkcGRmZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgYSBwYWdlLCBhbmQgYXBwbGllcyB2YXJpb3VzIG9wdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3BhZ2VfZXh0KCRwZGZkb2MsIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZW5kX3BhZ2VfZXh0KCRwZGZkb2MsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgdGhlIHBhZ2UuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9lbmRfcGFnZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZW5kX3BhZ2UoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaW5pc2hlcyB0aGUgcGF0dGVybiBkZWZpbml0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3BhdHRlcm4oJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2VuZF9wYXR0ZXJuKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmluaXNoZXMgYSB0ZW1wbGF0ZSBkZWZpbml0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZW5kX3RlbXBsYXRlKCRwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9lbmRfdGVtcGxhdGUoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaWxscyBhbmQgc3Ryb2tlcyB0aGUgY3VycmVudCBwYXRoIHdpdGggdGhlIGN1cnJlbnQgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZmlsbF9zdHJva2UoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2ZpbGxfc3Ryb2tlKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRmlsbHMgdGhlIGludGVyaW9yIG9mIHRoZSBjdXJyZW50IHBhdGggd2l0aCB0aGUgY3VycmVudCBmaWxsIGNvbG9yLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfZmlsbCgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZmlsbCgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhbiBpbWFnZSBvciB0ZW1wbGF0ZSBvbiB0aGUgcGFnZSwgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRpbWFnZQogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9maXRfaW1hZ2UoJHBkZmRvYywgaW50ICRpbWFnZSwgZmxvYXQgJHgsIGZsb2F0ICR5LCBzdHJpbmcgJG9wdGxpc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2ZpdF9pbWFnZSgkcGRmZG9jLCAkaW1hZ2UsICR4LCAkeSwgJG9wdGxpc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQbGFjZXMgYW4gaW1wb3J0ZWQgUERGIHBhZ2Ugb24gdGhlIHBhZ2UsIHN1YmplY3QgdG8gdmFyaW91cyBvcHRpb25zLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9maXRfcGRpX3BhZ2UoJHBkZmRvYywgaW50ICRwYWdlLCBmbG9hdCAkeCwgZmxvYXQgJHksIHN0cmluZyAkb3B0bGlzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfZml0X3BkaV9wYWdlKCRwZGZkb2MsICRwYWdlLCAkeCwgJHksICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBvbiB0aGUgcGFnZSwgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2ZpdF90ZXh0bGluZSgkcGRmZG9jLCBzdHJpbmcgJHRleHQsIGZsb2F0ICR4LCBmbG9hdCAkeSwgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9maXRfdGV4dGxpbmUoJHBkZmRvYywgJHRleHQsICR4LCAkeSwgJG9wdGxpc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXNldCBhbGwgY29sb3IgYW5kIGdyYXBoaWNzIHN0YXRlIHBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdHMuCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9pbml0Z3JhcGhpY3MoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX2luaXRncmFwaGljcygkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgbGluZSBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIGFub3RoZXIgcG9pbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX2xpbmV0bygkcCwgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9saW5ldG8oJHAsICR4LCAkeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbmRzIGEgYnVpbHQtaW4gc3BvdCBjb2xvciBuYW1lLCBvciBtYWtlcyBhIG5hbWVkIHNwb3QgY29sb3IgZnJvbSB0aGUKICogY3VycmVudCBmaWxsIGNvbG9yLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJHNwb3RuYW1lCiAqIEByZXR1cm4gaW50CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfbWFrZXNwb3Rjb2xvcigkcCwgc3RyaW5nICRzcG90bmFtZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9tYWtlc3BvdGNvbG9yKCRwLCAkc3BvdG5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgcG9pbnQgZm9yIGdyYXBoaWNzIG91dHB1dC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfbW92ZXRvKCRwLCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX21vdmV0bygkcCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIG5ldyBQREYgZmlsZSB1c2luZyB0aGUgc3VwcGxpZWQgZmlsZSBuYW1lLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiBQREZfYmVnaW5fZG9jdW1lbnQgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfb3Blbl9maWxlKCRwLCBzdHJpbmcgJGZpbGVuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9vcGVuX2ZpbGUoJHAsICRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhbiBpbWFnZSBhbmQgc2NhbGVzIGl0LiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDUsIHVzZQogKiBQREZfZml0X2ltYWdlIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRzY2FsZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3BsYWNlX2ltYWdlKCRwZGZkb2MsIGludCAkaW1hZ2UsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHNjYWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9wbGFjZV9pbWFnZSgkcGRmZG9jLCAkaW1hZ2UsICR4LCAkeSwgJHNjYWxlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgUERGIHBhZ2UgYW5kIHNjYWxlcyBpdC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA1LCB1c2UKICogUERGX2ZpdF9wZGlfcGFnZSBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gaW50ICRwYWdlCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICRzeAogKiBAcGFyYW0gZmxvYXQgJHN5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcGxhY2VfcGRpX3BhZ2UoJHBkZmRvYywgaW50ICRwYWdlLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRzeCwgZmxvYXQgJHN5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9wbGFjZV9wZGlfcGFnZSgkcGRmZG9jLCAkcGFnZSwgJHgsICR5LCAkc3gsICRzeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcmVjdGFuZ2xlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3JlY3QoJHAsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHdpZHRoLCBmbG9hdCAkaGVpZ2h0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9yZWN0KCRwLCAkeCwgJHksICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlc3RvcmVzIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIGdyYXBoaWNzIHN0YXRlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcmVzdG9yZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfcmVzdG9yZSgkcCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJvdGF0ZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcGhpCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfcm90YXRlKCRwLCBmbG9hdCAkcGhpKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9yb3RhdGUoJHAsICRwaGkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTYXZlcyB0aGUgY3VycmVudCBncmFwaGljcyBzdGF0ZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NhdmUoJHApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NhdmUoJHApOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTY2FsZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkc3gKICogQHBhcmFtIGZsb2F0ICRzeQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NjYWxlKCRwLCBmbG9hdCAkc3gsIGZsb2F0ICRzeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2NhbGUoJHAsICRzeCwgJHN5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgYm9yZGVyIGNvbG9yIGZvciBhbGwga2luZHMgb2YgYW5ub3RhdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIHRoZSBvcHRpb24gYW5ub3Rjb2xvciBpbgogKiBQREZfY3JlYXRlX2Fubm90YXRpb24gaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2JvcmRlcl9jb2xvcigkcCwgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0X2JvcmRlcl9jb2xvcigkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGJvcmRlciBkYXNoIHN0eWxlIGZvciBhbGwga2luZHMgb2YgYW5ub3RhdGlvbnMuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlCiAqIHRoZSBvcHRpb24gZGFzaGFycmF5IGluCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJGJsYWNrCiAqIEBwYXJhbSBmbG9hdCAkd2hpdGUKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRfYm9yZGVyX2Rhc2goJHBkZmRvYywgZmxvYXQgJGJsYWNrLCBmbG9hdCAkd2hpdGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9ib3JkZXJfZGFzaCgkcGRmZG9jLCAkYmxhY2ssICR3aGl0ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGJvcmRlciBzdHlsZSBmb3IgYWxsIGtpbmRzIG9mIGFubm90YXRpb25zLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZQogKiB0aGUgb3B0aW9ucyBib3JkZXJzdHlsZSBhbmQKICogbGluZXdpZHRoIGluCiAqIFBERl9jcmVhdGVfYW5ub3RhdGlvbiBpbnN0ZWFkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRzdHlsZQogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2JvcmRlcl9zdHlsZSgkcGRmZG9jLCBzdHJpbmcgJHN0eWxlLCBmbG9hdCAkd2lkdGgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9ib3JkZXJfc3R5bGUoJHBkZmRvYywgJHN0eWxlLCAkd2lkdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBGaWxsIGRvY3VtZW50IGluZm9ybWF0aW9uIGZpZWxkIGtleSB3aXRoCiAqIHZhbHVlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldF9pbmZvKCRwLCBzdHJpbmcgJGtleSwgc3RyaW5nICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0X2luZm8oJHAsICRrZXksICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERlZmluZXMgaGllcmFyY2hpY2FsIGFuZCBncm91cCByZWxhdGlvbnNoaXBzIGFtb25nIGxheWVycy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgUERGIDEuNS4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIHN0cmluZyAkdHlwZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X2xheWVyX2RlcGVuZGVuY3koJHBkZmRvYywgc3RyaW5nICR0eXBlLCBzdHJpbmcgJG9wdGxpc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9sYXllcl9kZXBlbmRlbmN5KCRwZGZkb2MsICR0eXBlLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgc29tZSBQREZsaWIgcGFyYW1ldGVyIHdpdGggc3RyaW5nIHR5cGUuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X3BhcmFtZXRlcigkcCwgc3RyaW5nICRrZXksIHN0cmluZyAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF9wYXJhbWV0ZXIoJHAsICRrZXksICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIHBvc2l0aW9uIGZvciB0ZXh0IG91dHB1dCBvbiB0aGUgcGFnZS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0X3RleHRfcG9zKCRwLCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF90ZXh0X3BvcygkcCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgdmFsdWUgb2Ygc29tZSBQREZsaWIgcGFyYW1ldGVyIHdpdGggbnVtZXJpY2FsIHR5cGUuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRfdmFsdWUoJHAsIHN0cmluZyAka2V5LCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldF92YWx1ZSgkcCwgJGtleSwgJHZhbHVlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBjb2xvciBzcGFjZSBhbmQgY29sb3IuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAkZnN0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yc3BhY2UKICogQHBhcmFtIGZsb2F0ICRjMQogKiBAcGFyYW0gZmxvYXQgJGMyCiAqIEBwYXJhbSBmbG9hdCAkYzMKICogQHBhcmFtIGZsb2F0ICRjNAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGNvbG9yKCRwLCBzdHJpbmcgJGZzdHlwZSwgc3RyaW5nICRjb2xvcnNwYWNlLCBmbG9hdCAkYzEsIGZsb2F0ICRjMiwgZmxvYXQgJGMzLCBmbG9hdCAkYzQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGNvbG9yKCRwLCAkZnN0eXBlLCAkY29sb3JzcGFjZSwgJGMxLCAkYzIsICRjMywgJGM0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBkYXNoIHBhdHRlcm4gdG8gYiBibGFjawogKiBhbmQgdyB3aGl0ZSB1bml0cy4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkYgogKiBAcGFyYW0gZmxvYXQgJHcKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRkYXNoKCRwZGZkb2MsIGZsb2F0ICRiLCBmbG9hdCAkdyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0ZGFzaCgkcGRmZG9jLCAkYiwgJHcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGEgZGFzaCBwYXR0ZXJuIGRlZmluZWQgYnkgYW4gb3B0aW9uIGxpc3QuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0ZGFzaHBhdHRlcm4oJHBkZmRvYywgc3RyaW5nICRvcHRsaXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRkYXNocGF0dGVybigkcGRmZG9jLCAkb3B0bGlzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGZsYXRuZXNzIHBhcmFtZXRlci4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmZG9jCiAqIEBwYXJhbSBmbG9hdCAkZmxhdG5lc3MKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRmbGF0KCRwZGZkb2MsIGZsb2F0ICRmbGF0bmVzcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0ZmxhdCgkcGRmZG9jLCAkZmxhdG5lc3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGZvbnQgaW4gdGhlIHNwZWNpZmllZCBmb250c2l6ZSwgdXNpbmcgYQogKiBmb250IGhhbmRsZSByZXR1cm5lZCBieSBQREZfbG9hZF9mb250LgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIGludCAkZm9udAogKiBAcGFyYW0gZmxvYXQgJGZvbnRzaXplCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0Zm9udCgkcGRmZG9jLCBpbnQgJGZvbnQsIGZsb2F0ICRmb250c2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0Zm9udCgkcGRmZG9jLCAkZm9udCwgJGZvbnRzaXplKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBmaWxsIGNvbG9yIHRvIGEgZ3JheSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlLgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkZwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGdyYXlfZmlsbCgkcCwgZmxvYXQgJGcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGdyYXlfZmlsbCgkcCwgJGcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IHN0cm9rZSBjb2xvciB0byBhIGdyYXkgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIGluY2x1c2l2ZS4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA0LCB1c2UKICogUERGX3NldGNvbG9yIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJGcKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRncmF5X3N0cm9rZSgkcCwgZmxvYXQgJGcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGdyYXlfc3Ryb2tlKCRwLCAkZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHRvIGEgZ3JheSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEgaW5jbHVzaXZlLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkZwogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGdyYXkoJHAsIGZsb2F0ICRnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRncmF5KCRwLCAkZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGxpbmVqb2luIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBzaGFwZQogKiBhdCB0aGUgY29ybmVycyBvZiBwYXRocyB0aGF0IGFyZSBzdHJva2VkLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBpbnQgJHZhbHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0bGluZWpvaW4oJHAsIGludCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldGxpbmVqb2luKCRwLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGxpbmUgd2lkdGguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldGxpbmV3aWR0aCgkcCwgZmxvYXQgJHdpZHRoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRsaW5ld2lkdGgoJHAsICR3aWR0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIGZsb2F0ICRhCiAqIEBwYXJhbSBmbG9hdCAkYgogKiBAcGFyYW0gZmxvYXQgJGMKICogQHBhcmFtIGZsb2F0ICRkCiAqIEBwYXJhbSBmbG9hdCAkZQogKiBAcGFyYW0gZmxvYXQgJGYKICogQHRocm93cyBQZGZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIFBERl9zZXRtYXRyaXgoJHAsIGZsb2F0ICRhLCBmbG9hdCAkYiwgZmxvYXQgJGMsIGZsb2F0ICRkLCBmbG9hdCAkZSwgZmxvYXQgJGYpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldG1hdHJpeCgkcCwgJGEsICRiLCAkYywgJGQsICRlLCAkZik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIG1pdGVyIGxpbWl0LlJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZmRvYwogKiBAcGFyYW0gZmxvYXQgJG1pdGVyCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0bWl0ZXJsaW1pdCgkcGRmZG9jLCBmbG9hdCAkbWl0ZXIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NldG1pdGVybGltaXQoJHBkZmRvYywgJG1pdGVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBmaWxsIGNvbG9yIHRvIHRoZSBzdXBwbGllZCBSR0IgdmFsdWVzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0cmdiY29sb3JfZmlsbCgkcCwgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc2V0cmdiY29sb3JfZmlsbCgkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgc3Ryb2tlIGNvbG9yIHRvIHRoZSBzdXBwbGllZCBSR0IgdmFsdWVzLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDQsIHVzZQogKiBQREZfc2V0Y29sb3IgaW5zdGVhZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2V0cmdiY29sb3Jfc3Ryb2tlKCRwLCBmbG9hdCAkcmVkLCBmbG9hdCAkZ3JlZW4sIGZsb2F0ICRibHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRyZ2Jjb2xvcl9zdHJva2UoJHAsICRyZWQsICRncmVlbiwgJGJsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IGZpbGwgYW5kIHN0cm9rZSBjb2xvciB0byB0aGUgc3VwcGxpZWQgUkdCIHZhbHVlcy4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA0LCB1c2UKICogUERGX3NldGNvbG9yIGluc3RlYWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJHJlZAogKiBAcGFyYW0gZmxvYXQgJGdyZWVuCiAqIEBwYXJhbSBmbG9hdCAkYmx1ZQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NldHJnYmNvbG9yKCRwLCBmbG9hdCAkcmVkLCBmbG9hdCAkZ3JlZW4sIGZsb2F0ICRibHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zZXRyZ2Jjb2xvcigkcCwgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZGZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFByaW50cyB0ZXh0IGluIHRoZSBjdXJyZW50IGZvbnQuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEB0aHJvd3MgUGRmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBQREZfc2hvd194eSgkcCwgc3RyaW5nICR0ZXh0LCBmbG9hdCAkeCwgZmxvYXQgJHkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3Nob3dfeHkoJHAsICR0ZXh0LCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQcmludHMgdGV4dCBpbiB0aGUgY3VycmVudCBmb250IGFuZCBzaXplIGF0CiAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGZkb2MKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3Nob3coJHBkZmRvYywgc3RyaW5nICR0ZXh0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXFBERl9zaG93KCRwZGZkb2MsICR0ZXh0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2tld3MgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGluIHggYW5kIHkgZGlyZWN0aW9uIGJ5IGFscGhhCiAqIGFuZCBiZXRhIGRlZ3JlZXMsIHJlc3BlY3RpdmVseS4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAcGFyYW0gZmxvYXQgJGFscGhhCiAqIEBwYXJhbSBmbG9hdCAkYmV0YQogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3NrZXcoJHAsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcUERGX3NrZXcoJHAsICRhbHBoYSwgJGJldGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGRmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdHJva2VzIHRoZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgY29sb3IgYW5kIGxpbmUgd2lkdGgsIGFuZCBjbGVhciBpdC4KICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcAogKiBAdGhyb3dzIFBkZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gUERGX3N0cm9rZSgkcCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxQREZfc3Ryb2tlKCRwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBkZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pgsql.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQZ3NxbEV4Y2VwdGlvbjsKCi8qKgogKiBwZ19jYW5jZWxfcXVlcnkgY2FuY2VscyBhbiBhc3luY2hyb25vdXMgcXVlcnkgc2VudCB3aXRoCiAqIHBnX3NlbmRfcXVlcnksIHBnX3NlbmRfcXVlcnlfcGFyYW1zCiAqIG9yIHBnX3NlbmRfZXhlY3V0ZS4gWW91IGNhbm5vdCBjYW5jZWwgYSBxdWVyeSBleGVjdXRlZCB1c2luZwogKiBwZ19xdWVyeS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY2FuY2VsX3F1ZXJ5KCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2NhbmNlbF9xdWVyeSgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUG9zdGdyZVNRTCBzdXBwb3J0cyBhdXRvbWF0aWMgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIGJldHdlZW4KICogc2VydmVyIGFuZCBjbGllbnQgZm9yIGNlcnRhaW4gY2hhcmFjdGVyIHNldHMuCiAqIHBnX2NsaWVudF9lbmNvZGluZyByZXR1cm5zIHRoZSBjbGllbnQKICogZW5jb2RpbmcgYXMgYSBzdHJpbmcuIFRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBiZSBvbmUgb2YgdGhlCiAqIHN0YW5kYXJkIFBvc3RncmVTUUwgZW5jb2RpbmcgaWRlbnRpZmllcnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBzdHJpbmcgVGhlIGNsaWVudCBlbmNvZGluZy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY2xpZW50X2VuY29kaW5nKCRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NsaWVudF9lbmNvZGluZygkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfY2xpZW50X2VuY29kaW5nKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19jbG9zZSBjbG9zZXMgdGhlIG5vbi1wZXJzaXN0ZW50CiAqIGNvbm5lY3Rpb24gdG8gYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KICogY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogSWYgdGhlcmUgaXMgb3BlbiBsYXJnZSBvYmplY3QgcmVzb3VyY2Ugb24gdGhlIGNvbm5lY3Rpb24sIGRvIG5vdAogKiBjbG9zZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgY2xvc2luZyBhbGwgbGFyZ2Ugb2JqZWN0IHJlc291cmNlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jbG9zZSgkY29ubmVjdGlvbiA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY2xvc2UoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2Nsb3NlKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gdG8gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIHNwZWNpZmllZCBieSB0aGUKICogY29ubmVjdGlvbl9zdHJpbmcuCiAqCiAqIElmIGEgc2Vjb25kIGNhbGwgaXMgbWFkZSB0byBwZ19jb25uZWN0IHdpdGgKICogdGhlIHNhbWUgY29ubmVjdGlvbl9zdHJpbmcgYXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlCiAqIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2lsbCBiZSByZXR1cm5lZCB1bmxlc3MgeW91IHBhc3MKICogUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgYXMKICogY29ubmVjdF90eXBlLgogKgogKiBUaGUgb2xkIHN5bnRheCB3aXRoIG11bHRpcGxlIHBhcmFtZXRlcnMKICogJGNvbm4gPSBwZ19jb25uZWN0KCJob3N0IiwgInBvcnQiLCAib3B0aW9ucyIsICJ0dHkiLCAiZGJuYW1lIikKICogaGFzIGJlZW4gZGVwcmVjYXRlZC4KICoKICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgVGhlIGNvbm5lY3Rpb25fc3RyaW5nIGNhbiBiZSBlbXB0eSB0byB1c2UgYWxsIGRlZmF1bHQgcGFyYW1ldGVycywgb3IgaXQKICogY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFyYW1ldGVyIHNldHRpbmdzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgogKiBFYWNoIHBhcmFtZXRlciBzZXR0aW5nIGlzIGluIHRoZSBmb3JtIGtleXdvcmQgPSB2YWx1ZS4gU3BhY2VzIGFyb3VuZAogKiB0aGUgZXF1YWwgc2lnbiBhcmUgb3B0aW9uYWwuIFRvIHdyaXRlIGFuIGVtcHR5IHZhbHVlIG9yIGEgdmFsdWUKICogY29udGFpbmluZyBzcGFjZXMsIHN1cnJvdW5kIGl0IHdpdGggc2luZ2xlIHF1b3RlcywgZS5nLiwga2V5d29yZCA9CiAqICdhIHZhbHVlJy4gU2luZ2xlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgd2l0aGluIHRoZSB2YWx1ZSBtdXN0IGJlCiAqIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgaS5lLiwgXCcgYW5kIFxcLgogKgogKiBUaGUgY3VycmVudGx5IHJlY29nbml6ZWQgcGFyYW1ldGVyIGtleXdvcmRzIGFyZToKICogaG9zdCwgaG9zdGFkZHIsIHBvcnQsCiAqIGRibmFtZSAoZGVmYXVsdHMgdG8gdmFsdWUgb2YgdXNlciksCiAqIHVzZXIsCiAqIHBhc3N3b3JkLCBjb25uZWN0X3RpbWVvdXQsCiAqIG9wdGlvbnMsIHR0eSAoaWdub3JlZCksIHNzbG1vZGUsCiAqIHJlcXVpcmVzc2wgKGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc3NsbW9kZSksIGFuZAogKiBzZXJ2aWNlLiAgV2hpY2ggb2YgdGhlc2UgYXJndW1lbnRzIGV4aXN0IGRlcGVuZHMKICogb24geW91ciBQb3N0Z3JlU1FMIHZlcnNpb24uCiAqCiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzZXQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKICogdG8gYmUgaW52b2tlZCBieSB0aGUgc2VydmVyLgogKiBAcGFyYW0gaW50ICRjb25uZWN0X3R5cGUgSWYgUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgaXMgcGFzc2VkLCB0aGVuIGEgbmV3IGNvbm5lY3Rpb24KICogaXMgY3JlYXRlZCwgZXZlbiBpZiB0aGUgY29ubmVjdGlvbl9zdHJpbmcgaXMgaWRlbnRpY2FsIHRvCiAqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24uCiAqCiAqIElmIFBHU1FMX0NPTk5FQ1RfQVNZTkMgaXMgZ2l2ZW4sIHRoZW4gdGhlCiAqIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYXN5bmNocm9ub3VzbHkuIFRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbgogKiBjYW4gdGhlbiBiZSBjaGVja2VkIHZpYSBwZ19jb25uZWN0X3BvbGwgb3IKICogcGdfY29ubmVjdGlvbl9zdGF0dXMuCiAqIEByZXR1cm4gcmVzb3VyY2UgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2Nvbm5lY3Qoc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZywgaW50ICRjb25uZWN0X3R5cGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3RfdHlwZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29ubmVjdCgkY29ubmVjdGlvbl9zdHJpbmcsICRjb25uZWN0X3R5cGUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2Nvbm5lY3QoJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2Nvbm5lY3Rpb25fcmVzZXQgcmVzZXRzIHRoZSBjb25uZWN0aW9uLgogKiBJdCBpcyB1c2VmdWwgZm9yIGVycm9yIHJlY292ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jb25uZWN0aW9uX3Jlc2V0KCRjb25uZWN0aW9uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2Nvbm5lY3Rpb25fcmVzZXQoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2NvbnZlcnQgY2hlY2tzIGFuZCBjb252ZXJ0cyB0aGUgdmFsdWVzIGluCiAqIGFzc29jX2FycmF5IGludG8gc3VpdGFibGUgdmFsdWVzIGZvciB1c2UgaW4gYW4gU1FMCiAqIHN0YXRlbWVudC4gUHJlY29uZGl0aW9uIGZvciBwZ19jb252ZXJ0IGlzIHRoZQogKiBleGlzdGVuY2Ugb2YgYSB0YWJsZSB0YWJsZV9uYW1lIHdoaWNoIGhhcyBhdCBsZWFzdAogKiBhcyBtYW55IGNvbHVtbnMgYXMgYXNzb2NfYXJyYXkgaGFzIGVsZW1lbnRzLiBUaGUKICogZmllbGRuYW1lcyBpbiB0YWJsZV9uYW1lIG11c3QgbWF0Y2ggdGhlIGluZGljZXMgaW4KICogYXNzb2NfYXJyYXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRhdGF0eXBlcyBtdXN0IGJlCiAqIGNvbXBhdGlibGUuIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29udmVydGVkIHZhbHVlcyBvbiBzdWNjZXNzLCBGQUxTRQogKiBvdGhlcndpc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgTmFtZSBvZiB0aGUgdGFibGUgYWdhaW5zdCB3aGljaCB0byBjb252ZXJ0IHR5cGVzLgogKiBAcGFyYW0gYXJyYXkgJGFzc29jX2FycmF5IERhdGEgdG8gYmUgY29udmVydGVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9JR05PUkVfREVGQVVMVCwKICogUEdTUUxfQ09OVl9GT1JDRV9OVUxMIG9yCiAqIFBHU1FMX0NPTlZfSUdOT1JFX05PVF9OVUxMLCBjb21iaW5lZC4KICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBjb252ZXJ0ZWQgdmFsdWVzLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19jb252ZXJ0KCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gMCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfY29udmVydCgkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRhc3NvY19hcnJheSwgJG9wdGlvbnMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfY29weV9mcm9tIGluc2VydHMgcmVjb3JkcyBpbnRvIGEgdGFibGUgZnJvbQogKiByb3dzLiBJdCBpc3N1ZXMgYSBDT1BZIEZST00gU1FMIGNvbW1hbmQKICogaW50ZXJuYWxseSB0byBpbnNlcnQgcmVjb3Jkcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBOYW1lIG9mIHRoZSB0YWJsZSBpbnRvIHdoaWNoIHRvIGNvcHkgdGhlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkcm93cyBBbiBhcnJheSBvZiBkYXRhIHRvIGJlIGNvcGllZCBpbnRvIHRhYmxlX25hbWUuCiAqIEVhY2ggdmFsdWUgaW4gcm93cyBiZWNvbWVzIGEgcm93IGluIHRhYmxlX25hbWUuCiAqIEVhY2ggdmFsdWUgaW4gcm93cyBzaG91bGQgYmUgYSBkZWxpbWl0ZWQgc3RyaW5nIG9mIHRoZSB2YWx1ZXMKICogdG8gaW5zZXJ0IGludG8gZWFjaCBmaWVsZC4gIFZhbHVlcyBzaG91bGQgYmUgbGluZWZlZWQgdGVybWluYXRlZC4KICogQHBhcmFtIHN0cmluZyAkZGVsaW1pdGVyIFRoZSB0b2tlbiB0aGF0IHNlcGFyYXRlcyB2YWx1ZXMgZm9yIGVhY2ggZmllbGQgaW4gZWFjaCBlbGVtZW50IG9mCiAqIHJvd3MuICBEZWZhdWx0IGlzIFRBQi4KICogQHBhcmFtIHN0cmluZyAkbnVsbF9hcyBIb3cgU1FMIE5VTEwgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUKICogcm93cy4gIERlZmF1bHQgaXMgXE4gKCJcXE4iKS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRyb3dzLCBzdHJpbmcgJGRlbGltaXRlciA9IG51bGwsIHN0cmluZyAkbnVsbF9hcyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbnVsbF9hcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJHJvd3MsICRkZWxpbWl0ZXIsICRudWxsX2FzKTsKICAgIH0gZWxzZWlmICgkZGVsaW1pdGVyICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19jb3B5X2Zyb20oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkcm93cywgJGRlbGltaXRlcik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV9mcm9tKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJHJvd3MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2NvcHlfdG8gY29waWVzIGEgdGFibGUgdG8gYW4gYXJyYXkuIEl0CiAqIGlzc3VlcyBDT1BZIFRPIFNRTCBjb21tYW5kIGludGVybmFsbHkgdG8KICogcmV0cmlldmUgcmVjb3Jkcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBOYW1lIG9mIHRoZSB0YWJsZSBmcm9tIHdoaWNoIHRvIGNvcHkgdGhlIGRhdGEgaW50byByb3dzLgogKiBAcGFyYW0gc3RyaW5nICRkZWxpbWl0ZXIgVGhlIHRva2VuIHRoYXQgc2VwYXJhdGVzIHZhbHVlcyBmb3IgZWFjaCBmaWVsZCBpbiBlYWNoIGVsZW1lbnQgb2YKICogcm93cy4gIERlZmF1bHQgaXMgVEFCLgogKiBAcGFyYW0gc3RyaW5nICRudWxsX2FzIEhvdyBTUUwgTlVMTCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoZQogKiByb3dzLiAgRGVmYXVsdCBpcyBcTiAoIlxcTiIpLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBvZiBDT1BZIGRhdGEuCiAqIEl0IHJldHVybnMgRkFMU0Ugb24gZmFpbHVyZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfY29weV90bygkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBzdHJpbmcgJGRlbGltaXRlciA9IG51bGwsIHN0cmluZyAkbnVsbF9hcyA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG51bGxfYXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NvcHlfdG8oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkZGVsaW1pdGVyLCAkbnVsbF9hcyk7CiAgICB9IGVsc2VpZiAoJGRlbGltaXRlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfY29weV90bygkY29ubmVjdGlvbiwgJHRhYmxlX25hbWUsICRkZWxpbWl0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2NvcHlfdG8oJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2RibmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZQogKiB0aGF0IHRoZSBnaXZlbiBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24KICogcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGhlCiAqIGNvbm5lY3Rpb24gaXMgdG8uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2RibmFtZSgkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19kYm5hbWUoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2RibmFtZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZGVsZXRlIGRlbGV0ZXMgcmVjb3JkcyBmcm9tIGEgdGFibGUKICogc3BlY2lmaWVkIGJ5IHRoZSBrZXlzIGFuZCB2YWx1ZXMKICogaW4gYXNzb2NfYXJyYXkuIElmIG9wdGlvbnMKICogaXMgc3BlY2lmaWVkLCBwZ19jb252ZXJ0IGlzIGFwcGxpZWQKICogdG8gYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX2RlbGV0ZSBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gZGVsZXRlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkYXNzb2NfYXJyYXkgQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIHRhYmxlX25hbWUsCiAqIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHRoZSB2YWx1ZXMgb2YgdGhvc2UgZmllbGRzIHRoYXQgYXJlIHRvIGJlIGRlbGV0ZWQuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQW55IG51bWJlciBvZiBQR1NRTF9DT05WX0ZPUkNFX05VTEwsCiAqIFBHU1FMX0RNTF9OT19DT05WLAogKiBQR1NRTF9ETUxfRVNDQVBFLAogKiBQR1NRTF9ETUxfRVhFQywKICogUEdTUUxfRE1MX0FTWU5DIG9yCiAqIFBHU1FMX0RNTF9TVFJJTkcgY29tYmluZWQuIElmIFBHU1FMX0RNTF9TVFJJTkcgaXMgcGFydCBvZiB0aGUKICogb3B0aW9ucyB0aGVuIHF1ZXJ5IHN0cmluZyBpcyByZXR1cm5lZC4gV2hlbiBQR1NRTF9ETUxfTk9fQ09OVgogKiBvciBQR1NRTF9ETUxfRVNDQVBFIGlzIHNldCwgaXQgZG9lcyBub3QgY2FsbCBwZ19jb252ZXJ0IGludGVybmFsbHkuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuICBSZXR1cm5zIHN0cmluZyBpZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhc3NlZAogKiB2aWEgb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZGVsZXRlKCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfZGVsZXRlKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19lbmRfY29weSBzeW5jcyB0aGUgUG9zdGdyZVNRTCBmcm9udGVuZAogKiAodXN1YWxseSBhIHdlYiBzZXJ2ZXIgcHJvY2Vzcykgd2l0aCB0aGUgUG9zdGdyZVNRTCBzZXJ2ZXIgYWZ0ZXIKICogZG9pbmcgYSBjb3B5IG9wZXJhdGlvbiBwZXJmb3JtZWQgYnkKICogcGdfcHV0X2xpbmUuIHBnX2VuZF9jb3B5CiAqIG11c3QgYmUgaXNzdWVkLCBvdGhlcndpc2UgdGhlIFBvc3RncmVTUUwgc2VydmVyIG1heSBnZXQgb3V0IG9mCiAqIHN5bmMgd2l0aCB0aGUgZnJvbnRlbmQgYW5kIHdpbGwgcmVwb3J0IGFuIGVycm9yLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2VuZF9jb3B5KCRjb25uZWN0aW9uID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19lbmRfY29weSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfZW5kX2NvcHkoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIHJlcXVlc3QgdG8gZXhlY3V0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMsIGFuZAogKiB3YWl0cyBmb3IgdGhlIHJlc3VsdC4KICoKICogcGdfZXhlY3V0ZSBpcyBsaWtlIHBnX3F1ZXJ5X3BhcmFtcywKICogYnV0IHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGlzCiAqIHNwZWNpZmllZCBieSBuYW1pbmcgYSBwcmV2aW91c2x5LXByZXBhcmVkIHN0YXRlbWVudCwgaW5zdGVhZCBvZiBnaXZpbmcgYQogKiBxdWVyeSBzdHJpbmcuIFRoaXMgZmVhdHVyZSBhbGxvd3MgY29tbWFuZHMgdGhhdCB3aWxsIGJlIHVzZWQgcmVwZWF0ZWRseSB0bwogKiBiZSBwYXJzZWQgYW5kIHBsYW5uZWQganVzdCBvbmNlLCByYXRoZXIgdGhhbiBlYWNoIHRpbWUgdGhleSBhcmUgZXhlY3V0ZWQuCiAqIFRoZSBzdGF0ZW1lbnQgbXVzdCBoYXZlIGJlZW4gcHJlcGFyZWQgcHJldmlvdXNseSBpbiB0aGUgY3VycmVudCBzZXNzaW9uLgogKiBwZ19leGVjdXRlIGlzIHN1cHBvcnRlZCBvbmx5IGFnYWluc3QgUG9zdGdyZVNRTCA3LjQgb3IKICogaGlnaGVyIGNvbm5lY3Rpb25zOyBpdCB3aWxsIGZhaWwgd2hlbiB1c2luZyBlYXJsaWVyIHZlcnNpb25zLgogKgogKiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHBnX3F1ZXJ5X3BhcmFtcywgZXhjZXB0IHRoYXQgdGhlIG5hbWUgb2YgYQogKiBwcmVwYXJlZCBzdGF0ZW1lbnQgaXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIHF1ZXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRzdG10bmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IHRvIGV4ZWN1dGUuICBpZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHVubmFtZWQgc3RhdGVtZW50IGlzIGV4ZWN1dGVkLiAgVGhlIG5hbWUgbXVzdCBoYXZlCiAqIGJlZW4gcHJldmlvdXNseSBwcmVwYXJlZCB1c2luZyBwZ19wcmVwYXJlLAogKiBwZ19zZW5kX3ByZXBhcmUgb3IgYSBQUkVQQVJFIFNRTAogKiBjb21tYW5kLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN1YnN0aXR1dGUgZm9yIHRoZSAkMSwgJDIsIGV0Yy4gcGxhY2Vob2xkZXJzCiAqIGluIHRoZSBvcmlnaW5hbCBwcmVwYXJlZCBxdWVyeSBzdHJpbmcuICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQogKiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzLgogKgogKiBFbGVtZW50cyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcXVlcnkgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2V4ZWN1dGUoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHN0bXRuYW1lID0gbnVsbCwgYXJyYXkgJHBhcmFtcyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19leGVjdXRlKCRjb25uZWN0aW9uLCAkc3RtdG5hbWUsICRwYXJhbXMpOwogICAgfSBlbHNlaWYgKCRzdG10bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfZXhlY3V0ZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZmllbGRfbmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZAogKiBvY2N1cHlpbmcgdGhlIGdpdmVuIGZpZWxkX251bWJlciBpbiB0aGUKICogZ2l2ZW4gUG9zdGdyZVNRTCByZXN1bHQgcmVzb3VyY2UuICBGaWVsZAogKiBudW1iZXJpbmcgc3RhcnRzIGZyb20gMC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX3F1ZXJ5LAogKiBwZ19xdWVyeV9wYXJhbXMgb3IgcGdfZXhlY3V0ZQogKiAoYW1vbmcgb3RoZXJzKS4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIEZpZWxkIG51bWJlciwgc3RhcnRpbmcgZnJvbSAwLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZmllbGQgbmFtZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZmllbGRfbmFtZSgkcmVzdWx0LCBpbnQgJGZpZWxkX251bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGZpZWxkX251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19maWVsZF90YWJsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0aGF0IGZpZWxkCiAqIGJlbG9uZ3MgdG8sIG9yIHRoZSB0YWJsZSdzIG9pZCBpZiBvaWRfb25seSBpcyBUUlVFLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBvciBwZ19leGVjdXRlCiAqIChhbW9uZyBvdGhlcnMpLgogKiBAcGFyYW0gaW50ICRmaWVsZF9udW1iZXIgRmllbGQgbnVtYmVyLCBzdGFydGluZyBmcm9tIDAuCiAqIEBwYXJhbSBib29sICRvaWRfb25seSBCeSBkZWZhdWx0IHRoZSB0YWJsZXMgbmFtZSB0aGF0IGZpZWxkIGJlbG9uZ3MgdG8gaXMgcmV0dXJuZWQgYnV0CiAqIGlmIG9pZF9vbmx5IGlzIHNldCB0byBUUlVFLCB0aGVuIHRoZQogKiBvaWQgd2lsbCBpbnN0ZWFkIGJlIHJldHVybmVkLgogKiBAcmV0dXJuIG1peGVkIE9uIHN1Y2Nlc3MgZWl0aGVyIHRoZSBmaWVsZHMgdGFibGUgbmFtZSBvciBvaWQuIE9yLCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19maWVsZF90YWJsZSgkcmVzdWx0LCBpbnQgJGZpZWxkX251bWJlciwgYm9vbCAkb2lkX29ubHkgPSBmYWxzZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19maWVsZF90YWJsZSgkcmVzdWx0LCAkZmllbGRfbnVtYmVyLCAkb2lkX29ubHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfZmllbGRfdHlwZSByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCiAqIGJhc2UgdHlwZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWVsZF9udW1iZXIgaW4gdGhlCiAqIGdpdmVuIFBvc3RncmVTUUwgcmVzdWx0IHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBvciBwZ19leGVjdXRlCiAqIChhbW9uZyBvdGhlcnMpLgogKiBAcGFyYW0gaW50ICRmaWVsZF9udW1iZXIgRmllbGQgbnVtYmVyLCBzdGFydGluZyBmcm9tIDAuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2UgbmFtZSBvZiB0aGUgZmllbGQncyB0eXBlLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19maWVsZF90eXBlKCRyZXN1bHQsIGludCAkZmllbGRfbnVtYmVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfZmllbGRfdHlwZSgkcmVzdWx0LCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2ZsdXNoIGZsdXNoZXMgYW55IG91dGJvdW5kIHF1ZXJ5IGRhdGEgd2FpdGluZyB0byBiZQogKiBzZW50IG9uIHRoZSBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBpZiB0aGUgZmx1c2ggd2FzIHN1Y2Nlc3NmdWwgb3Igbm8gZGF0YSB3YXMgd2FpdGluZyB0byBiZQogKiBmbHVzaGVkLCAwIGlmIHBhcnQgb2YgdGhlIHBlbmRpbmcgZGF0YSB3YXMgZmx1c2hlZCBidXQKICogbW9yZSByZW1haW5zLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19mbHVzaCgkY29ubmVjdGlvbikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19mbHVzaCgkY29ubmVjdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19mcmVlX3Jlc3VsdCBmcmVlcyB0aGUgbWVtb3J5IGFuZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLgogKgogKiBUaGlzIGZ1bmN0aW9uIG5lZWQgb25seSBiZSBjYWxsZWQgaWYgbWVtb3J5CiAqIGNvbnN1bXB0aW9uIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uIGlzIGEgcHJvYmxlbS4gICBPdGhlcndpc2UsIGFsbCByZXN1bHQgbWVtb3J5IHdpbGwKICogYmUgYXV0b21hdGljYWxseSBmcmVlZCB3aGVuIHRoZSBzY3JpcHQgZW5kcy4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX3F1ZXJ5LAogKiBwZ19xdWVyeV9wYXJhbXMgb3IgcGdfZXhlY3V0ZQogKiAoYW1vbmcgb3RoZXJzKS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfZnJlZV9yZXN1bHQoJHJlc3VsdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19ob3N0IHJldHVybnMgdGhlIGhvc3QgbmFtZSBvZiB0aGUgZ2l2ZW4KICogUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIGlzCiAqIGNvbm5lY3RlZCB0by4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBob3N0IHRoZQogKiBjb25uZWN0aW9uIGlzIHRvLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19ob3N0KCRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2hvc3QoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2hvc3QoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2luc2VydCBpbnNlcnRzIHRoZSB2YWx1ZXMKICogb2YgYXNzb2NfYXJyYXkgaW50byB0aGUgdGFibGUgc3BlY2lmaWVkCiAqIGJ5IHRhYmxlX25hbWUuIElmIG9wdGlvbnMKICogaXMgc3BlY2lmaWVkLCBwZ19jb252ZXJ0IGlzIGFwcGxpZWQKICogdG8gYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX2luc2VydCBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGludG8gd2hpY2ggdG8gaW5zZXJ0IHJvd3MuICBUaGUgdGFibGUgdGFibGVfbmFtZSBtdXN0IGF0IGxlYXN0CiAqIGhhdmUgYXMgbWFueSBjb2x1bW5zIGFzIGFzc29jX2FycmF5IGhhcyBlbGVtZW50cy4KICogQHBhcmFtIGFycmF5ICRhc3NvY19hcnJheSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aG9zZSBmaWVsZHMgdGhhdCBhcmUgdG8gYmUgaW5zZXJ0ZWQuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgQW55IG51bWJlciBvZiBQR1NRTF9DT05WX09QVFMsCiAqIFBHU1FMX0RNTF9OT19DT05WLAogKiBQR1NRTF9ETUxfRVNDQVBFLAogKiBQR1NRTF9ETUxfRVhFQywKICogUEdTUUxfRE1MX0FTWU5DIG9yCiAqIFBHU1FMX0RNTF9TVFJJTkcgY29tYmluZWQuIElmIFBHU1FMX0RNTF9TVFJJTkcgaXMgcGFydCBvZiB0aGUKICogb3B0aW9ucyB0aGVuIHF1ZXJ5IHN0cmluZyBpcyByZXR1cm5lZC4gV2hlbiBQR1NRTF9ETUxfTk9fQ09OVgogKiBvciBQR1NRTF9ETUxfRVNDQVBFIGlzIHNldCwgaXQgZG9lcyBub3QgY2FsbCBwZ19jb252ZXJ0IGludGVybmFsbHkuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgY29ubmVjdGlvbiByZXNvdXJjZSBvbiBzdWNjZXNzLiBSZXR1cm5zIHN0cmluZyBpZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhc3NlZAogKiB2aWEgb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfaW5zZXJ0KCRjb25uZWN0aW9uLCBzdHJpbmcgJHRhYmxlX25hbWUsIGFycmF5ICRhc3NvY19hcnJheSwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfaW5zZXJ0KCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19sYXN0X2Vycm9yIHJldHVybnMgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZQogKiBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgogKgogKiBFcnJvciBtZXNzYWdlcyBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgaW50ZXJuYWwgUG9zdGdyZVNRTCAobGlicHEpCiAqIGZ1bmN0aW9uIGNhbGxzLiBJdCBtYXkgbm90IHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGlmCiAqIG11bHRpcGxlIGVycm9ycyBvY2N1ciBpbnNpZGUgYSBQb3N0Z3JlU1FMIG1vZHVsZSBmdW5jdGlvbi4KICoKICogVXNlIHBnX3Jlc3VsdF9lcnJvciwgcGdfcmVzdWx0X2Vycm9yX2ZpZWxkLAogKiBwZ19yZXN1bHRfc3RhdHVzIGFuZAogKiBwZ19jb25uZWN0aW9uX3N0YXR1cyBmb3IgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUKICogZ2l2ZW4gY29ubmVjdGlvbi4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbGFzdF9lcnJvcigkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sYXN0X2Vycm9yKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sYXN0X2Vycm9yKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19sYXN0X25vdGljZSByZXR1cm5zIHRoZSBsYXN0IG5vdGljZQogKiBtZXNzYWdlIGZyb20gdGhlIFBvc3RncmVTUUwgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQKICogY29ubmVjdGlvbi4gVGhlIFBvc3RncmVTUUwgc2VydmVyIHNlbmRzIG5vdGljZQogKiBtZXNzYWdlcyBpbiBzZXZlcmFsIGNhc2VzLCBmb3IgaW5zdGFuY2Ugd2hlbiBjcmVhdGluZyBhIFNFUklBTAogKiBjb2x1bW4gaW4gYSB0YWJsZS4KICoKICogV2l0aCBwZ19sYXN0X25vdGljZSwgeW91IGNhbiBhdm9pZCBpc3N1aW5nIHVzZWxlc3MKICogcXVlcmllcyBieSBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgbm90aWNlIGlzIHJlbGF0ZWQgdG8geW91ciB0cmFuc2FjdGlvbi4KICoKICogTm90aWNlIG1lc3NhZ2UgdHJhY2tpbmcgY2FuIGJlIHNldCB0byBvcHRpb25hbCBieSBzZXR0aW5nIDEgZm9yCiAqIHBnc3FsLmlnbm9yZV9ub3RpY2UgaW4gcGhwLmluaS4KICoKICogTm90aWNlIG1lc3NhZ2UgbG9nZ2luZyBjYW4gYmUgc2V0IHRvIG9wdGlvbmFsIGJ5IHNldHRpbmcgMCBmb3IKICogcGdzcWwubG9nX25vdGljZSBpbiBwaHAuaW5pLgogKiBVbmxlc3MgcGdzcWwuaWdub3JlX25vdGljZSBpcyBzZXQKICogdG8gMCwgbm90aWNlIG1lc3NhZ2UgY2Fubm90IGJlIGxvZ2dlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIGludCAkb3B0aW9uIE9uZSBvZiBQR1NRTF9OT1RJQ0VfTEFTVCAodG8gcmV0dXJuIGxhc3Qgbm90aWNlKSwKICogUEdTUUxfTk9USUNFX0FMTCAodG8gcmV0dXJuIGFsbCBub3RpY2VzKSwKICogb3IgUEdTUUxfTk9USUNFX0NMRUFSICh0byBjbGVhciBub3RpY2VzKS4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbGFzdCBub3RpY2Ugb24gdGhlCiAqIGdpdmVuIGNvbm5lY3Rpb24gd2l0aAogKiBQR1NRTF9OT1RJQ0VfTEFTVCwKICogYW4gYXJyYXkgd2l0aCBQR1NRTF9OT1RJQ0VfQUxMLAogKiBhIGJvb2xlYW4gd2l0aCBQR1NRTF9OT1RJQ0VfQ0xFQVIuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xhc3Rfbm90aWNlKCRjb25uZWN0aW9uLCBpbnQgJG9wdGlvbiA9IFBHU1FMX05PVElDRV9MQVNUKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbGFzdF9ub3RpY2UoJGNvbm5lY3Rpb24sICRvcHRpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbGFzdF9vaWQgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUKICogT0lEIGFzc2lnbmVkIHRvIGFuIGluc2VydGVkIHJvdy4KICoKICogT0lEIGZpZWxkIGJlY2FtZSBhbiBvcHRpb25hbCBmaWVsZCBmcm9tIFBvc3RncmVTUUwgNy4yIGFuZCB3aWxsCiAqIG5vdCBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgaW4gUG9zdGdyZVNRTCA4LjEuIFdoZW4gdGhlCiAqIE9JRCBmaWVsZCBpcyBub3QgcHJlc2VudCBpbiBhIHRhYmxlLCB0aGUgcHJvZ3JhbW1lciBtdXN0IHVzZQogKiBwZ19yZXN1bHRfc3RhdHVzIHRvIGNoZWNrIGZvciBzdWNjZXNzZnVsCiAqIGluc2VydGlvbi4KICoKICogVG8gZ2V0IHRoZSB2YWx1ZSBvZiBhIFNFUklBTCBmaWVsZCBpbiBhbiBpbnNlcnRlZAogKiByb3csIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhlIFBvc3RncmVTUUwgQ1VSUlZBTAogKiBmdW5jdGlvbiwgbmFtaW5nIHRoZSBzZXF1ZW5jZSB3aG9zZSBsYXN0IHZhbHVlIGlzIHJlcXVpcmVkLiAgSWYgdGhlCiAqIG5hbWUgb2YgdGhlIHNlcXVlbmNlIGlzIHVua25vd24sIHRoZSBwZ19nZXRfc2VyaWFsX3NlcXVlbmNlCiAqIFBvc3RncmVTUUwgOC4wIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeS4KICoKICogUG9zdGdyZVNRTCA4LjEgaGFzIGEgZnVuY3Rpb24gTEFTVFZBTCB0aGF0IHJldHVybnMKICogdGhlIHZhbHVlIG9mIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgc2VxdWVuY2UgaW4gdGhlIHNlc3Npb24uICBUaGlzIGF2b2lkcwogKiB0aGUgbmVlZCBmb3IgbmFtaW5nIHRoZSBzZXF1ZW5jZSwgdGFibGUgb3IgY29sdW1uIGFsdG9nZXRoZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19xdWVyeSwKICogcGdfcXVlcnlfcGFyYW1zIG9yIHBnX2V4ZWN1dGUKICogKGFtb25nIG90aGVycykuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIE9JRCBhc3NpZ25lZCB0byB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZAogKiByb3cgaW4gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIG9yCiAqIG5vIGF2YWlsYWJsZSBPSUQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xhc3Rfb2lkKCRyZXN1bHQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sYXN0X29pZCgkcmVzdWx0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX2Nsb3NlIGNsb3NlcyBhIGxhcmdlCiAqIG9iamVjdC4gbGFyZ2Vfb2JqZWN0IGlzIGEgcmVzb3VyY2UgZm9yIHRoZQogKiBsYXJnZSBvYmplY3QgZnJvbSBwZ19sb19vcGVuLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxhcmdlX29iamVjdCBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfbG9fb3Blbi4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fY2xvc2UoJGxhcmdlX29iamVjdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19jbG9zZSgkbGFyZ2Vfb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19sb19leHBvcnQgdGFrZXMgYSBsYXJnZSBvYmplY3QgaW4gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGFuZCBzYXZlcyBpdHMgY29udGVudHMgdG8gYSBmaWxlIG9uIHRoZSBsb2NhbAogKiBmaWxlc3lzdGVtLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEBwYXJhbSBpbnQgJG9pZCBUaGUgT0lEIG9mIHRoZSBsYXJnZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdG8gd3JpdGUgdGhlCiAqIGxhcmdlIG9iamVjdCBvbiB0aGUgY2xpZW50IGZpbGVzeXN0ZW0uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX2V4cG9ydCgkY29ubmVjdGlvbiA9IG51bGwsIGludCAkb2lkID0gbnVsbCwgc3RyaW5nICRwYXRobmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGF0aG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2V4cG9ydCgkY29ubmVjdGlvbiwgJG9pZCwgJHBhdGhuYW1lKTsKICAgIH0gZWxzZWlmICgkb2lkICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19leHBvcnQoJGNvbm5lY3Rpb24sICRvaWQpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19leHBvcnQoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2V4cG9ydCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2xvX2ltcG9ydCBjcmVhdGVzIGEgbmV3IGxhcmdlIG9iamVjdAogKiBpbiB0aGUgZGF0YWJhc2UgdXNpbmcgYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtIGFzIGl0cyBkYXRhCiAqIHNvdXJjZS4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgb24gdGhlIGNsaWVudAogKiBmaWxlc3lzdGVtIGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgbGFyZ2Ugb2JqZWN0IGRhdGEuCiAqIEBwYXJhbSBtaXhlZCAkb2JqZWN0X2lkIElmIGFuIG9iamVjdF9pZCBpcyBnaXZlbiB0aGUgZnVuY3Rpb24KICogd2lsbCB0cnkgdG8gY3JlYXRlIGEgbGFyZ2Ugb2JqZWN0IHdpdGggdGhpcyBpZCwgZWxzZSBhIGZyZWUKICogb2JqZWN0IGlkIGlzIGFzc2lnbmVkIGJ5IHRoZSBzZXJ2ZXIuIFRoZSBwYXJhbWV0ZXIKICogd2FzIGFkZGVkIGluIFBIUCA1LjMgYW5kIHJlbGllcyBvbiBmdW5jdGlvbmFsaXR5IHRoYXQgZmlyc3QKICogYXBwZWFyZWQgaW4gUG9zdGdyZVNRTCA4LjEuCiAqIEByZXR1cm4gaW50IFRoZSBPSUQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgbGFyZ2Ugb2JqZWN0LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19sb19pbXBvcnQoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHBhdGhuYW1lID0gbnVsbCwgJG9iamVjdF9pZCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvYmplY3RfaWQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2ltcG9ydCgkY29ubmVjdGlvbiwgJHBhdGhuYW1lLCAkb2JqZWN0X2lkKTsKICAgIH0gZWxzZWlmICgkcGF0aG5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX2ltcG9ydCgkY29ubmVjdGlvbiwgJHBhdGhuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfbG9faW1wb3J0KCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb19pbXBvcnQoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX29wZW4gb3BlbnMgYSBsYXJnZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlCiAqIGFuZCByZXR1cm5zIGxhcmdlIG9iamVjdCByZXNvdXJjZSBzbyB0aGF0IGl0IGNhbiBiZSBtYW5pcHVsYXRlZC4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgbGFyZ2Ugb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4KICogQHBhcmFtIHN0cmluZyAkbW9kZSBDYW4gYmUgZWl0aGVyICJyIiBmb3IgcmVhZC1vbmx5LCAidyIgZm9yIHdyaXRlIG9ubHkgb3IgInJ3IiBmb3IgcmVhZCBhbmQKICogd3JpdGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSBsYXJnZSBvYmplY3QgcmVzb3VyY2UuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX29wZW4oJGNvbm5lY3Rpb24sIGludCAkb2lkLCBzdHJpbmcgJG1vZGUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbG9fb3BlbigkY29ubmVjdGlvbiwgJG9pZCwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbG9fcmVhZF9hbGwgcmVhZHMgYSBsYXJnZSBvYmplY3QgYW5kIHBhc3NlcwogKiBpdCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBicm93c2VyIGFmdGVyIHNlbmRpbmcgYWxsIHBlbmRpbmcKICogaGVhZGVycy4gTWFpbmx5IGludGVuZGVkIGZvciBzZW5kaW5nIGJpbmFyeSBkYXRhIGxpa2UgaW1hZ2VzIG9yCiAqIHNvdW5kLgogKgogKiBUbyB1c2UgdGhlIGxhcmdlIG9iamVjdCBpbnRlcmZhY2UsIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiBlbmNsb3NlIGl0IHdpdGhpbiBhIHRyYW5zYWN0aW9uIGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxhcmdlX29iamVjdCBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgcGdfbG9fb3Blbi4KICogQHJldHVybiBpbnQgTnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3JlYWRfYWxsKCRsYXJnZV9vYmplY3QpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19yZWFkX2FsbCgkbGFyZ2Vfb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX2xvX3JlYWQgcmVhZHMgYXQgbW9zdAogKiBsZW4gYnl0ZXMgZnJvbSBhIGxhcmdlIG9iamVjdCBhbmQKICogcmV0dXJucyBpdCBhcyBhIHN0cmluZy4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBpbnQgJGxlbiBBbiBvcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZXR1cm4uCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgbGVuIGJ5dGVzIGZyb20gdGhlCiAqIGxhcmdlIG9iamVjdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fcmVhZCgkbGFyZ2Vfb2JqZWN0LCBpbnQgJGxlbiA9IDgxOTIpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb19yZWFkKCRsYXJnZV9vYmplY3QsICRsZW4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfbG9fc2VlayBzZWVrcyBhIHBvc2l0aW9uIHdpdGhpbiBhIGxhcmdlIG9iamVjdAogKiByZXNvdXJjZS4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlZWsuCiAqIEBwYXJhbSBpbnQgJHdoZW5jZSBPbmUgb2YgdGhlIGNvbnN0YW50cyBQR1NRTF9TRUVLX1NFVCAoc2VlayBmcm9tIG9iamVjdCBzdGFydCksCiAqIFBHU1FMX1NFRUtfQ1VSIChzZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbikKICogb3IgUEdTUUxfU0VFS19FTkQgKHNlZWsgZnJvbSBvYmplY3QgZW5kKSAuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3NlZWsoJGxhcmdlX29iamVjdCwgaW50ICRvZmZzZXQsIGludCAkd2hlbmNlID0gUEdTUUxfU0VFS19DVVIpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfbG9fc2VlaygkbGFyZ2Vfb2JqZWN0LCAkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19sb190cnVuY2F0ZSB0cnVuY2F0ZXMgYSBsYXJnZSBvYmplY3QKICogcmVzb3VyY2UuCiAqCiAqIFRvIHVzZSB0aGUgbGFyZ2Ugb2JqZWN0IGludGVyZmFjZSwgaXQgaXMgbmVjZXNzYXJ5IHRvCiAqIGVuY2xvc2UgaXQgd2l0aGluIGEgdHJhbnNhY3Rpb24gYmxvY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGFyZ2Vfb2JqZWN0IFBvc3RncmVTUUwgbGFyZ2Ugb2JqZWN0IChMT0IpIHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19sb19vcGVuLgogKiBAcGFyYW0gaW50ICRzaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJ1bmNhdGUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX2xvX3RydW5jYXRlKCRsYXJnZV9vYmplY3QsIGludCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb190cnVuY2F0ZSgkbGFyZ2Vfb2JqZWN0LCAkc2l6ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfbG9fdW5saW5rIGRlbGV0ZXMgYSBsYXJnZSBvYmplY3Qgd2l0aCB0aGUKICogb2lkLiBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgbGFyZ2Ugb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fdW5saW5rKCRjb25uZWN0aW9uLCBpbnQgJG9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19sb191bmxpbmsoJGNvbm5lY3Rpb24sICRvaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX2xvX3dyaXRlIHdyaXRlcyBkYXRhIGludG8gYSBsYXJnZSBvYmplY3QKICogYXQgdGhlIGN1cnJlbnQgc2VlayBwb3NpdGlvbi4KICoKICogVG8gdXNlIHRoZSBsYXJnZSBvYmplY3QgaW50ZXJmYWNlLCBpdCBpcyBuZWNlc3NhcnkgdG8KICogZW5jbG9zZSBpdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRsYXJnZV9vYmplY3QgUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IHBnX2xvX29wZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgbGFyZ2Ugb2JqZWN0LiAgSWYgbGVuIGlzCiAqIHNwZWNpZmllZCBhbmQgaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgZGF0YSwgb25seQogKiBsZW4gYnl0ZXMgd2lsbCBiZSB3cml0dGVuLgogKiBAcGFyYW0gaW50ICRsZW4gQW4gb3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuICBNdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCiAqIGFuZCBubyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiBkYXRhLiAgRGVmYXVsdHMgdG8KICogdGhlIGxlbmd0aCBvZiBkYXRhLgogKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGxhcmdlIG9iamVjdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfbG9fd3JpdGUoJGxhcmdlX29iamVjdCwgc3RyaW5nICRkYXRhLCBpbnQgJGxlbiA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW4gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX2xvX3dyaXRlKCRsYXJnZV9vYmplY3QsICRkYXRhLCAkbGVuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19sb193cml0ZSgkbGFyZ2Vfb2JqZWN0LCAkZGF0YSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19tZXRhX2RhdGEgcmV0dXJucyB0YWJsZSBkZWZpbml0aW9uIGZvcgogKiB0YWJsZV9uYW1lIGFzIGFuIGFycmF5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS4KICogQHBhcmFtIGJvb2wgJGV4dGVuZGVkIEZsYWcgZm9yIHJldHVybmluZyBleHRlbmRlZCBtZXRhIGRhdGEuIERlZmF1bHQgdG8gRkFMU0UuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgdGhlIHRhYmxlIGRlZmluaXRpb24uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX21ldGFfZGF0YSgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBib29sICRleHRlbmRlZCA9IGZhbHNlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19tZXRhX2RhdGEoJGNvbm5lY3Rpb24sICR0YWJsZV9uYW1lLCAkZXh0ZW5kZWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfb3B0aW9ucyB3aWxsIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nCiAqIHRoZSBvcHRpb25zIHNwZWNpZmllZCBvbiB0aGUgZ2l2ZW4gUG9zdGdyZVNRTAogKiBjb25uZWN0aW9uIHJlc291cmNlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbm5lY3Rpb24KICogb3B0aW9ucy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfb3B0aW9ucygkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19vcHRpb25zKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19vcHRpb25zKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBMb29rcyB1cCBhIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcgb2YgdGhlIHNlcnZlci4KICoKICogQ2VydGFpbiBwYXJhbWV0ZXIgdmFsdWVzIGFyZSByZXBvcnRlZCBieSB0aGUgc2VydmVyIGF1dG9tYXRpY2FsbHkgYXQKICogY29ubmVjdGlvbiBzdGFydHVwIG9yIHdoZW5ldmVyIHRoZWlyIHZhbHVlcyBjaGFuZ2UuIHBnX3BhcmFtZXRlcl9zdGF0dXMgY2FuIGJlCiAqIHVzZWQgdG8gaW50ZXJyb2dhdGUgdGhlc2Ugc2V0dGluZ3MuIEl0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYQogKiBwYXJhbWV0ZXIgaWYga25vd24sIG9yIEZBTFNFIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGtub3duLgogKgogKiBQYXJhbWV0ZXJzIHJlcG9ydGVkIGFzIG9mIFBvc3RncmVTUUwgOC4wIGluY2x1ZGUgc2VydmVyX3ZlcnNpb24sCiAqIHNlcnZlcl9lbmNvZGluZywgY2xpZW50X2VuY29kaW5nLAogKiBpc19zdXBlcnVzZXIsIHNlc3Npb25fYXV0aG9yaXphdGlvbiwKICogRGF0ZVN0eWxlLCBUaW1lWm9uZSwgYW5kIGludGVnZXJfZGF0ZXRpbWVzLgogKiAoc2VydmVyX2VuY29kaW5nLCBUaW1lWm9uZSwgYW5kCiAqIGludGVnZXJfZGF0ZXRpbWVzIHdlcmUgbm90IHJlcG9ydGVkIGJ5IHJlbGVhc2VzIGJlZm9yZSA4LjAuKSBOb3RlIHRoYXQKICogc2VydmVyX3ZlcnNpb24sIHNlcnZlcl9lbmNvZGluZyBhbmQgaW50ZWdlcl9kYXRldGltZXMKICogY2Fubm90IGNoYW5nZSBhZnRlciBQb3N0Z3JlU1FMIHN0YXJ0dXAuCiAqCiAqIFBvc3RncmVTUUwgNy4zIG9yIGxvd2VyIHNlcnZlcnMgZG8gbm90IHJlcG9ydCBwYXJhbWV0ZXIgc2V0dGluZ3MsCiAqIHBnX3BhcmFtZXRlcl9zdGF0dXMKICogaW5jbHVkZXMgbG9naWMgdG8gb2J0YWluIHZhbHVlcyBmb3Igc2VydmVyX3ZlcnNpb24gYW5kCiAqIGNsaWVudF9lbmNvZGluZwogKiBhbnl3YXkuIEFwcGxpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgcGdfcGFyYW1ldGVyX3N0YXR1cyByYXRoZXIgdGhhbiBhZAogKiBob2MgY29kZSB0byBkZXRlcm1pbmUgdGhlc2UgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHBhcmFtX25hbWUgUG9zc2libGUgcGFyYW1fbmFtZSB2YWx1ZXMgaW5jbHVkZSBzZXJ2ZXJfdmVyc2lvbiwKICogc2VydmVyX2VuY29kaW5nLCBjbGllbnRfZW5jb2RpbmcsCiAqIGlzX3N1cGVydXNlciwgc2Vzc2lvbl9hdXRob3JpemF0aW9uLAogKiBEYXRlU3R5bGUsIFRpbWVab25lLCBhbmQKICogaW50ZWdlcl9kYXRldGltZXMuICBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBjYXNlLXNlbnNpdGl2ZS4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgRkFMU0Ugb24gZmFpbHVyZSBvciBpbnZhbGlkCiAqIHBhcmFtX25hbWUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BhcmFtZXRlcl9zdGF0dXMoJGNvbm5lY3Rpb24gPSBudWxsLCBzdHJpbmcgJHBhcmFtX25hbWUgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcGFyYW1fbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcGFyYW1ldGVyX3N0YXR1cygkY29ubmVjdGlvbiwgJHBhcmFtX25hbWUpOwogICAgfSBlbHNlaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19wYXJhbWV0ZXJfc3RhdHVzKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19wYXJhbWV0ZXJfc3RhdHVzKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19wY29ubmVjdCBvcGVucyBhIGNvbm5lY3Rpb24gdG8gYQogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlLiBJdCByZXR1cm5zIGEgY29ubmVjdGlvbiByZXNvdXJjZSB0aGF0IGlzCiAqIG5lZWRlZCBieSBvdGhlciBQb3N0Z3JlU1FMIGZ1bmN0aW9ucy4KICoKICogSWYgYSBzZWNvbmQgY2FsbCBpcyBtYWRlIHRvIHBnX3Bjb25uZWN0IHdpdGgKICogdGhlIHNhbWUgY29ubmVjdGlvbl9zdHJpbmcgYXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlCiAqIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2lsbCBiZSByZXR1cm5lZCB1bmxlc3MgeW91IHBhc3MKICogUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgYXMKICogY29ubmVjdF90eXBlLgogKgogKiBUbyBlbmFibGUgcGVyc2lzdGVudCBjb25uZWN0aW9uLCB0aGUgcGdzcWwuYWxsb3dfcGVyc2lzdGVudAogKiBwaHAuaW5pIGRpcmVjdGl2ZSBtdXN0IGJlIHNldCB0byAiT24iICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY2FuIGJlIGRlZmluZWQgd2l0aCB0aGUgcGdzcWwubWF4X3BlcnNpc3RlbnQKICogcGhwLmluaSBkaXJlY3RpdmUgKGRlZmF1bHRzIHRvIC0xIGZvciBubyBsaW1pdCkuIFRoZSB0b3RhbCBudW1iZXIKICogb2YgY29ubmVjdGlvbnMgY2FuIGJlIHNldCB3aXRoIHRoZSBwZ3NxbC5tYXhfbGlua3MKICogcGhwLmluaSBkaXJlY3RpdmUuCiAqCiAqIHBnX2Nsb3NlIHdpbGwgbm90IGNsb3NlIHBlcnNpc3RlbnQgbGlua3MKICogZ2VuZXJhdGVkIGJ5IHBnX3Bjb25uZWN0LgogKgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBUaGUgY29ubmVjdGlvbl9zdHJpbmcgY2FuIGJlIGVtcHR5IHRvIHVzZSBhbGwgZGVmYXVsdCBwYXJhbWV0ZXJzLCBvciBpdAogKiBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBwYXJhbWV0ZXIgc2V0dGluZ3Mgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCiAqIEVhY2ggcGFyYW1ldGVyIHNldHRpbmcgaXMgaW4gdGhlIGZvcm0ga2V5d29yZCA9IHZhbHVlLiBTcGFjZXMgYXJvdW5kCiAqIHRoZSBlcXVhbCBzaWduIGFyZSBvcHRpb25hbC4gVG8gd3JpdGUgYW4gZW1wdHkgdmFsdWUgb3IgYSB2YWx1ZQogKiBjb250YWluaW5nIHNwYWNlcywgc3Vycm91bmQgaXQgd2l0aCBzaW5nbGUgcXVvdGVzLCBlLmcuLCBrZXl3b3JkID0KICogJ2EgdmFsdWUnLiBTaW5nbGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyB3aXRoaW4gdGhlIHZhbHVlIG11c3QgYmUKICogZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLCBpLmUuLCBcJyBhbmQgXFwuCiAqCiAqIFRoZSBjdXJyZW50bHkgcmVjb2duaXplZCBwYXJhbWV0ZXIga2V5d29yZHMgYXJlOgogKiBob3N0LCBob3N0YWRkciwgcG9ydCwKICogZGJuYW1lLCB1c2VyLAogKiBwYXNzd29yZCwgY29ubmVjdF90aW1lb3V0LAogKiBvcHRpb25zLCB0dHkgKGlnbm9yZWQpLCBzc2xtb2RlLAogKiByZXF1aXJlc3NsIChkZXByZWNhdGVkIGluIGZhdm9yIG9mIHNzbG1vZGUpLCBhbmQKICogc2VydmljZS4gIFdoaWNoIG9mIHRoZXNlIGFyZ3VtZW50cyBleGlzdCBkZXBlbmRzCiAqIG9uIHlvdXIgUG9zdGdyZVNRTCB2ZXJzaW9uLgogKiBAcGFyYW0gaW50ICRjb25uZWN0X3R5cGUgSWYgUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcgaXMgcGFzc2VkLCB0aGVuIGEgbmV3IGNvbm5lY3Rpb24KICogaXMgY3JlYXRlZCwgZXZlbiBpZiB0aGUgY29ubmVjdGlvbl9zdHJpbmcgaXMgaWRlbnRpY2FsIHRvCiAqIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24uCiAqIEByZXR1cm4gcmVzb3VyY2UgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3Bjb25uZWN0KHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcsIGludCAkY29ubmVjdF90eXBlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0X3R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3Bjb25uZWN0KCRjb25uZWN0aW9uX3N0cmluZywgJGNvbm5lY3RfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcGNvbm5lY3QoJGNvbm5lY3Rpb25fc3RyaW5nKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3BpbmcgcGluZ3MgYSBkYXRhYmFzZSBjb25uZWN0aW9uIGFuZCB0cmllcyB0bwogKiByZWNvbm5lY3QgaXQgaWYgaXQgaXMgYnJva2VuLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BpbmcoJGNvbm5lY3Rpb24gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3BpbmcoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3BpbmcoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19wb3J0IHJldHVybnMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlCiAqIGdpdmVuIFBvc3RncmVTUUwgY29ubmVjdGlvbiByZXNvdXJjZSBpcwogKiBjb25uZWN0ZWQgdG8uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHJldHVybiBpbnQgQW4gaW50IGNvbnRhaW5pbmcgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgdG8uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3BvcnQoJGNvbm5lY3Rpb24gPSBudWxsKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcG9ydCgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcG9ydCgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfcHJlcGFyZSBjcmVhdGVzIGEgcHJlcGFyZWQgc3RhdGVtZW50IGZvciBsYXRlciBleGVjdXRpb24gd2l0aAogKiBwZ19leGVjdXRlIG9yIHBnX3NlbmRfZXhlY3V0ZS4KICogVGhpcyBmZWF0dXJlIGFsbG93cyBjb21tYW5kcyB0aGF0IHdpbGwgYmUgdXNlZCByZXBlYXRlZGx5IHRvCiAqIGJlIHBhcnNlZCBhbmQgcGxhbm5lZCBqdXN0IG9uY2UsIHJhdGhlciB0aGFuIGVhY2ggdGltZSB0aGV5IGFyZSBleGVjdXRlZC4KICogcGdfcHJlcGFyZSBpcyBzdXBwb3J0ZWQgb25seSBhZ2FpbnN0IFBvc3RncmVTUUwgNy40IG9yCiAqIGhpZ2hlciBjb25uZWN0aW9uczsgaXQgd2lsbCBmYWlsIHdoZW4gdXNpbmcgZWFybGllciB2ZXJzaW9ucy4KICoKICogVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgbmFtZWQgc3RtdG5hbWUgZnJvbSB0aGUgcXVlcnkKICogc3RyaW5nLCB3aGljaCBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgU1FMIGNvbW1hbmQuIHN0bXRuYW1lIG1heSBiZSAiIiB0bwogKiBjcmVhdGUgYW4gdW5uYW1lZCBzdGF0ZW1lbnQsIGluIHdoaWNoIGNhc2UgYW55IHByZS1leGlzdGluZyB1bm5hbWVkCiAqIHN0YXRlbWVudCBpcyBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkOyBvdGhlcndpc2UgaXQgaXMgYW4gZXJyb3IgaWYgdGhlCiAqIHN0YXRlbWVudCBuYW1lIGlzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzZXNzaW9uLiBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gaW4gdGhlIHF1ZXJ5IGFzICQxLCAkMiwgZXRjLgogKgogKiBQcmVwYXJlZCBzdGF0ZW1lbnRzIGZvciB1c2Ugd2l0aCBwZ19wcmVwYXJlIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYnkKICogZXhlY3V0aW5nIFNRTCBQUkVQQVJFIHN0YXRlbWVudHMuIChCdXQgcGdfcHJlcGFyZSBpcyBtb3JlIGZsZXhpYmxlIHNpbmNlIGl0CiAqIGRvZXMgbm90IHJlcXVpcmUgcGFyYW1ldGVyIHR5cGVzIHRvIGJlIHByZS1zcGVjaWZpZWQuKSBBbHNvLCBhbHRob3VnaCB0aGVyZQogKiBpcyBubyBQSFAgZnVuY3Rpb24gZm9yIGRlbGV0aW5nIGEgcHJlcGFyZWQgc3RhdGVtZW50LCB0aGUgU1FMIERFQUxMT0NBVEUKICogc3RhdGVtZW50IGNhbiBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgdG8gZ2l2ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LiAgTXVzdCBiZSB1bmlxdWUgcGVyLWNvbm5lY3Rpb24uICBJZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gYW4gdW5uYW1lZCBzdGF0ZW1lbnQgaXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgYW55CiAqIHByZXZpb3VzbHkgZGVmaW5lZCB1bm5hbWVkIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEByZXR1cm4gcmVzb3VyY2UgQSBxdWVyeSByZXN1bHQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcHJlcGFyZSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkc3RtdG5hbWUgPSBudWxsLCBzdHJpbmcgJHF1ZXJ5ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRxdWVyeSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lLCAkcXVlcnkpOwogICAgfSBlbHNlaWYgKCRzdG10bmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfcHJlcGFyZSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfcHV0X2xpbmUgc2VuZHMgYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nCiAqIHRvIHRoZSBQb3N0Z3JlU1FMIGJhY2tlbmQgc2VydmVyLiAgVGhpcyBpcyBuZWVkZWQgaW4gY29uanVuY3Rpb24KICogd2l0aCBQb3N0Z3JlU1FMJ3MgQ09QWSBGUk9NIGNvbW1hbmQuCiAqCiAqIENPUFkgaXMgYSBoaWdoLXNwZWVkIGRhdGEgbG9hZGluZyBpbnRlcmZhY2UKICogc3VwcG9ydGVkIGJ5IFBvc3RncmVTUUwuICBEYXRhIGlzIHBhc3NlZCBpbiB3aXRob3V0IGJlaW5nIHBhcnNlZCwKICogYW5kIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgogKgogKiBBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyByYXcgcGdfcHV0X2xpbmUgY29tbWFuZHMKICogaXMgdG8gdXNlIHBnX2NvcHlfZnJvbS4gIFRoaXMgaXMgYSBmYXIgc2ltcGxlcgogKiBpbnRlcmZhY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YSBBIGxpbmUgb2YgdGV4dCB0byBiZSBzZW50IGRpcmVjdGx5IHRvIHRoZSBQb3N0Z3JlU1FMIGJhY2tlbmQuICBBIE5VTEwKICogdGVybWluYXRvciBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5LgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19wdXRfbGluZSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkZGF0YSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHV0X2xpbmUoJGNvbm5lY3Rpb24sICRkYXRhKTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcHV0X2xpbmUoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3B1dF9saW5lKCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3VibWl0cyBhIGNvbW1hbmQgdG8gdGhlIHNlcnZlciBhbmQgd2FpdHMgZm9yIHRoZSByZXN1bHQsIHdpdGggdGhlIGFiaWxpdHkKICogdG8gcGFzcyBwYXJhbWV0ZXJzIHNlcGFyYXRlbHkgZnJvbSB0aGUgU1FMIGNvbW1hbmQgdGV4dC4KICoKICogcGdfcXVlcnlfcGFyYW1zIGlzIGxpa2UgcGdfcXVlcnksCiAqIGJ1dCBvZmZlcnMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5OiBwYXJhbWV0ZXIKICogdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBjb21tYW5kIHN0cmluZyBwcm9wZXIuCiAqIHBnX3F1ZXJ5X3BhcmFtcyBpcyBzdXBwb3J0ZWQgb25seSBhZ2FpbnN0IFBvc3RncmVTUUwgNy40IG9yCiAqIGhpZ2hlciBjb25uZWN0aW9uczsgaXQgd2lsbCBmYWlsIHdoZW4gdXNpbmcgZWFybGllciB2ZXJzaW9ucy4KICoKICogSWYgcGFyYW1ldGVycyBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gaW4gdGhlCiAqIHF1ZXJ5IHN0cmluZyBhcyAkMSwgJDIsIGV0Yy4gVGhlIHNhbWUgcGFyYW1ldGVyIG1heQogKiBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHF1ZXJ5OyB0aGUgc2FtZSB2YWx1ZQogKiB3aWxsIGJlIHVzZWQgaW4gdGhhdCBjYXNlLiBwYXJhbXMgc3BlY2lmaWVzIHRoZQogKiBhY3R1YWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzLiBBIE5VTEwgdmFsdWUgaW4gdGhpcyBhcnJheSBtZWFucyB0aGUKICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgaXMgU1FMIE5VTEwuCiAqCiAqIFRoZSBwcmltYXJ5IGFkdmFudGFnZSBvZiBwZ19xdWVyeV9wYXJhbXMgb3ZlciBwZ19xdWVyeQogKiBpcyB0aGF0IHBhcmFtZXRlciB2YWx1ZXMKICogbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBxdWVyeSBzdHJpbmcsIHRodXMgYXZvaWRpbmcgdGhlIG5lZWQgZm9yIHRlZGlvdXMKICogYW5kIGVycm9yLXByb25lIHF1b3RpbmcgYW5kIGVzY2FwaW5nLiBVbmxpa2UgcGdfcXVlcnksCiAqIHBnX3F1ZXJ5X3BhcmFtcyBhbGxvd3MgYXQKICogbW9zdCBvbmUgU1FMIGNvbW1hbmQgaW4gdGhlIGdpdmVuIHN0cmluZy4gKFRoZXJlIGNhbiBiZSBzZW1pY29sb25zIGluIGl0LAogKiBidXQgbm90IG1vcmUgdGhhbiBvbmUgbm9uZW1wdHkgY29tbWFuZC4pCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqCiAqIFVzZXItc3VwcGxpZWQgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMsIG5vdAogKiBpbnRlcnBvbGF0ZWQgaW50byB0aGUgcXVlcnkgc3RyaW5nLCB3aGVyZSB0aGV5IGZvcm0gcG9zc2libGUKICogU1FMIGluamVjdGlvbgogKiBhdHRhY2sgdmVjdG9ycyBhbmQgaW50cm9kdWNlIGJ1Z3Mgd2hlbiBoYW5kbGluZyBkYXRhIGNvbnRhaW5pbmcgcXVvdGVzLgogKiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdCB1c2UgYSBwYXJhbWV0ZXIsIGVuc3VyZSB0aGF0IGludGVycG9sYXRlZAogKiB2YWx1ZXMgYXJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgdGhlICQxLCAkMiwgZXRjLiBwbGFjZWhvbGRlcnMKICogaW4gdGhlIG9yaWdpbmFsIHByZXBhcmVkIHF1ZXJ5IHN0cmluZy4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqCiAqIFZhbHVlcyBpbnRlbmRlZCBmb3IgYnl0ZWEgZmllbGRzIGFyZSBub3Qgc3VwcG9ydGVkIGFzCiAqIHBhcmFtZXRlcnMuIFVzZSBwZ19lc2NhcGVfYnl0ZWEgaW5zdGVhZCwgb3IgdXNlIHRoZQogKiBsYXJnZSBvYmplY3QgZnVuY3Rpb25zLgogKiBAcmV0dXJuIHJlc291cmNlIEEgcXVlcnkgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkcXVlcnkgPSBudWxsLCBhcnJheSAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKICAgIH0gZWxzZWlmICgkcXVlcnkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5X3BhcmFtcygkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19xdWVyeV9wYXJhbXMoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3F1ZXJ5IGV4ZWN1dGVzIHRoZSBxdWVyeQogKiBvbiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAqIHBnX3F1ZXJ5X3BhcmFtcyBzaG91bGQgYmUgcHJlZmVycmVkCiAqIGluIG1vc3QgY2FzZXMuCiAqCiAqIElmIGFuIGVycm9yIG9jY3VycywgYW5kIEZBTFNFIGlzIHJldHVybmVkLCBkZXRhaWxzIG9mIHRoZSBlcnJvciBjYW4KICogYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBwZ19sYXN0X2Vycm9yCiAqIGZ1bmN0aW9uIGlmIHRoZSBjb25uZWN0aW9uIGlzIHZhbGlkLgogKgogKgogKgogKiBBbHRob3VnaCBjb25uZWN0aW9uIGNhbiBiZSBvbWl0dGVkLCBpdAogKiBpcyBub3QgcmVjb21tZW5kZWQsIHNpbmNlIGl0IGNhbiBiZSB0aGUgY2F1c2Ugb2YgaGFyZCB0byBmaW5kCiAqIGJ1Z3MgaW4gc2NyaXB0cy4KICoKICoKICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkLiBXaGVuIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sCiAqIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgYXMgb25lIHRyYW5zYWN0aW9uLCB1bmxlc3MgdGhlcmUgYXJlIGV4cGxpY2l0IEJFR0lOL0NPTU1JVCBjb21tYW5kcwogKiBpbmNsdWRlZCBpbiB0aGUgcXVlcnkgc3RyaW5nLiBIb3dldmVyLCB1c2luZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgaW4gb25lIGZ1bmN0aW9uIGNhbGwgaXMgbm90IHJlY29tbWVuZGVkLgogKgogKiBTdHJpbmcgaW50ZXJwb2xhdGlvbiBvZiB1c2VyLXN1cHBsaWVkIGRhdGEgaXMgZXh0cmVtZWx5IGRhbmdlcm91cyBhbmQgaXMKICogbGlrZWx5IHRvIGxlYWQgdG8gU1FMCiAqIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXMuIEluIG1vc3QgY2FzZXMKICogcGdfcXVlcnlfcGFyYW1zIHNob3VsZCBiZSBwcmVmZXJyZWQsIHBhc3NpbmcKICogdXNlci1zdXBwbGllZCB2YWx1ZXMgYXMgcGFyYW1ldGVycyByYXRoZXIgdGhhbiBzdWJzdGl0dXRpbmcgdGhlbSBpbnRvCiAqIHRoZSBxdWVyeSBzdHJpbmcuCiAqCiAqIEFueSB1c2VyLXN1cHBsaWVkIGRhdGEgc3Vic3RpdHV0ZWQgZGlyZWN0bHkgaW50byBhIHF1ZXJ5IHN0cmluZyBzaG91bGQKICogYmUgcHJvcGVybHkgZXNjYXBlZC4KICogQHJldHVybiByZXNvdXJjZSBBIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ19xdWVyeSgkY29ubmVjdGlvbiA9IG51bGwsIHN0cmluZyAkcXVlcnkgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHF1ZXJ5ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ19xdWVyeSgkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIH0gZWxzZWlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfcXVlcnkoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3F1ZXJ5KCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwZ19yZXN1bHRfZXJyb3JfZmllbGQgcmV0dXJucyBvbmUgb2YgdGhlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UKICogZmllbGRzIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQgcmVzb3VyY2UuIEl0IGlzIG9ubHkgYXZhaWxhYmxlCiAqIGFnYWluc3QgYSBQb3N0Z3JlU1FMIDcuNCBvciBhYm92ZSBzZXJ2ZXIuICBUaGUgZXJyb3IgZmllbGQgaXMgc3BlY2lmaWVkIGJ5CiAqIHRoZSBmaWVsZGNvZGUuCiAqCiAqIEJlY2F1c2UgcGdfcXVlcnkgYW5kIHBnX3F1ZXJ5X3BhcmFtcyByZXR1cm4gRkFMU0UgaWYgdGhlIHF1ZXJ5IGZhaWxzLAogKiB5b3UgbXVzdCB1c2UgcGdfc2VuZF9xdWVyeSBhbmQKICogcGdfZ2V0X3Jlc3VsdCB0byBnZXQgdGhlIHJlc3VsdCBoYW5kbGUuCiAqCiAqIElmIHlvdSBuZWVkIHRvIGdldCBhZGRpdGlvbmFsIGVycm9yIGluZm9ybWF0aW9uIGZyb20gZmFpbGVkIHBnX3F1ZXJ5IHF1ZXJpZXMsCiAqIHVzZSBwZ19zZXRfZXJyb3JfdmVyYm9zaXR5IGFuZCBwZ19sYXN0X2Vycm9yCiAqIGFuZCB0aGVuIHBhcnNlIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IEEgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UgZnJvbSBhIHByZXZpb3VzbHkgZXhlY3V0ZWQKICogc3RhdGVtZW50LgogKiBAcGFyYW0gaW50ICRmaWVsZGNvZGUgUG9zc2libGUgZmllbGRjb2RlIHZhbHVlcyBhcmU6IFBHU1FMX0RJQUdfU0VWRVJJVFksCiAqIFBHU1FMX0RJQUdfU1FMU1RBVEUsIFBHU1FMX0RJQUdfTUVTU0FHRV9QUklNQVJZLAogKiBQR1NRTF9ESUFHX01FU1NBR0VfREVUQUlMLAogKiBQR1NRTF9ESUFHX01FU1NBR0VfSElOVCwgUEdTUUxfRElBR19TVEFURU1FTlRfUE9TSVRJT04sCiAqIFBHU1FMX0RJQUdfSU5URVJOQUxfUE9TSVRJT04gKFBvc3RncmVTUUwgOC4wKyBvbmx5KSwKICogUEdTUUxfRElBR19JTlRFUk5BTF9RVUVSWSAoUG9zdGdyZVNRTCA4LjArIG9ubHkpLAogKiBQR1NRTF9ESUFHX0NPTlRFWFQsIFBHU1FMX0RJQUdfU09VUkNFX0ZJTEUsCiAqIFBHU1FMX0RJQUdfU09VUkNFX0xJTkUgb3IKICogUEdTUUxfRElBR19TT1VSQ0VfRlVOQ1RJT04uCiAqIEByZXR1cm4gc3RyaW5nfG51bGwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGVycm9yIGZpZWxkLCBOVUxMIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBleGlzdC4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X2Vycm9yX2ZpZWxkKCRyZXN1bHQsIGludCAkZmllbGRjb2RlKTogP3N0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3Jlc3VsdF9lcnJvcl9maWVsZCgkcmVzdWx0LCAkZmllbGRjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3Jlc3VsdF9zZWVrIHNldHMgdGhlIGludGVybmFsIHJvdyBvZmZzZXQgaW4KICogYSByZXN1bHQgcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSBwZ19xdWVyeSwKICogcGdfcXVlcnlfcGFyYW1zIG9yIHBnX2V4ZWN1dGUKICogKGFtb25nIG90aGVycykuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBSb3cgdG8gbW92ZSB0aGUgaW50ZXJuYWwgb2Zmc2V0IHRvIGluIHRoZSByZXN1bHQgcmVzb3VyY2UuCiAqIFJvd3MgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIGZyb20gemVyby4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X3NlZWsoJHJlc3VsdCwgaW50ICRvZmZzZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfcmVzdWx0X3NlZWsoJHJlc3VsdCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQZ3NxbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcGdfc2VsZWN0IHNlbGVjdHMgcmVjb3JkcyBzcGVjaWZpZWQgYnkKICogYXNzb2NfYXJyYXkgd2hpY2ggaGFzCiAqIGZpZWxkPSZndDt2YWx1ZS4gRm9yIGEgc3VjY2Vzc2Z1bCBxdWVyeSwgaXQgcmV0dXJucyBhbgogKiBhcnJheSBjb250YWluaW5nIGFsbCByZWNvcmRzIGFuZCBmaWVsZHMgdGhhdCBtYXRjaCB0aGUgY29uZGl0aW9uCiAqIHNwZWNpZmllZCBieSBhc3NvY19hcnJheS4KICoKICogSWYgb3B0aW9ucyBpcyBzcGVjaWZpZWQsCiAqIHBnX2NvbnZlcnQgaXMgYXBwbGllZCB0bwogKiBhc3NvY19hcnJheSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MuCiAqCiAqIEJ5IGRlZmF1bHQgcGdfc2VsZWN0IHBhc3NlcyByYXcgdmFsdWVzLiBWYWx1ZXMKICogbXVzdCBiZSBlc2NhcGVkIG9yIFBHU1FMX0RNTF9FU0NBUEUgb3B0aW9uIG11c3QgYmUKICogc3BlY2lmaWVkLiBQR1NRTF9ETUxfRVNDQVBFIHF1b3RlcyBhbmQgZXNjYXBlcwogKiBwYXJhbWV0ZXJzL2lkZW50aWZpZXJzLiBUaGVyZWZvcmUsIHRhYmxlL2NvbHVtbiBuYW1lcyBiZWNhbWUgY2FzZQogKiBzZW5zaXRpdmUuCiAqCiAqIE5vdGUgdGhhdCBuZWl0aGVyIGVzY2FwZSBub3IgcHJlcGFyZWQgcXVlcnkgY2FuIHByb3RlY3QgTElLRSBxdWVyeSwKICogSlNPTiwgQXJyYXksIFJlZ2V4LCBldGMuIFRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGhhbmRsZWQKICogYWNjb3JkaW5nIHRvIHRoZWlyIGNvbnRleHRzLiBpLmUuIEVzY2FwZS92YWxpZGF0ZSB2YWx1ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgTmFtZSBvZiB0aGUgdGFibGUgZnJvbSB3aGljaCB0byBzZWxlY3Qgcm93cy4KICogQHBhcmFtIGFycmF5ICRhc3NvY19hcnJheSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBhIHJvdyBtdXN0IG1lZXQgdG8gYmUgcmV0cmlldmVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9GT1JDRV9OVUxMLAogKiBQR1NRTF9ETUxfTk9fQ09OViwKICogUEdTUUxfRE1MX0VTQ0FQRSwKICogUEdTUUxfRE1MX0VYRUMsCiAqIFBHU1FMX0RNTF9BU1lOQyBvcgogKiBQR1NRTF9ETUxfU1RSSU5HIGNvbWJpbmVkLiBJZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhcnQgb2YgdGhlCiAqIG9wdGlvbnMgdGhlbiBxdWVyeSBzdHJpbmcgaXMgcmV0dXJuZWQuIFdoZW4gUEdTUUxfRE1MX05PX0NPTlYKICogb3IgUEdTUUxfRE1MX0VTQ0FQRSBpcyBzZXQsIGl0IGRvZXMgbm90IGNhbGwgcGdfY29udmVydCBpbnRlcm5hbGx5LgogKiBAcGFyYW0gaW50ICRyZXN1bHRfdHlwZQogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgUmV0dXJucyBzdHJpbmcgaWYgUEdTUUxfRE1MX1NUUklORyBpcyBwYXNzZWQKICogdmlhIG9wdGlvbnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbGVjdCgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBhcnJheSAkYXNzb2NfYXJyYXksIGludCAkb3B0aW9ucyA9IFBHU1FMX0RNTF9FWEVDLCBpbnQgJHJlc3VsdF90eXBlID0gUEdTUUxfQVNTT0MpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfc2VsZWN0KCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGFzc29jX2FycmF5LCAkb3B0aW9ucywgJHJlc3VsdF90eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGEgcmVxdWVzdCB0byBleGVjdXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggZ2l2ZW4gcGFyYW1ldGVycywKICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0KHMpLgogKgogKiBUaGlzIGlzIHNpbWlsYXIgdG8gcGdfc2VuZF9xdWVyeV9wYXJhbXMsIGJ1dCB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZCBpcyBzcGVjaWZpZWQKICogYnkgbmFtaW5nIGEgcHJldmlvdXNseS1wcmVwYXJlZCBzdGF0ZW1lbnQsIGluc3RlYWQgb2YgZ2l2aW5nIGEgcXVlcnkgc3RyaW5nLiBUaGUKICogZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGlkZW50aWNhbGx5IHRvIHBnX2V4ZWN1dGUuCiAqIExpa2UgcGdfZXhlY3V0ZSwgaXQgd2lsbCBub3Qgd29yayBvbiBwcmUtNy40IHZlcnNpb25zIG9mCiAqIFBvc3RncmVTUUwuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByZXBhcmVkIHN0YXRlbWVudCB0byBleGVjdXRlLiAgaWYKICogIiIgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSB1bm5hbWVkIHN0YXRlbWVudCBpcyBleGVjdXRlZC4gIFRoZSBuYW1lIG11c3QgaGF2ZQogKiBiZWVuIHByZXZpb3VzbHkgcHJlcGFyZWQgdXNpbmcgcGdfcHJlcGFyZSwKICogcGdfc2VuZF9wcmVwYXJlIG9yIGEgUFJFUEFSRSBTUUwKICogY29tbWFuZC4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBzdWJzdGl0dXRlIGZvciB0aGUgJDEsICQyLCBldGMuIHBsYWNlaG9sZGVycwogKiBpbiB0aGUgb3JpZ2luYWwgcHJlcGFyZWQgcXVlcnkgc3RyaW5nLiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICogbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHBsYWNlaG9sZGVycy4KICogQHRocm93cyBQZ3NxbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcGdfc2VuZF9leGVjdXRlKCRjb25uZWN0aW9uLCBzdHJpbmcgJHN0bXRuYW1lLCBhcnJheSAkcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3NlbmRfZXhlY3V0ZSgkY29ubmVjdGlvbiwgJHN0bXRuYW1lLCAkcGFyYW1zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZW5kcyBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMsCiAqIHdpdGhvdXQgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KICoKICogVGhpcyBpcyBhbiBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiBwZ19wcmVwYXJlOiBpdCByZXR1cm5zIFRSVUUgaWYgaXQgd2FzIGFibGUgdG8KICogZGlzcGF0Y2ggdGhlIHJlcXVlc3QsIGFuZCBGQUxTRSBpZiBub3QuIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsLCBjYWxsCiAqIHBnX2dldF9yZXN1bHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlcnZlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCB0aGUKICogcHJlcGFyZWQgc3RhdGVtZW50LiBUaGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkIGlkZW50aWNhbGx5IHRvCiAqIHBnX3ByZXBhcmUuIExpa2UgcGdfcHJlcGFyZSwgaXQgd2lsbCBub3Qgd29yawogKiBvbiBwcmUtNy40IHZlcnNpb25zIG9mIFBvc3RncmVTUUwuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuICBXaGVuCiAqIGNvbm5lY3Rpb24gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogcGdfY29ubmVjdCBvciBwZ19wY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkc3RtdG5hbWUgVGhlIG5hbWUgdG8gZ2l2ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LiAgTXVzdCBiZSB1bmlxdWUgcGVyLWNvbm5lY3Rpb24uICBJZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gYW4gdW5uYW1lZCBzdGF0ZW1lbnQgaXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgYW55CiAqIHByZXZpb3VzbHkgZGVmaW5lZCB1bm5hbWVkIHN0YXRlbWVudC4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcHJlcGFyZSgkY29ubmVjdGlvbiwgc3RyaW5nICRzdG10bmFtZSwgc3RyaW5nICRxdWVyeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19zZW5kX3ByZXBhcmUoJGNvbm5lY3Rpb24sICRzdG10bmFtZSwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTdWJtaXRzIGEgY29tbWFuZCBhbmQgc2VwYXJhdGUgcGFyYW1ldGVycyB0byB0aGUgc2VydmVyIHdpdGhvdXQKICogd2FpdGluZyBmb3IgdGhlIHJlc3VsdChzKS4KICoKICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHBnX3NlbmRfcXVlcnkgZXhjZXB0IHRoYXQgcXVlcnkKICogcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkgZnJvbSB0aGUKICogcXVlcnkgc3RyaW5nLiBUaGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzIGFyZQogKiBoYW5kbGVkIGlkZW50aWNhbGx5IHRvIHBnX3F1ZXJ5X3BhcmFtcy4gTGlrZQogKiBwZ19xdWVyeV9wYXJhbXMsIGl0IHdpbGwgbm90IHdvcmsgb24gcHJlLTcuNCBQb3N0Z3JlU1FMCiAqIGNvbm5lY3Rpb25zLCBhbmQgaXQgYWxsb3dzIG9ubHkgb25lIGNvbW1hbmQgaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudC4gIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pICBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFycmF5IG9mIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgdGhlICQxLCAkMiwgZXRjLiBwbGFjZWhvbGRlcnMKICogaW4gdGhlIG9yaWdpbmFsIHByZXBhcmVkIHF1ZXJ5IHN0cmluZy4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uLCBzdHJpbmcgJHF1ZXJ5LCBhcnJheSAkcGFyYW1zKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBnX3NlbmRfcXVlcnlfcGFyYW1zKCRjb25uZWN0aW9uLCAkcXVlcnksICRwYXJhbXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHBnX3NlbmRfcXVlcnkgc2VuZHMgYSBxdWVyeSBvciBxdWVyaWVzIGFzeW5jaHJvbm91c2x5IHRvIHRoZQogKiBjb25uZWN0aW9uLiBVbmxpa2UKICogcGdfcXVlcnksIGl0IGNhbiBzZW5kIG11bHRpcGxlIHF1ZXJpZXMgYXQgb25jZSB0bwogKiBQb3N0Z3JlU1FMIGFuZCBnZXQgdGhlIHJlc3VsdHMgb25lIGJ5IG9uZSB1c2luZwogKiBwZ19nZXRfcmVzdWx0LgogKgogKiBTY3JpcHQgZXhlY3V0aW9uIGlzIG5vdCBibG9ja2VkIHdoaWxlIHRoZSBxdWVyaWVzIGFyZSBleGVjdXRpbmcuIFVzZQogKiBwZ19jb25uZWN0aW9uX2J1c3kgdG8gY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMKICogYnVzeSAoaS5lLiB0aGUgcXVlcnkgaXMgZXhlY3V0aW5nKS4gUXVlcmllcyBtYXkgYmUgY2FuY2VsbGVkIHVzaW5nCiAqIHBnX2NhbmNlbF9xdWVyeS4KICoKICogQWx0aG91Z2ggdGhlIHVzZXIgY2FuIHNlbmQgbXVsdGlwbGUgcXVlcmllcyBhdCBvbmNlLCBtdWx0aXBsZSBxdWVyaWVzCiAqIGNhbm5vdCBiZSBzZW50IG92ZXIgYSBidXN5IGNvbm5lY3Rpb24uIElmIGEgcXVlcnkgaXMgc2VudCB3aGlsZQogKiB0aGUgY29ubmVjdGlvbiBpcyBidXN5LCBpdCB3YWl0cyB1bnRpbCB0aGUgbGFzdCBxdWVyeSBpcyBmaW5pc2hlZCBhbmQKICogZGlzY2FyZHMgYWxsIGl0cyByZXN1bHRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgU1FMIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkLgogKgogKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NlbmRfcXVlcnkoJGNvbm5lY3Rpb24sIHN0cmluZyAkcXVlcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfc2VuZF9xdWVyeSgkY29ubmVjdGlvbiwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ19zb2NrZXQgcmV0dXJucyBhIHJlYWQgb25seSByZXNvdXJjZQogKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb2NrZXQgdW5kZXJseWluZyB0aGUgZ2l2ZW4gUG9zdGdyZVNRTCBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcmV0dXJuIHJlc291cmNlIEEgc29ja2V0IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3NvY2tldCgkY29ubmVjdGlvbikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwZ19zb2NrZXQoJGNvbm5lY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfdHJhY2UgZW5hYmxlcyB0cmFjaW5nIG9mIHRoZSBQb3N0Z3JlU1FMCiAqIGZyb250ZW5kL2JhY2tlbmQgY29tbXVuaWNhdGlvbiB0byBhIGZpbGUuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJlc3VsdHMsCiAqIG9uZSBuZWVkcyB0byBiZSBmYW1pbGlhciB3aXRoIHRoZSBpbnRlcm5hbHMgb2YgUG9zdGdyZVNRTAogKiBjb21tdW5pY2F0aW9uIHByb3RvY29sLgogKgogKiBGb3IgdGhvc2Ugd2hvIGFyZSBub3QsIGl0IGNhbiBzdGlsbCBiZQogKiB1c2VmdWwgZm9yIHRyYWNpbmcgZXJyb3JzIGluIHF1ZXJpZXMgc2VudCB0byB0aGUgc2VydmVyLCB5b3UKICogY291bGQgZG8gZm9yIGV4YW1wbGUgZ3JlcCAnXlRvIGJhY2tlbmQnCiAqIHRyYWNlLmxvZyBhbmQgc2VlIHdoYXQgcXVlcmllcyBhY3R1YWxseSB3ZXJlIHNlbnQgdG8gdGhlCiAqIFBvc3RncmVTUUwgc2VydmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlCiAqIFBvc3RncmVTUUwgRG9jdW1lbnRhdGlvbi4KICoKICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgVGhlIGZ1bGwgcGF0aCBhbmQgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIHdyaXRlIHRoZQogKiB0cmFjZSBsb2cuICBTYW1lIGFzIGluIGZvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIEFuIG9wdGlvbmFsIGZpbGUgYWNjZXNzIG1vZGUsIHNhbWUgYXMgZm9yIGZvcGVuLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3RyYWNlKHN0cmluZyAkcGF0aG5hbWUsIHN0cmluZyAkbW9kZSA9ICJ3IiwgJGNvbm5lY3Rpb24gPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbm5lY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3RyYWNlKCRwYXRobmFtZSwgJG1vZGUsICRjb25uZWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ190cmFjZSgkcGF0aG5hbWUsICRtb2RlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBwZ190dHkgcmV0dXJucyB0aGUgVFRZIG5hbWUgdGhhdCBzZXJ2ZXIKICogc2lkZSBkZWJ1Z2dpbmcgb3V0cHV0IGlzIHNlbnQgdG8gb24gdGhlIGdpdmVuIFBvc3RncmVTUUwKICogY29ubmVjdGlvbiByZXNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gIFdoZW4KICogY29ubmVjdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiBwZ19jb25uZWN0IG9yIHBnX3Bjb25uZWN0LgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWJ1ZyBUVFkgb2YKICogdGhlIGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3R0eSgkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb25uZWN0aW9uICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwZ190dHkoJGNvbm5lY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBnX3R0eSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogcGdfdXBkYXRlIHVwZGF0ZXMgcmVjb3JkcyB0aGF0IG1hdGNoZXMKICogY29uZGl0aW9uIHdpdGggZGF0YS4gSWYKICogb3B0aW9ucyBpcyBzcGVjaWZpZWQsCiAqIHBnX2NvbnZlcnQgaXMgYXBwbGllZCB0bwogKiBkYXRhIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAqCiAqIHBnX3VwZGF0ZSB1cGRhdGVzIHJlY29yZHMgc3BlY2lmaWVkIGJ5CiAqIGFzc29jX2FycmF5IHdoaWNoIGhhcwogKiBmaWVsZD0mZ3Q7dmFsdWUuCiAqCiAqIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLAogKiBwZ19jb252ZXJ0IGlzIGFwcGxpZWQgdG8KICogYXNzb2NfYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzLgogKgogKiBCeSBkZWZhdWx0IHBnX3VwZGF0ZSBwYXNzZXMgcmF3IHZhbHVlcy4gVmFsdWVzCiAqIG11c3QgYmUgZXNjYXBlZCBvciBQR1NRTF9ETUxfRVNDQVBFIG9wdGlvbiBtdXN0IGJlCiAqIHNwZWNpZmllZC4gUEdTUUxfRE1MX0VTQ0FQRSBxdW90ZXMgYW5kIGVzY2FwZXMKICogcGFyYW1ldGVycy9pZGVudGlmaWVycy4gVGhlcmVmb3JlLCB0YWJsZS9jb2x1bW4gbmFtZXMgYmVjYW1lIGNhc2UKICogc2Vuc2l0aXZlLgogKgogKiBOb3RlIHRoYXQgbmVpdGhlciBlc2NhcGUgbm9yIHByZXBhcmVkIHF1ZXJ5IGNhbiBwcm90ZWN0IExJS0UgcXVlcnksCiAqIEpTT04sIEFycmF5LCBSZWdleCwgZXRjLiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBoYW5kbGVkCiAqIGFjY29yZGluZyB0byB0aGVpciBjb250ZXh0cy4gaS5lLiBFc2NhcGUvdmFsaWRhdGUgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIE5hbWUgb2YgdGhlIHRhYmxlIGludG8gd2hpY2ggdG8gdXBkYXRlIHJvd3MuCiAqIEBwYXJhbSBhcnJheSAkZGF0YSBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgdGFibGVfbmFtZSwKICogYW5kIHdob3NlIHZhbHVlcyBhcmUgd2hhdCBtYXRjaGVkIHJvd3MgYXJlIHRvIGJlIHVwZGF0ZWQgdG8uCiAqIEBwYXJhbSBhcnJheSAkY29uZGl0aW9uIEFuIGFycmF5IHdob3NlIGtleXMgYXJlIGZpZWxkIG5hbWVzIGluIHRoZSB0YWJsZSB0YWJsZV9uYW1lLAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGEgcm93IG11c3QgbWVldCB0byBiZSB1cGRhdGVkLgogKiBAcGFyYW0gaW50ICRvcHRpb25zIEFueSBudW1iZXIgb2YgUEdTUUxfQ09OVl9GT1JDRV9OVUxMLAogKiBQR1NRTF9ETUxfTk9fQ09OViwKICogUEdTUUxfRE1MX0VTQ0FQRSwKICogUEdTUUxfRE1MX0VYRUMsCiAqIFBHU1FMX0RNTF9BU1lOQyBvcgogKiBQR1NRTF9ETUxfU1RSSU5HIGNvbWJpbmVkLiBJZiBQR1NRTF9ETUxfU1RSSU5HIGlzIHBhcnQgb2YgdGhlCiAqIG9wdGlvbnMgdGhlbiBxdWVyeSBzdHJpbmcgaXMgcmV0dXJuZWQuIFdoZW4gUEdTUUxfRE1MX05PX0NPTlYKICogb3IgUEdTUUxfRE1MX0VTQ0FQRSBpcyBzZXQsIGl0IGRvZXMgbm90IGNhbGwgcGdfY29udmVydCBpbnRlcm5hbGx5LgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgUmV0dXJucyBzdHJpbmcgaWYgUEdTUUxfRE1MX1NUUklORyBpcyBwYXNzZWQKICogdmlhIG9wdGlvbnMuCiAqIEB0aHJvd3MgUGdzcWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBnX3VwZGF0ZSgkY29ubmVjdGlvbiwgc3RyaW5nICR0YWJsZV9uYW1lLCBhcnJheSAkZGF0YSwgYXJyYXkgJGNvbmRpdGlvbiwgaW50ICRvcHRpb25zID0gUEdTUUxfRE1MX0VYRUMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccGdfdXBkYXRlKCRjb25uZWN0aW9uLCAkdGFibGVfbmFtZSwgJGRhdGEsICRjb25kaXRpb24sICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBnc3FsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHBnX3ZlcnNpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBjbGllbnQsIHByb3RvY29sCiAqIGFuZCBzZXJ2ZXIgdmVyc2lvbi4gUHJvdG9jb2wgYW5kIHNlcnZlciB2ZXJzaW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgUEhQCiAqIHdhcyBjb21waWxlZCB3aXRoIFBvc3RncmVTUUwgNy40IG9yIGxhdGVyLgogKgogKiBGb3IgbW9yZSBkZXRhaWxlZCBzZXJ2ZXIgaW5mb3JtYXRpb24sIHVzZSBwZ19wYXJhbWV0ZXJfc3RhdHVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiAgV2hlbgogKiBjb25uZWN0aW9uIGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIHBnX2Nvbm5lY3Qgb3IgcGdfcGNvbm5lY3QuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIGNsaWVudCwgcHJvdG9jb2wKICogYW5kIHNlcnZlciBrZXlzIGFuZCB2YWx1ZXMgKGlmIGF2YWlsYWJsZSkgb3IgaW52YWxpZCBjb25uZWN0aW9uLgogKiBAdGhyb3dzIFBnc3FsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwZ192ZXJzaW9uKCRjb25uZWN0aW9uID0gbnVsbCk6IGFycmF5CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29ubmVjdGlvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccGdfdmVyc2lvbigkY29ubmVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccGdfdmVyc2lvbigpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUGdzcWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/posix.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQb3NpeEV4Y2VwdGlvbjsKCi8qKgogKiBwb3NpeF9hY2Nlc3MgY2hlY2tzIHRoZSB1c2VyJ3MgcGVybWlzc2lvbiBvZiBhIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgdGVzdGVkLgogKiBAcGFyYW0gaW50ICRtb2RlIEEgbWFzayBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIG9mIFBPU0lYX0ZfT0ssCiAqIFBPU0lYX1JfT0ssIFBPU0lYX1dfT0sgYW5kCiAqIFBPU0lYX1hfT0suCiAqCiAqIFBPU0lYX1JfT0ssIFBPU0lYX1dfT0sgYW5kCiAqIFBPU0lYX1hfT0sgcmVxdWVzdCBjaGVja2luZyB3aGV0aGVyIHRoZSBmaWxlCiAqIGV4aXN0cyBhbmQgaGFzIHJlYWQsIHdyaXRlIGFuZCBleGVjdXRlIHBlcm1pc3Npb25zLCByZXNwZWN0aXZlbHkuCiAqIFBPU0lYX0ZfT0sganVzdCByZXF1ZXN0cyBjaGVja2luZyBmb3IgdGhlCiAqIGV4aXN0ZW5jZSBvZiB0aGUgZmlsZS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfYWNjZXNzKHN0cmluZyAkZmlsZSwgaW50ICRtb2RlID0gUE9TSVhfRl9PSyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9hY2Nlc3MoJGZpbGUsICRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgZ3JvdXAgcHJvdmlkZWQgaXRzIG5hbWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGdyb3VwCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBvbiBzdWNjZXNzLgogKiBUaGUgYXJyYXkgZWxlbWVudHMgcmV0dXJuZWQgYXJlOgogKgogKiBUaGUgZ3JvdXAgaW5mb3JtYXRpb24gYXJyYXkKICoKICoKICoKICogRWxlbWVudAogKiBEZXNjcmlwdGlvbgogKgogKgogKgogKgogKiBuYW1lCiAqCiAqIFRoZSBuYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLiBUaGlzIGlzCiAqIGEgc2hvcnQsIHVzdWFsbHkgbGVzcyB0aGFuIDE2IGNoYXJhY3RlciAiaGFuZGxlIiBvZiB0aGUKICogZ3JvdXAsIG5vdCB0aGUgcmVhbCwgZnVsbCBuYW1lLiAgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMKICogdGhlIG5hbWUgcGFyYW1ldGVyIHVzZWQgd2hlbgogKiBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgYW5kIGhlbmNlIHJlZHVuZGFudC4KICoKICoKICoKICogcGFzc3dkCiAqCiAqIFRoZSBwYXNzd2QgZWxlbWVudCBjb250YWlucyB0aGUgZ3JvdXAncyBwYXNzd29yZCBpbiBhbgogKiBlbmNyeXB0ZWQgZm9ybWF0LiBPZnRlbiwgZm9yIGV4YW1wbGUgb24gYSBzeXN0ZW0gZW1wbG95aW5nCiAqICJzaGFkb3ciIHBhc3N3b3JkcywgYW4gYXN0ZXJpc2sgaXMgcmV0dXJuZWQgaW5zdGVhZC4KICoKICoKICoKICogZ2lkCiAqCiAqIEdyb3VwIElEIG9mIHRoZSBncm91cCBpbiBudW1lcmljIGZvcm0uCiAqCiAqCiAqCiAqIG1lbWJlcnMKICoKICogVGhpcyBjb25zaXN0cyBvZiBhbiBhcnJheSBvZgogKiBzdHJpbmcncyBmb3IgYWxsIHRoZSBtZW1iZXJzIGluIHRoZSBncm91cC4KICoKICoKICoKICoKICoKICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfZ2V0Z3JuYW0oc3RyaW5nICRuYW1lKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9nZXRncm5hbSgkbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZXR1cm5zIHRoZSBwcm9jZXNzIGdyb3VwIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MKICogcGlkLgogKgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIHByb2Nlc3MgaWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGlkZW50aWZpZXIsIGFzIGFuIGludGVnZXIuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X2dldHBnaWQoaW50ICRwaWQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9nZXRwZ2lkKCRwaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgZ3JvdXAgYWNjZXNzIGxpc3QgZm9yIHRoZSB1c2VyIHNwZWNpZmllZCBpbiBuYW1lLgogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSB1c2VyIHRvIGNhbGN1bGF0ZSB0aGUgbGlzdCBmb3IuCiAqIEBwYXJhbSBpbnQgJGJhc2VfZ3JvdXBfaWQgVHlwaWNhbGx5IHRoZSBncm91cCBudW1iZXIgZnJvbSB0aGUgcGFzc3dvcmQgZmlsZS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfaW5pdGdyb3VwcyhzdHJpbmcgJG5hbWUsIGludCAkYmFzZV9ncm91cF9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9pbml0Z3JvdXBzKCRuYW1lLCAkYmFzZV9ncm91cF9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2VuZCB0aGUgc2lnbmFsIHNpZyB0byB0aGUgcHJvY2VzcyB3aXRoCiAqIHRoZSBwcm9jZXNzIGlkZW50aWZpZXIgcGlkLgogKgogKiBAcGFyYW0gaW50ICRwaWQgVGhlIHByb2Nlc3MgaWRlbnRpZmllci4KICogQHBhcmFtIGludCAkc2lnIE9uZSBvZiB0aGUgUENOVEwgc2lnbmFscyBjb25zdGFudHMuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X2tpbGwoaW50ICRwaWQsIGludCAkc2lnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X2tpbGwoJHBpZCwgJHNpZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcG9zaXhfbWtmaWZvIGNyZWF0ZXMgYSBzcGVjaWFsCiAqIEZJRk8gZmlsZSB3aGljaCBleGlzdHMgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBhY3RzIGFzCiAqIGEgYmlkaXJlY3Rpb25hbCBjb21tdW5pY2F0aW9uIGVuZHBvaW50IGZvciBwcm9jZXNzZXMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhuYW1lIFBhdGggdG8gdGhlIEZJRk8gZmlsZS4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgc2Vjb25kIHBhcmFtZXRlciBtb2RlIGhhcyB0byBiZSBnaXZlbiBpbgogKiBvY3RhbCBub3RhdGlvbiAoZS5nLiAwNjQ0KS4gVGhlIHBlcm1pc3Npb24gb2YgdGhlIG5ld2x5IGNyZWF0ZWQKICogRklGTyBhbHNvIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgdGhlIGN1cnJlbnQKICogdW1hc2suIFRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgY3JlYXRlZCBmaWxlIGFyZQogKiAobW9kZSAmYW1wOyB+dW1hc2spLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9ta2ZpZm8oc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X21rZmlmbygkcGF0aG5hbWUsICRtb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGEgc3BlY2lhbCBvciBvcmRpbmFyeSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSBUaGUgZmlsZSB0byBjcmVhdGUKICogQHBhcmFtIGludCAkbW9kZSBUaGlzIHBhcmFtZXRlciBpcyBjb25zdHJ1Y3RlZCBieSBhIGJpdHdpc2UgT1IgYmV0d2VlbiBmaWxlIHR5cGUgKG9uZSBvZgogKiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czogUE9TSVhfU19JRlJFRywKICogUE9TSVhfU19JRkNIUiwgUE9TSVhfU19JRkJMSywKICogUE9TSVhfU19JRklGTyBvcgogKiBQT1NJWF9TX0lGU09DSykgYW5kIHBlcm1pc3Npb25zLgogKiBAcGFyYW0gaW50ICRtYWpvciBUaGUgbWFqb3IgZGV2aWNlIGtlcm5lbCBpZGVudGlmaWVyIChyZXF1aXJlZCB0byBwYXNzIHdoZW4gdXNpbmcKICogU19JRkNIUiBvciBTX0lGQkxLKS4KICogQHBhcmFtIGludCAkbWlub3IgVGhlIG1pbm9yIGRldmljZSBrZXJuZWwgaWRlbnRpZmllci4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfbWtub2Qoc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlLCBpbnQgJG1ham9yID0gMCwgaW50ICRtaW5vciA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfbWtub2QoJHBhdGhuYW1lLCAkbW9kZSwgJG1ham9yLCAkbWlub3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgZWZmZWN0aXZlIGdyb3VwIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoaXMgaXMgYQogKiBwcml2aWxlZ2VkIGZ1bmN0aW9uIGFuZCBuZWVkcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzICh1c3VhbGx5CiAqIHJvb3QpIG9uIHRoZSBzeXN0ZW0gdG8gYmUgYWJsZSB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBpbnQgJGdpZCBUaGUgZ3JvdXAgaWQuCiAqIEB0aHJvd3MgUG9zaXhFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBvc2l4X3NldGVnaWQoaW50ICRnaWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0ZWdpZCgkZ2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgdGhlIGVmZmVjdGl2ZSB1c2VyIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoaXMgaXMgYSBwcml2aWxlZ2VkCiAqIGZ1bmN0aW9uIGFuZCBuZWVkcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzICh1c3VhbGx5IHJvb3QpIG9uCiAqIHRoZSBzeXN0ZW0gdG8gYmUgYWJsZSB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24uCiAqCiAqIEBwYXJhbSBpbnQgJHVpZCBUaGUgdXNlciBpZC4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0ZXVpZChpbnQgJHVpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9zZXRldWlkKCR1aWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgcmVhbCBncm91cCBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGlzIGlzIGEKICogcHJpdmlsZWdlZCBmdW5jdGlvbiBhbmQgbmVlZHMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyAodXN1YWxseQogKiByb290KSBvbiB0aGUgc3lzdGVtIHRvIGJlIGFibGUgdG8gcGVyZm9ybSB0aGlzIGZ1bmN0aW9uLiBUaGUKICogYXBwcm9wcmlhdGUgb3JkZXIgb2YgZnVuY3Rpb24gY2FsbHMgaXMKICogcG9zaXhfc2V0Z2lkIGZpcnN0LAogKiBwb3NpeF9zZXR1aWQgbGFzdC4KICoKICogQHBhcmFtIGludCAkZ2lkIFRoZSBncm91cCBpZC4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0Z2lkKGludCAkZ2lkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBvc2l4X3NldGdpZCgkZ2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMZXQgdGhlIHByb2Nlc3MgcGlkIGpvaW4gdGhlIHByb2Nlc3MgZ3JvdXAKICogcGdpZC4KICoKICogQHBhcmFtIGludCAkcGlkIFRoZSBwcm9jZXNzIGlkLgogKiBAcGFyYW0gaW50ICRwZ2lkIFRoZSBwcm9jZXNzIGdyb3VwIGlkLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXRwZ2lkKGludCAkcGlkLCBpbnQgJHBnaWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0cGdpZCgkcGlkLCAkcGdpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQb3NpeEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcG9zaXhfc2V0cmxpbWl0IHNldHMgdGhlIHNvZnQgYW5kIGhhcmQgbGltaXRzIGZvciBhCiAqIGdpdmVuIHN5c3RlbSByZXNvdXJjZS4KICoKICoKICogRWFjaCByZXNvdXJjZSBoYXMgYW4gYXNzb2NpYXRlZCBzb2Z0IGFuZCBoYXJkIGxpbWl0LiAgVGhlIHNvZnQKICogbGltaXQgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIGtlcm5lbCBlbmZvcmNlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKICogcmVzb3VyY2UuICBUaGUgaGFyZCBsaW1pdCBhY3RzIGFzIGEgY2VpbGluZyBmb3IgdGhlIHNvZnQgbGltaXQuCiAqIEFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIG1heSBvbmx5IHNldCBpdHMgc29mdCBsaW1pdCB0byBhIHZhbHVlCiAqIGZyb20gMCB0byB0aGUgaGFyZCBsaW1pdCwgYW5kIGlycmV2ZXJzaWJseSBsb3dlciBpdHMgaGFyZCBsaW1pdC4KICoKICogQHBhcmFtIGludCAkcmVzb3VyY2UgVGhlCiAqIHJlc291cmNlIGxpbWl0IGNvbnN0YW50CiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpbWl0IHRoYXQgaXMgYmVpbmcgc2V0LgogKiBAcGFyYW0gaW50ICRzb2Z0bGltaXQgVGhlIHNvZnQgbGltaXQsIGluIHdoYXRldmVyIHVuaXQgdGhlIHJlc291cmNlIGxpbWl0IHJlcXVpcmVzLCBvcgogKiBQT1NJWF9STElNSVRfSU5GSU5JVFkuCiAqIEBwYXJhbSBpbnQgJGhhcmRsaW1pdCBUaGUgaGFyZCBsaW1pdCwgaW4gd2hhdGV2ZXIgdW5pdCB0aGUgcmVzb3VyY2UgbGltaXQgcmVxdWlyZXMsIG9yCiAqIFBPU0lYX1JMSU1JVF9JTkZJTklUWS4KICogQHRocm93cyBQb3NpeEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0cmxpbWl0KGludCAkcmVzb3VyY2UsIGludCAkc29mdGxpbWl0LCBpbnQgJGhhcmRsaW1pdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwb3NpeF9zZXRybGltaXQoJHJlc291cmNlLCAkc29mdGxpbWl0LCAkaGFyZGxpbWl0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBvc2l4RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgdGhlIHJlYWwgdXNlciBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGlzIGlzIGEgcHJpdmlsZWdlZAogKiBmdW5jdGlvbiB0aGF0IG5lZWRzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgKHVzdWFsbHkgcm9vdCkgb24KICogdGhlIHN5c3RlbSB0byBiZSBhYmxlIHRvIHBlcmZvcm0gdGhpcyBmdW5jdGlvbi4KICoKICogQHBhcmFtIGludCAkdWlkIFRoZSB1c2VyIGlkLgogKiBAdGhyb3dzIFBvc2l4RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXR1aWQoaW50ICR1aWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccG9zaXhfc2V0dWlkKCR1aWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUG9zaXhFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ps.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQc0V4Y2VwdGlvbjsKCi8qKgogKiBQbGFjZXMgYSBoeXBlcmxpbmsgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHBvaW50aW5nIHRvIGEgZmlsZSBwcm9ncmFtCiAqIHdoaWNoIGlzIGJlaW5nIHN0YXJ0ZWQgd2hlbiBjbGlja2VkIG9uLiBUaGUgaHlwZXJsaW5rJ3Mgc291cmNlIHBvc2l0aW9uCiAqIGlzIGEgcmVjdGFuZ2xlCiAqIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0IChsbHgsIGxseSkgYW5kIGl0cyB1cHBlciByaWdodCBjb3JuZXIgYXQKICogKHVyeCwgdXJ5KS4gVGhlIHJlY3RhbmdsZSBoYXMgYnkgZGVmYXVsdCBhIHRoaW4gYmx1ZSBib3JkZXIuCiAqCiAqIFRoZSBub3RlIHdpbGwgbm90IGJlIHZpc2libGUgaWYgdGhlIGRvY3VtZW50CiAqIGlzIHByaW50ZWQgb3Igdmlld2VkIGJ1dCBpdCB3aWxsIHNob3cgdXAgaWYgdGhlIGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYnkgZWl0aGVyIEFjcm9iYXQgRGlzdGlsbGVy4oSiIG9yIEdob3N0dmlldy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJGxseCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICRsbHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgcGF0aCBvZiB0aGUgcHJvZ3JhbSB0byBiZSBzdGFydGVkLCB3aGVuIHRoZSBsaW5rIGlzIGNsaWNrZWQgb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9sYXVuY2hsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19hZGRfbGF1bmNobGluaygkcHNkb2MsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgaHlwZXJsaW5rIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBwb2ludGluZyB0byBhIHBhZ2UgaW4gdGhlIHNhbWUKICogZG9jdW1lbnQuIENsaWNraW5nIG9uIHRoZSBsaW5rIHdpbGwganVtcCB0byB0aGUgZ2l2ZW4gcGFnZS4gVGhlIGZpcnN0IHBhZ2UKICogaW4gYSBkb2N1bWVudCBoYXMgbnVtYmVyIDEuCiAqCiAqIFRoZSBoeXBlcmxpbmsncyBzb3VyY2UgcG9zaXRpb24gaXMgYSByZWN0YW5nbGUgd2l0aCBpdHMgbG93ZXIgbGVmdCBjb3JuZXIgYXQKICogKGxseCwgbGx5KSBhbmQgaXRzIHVwcGVyCiAqIHJpZ2h0IGNvcm5lciBhdCAodXJ4LCB1cnkpLgogKiBUaGUgcmVjdGFuZ2xlIGhhcyBieSBkZWZhdWx0IGEgdGhpbiBibHVlIGJvcmRlci4KICoKICogVGhlIG5vdGUgd2lsbCBub3QgYmUgdmlzaWJsZSBpZiB0aGUgZG9jdW1lbnQKICogaXMgcHJpbnRlZCBvciB2aWV3ZWQgYnV0IGl0IHdpbGwgc2hvdyB1cCBpZiB0aGUgZG9jdW1lbnQgaXMgY29udmVydGVkIHRvCiAqIHBkZiBieSBlaXRoZXIgQWNyb2JhdCBEaXN0aWxsZXLihKIgb3IgR2hvc3R2aWV3LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkbGx4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJGxseSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBpbnQgJHBhZ2UgVGhlIG51bWJlciBvZiB0aGUgcGFnZSBkaXNwbGF5ZWQgd2hlbiBjbGlja2luZyBvbiB0aGUgbGluay4KICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgcGFyYW1ldGVyIGRlc3QgZGV0ZXJtaW5lcyBob3cgdGhlIGRvY3VtZW50CiAqIGlzIGJlaW5nIHZpZXdlZC4gSXQgY2FuIGJlIGZpdHBhZ2UsCiAqIGZpdHdpZHRoLCBmaXRoZWlnaHQsIG9yCiAqIGZpdGJib3guCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9sb2NhbGxpbmsoJHBzZG9jLCBmbG9hdCAkbGx4LCBmbG9hdCAkbGx5LCBmbG9hdCAkdXJ4LCBmbG9hdCAkdXJ5LCBpbnQgJHBhZ2UsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19hZGRfbG9jYWxsaW5rKCRwc2RvYywgJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJHBhZ2UsICRkZXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBZGRzIGEgbm90ZSBhdCBhIGNlcnRhaW4gcG9zaXRpb24gb24gdGhlIHBhZ2UuIE5vdGVzIGFyZSBsaWtlIGxpdHRsZQogKiByZWN0YW5ndWxhciBzaGVldHMgd2l0aCB0ZXh0IG9uIGl0LCB3aGljaCBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIG9uCiAqIGEgcGFnZS4gVGhleQogKiBhcmUgc2hvd24gZWl0aGVyIGZvbGRlZCBvciB1bmZvbGRlZC4gSWYgZm9sZGVkLCB0aGUgc3BlY2lmaWVkIGljb24KICogaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyLgogKgogKiBUaGUgbm90ZSB3aWxsIG5vdCBiZSB2aXNpYmxlIGlmIHRoZSBkb2N1bWVudAogKiBpcyBwcmludGVkIG9yIHZpZXdlZCBidXQgaXQgd2lsbCBzaG93IHVwIGlmIHRoZSBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGJ5IGVpdGhlciBBY3JvYmF0IERpc3RpbGxlcuKEoiBvciBHaG9zdHZpZXcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRsbHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkbGx5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIHN0cmluZyAkY29udGVudHMgVGhlIHRleHQgb2YgdGhlIG5vdGUuCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbm90ZSBhcyBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciBvZiB0aGUgbm90ZS4KICogQHBhcmFtIHN0cmluZyAkaWNvbiBUaGUgaWNvbiBzaG93biBpZiB0aGUgbm90ZSBpcyBmb2xkZWQuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQKICogdG8gY29tbWVudCwgaW5zZXJ0LAogKiBub3RlLCBwYXJhZ3JhcGgsCiAqIG5ld3BhcmFncmFwaCwga2V5LCBvcgogKiBoZWxwLgogKiBAcGFyYW0gaW50ICRvcGVuIElmIG9wZW4gaXMgdW5lcXVhbCB0byB6ZXJvIHRoZSBub3RlIHdpbGwKICogYmUgc2hvd24gdW5mb2xkZWQgYWZ0ZXIgb3BlbmluZyB0aGUgZG9jdW1lbnQgd2l0aCBhIHBkZiB2aWV3ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9ub3RlKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRjb250ZW50cywgc3RyaW5nICR0aXRsZSwgc3RyaW5nICRpY29uLCBpbnQgJG9wZW4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX25vdGUoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkY29udGVudHMsICR0aXRsZSwgJGljb24sICRvcGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBQbGFjZXMgYSBoeXBlcmxpbmsgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHBvaW50aW5nIHRvIGEgc2Vjb25kIHBkZiBkb2N1bWVudC4KICogQ2xpY2tpbmcgb24gdGhlIGxpbmsgd2lsbCBicmFuY2ggdG8gdGhlIGRvY3VtZW50IGF0IHRoZSBnaXZlbiBwYWdlLiBUaGUKICogZmlyc3QgcGFnZSBpbiBhIGRvY3VtZW50IGhhcyBudW1iZXIgMS4KICoKICogVGhlIGh5cGVybGluaydzIHNvdXJjZSBwb3NpdGlvbiBpcyBhIHJlY3RhbmdsZSB3aXRoIGl0cyBsb3dlciBsZWZ0IGNvcm5lciBhdAogKiAobGx4LCBsbHkpIGFuZCBpdHMgdXBwZXIKICogcmlnaHQgY29ybmVyIGF0ICh1cngsIHVyeSkuCiAqIFRoZSByZWN0YW5nbGUgaGFzIGJ5IGRlZmF1bHQgYSB0aGluIGJsdWUgYm9yZGVyLgogKgogKiBUaGUgbm90ZSB3aWxsIG5vdCBiZSB2aXNpYmxlIGlmIHRoZSBkb2N1bWVudAogKiBpcyBwcmludGVkIG9yIHZpZXdlZCBidXQgaXQgd2lsbCBzaG93IHVwIGlmIHRoZSBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGJ5IGVpdGhlciBBY3JvYmF0IERpc3RpbGxlcuKEoiBvciBHaG9zdHZpZXcuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRsbHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkbGx5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgogKiBAcGFyYW0gZmxvYXQgJHVyeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIHBkZiBkb2N1bWVudCB0byBiZSBvcGVuZWQgd2hlbiBjbGlja2luZyBvbgogKiB0aGlzIGxpbmsuCiAqIEBwYXJhbSBpbnQgJHBhZ2UgVGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbiBwZGYgZG9jdW1lbnQKICogQHBhcmFtIHN0cmluZyAkZGVzdCBUaGUgcGFyYW1ldGVyIGRlc3QgZGV0ZXJtaW5lcyBob3cgdGhlIGRvY3VtZW50CiAqIGlzIGJlaW5nIHZpZXdlZC4gSXQgY2FuIGJlIGZpdHBhZ2UsCiAqIGZpdHdpZHRoLCBmaXRoZWlnaHQsIG9yCiAqIGZpdGJib3guCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF9wZGZsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICRmaWxlbmFtZSwgaW50ICRwYWdlLCBzdHJpbmcgJGRlc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX3BkZmxpbmsoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkZmlsZW5hbWUsICRwYWdlLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGxhY2VzIGEgaHlwZXJsaW5rIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBwb2ludGluZyB0byBhIHdlYiBwYWdlLiBUaGUKICogaHlwZXJsaW5rJ3Mgc291cmNlIHBvc2l0aW9uIGlzIGEgcmVjdGFuZ2xlIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0CiAqIChsbHgsIGxseSkgYW5kCiAqIGl0cyB1cHBlciByaWdodCBjb3JuZXIgYXQgKHVyeCwKICogdXJ5KS4gVGhlIHJlY3RhbmdsZSBoYXMgYnkgZGVmYXVsdCBhIHRoaW4KICogYmx1ZSBib3JkZXIuCiAqCiAqIFRoZSBub3RlIHdpbGwgbm90IGJlIHZpc2libGUgaWYgdGhlIGRvY3VtZW50CiAqIGlzIHByaW50ZWQgb3Igdmlld2VkIGJ1dCBpdCB3aWxsIHNob3cgdXAgaWYgdGhlIGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYnkgZWl0aGVyIEFjcm9iYXQgRGlzdGlsbGVy4oSiIG9yIEdob3N0dmlldy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJGxseCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICRsbHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCiAqIEBwYXJhbSBmbG9hdCAkdXJ4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KICogQHBhcmFtIGZsb2F0ICR1cnkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgogKiBAcGFyYW0gc3RyaW5nICR1cmwgVGhlIHVybCBvZiB0aGUgaHlwZXJsaW5rIHRvIGJlIG9wZW5lZCB3aGVuIGNsaWNraW5nIG9uCiAqIHRoaXMgbGluaywgZS5nLiBodHRwOi8vd3d3LnBocC5uZXQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FkZF93ZWJsaW5rKCRwc2RvYywgZmxvYXQgJGxseCwgZmxvYXQgJGxseSwgZmxvYXQgJHVyeCwgZmxvYXQgJHVyeSwgc3RyaW5nICR1cmwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYWRkX3dlYmxpbmsoJHBzZG9jLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkdXJsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHBvcnRpb24gb2YgYSBjaXJjbGUgd2l0aCBhdCBtaWRkbGUgcG9pbnQgYXQKICogKHgsIHkpLiBUaGUgYXJjIHN0YXJ0cyBhdCBhbgogKiBhbmdsZSBvZiBhbHBoYSBhbmQgZW5kcyBhdCBhbiBhbmdsZSBvZgogKiBiZXRhLiBJdCBpcyBkcmF3biBjb3VudGVyY2xvY2t3aXNlICh1c2UKICogcHNfYXJjbiB0byBkcmF3IGNsb2Nrd2lzZSkuIFRoZSBzdWJwYXRoIGFkZGVkCiAqIHRvIHRoZSBjdXJyZW50IHBhdGggc3RhcnRzIG9uIHRoZSBhcmMgYXQgYW5nbGUgYWxwaGEKICogYW5kIGVuZHMgb24gdGhlIGFyYyBhdCBhbmdsZSBiZXRhLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkeCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjaXJjbGUncyBtaWRkbGUgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjaXJjbGUncyBtaWRkbGUgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZQogKiBAcGFyYW0gZmxvYXQgJGFscGhhIFRoZSBzdGFydCBhbmdsZSBnaXZlbiBpbiBkZWdyZWVzLgogKiBAcGFyYW0gZmxvYXQgJGJldGEgVGhlIGVuZCBhbmdsZSBnaXZlbiBpbiBkZWdyZWVzLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19hcmMoJHBzZG9jLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRyYWRpdXMsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYXJjKCRwc2RvYywgJHgsICR5LCAkcmFkaXVzLCAkYWxwaGEsICRiZXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyBhIHBvcnRpb24gb2YgYSBjaXJjbGUgd2l0aCBhdCBtaWRkbGUgcG9pbnQgYXQKICogKHgsIHkpLiBUaGUgYXJjIHN0YXJ0cyBhdCBhbgogKiBhbmdsZSBvZiBhbHBoYSBhbmQgZW5kcyBhdCBhbiBhbmdsZSBvZgogKiBiZXRhLiBJdCBpcyBkcmF3biBjbG9ja3dpc2UgKHVzZQogKiBwc19hcmMgdG8gZHJhdyBjb3VudGVyY2xvY2t3aXNlKS4gVGhlIHN1YnBhdGggYWRkZWQgdG8KICogdGhlIGN1cnJlbnQgcGF0aCBzdGFydHMgb24gdGhlIGFyYyBhdCBhbmdsZSBiZXRhIGFuZAogKiBlbmRzIG9uIHRoZSBhcmMgYXQgYW5nbGUgYWxwaGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlCiAqIEBwYXJhbSBmbG9hdCAkYWxwaGEgVGhlIHN0YXJ0aW5nIGFuZ2xlIGdpdmVuIGluIGRlZ3JlZXMuCiAqIEBwYXJhbSBmbG9hdCAkYmV0YSBUaGUgZW5kIGFuZ2xlIGdpdmVuIGluIGRlZ3JlZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2FyY24oJHBzZG9jLCBmbG9hdCAkeCwgZmxvYXQgJHksIGZsb2F0ICRyYWRpdXMsIGZsb2F0ICRhbHBoYSwgZmxvYXQgJGJldGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYXJjbigkcHNkb2MsICR4LCAkeSwgJHJhZGl1cywgJGFscGhhLCAkYmV0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHBhZ2UuIEFsdGhvdWdoIHRoZSBwYXJhbWV0ZXJzIHdpZHRoCiAqIGFuZCBoZWlnaHQgaW1wbHkgYSBkaWZmZXJlbnQgcGFnZSBzaXplIGZvciBlYWNoCiAqIHBhZ2UsIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIFBvc3RTY3JpcHQuIFRoZSBmaXJzdCBjYWxsIG9mCiAqIHBzX2JlZ2luX3BhZ2Ugd2lsbCBzZXQgdGhlIHBhZ2Ugc2l6ZSBmb3IgdGhlIHdob2xlCiAqIGRvY3VtZW50LiBDb25zZWN1dGl2ZSBjYWxscyB3aWxsIGhhdmUgbm8gZWZmZWN0LCBleGNlcHQgZm9yIGNyZWF0aW5nIGEgbmV3CiAqIHBhZ2UuIFRoZSBzaXR1YXRpb24gaXMgZGlmZmVyZW50IGlmIHlvdSBpbnRlbnQgdG8gY29udmVydCB0aGUgUG9zdFNjcmlwdAogKiBkb2N1bWVudCBpbnRvIFBERi4gVGhpcyBmdW5jdGlvbiBwbGFjZXMgcGRmbWFya3MgaW50byB0aGUgZG9jdW1lbnQgd2hpY2gKICogY2FuIHNldCB0aGUgc2l6ZSBmb3IgZWFjaCBwYWdlIGluZGl2aXVhbGx5LiBUaGUgcmVzdWx0aW5nIFBERiBkb2N1bWVudCB3aWxsCiAqIGhhdmUgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMuCiAqCiAqIFRob3VnaCBQb3N0U2NyaXB0IGRvZXMgbm90IGtub3cgZGlmZmVyZW50IHBhZ2Ugc2l6ZXMsIHBzbGliIHBsYWNlcwogKiBhIGJvdW5kaW5nIGJveCBmb3IgZWFjaCBwYWdlIGludG8gdGhlIGRvY3VtZW50LiBUaGlzIHNpemUgaXMgZXZhbHVhdGVkCiAqIGJ5IHNvbWUgUG9zdFNjcmlwdCB2aWV3ZXJzIGFuZCB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoZSBCb3VuZGluZ0JveAogKiBpbiB0aGUgSGVhZGVyIG9mIHRoZSBkb2N1bWVudC4gVGhpcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbgogKiB5b3Ugc2V0IGEgQm91bmRpbmdCb3ggd2hvc2UgbG93ZXIgbGVmdCBjb3JuZXIgaXMgbm90ICgwLCAwKSwgYmVjYXVzZSB0aGUKICogYm91bmRpbmcgYm94IG9mIHRoZSBwYWdlIHdpbGwgYWx3YXlzIGhhdmUgYSBsb3dlciBsZWZ0IGNvcm5lciAoMCwgMCkKICogYW5kIG92ZXJ3cml0ZXMgdGhlIGdsb2JhbCBzZXR0aW5nLgogKgogKiBFYWNoIHBhZ2UgaXMgZW5jYXBzdWxhdGVkIGludG8gc2F2ZS9yZXN0b3JlLiBUaGlzIG1lYW5zLCB0aGF0IG1vc3Qgb2YgdGhlCiAqIHNldHRpbmdzIG1hZGUgb24gb25lIHBhZ2Ugd2lsbCBub3QgYmUgcmV0YWluZWQgb24gdGhlIG5leHQgcGFnZS4KICoKICogSWYgdGhlcmUgaXMgdXAgdG8gdGhlIGZpcnN0IGNhbGwgb2YgcHNfYmVnaW5fcGFnZSBubwogKiBjYWxsIG9mIHBzX2ZpbmRmb250LCB0aGVuIHRoZSBoZWFkZXIgb2YgdGhlIFBvc3RTY3JpcHQKICogZG9jdW1lbnQgd2lsbCBiZSBvdXRwdXQgYW5kIHRoZSBib3VuZGluZyBib3ggd2lsbCBiZSBzZXQgdG8gdGhlIHNpemUgb2YKICogdGhlIGZpcnN0IHBhZ2UuIFRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94IGlzIHNldCB0byAoMCwgMCkuCiAqIElmIHBzX2ZpbmRmb250IHdhcyBjYWxsZWQgYmVmb3JlLCB0aGVuIHRoZQogKiBoZWFkZXIgaGFzIGJlZW4gb3V0cHV0IGFscmVhZHksIGFuZCB0aGUgZG9jdW1lbnQgd2lsbCBub3QgaGF2ZSBhIHZhbGlkCiAqIGJvdW5kaW5nIGJveC4gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlzLCBvbmUgc2hvdWxkIGNhbGwKICogcHNfc2V0X2luZm8gdG8gc2V0IHRoZSBpbmZvIGZpZWxkCiAqIEJvdW5kaW5nQm94IGFuZCBwb3NzaWJseSBPcmllbnRhdGlvbgogKiBiZWZvcmUgYW55IHBzX2ZpbmRmb250IG9yCiAqIHBzX2JlZ2luX3BhZ2UgY2FsbHMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHBhZ2UgaW4gcGl4ZWwsIGUuZy4gNTk2IGZvciBBNCBmb3JtYXQuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHBhZ2UgaW4gcGl4ZWwsIGUuZy4gODQyIGZvciBBNCBmb3JtYXQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2JlZ2luX3BhZ2UoJHBzZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYmVnaW5fcGFnZSgkcHNkb2MsICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHBhdHRlcm4uIEEgcGF0dGVybiBpcyBsaWtlIGEgcGFnZSBjb250YWluaW5nIGUuZy4gYSBkcmF3aW5nCiAqIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBmaWxsaW5nIGFyZWFzLiBJdCBpcyB1c2VkIGxpa2UgYSBjb2xvciBieSBjYWxsaW5nCiAqIHBzX3NldGNvbG9yIGFuZCBzZXR0aW5nIHRoZSBjb2xvciBzcGFjZSB0bwogKiBwYXR0ZXJuLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkd2lkdGggVGhlIHdpZHRoIG9mIHRoZSBwYXR0ZXJuIGluIHBpeGVsLgogKiBAcGFyYW0gZmxvYXQgJGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBwYXR0ZXJuIGluIHBpeGVsLgogKiBAcGFyYW0gZmxvYXQgJHhzdGVwIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCBvZiBwbGFjZW1lbnRzIG9mIHRoZSBwYXR0ZXJuIGluCiAqIGhvcml6b250YWwgZGlyZWN0aW9uLgogKiBAcGFyYW0gZmxvYXQgJHlzdGVwIFRoZSBkaXN0YW5jZSBpbiBwaXhlbCBvZiBwbGFjZW1lbnRzIG9mIHRoZSBwYXR0ZXJuIGluCiAqIHZlcnRpY2FsIGRpcmVjdGlvbi4KICogQHBhcmFtIGludCAkcGFpbnR0eXBlIE11c3QgYmUgMSBvciAyLgogKiBAcmV0dXJuIGludCBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfYmVnaW5fcGF0dGVybigkcHNkb2MsIGZsb2F0ICR3aWR0aCwgZmxvYXQgJGhlaWdodCwgZmxvYXQgJHhzdGVwLCBmbG9hdCAkeXN0ZXAsIGludCAkcGFpbnR0eXBlKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfYmVnaW5fcGF0dGVybigkcHNkb2MsICR3aWR0aCwgJGhlaWdodCwgJHhzdGVwLCAkeXN0ZXAsICRwYWludHR5cGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU3RhcnRzIGEgbmV3IHRlbXBsYXRlLiBBIHRlbXBsYXRlIGlzIGNhbGxlZCBhIGZvcm0gaW4gdGhlIHBvc3RzY3JpcHQKICogbGFuZ3VhZ2UuIEl0IGlzIGNyZWF0ZWQgc2ltaWxhciB0byBhIHBhdHRlcm4gYnV0IHVzZWQgbGlrZSBhbiBpbWFnZS4KICogVGVtcGxhdGVzIGFyZSBvZnRlbiB1c2VkIGZvciBkcmF3aW5ncyB3aGljaCBhcmUgcGxhY2VkIHNldmVyYWwgdGltZXMKICogdGhyb3VnaCBvdXQgdGhlIGRvY3VtZW50LCBlLmcuIGxpa2UgYSBjb21wYW55IGxvZ28uIEFsbCBkcmF3aW5nIGZ1bmN0aW9ucwogKiBtYXkgYmUgdXNlZCB3aXRoaW4gYSB0ZW1wbGF0ZS4gVGhlIHRlbXBsYXRlIHdpbGwgbm90IGJlIGRyYXduIHVudGlsCiAqIGl0IGlzIHBsYWNlZCBieSBwc19wbGFjZV9pbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgdGVtcGxhdGUgaW4gcGl4ZWwuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHRlbXBsYXRlIGluIHBpeGVsLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfYmVnaW5fdGVtcGxhdGUoJHBzZG9jLCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19iZWdpbl90ZW1wbGF0ZSgkcHNkb2MsICR3aWR0aCwgJGhlaWdodCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBEcmF3cyBhIGNpcmNsZSB3aXRoIGl0cyBtaWRkbGUgcG9pbnQgYXQgKHgsCiAqIHkpLiBUaGUgY2lyY2xlIHN0YXJ0cyBhbmQgZW5kcyBhdCBwb3NpdGlvbgogKiAoeCtyYWRpdXMsCiAqIHkpLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvdXRzaWRlIGEgcGF0aCBpdAogKiB3aWxsIHN0YXJ0IGEgbmV3IHBhdGguIElmIGl0IGlzIGNhbGxlZCB3aXRoaW4gYSBwYXRoIGl0IHdpbGwgYWRkIHRoZSBjaXJjbGUKICogYXMgYSBzdWJwYXRoLiBJZiB0aGUgbGFzdCBkcmF3aW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBlbmQgaW4gcG9pbnQKICogKHgrcmFkaXVzLAogKiB5KSB0aGVuIHRoZXJlIHdpbGwgYmUgYSBnYXAgaW4gdGhlIHBhdGguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNpcmNsZSdzIG1pZGRsZSBwb2ludC4KICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2NpcmNsZSgkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSwgZmxvYXQgJHJhZGl1cyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jaXJjbGUoJHBzZG9jLCAkeCwgJHksICRyYWRpdXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRha2VzIHRoZSBjdXJyZW50IHBhdGggYW5kIHVzZXMgaXQgdG8gZGVmaW5lIHRoZSBib3JkZXIgb2YgYSBjbGlwcGluZyBhcmVhLgogKiBFdmVyeXRoaW5nIGRyYXduIG91dHNpZGUgb2YgdGhhdCBhcmVhIHdpbGwgbm90IGJlIHZpc2libGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xpcCgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfY2xpcCgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyBhbiBpbWFnZSBhbmQgZnJlZXMgaXRzIHJlc291cmNlcy4gT25jZSBhbiBpbWFnZSBpcyBjbG9zZWQKICogaXQgY2Fubm90IGJlIHVzZWQgYW55bW9yZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICRpbWFnZWlkIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIGltYWdlIGFzIHJldHVybmVkIGJ5CiAqIHBzX29wZW5faW1hZ2Ugb3IKICogcHNfb3Blbl9pbWFnZV9maWxlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19jbG9zZV9pbWFnZSgkcHNkb2MsIGludCAkaW1hZ2VpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jbG9zZV9pbWFnZSgkcHNkb2MsICRpbWFnZWlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDbG9zZXMgdGhlIFBvc3RTY3JpcHQgZG9jdW1lbnQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSB0cmFpbGVyIG9mIHRoZSBQb3N0U2NyaXB0IGRvY3VtZW50LgogKiBJdCBhbHNvIHdyaXRlcyB0aGUgYm9va21hcmsgdHJlZS4gcHNfY2xvc2UgZG9lcwogKiBub3QgZnJlZSBhbnkgcmVzb3VyY2VzLCB3aGljaCBpcyBkb25lIGJ5IHBzX2RlbGV0ZS4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBieSBwc19kZWxldGUgaWYgaXQKICogaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2UoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2Nsb3NlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29ubmVjdHMgdGhlIGxhc3QgcG9pbnQgd2l0aCBmaXJzdCBwb2ludCBvZiBhIHBhdGggYW5kIGRyYXdzIHRoZSByZXN1bHRpbmcKICogY2xvc2VkIGxpbmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2VwYXRoX3N0cm9rZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfY2xvc2VwYXRoX3N0cm9rZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENvbm5lY3RzIHRoZSBsYXN0IHBvaW50IHdpdGggdGhlIGZpcnN0IHBvaW50IG9mIGEgcGF0aC4gVGhlIHJlc3VsdGluZwogKiBwYXRoIGNhbiBiZSB1c2VkIGZvciBzdHJva2luZywgZmlsbGluZywgY2xpcHBpbmcsIGV0Yy4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY2xvc2VwYXRoKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jbG9zZXBhdGgoJHBzZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBPdXRwdXQgYSB0ZXh0IG9uZSBsaW5lIGJlbG93IHRoZSBsYXN0IGxpbmUuIFRoZSBsaW5lIHNwYWNpbmcgaXMKICogdGFrZW4gZnJvbSB0aGUgdmFsdWUgImxlYWRpbmciIHdoaWNoIG11c3QgYmUgc2V0IHdpdGgKICogcHNfc2V0X3ZhbHVlLiBUaGUgYWN0dWFsIHBvc2l0aW9uIG9mIHRoZQogKiB0ZXh0IGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyAidGV4dHgiIGFuZCAidGV4dHkiIHdoaWNoIGNhbiBiZSByZXF1ZXN0ZWQKICogd2l0aCBwc19nZXRfdmFsdWUKICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIG91dHB1dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfY29udGludWVfdGV4dCgkcHNkb2MsIHN0cmluZyAkdGV4dCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19jb250aW51ZV90ZXh0KCRwc2RvYywgJHRleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZCBhIHNlY3Rpb24gb2YgYSBjdWJpYyBCw6l6aWVyIGN1cnZlIGRlc2NyaWJlZCBieSB0aGUgdGhyZWUgZ2l2ZW4gY29udHJvbAogKiBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcGF0aC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHgxIHgtY29vcmRpbmF0ZSBvZiBmaXJzdCBjb250cm9sIHBvaW50LgogKiBAcGFyYW0gZmxvYXQgJHkxIHktY29vcmRpbmF0ZSBvZiBmaXJzdCBjb250cm9sIHBvaW50LgogKiBAcGFyYW0gZmxvYXQgJHgyIHgtY29vcmRpbmF0ZSBvZiBzZWNvbmQgY29udHJvbCBwb2ludC4KICogQHBhcmFtIGZsb2F0ICR5MiB5LWNvb3JkaW5hdGUgb2Ygc2Vjb25kIGNvbnRyb2wgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeDMgeC1jb29yZGluYXRlIG9mIHRoaXJkIGNvbnRyb2wgcG9pbnQuCiAqIEBwYXJhbSBmbG9hdCAkeTMgeS1jb29yZGluYXRlIG9mIHRoaXJkIGNvbnRyb2wgcG9pbnQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2N1cnZldG8oJHBzZG9jLCBmbG9hdCAkeDEsIGZsb2F0ICR5MSwgZmxvYXQgJHgyLCBmbG9hdCAkeTIsIGZsb2F0ICR4MywgZmxvYXQgJHkzKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2N1cnZldG8oJHBzZG9jLCAkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWlubHkgZnJlZXMgbWVtb3J5IHVzZWQgYnkgdGhlIGRvY3VtZW50LiBBbHNvIGNsb3NlcyBhIGZpbGUsIGlmIGl0IHdhcyBub3QKICogY2xvc2VkIGJlZm9yZSB3aXRoIHBzX2Nsb3NlLiBZb3Ugc2hvdWxkIGluIGFueSBjYXNlCiAqIGNsb3NlIHRoZSBmaWxlIHdpdGggcHNfY2xvc2UgYmVmb3JlLCBiZWNhdXNlCiAqIHBzX2Nsb3NlIG5vdCBqdXN0IGNsb3NlcyB0aGUgZmlsZSBidXQgYWxzbyBvdXRwdXRzIGEKICogdHJhaWxvciBjb250YWluaW5nIFBvc3RTY3JpcHQgY29tbWVudHMgbGlrZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZQogKiBkb2N1bWVudCBhbmQgYWRkaW5nIHRoZSBib29rbWFyayBoaWVyYXJjaHkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZGVsZXRlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19kZWxldGUoJHBzZG9jKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFbmRzIGEgcGFnZSB3aGljaCB3YXMgc3RhcnRlZCB3aXRoIHBzX2JlZ2luX3BhZ2UuCiAqIEVuZGluZyBhIHBhZ2Ugd2lsbCBsZWF2ZSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHQsIHdoaWNoIGUuZy4gcmVxdWlyZXMKICogdG8gcmVsb2FkIGZvbnRzIGlmIHRoZXkgd2VyZSBsb2FkaW5nIHdpdGhpbiB0aGUgcGFnZSwgYW5kIHRvIHNldCBtYW55CiAqIG90aGVyIGRyYXdpbmcgcGFyYW1ldGVycyBsaWtlIHRoZSBsaW5lIHdpZHRoLCBvciBjb2xvci4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZW5kX3BhZ2UoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF9wYWdlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW5kcyBhIHBhdHRlcm4gd2hpY2ggd2FzIHN0YXJ0ZWQgd2l0aCBwc19iZWdpbl9wYXR0ZXJuLgogKiBPbmNlIGEgcGF0dGVybiBoYXMgYmVlbiBlbmRlZCwgaXQgY2FuIGJlIHVzZWQgbGlrZSBhIGNvbG9yIHRvIGZpbGwKICogYXJlYXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZW5kX3BhdHRlcm4oJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF9wYXR0ZXJuKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRW5kcyBhIHRlbXBsYXRlIHdoaWNoIHdhcyBzdGFydGVkIHdpdGggcHNfYmVnaW5fdGVtcGxhdGUuCiAqIE9uY2UgYSB0ZW1wbGF0ZSBoYXMgYmVlbiBlbmRlZCwgaXQgY2FuIGJlIHVzZWQgbGlrZSBhbiBpbWFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19lbmRfdGVtcGxhdGUoJHBzZG9jKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2VuZF90ZW1wbGF0ZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbGxzIGFuZCBkcmF3cyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoIHByZXZpb3VzbHkgY2FsbGVkIGRyYXdpbmcKICogZnVuY3Rpb25zIGxpa2UgcHNfbGluZXRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2ZpbGxfc3Ryb2tlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19maWxsX3N0cm9rZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZpbGxzIHRoZSBwYXRoIGNvbnN0cnVjdGVkIHdpdGggcHJldmlvdXNseSBjYWxsZWQgZHJhd2luZyBmdW5jdGlvbnMgbGlrZQogKiBwc19saW5ldG8uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfZmlsbCgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfZmlsbCgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgc2V2ZXJhbCBwYXJhbWV0ZXJzIHdoaWNoIHdlcmUgZGlyZWN0bHkgc2V0IGJ5CiAqIHBzX3NldF9wYXJhbWV0ZXIgb3IgaW5kaXJlY3RseSBieSBvbmUgb2YgdGhlIG90aGVyCiAqIGZ1bmN0aW9ucy4gUGFyYW1ldGVycyBhcmUgYnkgZGVmaW5pdGlvbiBzdHJpbmcKICogdmFsdWVzLiBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIHJldHJpZXZlIHJlc291cmNlcyB3aGljaCB3ZXJlIGFsc28KICogc2V0IGJ5IHBzX3NldF9wYXJhbWV0ZXIuCiAqCiAqIFRoZSBwYXJhbWV0ZXIgbmFtZSBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlcy4KICoKICoKICoKICogZm9udG5hbWUKICoKICoKICogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgZm9udCBvciB0aGUgZm9udCB3aG9zZQogKiBpZGVudGlmaWVyIGlzIHBhc3NlZCBpbiBwYXJhbWV0ZXIgbW9kaWZpZXIuCiAqCiAqCiAqCiAqCiAqIGZvbnRlbmNvZGluZwogKgogKgogKiBUaGUgZW5jb2Rpbmcgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgZm9udC4KICoKICoKICoKICoKICogZG90dGVkdmVyc2lvbgogKgogKgogKiBUaGUgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBwc2xpYiBsaWJyYXJ5IGluIHRoZSBmb3JtYXQKICogJmx0O21ham9yJmd0Oy4mbHQ7bWlub3ImZ3Q7LiZsdDtzdWJtaW5vciZndDsKICoKICoKICoKICoKICogc2NvcGUKICoKICoKICogVGhlIGN1cnJlbnQgZHJhd2luZyBzY29wZS4gQ2FuIGJlIG9iamVjdCwgZG9jdW1lbnQsIG51bGwsIHBhZ2UsCiAqIHBhdHRlcm4sIHBhdGgsIHRlbXBsYXRlLCBwcm9sb2csIGZvbnQsIGdseXBoLgogKgogKgogKgogKgogKiBsaWdhdHVyZWRpc29sdmVjaGFyCiAqCiAqCiAqIFRoZSBjaGFyYWN0ZXIgd2hpY2ggZGlzc29sdmVzIGEgbGlnYXR1cmUuIElmIHlvdXIgYXJlIHVzaW5nIGEgZm9udAogKiB3aGljaCBjb250YWlucyB0aGUgbGlnYXR1cmUgYGZmJyBhbmQgYHwnIGlzIHRoZSBjaGFyIHRvIGRpc3NvbHZlIHRoZQogKiBsaWdhdHVyZSwgdGhlbiBgZnxmJyB3aWxsIHJlc3VsdCBpbiB0d28gYGYnIGluc3RlYWQgb2YgdGhlIGxpZ2F0dXJlIGBmZicuCiAqCiAqCiAqCiAqCiAqIGltYWdlZW5jb2RpbmcKICoKICoKICogVGhlIGVuY29kaW5nIHVzZWQgZm9yIGVuY29kaW5nIGltYWdlcy4gQ2FuIGJlIGVpdGhlcgogKiBoZXggb3IgODUuIGhleCBlbmNvZGluZwogKiB1c2VzIHR3byBieXRlcyBpbiB0aGUgcG9zdHNjcmlwdCBmaWxlIGVhY2ggYnl0ZSBpbiB0aGUgaW1hZ2UuCiAqIDg1IHN0YW5kIGZvciBBc2NpaTg1IGVuY29kaW5nLgogKgogKgogKgogKgogKiBsaW5lbnVtYmVybW9kZQogKgogKgogKiBTZXQgdG8gcGFyYWdyYXBoIGlmIGxpbmVzIGFyZSBudW1iZXJlZAogKiB3aXRoaW4gYSBwYXJhZ3JhcGggb3IgYm94IGlmIHRoZXkgYXJlCiAqIG51bWJlcmVkIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgYm94LgogKgogKgogKgogKgogKiBsaW5lYnJlYWsKICoKICoKICogT25seSB1c2VkIGlmIHRleHQgaXMgb3V0cHV0IHdpdGggcHNfc2hvd19ib3hlZC4KICogSWYgc2V0IHRvIFRSVUUgYSBjYXJyaWFnZSByZXR1cm4gd2lsbCBhZGQgYSBsaW5lCiAqIGJyZWFrLgogKgogKgogKgogKgogKiBwYXJicmVhawogKgogKgogKiBPbmx5IHVzZWQgaWYgdGV4dCBpcyBvdXRwdXQgd2l0aCBwc19zaG93X2JveGVkLgogKiBJZiBzZXQgdG8gVFJVRSBhIGNhcnJpYWdlIHJldHVybiB3aWxsIHN0YXJ0CiAqIGEgbmV3IHBhcmFncmFwaC4KICoKICoKICoKICoKICogaHlwaGVuYXRpb24KICoKICoKICogT25seSB1c2VkIGlmIHRleHQgaXMgb3V0cHV0IHdpdGggcHNfc2hvd19ib3hlZC4KICogSWYgc2V0IHRvIFRSVUUgdGhlIHBhcmFncmFwaCB3aWxsIGJlIGh5cGhlbmF0ZWQKICogaWYgYSBoeXBlbiBkaWN0aW9uYXJ5IGlzIHNldCBhbmQgZXhpc3RzLgogKgogKgogKgogKgogKiBoeXBoZW5kaWN0CiAqCiAqCiAqIEZpbGVuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIGh5cGhlbmF0aW9uIHBhdHRlcm4uCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBmbG9hdCAkbW9kaWZpZXIgQW4gaWRlbnRpZmllciBuZWVkZWQgaWYgYSBwYXJhbWV0ZXIgb2YgYSByZXNvdXJjZSBpcyByZXF1ZXN0ZWQsCiAqIGUuZy4gdGhlIHNpemUgb2YgYW4gaW1hZ2UuIEluIHN1Y2ggYSBjYXNlIHRoZSByZXNvdXJjZSBpZCBpcwogKiBwYXNzZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX2dldF9wYXJhbWV0ZXIoJHBzZG9jLCBzdHJpbmcgJG5hbWUsIGZsb2F0ICRtb2RpZmllciA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRtb2RpZmllciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNfZ2V0X3BhcmFtZXRlcigkcHNkb2MsICRuYW1lLCAkbW9kaWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzX2dldF9wYXJhbWV0ZXIoJHBzZG9jLCAkbmFtZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBIeXBoZW5hdGVzIHRoZSBwYXNzZWQgd29yZC4gcHNfaHlwaGVuYXRlIGV2YWx1YXRlcyB0aGUKICogdmFsdWUgaHlwaGVubWluY2hhcnMgKHNldCBieSBwc19zZXRfdmFsdWUpIGFuZAogKiB0aGUgcGFyYW1ldGVyIGh5cGhlbmRpY3QgKHNldCBieSBwc19zZXRfcGFyYW1ldGVyKS4KICogaHlwaGVuZGljdCBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogKgogKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBsb2NhbGUgY2F0ZWdvcnkgTENfQ1RZUEUgdG8gYmUgc2V0IHByb3Blcmx5LgogKiBUaGlzIGlzIGRvbmUgd2hlbiB0aGUgZXh0ZW5zaW9uIGlzIGluaXRpYWxpemVkIGJ5IHVzaW5nIHRoZSBlbnZpcm9ubWVudAogKiB2YXJpYWJsZXMuIE9uIFVuaXggc3lzdGVtcyByZWFkIHRoZSBtYW4gcGFnZSBvZiBsb2NhbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdGV4dCB0ZXh0IHNob3VsZCBub3QgY29udGFpbiBhbnkgbm9uIGFscGhhCiAqIGNoYXJhY3RlcnMuIFBvc3NpYmxlIHBvc2l0aW9ucyBmb3IgYnJlYWtzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheSBvZgogKiBpbnRlcmdlciBudW1iZXJzLiBFYWNoIG51bWJlciBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4KICogdGV4dCBhZnRlciB3aGljaCBhIGh5cGhlbmF0aW9uIGNhbiB0YWtlIHBsYWNlLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGludGVnZXJzIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uIG9mIHBvc3NpYmxlIGJyZWFrcyBpbgogKiB0aGUgdGV4dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfaHlwaGVuYXRlKCRwc2RvYywgc3RyaW5nICR0ZXh0KTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19oeXBoZW5hdGUoJHBzZG9jLCAkdGV4dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkZmlsZQogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19pbmNsdWRlX2ZpbGUoJHBzZG9jLCBzdHJpbmcgJGZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfaW5jbHVkZV9maWxlKCRwc2RvYywgJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEFkZHMgYSBzdHJhaWdodCBsaW5lIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzIHRvIHRoZQogKiBjdXJyZW50IHBhdGguIFVzZSBwc19tb3ZldG8gdG8gc2V0IHRoZSBzdGFydGluZyBwb2ludAogKiBvZiB0aGUgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb2YgdGhlIGxpbmUuCiAqIEBwYXJhbSBmbG9hdCAkeSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludCBvZiB0aGUgbGluZS4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfbGluZXRvKCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX2xpbmV0bygkcHNkb2MsICR4LCAkeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY3VycmVudCBwb2ludCB0byBuZXcgY29vcmRpbmF0ZXMuIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgb2YKICogcHNfbW92ZXRvIGFmdGVyIGEgcHJldmlvdXMgcGF0aCBoYXMgYmVlbiBlbmRlZCB0aGVuIGl0CiAqIHdpbGwgc3RhcnQgYSBuZXcgcGF0aC4gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHBhdGgKICogaXQgd2lsbCBqdXN0IHNldCB0aGUgY3VycmVudCBwb2ludCBhbmQgc3RhcnQgYSBzdWJwYXRoLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIG1vdmUgdG8uCiAqIEBwYXJhbSBmbG9hdCAkeSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIG1vdmUgdG8uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX21vdmV0bygkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19tb3ZldG8oJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaW5zdGFuY2UuIEl0IGRvZXMgbm90IGNyZWF0ZSB0aGUgZmlsZSBvbiBkaXNrIG9yIGluCiAqIG1lbW9yeSwgaXQganVzdCBzZXRzIHVwIGV2ZXJ5dGhpbmcuIHBzX25ldyBpcyB1c3VhbGx5CiAqIGZvbGxvd2VkIGJ5IGEgY2FsbCBvZiBwc19vcGVuX2ZpbGUgdG8gYWN0dWFsbHkgY3JlYXRlCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKgogKiBAcmV0dXJuIHJlc291cmNlIFJlc291cmNlIG9mIFBvc3RTY3JpcHQgZG9jdW1lbnQuIFRoZSByZXR1cm4gdmFsdWUKICogaXMgcGFzc2VkIHRvIGFsbCBvdGhlciBmdW5jdGlvbnMgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19uZXcoKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX25ldygpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIG5ldyBmaWxlIG9uIGRpc2sgYW5kIHdyaXRlcyB0aGUgUG9zdFNjcmlwdCBkb2N1bWVudCBpbnRvIGl0LiBUaGUKICogZmlsZSB3aWxsIGJlIGNsb3NlZCB3aGVuIHBzX2Nsb3NlIGlzIGNhbGxlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlLgogKiBJZiBmaWxlbmFtZSBpcyBub3QgcGFzc2VkIHRoZSBkb2N1bWVudCB3aWxsIGJlCiAqIGNyZWF0ZWQgaW4gbWVtb3J5IGFuZCBhbGwgb3V0cHV0IHdpbGwgZ28gc3RyYWlnaHQgdG8gdGhlIGJyb3dzZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX29wZW5fZmlsZSgkcHNkb2MsIHN0cmluZyAkZmlsZW5hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwc19vcGVuX2ZpbGUoJHBzZG9jLCAkZmlsZW5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzX29wZW5fZmlsZSgkcHNkb2MpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBsYWNlcyBhIGZvcm1lcmx5IGxvYWRlZCBpbWFnZSBvbiB0aGUgcGFnZS4gVGhlIGltYWdlIGNhbiBiZSBzY2FsZWQuCiAqIElmIHRoZSBpbWFnZSBzaGFsbCBiZSByb3RhdGVkIGFzIHdlbGwsIHlvdSB3aWxsIGhhdmUgdG8gcm90YXRlIHRoZQogKiBjb29yZGluYXRlIHN5c3RlbSBiZWZvcmUgd2l0aCBwc19yb3RhdGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkaW1hZ2VpZCBUaGUgcmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgaW1hZ2UgYXMgcmV0dXJuZWQgYnkKICogcHNfb3Blbl9pbWFnZSBvcgogKiBwc19vcGVuX2ltYWdlX2ZpbGUuCiAqIEBwYXJhbSBmbG9hdCAkeCB4LWNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZS4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLgogKiBAcGFyYW0gZmxvYXQgJHNjYWxlIFRoZSBzY2FsaW5nIGZhY3RvciBmb3IgdGhlIGltYWdlLiBBIHNjYWxlIG9mIDEuMCB3aWxsIHJlc3VsdAogKiBpbiBhIHJlc29sdXRpb24gb2YgNzIgZHBpLCBiZWNhdXNlIGVhY2ggcGl4ZWwgaXMgZXF1aXZhbGVudCB0bwogKiAxIHBvaW50LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19wbGFjZV9pbWFnZSgkcHNkb2MsIGludCAkaW1hZ2VpZCwgZmxvYXQgJHgsIGZsb2F0ICR5LCBmbG9hdCAkc2NhbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcGxhY2VfaW1hZ2UoJHBzZG9jLCAkaW1hZ2VpZCwgJHgsICR5LCAkc2NhbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIERyYXdzIGEgcmVjdGFuZ2xlIHdpdGggaXRzIGxvd2VyIGxlZnQgY29ybmVyIGF0ICh4LAogKiB5KS4gVGhlIHJlY3RhbmdsZSBzdGFydHMgYW5kIGVuZHMgaW4gaXRzIGxvd2VyIGxlZnQKICogY29ybmVyLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvdXRzaWRlIGEgcGF0aCBpdCB3aWxsIHN0YXJ0IGEgbmV3IHBhdGguCiAqIElmIGl0IGlzIGNhbGxlZCB3aXRoaW4gYSBwYXRoIGl0IHdpbGwgYWRkIHRoZSByZWN0YW5nbGUgYXMgYSBzdWJwYXRoLiBJZgogKiB0aGUgbGFzdCBkcmF3aW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBlbmQgaW4gdGhlIGxvd2VyIGxlZnQgY29ybmVyIHRoZW4gdGhlcmUKICogd2lsbCBiZSBhIGdhcCBpbiB0aGUgcGF0aC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgogKiBAcGFyYW0gZmxvYXQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UuCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGltYWdlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19yZWN0KCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5LCBmbG9hdCAkd2lkdGgsIGZsb2F0ICRoZWlnaHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcmVjdCgkcHNkb2MsICR4LCAkeSwgJHdpZHRoLCAkaGVpZ2h0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgc2F2ZWQgZ3JhcGhpY3MgY29udGV4dC4gQW55IGNhbGwgb2YKICogcHNfc2F2ZSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGEgY2FsbCB0bwogKiBwc19yZXN0b3JlLiBBbGwgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMsIGxpbmUKICogc3R5bGUgc2V0dGluZ3MsIGNvbG9yIHNldHRpbmdzLCBldGMuIGFyZSBiZWluZyByZXN0b3JlZCB0byB0aGUgc3RhdGUKICogYmVmb3JlIHRoZSBjYWxsIG9mIHBzX3NhdmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfcmVzdG9yZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcmVzdG9yZSgkcHNkb2MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIHJvdGF0aW9uIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHJvdCBBbmdsZSBvZiByb3RhdGlvbiBpbiBkZWdyZWUuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3JvdGF0ZSgkcHNkb2MsIGZsb2F0ICRyb3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfcm90YXRlKCRwc2RvYywgJHJvdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2F2ZXMgdGhlIGN1cnJlbnQgZ3JhcGhpY3MgY29udGV4dCwgY29udGFpbmluZyBjb2xvcnMsIHRyYW5zbGF0aW9uIGFuZAogKiByb3RhdGlvbiBzZXR0aW5ncyBhbmQgc29tZSBtb3JlLiBBIHNhdmVkIGNvbnRleHQgY2FuIGJlIHJlc3RvcmVkIHdpdGgKICogcHNfcmVzdG9yZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zYXZlKCRwc2RvYyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zYXZlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsaW5nIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggU2NhbGluZyBmYWN0b3IgaW4gaG9yaXpvbnRhbCBkaXJlY3Rpb24uCiAqIEBwYXJhbSBmbG9hdCAkeSBTY2FsaW5nIGZhY3RvciBpbiB2ZXJ0aWNhbCBkaXJlY3Rpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NjYWxlKCRwc2RvYywgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NjYWxlKCRwc2RvYywgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMaW5rcyBhZGRlZCB3aXRoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIHBzX2FkZF93ZWJsaW5rLAogKiBwc19hZGRfcGRmbGluaywgZXRjLiB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIGEKICogc3Vyb3VuZGVkIHJlY3RhbmdsZSB3aGVuIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYW5kIHZpZXdlZCBpbiBhIHBkZiB2aWV3ZXIuIFRoaXMgcmVjdGFuZ2xlIGlzIG5vdCB2aXNpYmxlIGluCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGNvbG9yIG9mIHRoZSByZWN0YW5nbGUncyBib3JkZXIgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHJlZCBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgYm9yZGVyIGNvbG9yLgogKiBAcGFyYW0gZmxvYXQgJGdyZWVuIFRoZSBncmVlbiBjb21wb25lbnQgb2YgdGhlIGJvcmRlciBjb2xvci4KICogQHBhcmFtIGZsb2F0ICRibHVlIFRoZSBibHVlIGNvbXBvbmVudCBvZiB0aGUgYm9yZGVyIGNvbG9yLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRfYm9yZGVyX2NvbG9yKCRwc2RvYywgZmxvYXQgJHJlZCwgZmxvYXQgJGdyZWVuLCBmbG9hdCAkYmx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRfYm9yZGVyX2NvbG9yKCRwc2RvYywgJHJlZCwgJGdyZWVuLCAkYmx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGlua3MgYWRkZWQgd2l0aCBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBwc19hZGRfd2VibGluaywKICogcHNfYWRkX3BkZmxpbmssIGV0Yy4gd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCBhCiAqIHN1cm91bmRlZCByZWN0YW5nbGUgd2hlbiB0aGUgcG9zdHNjcmlwdCBkb2N1bWVudCBpcyBjb252ZXJ0ZWQgdG8KICogcGRmIGFuZCB2aWV3ZWQgaW4gYSBwZGYgdmlld2VyLiBUaGlzIHJlY3RhbmdsZSBpcyBub3QgdmlzaWJsZSBpbgogKiB0aGUgcG9zdHNjcmlwdCBkb2N1bWVudC4KICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBsZW5ndGggb2YgdGhlIGJsYWNrIGFuZCB3aGl0ZSBwb3J0aW9uIG9mIGEKICogZGFzaGVkIGJvcmRlciBsaW5lLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkYmxhY2sgVGhlIGxlbmd0aCBvZiB0aGUgZGFzaC4KICogQHBhcmFtIGZsb2F0ICR3aGl0ZSBUaGUgbGVuZ3RoIG9mIHRoZSBnYXAgYmV0d2VlbiBkYXNoZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9ib3JkZXJfZGFzaCgkcHNkb2MsIGZsb2F0ICRibGFjaywgZmxvYXQgJHdoaXRlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldF9ib3JkZXJfZGFzaCgkcHNkb2MsICRibGFjaywgJHdoaXRlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBMaW5rcyBhZGRlZCB3aXRoIG9uZSBvZiB0aGUgZnVuY3Rpb25zIHBzX2FkZF93ZWJsaW5rLAogKiBwc19hZGRfcGRmbGluaywgZXRjLiB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIGEKICogc3Vyb3VuZGVkIHJlY3RhbmdsZSB3aGVuIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50IGlzIGNvbnZlcnRlZCB0bwogKiBwZGYgYW5kIHZpZXdlZCBpbiBhIHBkZiB2aWV3ZXIuIFRoaXMgcmVjdGFuZ2xlIGlzIG5vdCB2aXNpYmxlIGluCiAqIHRoZSBwb3N0c2NyaXB0IGRvY3VtZW50LgogKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGFwcGVhcmFuY2UgYW5kIHdpZHRoIG9mIHRoZSBib3JkZXIgbGluZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICRzdHlsZSBzdHlsZSBjYW4gYmUgc29saWQgb3IKICogZGFzaGVkLgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSBsaW5lIHdpZHRoIG9mIHRoZSBib3JkZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9ib3JkZXJfc3R5bGUoJHBzZG9jLCBzdHJpbmcgJHN0eWxlLCBmbG9hdCAkd2lkdGgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X2JvcmRlcl9zdHlsZSgkcHNkb2MsICRzdHlsZSwgJHdpZHRoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGNlcnRhaW4gaW5mb3JtYXRpb24gZmllbGRzIG9mIHRoZSBkb2N1bWVudC4gVGhpcyBmaWVsZHMgd2lsbCBiZSBzaG93bgogKiBhcyBhIGNvbW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgUG9zdFNjcmlwdCBmaWxlLiBJZiB0aGUgZG9jdW1lbnQgaXMKICogY29udmVydGVkIHRvIHBkZiB0aGlzIGZpZWxkcyB3aWxsIGFsc28gYmUgdXNlZCBmb3IgdGhlIGRvY3VtZW50CiAqIGluZm9ybWF0aW9uLgogKgogKiBUaGUgQm91bmRpbmdCb3ggaXMgdXN1YWxseSBzZXQgdG8gdGhlIHZhbHVlIGdpdmVuIHRvIHRoZQogKiBmaXJzdCBwYWdlLiBUaGlzIG9ubHkgd29ya3MgaWYgcHNfZmluZGZvbnQgaGFzIG5vdAogKiBiZWVuIGNhbGxlZCBiZWZvcmUuIEluIHN1Y2ggY2FzZXMgdGhlIEJvdW5kaW5nQm94IHdvdWxkIGJlIGxlZnQgdW5zZXQKICogdW5sZXNzIHlvdSBzZXQgaXQgZXhwbGljaXRseSB3aXRoIHRoaXMgZnVuY3Rpb24uCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhbnltb3JlIHdoZW4gdGhlIGhlYWRlciBvZiB0aGUgcG9zdHNjcmlwdAogKiBmaWxlIGhhcyBiZWVuIGFscmVhZHkgd3JpdHRlbi4gSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlCiAqIG9yIHRoZSBmaXJzdCBjYWxsIG9mIHBzX2ZpbmRmb250LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHAgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBuYW1lIG9mIHRoZSBpbmZvcm1hdGlvbiBmaWVsZCB0byBzZXQuIFRoZSB2YWx1ZXMgd2hpY2ggY2FuIGJlCiAqIHNldCBhcmUgS2V5d29yZHMsIFN1YmplY3QsCiAqIFRpdGxlLCBDcmVhdG9yLAogKiBBdXRob3IsIEJvdW5kaW5nQm94LCBhbmQKICogT3JpZW50YXRpb24uIEJlIGF3YXJlIHRoYXQgc29tZSBvZiB0aGVtIGhhcyBhCiAqIG1lYW5pbmcgdG8gUG9zdFNjcmlwdCB2aWV3ZXJzLgogKiBAcGFyYW0gc3RyaW5nICR2YWwgVGhlIHZhbHVlIG9mIHRoZSBpbmZvcm1hdGlvbiBmaWVsZC4gVGhlIGZpZWxkCiAqIE9yaWVudGF0aW9uIGNhbiBiZSBzZXQgdG8gZWl0aGVyCiAqIFBvcnRyYWl0IG9yIExhbmRzY2FwZS4gVGhlCiAqIEJvdW5kaW5nQm94IGlzIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZm91ciBudW1iZXJzLgogKiBUaGUgZmlyc3QgdHdvIG51bWJlcnMgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YKICogdGhlIHBhZ2UuIFRoZSBsYXN0IHR3byBudW1iZXJzIGFyZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVwcGVyCiAqIHJpZ2h0IGNvcm5lci4KICoKICogVXAgdG8gdmVyc2lvbiAwLjIuNiBvZiBwc2xpYiwgdGhlIEJvdW5kaW5nQm94IGFuZCBPcmllbnRhdGlvbgogKiB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHBzX2JlZ2luX3BhZ2UsCiAqIHVubGVzcyBwc19maW5kZm9udCBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRfaW5mbygkcCwgc3RyaW5nICRrZXksIHN0cmluZyAkdmFsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldF9pbmZvKCRwLCAka2V5LCAkdmFsKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHNldmVyYWwgcGFyYW1ldGVycyB3aGljaCBhcmUgdXNlZCBieSBtYW55IGZ1bmN0aW9ucy4gUGFyYW1ldGVycyBhcmUgYnkKICogZGVmaW5pdGlvbiBzdHJpbmcgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBuYW1lcyBzZWUgcHNfZ2V0X3BhcmFtZXRlci4KICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF9wYXJhbWV0ZXIoJHBzZG9jLCBzdHJpbmcgJG5hbWUsIHN0cmluZyAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X3BhcmFtZXRlcigkcHNkb2MsICRuYW1lLCAkdmFsdWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldCB0aGUgcG9zaXRpb24gZm9yIHRoZSBuZXh0IHRleHQgb3V0cHV0LiBZb3UgbWF5IGFsdGVybmF0aXZlbHkgc2V0IHRoZSB4CiAqIGFuZCB5IHZhbHVlIHNlcGFyYXRlbHkgYnkgY2FsbGluZyBwc19zZXRfdmFsdWUgYW5kCiAqIGNob29zaW5nIHRleHR4IHJlc3BlY3RpdmVseSB0ZXh0eSBhcwogKiB0aGUgdmFsdWUgbmFtZS4KICoKICogSWYgeW91IHdhbnQgdG8gb3V0cHV0IHRleHQgYXQgYSBjZXJ0YWluIHBvc2l0aW9uIGl0IGlzIG1vcmUgY29udmVuaWVudAogKiB0byB1c2UgcHNfc2hvd194eSBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHRleHQgcG9zaXRpb24KICogYW5kIGNhbGxpbmcgcHNfc2hvdy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHggeC1jb29yZGluYXRlIG9mIHRoZSBuZXcgdGV4dCBwb3NpdGlvbi4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbmV3IHRleHQgcG9zaXRpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldF90ZXh0X3BvcygkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRfdGV4dF9wb3MoJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgc2V2ZXJhbCB2YWx1ZXMgd2hpY2ggYXJlIHVzZWQgYnkgbWFueSBmdW5jdGlvbnMuIFBhcmFtZXRlcnMgYXJlIGJ5CiAqIGRlZmluaXRpb24gZmxvYXQgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKgogKgogKiB0ZXh0cmVuZGVyaW5nCiAqCiAqCiAqIFRoZSB3YXkgaG93IHRleHQgaXMgc2hvd24uCiAqCiAqCiAqCiAqCiAqIHRleHR4CiAqCiAqCiAqIFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRleHQgb3V0cHV0LgogKgogKgogKgogKgogKiB0ZXh0eQogKgogKgogKiBUaGUgeSBjb29yZGluYXRlIGZvciB0ZXh0IG91dHB1dC4KICoKICoKICoKICoKICogd29yZHNwYWNpbmcKICoKICoKICogVGhlIGRpc3RhbmNlIGJldHdlZW4gd29yZHMgcmVsYXRpdmUgdG8gdGhlIHdpZHRoIG9mIGEgc3BhY2UuCiAqCiAqCiAqCiAqCiAqIGxlYWRpbmcKICoKICoKICogVGhlIGRpc3RhbmNlIGJldHdlZW4gbGluZXMgaW4gcGl4ZWxzLgogKgogKgogKgogKgogKgogKiBUaGUgd2F5IGhvdyB0ZXh0IGlzIHNob3duLgogKgogKiBUaGUgeCBjb29yZGluYXRlIGZvciB0ZXh0IG91dHB1dC4KICoKICogVGhlIHkgY29vcmRpbmF0ZSBmb3IgdGV4dCBvdXRwdXQuCiAqCiAqIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHdvcmRzIHJlbGF0aXZlIHRvIHRoZSB3aWR0aCBvZiBhIHNwYWNlLgogKgogKiBUaGUgZGlzdGFuY2UgYmV0d2VlbiBsaW5lcyBpbiBwaXhlbHMuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIHdheSBob3cgdGV4dCBpcyBzaG93bi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0X3ZhbHVlKCRwc2RvYywgc3RyaW5nICRuYW1lLCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0X3ZhbHVlKCRwc2RvYywgJG5hbWUsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgY29sb3IgZm9yIGRyYXdpbmcsIGZpbGxpbmcsIG9yIGJvdGguCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgcGFyYW1ldGVyIHR5cGUgY2FuIGJlCiAqIGJvdGgsIGZpbGwsIG9yCiAqIGZpbGxzdHJva2UuCiAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yc3BhY2UgVGhlIGNvbG9yc3BhY2Ugc2hvdWxkIGJlIG9uZSBvZiBncmF5LAogKiByZ2IsIGNteWssCiAqIHNwb3QsIHBhdHRlcm4uIERlcGVuZGluZyBvbiB0aGUKICogY29sb3JzcGFjZSBlaXRoZXIgb25seSB0aGUgZmlyc3QsIHRoZSBmaXJzdCB0aHJlZSBvciBhbGwgcGFyYW1ldGVycwogKiB3aWxsIGJlIHVzZWQuCiAqIEBwYXJhbSBmbG9hdCAkYzEgRGVwZW5kaW5nIG9uIHRoZSBjb2xvcnNwYWNlIHRoaXMgaXMgZWl0aGVyIHRoZSByZWQgY29tcG9uZW50IChyZ2IpLAogKiB0aGUgY3lhbiBjb21wb25lbnQgKGNteWspLCB0aGUgZ3JheSB2YWx1ZSAoZ3JheSksIHRoZSBpZGVudGlmaWVyIG9mCiAqIHRoZSBzcG90IGNvbG9yIG9yIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXR0ZXJuLgogKiBAcGFyYW0gZmxvYXQgJGMyIERlcGVuZGluZyBvbiB0aGUgY29sb3JzcGFjZSB0aGlzIGlzIGVpdGhlciB0aGUgZ3JlZW4gY29tcG9uZW50IChyZ2IpLAogKiB0aGUgbWFnZW50YSBjb21wb25lbnQgKGNteWspLgogKiBAcGFyYW0gZmxvYXQgJGMzIERlcGVuZGluZyBvbiB0aGUgY29sb3JzcGFjZSB0aGlzIGlzIGVpdGhlciB0aGUgYmx1ZSBjb21wb25lbnQgKHJnYiksCiAqIHRoZSB5ZWxsb3cgY29tcG9uZW50IChjbXlrKS4KICogQHBhcmFtIGZsb2F0ICRjNCBUaGlzIG11c3Qgb25seSBiZSBzZXQgaW4gY215ayBjb2xvcnNwYWNlIGFuZCBzcGVjaWZpZXMgdGhlIGJsYWNrCiAqIGNvbXBvbmVudC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0Y29sb3IoJHBzZG9jLCBzdHJpbmcgJHR5cGUsIHN0cmluZyAkY29sb3JzcGFjZSwgZmxvYXQgJGMxLCBmbG9hdCAkYzIsIGZsb2F0ICRjMywgZmxvYXQgJGM0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldGNvbG9yKCRwc2RvYywgJHR5cGUsICRjb2xvcnNwYWNlLCAkYzEsICRjMiwgJGMzLCAkYzQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGxlbmd0aCBvZiB0aGUgYmxhY2sgYW5kIHdoaXRlIHBvcnRpb25zIG9mIGEgZGFzaGVkIGxpbmUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICRvbiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXNoLgogKiBAcGFyYW0gZmxvYXQgJG9mZiBUaGUgbGVuZ3RoIG9mIHRoZSBnYXAgYmV0d2VlbiBkYXNoZXMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGRhc2goJHBzZG9jLCBmbG9hdCAkb24sIGZsb2F0ICRvZmYpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0ZGFzaCgkcHNkb2MsICRvbiwgJG9mZik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcwogKiBjdXJyZW50bHkgbm90IGRvY3VtZW50ZWQ7IG9ubHkgaXRzIGFyZ3VtZW50IGxpc3QgaXMgYXZhaWxhYmxlLgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwLjIgYW5kIDEuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGZsYXQoJHBzZG9jLCBmbG9hdCAkdmFsdWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0ZmxhdCgkcHNkb2MsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBhIGZvbnQsIHdoaWNoIGhhcyB0byBiZSBsb2FkZWQgYmVmb3JlIHdpdGgKICogcHNfZmluZGZvbnQuIE91dHB1dHRpbmcgdGV4dCB3aXRob3V0IHNldHRpbmcgYSBmb250CiAqIHJlc3VsdHMgaW4gYW4gZXJyb3IuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkZm9udGlkIFRoZSBmb250IGlkZW50aWZpZXIgYXMgcmV0dXJuZWQgYnkgcHNfZmluZGZvbnQuCiAqIEBwYXJhbSBmbG9hdCAkc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgZm9udC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0Zm9udCgkcHNkb2MsIGludCAkZm9udGlkLCBmbG9hdCAkc2l6ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRmb250KCRwc2RvYywgJGZvbnRpZCwgJHNpemUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgdGhlIGdyYXkgdmFsdWUgZm9yIGFsbCBmb2xsb3dpbmcgZHJhd2luZyBvcGVyYXRpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkZ3JheSBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgKHdoaXRlKSBhbmQgMSAoYmxhY2spLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRncmF5KCRwc2RvYywgZmxvYXQgJGdyYXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2V0Z3JheSgkcHNkb2MsICRncmF5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIGhvdyBsaW5lIGVuZHMgbG9vayBsaWtlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgb2YgbGluZSBlbmRzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCiAqIFBTX0xJTkVDQVBfQlVUVCwKICogUFNfTElORUNBUF9ST1VORCwgb3IKICogUFNfTElORUNBUF9TUVVBUkVELgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRsaW5lY2FwKCRwc2RvYywgaW50ICR0eXBlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldGxpbmVjYXAoJHBzZG9jLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyBob3cgbGluZXMgYXJlIGpvaW5lZC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICR0eXBlIFRoZSB3YXkgbGluZXMgYXJlIGpvaW5lZC4gUG9zc2libGUgdmFsdWVzIGFyZQogKiBQU19MSU5FSk9JTl9NSVRFUiwKICogUFNfTElORUpPSU5fUk9VTkQsIG9yCiAqIFBTX0xJTkVKT0lOX0JFVkVMLgogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRsaW5lam9pbigkcHNkb2MsIGludCAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRsaW5lam9pbigkcHNkb2MsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSBsaW5lIHdpZHRoIGZvciBhbGwgZm9sbG93aW5nIGRyYXdpbmcgb3BlcmF0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSB3aWR0aCBvZiBsaW5lcyBpbiBwb2ludHMuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldGxpbmV3aWR0aCgkcHNkb2MsIGZsb2F0ICR3aWR0aCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRsaW5ld2lkdGgoJHBzZG9jLCAkd2lkdGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIElmIHR3byBsaW5lcyBqb2luIGluIGEgc21hbGwgYW5nbGUgYW5kIHRoZSBsaW5lIGpvaW4gaXMgc2V0IHRvCiAqIFBTX0xJTkVKT0lOX01JVEVSLCB0aGVuCiAqIHRoZSByZXN1bHRpbmcgc3Bpa2Ugd2lsbCBiZSB2ZXJ5IGxvbmcuIFRoZSBtaXRlciBsaW1pdCBpcyB0aGUgbWF4aW11bQogKiByYXRpbyBvZiB0aGUgbWl0ZXIgbGVuZ3RoICh0aGUgbGVuZ3RoIG9mIHRoZSBzcGlrZSkgYW5kIHRoZSBsaW5lIHdpZHRoLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIG1heGltdW0gcmF0aW8gYmV0d2VlbiB0aGUgbWl0ZXIgbGVuZ3RoIGFuZCB0aGUgbGluZSB3aWR0aC4gTGFyZ2VyCiAqIHZhbHVlcyAoJmd0OyAxMCkgd2lsbCByZXN1bHQgaW4gdmVyeSBsb25nIHNwaWtlcyB3aGVuIHR3byBsaW5lcyBtZWV0CiAqIGluIGEgc21hbGwgYW5nbGUuIEtlZXAgdGhlIGRlZmF1bHQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2V0bWl0ZXJsaW1pdCgkcHNkb2MsIGZsb2F0ICR2YWx1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRtaXRlcmxpbWl0KCRwc2RvYywgJHZhbHVlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkbW9kZQogKiBAdGhyb3dzIFBzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc19zZXRvdmVycHJpbnRtb2RlKCRwc2RvYywgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NldG92ZXJwcmludG1vZGUoJHBzZG9jLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogU2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBibGFjayBhbmQgd2hpdGUgcG9ydGlvbnMgb2YgYSBkYXNoZWQgbGluZS4KICogcHNfc2V0cG9seWRhc2ggaXMgdXNlZCB0byBzZXQgbW9yZSBjb21wbGljYXRlZCBkYXNoCiAqIHBhdHRlcm5zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBmbG9hdCAkYXJyIGFyciBpcyBhIGxpc3Qgb2YgbGVuZ3RoIGVsZW1lbnRzIGFsdGVybmF0ZWx5IGZvcgogKiB0aGUgYmxhY2sgYW5kIHdoaXRlIHBvcnRpb24uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3NldHBvbHlkYXNoKCRwc2RvYywgZmxvYXQgJGFycik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zZXRwb2x5ZGFzaCgkcHNkb2MsICRhcnIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENyZWF0ZXMgYSBwYXR0ZXJuIGJhc2VkIG9uIGEgc2hhZGluZywgd2hpY2ggaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHdpdGgKICogcHNfc2hhZGluZy4gU2hhZGluZyBwYXR0ZXJucyBjYW4gYmUgdXNlZCBsaWtlIHJlZ3VsYXIKICogcGF0dGVybnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGludCAkc2hhZGluZ2lkIFRoZSBpZGVudGlmaWVyIG9mIGEgc2hhZGluZyBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aAogKiBwc19zaGFkaW5nLgogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0IFRoaXMgYXJndW1lbnQgaXMgbm90IGN1cnJlbnRseSB1c2VkLgogKiBAcmV0dXJuIGludCBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hhZGluZ19wYXR0ZXJuKCRwc2RvYywgaW50ICRzaGFkaW5naWQsIHN0cmluZyAkb3B0bGlzdCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NoYWRpbmdfcGF0dGVybigkcHNkb2MsICRzaGFkaW5naWQsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENyZWF0ZXMgYSBzaGFkaW5nLCB3aGljaCBjYW4gYmUgdXNlZCBieSBwc19zaGZpbGwgb3IKICogcHNfc2hhZGluZ19wYXR0ZXJuLgogKgogKiBUaGUgY29sb3Igb2YgdGhlIHNoYWRpbmcgY2FuIGJlIGluIGFueSBjb2xvciBzcGFjZSBleGNlcHQgZm9yCiAqIHBhdHRlcm4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgdHlwZSBvZiBzaGFkaW5nIGNhbiBiZSBlaXRoZXIgcmFkaWFsIG9yCiAqIGF4aWFsLiBFYWNoIHNoYWRpbmcgc3RhcnRzIHdpdGggdGhlIGN1cnJlbnQgZmlsbAogKiBjb2xvciBhbmQgZW5kcyB3aXRoIHRoZSBnaXZlbiBjb2xvciB2YWx1ZXMgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzCiAqIGMxIHRvIGM0CiAqIChzZWUgcHNfc2V0Y29sb3IgZm9yIHRoZWlyIG1lYW5pbmcpLgogKiBAcGFyYW0gZmxvYXQgJHgwIFRoZSBjb29yZGluYXRlcyB4MCwgeTAsCiAqIHgxLCB5MSBhcmUgdGhlIHN0YXJ0IGFuZAogKiBlbmQgcG9pbnQgb2YgdGhlIHNoYWRpbmcuIElmIHRoZSB0eXBlIG9mIHNoYWRpbmcgaXMKICogcmFkaWFsIHRoZSB0d28gcG9pbnRzIGFyZSB0aGUgbWlkZGxlIHBvaW50cyBvZgogKiBhIHN0YXJ0aW5nIGFuZCBlbmRpbmcgY2lyY2xlLgogKiBAcGFyYW0gZmxvYXQgJHkwIFNlZSBwc19zZXRjb2xvciBmb3IgdGhlaXIgbWVhbmluZy4KICogQHBhcmFtIGZsb2F0ICR4MSBJZiB0aGUgc2hhZGluZyBpcyBvZiB0eXBlIHJhZGlhbCB0aGUKICogb3B0bGlzdCBtdXN0IGFsc28gY29udGFpbiB0aGUgcGFyYW1ldGVycwogKiByMCBhbmQgcjEgd2l0aCB0aGUgcmFkaXVzIG9mIHRoZQogKiBzdGFydCBhbmQgZW5kIGNpcmNsZS4KICogQHBhcmFtIGZsb2F0ICR5MQogKiBAcGFyYW0gZmxvYXQgJGMxCiAqIEBwYXJhbSBmbG9hdCAkYzIKICogQHBhcmFtIGZsb2F0ICRjMwogKiBAcGFyYW0gZmxvYXQgJGM0CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgcGF0dGVybi4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hhZGluZygkcHNkb2MsIHN0cmluZyAkdHlwZSwgZmxvYXQgJHgwLCBmbG9hdCAkeTAsIGZsb2F0ICR4MSwgZmxvYXQgJHkxLCBmbG9hdCAkYzEsIGZsb2F0ICRjMiwgZmxvYXQgJGMzLCBmbG9hdCAkYzQsIHN0cmluZyAkb3B0bGlzdCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3NoYWRpbmcoJHBzZG9jLCAkdHlwZSwgJHgwLCAkeTAsICR4MSwgJHkxLCAkYzEsICRjMiwgJGMzLCAkYzQsICRvcHRsaXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEZpbGxzIGFuIGFyZWEgd2l0aCBhIHNoYWRpbmcsIHdoaWNoIGhhcyB0byBiZSBjcmVhdGVkIGJlZm9yZSB3aXRoCiAqIHBzX3NoYWRpbmcuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGNyZWF0aW5nCiAqIGEgcGF0dGVybiBmcm9tIGEgc2hhZGluZyBwc19zaGFkaW5nX3BhdHRlcm4gYW5kIHVzaW5nCiAqIHRoZSBwYXR0ZXJuIGFzIHRoZSBmaWxsaW5nIGNvbG9yLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBpbnQgJHNoYWRpbmdpZCBUaGUgaWRlbnRpZmllciBvZiBhIHNoYWRpbmcgcHJldmlvdXNseSBjcmVhdGVkIHdpdGgKICogcHNfc2hhZGluZy4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hmaWxsKCRwc2RvYywgaW50ICRzaGFkaW5naWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2hmaWxsKCRwc2RvYywgJHNoYWRpbmdpZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0IGEgdGV4dCBhdCB0aGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIGJlIG91dHB1dC4KICogQHBhcmFtIGZsb2F0ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJveCBzdXJyb3VuZGluZyB0aGUgdGV4dC4KICogQHBhcmFtIGZsb2F0ICR5IHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJveCBzdXJyb3VuZGluZyB0aGUgdGV4dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hvd194eSgkcHNkb2MsIHN0cmluZyAkdGV4dCwgZmxvYXQgJHgsIGZsb2F0ICR5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3Nob3dfeHkoJHBzZG9jLCAkdGV4dCwgJHgsICR5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gaW50ICRsZW4KICogQHBhcmFtIGZsb2F0ICR4Y29vcgogKiBAcGFyYW0gZmxvYXQgJHljb29yCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3Nob3dfeHkyKCRwc2RvYywgc3RyaW5nICR0ZXh0LCBpbnQgJGxlbiwgZmxvYXQgJHhjb29yLCBmbG9hdCAkeWNvb3IpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc2hvd194eTIoJHBzZG9jLCAkdGV4dCwgJGxlbiwgJHhjb29yLCAkeWNvb3IpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE91dHB1dCBhIHRleHQgYXQgdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi4gVGhlIHRleHQgcG9zaXRpb24gY2FuIGJlIHNldAogKiBieSBzdG9yaW5nIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGludG8gdGhlIHZhbHVlcyB0ZXh0eAogKiBhbmQgdGV4dHkgd2l0aCB0aGUgZnVuY3Rpb24KICogcHNfc2V0X3ZhbHVlLiBUaGUgZnVuY3Rpb24gd2lsbCBpc3N1ZSBhbgogKiBlcnJvciBpZiBhIGZvbnQgd2FzIG5vdCBzZXQgYmVmb3JlIHdpdGggcHNfc2V0Zm9udC4KICoKICogcHNfc2hvdyBldmFsdWF0ZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFuZCB2YWx1ZXMKICogYXMgc2V0IGJ5IHBzX3NldF9wYXJhbWV0ZXIgYW5kCiAqIHBzX3NldF92YWx1ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IFRoZSB0ZXh0IHRvIGJlIG91dHB1dC4KICogQHRocm93cyBQc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNfc2hvdygkcHNkb2MsIHN0cmluZyAkdGV4dCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zaG93KCRwc2RvYywgJHRleHQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE91dHB1dCB0ZXh0IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiBEbyBub3QgcHJpbnQgbW9yZSB0aGFuIGxlbiBjaGFyYWN0ZXJzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgVGhlIHRleHQgdG8gYmUgb3V0cHV0LgogKiBAcGFyYW0gaW50ICRsZW4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHJpbnQuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3Nob3cyKCRwc2RvYywgc3RyaW5nICR0ZXh0LCBpbnQgJGxlbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc19zaG93MigkcHNkb2MsICR0ZXh0LCAkbGVuKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBEcmF3cyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoIHByZXZpb3VzbHkgY2FsbGVkIGRyYXdpbmcgZnVuY3Rpb25zIGxpa2UKICogcHNfbGluZXRvLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBzZG9jIFJlc291cmNlIGlkZW50aWZpZXIgb2YgdGhlIHBvc3RzY3JpcHQgZmlsZQogKiBhcyByZXR1cm5lZCBieSBwc19uZXcuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3N0cm9rZSgkcHNkb2MpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNfc3Ryb2tlKCRwc2RvYyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3V0cHV0IHRoZSBnbHlwaCBhdCBwb3NpdGlvbiBvcmQgaW4gdGhlIGZvbnQKICogZW5jb2RpbmcgdmVjdG9yIG9mIHRoZSBjdXJyZW50IGZvbnQuIFRoZSBmb250IGVuY29kaW5nIGZvciBhIGZvbnQgY2FuIGJlCiAqIHNldCB3aGVuIGxvYWRpbmcgdGhlIGZvbnQgd2l0aCBwc19maW5kZm9udC4KICoKICogQHBhcmFtIHJlc291cmNlICRwc2RvYyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwb3N0c2NyaXB0IGZpbGUKICogYXMgcmV0dXJuZWQgYnkgcHNfbmV3LgogKiBAcGFyYW0gaW50ICRvcmQgVGhlIHBvc2l0aW9uIG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBlbmNvZGluZyB2ZWN0b3IuCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3N5bWJvbCgkcHNkb2MsIGludCAkb3JkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzX3N5bWJvbCgkcHNkb2MsICRvcmQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFNldHMgYSBuZXcgaW5pdGlhbCBwb2ludCBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcHNkb2MgUmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUgcG9zdHNjcmlwdCBmaWxlCiAqIGFzIHJldHVybmVkIGJ5IHBzX25ldy4KICogQHBhcmFtIGZsb2F0ICR4IHgtY29vcmRpbmF0ZSBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2xhdGVkIGNvb3JkaW5hdGUgc3lzdGVtLgogKiBAcGFyYW0gZmxvYXQgJHkgeS1jb29yZGluYXRlIG9mIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zbGF0ZWQgY29vcmRpbmF0ZSBzeXN0ZW0uCiAqIEB0aHJvd3MgUHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzX3RyYW5zbGF0ZSgkcHNkb2MsIGZsb2F0ICR4LCBmbG9hdCAkeSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc190cmFuc2xhdGUoJHBzZG9jLCAkeCwgJHkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/pspell.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xQc3BlbGxFeGNlcHRpb247CgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgVGhlIGFkZGVkIHdvcmQuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfYWRkX3RvX3BlcnNvbmFsKGludCAkZGljdGlvbmFyeV9saW5rLCBzdHJpbmcgJHdvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2FkZF90b19wZXJzb25hbCgkZGljdGlvbmFyeV9saW5rLCAkd29yZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gc3RyaW5nICR3b3JkIFRoZSBhZGRlZCB3b3JkLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2FkZF90b19zZXNzaW9uKGludCAkZGljdGlvbmFyeV9saW5rLCBzdHJpbmcgJHdvcmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2FkZF90b19zZXNzaW9uKCRkaWN0aW9uYXJ5X2xpbmssICR3b3JkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY2xlYXJfc2Vzc2lvbihpbnQgJGRpY3Rpb25hcnlfbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY2xlYXJfc2Vzc2lvbigkZGljdGlvbmFyeV9saW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlIGEgY29uZmlnIHVzZWQgdG8gb3BlbiBhIGRpY3Rpb25hcnkuCiAqCiAqIHBzcGVsbF9jb25maWdfY3JlYXRlIGhhcyBhIHZlcnkgc2ltaWxhciBzeW50YXggdG8KICogcHNwZWxsX25ldy4gSW4gZmFjdCwgdXNpbmcKICogcHNwZWxsX2NvbmZpZ19jcmVhdGUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkKICogcHNwZWxsX25ld19jb25maWcgd2lsbCBwcm9kdWNlIHRoZSBleGFjdCBzYW1lIHJlc3VsdC4KICogSG93ZXZlciwgYWZ0ZXIgY3JlYXRpbmcgYSBuZXcgY29uZmlnLCB5b3UgY2FuIGFsc28gdXNlCiAqIHBzcGVsbF9jb25maWdfKiBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcKICogcHNwZWxsX25ld19jb25maWcgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc29tZQogKiBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5LgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIGNoZWNrIG91dCBpbmxpbmUgbWFudWFsIHBzcGVsbAogKiB3ZWJzaXRlOmh0dHA6Ly9hc3BlbGwubmV0Ly4KICoKICogQHBhcmFtIHN0cmluZyAkbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIHBhcmFtZXRlciBpcyB0aGUgbGFuZ3VhZ2UgY29kZSB3aGljaCBjb25zaXN0cyBvZiB0aGUKICogdHdvIGxldHRlciBJU08gNjM5IGxhbmd1YWdlIGNvZGUgYW5kIGFuIG9wdGlvbmFsIHR3byBsZXR0ZXIgSVNPCiAqIDMxNjYgY291bnRyeSBjb2RlIGFmdGVyIGEgZGFzaCBvciB1bmRlcnNjb3JlLgogKiBAcGFyYW0gc3RyaW5nICRzcGVsbGluZyBUaGUgc3BlbGxpbmcgcGFyYW1ldGVyIGlzIHRoZSByZXF1ZXN0ZWQgc3BlbGxpbmcgZm9yIGxhbmd1YWdlcwogKiB3aXRoIG1vcmUgdGhhbiBvbmUgc3BlbGxpbmcgc3VjaCBhcyBFbmdsaXNoLiBLbm93biB2YWx1ZXMgYXJlCiAqICdhbWVyaWNhbicsICdicml0aXNoJywgYW5kICdjYW5hZGlhbicuCiAqIEBwYXJhbSBzdHJpbmcgJGphcmdvbiBUaGUgamFyZ29uIHBhcmFtZXRlciBjb250YWlucyBleHRyYSBpbmZvcm1hdGlvbiB0byBkaXN0aW5ndWlzaAogKiB0d28gZGlmZmVyZW50IHdvcmRzIGxpc3RzIHRoYXQgaGF2ZSB0aGUgc2FtZSBsYW5ndWFnZSBhbmQKICogc3BlbGxpbmcgcGFyYW1ldGVycy4KICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIGVuY29kaW5nIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdGhhdCB3b3JkcyBhcmUgZXhwZWN0ZWQgdG8KICogYmUgaW4uICBWYWxpZCB2YWx1ZXMgYXJlICd1dGYtOCcsICdpc284ODU5LSonLCAna29pOC1yJywKICogJ3Zpc2NpaScsICdjcDEyNTInLCAnbWFjaGluZSB1bnNpZ25lZCAxNicsICdtYWNoaW5lIHVuc2lnbmVkCiAqIDMyJy4gVGhpcyBwYXJhbWV0ZXIgaXMgbGFyZ2VseSB1bnRlc3RlZCwgc28gYmUgY2FyZWZ1bCB3aGVuCiAqIHVzaW5nLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgcHNwZWxsIGNvbmZpZyBpZGVudGlmaWVyLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19jcmVhdGUoc3RyaW5nICRsYW5ndWFnZSwgc3RyaW5nICRzcGVsbGluZyA9IG51bGwsIHN0cmluZyAkamFyZ29uID0gbnVsbCwgc3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRlbmNvZGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24sICRlbmNvZGluZyk7CiAgICB9IGVsc2VpZiAoJGphcmdvbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24pOwogICAgfSBlbHNlaWYgKCRzcGVsbGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19jcmVhdGUoJGxhbmd1YWdlLCAkc3BlbGxpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfY3JlYXRlKCRsYW5ndWFnZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBpcwogKiBjdXJyZW50bHkgbm90IGRvY3VtZW50ZWQ7IG9ubHkgaXRzIGFyZ3VtZW50IGxpc3QgaXMgYXZhaWxhYmxlLgogKgogKgogKiBAcGFyYW0gaW50ICRjb25mCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeQogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19kYXRhX2RpcihpbnQgJGNvbmYsIHN0cmluZyAkZGlyZWN0b3J5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfZGF0YV9kaXIoJGNvbmYsICRkaXJlY3RvcnkpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzCiAqIGN1cnJlbnRseSBub3QgZG9jdW1lbnRlZDsgb25seSBpdHMgYXJndW1lbnQgbGlzdCBpcyBhdmFpbGFibGUuCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGNvbmYKICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5CiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX2RpY3RfZGlyKGludCAkY29uZiwgc3RyaW5nICRkaXJlY3RvcnkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19kaWN0X2RpcigkY29uZiwgJGRpcmVjdG9yeSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gaW50ICRuIFdvcmRzIGxlc3MgdGhhbiBuIGNoYXJhY3RlcnMgd2lsbCBiZSBza2lwcGVkLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19pZ25vcmUoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGludCAkbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX2lnbm9yZSgkZGljdGlvbmFyeV9saW5rLCAkbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gaW50ICRtb2RlIFRoZSBtb2RlIHBhcmFtZXRlciBpcyB0aGUgbW9kZSBpbiB3aGljaCBzcGVsbGNoZWNrZXIgd2lsbCB3b3JrLgogKiBUaGVyZSBhcmUgc2V2ZXJhbCBtb2RlcyBhdmFpbGFibGU6CiAqCiAqCiAqCiAqIFBTUEVMTF9GQVNUIC0gRmFzdCBtb2RlIChsZWFzdCBudW1iZXIgb2YKICogc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqCiAqIFBTUEVMTF9OT1JNQUwgLSBOb3JtYWwgbW9kZSAobW9yZSBzdWdnZXN0aW9ucykKICoKICoKICoKICoKICogUFNQRUxMX0JBRF9TUEVMTEVSUyAtIFNsb3cgbW9kZSAoYSBsb3Qgb2YKICogc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX21vZGUoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX21vZGUoJGRpY3Rpb25hcnlfbGluaywgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgYSBmaWxlIHRoYXQgY29udGFpbnMgcGVyc29uYWwgd29yZGxpc3QuIFRoZSBwZXJzb25hbCB3b3JkbGlzdCB3aWxsIGJlCiAqIGxvYWRlZCBhbmQgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgb25lIGFmdGVyIHlvdSBjYWxsCiAqIHBzcGVsbF9uZXdfY29uZmlnLiBUaGUgZmlsZSBpcyBhbHNvIHRoZSBmaWxlIHdoZXJlCiAqIHBzcGVsbF9zYXZlX3dvcmRsaXN0IHdpbGwgc2F2ZSBwZXJzb25hbCB3b3JkbGlzdCB0by4KICoKICogcHNwZWxsX2NvbmZpZ19wZXJzb25hbCBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIHBlcnNvbmFsIHdvcmRsaXN0LiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgogKiBUaGUgZmlsZSBzaG91bGQgYmUgd3JpdGFibGUgYnkgd2hvZXZlciBQSFAgcnVucyBhcyAoZS5nLiBub2JvZHkpLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19wZXJzb25hbChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRmaWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfcGVyc29uYWwoJGRpY3Rpb25hcnlfbGluaywgJGZpbGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXQgYSBmaWxlIHRoYXQgY29udGFpbnMgcmVwbGFjZW1lbnQgcGFpcnMuCiAqCiAqIFRoZSByZXBsYWNlbWVudCBwYWlycyBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mIHRoZSBzcGVsbGNoZWNrZXIuIFdoZW4gYSB3b3JkCiAqIGlzIG1pc3NwZWxsZWQsIGFuZCBhIHByb3BlciBzdWdnZXN0aW9uIHdhcyBub3QgZm91bmQgaW4gdGhlIGxpc3QsCiAqIHBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhCiAqIHJlcGxhY2VtZW50IHBhaXIgYW5kIHRoZW4gcHNwZWxsX3NhdmVfd29yZGxpc3QgdG8KICogc2F2ZSB0aGUgd29yZGxpc3QgYWxvbmcgd2l0aCB0aGUgcmVwbGFjZW1lbnQgcGFpcnMuCiAqCiAqIHBzcGVsbF9jb25maWdfcmVwbCBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIGZpbGUgc2hvdWxkIGJlIHdyaXRhYmxlIGJ5IHdob2V2ZXIgUEhQIHJ1bnMgYXMgKGUuZy4gbm9ib2R5KS4KICogQHRocm93cyBQc3BlbGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzcGVsbF9jb25maWdfcmVwbChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRmaWxlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHBzcGVsbF9jb25maWdfcmVwbCgkZGljdGlvbmFyeV9saW5rLCAkZmlsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHJ1bi10b2dldGhlciB3b3JkcyB3aWxsIGJlIHRyZWF0ZWQgYXMKICogbGVnYWwgY29tcG91bmRzLiAgVGhhdCBpcywgInRoZWNhdCIgd2lsbCBiZSBhIGxlZ2FsIGNvbXBvdW5kLCBhbHRob3VnaAogKiB0aGVyZSBzaG91bGQgYmUgYSBzcGFjZSBiZXR3ZWVuIHRoZSB0d28gd29yZHMuIENoYW5naW5nIHRoaXMgc2V0dGluZyBvbmx5CiAqIGFmZmVjdHMgdGhlIHJlc3VsdHMgcmV0dXJuZWQgYnkgcHNwZWxsX2NoZWNrOwogKiBwc3BlbGxfc3VnZ2VzdCB3aWxsIHN0aWxsIHJldHVybiBzdWdnZXN0aW9ucy4KICoKICogcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlciBzaG91bGQgYmUgdXNlZCBvbiBhIGNvbmZpZwogKiBiZWZvcmUgY2FsbGluZyBwc3BlbGxfbmV3X2NvbmZpZy4KICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rCiAqIEBwYXJhbSBib29sICRmbGFnIFRSVUUgaWYgcnVuLXRvZ2V0aGVyIHdvcmRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGxlZ2FsIGNvbXBvdW5kcywKICogRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcihpbnQgJGRpY3Rpb25hcnlfbGluaywgYm9vbCAkZmxhZyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyKCRkaWN0aW9uYXJ5X2xpbmssICRmbGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwgZGV0ZXJtaW5lcyB3aGV0aGVyCiAqIHBzcGVsbF9zYXZlX3dvcmRsaXN0IHdpbGwgc2F2ZSB0aGUgcmVwbGFjZW1lbnQgcGFpcnMKICogYWxvbmcgd2l0aCB0aGUgd29yZGxpc3QuIFVzdWFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbgogKiBiZWNhdXNlIGlmIHBzcGVsbF9jb25maWdfcmVwbCBpcyB1c2VkLCB0aGUKICogcmVwbGFjZW1lbnQgcGFpcnMgd2lsbCBiZSBzYXZlZCBieQogKiBwc3BlbGxfc2F2ZV93b3JkbGlzdCBhbnl3YXksIGFuZCBpZiBpdCBpcyBub3QsCiAqIHRoZSByZXBsYWNlbWVudCBwYWlycyB3aWxsIG5vdCBiZSBzYXZlZC4KICoKICogcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwgc2hvdWxkIGJlIHVzZWQgb24gYSBjb25maWcKICogYmVmb3JlIGNhbGxpbmcgcHNwZWxsX25ld19jb25maWcuCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluawogKiBAcGFyYW0gYm9vbCAkZmxhZyBUUlVFIGlmIHJlcGxhY2VtZW50IHBhaXJzIHNob3VsZCBiZSBzYXZlZCwgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwoaW50ICRkaWN0aW9uYXJ5X2xpbmssIGJvb2wgJGZsYWcpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwoJGRpY3Rpb25hcnlfbGluaywgJGZsYWcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRjb25maWcgVGhlIGNvbmZpZyBwYXJhbWV0ZXIgaXMgdGhlIG9uZSByZXR1cm5lZCBieQogKiBwc3BlbGxfY29uZmlnX2NyZWF0ZSB3aGVuIHRoZSBjb25maWcgd2FzIGNyZWF0ZWQuCiAqIEByZXR1cm4gaW50IFJldHVybnMgYSBkaWN0aW9uYXJ5IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFBzcGVsbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHNwZWxsX25ld19jb25maWcoaW50ICRjb25maWcpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfbmV3X2NvbmZpZygkY29uZmlnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBwc3BlbGxfbmV3IG9wZW5zIHVwIGEgbmV3IGRpY3Rpb25hcnkgYW5kCiAqIHJldHVybnMgdGhlIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgcHNwZWxsCiAqIGZ1bmN0aW9ucy4KICoKICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCBjaGVjayBvdXQgaW5saW5lIG1hbnVhbCBwc3BlbGwKICogd2Vic2l0ZTpodHRwOi8vYXNwZWxsLm5ldC8uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBwYXJhbWV0ZXIgaXMgdGhlIGxhbmd1YWdlIGNvZGUgd2hpY2ggY29uc2lzdHMgb2YgdGhlCiAqIHR3byBsZXR0ZXIgSVNPIDYzOSBsYW5ndWFnZSBjb2RlIGFuZCBhbiBvcHRpb25hbCB0d28gbGV0dGVyIElTTwogKiAzMTY2IGNvdW50cnkgY29kZSBhZnRlciBhIGRhc2ggb3IgdW5kZXJzY29yZS4KICogQHBhcmFtIHN0cmluZyAkc3BlbGxpbmcgVGhlIHNwZWxsaW5nIHBhcmFtZXRlciBpcyB0aGUgcmVxdWVzdGVkIHNwZWxsaW5nIGZvciBsYW5ndWFnZXMKICogd2l0aCBtb3JlIHRoYW4gb25lIHNwZWxsaW5nIHN1Y2ggYXMgRW5nbGlzaC4gS25vd24gdmFsdWVzIGFyZQogKiAnYW1lcmljYW4nLCAnYnJpdGlzaCcsIGFuZCAnY2FuYWRpYW4nLgogKiBAcGFyYW0gc3RyaW5nICRqYXJnb24gVGhlIGphcmdvbiBwYXJhbWV0ZXIgY29udGFpbnMgZXh0cmEgaW5mb3JtYXRpb24gdG8gZGlzdGluZ3Vpc2gKICogdHdvIGRpZmZlcmVudCB3b3JkcyBsaXN0cyB0aGF0IGhhdmUgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kCiAqIHNwZWxsaW5nIHBhcmFtZXRlcnMuCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBlbmNvZGluZyBwYXJhbWV0ZXIgaXMgdGhlIGVuY29kaW5nIHRoYXQgd29yZHMgYXJlIGV4cGVjdGVkIHRvCiAqIGJlIGluLiAgVmFsaWQgdmFsdWVzIGFyZSAndXRmLTgnLCAnaXNvODg1OS0qJywgJ2tvaTgtcicsCiAqICd2aXNjaWknLCAnY3AxMjUyJywgJ21hY2hpbmUgdW5zaWduZWQgMTYnLCAnbWFjaGluZSB1bnNpZ25lZAogKiAzMicuIFRoaXMgcGFyYW1ldGVyIGlzIGxhcmdlbHkgdW50ZXN0ZWQsIHNvIGJlIGNhcmVmdWwgd2hlbgogKiB1c2luZy4KICogQHBhcmFtIGludCAkbW9kZSBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgdGhlIG1vZGUgaW4gd2hpY2ggc3BlbGxjaGVja2VyIHdpbGwgd29yay4KICogVGhlcmUgYXJlIHNldmVyYWwgbW9kZXMgYXZhaWxhYmxlOgogKgogKgogKgogKiBQU1BFTExfRkFTVCAtIEZhc3QgbW9kZSAobGVhc3QgbnVtYmVyIG9mCiAqIHN1Z2dlc3Rpb25zKQogKgogKgogKgogKgogKiBQU1BFTExfTk9STUFMIC0gTm9ybWFsIG1vZGUgKG1vcmUgc3VnZ2VzdGlvbnMpCiAqCiAqCiAqCiAqCiAqIFBTUEVMTF9CQURfU1BFTExFUlMgLSBTbG93IG1vZGUgKGEgbG90IG9mCiAqIHN1Z2dlc3Rpb25zKQogKgogKgogKgogKgogKiBQU1BFTExfUlVOX1RPR0VUSEVSIC0gQ29uc2lkZXIgcnVuLXRvZ2V0aGVyIHdvcmRzCiAqIGFzIGxlZ2FsIGNvbXBvdW5kcy4gIFRoYXQgaXMsICJ0aGVjYXQiIHdpbGwgYmUgYSBsZWdhbCBjb21wb3VuZCwKICogYWx0aG91Z2ggdGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYmV0d2VlbiB0aGUgdHdvIHdvcmRzLiBDaGFuZ2luZyB0aGlzCiAqIHNldHRpbmcgb25seSBhZmZlY3RzIHRoZSByZXN1bHRzIHJldHVybmVkIGJ5CiAqIHBzcGVsbF9jaGVjazsgcHNwZWxsX3N1Z2dlc3QKICogd2lsbCBzdGlsbCByZXR1cm4gc3VnZ2VzdGlvbnMuCiAqCiAqCiAqCiAqIE1vZGUgaXMgYSBiaXRtYXNrIGNvbnN0cnVjdGVkIGZyb20gZGlmZmVyZW50IGNvbnN0YW50cyBsaXN0ZWQgYWJvdmUuCiAqIEhvd2V2ZXIsIFBTUEVMTF9GQVNULAogKiBQU1BFTExfTk9STUFMIGFuZAogKiBQU1BFTExfQkFEX1NQRUxMRVJTIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIHNvIHlvdQogKiBzaG91bGQgc2VsZWN0IG9ubHkgb25lIG9mIHRoZW0uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfbmV3KHN0cmluZyAkbGFuZ3VhZ2UsIHN0cmluZyAkc3BlbGxpbmcgPSBudWxsLCBzdHJpbmcgJGphcmdvbiA9IG51bGwsIHN0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBpbnQgJG1vZGUgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbW9kZSAhPT0gMCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UsICRzcGVsbGluZywgJGphcmdvbiwgJGVuY29kaW5nLCAkbW9kZSk7CiAgICB9IGVsc2VpZiAoJGVuY29kaW5nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxwc3BlbGxfbmV3KCRsYW5ndWFnZSwgJHNwZWxsaW5nLCAkamFyZ29uLCAkZW5jb2RpbmcpOwogICAgfSBlbHNlaWYgKCRqYXJnb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHBzcGVsbF9uZXcoJGxhbmd1YWdlLCAkc3BlbGxpbmcsICRqYXJnb24pOwogICAgfSBlbHNlaWYgKCRzcGVsbGluZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UsICRzcGVsbGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccHNwZWxsX25ldygkbGFuZ3VhZ2UpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUHNwZWxsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnlfbGluayBBIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIG9wZW5lZCB3aXRoCiAqIHBzcGVsbF9uZXdfcGVyc29uYWwuCiAqIEB0aHJvd3MgUHNwZWxsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBwc3BlbGxfc2F2ZV93b3JkbGlzdChpbnQgJGRpY3Rpb25hcnlfbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwc3BlbGxfc2F2ZV93b3JkbGlzdCgkZGljdGlvbmFyeV9saW5rKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFBzcGVsbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZGljdGlvbmFyeV9saW5rIEEgZGljdGlvbmFyeSBsaW5rIGlkZW50aWZpZXIsIG9wZW5lZCB3aXRoCiAqIHBzcGVsbF9uZXdfcGVyc29uYWwKICogQHBhcmFtIHN0cmluZyAkbWlzc3BlbGxlZCBUaGUgbWlzc3BlbGxlZCB3b3JkLgogKiBAcGFyYW0gc3RyaW5nICRjb3JyZWN0IFRoZSBmaXhlZCBzcGVsbGluZyBmb3IgdGhlIG1pc3NwZWxsZWQgd29yZC4KICogQHRocm93cyBQc3BlbGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudChpbnQgJGRpY3Rpb25hcnlfbGluaywgc3RyaW5nICRtaXNzcGVsbGVkLCBzdHJpbmcgJGNvcnJlY3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50KCRkaWN0aW9uYXJ5X2xpbmssICRtaXNzcGVsbGVkLCAkY29ycmVjdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBQc3BlbGxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/readline.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xSZWFkbGluZUV4Y2VwdGlvbjsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBsaW5lIHRvIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KICoKICogQHBhcmFtIHN0cmluZyAkbGluZSBUaGUgbGluZSB0byBiZSBhZGRlZCBpbiB0aGUgaGlzdG9yeS4KICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfYWRkX2hpc3Rvcnkoc3RyaW5nICRsaW5lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX2FkZF9oaXN0b3J5KCRsaW5lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJlYWRsaW5lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHVwIGEgcmVhZGxpbmUgY2FsbGJhY2sgaW50ZXJmYWNlIHRoZW4gcHJpbnRzCiAqIHByb21wdCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJucy4KICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHR3aWNlIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIHByZXZpb3VzCiAqIGNhbGxiYWNrIGludGVyZmFjZSB3aWxsIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnZlbmllbnRseSBvdmVyd3JpdGUgdGhlIG9sZAogKiBpbnRlcmZhY2UuCiAqCiAqIFRoZSBjYWxsYmFjayBmZWF0dXJlIGlzIHVzZWZ1bCB3aGVuIGNvbWJpbmVkIHdpdGgKICogc3RyZWFtX3NlbGVjdCBhcyBpdCBhbGxvd3MgaW50ZXJsZWF2aW5nIG9mIElPIGFuZAogKiB1c2VyIGlucHV0LCB1bmxpa2UgcmVhZGxpbmUuCiAqCiAqCiAqIFJlYWRsaW5lIENhbGxiYWNrIEludGVyZmFjZSBFeGFtcGxlCiAqCiAqIDEwKSB7CiAqICRwcm9tcHRpbmcgPSBmYWxzZTsKICogcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUoKTsKICogfSBlbHNlIHsKICogcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKCJbJGNdIEVudGVyIHNvbWV0aGluZzogIiwgJ3JsX2NhbGxiYWNrJyk7CiAqIH0KICogfQogKgogKiAkYyA9IDE7CiAqICRwcm9tcHRpbmcgPSB0cnVlOwogKgogKiByZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwoIlskY10gRW50ZXIgc29tZXRoaW5nOiAiLCAncmxfY2FsbGJhY2snKTsKICoKICogd2hpbGUgKCRwcm9tcHRpbmcpIHsKICogJHcgPSBOVUxMOwogKiAkZSA9IE5VTEw7CiAqICRuID0gc3RyZWFtX3NlbGVjdCgkciA9IGFycmF5KFNURElOKSwgJHcsICRlLCBudWxsKTsKICogaWYgKCRuICYmIGluX2FycmF5KFNURElOLCAkcikpIHsKICogLy8gcmVhZCBhIGNoYXJhY3Rlciwgd2lsbCBjYWxsIHRoZSBjYWxsYmFjayB3aGVuIGEgbmV3bGluZSBpcyBlbnRlcmVkCiAqIHJlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhcigpOwogKiB9CiAqIH0KICoKICogZWNobyAiUHJvbXB0aW5nIGRpc2FibGVkLiBBbGwgZG9uZS5cbiI7CiAqID8+CiAqIF1dPgogKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRwcm9tcHQgVGhlIHByb21wdCBtZXNzYWdlLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyBvbmUgcGFyYW1ldGVyOyB0aGUKICogdXNlciBpbnB1dCByZXR1cm5lZC4KICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKHN0cmluZyAkcHJvbXB0LCBjYWxsYWJsZSAkY2FsbGJhY2spOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKCRwcm9tcHQsICRjYWxsYmFjayk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBSZWFkbGluZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4KICoKICogQHRocm93cyBSZWFkbGluZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2xlYXJfaGlzdG9yeSgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccmVhZGxpbmVfY2xlYXJfaGlzdG9yeSgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY29tcGxldGlvbiBmdW5jdGlvbi4gVGhpcyBpcyB0aGUgc2FtZSBraW5kIG9mCiAqIGZ1bmN0aW9uYWxpdHkgeW91J2QgZ2V0IGlmIHlvdSBoaXQgeW91ciB0YWIga2V5IHdoaWxlIHVzaW5nIEJhc2guCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkZnVuY3Rpb24gWW91IG11c3Qgc3VwcGx5IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgYQogKiBwYXJ0aWFsIGNvbW1hbmQgbGluZSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBwb3NzaWJsZSBtYXRjaGVzLgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uKGNhbGxhYmxlICRmdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uKCRmdW5jdGlvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBSZWFkbGluZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiByZWFkcyBhIGNvbW1hbmQgaGlzdG9yeSBmcm9tIGEgZmlsZS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZW5hbWUgY29udGFpbmluZyB0aGUgY29tbWFuZCBoaXN0b3J5LgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV9yZWFkX2hpc3Rvcnkoc3RyaW5nICRmaWxlbmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZmlsZW5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX3JlYWRfaGlzdG9yeSgkZmlsZW5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHJlYWRsaW5lX3JlYWRfaGlzdG9yeSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBjb21tYW5kIGhpc3RvcnkgdG8gYSBmaWxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBzYXZlZCBmaWxlLgogKiBAdGhyb3dzIFJlYWRsaW5lRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiByZWFkbGluZV93cml0ZV9oaXN0b3J5KHN0cmluZyAkZmlsZW5hbWUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZpbGVuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkbGluZV93cml0ZV9oaXN0b3J5KCRmaWxlbmFtZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBccmVhZGxpbmVfd3JpdGVfaGlzdG9yeSgpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgUmVhZGxpbmVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/rpminfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xScG1pbmZvRXhjZXB0aW9uOwoKLyoqCiAqIEFkZCBhbiBhZGRpdGlvbmFsIHJldHJpZXZlZCB0YWcgaW4gc3Vic2VxdWVudCBxdWVyaWVzLgogKgogKiBAcGFyYW0gaW50ICR0YWcgT25lIG9mIFJQTVRBR18qIGNvbnN0YW50LCBzZWUgdGhlIHJwbWluZm8gY29uc3RhbnRzIHBhZ2UuCiAqIEB0aHJvd3MgUnBtaW5mb0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcnBtYWRkdGFnKGludCAkdGFnKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJwbWFkZHRhZygkdGFnKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJwbWluZm9FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/rrd.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xScmRFeGNlcHRpb247CgovKioKICogQ3JlYXRlcyB0aGUgcmRkIGRhdGFiYXNlIGZpbGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGVuYW1lIGZvciBuZXdseSBjcmVhdGVkIHJyZCBmaWxlLgogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgT3B0aW9ucyBmb3IgcnJkIGNyZWF0ZSAtIGxpc3Qgb2Ygc3RyaW5ncy4gU2VlIG1hbiBwYWdlIG9mIHJyZCBjcmVhdGUKICogZm9yIHdob2xlIGxpc3Qgb2Ygb3B0aW9ucy4KICogQHRocm93cyBScmRFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJyZF9jcmVhdGUoc3RyaW5nICRmaWxlbmFtZSwgYXJyYXkgJG9wdGlvbnMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBccnJkX2NyZWF0ZSgkZmlsZW5hbWUsICRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFJyZEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTZW1FeGNlcHRpb247CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIG1lc3NhZ2UgcXVldWUga2V5IGV4aXN0cy4KICoKICogQHBhcmFtIGludCAka2V5IFF1ZXVlIGtleS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19xdWV1ZV9leGlzdHMoaW50ICRrZXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbXNnX3F1ZXVlX2V4aXN0cygka2V5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNnX3JlY2VpdmUgd2lsbCByZWNlaXZlIHRoZSBmaXJzdCBtZXNzYWdlIGZyb20gdGhlCiAqIHNwZWNpZmllZCBxdWV1ZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgYnkKICogZGVzaXJlZG1zZ3R5cGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVldWUgTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogQHBhcmFtIGludCAkZGVzaXJlZG1zZ3R5cGUgSWYgZGVzaXJlZG1zZ3R5cGUgaXMgMCwgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgZnJvbnQKICogb2YgdGhlIHF1ZXVlIGlzIHJldHVybmVkLiBJZiBkZXNpcmVkbXNndHlwZSBpcwogKiBncmVhdGVyIHRoYW4gMCwgdGhlbiB0aGUgZmlyc3QgbWVzc2FnZSBvZiB0aGF0IHR5cGUgaXMgcmV0dXJuZWQuCiAqIElmIGRlc2lyZWRtc2d0eXBlIGlzIGxlc3MgdGhhbiAwLCB0aGUgZmlyc3QKICogbWVzc2FnZSBvbiB0aGUgcXVldWUgd2l0aCBhIHR5cGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQogKiBhYnNvbHV0ZSB2YWx1ZSBvZiBkZXNpcmVkbXNndHlwZSB3aWxsIGJlIHJlYWQuCiAqIElmIG5vIG1lc3NhZ2VzIG1hdGNoIHRoZSBjcml0ZXJpYSwgeW91ciBzY3JpcHQgd2lsbCB3YWl0IHVudGlsIGEgc3VpdGFibGUKICogbWVzc2FnZSBhcnJpdmVzIG9uIHRoZSBxdWV1ZS4gIFlvdSBjYW4gcHJldmVudCB0aGUgc2NyaXB0IGZyb20gYmxvY2tpbmcKICogYnkgc3BlY2lmeWluZyBNU0dfSVBDX05PV0FJVCBpbiB0aGUKICogZmxhZ3MgcGFyYW1ldGVyLgogKiBAcGFyYW0gaW50fG51bGwgJG1zZ3R5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQgd2lsbCBiZSBzdG9yZWQgaW4gdGhpcwogKiBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnQgJG1heHNpemUgVGhlIG1heGltdW0gc2l6ZSBvZiBtZXNzYWdlIHRvIGJlIGFjY2VwdGVkIGlzIHNwZWNpZmllZCBieSB0aGUKICogbWF4c2l6ZTsgaWYgdGhlIG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIGlzIGxhcmdlcgogKiB0aGFuIHRoaXMgc2l6ZSB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsICh1bmxlc3MgeW91IHNldAogKiBmbGFncyBhcyBkZXNjcmliZWQgYmVsb3cpLgogKiBAcGFyYW0gbWl4ZWQgJG1lc3NhZ2UgVGhlIHJlY2VpdmVkIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQgaW4gbWVzc2FnZSwKICogdW5sZXNzIHRoZXJlIHdlcmUgZXJyb3JzIHJlY2VpdmluZyB0aGUgbWVzc2FnZS4KICogQHBhcmFtIGJvb2wgJHVuc2VyaWFsaXplIElmIHNldCB0bwogKiBUUlVFLCB0aGUgbWVzc2FnZSBpcyB0cmVhdGVkIGFzIHRob3VnaCBpdCB3YXMgc2VyaWFsaXplZCB1c2luZyB0aGUKICogc2FtZSBtZWNoYW5pc20gYXMgdGhlIHNlc3Npb24gbW9kdWxlLiBUaGUgbWVzc2FnZSB3aWxsIGJlIHVuc2VyaWFsaXplZAogKiBhbmQgdGhlbiByZXR1cm5lZCB0byB5b3VyIHNjcmlwdC4gVGhpcyBhbGxvd3MgeW91IHRvIGVhc2lseSByZWNlaXZlCiAqIGFycmF5cyBvciBjb21wbGV4IG9iamVjdCBzdHJ1Y3R1cmVzIGZyb20gb3RoZXIgUEhQIHNjcmlwdHMsIG9yIGlmIHlvdQogKiBhcmUgdXNpbmcgdGhlIFdERFggc2VyaWFsaXplciwgZnJvbSBhbnkgV0REWCBjb21wYXRpYmxlIHNvdXJjZS4KICoKICogSWYgdW5zZXJpYWxpemUgaXMgRkFMU0UsIHRoZSBtZXNzYWdlIHdpbGwgYmUKICogcmV0dXJuZWQgYXMgYSBiaW5hcnktc2FmZSBzdHJpbmcuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFRoZSBvcHRpb25hbCBmbGFncyBhbGxvd3MgeW91IHRvIHBhc3MgZmxhZ3MgdG8gdGhlCiAqIGxvdy1sZXZlbCBtc2dyY3Ygc3lzdGVtIGNhbGwuICBJdCBkZWZhdWx0cyB0byAwLCBidXQgeW91IG1heSBzcGVjaWZ5IG9uZQogKiBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIChieSBhZGRpbmcgb3IgT1JpbmcgdGhlbSB0b2dldGhlcikuCiAqCiAqIEZsYWcgdmFsdWVzIGZvciBtc2dfcmVjZWl2ZQogKgogKgogKgogKiBNU0dfSVBDX05PV0FJVAogKiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgb2YgdGhlCiAqIGRlc2lyZWRtc2d0eXBlLCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIGRvIG5vdAogKiB3YWl0LiAgVGhlIGZ1bmN0aW9uIHdpbGwgZmFpbCBhbmQgcmV0dXJuIGFuIGludGVnZXIgdmFsdWUKICogY29ycmVzcG9uZGluZyB0byBNU0dfRU5PTVNHLgogKgogKgogKgogKiBNU0dfRVhDRVBUCiAqIFVzaW5nIHRoaXMgZmxhZyBpbiBjb21iaW5hdGlvbiB3aXRoIGEKICogZGVzaXJlZG1zZ3R5cGUgZ3JlYXRlciB0aGFuIDAgd2lsbCBjYXVzZSB0aGUKICogZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgZmlyc3QgbWVzc2FnZSB0aGF0IGlzIG5vdCBlcXVhbCB0bwogKiBkZXNpcmVkbXNndHlwZS4KICoKICoKICogTVNHX05PRVJST1IKICoKICogSWYgdGhlIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gbWF4c2l6ZSwKICogc2V0dGluZyB0aGlzIGZsYWcgd2lsbCB0cnVuY2F0ZSB0aGUgbWVzc2FnZSB0bwogKiBtYXhzaXplIGFuZCB3aWxsIG5vdCBzaWduYWwgYW4gZXJyb3IuCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyb3Jjb2RlIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIG9wdGlvbmFsIGVycm9yY29kZQogKiB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBlcnJubyB2YXJpYWJsZS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19yZWNlaXZlKCRxdWV1ZSwgaW50ICRkZXNpcmVkbXNndHlwZSwgP2ludCAmJG1zZ3R5cGUsIGludCAkbWF4c2l6ZSwgJiRtZXNzYWdlLCBib29sICR1bnNlcmlhbGl6ZSA9IHRydWUsIGludCAkZmxhZ3MgPSAwLCA/aW50ICYkZXJyb3Jjb2RlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfcmVjZWl2ZSgkcXVldWUsICRkZXNpcmVkbXNndHlwZSwgJG1zZ3R5cGUsICRtYXhzaXplLCAkbWVzc2FnZSwgJHVuc2VyaWFsaXplLCAkZmxhZ3MsICRlcnJvcmNvZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBtc2dfcmVtb3ZlX3F1ZXVlIGRlc3Ryb3lzIHRoZSBtZXNzYWdlIHF1ZXVlIHNwZWNpZmllZAogKiBieSB0aGUgcXVldWUuICBPbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4gYWxsCiAqIHByb2Nlc3NlcyBoYXZlIGZpbmlzaGVkIHdvcmtpbmcgd2l0aCB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgeW91IG5lZWQgdG8KICogcmVsZWFzZSB0aGUgc3lzdGVtIHJlc291cmNlcyBoZWxkIGJ5IGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXVlIE1lc3NhZ2UgcXVldWUgcmVzb3VyY2UgaGFuZGxlCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBtc2dfcmVtb3ZlX3F1ZXVlKCRxdWV1ZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfcmVtb3ZlX3F1ZXVlKCRxdWV1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIG1zZ19zZW5kIHNlbmRzIGEgbWVzc2FnZSBvZiB0eXBlCiAqIG1zZ3R5cGUgKHdoaWNoIE1VU1QgYmUgZ3JlYXRlciB0aGFuIDApIHRvCiAqIHRoZSBtZXNzYWdlIHF1ZXVlIHNwZWNpZmllZCBieSBxdWV1ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRxdWV1ZSBNZXNzYWdlIHF1ZXVlIHJlc291cmNlIGhhbmRsZQogKiBAcGFyYW0gaW50ICRtc2d0eXBlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChNVVNUIGJlIGdyZWF0ZXIgdGhhbiAwKQogKiBAcGFyYW0gbWl4ZWQgJG1lc3NhZ2UgVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAqCiAqIElmIHNlcmlhbGl6ZSBzZXQgdG8gRkFMU0UgaXMgc3VwcGxpZWQsCiAqIE1VU1QgYmUgb2YgdHlwZTogc3RyaW5nLCBpbnRlZ2VyLCBmbG9hdAogKiBvciBib29sLiBJbiBvdGhlciBjYXNlIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZC4KICogQHBhcmFtIGJvb2wgJHNlcmlhbGl6ZSBUaGUgb3B0aW9uYWwgc2VyaWFsaXplIGNvbnRyb2xzIGhvdyB0aGUKICogbWVzc2FnZSBpcyBzZW50LiAgc2VyaWFsaXplCiAqIGRlZmF1bHRzIHRvIFRSVUUgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWVzc2FnZSBpcwogKiBzZXJpYWxpemVkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyB0aGUgc2Vzc2lvbiBtb2R1bGUgYmVmb3JlIGJlaW5nCiAqIHNlbnQgdG8gdGhlIHF1ZXVlLiAgVGhpcyBhbGxvd3MgY29tcGxleCBhcnJheXMgYW5kIG9iamVjdHMgdG8gYmUgc2VudCB0bwogKiBvdGhlciBQSFAgc2NyaXB0cywgb3IgaWYgeW91IGFyZSB1c2luZyB0aGUgV0REWCBzZXJpYWxpemVyLCB0byBhbnkgV0REWAogKiBjb21wYXRpYmxlIGNsaWVudC4KICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIElmIHRoZSBtZXNzYWdlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIHF1ZXVlLCB5b3VyIHNjcmlwdCB3aWxsIHdhaXQKICogdW50aWwgYW5vdGhlciBwcm9jZXNzIHJlYWRzIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlIGFuZCBmcmVlcyBlbm91Z2gKICogc3BhY2UgZm9yIHlvdXIgbWVzc2FnZSB0byBiZSBzZW50LgogKiBUaGlzIGlzIGNhbGxlZCBibG9ja2luZzsgeW91IGNhbiBwcmV2ZW50IGJsb2NraW5nIGJ5IHNldHRpbmcgdGhlCiAqIG9wdGlvbmFsIGJsb2NraW5nIHBhcmFtZXRlciB0byBGQUxTRSwgaW4gd2hpY2gKICogY2FzZSBtc2dfc2VuZCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBGQUxTRSBpZiB0aGUKICogbWVzc2FnZSBpcyB0b28gYmlnIGZvciB0aGUgcXVldWUsIGFuZCBzZXQgdGhlIG9wdGlvbmFsCiAqIGVycm9yY29kZSB0byBNU0dfRUFHQUlOLAogKiBpbmRpY2F0aW5nIHRoYXQgeW91IHNob3VsZCB0cnkgdG8gc2VuZCB5b3VyIG1lc3NhZ2UgYWdhaW4gYSBsaXR0bGUKICogbGF0ZXIgb24uCiAqIEBwYXJhbSBpbnR8bnVsbCAkZXJyb3Jjb2RlIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIG9wdGlvbmFsIGVycm9yY29kZSB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBlcnJubyB2YXJpYWJsZS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19zZW5kKCRxdWV1ZSwgaW50ICRtc2d0eXBlLCAkbWVzc2FnZSwgYm9vbCAkc2VyaWFsaXplID0gdHJ1ZSwgYm9vbCAkYmxvY2tpbmcgPSB0cnVlLCA/aW50ICYkZXJyb3Jjb2RlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfc2VuZCgkcXVldWUsICRtc2d0eXBlLCAkbWVzc2FnZSwgJHNlcmlhbGl6ZSwgJGJsb2NraW5nLCAkZXJyb3Jjb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogbXNnX3NldF9xdWV1ZSBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRoZQogKiBtc2dfcGVybS51aWQsIG1zZ19wZXJtLmdpZCwgbXNnX3Blcm0ubW9kZSBhbmQgbXNnX3FieXRlcyBmaWVsZHMgb2YgdGhlCiAqIHVuZGVybHlpbmcgbWVzc2FnZSBxdWV1ZSBkYXRhIHN0cnVjdHVyZS4KICoKICogQ2hhbmdpbmcgdGhlIGRhdGEgc3RydWN0dXJlIHdpbGwgcmVxdWlyZSB0aGF0IFBIUCBiZSBydW5uaW5nIGFzIHRoZSBzYW1lCiAqIHVzZXIgdGhhdCBjcmVhdGVkIHRoZSBxdWV1ZSwgb3ducyB0aGUgcXVldWUgKGFzIGRldGVybWluZWQgYnkgdGhlCiAqIGV4aXN0aW5nIG1zZ19wZXJtLnh4eCBmaWVsZHMpLCBvciBiZSBydW5uaW5nIHdpdGggcm9vdCBwcml2aWxlZ2VzLgogKiByb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkIHRvIHJhaXNlIHRoZSBtc2dfcWJ5dGVzIHZhbHVlcyBhYm92ZSB0aGUKICogc3lzdGVtIGRlZmluZWQgbGltaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVldWUgTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogQHBhcmFtIGFycmF5ICRkYXRhIFlvdSBzcGVjaWZ5IHRoZSB2YWx1ZXMgeW91IHJlcXVpcmUgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIGtleXMKICogdGhhdCB5b3UgcmVxdWlyZSBpbiB0aGUgZGF0YSBhcnJheS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG1zZ19zZXRfcXVldWUoJHF1ZXVlLCBhcnJheSAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxtc2dfc2V0X3F1ZXVlKCRxdWV1ZSwgJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBzZW1fYWNxdWlyZSBieSBkZWZhdWx0IGJsb2NrcyAoaWYgbmVjZXNzYXJ5KSB1bnRpbCB0aGUKICogc2VtYXBob3JlIGNhbiBiZSBhY3F1aXJlZC4gIEEgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgYSBzZW1hcGhvcmUgd2hpY2gKICogaXQgaGFzIGFscmVhZHkgYWNxdWlyZWQgd2lsbCBibG9jayBmb3JldmVyIGlmIGFjcXVpcmluZyB0aGUgc2VtYXBob3JlIHdvdWxkCiAqIGNhdXNlIGl0cyBtYXhpbXVtIG51bWJlciBvZiBzZW1hcGhvcmUgdG8gYmUgZXhjZWVkZWQuCiAqCiAqIEFmdGVyIHByb2Nlc3NpbmcgYSByZXF1ZXN0LCBhbnkgc2VtYXBob3JlcyBhY3F1aXJlZCBieSB0aGUgcHJvY2VzcyBidXQgbm90CiAqIGV4cGxpY2l0bHkgcmVsZWFzZWQgd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGFuZCBhIHdhcm5pbmcgd2lsbCBiZQogKiBnZW5lcmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VtX2lkZW50aWZpZXIgc2VtX2lkZW50aWZpZXIgaXMgYSBzZW1hcGhvcmUgcmVzb3VyY2UsCiAqIG9idGFpbmVkIGZyb20gc2VtX2dldC4KICogQHBhcmFtIGJvb2wgJG5vd2FpdCBTcGVjaWZpZXMgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkbid0IHdhaXQgZm9yIHRoZSBzZW1hcGhvcmUgdG8gYmUgYWNxdWlyZWQuCiAqIElmIHNldCB0byB0cnVlLCB0aGUgY2FsbCB3aWxsIHJldHVybgogKiBmYWxzZSBpbW1lZGlhdGVseSBpZiBhIHNlbWFwaG9yZSBjYW5ub3QgYmUgaW1tZWRpYXRlbHkKICogYWNxdWlyZWQuCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZW1fYWNxdWlyZSgkc2VtX2lkZW50aWZpZXIsIGJvb2wgJG5vd2FpdCA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlbV9hY3F1aXJlKCRzZW1faWRlbnRpZmllciwgJG5vd2FpdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlbV9nZXQgcmV0dXJucyBhbiBpZCB0aGF0IGNhbiBiZSB1c2VkIHRvCiAqIGFjY2VzcyB0aGUgU3lzdGVtIFYgc2VtYXBob3JlIHdpdGggdGhlIGdpdmVuIGtleS4KICoKICogQSBzZWNvbmQgY2FsbCB0byBzZW1fZ2V0IGZvciB0aGUgc2FtZSBrZXkKICogd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgc2VtYXBob3JlIGlkZW50aWZpZXIsIGJ1dCBib3RoCiAqIGlkZW50aWZpZXJzIGFjY2VzcyB0aGUgc2FtZSB1bmRlcmx5aW5nIHNlbWFwaG9yZS4KICoKICogSWYga2V5IGlzIDAsIGEgbmV3IHByaXZhdGUgc2VtYXBob3JlCiAqIGlzIGNyZWF0ZWQgZm9yIGVhY2ggY2FsbCB0byBzZW1fZ2V0LgogKgogKiBAcGFyYW0gaW50ICRrZXkKICogQHBhcmFtIGludCAkbWF4X2FjcXVpcmUgVGhlIG51bWJlciBvZiBwcm9jZXNzZXMgdGhhdCBjYW4gYWNxdWlyZSB0aGUgc2VtYXBob3JlIHNpbXVsdGFuZW91c2x5CiAqIGlzIHNldCB0byBtYXhfYWNxdWlyZS4KICogQHBhcmFtIGludCAkcGVybSBUaGUgc2VtYXBob3JlIHBlcm1pc3Npb25zLiBBY3R1YWxseSB0aGlzIHZhbHVlIGlzCiAqIHNldCBvbmx5IGlmIHRoZSBwcm9jZXNzIGZpbmRzIGl0IGlzIHRoZSBvbmx5IHByb2Nlc3MgY3VycmVudGx5CiAqIGF0dGFjaGVkIHRvIHRoZSBzZW1hcGhvcmUuCiAqIEBwYXJhbSBpbnQgJGF1dG9fcmVsZWFzZSBTcGVjaWZpZXMgaWYgdGhlIHNlbWFwaG9yZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSByZWxlYXNlZCBvbiByZXF1ZXN0CiAqIHNodXRkb3duLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBwb3NpdGl2ZSBzZW1hcGhvcmUgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2VtX2dldChpbnQgJGtleSwgaW50ICRtYXhfYWNxdWlyZSA9IDEsIGludCAkcGVybSA9IDA2NjYsIGludCAkYXV0b19yZWxlYXNlID0gMSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZW1fZ2V0KCRrZXksICRtYXhfYWNxdWlyZSwgJHBlcm0sICRhdXRvX3JlbGVhc2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2VtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNlbV9yZWxlYXNlIHJlbGVhc2VzIHRoZSBzZW1hcGhvcmUgaWYgaXQKICogaXMgY3VycmVudGx5IGFjcXVpcmVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3MsIG90aGVyd2lzZQogKiBhIHdhcm5pbmcgaXMgZ2VuZXJhdGVkLgogKgogKiBBZnRlciByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZSwgc2VtX2FjcXVpcmUKICogbWF5IGJlIGNhbGxlZCB0byByZS1hY3F1aXJlIGl0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlbV9pZGVudGlmaWVyIEEgU2VtYXBob3JlIHJlc291cmNlIGhhbmRsZSBhcyByZXR1cm5lZCBieQogKiBzZW1fZ2V0LgogKiBAdGhyb3dzIFNlbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2VtX3JlbGVhc2UoJHNlbV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlbV9yZWxlYXNlKCRzZW1faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlbV9yZW1vdmUgcmVtb3ZlcyB0aGUgZ2l2ZW4gc2VtYXBob3JlLgogKgogKiBBZnRlciByZW1vdmluZyB0aGUgc2VtYXBob3JlLCBpdCBpcyBubyBsb25nZXIgYWNjZXNzaWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZW1faWRlbnRpZmllciBBIHNlbWFwaG9yZSByZXNvdXJjZSBpZGVudGlmaWVyIGFzIHJldHVybmVkCiAqIGJ5IHNlbV9nZXQuCiAqIEB0aHJvd3MgU2VtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZW1fcmVtb3ZlKCRzZW1faWRlbnRpZmllcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZW1fcmVtb3ZlKCRzZW1faWRlbnRpZmllcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNobV9wdXRfdmFyIGluc2VydHMgb3IgdXBkYXRlcyB0aGUKICogdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4KICogdmFyaWFibGVfa2V5LgogKgogKiBXYXJuaW5ncyAoRV9XQVJOSU5HIGxldmVsKSB3aWxsIGJlIGlzc3VlZCBpZgogKiBzaG1faWRlbnRpZmllciBpcyBub3QgYSB2YWxpZCBTeXNWIHNoYXJlZCBtZW1vcnkKICogaW5kZXggb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSByZW1haW5pbmcgdG8gY29tcGxldGUgeW91cgogKiByZXF1ZXN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobV9pZGVudGlmaWVyIEEgc2hhcmVkIG1lbW9yeSByZXNvdXJjZSBoYW5kbGUgYXMgcmV0dXJuZWQgYnkKICogc2htX2F0dGFjaAogKiBAcGFyYW0gaW50ICR2YXJpYWJsZV9rZXkgVGhlIHZhcmlhYmxlIGtleS4KICogQHBhcmFtIG1peGVkICR2YXJpYWJsZSBUaGUgdmFyaWFibGUuIEFsbCB2YXJpYWJsZSB0eXBlcwogKiB0aGF0IHNlcmlhbGl6ZSBzdXBwb3J0cyBtYXkgYmUgdXNlZDogZ2VuZXJhbGx5CiAqIHRoaXMgbWVhbnMgYWxsIHR5cGVzIGV4Y2VwdCBmb3IgcmVzb3VyY2VzIGFuZCBzb21lIGludGVybmFsIG9iamVjdHMKICogdGhhdCBjYW5ub3QgYmUgc2VyaWFsaXplZC4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9wdXRfdmFyKCRzaG1faWRlbnRpZmllciwgaW50ICR2YXJpYWJsZV9rZXksICR2YXJpYWJsZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaG1fcHV0X3Zhcigkc2htX2lkZW50aWZpZXIsICR2YXJpYWJsZV9rZXksICR2YXJpYWJsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlbW92ZXMgYSB2YXJpYWJsZSB3aXRoIGEgZ2l2ZW4gdmFyaWFibGVfa2V5CiAqIGFuZCBmcmVlcyB0aGUgb2NjdXBpZWQgbWVtb3J5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobV9pZGVudGlmaWVyIFRoZSBzaGFyZWQgbWVtb3J5IGlkZW50aWZpZXIgYXMgcmV0dXJuZWQgYnkKICogc2htX2F0dGFjaAogKiBAcGFyYW0gaW50ICR2YXJpYWJsZV9rZXkgVGhlIHZhcmlhYmxlIGtleS4KICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9yZW1vdmVfdmFyKCRzaG1faWRlbnRpZmllciwgaW50ICR2YXJpYWJsZV9rZXkpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2htX3JlbW92ZV92YXIoJHNobV9pZGVudGlmaWVyLCAkdmFyaWFibGVfa2V5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc2htX3JlbW92ZSByZW1vdmVzIHRoZSBzaGFyZWQgbWVtb3J5CiAqIHNobV9pZGVudGlmaWVyLiBBbGwgZGF0YSB3aWxsIGJlIGRlc3Ryb3llZC4KICoKICogQHBhcmFtIHJlc291cmNlICRzaG1faWRlbnRpZmllciBUaGUgc2hhcmVkIG1lbW9yeSBpZGVudGlmaWVyIGFzIHJldHVybmVkIGJ5CiAqIHNobV9hdHRhY2gKICogQHRocm93cyBTZW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobV9yZW1vdmUoJHNobV9pZGVudGlmaWVyKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNobV9yZW1vdmUoJHNobV9pZGVudGlmaWVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTZXNzaW9uRXhjZXB0aW9uOwoKLyoqCiAqIHNlc3Npb25fYWJvcnQgZmluaXNoZXMgc2Vzc2lvbiB3aXRob3V0IHNhdmluZwogKiBkYXRhLiBUaHVzIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gc2Vzc2lvbiBkYXRhIGFyZSBrZXB0LgogKgogKiBAdGhyb3dzIFNlc3Npb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNlc3Npb25fYWJvcnQoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fYWJvcnQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlc3Npb25fZGVjb2RlIGRlY29kZXMgdGhlIHNlcmlhbGl6ZWQgc2Vzc2lvbiBkYXRhIHByb3ZpZGVkIGluCiAqICRkYXRhLCBhbmQgcG9wdWxhdGVzIHRoZSAkX1NFU1NJT04gc3VwZXJnbG9iYWwKICogd2l0aCB0aGUgcmVzdWx0LgogKgogKiBCeSBkZWZhdWx0LCB0aGUgdW5zZXJpYWxpemF0aW9uIG1ldGhvZCB1c2VkIGlzIGludGVybmFsIHRvIFBIUCwgYW5kIGlzIG5vdCB0aGUgc2FtZSBhcyB1bnNlcmlhbGl6ZS4KICogVGhlIHNlcmlhbGl6YXRpb24gbWV0aG9kIGNhbiBiZSBzZXQgdXNpbmcgc2Vzc2lvbi5zZXJpYWxpemVfaGFuZGxlci4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZW5jb2RlZCBkYXRhIHRvIGJlIHN0b3JlZC4KICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX2RlY29kZShzdHJpbmcgJGRhdGEpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2Vzc2lvbl9kZWNvZGUoJGRhdGEpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogSW4gb3JkZXIgdG8ga2lsbCB0aGUgc2Vzc2lvbiBhbHRvZ2V0aGVyLCB0aGUKICogc2Vzc2lvbiBJRCBtdXN0IGFsc28gYmUgdW5zZXQuIElmIGEgY29va2llIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHRoZQogKiBzZXNzaW9uIElEIChkZWZhdWx0IGJlaGF2aW9yKSwgdGhlbiB0aGUgc2Vzc2lvbiBjb29raWUgbXVzdCBiZSBkZWxldGVkLgogKiBzZXRjb29raWUgbWF5IGJlIHVzZWQgZm9yIHRoYXQuCiAqCiAqIFdoZW4gc2Vzc2lvbi51c2Vfc3RyaWN0X21vZGUKICogaXMgZW5hYmxlZC4gWW91IGRvIG5vdCBoYXZlIHRvIHJlbW92ZSBvYnNvbGV0ZSBzZXNzaW9uIElEIGNvb2tpZSBiZWNhdXNlCiAqIHNlc3Npb24gbW9kdWxlIHdpbGwgbm90IGFjY2VwdCBzZXNzaW9uIElEIGNvb2tpZSB3aGVuIHRoZXJlIGlzIG5vCiAqIGRhdGEgYXNzb2NpYXRlZCB0byB0aGUgc2Vzc2lvbiBJRCBhbmQgc2V0IG5ldyBzZXNzaW9uIElEIGNvb2tpZS4KICogRW5hYmxpbmcgc2Vzc2lvbi51c2Vfc3RyaWN0X21vZGUKICogaXMgcmVjb21tZW5kZWQgZm9yIGFsbCBzaXRlcy4KICoKICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX2Rlc3Ryb3koKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fZGVzdHJveSgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogc2Vzc2lvbl9yZWdlbmVyYXRlX2lkIHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudAogKiBzZXNzaW9uIGlkIHdpdGggYSBuZXcgb25lLCBhbmQga2VlcCB0aGUgY3VycmVudCBzZXNzaW9uIGluZm9ybWF0aW9uLgogKgogKiBXaGVuIHNlc3Npb24udXNlX3RyYW5zX3NpZAogKiBpcyBlbmFibGVkLCBvdXRwdXQgbXVzdCBiZSBzdGFydGVkIGFmdGVyIHNlc3Npb25fcmVnZW5lcmF0ZV9pZAogKiBjYWxsLiBPdGhlcndpc2UsIG9sZCBzZXNzaW9uIElEIGlzIHVzZWQuCiAqCiAqIEBwYXJhbSBib29sICRkZWxldGVfb2xkX3Nlc3Npb24gV2hldGhlciB0byBkZWxldGUgdGhlIG9sZCBhc3NvY2lhdGVkIHNlc3Npb24gZmlsZSBvciBub3QuCiAqIFlvdSBzaG91bGQgbm90IGRlbGV0ZSBvbGQgc2Vzc2lvbiBpZiB5b3UgbmVlZCB0byBhdm9pZAogKiByYWNlcyBjYXVzZWQgYnkgZGVsZXRpb24gb3IgZGV0ZWN0L2F2b2lkIHNlc3Npb24gaGlqYWNrCiAqIGF0dGFja3MuCiAqIEB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2Vzc2lvbl9yZWdlbmVyYXRlX2lkKGJvb2wgJGRlbGV0ZV9vbGRfc2Vzc2lvbiA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fcmVnZW5lcmF0ZV9pZCgkZGVsZXRlX29sZF9zZXNzaW9uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNlc3Npb25fcmVzZXQgcmVpbml0aWFsaXplcyBhIHNlc3Npb24gd2l0aAogKiBvcmlnaW5hbCB2YWx1ZXMgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZS4gVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhbiBhY3RpdmUgc2Vzc2lvbiBhbmQKICogZGlzY2FyZHMgY2hhbmdlcyBpbiAkX1NFU1NJT04uCiAqCiAqIEB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2Vzc2lvbl9yZXNldCgpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2Vzc2lvbl9yZXNldCgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2Vzc2lvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHNlc3Npb25fdW5zZXQgZnVuY3Rpb24gZnJlZXMgYWxsIHNlc3Npb24gdmFyaWFibGVzCiAqIGN1cnJlbnRseSByZWdpc3RlcmVkLgogKgogKiBAdGhyb3dzIFNlc3Npb25FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNlc3Npb25fdW5zZXQoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNlc3Npb25fdW5zZXQoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNlc3Npb25FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVuZCB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdG9yZSBzZXNzaW9uIGRhdGEuCiAqCiAqIFNlc3Npb24gZGF0YSBpcyB1c3VhbGx5IHN0b3JlZCBhZnRlciB5b3VyIHNjcmlwdCB0ZXJtaW5hdGVkIHdpdGhvdXQgdGhlCiAqIG5lZWQgdG8gY2FsbCBzZXNzaW9uX3dyaXRlX2Nsb3NlLCBidXQgYXMgc2Vzc2lvbiBkYXRhCiAqIGlzIGxvY2tlZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgd3JpdGVzIG9ubHkgb25lIHNjcmlwdCBtYXkgb3BlcmF0ZSBvbiBhCiAqIHNlc3Npb24gYXQgYW55IHRpbWUuIFdoZW4gdXNpbmcgZnJhbWVzZXRzIHRvZ2V0aGVyIHdpdGggc2Vzc2lvbnMgeW91IHdpbGwKICogZXhwZXJpZW5jZSB0aGUgZnJhbWVzIGxvYWRpbmcgb25lIGJ5IG9uZSBkdWUgdG8gdGhpcyBsb2NraW5nLiBZb3UgY2FuCiAqIHJlZHVjZSB0aGUgdGltZSBuZWVkZWQgdG8gbG9hZCBhbGwgdGhlIGZyYW1lcyBieSBlbmRpbmcgdGhlIHNlc3Npb24gYXMKICogc29vbiBhcyBhbGwgY2hhbmdlcyB0byBzZXNzaW9uIHZhcmlhYmxlcyBhcmUgZG9uZS4KICoKICogQHRocm93cyBTZXNzaW9uRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzZXNzaW9uX3dyaXRlX2Nsb3NlKCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTZXNzaW9uRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/shmop.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTaG1vcEV4Y2VwdGlvbjsKCi8qKgogKiBzaG1vcF9kZWxldGUgaXMgdXNlZCB0byBkZWxldGUgYSBzaGFyZWQgbWVtb3J5IGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobWlkIFRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrIHJlc291cmNlIGNyZWF0ZWQgYnkKICogc2htb3Bfb3BlbgogKiBAdGhyb3dzIFNobW9wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaG1vcF9kZWxldGUoJHNobWlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNobW9wX2RlbGV0ZSgkc2htaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2htb3BFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNobW9wX3JlYWQgd2lsbCByZWFkIGEgc3RyaW5nIGZyb20gc2hhcmVkIG1lbW9yeSBibG9jay4KICoKICogQHBhcmFtIHJlc291cmNlICRzaG1pZCBUaGUgc2hhcmVkIG1lbW9yeSBibG9jayBpZGVudGlmaWVyIGNyZWF0ZWQgYnkKICogc2htb3Bfb3BlbgogKiBAcGFyYW0gaW50ICRzdGFydCBPZmZzZXQgZnJvbSB3aGljaCB0byBzdGFydCByZWFkaW5nCiAqIEBwYXJhbSBpbnQgJGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KICogMCByZWFkcyBzaG1vcF9zaXplKCRzaG1pZCkgLSAkc3RhcnQgYnl0ZXMuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRhdGEuCiAqIEB0aHJvd3MgU2htb3BFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNobW9wX3JlYWQoJHNobWlkLCBpbnQgJHN0YXJ0LCBpbnQgJGNvdW50KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2htb3BfcmVhZCgkc2htaWQsICRzdGFydCwgJGNvdW50KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNobW9wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNobW9wX3dyaXRlIHdpbGwgd3JpdGUgYSBzdHJpbmcgaW50byBzaGFyZWQgbWVtb3J5IGJsb2NrLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNobWlkIFRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrIGlkZW50aWZpZXIgY3JlYXRlZCBieQogKiBzaG1vcF9vcGVuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgQSBzdHJpbmcgdG8gd3JpdGUgaW50byBzaGFyZWQgbWVtb3J5IGJsb2NrCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBTcGVjaWZpZXMgd2hlcmUgdG8gc3RhcnQgd3JpdGluZyBkYXRhIGluc2lkZSB0aGUgc2hhcmVkIG1lbW9yeQogKiBzZWdtZW50LgogKiBAcmV0dXJuIGludCBUaGUgc2l6ZSBvZiB0aGUgd3JpdHRlbiBkYXRhLgogKiBAdGhyb3dzIFNobW9wRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaG1vcF93cml0ZSgkc2htaWQsIHN0cmluZyAkZGF0YSwgaW50ICRvZmZzZXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaG1vcF93cml0ZSgkc2htaWQsICRkYXRhLCAkb2Zmc2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNobW9wRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/simplexml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTaW1wbGV4bWxFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIG5vZGUgb2YgYSBET00KICogZG9jdW1lbnQgYW5kIG1ha2VzIGl0IGludG8gYSBTaW1wbGVYTUwgbm9kZS4gVGhpcyBuZXcgb2JqZWN0IGNhbgogKiB0aGVuIGJlIHVzZWQgYXMgYSBuYXRpdmUgU2ltcGxlWE1MIGVsZW1lbnQuCiAqCiAqIEBwYXJhbSBcRE9NTm9kZSAkbm9kZSBBIERPTSBFbGVtZW50IG5vZGUKICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZSBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbmFsIHBhcmFtZXRlciBzbyB0aGF0CiAqIHNpbXBsZXhtbF9pbXBvcnRfZG9tIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBvZgogKiB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGF0IGNsYXNzIHNob3VsZCBleHRlbmQgdGhlCiAqIFNpbXBsZVhNTEVsZW1lbnQgY2xhc3MuCiAqIEByZXR1cm4gXFNpbXBsZVhNTEVsZW1lbnQgUmV0dXJucyBhIFNpbXBsZVhNTEVsZW1lbnQuCiAqIEB0aHJvd3MgU2ltcGxleG1sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfaW1wb3J0X2RvbShcRE9NTm9kZSAkbm9kZSwgc3RyaW5nICRjbGFzc19uYW1lID0gIlNpbXBsZVhNTEVsZW1lbnQiKTogXFNpbXBsZVhNTEVsZW1lbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaW1wbGV4bWxfaW1wb3J0X2RvbSgkbm9kZSwgJGNsYXNzX25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU2ltcGxleG1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbnZlcnQgdGhlIHdlbGwtZm9ybWVkIFhNTCBkb2N1bWVudCBpbiB0aGUgZ2l2ZW4gZmlsZSB0byBhbiBvYmplY3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIFhNTCBmaWxlCiAqCiAqIExpYnhtbCAyIHVuZXNjYXBlcyB0aGUgVVJJLCBzbyBpZiB5b3Ugd2FudCB0byBwYXNzIGUuZy4KICogYiZhbXA7YyBhcyB0aGUgVVJJIHBhcmFtZXRlciBhLAogKiB5b3UgaGF2ZSB0byBjYWxsCiAqIHNpbXBsZXhtbF9sb2FkX2ZpbGUocmF3dXJsZW5jb2RlKCdodHRwOi8vZXhhbXBsZS5jb20vP2E9JyAuCiAqIHVybGVuY29kZSgnYiZhbXA7YycpKSkuIFNpbmNlIFBIUCA1LjEuMCB5b3UgZG9uJ3QgbmVlZCB0byBkbwogKiB0aGlzIGJlY2F1c2UgUEhQIHdpbGwgZG8gaXQgZm9yIHlvdS4KICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZSBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbmFsIHBhcmFtZXRlciBzbyB0aGF0CiAqIHNpbXBsZXhtbF9sb2FkX2ZpbGUgd2lsbCByZXR1cm4gYW4gb2JqZWN0IG9mCiAqIHRoZSBzcGVjaWZpZWQgY2xhc3MuIFRoYXQgY2xhc3Mgc2hvdWxkIGV4dGVuZCB0aGUKICogU2ltcGxlWE1MRWxlbWVudCBjbGFzcy4KICogQHBhcmFtIGludCAkb3B0aW9ucyBTaW5jZSBQSFAgNS4xLjAgYW5kIExpYnhtbCAyLjYuMCwgeW91IG1heSBhbHNvIHVzZSB0aGUKICogb3B0aW9ucyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIExpYnhtbCBwYXJhbWV0ZXJzLgogKiBAcGFyYW0gc3RyaW5nICRucyBOYW1lc3BhY2UgcHJlZml4IG9yIFVSSS4KICogQHBhcmFtIGJvb2wgJGlzX3ByZWZpeCBUUlVFIGlmIG5zIGlzIGEgcHJlZml4LCBGQUxTRSBpZiBpdCdzIGEgVVJJOwogKiBkZWZhdWx0cyB0byBGQUxTRS4KICogQHJldHVybiBcU2ltcGxlWE1MRWxlbWVudCBSZXR1cm5zIGFuIG9iamVjdCBvZiBjbGFzcyBTaW1wbGVYTUxFbGVtZW50IHdpdGgKICogcHJvcGVydGllcyBjb250YWluaW5nIHRoZSBkYXRhIGhlbGQgd2l0aGluIHRoZSBYTUwgZG9jdW1lbnQuCiAqIEB0aHJvd3MgU2ltcGxleG1sRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfbG9hZF9maWxlKHN0cmluZyAkZmlsZW5hbWUsIHN0cmluZyAkY2xhc3NfbmFtZSA9ICJTaW1wbGVYTUxFbGVtZW50IiwgaW50ICRvcHRpb25zID0gMCwgc3RyaW5nICRucyA9ICIiLCBib29sICRpc19wcmVmaXggPSBmYWxzZSk6IFxTaW1wbGVYTUxFbGVtZW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc2ltcGxleG1sX2xvYWRfZmlsZSgkZmlsZW5hbWUsICRjbGFzc19uYW1lLCAkb3B0aW9ucywgJG5zLCAkaXNfcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNpbXBsZXhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUYWtlcyBhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgYW5kIHJldHVybnMgaXQgYXMgYW4gb2JqZWN0LgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIEEgd2VsbC1mb3JtZWQgWE1MIHN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHNvIHRoYXQKICogc2ltcGxleG1sX2xvYWRfc3RyaW5nIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBvZgogKiB0aGUgc3BlY2lmaWVkIGNsYXNzLiBUaGF0IGNsYXNzIHNob3VsZCBleHRlbmQgdGhlCiAqIFNpbXBsZVhNTEVsZW1lbnQgY2xhc3MuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgU2luY2UgUEhQIDUuMS4wIGFuZCBMaWJ4bWwgMi42LjAsIHlvdSBtYXkgYWxzbyB1c2UgdGhlCiAqIG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBMaWJ4bWwgcGFyYW1ldGVycy4KICogQHBhcmFtIHN0cmluZyAkbnMgTmFtZXNwYWNlIHByZWZpeCBvciBVUkkuCiAqIEBwYXJhbSBib29sICRpc19wcmVmaXggVFJVRSBpZiBucyBpcyBhIHByZWZpeCwgRkFMU0UgaWYgaXQncyBhIFVSSTsKICogZGVmYXVsdHMgdG8gRkFMU0UuCiAqIEByZXR1cm4gXFNpbXBsZVhNTEVsZW1lbnQgUmV0dXJucyBhbiBvYmplY3Qgb2YgY2xhc3MgU2ltcGxlWE1MRWxlbWVudCB3aXRoCiAqIHByb3BlcnRpZXMgY29udGFpbmluZyB0aGUgZGF0YSBoZWxkIHdpdGhpbiB0aGUgeG1sIGRvY3VtZW50LgogKiBAdGhyb3dzIFNpbXBsZXhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2ltcGxleG1sX2xvYWRfc3RyaW5nKHN0cmluZyAkZGF0YSwgc3RyaW5nICRjbGFzc19uYW1lID0gIlNpbXBsZVhNTEVsZW1lbnQiLCBpbnQgJG9wdGlvbnMgPSAwLCBzdHJpbmcgJG5zID0gIiIsIGJvb2wgJGlzX3ByZWZpeCA9IGZhbHNlKTogXFNpbXBsZVhNTEVsZW1lbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEsICRjbGFzc19uYW1lLCAkb3B0aW9ucywgJG5zLCAkaXNfcHJlZml4KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNpbXBsZXhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sockets.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2NrZXRzRXhjZXB0aW9uOwoKLyoqCiAqIEFmdGVyIHRoZSBzb2NrZXQgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQKICogdXNpbmcgc29ja2V0X2NyZWF0ZSwgYm91bmQgdG8gYSBuYW1lIHdpdGgKICogc29ja2V0X2JpbmQsIGFuZCB0b2xkIHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMKICogd2l0aCBzb2NrZXRfbGlzdGVuLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWNjZXB0CiAqIGluY29taW5nIGNvbm5lY3Rpb25zIG9uIHRoYXQgc29ja2V0LiBPbmNlIGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uCiAqIGlzIG1hZGUsIGEgbmV3IHNvY2tldCByZXNvdXJjZSBpcyByZXR1cm5lZCwgd2hpY2ggbWF5IGJlIHVzZWQKICogZm9yIGNvbW11bmljYXRpb24uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBxdWV1ZWQgb24KICogdGhlIHNvY2tldCwgdGhlIGZpcnN0IHdpbGwgYmUgdXNlZC4gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcKICogY29ubmVjdGlvbnMsIHNvY2tldF9hY2NlcHQgd2lsbCBibG9jayB1bnRpbAogKiBhIGNvbm5lY3Rpb24gYmVjb21lcyBwcmVzZW50LiBJZiBzb2NrZXQKICogaGFzIGJlZW4gbWFkZSBub24tYmxvY2tpbmcgdXNpbmcKICogc29ja2V0X3NldF9ibG9ja2luZyBvcgogKiBzb2NrZXRfc2V0X25vbmJsb2NrLCBGQUxTRSB3aWxsIGJlIHJldHVybmVkLgogKgogKiBUaGUgc29ja2V0IHJlc291cmNlIHJldHVybmVkIGJ5CiAqIHNvY2tldF9hY2NlcHQgbWF5IG5vdCBiZSB1c2VkIHRvIGFjY2VwdCBuZXcKICogY29ubmVjdGlvbnMuIFRoZSBvcmlnaW5hbCBsaXN0ZW5pbmcgc29ja2V0CiAqIHNvY2tldCwgaG93ZXZlciwgcmVtYWlucyBvcGVuIGFuZCBtYXkgYmUKICogcmV1c2VkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgbmV3IHNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgYWN0dWFsCiAqIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2FjY2VwdCgkc29ja2V0KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9hY2NlcHQoJHNvY2tldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENyZWF0ZSBhIFNvY2tldCByZXNvdXJjZSwgYW5kIGJpbmQgaXQgdG8gdGhlIHByb3ZpZGVkIEFkZHJJbmZvIHJlc291cmNlLiAgVGhlIHJldHVybgogKiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHdpdGggc29ja2V0X2xpc3Rlbi4KICoKICogQHBhcmFtIHJlc291cmNlICRhZGRyIFJlc291cmNlIGNyZWF0ZWQgZnJvbSBzb2NrZXRfYWRkcmluZm9fbG9va3VwLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBTb2NrZXQgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfYWRkcmluZm9fYmluZCgkYWRkcikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfYWRkcmluZm9fYmluZCgkYWRkcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gbnVsbCkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlIGEgU29ja2V0IHJlc291cmNlLCBhbmQgY29ubmVjdCBpdCB0byB0aGUgcHJvdmlkZWQgQWRkckluZm8gcmVzb3VyY2UuICBUaGUgcmV0dXJuCiAqIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc29ja2V0IGZ1bmN0aW9ucy4KICoKICogQHBhcmFtIHJlc291cmNlICRhZGRyIFJlc291cmNlIGNyZWF0ZWQgZnJvbSBzb2NrZXRfYWRkcmluZm9fbG9va3VwCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIFNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9hZGRyaW5mb19jb25uZWN0KCRhZGRyKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9hZGRyaW5mb19jb25uZWN0KCRhZGRyKTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBCaW5kcyB0aGUgbmFtZSBnaXZlbiBpbiBhZGRyZXNzIHRvIHRoZSBzb2NrZXQKICogZGVzY3JpYmVkIGJ5IHNvY2tldC4gVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUKICogYSBjb25uZWN0aW9uIGlzIGJlIGVzdGFibGlzaGVkIHVzaW5nIHNvY2tldF9jb25uZWN0CiAqIG9yIHNvY2tldF9saXN0ZW4uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIElmIHRoZSBzb2NrZXQgaXMgb2YgdGhlIEFGX0lORVQgZmFtaWx5LCB0aGUKICogYWRkcmVzcyBpcyBhbiBJUCBpbiBkb3R0ZWQtcXVhZCBub3RhdGlvbgogKiAoZS5nLiAxMjcuMC4wLjEpLgogKgogKiBJZiB0aGUgc29ja2V0IGlzIG9mIHRoZSBBRl9VTklYIGZhbWlseSwgdGhlCiAqIGFkZHJlc3MgaXMgdGhlIHBhdGggb2YgYQogKiBVbml4LWRvbWFpbiBzb2NrZXQgKGUuZy4gL3RtcC9teS5zb2NrKS4KICogQHBhcmFtIGludCAkcG9ydCBUaGUgcG9ydCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHdoZW4KICogYmluZGluZyBhbiBBRl9JTkVUIHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gd2hpY2ggdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfYmluZCgkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2JpbmQoJHNvY2tldCwgJGFkZHJlc3MsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEluaXRpYXRlIGEgY29ubmVjdGlvbiB0byBhZGRyZXNzIHVzaW5nIHRoZSBzb2NrZXQgcmVzb3VyY2UKICogc29ja2V0LCB3aGljaCBtdXN0IGJlIGEgdmFsaWQgc29ja2V0CiAqIHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldAogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIFRoZSBhZGRyZXNzIHBhcmFtZXRlciBpcyBlaXRoZXIgYW4gSVB2NCBhZGRyZXNzCiAqIGluIGRvdHRlZC1xdWFkIG5vdGF0aW9uIChlLmcuIDEyNy4wLjAuMSkgaWYKICogc29ja2V0IGlzIEFGX0lORVQsIGEgdmFsaWQKICogSVB2NiBhZGRyZXNzIChlLmcuIDo6MSkgaWYgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kCiAqIHNvY2tldCBpcyBBRl9JTkVUNgogKiBvciB0aGUgcGF0aG5hbWUgb2YgYSBVbml4IGRvbWFpbiBzb2NrZXQsIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzCiAqIEFGX1VOSVguCiAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBhbmQgaXMgbWFuZGF0b3J5CiAqIHdoZW4gY29ubmVjdGluZyB0byBhbiBBRl9JTkVUIG9yIGFuCiAqIEFGX0lORVQ2IHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIHdoaWNoIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgbWFkZS4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY29ubmVjdCgkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2Nvbm5lY3QoJHNvY2tldCwgJGFkZHJlc3MsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIHNvY2tldF9jcmVhdGVfbGlzdGVuIGNyZWF0ZXMgYSBuZXcgc29ja2V0IHJlc291cmNlIG9mCiAqIHR5cGUgQUZfSU5FVCBsaXN0ZW5pbmcgb24gYWxsCiAqIGxvY2FsIGludGVyZmFjZXMgb24gdGhlIGdpdmVuIHBvcnQgd2FpdGluZyBmb3IgbmV3IGNvbm5lY3Rpb25zLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGVhc2UgdGhlIHRhc2sgb2YgY3JlYXRpbmcgYSBuZXcgc29ja2V0IHdoaWNoCiAqIG9ubHkgbGlzdGVucyB0byBhY2NlcHQgbmV3IGNvbm5lY3Rpb25zLgogKgogKiBAcGFyYW0gaW50ICRwb3J0IFRoZSBwb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBvbiBhbGwgaW50ZXJmYWNlcy4KICogQHBhcmFtIGludCAkYmFja2xvZyBUaGUgYmFja2xvZyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGgKICogdGhlIHF1ZXVlIG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgbWF5IGdyb3cgdG8uCiAqIFNPTUFYQ09OTiBtYXkgYmUgcGFzc2VkIGFzCiAqIGJhY2tsb2cgcGFyYW1ldGVyLCBzZWUKICogc29ja2V0X2xpc3RlbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICogQHJldHVybiByZXNvdXJjZSBzb2NrZXRfY3JlYXRlX2xpc3RlbiByZXR1cm5zIGEgbmV3IHNvY2tldCByZXNvdXJjZQogKiBvbiBzdWNjZXNzLiBUaGUgZXJyb3IgY29kZSBjYW4gYmUgcmV0cmlldmVkIHdpdGgKICogc29ja2V0X2xhc3RfZXJyb3IuIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIHNvY2tldF9zdHJlcnJvciB0byBnZXQgYSB0ZXh0dWFsIGV4cGxhbmF0aW9uIG9mIHRoZQogKiBlcnJvci4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlX2xpc3RlbihpbnQgJHBvcnQsIGludCAkYmFja2xvZyA9IDEyOCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfY3JlYXRlX2xpc3RlbigkcG9ydCwgJGJhY2tsb2cpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBzb2NrZXRfY3JlYXRlX3BhaXIgY3JlYXRlcyB0d28gY29ubmVjdGVkIGFuZAogKiBpbmRpc3Rpbmd1aXNoYWJsZSBzb2NrZXRzLCBhbmQgc3RvcmVzIHRoZW0gaW4gZmQuCiAqIFRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgdXNlZCBpbiBJUEMgKEludGVyUHJvY2VzcyBDb21tdW5pY2F0aW9uKS4KICoKICogQHBhcmFtIGludCAkZG9tYWluIFRoZSBkb21haW4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogZmFtaWx5IHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4gU2VlIHNvY2tldF9jcmVhdGUKICogZm9yIHRoZSBmdWxsIGxpc3QuCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgcGFyYW1ldGVyIHNlbGVjdHMgdGhlIHR5cGUgb2YgY29tbXVuaWNhdGlvbgogKiB0byBiZSB1c2VkIGJ5IHRoZSBzb2NrZXQuIFNlZSBzb2NrZXRfY3JlYXRlIGZvciB0aGUKICogZnVsbCBsaXN0LgogKiBAcGFyYW0gaW50ICRwcm90b2NvbCBUaGUgcHJvdG9jb2wgcGFyYW1ldGVyIHNldHMgdGhlIHNwZWNpZmljCiAqIHByb3RvY29sIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbiB0byBiZSB1c2VkCiAqIHdoZW4gY29tbXVuaWNhdGluZyBvbiB0aGUgcmV0dXJuZWQgc29ja2V0LiBUaGUgcHJvcGVyIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgYnkKICogbmFtZSBieSB1c2luZyBnZXRwcm90b2J5bmFtZS4gSWYKICogdGhlIGRlc2lyZWQgcHJvdG9jb2wgaXMgVENQLCBvciBVRFAgdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnRzCiAqIFNPTF9UQ1AsIGFuZCBTT0xfVURQCiAqIGNhbiBhbHNvIGJlIHVzZWQuCiAqCiAqIFNlZSBzb2NrZXRfY3JlYXRlIGZvciB0aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZAogKiBwcm90b2NvbHMuCiAqIEBwYXJhbSByZXNvdXJjZVtdfG51bGwgJGZkIFJlZmVyZW5jZSB0byBhbiBhcnJheSBpbiB3aGljaCB0aGUgdHdvIHNvY2tldCByZXNvdXJjZXMgd2lsbCBiZSBpbnNlcnRlZC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlX3BhaXIoaW50ICRkb21haW4sIGludCAkdHlwZSwgaW50ICRwcm90b2NvbCwgP2l0ZXJhYmxlICYkZmQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2NyZWF0ZV9wYWlyKCRkb21haW4sICR0eXBlLCAkcHJvdG9jb2wsICRmZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgc29ja2V0IHJlc291cmNlLCBhbHNvIHJlZmVycmVkIHRvIGFzIGFuIGVuZHBvaW50CiAqIG9mIGNvbW11bmljYXRpb24uIEEgdHlwaWNhbCBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgbWFkZSB1cCBvZiAyIHNvY2tldHMsIG9uZQogKiBwZXJmb3JtaW5nIHRoZSByb2xlIG9mIHRoZSBjbGllbnQsIGFuZCBhbm90aGVyIHBlcmZvcm1pbmcgdGhlIHJvbGUgb2YgdGhlIHNlcnZlci4KICoKICogQHBhcmFtIGludCAkZG9tYWluIFRoZSBkb21haW4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogZmFtaWx5IHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkdHlwZSBUaGUgdHlwZSBwYXJhbWV0ZXIgc2VsZWN0cyB0aGUgdHlwZSBvZiBjb21tdW5pY2F0aW9uCiAqIHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkcHJvdG9jb2wgVGhlIHByb3RvY29sIHBhcmFtZXRlciBzZXRzIHRoZSBzcGVjaWZpYwogKiBwcm90b2NvbCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkb21haW4gdG8gYmUgdXNlZAogKiB3aGVuIGNvbW11bmljYXRpbmcgb24gdGhlIHJldHVybmVkIHNvY2tldC4gVGhlIHByb3BlciB2YWx1ZSBjYW4gYmUKICogcmV0cmlldmVkIGJ5IG5hbWUgYnkgdXNpbmcgZ2V0cHJvdG9ieW5hbWUuIElmCiAqIHRoZSBkZXNpcmVkIHByb3RvY29sIGlzIFRDUCwgb3IgVURQIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50cwogKiBTT0xfVENQLCBhbmQgU09MX1VEUAogKiBjYW4gYWxzbyBiZSB1c2VkLgogKiBAcmV0dXJuIHJlc291cmNlIHNvY2tldF9jcmVhdGUgcmV0dXJucyBhIHNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgYWN0dWFsIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2NyZWF0ZShpbnQgJGRvbWFpbiwgaW50ICR0eXBlLCBpbnQgJHByb3RvY29sKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9jcmVhdGUoJGRvbWFpbiwgJHR5cGUsICRwcm90b2NvbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJuIHJlc291cmNlLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9leHBvcnRfc3RyZWFtKCRzb2NrZXQpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2V4cG9ydF9zdHJlYW0oJHNvY2tldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfZ2V0X29wdGlvbiBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHZhbHVlIGZvcgogKiB0aGUgb3B0aW9uIHNwZWNpZmllZCBieSB0aGUgb3B0bmFtZSBwYXJhbWV0ZXIgZm9yIHRoZQogKiBzcGVjaWZpZWQgc29ja2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWNjZXB0LgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogbGV2ZWwgYXQgd2hpY2ggdGhlIG9wdGlvbiByZXNpZGVzLiBGb3IgZXhhbXBsZSwgdG8gcmV0cmlldmUgb3B0aW9ucyBhdAogKiB0aGUgc29ja2V0IGxldmVsLCBhIGxldmVsIHBhcmFtZXRlciBvZgogKiBTT0xfU09DS0VUIHdvdWxkIGJlIHVzZWQuIE90aGVyIGxldmVscywgc3VjaCBhcwogKiBUQ1AsIGNhbiBiZSB1c2VkIGJ5CiAqIHNwZWNpZnlpbmcgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGF0IGxldmVsLiBQcm90b2NvbCBudW1iZXJzIGNhbiBiZQogKiBmb3VuZCBieSB1c2luZyB0aGUgZ2V0cHJvdG9ieW5hbWUgZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnQgJG9wdG5hbWUgUmVwb3J0cyB3aGV0aGVyIHRoZSBzb2NrZXQgbGluZ2VycyBvbgogKiBzb2NrZXRfY2xvc2UgaWYgZGF0YSBpcyBwcmVzZW50LiBCeSBkZWZhdWx0LAogKiB3aGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkLCBpdCBhdHRlbXB0cyB0byBzZW5kIGFsbCB1bnNlbnQgZGF0YS4KICogSW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCwKICogc29ja2V0X2Nsb3NlIHdpbGwgd2FpdCBmb3IgaXRzIHBlZXIgdG8KICogYWNrbm93bGVkZ2UgdGhlIGRhdGEuCiAqCiAqIElmIGxfb25vZmYgaXMgbm9uLXplcm8gYW5kCiAqIGxfbGluZ2VyIGlzIHplcm8sIGFsbCB0aGUKICogdW5zZW50IGRhdGEgd2lsbCBiZSBkaXNjYXJkZWQgYW5kIFJTVCAocmVzZXQpIGlzIHNlbnQgdG8gdGhlCiAqIHBlZXIgaW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldC4KICoKICogT24gdGhlIG90aGVyIGhhbmQsIGlmIGxfb25vZmYgaXMKICogbm9uLXplcm8gYW5kIGxfbGluZ2VyIGlzIG5vbi16ZXJvLAogKiBzb2NrZXRfY2xvc2Ugd2lsbCBibG9jayB1bnRpbCBhbGwgdGhlIGRhdGEKICogaXMgc2VudCBvciB0aGUgdGltZSBzcGVjaWZpZWQgaW4gbF9saW5nZXIKICogZWxhcHNlcy4gSWYgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcsCiAqIHNvY2tldF9jbG9zZSB3aWxsIGZhaWwgYW5kIHJldHVybiBhbiBlcnJvci4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9ucy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0X29wdGlvbigkc29ja2V0LCBpbnQgJGxldmVsLCBpbnQgJG9wdG5hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X2dldF9vcHRpb24oJHNvY2tldCwgJGxldmVsLCAkb3B0bmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFF1ZXJpZXMgdGhlIHJlbW90ZSBzaWRlIG9mIHRoZSBnaXZlbiBzb2NrZXQgd2hpY2ggbWF5IGVpdGhlciByZXN1bHQgaW4KICogaG9zdC9wb3J0IG9yIGluIGEgVW5peCBmaWxlc3lzdGVtIHBhdGgsIGRlcGVuZGVudCBvbiBpdHMgdHlwZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcyBJZiB0aGUgZ2l2ZW4gc29ja2V0IGlzIG9mIHR5cGUgQUZfSU5FVCBvcgogKiBBRl9JTkVUNiwgc29ja2V0X2dldHBlZXJuYW1lCiAqIHdpbGwgcmV0dXJuIHRoZSBwZWVycyAocmVtb3RlKSBJUCBhZGRyZXNzIGluCiAqIGFwcHJvcHJpYXRlIG5vdGF0aW9uIChlLmcuIDEyNy4wLjAuMSBvcgogKiBmZTgwOjoxKSBpbiB0aGUgYWRkcmVzcwogKiBwYXJhbWV0ZXIgYW5kLCBpZiB0aGUgb3B0aW9uYWwgcG9ydCBwYXJhbWV0ZXIgaXMKICogcHJlc2VudCwgYWxzbyB0aGUgYXNzb2NpYXRlZCBwb3J0LgogKgogKiBJZiB0aGUgZ2l2ZW4gc29ja2V0IGlzIG9mIHR5cGUgQUZfVU5JWCwKICogc29ja2V0X2dldHBlZXJuYW1lIHdpbGwgcmV0dXJuIHRoZSBVbml4IGZpbGVzeXN0ZW0KICogcGF0aCAoZS5nLiAvdmFyL3J1bi9kYWVtb24uc29jaykgaW4gdGhlCiAqIGFkZHJlc3MgcGFyYW1ldGVyLgogKiBAcGFyYW0gaW50fG51bGwgJHBvcnQgSWYgZ2l2ZW4sIHRoaXMgd2lsbCBob2xkIHRoZSBwb3J0IGFzc29jaWF0ZWQgdG8KICogYWRkcmVzcy4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0cGVlcm5hbWUoJHNvY2tldCwgc3RyaW5nICYkYWRkcmVzcywgP2ludCAmJHBvcnQgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9nZXRwZWVybmFtZSgkc29ja2V0LCAkYWRkcmVzcywgJHBvcnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRhZGRyIElmIHRoZSBnaXZlbiBzb2NrZXQgaXMgb2YgdHlwZSBBRl9JTkVUCiAqIG9yIEFGX0lORVQ2LCBzb2NrZXRfZ2V0c29ja25hbWUKICogd2lsbCByZXR1cm4gdGhlIGxvY2FsIElQIGFkZHJlc3MgaW4gYXBwcm9wcmlhdGUgbm90YXRpb24gKGUuZy4KICogMTI3LjAuMC4xIG9yIGZlODA6OjEpIGluIHRoZQogKiBhZGRyZXNzIHBhcmFtZXRlciBhbmQsIGlmIHRoZSBvcHRpb25hbAogKiBwb3J0IHBhcmFtZXRlciBpcyBwcmVzZW50LCBhbHNvIHRoZSBhc3NvY2lhdGVkIHBvcnQuCiAqCiAqIElmIHRoZSBnaXZlbiBzb2NrZXQgaXMgb2YgdHlwZSBBRl9VTklYLAogKiBzb2NrZXRfZ2V0c29ja25hbWUgd2lsbCByZXR1cm4gdGhlIFVuaXggZmlsZXN5c3RlbQogKiBwYXRoIChlLmcuIC92YXIvcnVuL2RhZW1vbi5zb2NrKSBpbiB0aGUKICogYWRkcmVzcyBwYXJhbWV0ZXIuCiAqIEBwYXJhbSBpbnR8bnVsbCAkcG9ydCBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGhvbGQgdGhlIGFzc29jaWF0ZWQgcG9ydC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0c29ja25hbWUoJHNvY2tldCwgP3N0cmluZyAmJGFkZHIsID9pbnQgJiRwb3J0ID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfZ2V0c29ja25hbWUoJHNvY2tldCwgJGFkZHIsICRwb3J0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEltcG9ydHMgYSBzdHJlYW0gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzb2NrZXQgaW50byBhIHNvY2tldCBleHRlbnNpb24gcmVzb3VyY2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSBzdHJlYW0gcmVzb3VyY2UgdG8gaW1wb3J0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgRkFMU0UuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X2ltcG9ydF9zdHJlYW0oJHN0cmVhbSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfaW1wb3J0X3N0cmVhbSgkc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBBZnRlciB0aGUgc29ja2V0IHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkCiAqIHVzaW5nIHNvY2tldF9jcmVhdGUgYW5kIGJvdW5kIHRvIGEgbmFtZSB3aXRoCiAqIHNvY2tldF9iaW5kLCBpdCBtYXkgYmUgdG9sZCB0byBsaXN0ZW4gZm9yIGluY29taW5nCiAqIGNvbm5lY3Rpb25zIG9uIHNvY2tldC4KICoKICogc29ja2V0X2xpc3RlbiBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gc29ja2V0cyBvZgogKiB0eXBlIFNPQ0tfU1RSRUFNIG9yCiAqIFNPQ0tfU0VRUEFDS0VULgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWRkcmluZm9fYmluZAogKiBAcGFyYW0gaW50ICRiYWNrbG9nIEEgbWF4aW11bSBvZiBiYWNrbG9nIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICogcXVldWVkIGZvciBwcm9jZXNzaW5nLiBJZiBhIGNvbm5lY3Rpb24gcmVxdWVzdCBhcnJpdmVzIHdpdGggdGhlIHF1ZXVlCiAqIGZ1bGwgdGhlIGNsaWVudCBtYXkgcmVjZWl2ZSBhbiBlcnJvciB3aXRoIGFuIGluZGljYXRpb24gb2YKICogRUNPTk5SRUZVU0VELCBvciwgaWYgdGhlIHVuZGVybHlpbmcgcHJvdG9jb2wgc3VwcG9ydHMKICogcmV0cmFuc21pc3Npb24sIHRoZSByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIHNvIHRoYXQgcmV0cmllcyBtYXkgc3VjY2VlZC4KICoKICogVGhlIG1heGltdW0gbnVtYmVyIHBhc3NlZCB0byB0aGUgYmFja2xvZwogKiBwYXJhbWV0ZXIgaGlnaGx5IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uIE9uIExpbnV4LCBpdCBpcwogKiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gU09NQVhDT05OLiBPbiB3aW4zMiwgaWYKICogcGFzc2VkIFNPTUFYQ09OTiwgdGhlIHVuZGVybHlpbmcgc2VydmljZSBwcm92aWRlcgogKiByZXNwb25zaWJsZSBmb3IgdGhlIHNvY2tldCB3aWxsIHNldCB0aGUgYmFja2xvZyB0byBhIG1heGltdW0KICogcmVhc29uYWJsZSB2YWx1ZS4gVGhlcmUgaXMgbm8gc3RhbmRhcmQgcHJvdmlzaW9uIHRvCiAqIGZpbmQgb3V0IHRoZSBhY3R1YWwgYmFja2xvZyB2YWx1ZSBvbiB0aGlzIHBsYXRmb3JtLgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9saXN0ZW4oJHNvY2tldCwgaW50ICRiYWNrbG9nID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfbGlzdGVuKCRzb2NrZXQsICRiYWNrbG9nKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBmdW5jdGlvbiBzb2NrZXRfcmVhZCByZWFkcyBmcm9tIHRoZSBzb2NrZXQKICogcmVzb3VyY2Ugc29ja2V0IGNyZWF0ZWQgYnkgdGhlCiAqIHNvY2tldF9jcmVhdGUgb3IKICogc29ja2V0X2FjY2VwdCBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlCiAqIG9yIHNvY2tldF9hY2NlcHQuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyBzcGVjaWZpZWQgYnkgdGhlCiAqIGxlbmd0aCBwYXJhbWV0ZXIuIE90aGVyd2lzZSB5b3UgY2FuIHVzZQogKiBcciwgXG4sCiAqIG9yIFwwIHRvIGVuZCByZWFkaW5nIChkZXBlbmRpbmcgb24gdGhlIHR5cGUKICogcGFyYW1ldGVyLCBzZWUgYmVsb3cpLgogKiBAcGFyYW0gaW50ICR0eXBlIE9wdGlvbmFsIHR5cGUgcGFyYW1ldGVyIGlzIGEgbmFtZWQgY29uc3RhbnQ6CiAqCiAqCiAqCiAqIFBIUF9CSU5BUllfUkVBRCAoRGVmYXVsdCkgLSB1c2UgdGhlIHN5c3RlbQogKiByZWN2KCkgZnVuY3Rpb24uIFNhZmUgZm9yIHJlYWRpbmcgYmluYXJ5IGRhdGEuCiAqCiAqCiAqCiAqCiAqIFBIUF9OT1JNQUxfUkVBRCAtIHJlYWRpbmcgc3RvcHMgYXQKICogXG4gb3IgXHIuCiAqCiAqCiAqCiAqIEByZXR1cm4gc3RyaW5nIHNvY2tldF9yZWFkIHJldHVybnMgdGhlIGRhdGEgYXMgYSBzdHJpbmcgb24gc3VjY2VzcyAoaW5jbHVkaW5nIGlmIHRoZSByZW1vdGUgaG9zdCBoYXMgY2xvc2VkIHRoZQogKiBjb25uZWN0aW9uKS4gVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZgogKiB0aGUgZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3JlYWQoJHNvY2tldCwgaW50ICRsZW5ndGgsIGludCAkdHlwZSA9IFBIUF9CSU5BUllfUkVBRCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvY2tldF9yZWFkKCRzb2NrZXQsICRsZW5ndGgsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhlIGZ1bmN0aW9uIHNvY2tldF9zZW5kIHNlbmRzCiAqIGxlbiBieXRlcyB0byB0aGUgc29ja2V0CiAqIHNvY2tldCBmcm9tIGJ1Zi4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIHN0cmluZyAkYnVmIEEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHJlbW90ZSBob3N0LgogKiBAcGFyYW0gaW50ICRsZW4gVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgcmVtb3RlIGhvc3QgZnJvbQogKiBidWYuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFRoZSB2YWx1ZSBvZiBmbGFncyBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mCiAqIHRoZSBmb2xsb3dpbmcgZmxhZ3MsIGpvaW5lZCB3aXRoIHRoZSBiaW5hcnkgT1IgKHwpCiAqIG9wZXJhdG9yLgogKgogKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGZsYWdzCiAqCiAqCiAqCiAqIE1TR19PT0IKICoKICogU2VuZCBPT0IgKG91dC1vZi1iYW5kKSBkYXRhLgogKgogKgogKgogKiBNU0dfRU9SCiAqCiAqIEluZGljYXRlIGEgcmVjb3JkIG1hcmsuIFRoZSBzZW50IGRhdGEgY29tcGxldGVzIHRoZSByZWNvcmQuCiAqCiAqCiAqCiAqIE1TR19FT0YKICoKICogQ2xvc2UgdGhlIHNlbmRlciBzaWRlIG9mIHRoZSBzb2NrZXQgYW5kIGluY2x1ZGUgYW4gYXBwcm9wcmlhdGUKICogbm90aWZpY2F0aW9uIG9mIHRoaXMgYXQgdGhlIGVuZCBvZiB0aGUgc2VudCBkYXRhLiBUaGUgc2VudCBkYXRhCiAqIGNvbXBsZXRlcyB0aGUgdHJhbnNhY3Rpb24uCiAqCiAqCiAqCiAqIE1TR19ET05UUk9VVEUKICoKICogQnlwYXNzIHJvdXRpbmcsIHVzZSBkaXJlY3QgaW50ZXJmYWNlLgogKgogKgogKgogKgogKgogKiBAcmV0dXJuIGludCBzb2NrZXRfc2VuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2VuZCgkc29ja2V0LCBzdHJpbmcgJGJ1ZiwgaW50ICRsZW4sIGludCAkZmxhZ3MpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2VuZCgkc29ja2V0LCAkYnVmLCAkbGVuLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldAogKiBAcGFyYW0gYXJyYXkgJG1lc3NhZ2UKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3NlbmRtc2coJHNvY2tldCwgYXJyYXkgJG1lc3NhZ2UsIGludCAkZmxhZ3MgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NlbmRtc2coJHNvY2tldCwgJG1lc3NhZ2UsICRmbGFncyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBmdW5jdGlvbiBzb2NrZXRfc2VuZHRvIHNlbmRzCiAqIGxlbiBieXRlcyBmcm9tIGJ1ZgogKiB0aHJvdWdoIHRoZSBzb2NrZXQgc29ja2V0IHRvIHRoZQogKiBwb3J0IGF0IHRoZSBhZGRyZXNzIGFkZHIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgdXNpbmcgc29ja2V0X2NyZWF0ZS4KICogQHBhcmFtIHN0cmluZyAkYnVmIFRoZSBzZW50IGRhdGEgd2lsbCBiZSB0YWtlbiBmcm9tIGJ1ZmZlciBidWYuCiAqIEBwYXJhbSBpbnQgJGxlbiBsZW4gYnl0ZXMgZnJvbSBidWYgd2lsbCBiZQogKiBzZW50LgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgdmFsdWUgb2YgZmxhZ3MgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICoKICogUG9zc2libGUgdmFsdWVzIGZvciBmbGFncwogKgogKgogKgogKiBNU0dfT09CCiAqCiAqIFNlbmQgT09CIChvdXQtb2YtYmFuZCkgZGF0YS4KICoKICoKICoKICogTVNHX0VPUgogKgogKiBJbmRpY2F0ZSBhIHJlY29yZCBtYXJrLiBUaGUgc2VudCBkYXRhIGNvbXBsZXRlcyB0aGUgcmVjb3JkLgogKgogKgogKgogKiBNU0dfRU9GCiAqCiAqIENsb3NlIHRoZSBzZW5kZXIgc2lkZSBvZiB0aGUgc29ja2V0IGFuZCBpbmNsdWRlIGFuIGFwcHJvcHJpYXRlCiAqIG5vdGlmaWNhdGlvbiBvZiB0aGlzIGF0IHRoZSBlbmQgb2YgdGhlIHNlbnQgZGF0YS4gVGhlIHNlbnQgZGF0YQogKiBjb21wbGV0ZXMgdGhlIHRyYW5zYWN0aW9uLgogKgogKgogKgogKiBNU0dfRE9OVFJPVVRFCiAqCiAqIEJ5cGFzcyByb3V0aW5nLCB1c2UgZGlyZWN0IGludGVyZmFjZS4KICoKICoKICoKICoKICoKICogQHBhcmFtIHN0cmluZyAkYWRkciBJUCBhZGRyZXNzIG9mIHRoZSByZW1vdGUgaG9zdC4KICogQHBhcmFtIGludCAkcG9ydCBwb3J0IGlzIHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYXQgd2hpY2ggdGhlIGRhdGEKICogd2lsbCBiZSBzZW50LgogKiBAcmV0dXJuIGludCBzb2NrZXRfc2VuZHRvIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZQogKiByZW1vdGUgaG9zdC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2VuZHRvKCRzb2NrZXQsIHN0cmluZyAkYnVmLCBpbnQgJGxlbiwgaW50ICRmbGFncywgc3RyaW5nICRhZGRyLCBpbnQgJHBvcnQgPSAwKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NlbmR0bygkc29ja2V0LCAkYnVmLCAkbGVuLCAkZmxhZ3MsICRhZGRyLCAkcG9ydCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfc2V0X2Jsb2NrIGZ1bmN0aW9uIHJlbW92ZXMgdGhlCiAqIE9fTk9OQkxPQ0sgZmxhZyBvbiB0aGUgc29ja2V0IHNwZWNpZmllZCBieSB0aGUKICogc29ja2V0IHBhcmFtZXRlci4KICoKICogV2hlbiBhbiBvcGVyYXRpb24gKGUuZy4gcmVjZWl2ZSwgc2VuZCwgY29ubmVjdCwgYWNjZXB0LCAuLi4pIGlzIHBlcmZvcm1lZCBvbgogKiBhIGJsb2NraW5nIHNvY2tldCwgdGhlIHNjcmlwdCB3aWxsIHBhdXNlIGl0cyBleGVjdXRpb24gdW50aWwgaXQgcmVjZWl2ZXMKICogYSBzaWduYWwgb3IgaXQgY2FuIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2V0X2Jsb2NrKCRzb2NrZXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NldF9ibG9jaygkc29ja2V0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoZSBzb2NrZXRfc2V0X25vbmJsb2NrIGZ1bmN0aW9uIHNldHMgdGhlCiAqIE9fTk9OQkxPQ0sgZmxhZyBvbiB0aGUgc29ja2V0IHNwZWNpZmllZCBieQogKiB0aGUgc29ja2V0IHBhcmFtZXRlci4KICoKICogV2hlbiBhbiBvcGVyYXRpb24gKGUuZy4gcmVjZWl2ZSwgc2VuZCwgY29ubmVjdCwgYWNjZXB0LCAuLi4pIGlzIHBlcmZvcm1lZCBvbgogKiBhIG5vbi1ibG9ja2luZyBzb2NrZXQsIHRoZSBzY3JpcHQgd2lsbCBub3QgcGF1c2UgaXRzIGV4ZWN1dGlvbiB1bnRpbCBpdCByZWNlaXZlcyBhCiAqIHNpZ25hbCBvciBpdCBjYW4gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiBSYXRoZXIsIGlmIHRoZSBvcGVyYXRpb24gd291bGQgcmVzdWx0CiAqIGluIGEgYmxvY2ssIHRoZSBjYWxsZWQgZnVuY3Rpb24gd2lsbCBmYWlsLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggc29ja2V0X2NyZWF0ZQogKiBvciBzb2NrZXRfYWNjZXB0LgogKiBAdGhyb3dzIFNvY2tldHNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNvY2tldF9zZXRfbm9uYmxvY2soJHNvY2tldCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhlIHNvY2tldF9zZXRfb3B0aW9uIGZ1bmN0aW9uIHNldHMgdGhlIG9wdGlvbgogKiBzcGVjaWZpZWQgYnkgdGhlIG9wdG5hbWUgcGFyYW1ldGVyLCBhdCB0aGUKICogc3BlY2lmaWVkIHByb3RvY29sIGxldmVsLCB0byB0aGUgdmFsdWUgcG9pbnRlZCB0bwogKiBieSB0aGUgb3B0dmFsIHBhcmFtZXRlciBmb3IgdGhlCiAqIHNvY2tldC4KICoKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQgQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHNvY2tldF9jcmVhdGUKICogb3Igc29ja2V0X2FjY2VwdC4KICogQHBhcmFtIGludCAkbGV2ZWwgVGhlIGxldmVsIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHByb3RvY29sCiAqIGxldmVsIGF0IHdoaWNoIHRoZSBvcHRpb24gcmVzaWRlcy4gRm9yIGV4YW1wbGUsIHRvIHJldHJpZXZlIG9wdGlvbnMgYXQKICogdGhlIHNvY2tldCBsZXZlbCwgYSBsZXZlbCBwYXJhbWV0ZXIgb2YKICogU09MX1NPQ0tFVCB3b3VsZCBiZSB1c2VkLiBPdGhlciBsZXZlbHMsIHN1Y2ggYXMKICogVENQLCBjYW4gYmUgdXNlZCBieSBzcGVjaWZ5aW5nIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhhdCBsZXZlbC4KICogUHJvdG9jb2wgbnVtYmVycyBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlCiAqIGdldHByb3RvYnluYW1lIGZ1bmN0aW9uLgogKiBAcGFyYW0gaW50ICRvcHRuYW1lIFRoZSBhdmFpbGFibGUgc29ja2V0IG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciB0aGUKICogc29ja2V0X2dldF9vcHRpb24gZnVuY3Rpb24uCiAqIEBwYXJhbSBpbnR8c3RyaW5nfGFycmF5ICRvcHR2YWwgVGhlIG9wdGlvbiB2YWx1ZS4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2V0X29wdGlvbigkc29ja2V0LCBpbnQgJGxldmVsLCBpbnQgJG9wdG5hbWUsICRvcHR2YWwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3NldF9vcHRpb24oJHNvY2tldCwgJGxldmVsLCAkb3B0bmFtZSwgJG9wdHZhbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGUgc29ja2V0X3NodXRkb3duIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3RvcAogKiBpbmNvbWluZywgb3V0Z29pbmcgb3IgYWxsIGRhdGEgKHRoZSBkZWZhdWx0KSBmcm9tIGJlaW5nIHNlbnQgdGhyb3VnaCB0aGUKICogc29ja2V0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0IEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCBzb2NrZXRfY3JlYXRlLgogKiBAcGFyYW0gaW50ICRob3cgVGhlIHZhbHVlIG9mIGhvdyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIHBvc3NpYmxlIHZhbHVlcyBmb3IgaG93CiAqCiAqCiAqCiAqIDAKICoKICogU2h1dGRvd24gc29ja2V0IHJlYWRpbmcKICoKICoKICoKICogMQogKgogKiBTaHV0ZG93biBzb2NrZXQgd3JpdGluZwogKgogKgogKgogKiAyCiAqCiAqIFNodXRkb3duIHNvY2tldCByZWFkaW5nIGFuZCB3cml0aW5nCiAqCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3NodXRkb3duKCRzb2NrZXQsIGludCAkaG93ID0gMik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfc2h1dGRvd24oJHNvY2tldCwgJGhvdyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2NrZXRzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBFeHBvcnRzIHRoZSBXU0FQUk9UT0NPTF9JTkZPIHN0cnVjdHVyZSBpbnRvIHNoYXJlZCBtZW1vcnkgYW5kIHJldHVybnMKICogYW4gaWRlbnRpZmllciB0byBiZSB1c2VkIHdpdGggc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0LiBUaGUKICogZXhwb3J0ZWQgSUQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGdpdmVuIHRhcmdldF9waWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAgJHNvY2tldCBBIHZhbGlkIHNvY2tldCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkdGFyZ2V0X3BpZCBUaGUgSUQgb2YgdGhlIHByb2Nlc3Mgd2hpY2ggd2lsbCBpbXBvcnQgdGhlIHNvY2tldC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhbiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgZm9yIHRoZSBpbXBvcnQKICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQoJHNvY2tldCwgaW50ICR0YXJnZXRfcGlkKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc29ja2V0X3dzYXByb3RvY29sX2luZm9fZXhwb3J0KCRzb2NrZXQsICR0YXJnZXRfcGlkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogSW1wb3J0cyBhIHNvY2tldCB3aGljaCBoYXMgZm9ybWVybHkgYmVlbiBleHBvcnRlZCBmcm9tIGFub3RoZXIgcHJvY2Vzcy4KICoKICogQHBhcmFtIHN0cmluZyAkaW5mb19pZCBUaGUgSUQgd2hpY2ggaGFzIGJlZW4gcmV0dXJuZWQgYnkgYSBmb3JtZXIgY2FsbCB0bwogKiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgc29ja2V0IHJlc291cmNlCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0KHN0cmluZyAkaW5mb19pZCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQoJGluZm9faWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29ja2V0c0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWxlYXNlcyB0aGUgc2hhcmVkIG1lbW9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbmZvX2lkLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbmZvX2lkIFRoZSBJRCB3aGljaCBoYXMgYmVlbiByZXR1cm5lZCBieSBhIGZvcm1lciBjYWxsIHRvCiAqIHNvY2tldF93c2Fwcm90b2NvbF9pbmZvX2V4cG9ydC4KICogQHRocm93cyBTb2NrZXRzRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19yZWxlYXNlKHN0cmluZyAkaW5mb19pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19yZWxlYXNlKCRpbmZvX2lkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sodium.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2RpdW1FeGNlcHRpb247CgovKioKICogVXNlcyBhIENQVS0gYW5kIG1lbW9yeS1oYXJkIGhhc2ggYWxnb3JpdGhtIGFsb25nIHdpdGggYSByYW5kb21seS1nZW5lcmF0ZWQgc2FsdCwgYW5kIG1lbW9yeSBhbmQgQ1BVIGxpbWl0cyB0byBnZW5lcmF0ZSBhbiBBU0NJSS1lbmNvZGVkIGhhc2ggc3VpdGFibGUgZm9yIHBhc3N3b3JkIHN0b3JhZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIHN0cmluZzsgVGhlIHBhc3N3b3JkIHRvIGdlbmVyYXRlIGEgaGFzaCBmb3IuCiAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0IFJlcHJlc2VudHMgYSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRhdGlvbnMgdG8gcGVyZm9ybS4gUmFpc2luZyB0aGlzIG51bWJlciB3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIHJlcXVpcmUgbW9yZSBDUFUgY3ljbGVzIHRvIGNvbXB1dGUgYSBrZXkuIFRoZXJlIGFyZSBjb25zdGFudHMgYXZhaWxhYmxlIHRvIHNldCB0aGUgb3BlcmF0aW9ucyBsaW1pdCB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIGludGVuZGVkIHVzZSwgaW4gb3JkZXIgb2Ygc3RyZW5ndGg6IFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX0lOVEVSQUNUSVZFLCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9NT0RFUkFURSBhbmQgU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfU0VOU0lUSVZFLgogKiBAcGFyYW0gaW50ICRtZW1saW1pdCBUaGUgbWF4aW11bSBhbW91bnQgb2YgUkFNIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgdXNlLCBpbiBieXRlcy4gVGhlcmUgYXJlIGNvbnN0YW50cyB0byBoZWxwIHlvdSBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgdmFsdWUsIGluIG9yZGVyIG9mIHNpemU6IFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX0lOVEVSQUNUSVZFLCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9NT0RFUkFURSwgYW5kIFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX1NFTlNJVElWRS4gVHlwaWNhbGx5IHRoZXNlIHNob3VsZCBiZSBwYWlyZWQgd2l0aCB0aGUgbWF0Y2hpbmcgb3BzbGltaXQgdmFsdWVzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBoYXNoZWQgcGFzc3dvcmQuCiAqCiAqIEluIG9yZGVyIHRvIHByb2R1Y2UgdGhlIHNhbWUgcGFzc3dvcmQgaGFzaCBmcm9tIHRoZSBzYW1lIHBhc3N3b3JkLCB0aGUgc2FtZSB2YWx1ZXMgZm9yIG9wc2xpbWl0IGFuZCBtZW1saW1pdCBtdXN0IGJlIHVzZWQuIFRoZXNlIGFyZSBlbWJlZGRlZCB3aXRoaW4gdGhlIGdlbmVyYXRlZCBoYXNoLCBzbwogKiBldmVyeXRoaW5nIHRoYXQncyBuZWVkZWQgdG8gdmVyaWZ5IHRoZSBoYXNoIGlzIGluY2x1ZGVkLiBUaGlzIGFsbG93cwogKiB0aGUgc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSBmdW5jdGlvbiB0byB2ZXJpZnkgdGhlIGhhc2ggd2l0aG91dAogKiBuZWVkaW5nIHNlcGFyYXRlIHN0b3JhZ2UgZm9yIHRoZSBvdGhlciBwYXJhbWV0ZXJzLgogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyKHN0cmluZyAkcGFzc3dvcmQsIGludCAkb3BzbGltaXQsIGludCAkbWVtbGltaXQpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHIoJHBhc3N3b3JkLCAkb3BzbGltaXQsICRtZW1saW1pdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTb2RpdW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIGxpYnNvZGl1bSdzIGNyeXB0b19wd2hhc2gga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uIFVubGVzcyB5b3UgaGF2ZSBzcGVjaWZpYyByZWFzb24gdG8gdXNlIHRoaXMgZnVuY3Rpb24sIHlvdSBzaG91bGQgdXNlIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0ciBvciBwYXNzd29yZF9oYXNoIGZ1bmN0aW9ucyBpbnN0ZWFkLgogKgogKiBAcGFyYW0gaW50ICRsZW5ndGggaW50ZWdlcjsgVGhlIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgaGFzaCB0byBnZW5lcmF0ZSwgaW4gYnl0ZXMuCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIHN0cmluZzsgVGhlIHBhc3N3b3JkIHRvIGdlbmVyYXRlIGEgaGFzaCBmb3IuCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQgc3RyaW5nIEEgc2FsdCB0byBhZGQgdG8gdGhlIHBhc3N3b3JkIGJlZm9yZSBoYXNoaW5nLiBUaGUgc2FsdCBzaG91bGQgYmUgdW5wcmVkaWN0YWJsZSwgaWRlYWxseSBnZW5lcmF0ZWQgZnJvbSBhIGdvb2QgcmFuZG9tIG11bWJlciBzb3VyY2Ugc3VjaCBhcyByYW5kb21fYnl0ZXMsIGFuZCBoYXZlIGEgbGVuZ3RoIG9mIGF0IGxlYXN0IFNPRElVTV9DUllQVE9fUFdIQVNIX1NBTFRCWVRFUyBieXRlcy4KICogQHBhcmFtIGludCAkb3BzbGltaXQgUmVwcmVzZW50cyBhIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGF0aW9ucyB0byBwZXJmb3JtLiBSYWlzaW5nIHRoaXMgbnVtYmVyIHdpbGwgbWFrZSB0aGUgZnVuY3Rpb24gcmVxdWlyZSBtb3JlIENQVSBjeWNsZXMgdG8gY29tcHV0ZSBhIGtleS4gVGhlcmUgYXJlIHNvbWUgY29uc3RhbnRzIGF2YWlsYWJsZSB0byBzZXQgdGhlIG9wZXJhdGlvbnMgbGltaXQgdG8gYXBwcm9wcmlhdGUgdmFsdWVzIGRlcGVuZGluZyBvbiBpbnRlbmRlZCB1c2UsIGluIG9yZGVyIG9mIHN0cmVuZ3RoOiBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9JTlRFUkFDVElWRSwgU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfTU9ERVJBVEUgYW5kIFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX1NFTlNJVElWRS4KICogQHBhcmFtIGludCAkbWVtbGltaXQgVGhlIG1heGltdW0gYW1vdW50IG9mIFJBTSB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIHVzZSwgaW4gYnl0ZXMuIFRoZXJlIGFyZSBjb25zdGFudHMgdG8gaGVscCB5b3UgY2hvb3NlIGFuIGFwcHJvcHJpYXRlIHZhbHVlLCBpbiBvcmRlciBvZiBzaXplOiBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9JTlRFUkFDVElWRSwgU09ESVVNX0NSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUsIGFuZCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9TRU5TSVRJVkUuIFR5cGljYWxseSB0aGVzZSBzaG91bGQgYmUgcGFpcmVkIHdpdGggdGhlIG1hdGNoaW5nIG9wc2xpbWl0IHZhbHVlcy4KICogQHBhcmFtIGludCAkYWxnIGludGVnZXIgQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLiBCeSBkZWZhdWx0IFNPRElVTV9DUllQVE9fUFdIQVNIX0FMR19ERUZBVUxUICh0aGUgY3VycmVudGx5IHJlY29tbWVuZGVkIGFsZ29yaXRobSwgd2hpY2ggY2FuIGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIGxpYnNvZGl1bSB0byBhbm90aGVyKSwgb3IgZXhwbGljaXRseSB1c2luZyBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySUQxMywgcmVwcmVzZW50aW5nIHRoZSBBcmdvbjJpZCBhbGdvcml0aG0gdmVyc2lvbiAxLjMuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRlcml2ZWQga2V5LiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYmluYXJ5IHN0cmluZyBvZiB0aGUgaGFzaCwgbm90IGFuIEFTQ0lJLWVuY29kZWQgcmVwcmVzZW50YXRpb24sIGFuZCBkb2VzIG5vdCBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMgdXNlZCB0byBjcmVhdGUgdGhlIGhhc2gsIHNvIHlvdSB3aWxsIG5lZWQgdG8ga2VlcCB0aGF0IGluZm9ybWF0aW9uIGlmIHlvdSBhcmUgZXZlciBnb2luZyB0byB2ZXJpZnkgdGhlIHBhc3N3b3JkIGluIGZ1dHVyZS4gVXNlIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0ciB0byBhdm9pZCBuZWVkaW5nIHRvIGRvIGFsbCB0aGF0LgogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2goaW50ICRsZW5ndGgsIHN0cmluZyAkcGFzc3dvcmQsIHN0cmluZyAkc2FsdCwgaW50ICRvcHNsaW1pdCwgaW50ICRtZW1saW1pdCwgaW50ICRhbGcgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYWxnICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzb2RpdW1fY3J5cHRvX3B3aGFzaCgkbGVuZ3RoLCAkcGFzc3dvcmQsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCwgJGFsZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc29kaXVtX2NyeXB0b19wd2hhc2goJGxlbmd0aCwgJHBhc3N3b3JkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU29kaXVtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/solr.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTb2xyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBleHRlbnNpb24gYXMgYSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gc3RyaW5nIEl0IHJldHVybnMgYSBzdHJpbmcgb24gc3VjY2Vzcy4KICogQHRocm93cyBTb2xyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzb2xyX2dldF92ZXJzaW9uKCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvbHJfZ2V0X3ZlcnNpb24oKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvbHJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/spl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTcGxFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIHRoZSBpbnRlcmZhY2VzIHRoYXQgdGhlCiAqIGdpdmVuIGNsYXNzIGFuZCBpdHMgcGFyZW50cyBpbXBsZW1lbnQuCiAqCiAqIEBwYXJhbSBtaXhlZCAkY2xhc3MgQW4gb2JqZWN0IChjbGFzcyBpbnN0YW5jZSkgb3IgYSBzdHJpbmcgKGNsYXNzIG9yIGludGVyZmFjZSBuYW1lKS4KICogQHBhcmFtIGJvb2wgJGF1dG9sb2FkIFdoZXRoZXIgdG8gYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHRoZSBjbGFzcyBhdXRvbWF0aWNhbGx5IHRocm91Z2gKICogdGhlIF9fYXV0b2xvYWQgbWFnaWMgbWV0aG9kLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbGFzc19pbXBsZW1lbnRzKCRjbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19pbXBsZW1lbnRzKCRjbGFzcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNwbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFyZW50IGNsYXNzZXMgb2YKICogdGhlIGdpdmVuIGNsYXNzLgogKgogKiBAcGFyYW0gbWl4ZWQgJGNsYXNzIEFuIG9iamVjdCAoY2xhc3MgaW5zdGFuY2UpIG9yIGEgc3RyaW5nIChjbGFzcyBuYW1lKS4KICogQHBhcmFtIGJvb2wgJGF1dG9sb2FkIFdoZXRoZXIgdG8gYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHRoZSBjbGFzcyBhdXRvbWF0aWNhbGx5IHRocm91Z2gKICogdGhlIF9fYXV0b2xvYWQgbWFnaWMgbWV0aG9kLgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBjbGFzc19wYXJlbnRzKCRjbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjbGFzc19wYXJlbnRzKCRjbGFzcywgJGF1dG9sb2FkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNwbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHRyYWl0cyB0aGF0IHRoZQogKiBnaXZlbiBjbGFzcyB1c2VzLiBUaGlzIGRvZXMgaG93ZXZlciBub3QgaW5jbHVkZQogKiBhbnkgdHJhaXRzIHVzZWQgYnkgYSBwYXJlbnQgY2xhc3MuCiAqCiAqIEBwYXJhbSBtaXhlZCAkY2xhc3MgQW4gb2JqZWN0IChjbGFzcyBpbnN0YW5jZSkgb3IgYSBzdHJpbmcgKGNsYXNzIG5hbWUpLgogKiBAcGFyYW0gYm9vbCAkYXV0b2xvYWQgV2hldGhlciB0byBhbGxvdyB0aGlzIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIGNsYXNzIGF1dG9tYXRpY2FsbHkgdGhyb3VnaAogKiB0aGUgX19hdXRvbG9hZCBtYWdpYyBtZXRob2QuCiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb24gc3VjY2Vzcy4KICogQHRocm93cyBTcGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNsYXNzX3VzZXMoJGNsYXNzLCBib29sICRhdXRvbG9hZCA9IHRydWUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGNsYXNzX3VzZXMoJGNsYXNzLCAkYXV0b2xvYWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gd2l0aCB0aGUgc3BsIHByb3ZpZGVkIF9fYXV0b2xvYWQgcXVldWUuIElmIHRoZSBxdWV1ZQogKiBpcyBub3QgeWV0IGFjdGl2YXRlZCBpdCB3aWxsIGJlIGFjdGl2YXRlZC4KICoKICogSWYgeW91ciBjb2RlIGhhcyBhbiBleGlzdGluZyBfX2F1dG9sb2FkIGZ1bmN0aW9uIHRoZW4KICogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkgcmVnaXN0ZXJlZCBvbiB0aGUgX19hdXRvbG9hZCBxdWV1ZS4gVGhpcwogKiBpcyBiZWNhdXNlIHNwbF9hdXRvbG9hZF9yZWdpc3RlciB3aWxsIGVmZmVjdGl2ZWx5CiAqIHJlcGxhY2UgdGhlIGVuZ2luZSBjYWNoZSBmb3IgdGhlIF9fYXV0b2xvYWQgZnVuY3Rpb24KICogYnkgZWl0aGVyIHNwbF9hdXRvbG9hZCBvcgogKiBzcGxfYXV0b2xvYWRfY2FsbC4KICoKICogSWYgdGhlcmUgbXVzdCBiZSBtdWx0aXBsZSBhdXRvbG9hZCBmdW5jdGlvbnMsIHNwbF9hdXRvbG9hZF9yZWdpc3RlcgogKiBhbGxvd3MgZm9yIHRoaXMuIEl0IGVmZmVjdGl2ZWx5IGNyZWF0ZXMgYSBxdWV1ZSBvZiBhdXRvbG9hZCBmdW5jdGlvbnMsIGFuZAogKiBydW5zIHRocm91Z2ggZWFjaCBvZiB0aGVtIGluIHRoZSBvcmRlciB0aGV5IGFyZSBkZWZpbmVkLiBCeSBjb250cmFzdCwKICogX19hdXRvbG9hZCBtYXkgb25seSBiZSBkZWZpbmVkIG9uY2UuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZShzdHJpbmcpOnZvaWQgJGF1dG9sb2FkX2Z1bmN0aW9uIFRoZSBhdXRvbG9hZCBmdW5jdGlvbiBiZWluZyByZWdpc3RlcmVkLgogKiBJZiBubyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKICogc3BsX2F1dG9sb2FkIHdpbGwgYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIGJvb2wgJHRocm93IFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyCiAqIHNwbF9hdXRvbG9hZF9yZWdpc3RlciBzaG91bGQgdGhyb3cKICogZXhjZXB0aW9ucyB3aGVuIHRoZSBhdXRvbG9hZF9mdW5jdGlvbgogKiBjYW5ub3QgYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIGJvb2wgJHByZXBlbmQgSWYgdHJ1ZSwgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyIHdpbGwgcHJlcGVuZAogKiB0aGUgYXV0b2xvYWRlciBvbiB0aGUgYXV0b2xvYWQgcXVldWUgaW5zdGVhZCBvZiBhcHBlbmRpbmcgaXQuCiAqIEB0aHJvd3MgU3BsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoY2FsbGFibGUgJGF1dG9sb2FkX2Z1bmN0aW9uID0gbnVsbCwgYm9vbCAkdGhyb3cgPSB0cnVlLCBib29sICRwcmVwZW5kID0gZmFsc2UpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkcHJlcGVuZCAhPT0gZmFsc2UpIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24sICR0aHJvdywgJHByZXBlbmQpOwogICAgfSBlbHNlaWYgKCR0aHJvdyAhPT0gdHJ1ZSkgewogICAgICAgICRyZXN1bHQgPSBcc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKCRhdXRvbG9hZF9mdW5jdGlvbiwgJHRocm93KTsKICAgIH0gZWxzZWlmICgkYXV0b2xvYWRfZnVuY3Rpb24gIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNwbF9hdXRvbG9hZF9yZWdpc3RlcigpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIGEgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b2xvYWQgcXVldWUuIElmIHRoZSBxdWV1ZQogKiBpcyBhY3RpdmF0ZWQgYW5kIGVtcHR5IGFmdGVyIHJlbW92aW5nIHRoZSBnaXZlbiBmdW5jdGlvbiB0aGVuIGl0IHdpbGwKICogYmUgZGVhY3RpdmF0ZWQuCiAqCiAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXN1bHRzIGluIHRoZSBxdWV1ZSBiZWluZyBkZWFjdGl2YXRlZCwgYW55CiAqIF9fYXV0b2xvYWQgZnVuY3Rpb24gdGhhdCBwcmV2aW91c2x5IGV4aXN0ZWQgd2lsbCBub3QgYmUgcmVhY3RpdmF0ZWQuCiAqCiAqIEBwYXJhbSBtaXhlZCAkYXV0b2xvYWRfZnVuY3Rpb24gVGhlIGF1dG9sb2FkIGZ1bmN0aW9uIGJlaW5nIHVucmVnaXN0ZXJlZC4KICogQHRocm93cyBTcGxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKCRhdXRvbG9hZF9mdW5jdGlvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcigkYXV0b2xvYWRfZnVuY3Rpb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3BsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/sqlsrv.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTcWxzcnZFeGNlcHRpb247CgovKioKICogVGhlIHRyYW5zYWN0aW9uIGJlZ3VuIGJ5IHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbiBpbmNsdWRlcwogKiBhbGwgc3RhdGVtZW50cyB0aGF0IHdlcmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNhbGwgdG8KICogc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uIGFuZCBiZWZvcmUgY2FsbHMgdG8KICogc3Fsc3J2X3JvbGxiYWNrIG9yIHNxbHNydl9jb21taXQuCiAqIEV4cGxpY2l0IHRyYW5zYWN0aW9ucyBzaG91bGQgYmUgc3RhcnRlZCBhbmQgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrIHVzaW5nCiAqIHRoZXNlIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBTUUwgc3RhdGVtZW50cyB0aGF0IGJlZ2luIGFuZCBjb21taXQvcm9sbAogKiBiYWNrIHRyYW5zYWN0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQogKiBTUUxTUlYgVHJhbnNhY3Rpb25zLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm4gVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHNxbHNydl9jb25uZWN0LgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uKCRjb25uKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbigkY29ubik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENhbmNlbHMgYSBzdGF0ZW1lbnQuIEFueSByZXN1bHRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGVtZW50IHRoYXQgaGF2ZSBub3QKICogYmVlbiBjb25zdW1lZCBhcmUgZGVsZXRlZC4gQWZ0ZXIgc3Fsc3J2X2NhbmNlbCBoYXMgYmVlbgogKiBjYWxsZWQsIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IGNhbiBiZSByZS1leGVjdXRlZCBpZiBpdCB3YXMgY3JlYXRlZCB3aXRoCiAqIHNxbHNydl9wcmVwYXJlLiBDYWxsaW5nIHNxbHNydl9jYW5jZWwKICogaXMgbm90IG5lY2Vzc2FyeSBpZiBhbGwgdGhlIHJlc3VsdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0ZW1lbnQgaGF2ZSBiZWVuCiAqIGNvbnN1bWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgVGhlIHN0YXRlbWVudCByZXNvdXJjZSB0byBiZSBjYW5jZWxsZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY2FuY2VsKCRzdG10KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9jYW5jZWwoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGllbnQgYW5kIHNwZWNpZmllZCBjb25uZWN0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiBhYm91dCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZC4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGgga2V5cyBkZXNjcmliZWQgaW4gdGhlIHRhYmxlIGJlbG93LgogKgogKiBBcnJheSByZXR1cm5lZCBieSBzcWxzcnZfY2xpZW50X2luZm8KICoKICoKICoKICogS2V5CiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIERyaXZlckRsbE5hbWUKICogU1FMTkNMSTEwLkRMTAogKgogKgogKiBEcml2ZXJPREJDVmVyCiAqIE9EQkMgdmVyc2lvbiAoeHgueXkpCiAqCiAqCiAqIERyaXZlclZlcgogKiBTUUwgU2VydmVyIE5hdGl2ZSBDbGllbnQgRExMIHZlcnNpb24gKDEwLjUueHh4KQogKgogKgogKiBFeHRlbnNpb25WZXIKICogcGhwX3NxbHNydi5kbGwgdmVyc2lvbiAoMi4wLnh4eC54KQogKgogKgogKgogKgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2NsaWVudF9pbmZvKCRjb25uKTogYXJyYXkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfY2xpZW50X2luZm8oJGNvbm4pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyBhbiBvcGVuIGNvbm5lY3Rpb24gYW5kIHJlbGVhc2VzIHJlc291cnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiB0byBiZSBjbG9zZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY2xvc2UoJGNvbm4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X2Nsb3NlKCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uIHRoYXQgd2FzIGJlZ3VuIHdpdGggc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uLgogKiBUaGUgY29ubmVjdGlvbiBpcyByZXR1cm5lZCB0byBhdXRvLWNvbW1pdCBtb2RlIGFmdGVyIHNxbHNydl9jb21taXQKICogaXMgY2FsbGVkLiBUaGUgdHJhbnNhY3Rpb24gdGhhdCBpcyBjb21taXR0ZWQgaW5jbHVkZXMgYWxsIHN0YXRlbWVudHMgdGhhdCB3ZXJlCiAqIGV4ZWN1dGVkIGFmdGVyIHRoZSBjYWxsIHRvIHNxbHNydl9iZWdpbl90cmFuc2FjdGlvbi4KICogRXhwbGljaXQgdHJhbnNhY3Rpb25zIHNob3VsZCBiZSBzdGFydGVkIGFuZCBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2sgdXNpbmcgdGhlc2UKICogZnVuY3Rpb25zIGluc3RlYWQgb2YgZXhlY3V0aW5nIFNRTCBzdGF0ZW1lbnRzIHRoYXQgYmVnaW4gYW5kIGNvbW1pdC9yb2xsIGJhY2sKICogdHJhbnNhY3Rpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCiAqIFNRTFNSViBUcmFuc2FjdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiBvbiB3aGljaCB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgY29tbWl0dGVkLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X2NvbW1pdCgkY29ubik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfY29tbWl0KCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ2hhbmdlcyB0aGUgZHJpdmVyIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25zLgogKgogKiBAcGFyYW0gc3RyaW5nICRzZXR0aW5nIFRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nIHRvIHNldC4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUKICogIldhcm5pbmdzUmV0dXJuQXNFcnJvcnMiLCAiTG9nU3Vic3lzdGVtcyIsIGFuZCAiTG9nU2V2ZXJpdHkiLgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNldHRpbmcuIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgcG9zc2libGUgdmFsdWVzOgogKgogKiBFcnJvciBhbmQgTG9nZ2luZyBTZXR0aW5nIE9wdGlvbnMKICoKICoKICoKICogU2V0dGluZwogKiBPcHRpb25zCiAqCiAqCiAqCiAqCiAqIFdhcm5pbmdzUmV0dXJuQXNFcnJvcnMKICogMSAoVFJVRSkgb3IgMCAoRkFMU0UpCiAqCiAqCiAqIExvZ1N1YnN5c3RlbXMKICogU1FMU1JWX0xPR19TWVNURU1fQUxMICgtMSkKICogU1FMU1JWX0xPR19TWVNURU1fQ09OTiAoMikKICogU1FMU1JWX0xPR19TWVNURU1fSU5JVCAoMSkKICogU1FMU1JWX0xPR19TWVNURU1fT0ZGICgwKQogKiBTUUxTUlZfTE9HX1NZU1RFTV9TVE1UICg0KQogKiBTUUxTUlZfTE9HX1NZU1RFTV9VVElMICg4KQogKgogKgogKiBMb2dTZXZlcml0eQogKiBTUUxTUlZfTE9HX1NFVkVSSVRZX0FMTCAoLTEpCiAqIFNRTFNSVl9MT0dfU0VWRVJJVFlfRVJST1IgKDEpCiAqIFNRTFNSVl9MT0dfU0VWRVJJVFlfTk9USUNFICg0KQogKiBTUUxTUlZfTE9HX1NFVkVSSVRZX1dBUk5JTkcgKDIpCiAqCiAqCiAqCiAqCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfY29uZmlndXJlKHN0cmluZyAkc2V0dGluZywgJHZhbHVlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNxbHNydl9jb25maWd1cmUoJHNldHRpbmcsICR2YWx1ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEV4ZWN1dGVzIGEgc3RhdGVtZW50IHByZXBhcmVkIHdpdGggc3Fsc3J2X3ByZXBhcmUuIFRoaXMKICogZnVuY3Rpb24gaXMgaWRlYWwgZm9yIGV4ZWN1dGluZyBhIHByZXBhcmVkIHN0YXRlbWVudCBtdWx0aXBsZSB0aW1lcyB3aXRoCiAqIGRpZmZlcmVudCBwYXJhbWV0ZXIgdmFsdWVzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgQSBzdGF0ZW1lbnQgcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X3ByZXBhcmUuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfZXhlY3V0ZSgkc3RtdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfZXhlY3V0ZSgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZyZWVzIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50LiBUaGUgc3RhdGVtZW50IGNhbm5vdCBiZSB1c2VkCiAqIGFmdGVyIHNxbHNydl9mcmVlX3N0bXQgaGFzIGJlZW4gY2FsbGVkIG9uIGl0LiBJZgogKiBzcWxzcnZfZnJlZV9zdG10IGlzIGNhbGxlZCBvbiBhbiBpbi1wcm9ncmVzcyBzdGF0ZW1lbnQKICogdGhhdCBhbHRlcnMgc2VydmVyIHN0YXRlLCBzdGF0ZW1lbnQgZXhlY3V0aW9uIGlzIHRlcm1pbmF0ZWQgYW5kIHRoZSBzdGF0ZW1lbnQKICogaXMgcm9sbGVkIGJhY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IGZvciB3aGljaCByZXNvdXJjZXMgYXJlIGZyZWVkLgogKiBOb3RlIHRoYXQgTlVMTCBpcyBhIHZhbGlkIHBhcmFtZXRlciB2YWx1ZS4gVGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIGJlCiAqIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHNjcmlwdC4KICogQHRocm93cyBTcWxzcnZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNxbHNydl9mcmVlX3N0bXQoJHN0bXQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X2ZyZWVfc3RtdCgkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEdldHMgZmllbGQgZGF0YSBmcm9tIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93LiBGaWVsZHMgbXVzdCBiZSBhY2Nlc3NlZCBpbgogKiBvcmRlci4gRmllbGQgaW5kaWNlcyBzdGFydCBhdCAwLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgQSBzdGF0ZW1lbnQgcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X3F1ZXJ5IG9yCiAqIHNxbHNydl9leGVjdXRlLgogKiBAcGFyYW0gaW50ICRmaWVsZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgZmllbGQgdG8gYmUgcmV0cmlldmVkLiBGaWVsZCBpbmRpY2VzIHN0YXJ0IGF0IDAuIEZpZWxkcwogKiBtdXN0IGJlIGFjY2Vzc2VkIGluIG9yZGVyLiBpLmUuIElmIHlvdSBhY2Nlc3MgZmllbGQgaW5kZXggMSwgdGhlbiBmaWVsZAogKiBpbmRleCAwIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4KICogQHBhcmFtIGludCAkZ2V0QXNUeXBlIFRoZSBQSFAgZGF0YSB0eXBlIGZvciB0aGUgcmV0dXJuZWQgZmllbGQgZGF0YS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90CiAqIHNldCwgdGhlIGZpZWxkIGRhdGEgd2lsbCBiZSByZXR1cm5lZCBhcyBpdHMgZGVmYXVsdCBQSFAgZGF0YSB0eXBlLgogKiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdCBQSFAgZGF0YSB0eXBlcywgc2VlCiAqIERlZmF1bHQgUEhQIERhdGEgVHlwZXMKICogaW4gdGhlIE1pY3Jvc29mdCBTUUxTUlYgZG9jdW1lbnRhdGlvbi4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIGZpZWxkIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfZ2V0X2ZpZWxkKCRzdG10LCBpbnQgJGZpZWxkSW5kZXgsIGludCAkZ2V0QXNUeXBlID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRnZXRBc1R5cGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNxbHNydl9nZXRfZmllbGQoJHN0bXQsICRmaWVsZEluZGV4LCAkZ2V0QXNUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfZ2V0X2ZpZWxkKCRzdG10LCAkZmllbGRJbmRleCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTWFrZXMgdGhlIG5leHQgcmVzdWx0IG9mIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IGFjdGl2ZS4gUmVzdWx0cyBpbmNsdWRlIHJlc3VsdAogKiBzZXRzLCByb3cgY291bnRzLCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IG9uIHdoaWNoIHRoZSBuZXh0IHJlc3VsdCBpcyBiZWluZyBjYWxsZWQuCiAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiB0aGUgbmV4dCByZXN1bHQgd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQsIEZBTFNFIGlmIGFuIGVycm9yCiAqIG9jY3VycmVkLCBhbmQgTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvIHJldHJpZXZlLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X25leHRfcmVzdWx0KCRzdG10KTogP2Jvb2wKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbmV4dF9yZXN1bHQoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyB0aGUgbnVtYmVyIG9mIGZpZWxkcyAoY29sdW1ucykgb24gYSBzdGF0ZW1lbnQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCBUaGUgc3RhdGVtZW50IGZvciB3aGljaCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpcyByZXR1cm5lZC4KICogc3Fsc3J2X251bV9maWVsZHMgY2FuIGJlIGNhbGxlZCBvbiBhIHN0YXRlbWVudCBiZWZvcmUKICogb3IgYWZ0ZXIgc3RhdGVtZW50IGV4ZWN1dGlvbi4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X251bV9maWVsZHMoJHN0bXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbnVtX2ZpZWxkcygkc3RtdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdCBzZXQuIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUKICogc3RhdGVtZW50IHJlc291cmNlIGJlIGNyZWF0ZWQgd2l0aCBhIHN0YXRpYyBvciBrZXlzZXQgY3Vyc29yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKICogc2VlIHNxbHNydl9xdWVyeSwgc3Fsc3J2X3ByZXBhcmUsCiAqIG9yIFNwZWNpZnlpbmcgYSBDdXJzb3IgVHlwZSBhbmQgU2VsZWN0aW5nIFJvd3MKICogaW4gdGhlIE1pY3Jvc29mdCBTUUxTUlYgZG9jdW1lbnRhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzdG10IFRoZSBzdGF0ZW1lbnQgZm9yIHdoaWNoIHRoZSByb3cgY291bnQgaXMgcmV0dXJuZWQuIFRoZSBzdGF0ZW1lbnQgcmVzb3VyY2UKICogbXVzdCBiZSBjcmVhdGVkIHdpdGggYSBzdGF0aWMgb3Iga2V5c2V0IGN1cnNvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQogKiBzcWxzcnZfcXVlcnksIHNxbHNydl9wcmVwYXJlLCBvcgogKiBTcGVjaWZ5aW5nIGEgQ3Vyc29yIFR5cGUgYW5kIFNlbGVjdGluZyBSb3dzCiAqIGluIHRoZSBNaWNyb3NvZnQgU1FMU1JWIGRvY3VtZW50YXRpb24uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHJldHJpZXZlZCBvbiBzdWNjZXNzLgogKiBJZiBhIGZvcndhcmQgY3Vyc29yICh0aGUgZGVmYXVsdCkgb3IgZHluYW1pYyBjdXJzb3IgaXMgdXNlZCwgRkFMU0UgaXMgcmV0dXJuZWQuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfbnVtX3Jvd3MoJHN0bXQpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzcWxzcnZfbnVtX3Jvd3MoJHN0bXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIGEgcXVlcnkgZm9yIGV4ZWN1dGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBpZGVhbCBmb3IgcHJlcGFyaW5nIGEgcXVlcnkKICogdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciB2YWx1ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBBIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgc3Fsc3J2X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHNxbCBUaGUgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcXVlcnkgdG8gYmUgcHJlcGFyZWQgYW5kIGV4ZWN1dGVkLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBzcGVjaWZ5aW5nIHBhcmFtZXRlciBpbmZvcm1hdGlvbiB3aGVuIGV4ZWN1dGluZyBhIHBhcmFtZXRlcml6ZWQKICogcXVlcnkuIEFycmF5IGVsZW1lbnRzIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKICoKICogQSBsaXRlcmFsIHZhbHVlCiAqIEEgUEhQIHZhcmlhYmxlCiAqIEFuIGFycmF5IHdpdGggdGhpcyBzdHJ1Y3R1cmU6CiAqIGFycmF5KCR2YWx1ZSBbLCAkZGlyZWN0aW9uIFssICRwaHBUeXBlIFssICRzcWxUeXBlXV1dKQogKgogKiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZWxlbWVudHMgaW4gdGhlIGFycmF5IHN0cnVjdHVyZSBhYm92ZToKICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFycmF5IHNwZWNpZnlpbmcgcXVlcnkgcHJvcGVydHkgb3B0aW9ucy4gVGhlIHN1cHBvcnRlZCBrZXlzIGFyZSBkZXNjcmliZWQKICogaW4gdGhlIGZvbGxvd2luZyB0YWJsZToKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgc3RhdGVtZW50IHJlc291cmNlIG9uIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfcHJlcGFyZSgkY29ubiwgc3RyaW5nICRzcWwsIGFycmF5ICRwYXJhbXMgPSBudWxsLCBhcnJheSAkb3B0aW9ucyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkb3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3Fsc3J2X3ByZXBhcmUoJGNvbm4sICRzcWwsICRwYXJhbXMsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcHJlcGFyZSgkY29ubiwgJHNxbCwgJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3Fsc3J2X3ByZXBhcmUoJGNvbm4sICRzcWwpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3Fsc3J2RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFByZXBhcmVzIGFuZCBleGVjdXRlcyBhIHF1ZXJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm4gQSBjb25uZWN0aW9uIHJlc291cmNlIHJldHVybmVkIGJ5IHNxbHNydl9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRzcWwgVGhlIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIHF1ZXJ5IHRvIGJlIHByZXBhcmVkIGFuZCBleGVjdXRlZC4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXJyYXkgc3BlY2lmeWluZyBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gd2hlbiBleGVjdXRpbmcgYSBwYXJhbWV0ZXJpemVkIHF1ZXJ5LgogKiBBcnJheSBlbGVtZW50cyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIEEgbGl0ZXJhbCB2YWx1ZQogKiBBIFBIUCB2YXJpYWJsZQogKiBBbiBhcnJheSB3aXRoIHRoaXMgc3RydWN0dXJlOgogKiBhcnJheSgkdmFsdWUgWywgJGRpcmVjdGlvbiBbLCAkcGhwVHlwZSBbLCAkc3FsVHlwZV1dXSkKICoKICogVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSBzdHJ1Y3R1cmUgYWJvdmU6CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBzcGVjaWZ5aW5nIHF1ZXJ5IHByb3BlcnR5IG9wdGlvbnMuIFRoZSBzdXBwb3J0ZWQga2V5cyBhcmUgZGVzY3JpYmVkCiAqIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0YXRlbWVudCByZXNvdXJjZSBvbiBzdWNjZXNzLgogKiBAdGhyb3dzIFNxbHNydkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3Fsc3J2X3F1ZXJ5KCRjb25uLCBzdHJpbmcgJHNxbCwgYXJyYXkgJHBhcmFtcyA9IG51bGwsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcXVlcnkoJGNvbm4sICRzcWwsICRwYXJhbXMsICRvcHRpb25zKTsKICAgIH0gZWxzZWlmICgkcGFyYW1zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzcWxzcnZfcXVlcnkoJGNvbm4sICRzcWwsICRwYXJhbXMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNxbHNydl9xdWVyeSgkY29ubiwgJHNxbCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTcWxzcnZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgd2FzIGJlZ3VuIHdpdGggc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uCiAqIGFuZCByZXR1cm5zIHRoZSBjb25uZWN0aW9uIHRvIGF1dG8tY29tbWl0IG1vZGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubiBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSBhIGNhbGwgdG8gc3Fsc3J2X2Nvbm5lY3QuCiAqIEB0aHJvd3MgU3Fsc3J2RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzcWxzcnZfcm9sbGJhY2soJGNvbm4pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3Fsc3J2X3JvbGxiYWNrKCRjb25uKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNxbHNydkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ssdeep.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTc2RlZXBFeGNlcHRpb247CgovKioKICogQ2FsY3VsYXRlcyB0aGUgbWF0Y2ggc2NvcmUgYmV0d2VlbiBzaWduYXR1cmUxCiAqIGFuZCBzaWduYXR1cmUyIHVzaW5nCiAqIGNvbnRleHQtdHJpZ2dlcmVkIHBpZWNld2lzZSBoYXNoaW5nLCBhbmQgcmV0dXJucyB0aGUgbWF0Y2gKICogc2NvcmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZTEgVGhlIGZpcnN0IGZ1enp5IGhhc2ggc2lnbmF0dXJlIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlMiBUaGUgc2Vjb25kIGZ1enp5IGhhc2ggc2lnbmF0dXJlIHN0cmluZy4KICogQHJldHVybiBpbnQgUmV0dXJucyBhbiBpbnRlZ2VyIGZyb20gMCB0byAxMDAgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFNzZGVlcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NkZWVwX2Z1enp5X2NvbXBhcmUoc3RyaW5nICRzaWduYXR1cmUxLCBzdHJpbmcgJHNpZ25hdHVyZTIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2RlZXBfZnV6enlfY29tcGFyZSgkc2lnbmF0dXJlMSwgJHNpZ25hdHVyZTIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NkZWVwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lIGNhbGN1bGF0ZXMgdGhlIGhhc2gKICogb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZpbGVfbmFtZSB1c2luZwogKiBjb250ZXh0LXRyaWdnZXJlZCBwaWVjZXdpc2UKICogaGFzaGluZywgYW5kIHJldHVybnMgdGhhdCBoYXNoLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlX25hbWUgVGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGhhc2guCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAdGhyb3dzIFNzZGVlcEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NkZWVwX2Z1enp5X2hhc2hfZmlsZW5hbWUoc3RyaW5nICRmaWxlX25hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2RlZXBfZnV6enlfaGFzaF9maWxlbmFtZSgkZmlsZV9uYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzZGVlcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBzc2RlZXBfZnV6enlfaGFzaCBjYWxjdWxhdGVzIHRoZSBoYXNoIG9mCiAqIHRvX2hhc2ggdXNpbmcKICogY29udGV4dC10cmlnZ2VyZWQgcGllY2V3aXNlIGhhc2hpbmcsIGFuZCByZXR1cm5zIHRoYXQgaGFzaC4KICoKICogQHBhcmFtIHN0cmluZyAkdG9faGFzaCBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4KICogQHRocm93cyBTc2RlZXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzZGVlcF9mdXp6eV9oYXNoKHN0cmluZyAkdG9faGFzaCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzZGVlcF9mdXp6eV9oYXNoKCR0b19oYXNoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzZGVlcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/ssh2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTc2gyRXhjZXB0aW9uOwoKLyoqCiAqIEF1dGhlbnRpY2F0ZSBvdmVyIFNTSCB1c2luZyB0aGUgc3NoIGFnZW50CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgUmVtb3RlIHVzZXIgbmFtZS4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfYWdlbnQoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9hdXRoX2FnZW50KCRzZXNzaW9uLCAkdXNlcm5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXV0aGVudGljYXRlIHVzaW5nIGEgcHVibGljIGhvc3RrZXkgcmVhZCBmcm9tIGEgZmlsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZQogKiBAcGFyYW0gc3RyaW5nICRob3N0bmFtZQogKiBAcGFyYW0gc3RyaW5nICRwdWJrZXlmaWxlCiAqIEBwYXJhbSBzdHJpbmcgJHByaXZrZXlmaWxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgSWYgcHJpdmtleWZpbGUgaXMgZW5jcnlwdGVkICh3aGljaCBpdCBzaG91bGQKICogYmUpLCB0aGUgcGFzc3BocmFzZSBtdXN0IGJlIHByb3ZpZGVkLgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF91c2VybmFtZSBJZiBsb2NhbF91c2VybmFtZSBpcyBvbWl0dGVkLCB0aGVuIHRoZSB2YWx1ZQogKiBmb3IgdXNlcm5hbWUgd2lsbCBiZSB1c2VkIGZvciBpdC4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGUoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkaG9zdG5hbWUsIHN0cmluZyAkcHVia2V5ZmlsZSwgc3RyaW5nICRwcml2a2V5ZmlsZSwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCwgc3RyaW5nICRsb2NhbF91c2VybmFtZSA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbG9jYWxfdXNlcm5hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZSgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkaG9zdG5hbWUsICRwdWJrZXlmaWxlLCAkcHJpdmtleWZpbGUsICRwYXNzcGhyYXNlLCAkbG9jYWxfdXNlcm5hbWUpOwogICAgfSBlbHNlaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJGhvc3RuYW1lLCAkcHVia2V5ZmlsZSwgJHByaXZrZXlmaWxlLCAkcGFzc3BocmFzZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlKCRzZXNzaW9uLCAkdXNlcm5hbWUsICRob3N0bmFtZSwgJHB1YmtleWZpbGUsICRwcml2a2V5ZmlsZSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBdXRoZW50aWNhdGUgb3ZlciBTU0ggdXNpbmcgYSBwbGFpbiBwYXNzd29yZC4gU2luY2UgdmVyc2lvbiAwLjEyIHRoaXMgZnVuY3Rpb24KICogYWxzbyBzdXBwb3J0cyBrZXlib2FyZF9pbnRlcmFjdGl2ZSBtZXRob2QuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgUmVtb3RlIHVzZXIgbmFtZS4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgUGFzc3dvcmQgZm9yIHVzZXJuYW1lCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9hdXRoX3Bhc3N3b3JkKCRzZXNzaW9uLCBzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9wYXNzd29yZCgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQXV0aGVudGljYXRlIHVzaW5nIGEgcHVibGljIGtleSByZWFkIGZyb20gYSBmaWxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNlc3Npb24gQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHB1YmtleWZpbGUgVGhlIHB1YmxpYyBrZXkgZmlsZSBuZWVkcyB0byBiZSBpbiBPcGVuU1NIJ3MgZm9ybWF0LiBJdCBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZToKICoKICogc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUEuLi4uTlg2c3FTbkhBOD0gcnNhLWtleS0yMDEyMTExMAogKiBAcGFyYW0gc3RyaW5nICRwcml2a2V5ZmlsZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIElmIHByaXZrZXlmaWxlIGlzIGVuY3J5cHRlZCAod2hpY2ggaXQgc2hvdWxkCiAqIGJlKSwgdGhlIHBhc3NwaHJhc2UgbXVzdCBiZSBwcm92aWRlZC4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfcHVia2V5X2ZpbGUoJHNlc3Npb24sIHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcHVia2V5ZmlsZSwgc3RyaW5nICRwcml2a2V5ZmlsZSwgc3RyaW5nICRwYXNzcGhyYXNlID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXNzcGhyYXNlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2F1dGhfcHVia2V5X2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJHB1YmtleWZpbGUsICRwcml2a2V5ZmlsZSwgJHBhc3NwaHJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfYXV0aF9wdWJrZXlfZmlsZSgkc2Vzc2lvbiwgJHVzZXJuYW1lLCAkcHVia2V5ZmlsZSwgJHByaXZrZXlmaWxlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgU1NIIHNlcnZlci4KICoKICogT25jZSBjb25uZWN0ZWQsIHRoZSBjbGllbnQgc2hvdWxkIHZlcmlmeSB0aGUgc2VydmVyJ3MgaG9zdGtleSB1c2luZwogKiBzc2gyX2ZpbmdlcnByaW50LCB0aGVuIGF1dGhlbnRpY2F0ZSB1c2luZyBlaXRoZXIKICogcGFzc3dvcmQgb3IgcHVibGljIGtleS4KICoKICogQHBhcmFtIHN0cmluZyAkaG9zdAogKiBAcGFyYW0gaW50ICRwb3J0CiAqIEBwYXJhbSBhcnJheSAkbWV0aG9kcyBtZXRob2RzIG1heSBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHVwIHRvIGZvdXIgcGFyYW1ldGVycwogKiBhcyBkZXNjcmliZWQgYmVsb3cuCiAqCiAqCiAqIG1ldGhvZHMgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIHdpdGggYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqCiAqCiAqCiAqIEluZGV4CiAqIE1lYW5pbmcKICogU3VwcG9ydGVkIFZhbHVlcyoKICoKICoKICoKICoKICoga2V4CiAqCiAqIExpc3Qgb2Yga2V5IGV4Y2hhbmdlIG1ldGhvZHMgdG8gYWR2ZXJ0aXNlLCBjb21tYSBzZXBhcmF0ZWQKICogaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KICoKICoKICogZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEsCiAqIGRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSwgYW5kCiAqIGRpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTEKICoKICoKICoKICogaG9zdGtleQogKgogKiBMaXN0IG9mIGhvc3RrZXkgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbW1hIHNlcGFyYXRlZAogKiBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgogKgogKgogKiBzc2gtcnNhIGFuZAogKiBzc2gtZHNzCiAqCiAqCiAqCiAqIGNsaWVudF90b19zZXJ2ZXIKICoKICogQXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBjcnlwdCwgY29tcHJlc3Npb24sIGFuZAogKiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgKE1BQykgbWV0aG9kIHByZWZlcmVuY2VzCiAqIGZvciBtZXNzYWdlcyBzZW50IGZyb20gY2xpZW50IHRvIHNlcnZlci4KICoKICoKICoKICoKICogc2VydmVyX3RvX2NsaWVudAogKgogKiBBc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGNyeXB0LCBjb21wcmVzc2lvbiwgYW5kCiAqIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSAoTUFDKSBtZXRob2QgcHJlZmVyZW5jZXMKICogZm9yIG1lc3NhZ2VzIHNlbnQgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50LgogKgogKgogKgogKgogKgogKgogKgogKiAqIC0gU3VwcG9ydGVkIFZhbHVlcyBhcmUgZGVwZW5kZW50IG9uIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IHVuZGVybHlpbmcgbGlicmFyeS4KICogU2VlIGxpYnNzaDIgZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbAogKiBpbmZvcm1hdGlvbi4KICoKICoKICoKICogY2xpZW50X3RvX3NlcnZlciBhbmQKICogc2VydmVyX3RvX2NsaWVudCBtYXkgYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICogd2l0aCBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy4KICoKICoKICoKICoKICogSW5kZXgKICogTWVhbmluZwogKiBTdXBwb3J0ZWQgVmFsdWVzKgogKgogKgogKgogKgogKiBjcnlwdAogKiBMaXN0IG9mIGNyeXB0byBtZXRob2RzIHRvIGFkdmVydGlzZSwgY29tbWEgc2VwYXJhdGVkCiAqIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCiAqCiAqIHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSwKICogYWVzMjU2LWNiYywKICogYWVzMTkyLWNiYywKICogYWVzMTI4LWNiYywKICogM2Rlcy1jYmMsCiAqIGJsb3dmaXNoLWNiYywKICogY2FzdDEyOC1jYmMsCiAqIGFyY2ZvdXIsIGFuZAogKiBub25lKioKICoKICoKICoKICogY29tcAogKiBMaXN0IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgdG8gYWR2ZXJ0aXNlLCBjb21tYSBzZXBhcmF0ZWQKICogaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KICoKICogemxpYiBhbmQKICogbm9uZQogKgogKgogKgogKiBtYWMKICogTGlzdCBvZiBNQUMgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbW1hIHNlcGFyYXRlZAogKiBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgogKgogKiBobWFjLXNoYTEsCiAqIGhtYWMtc2hhMS05NiwKICogaG1hYy1yaXBlbWQxNjAsCiAqIGhtYWMtcmlwZW1kMTYwQG9wZW5zc2guY29tLCBhbmQKICogbm9uZSoqCiAqCiAqCiAqCiAqCiAqCiAqCiAqCiAqIENyeXB0IGFuZCBNQUMgbWV0aG9kICJub25lIgogKgogKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgbm9uZSBpcyBkaXNhYmxlZCBieSB0aGUgdW5kZXJseWluZwogKiBsaWJzc2gyIGxpYnJhcnkgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZAogKiBkdXJpbmcgYnVpbGQgdGltZSBieSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgLi9jb25maWd1cmUgb3B0aW9ucy4gIFNlZSBkb2N1bWVudGF0aW9uCiAqIGZvciB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKgogKgogKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgbm9uZSBpcyBkaXNhYmxlZCBieSB0aGUgdW5kZXJseWluZwogKiBsaWJzc2gyIGxpYnJhcnkgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZAogKiBkdXJpbmcgYnVpbGQgdGltZSBieSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgLi9jb25maWd1cmUgb3B0aW9ucy4gIFNlZSBkb2N1bWVudGF0aW9uCiAqIGZvciB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBjYWxsYmFja3MgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggYW55CiAqIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqCiAqCiAqIENhbGxiYWNrcyBwYXJhbWV0ZXJzCiAqCiAqCiAqCiAqCiAqIEluZGV4CiAqIE1lYW5pbmcKICogUHJvdG90eXBlCiAqCiAqCiAqCiAqCiAqIGlnbm9yZQogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19JR05PUkUgcGFja2V0IGlzIHJlY2VpdmVkCiAqCiAqIHZvaWQgaWdub3JlX2NiKCRtZXNzYWdlKQogKgogKgogKiBkZWJ1ZwogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ERUJVRyBwYWNrZXQgaXMgcmVjZWl2ZWQKICoKICogdm9pZCBkZWJ1Z19jYigkbWVzc2FnZSwgJGxhbmd1YWdlLCAkYWx3YXlzX2Rpc3BsYXkpCiAqCiAqCiAqIG1hY2Vycm9yCiAqCiAqIE5hbWUgb2YgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgcGFja2V0IGlzIHJlY2VpdmVkIGJ1dCB0aGUKICogbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGZhaWxlZC4gIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAqIFRSVUUsIHRoZSBtaXNtYXRjaCB3aWxsIGJlIGlnbm9yZWQsIG90aGVyd2lzZSB0aGUgY29ubmVjdGlvbgogKiB3aWxsIGJlIHRlcm1pbmF0ZWQuCiAqCiAqIGJvb2wgbWFjZXJyb3JfY2IoJHBhY2tldCkKICoKICoKICogZGlzY29ubmVjdAogKgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ESVNDT05ORUNUIHBhY2tldCBpcyByZWNlaXZlZAogKgogKiB2b2lkIGRpc2Nvbm5lY3RfY2IoJHJlYXNvbiwgJG1lc3NhZ2UsICRsYW5ndWFnZSkKICoKICoKICoKICoKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2Nvbm5lY3Qoc3RyaW5nICRob3N0LCBpbnQgJHBvcnQgPSAyMiwgYXJyYXkgJG1ldGhvZHMgPSBudWxsLCBhcnJheSAkY2FsbGJhY2tzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFja3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfY29ubmVjdCgkaG9zdCwgJHBvcnQsICRtZXRob2RzLCAkY2FsbGJhY2tzKTsKICAgIH0gZWxzZWlmICgkbWV0aG9kcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9jb25uZWN0KCRob3N0LCAkcG9ydCwgJG1ldGhvZHMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfY29ubmVjdCgkaG9zdCwgJHBvcnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDbG9zZSBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgU1NIIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfZGlzY29ubmVjdCgkc2Vzc2lvbik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX2Rpc2Nvbm5lY3QoJHNlc3Npb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRXhlY3V0ZSBhIGNvbW1hbmQgYXQgdGhlIHJlbW90ZSBlbmQgYW5kIGFsbG9jYXRlIGEgY2hhbm5lbCBmb3IgaXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkY29tbWFuZAogKiBAcGFyYW0gc3RyaW5nICRwdHkKICogQHBhcmFtIGFycmF5ICRlbnYgZW52IG1heSBiZSBwYXNzZWQgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YKICogbmFtZS92YWx1ZSBwYWlycyB0byBzZXQgaW4gdGhlIHRhcmdldCBlbnZpcm9ubWVudC4KICogQHBhcmFtIGludCAkd2lkdGggV2lkdGggb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIEBwYXJhbSBpbnQgJGhlaWdodCBIZWlnaHQgb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIEBwYXJhbSBpbnQgJHdpZHRoX2hlaWdodF90eXBlIHdpZHRoX2hlaWdodF90eXBlIHNob3VsZCBiZSBvbmUgb2YKICogU1NIMl9URVJNX1VOSVRfQ0hBUlMgb3IKICogU1NIMl9URVJNX1VOSVRfUElYRUxTLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSBzdHJlYW0gb24gc3VjY2Vzcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX2V4ZWMoJHNlc3Npb24sIHN0cmluZyAkY29tbWFuZCwgc3RyaW5nICRwdHkgPSBudWxsLCBhcnJheSAkZW52ID0gbnVsbCwgaW50ICR3aWR0aCA9IDgwLCBpbnQgJGhlaWdodCA9IDI1LCBpbnQgJHdpZHRoX2hlaWdodF90eXBlID0gU1NIMl9URVJNX1VOSVRfQ0hBUlMpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkd2lkdGhfaGVpZ2h0X3R5cGUgIT09IFNTSDJfVEVSTV9VTklUX0NIQVJTKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5LCAkZW52LCAkd2lkdGgsICRoZWlnaHQsICR3aWR0aF9oZWlnaHRfdHlwZSk7CiAgICB9IGVsc2VpZiAoJGhlaWdodCAhPT0gMjUpIHsKICAgICAgICAkcmVzdWx0ID0gXHNzaDJfZXhlYygkc2Vzc2lvbiwgJGNvbW1hbmQsICRwdHksICRlbnYsICR3aWR0aCwgJGhlaWdodCk7CiAgICB9IGVsc2VpZiAoJHdpZHRoICE9PSA4MCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9leGVjKCRzZXNzaW9uLCAkY29tbWFuZCwgJHB0eSwgJGVudiwgJHdpZHRoKTsKICAgIH0gZWxzZWlmICgkZW52ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5LCAkZW52KTsKICAgIH0gZWxzZWlmICgkcHR5ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICoKICoKICogQHBhcmFtIHJlc291cmNlICRwa2V5IFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgY3JlYXRlZCBieSBzc2gyX3B1YmxpY2tleV9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRhbGdvbmFtZSBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiBAcGFyYW0gc3RyaW5nICRibG9iIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiBAcGFyYW0gYm9vbCAkb3ZlcndyaXRlIElmIHRoZSBzcGVjaWZpZWQga2V5IGFscmVhZHkgZXhpc3RzLCBzaG91bGQgaXQgYmUgb3ZlcndyaXR0ZW4/CiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyBBc3NvY2lhdGl2ZSBhcnJheSBvZiBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGlzIHB1YmxpYyBrZXkuCiAqIFJlZmVyIHRvIGlldGYtc2Vjc2gtcHVibGlja2V5LXN1YnN5c3RlbSBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBhdHRyaWJ1dGVzLgogKiBUbyBtYXJrIGFuIGF0dHJpYnV0ZSBhcyBtYW5kYXRvcnksIHByZWNlZGUgaXRzIG5hbWUgd2l0aCBhbiBhc3Rlcmlzay4KICogSWYgdGhlIHNlcnZlciBpcyB1bmFibGUgdG8gc3VwcG9ydCBhbiBhdHRyaWJ1dGUgbWFya2VkIG1hbmRhdG9yeSwKICogaXQgd2lsbCBhYm9ydCB0aGUgYWRkIHByb2Nlc3MuCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCBzdHJpbmcgJGFsZ29uYW1lLCBzdHJpbmcgJGJsb2IsIGJvb2wgJG92ZXJ3cml0ZSA9IGZhbHNlLCBhcnJheSAkYXR0cmlidXRlcyA9IG51bGwpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkYXR0cmlidXRlcyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCAkYWxnb25hbWUsICRibG9iLCAkb3ZlcndyaXRlLCAkYXR0cmlidXRlcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3NoMl9wdWJsaWNrZXlfYWRkKCRwa2V5LCAkYWxnb25hbWUsICRibG9iLCAkb3ZlcndyaXRlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlcXVlc3QgdGhlIFB1YmxpY2tleSBzdWJzeXN0ZW0gZnJvbSBhbiBhbHJlYWR5IGNvbm5lY3RlZCBTU0gyIHNlcnZlci4KICoKICogVGhlIHB1YmxpY2tleSBzdWJzeXN0ZW0gYWxsb3dzIGFuIGFscmVhZHkgY29ubmVjdGVkIGFuZCBhdXRoZW50aWNhdGVkCiAqIGNsaWVudCB0byBtYW5hZ2UgdGhlIGxpc3Qgb2YgYXV0aG9yaXplZCBwdWJsaWMga2V5cyBzdG9yZWQgb24gdGhlCiAqIHRhcmdldCBzZXJ2ZXIgaW4gYW4gaW1wbGVtZW50YXRpb24gYWdub3N0aWMgbWFubmVyLgogKiBJZiB0aGUgcmVtb3RlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBwdWJsaWNrZXkgc3Vic3lzdGVtLAogKiB0aGUgc3NoMl9wdWJsaWNrZXlfaW5pdCBmdW5jdGlvbiB3aWxsIHJldHVybiBGQUxTRS4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBTU0gyIFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgZm9yIHVzZQogKiB3aXRoIGFsbCBvdGhlciBzc2gyX3B1YmxpY2tleV8qKCkgbWV0aG9kcy4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3B1YmxpY2tleV9pbml0KCRzZXNzaW9uKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfcHVibGlja2V5X2luaXQoJHNlc3Npb24pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZW1vdmVzIGFuIGF1dGhvcml6ZWQgcHVibGlja2V5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBrZXkgUHVibGlja2V5IFN1YnN5c3RlbSBSZXNvdXJjZQogKiBAcGFyYW0gc3RyaW5nICRhbGdvbmFtZSBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiBAcGFyYW0gc3RyaW5nICRibG9iIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfcHVibGlja2V5X3JlbW92ZSgkcGtleSwgc3RyaW5nICRhbGdvbmFtZSwgc3RyaW5nICRibG9iKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfcHVibGlja2V5X3JlbW92ZSgkcGtleSwgJGFsZ29uYW1lLCAkYmxvYik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgZmlsZSBmcm9tIHRoZSByZW1vdGUgc2VydmVyIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHVzaW5nIHRoZSBTQ1AgcHJvdG9jb2wuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX2ZpbGUgUGF0aCB0byB0aGUgcmVtb3RlIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsX2ZpbGUgUGF0aCB0byB0aGUgbG9jYWwgZmlsZS4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NjcF9yZWN2KCRzZXNzaW9uLCBzdHJpbmcgJHJlbW90ZV9maWxlLCBzdHJpbmcgJGxvY2FsX2ZpbGUpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9zY3BfcmVjdigkc2Vzc2lvbiwgJHJlbW90ZV9maWxlLCAkbG9jYWxfZmlsZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBDb3B5IGEgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHRvIHRoZSByZW1vdGUgc2VydmVyIHVzaW5nIHRoZSBTQ1AgcHJvdG9jb2wuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxfZmlsZSBQYXRoIHRvIHRoZSBsb2NhbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRyZW1vdGVfZmlsZSBQYXRoIHRvIHRoZSByZW1vdGUgZmlsZS4KICogQHBhcmFtIGludCAkY3JlYXRlX21vZGUgVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIG1vZGUgc3BlY2lmaWVkIGJ5CiAqIGNyZWF0ZV9tb2RlLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2NwX3NlbmQoJHNlc3Npb24sIHN0cmluZyAkbG9jYWxfZmlsZSwgc3RyaW5nICRyZW1vdGVfZmlsZSwgaW50ICRjcmVhdGVfbW9kZSA9IDA2NDQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3NoMl9zY3Bfc2VuZCgkc2Vzc2lvbiwgJGxvY2FsX2ZpbGUsICRyZW1vdGVfZmlsZSwgJGNyZWF0ZV9tb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEF0dGVtcHRzIHRvIGNoYW5nZSB0aGUgbW9kZSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgdG8gdGhhdCBnaXZlbiBpbgogKiBtb2RlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBpbnQgJG1vZGUgUGVybWlzc2lvbnMgb24gdGhlIGZpbGUuIFNlZSB0aGUgY2htb2QgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIHBhcmFtZXRlci4KICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfY2htb2QoJHNmdHAsIHN0cmluZyAkZmlsZW5hbWUsIGludCAkbW9kZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfY2htb2QoJHNmdHAsICRmaWxlbmFtZSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIGRpcmVjdG9yeSBvbiB0aGUgcmVtb3RlIGZpbGUgc2VydmVyIHdpdGggcGVybWlzc2lvbnMgc2V0IHRvCiAqIG1vZGUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB1c2luZyBta2RpciB3aXRoIHRoZQogKiBzc2gyLnNmdHA6Ly8gd3JhcHBlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZnRwIEFuIFNTSDIgU0ZUUCByZXNvdXJjZSBvcGVuZWQgYnkgc3NoMl9zZnRwLgogKiBAcGFyYW0gc3RyaW5nICRkaXJuYW1lIFBhdGggb2YgdGhlIG5ldyBkaXJlY3RvcnkuCiAqIEBwYXJhbSBpbnQgJG1vZGUgUGVybWlzc2lvbnMgb24gdGhlIG5ldyBkaXJlY3RvcnkuCiAqIEBwYXJhbSBib29sICRyZWN1cnNpdmUgSWYgcmVjdXJzaXZlIGlzIFRSVUUgYW55IHBhcmVudCBkaXJlY3RvcmllcwogKiByZXF1aXJlZCBmb3IgZGlybmFtZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhcyB3ZWxsLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9ta2Rpcigkc2Z0cCwgc3RyaW5nICRkaXJuYW1lLCBpbnQgJG1vZGUgPSAwNzc3LCBib29sICRyZWN1cnNpdmUgPSBmYWxzZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfbWtkaXIoJHNmdHAsICRkaXJuYW1lLCAkbW9kZSwgJHJlY3Vyc2l2ZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW5hbWVzIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGZpbGVzeXN0ZW0uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCBBbiBTU0gyIFNGVFAgcmVzb3VyY2Ugb3BlbmVkIGJ5IHNzaDJfc2Z0cC4KICogQHBhcmFtIHN0cmluZyAkZnJvbSBUaGUgY3VycmVudCBmaWxlIHRoYXQgaXMgYmVpbmcgcmVuYW1lZC4KICogQHBhcmFtIHN0cmluZyAkdG8gVGhlIG5ldyBmaWxlIG5hbWUgdGhhdCByZXBsYWNlcyBmcm9tLgogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9yZW5hbWUoJHNmdHAsIHN0cmluZyAkZnJvbSwgc3RyaW5nICR0byk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfcmVuYW1lKCRzZnRwLCAkZnJvbSwgJHRvKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNzaDJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJlbW92ZXMgYSBkaXJlY3RvcnkgZnJvbSB0aGUgcmVtb3RlIGZpbGUgc2VydmVyLgogKgogKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdXNpbmcgcm1kaXIgd2l0aCB0aGUKICogc3NoMi5zZnRwOi8vIHdyYXBwZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCBBbiBTU0gyIFNGVFAgcmVzb3VyY2Ugb3BlbmVkIGJ5IHNzaDJfc2Z0cC4KICogQHBhcmFtIHN0cmluZyAkZGlybmFtZQogKiBAdGhyb3dzIFNzaDJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9ybWRpcigkc2Z0cCwgc3RyaW5nICRkaXJuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfc2Z0cF9ybWRpcigkc2Z0cCwgJGRpcm5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgbmFtZWQgbGluayBvbiB0aGUgcmVtb3RlCiAqIGZpbGVzeXN0ZW0gcG9pbnRpbmcgdG8gdGFyZ2V0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldCBUYXJnZXQgb2YgdGhlIHN5bWJvbGljIGxpbmsuCiAqIEBwYXJhbSBzdHJpbmcgJGxpbmsKICogQHRocm93cyBTc2gyRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfc3ltbGluaygkc2Z0cCwgc3RyaW5nICR0YXJnZXQsIHN0cmluZyAkbGluayk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfc3ltbGluaygkc2Z0cCwgJHRhcmdldCwgJGxpbmspOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBmaWxlc3lzdGVtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3VubGluaygkc2Z0cCwgc3RyaW5nICRmaWxlbmFtZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzc2gyX3NmdHBfdW5saW5rKCRzZnRwLCAkZmlsZW5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3NoMkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVxdWVzdCB0aGUgU0ZUUCBzdWJzeXN0ZW0gZnJvbSBhbiBhbHJlYWR5IGNvbm5lY3RlZCBTU0gyIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiBAcmV0dXJuIHJlc291cmNlIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gU1NIMiBTRlRQIHJlc291cmNlIGZvciB1c2Ugd2l0aAogKiBhbGwgb3RoZXIgc3NoMl9zZnRwXyooKSBtZXRob2RzIGFuZCB0aGUKICogc3NoMi5zZnRwOi8vIGZvcGVuIHdyYXBwZXIuCiAqIEB0aHJvd3MgU3NoMkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwKCRzZXNzaW9uKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNzaDJfc2Z0cCgkc2Vzc2lvbik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTc2gyRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdHJlYW1FeGNlcHRpb247CgovKioKICogU2V0cyBwYXJhbWV0ZXJzIG9uIHRoZSBzcGVjaWZpZWQgY29udGV4dC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW1fb3JfY29udGV4dCBUaGUgc3RyZWFtIG9yIGNvbnRleHQgdG8gYXBwbHkgdGhlIHBhcmFtZXRlcnMgdG9vLgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRvIHNldC4KICoKICogcGFyYW1zIHNob3VsZCBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB0aGUgc3RydWN0dXJlOgogKiAkcGFyYW1zWydwYXJhbW5hbWUnXSA9ICJwYXJhbXZhbHVlIjsuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zKCRzdHJlYW1fb3JfY29udGV4dCwgYXJyYXkgJHBhcmFtcyk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zKCRzdHJlYW1fb3JfY29udGV4dCwgJHBhcmFtcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIE1ha2VzIGEgY29weSBvZiB1cCB0byBtYXhsZW5ndGggYnl0ZXMKICogb2YgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIChvciBmcm9tIHRoZQogKiBvZmZzZXQgcG9zaXRpb24sIGlmIHNwZWNpZmllZCkgaW4KICogc291cmNlIHRvIGRlc3QuIElmCiAqIG1heGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBhbGwgcmVtYWluaW5nIGNvbnRlbnQgaW4KICogc291cmNlIHdpbGwgYmUgY29waWVkLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHNvdXJjZSBUaGUgc291cmNlIHN0cmVhbQogKiBAcGFyYW0gcmVzb3VyY2UgJGRlc3QgVGhlIGRlc3RpbmF0aW9uIHN0cmVhbQogKiBAcGFyYW0gaW50ICRtYXhsZW5ndGggTWF4aW11bSBieXRlcyB0byBjb3B5CiAqIEBwYXJhbSBpbnQgJG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRvIHN0YXJ0IHRvIGNvcHkgZGF0YQogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSB0b3RhbCBjb3VudCBvZiBieXRlcyBjb3BpZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fY29weV90b19zdHJlYW0oJHNvdXJjZSwgJGRlc3QsIGludCAkbWF4bGVuZ3RoID0gLTEsIGludCAkb2Zmc2V0ID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkc291cmNlLCAkZGVzdCwgJG1heGxlbmd0aCwgJG9mZnNldCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQWRkcyBmaWx0ZXJuYW1lIHRvIHRoZSBsaXN0IG9mIGZpbHRlcnMKICogYXR0YWNoZWQgdG8gc3RyZWFtLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgdGFyZ2V0IHN0cmVhbS4KICogQHBhcmFtIHN0cmluZyAkZmlsdGVybmFtZSBUaGUgZmlsdGVyIG5hbWUuCiAqIEBwYXJhbSBpbnQgJHJlYWRfd3JpdGUgQnkgZGVmYXVsdCwgc3RyZWFtX2ZpbHRlcl9hcHBlbmQgd2lsbAogKiBhdHRhY2ggdGhlIGZpbHRlciB0byB0aGUgcmVhZCBmaWx0ZXIgY2hhaW4KICogaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3IgcmVhZGluZyAoaS5lLiBGaWxlIE1vZGU6CiAqIHIsIGFuZC9vciArKS4gIFRoZSBmaWx0ZXIKICogd2lsbCBhbHNvIGJlIGF0dGFjaGVkIHRvIHRoZSB3cml0ZSBmaWx0ZXIgY2hhaW4KICogaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3Igd3JpdGluZyAoaS5lLiBGaWxlIE1vZGU6CiAqIHcsIGEsIGFuZC9vciArKS4KICogU1RSRUFNX0ZJTFRFUl9SRUFELAogKiBTVFJFQU1fRklMVEVSX1dSSVRFLCBhbmQvb3IKICogU1RSRUFNX0ZJTFRFUl9BTEwgY2FuIGFsc28gYmUgcGFzc2VkIHRvIHRoZQogKiByZWFkX3dyaXRlIHBhcmFtZXRlciB0byBvdmVycmlkZSB0aGlzIGJlaGF2aW9yLgogKiBAcGFyYW0gbWl4ZWQgJHBhcmFtcyBUaGlzIGZpbHRlciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIHNwZWNpZmllZAogKiBwYXJhbXMgdG8gdGhlIGVuZCBvZgogKiB0aGUgbGlzdCBhbmQgd2lsbCB0aGVyZWZvcmUgYmUgY2FsbGVkIGxhc3QgZHVyaW5nIHN0cmVhbSBvcGVyYXRpb25zLgogKiBUbyBhZGQgYSBmaWx0ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCwgdXNlCiAqIHN0cmVhbV9maWx0ZXJfcHJlcGVuZC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcy4gVGhlIHJlc291cmNlIGNhbiBiZQogKiB1c2VkIHRvIHJlZmVyIHRvIHRoaXMgZmlsdGVyIGluc3RhbmNlIGR1cmluZyBhIGNhbGwgdG8KICogc3RyZWFtX2ZpbHRlcl9yZW1vdmUuCiAqCiAqIEZBTFNFIGlzIHJldHVybmVkIGlmIHN0cmVhbSBpcyBub3QgYSByZXNvdXJjZSBvcgogKiBpZiBmaWx0ZXJuYW1lIGNhbm5vdCBiZSBsb2NhdGVkLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHN0cmVhbSwgc3RyaW5nICRmaWx0ZXJuYW1lLCBpbnQgJHJlYWRfd3JpdGUgPSBudWxsLCAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfYXBwZW5kKCRzdHJlYW0sICRmaWx0ZXJuYW1lLCAkcmVhZF93cml0ZSwgJHBhcmFtcyk7CiAgICB9IGVsc2VpZiAoJHJlYWRfd3JpdGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfYXBwZW5kKCRzdHJlYW0sICRmaWx0ZXJuYW1lLCAkcmVhZF93cml0ZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEFkZHMgZmlsdGVybmFtZSB0byB0aGUgbGlzdCBvZiBmaWx0ZXJzCiAqIGF0dGFjaGVkIHRvIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0gVGhlIHRhcmdldCBzdHJlYW0uCiAqIEBwYXJhbSBzdHJpbmcgJGZpbHRlcm5hbWUgVGhlIGZpbHRlciBuYW1lLgogKiBAcGFyYW0gaW50ICRyZWFkX3dyaXRlIEJ5IGRlZmF1bHQsIHN0cmVhbV9maWx0ZXJfcHJlcGVuZCB3aWxsCiAqIGF0dGFjaCB0aGUgZmlsdGVyIHRvIHRoZSByZWFkIGZpbHRlciBjaGFpbgogKiBpZiB0aGUgZmlsZSB3YXMgb3BlbmVkIGZvciByZWFkaW5nIChpLmUuIEZpbGUgTW9kZToKICogciwgYW5kL29yICspLiAgVGhlIGZpbHRlcgogKiB3aWxsIGFsc28gYmUgYXR0YWNoZWQgdG8gdGhlIHdyaXRlIGZpbHRlciBjaGFpbgogKiBpZiB0aGUgZmlsZSB3YXMgb3BlbmVkIGZvciB3cml0aW5nIChpLmUuIEZpbGUgTW9kZToKICogdywgYSwgYW5kL29yICspLgogKiBTVFJFQU1fRklMVEVSX1JFQUQsCiAqIFNUUkVBTV9GSUxURVJfV1JJVEUsIGFuZC9vcgogKiBTVFJFQU1fRklMVEVSX0FMTCBjYW4gYWxzbyBiZSBwYXNzZWQgdG8gdGhlCiAqIHJlYWRfd3JpdGUgcGFyYW1ldGVyIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuCiAqIFNlZSBzdHJlYW1fZmlsdGVyX2FwcGVuZCBmb3IgYW4gZXhhbXBsZSBvZgogKiB1c2luZyB0aGlzIHBhcmFtZXRlci4KICogQHBhcmFtIG1peGVkICRwYXJhbXMgVGhpcyBmaWx0ZXIgd2lsbCBiZSBhZGRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1zCiAqIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYW5kIHdpbGwgdGhlcmVmb3JlIGJlCiAqIGNhbGxlZCBmaXJzdCBkdXJpbmcgc3RyZWFtIG9wZXJhdGlvbnMuICBUbyBhZGQgYSBmaWx0ZXIgdG8gdGhlIGVuZCBvZiB0aGUKICogbGlzdCwgdXNlIHN0cmVhbV9maWx0ZXJfYXBwZW5kLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBvbiBzdWNjZXNzLiBUaGUgcmVzb3VyY2UgY2FuIGJlCiAqIHVzZWQgdG8gcmVmZXIgdG8gdGhpcyBmaWx0ZXIgaW5zdGFuY2UgZHVyaW5nIGEgY2FsbCB0bwogKiBzdHJlYW1fZmlsdGVyX3JlbW92ZS4KICoKICogRkFMU0UgaXMgcmV0dXJuZWQgaWYgc3RyZWFtIGlzIG5vdCBhIHJlc291cmNlIG9yCiAqIGlmIGZpbHRlcm5hbWUgY2Fubm90IGJlIGxvY2F0ZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgc3RyaW5nICRmaWx0ZXJuYW1lLCBpbnQgJHJlYWRfd3JpdGUgPSBudWxsLCAkcGFyYW1zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRwYXJhbXMgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfcHJlcGVuZCgkc3RyZWFtLCAkZmlsdGVybmFtZSwgJHJlYWRfd3JpdGUsICRwYXJhbXMpOwogICAgfSBlbHNlaWYgKCRyZWFkX3dyaXRlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUsICRyZWFkX3dyaXRlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3ByZXBlbmQoJHN0cmVhbSwgJGZpbHRlcm5hbWUpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXIgYWxsb3dzIHlvdSB0byBpbXBsZW1lbnQKICogeW91ciBvd24gZmlsdGVyIG9uIGFueSByZWdpc3RlcmVkIHN0cmVhbSB1c2VkIHdpdGggYWxsIHRoZSBvdGhlcgogKiBmaWxlc3lzdGVtIGZ1bmN0aW9ucyAoc3VjaCBhcyBmb3BlbiwKICogZnJlYWQgZXRjLikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbHRlcm5hbWUgVGhlIGZpbHRlciBuYW1lIHRvIGJlIHJlZ2lzdGVyZWQuCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzbmFtZSBUbyBpbXBsZW1lbnQgYSBmaWx0ZXIsIHlvdSBuZWVkIHRvIGRlZmluZSBhIGNsYXNzIGFzIGFuIGV4dGVuc2lvbiBvZgogKiBwaHBfdXNlcl9maWx0ZXIgd2l0aCBhIG51bWJlciBvZiBtZW1iZXIKICogZnVuY3Rpb25zLiBXaGVuIHBlcmZvcm1pbmcgcmVhZC93cml0ZSBvcGVyYXRpb25zIG9uIHRoZSBzdHJlYW0KICogdG8gd2hpY2ggeW91ciBmaWx0ZXIgaXMgYXR0YWNoZWQsIFBIUCB3aWxsIHBhc3MgdGhlIGRhdGEgdGhyb3VnaCB5b3VyCiAqIGZpbHRlciAoYW5kIGFueSBvdGhlciBmaWx0ZXJzIGF0dGFjaGVkIHRvIHRoYXQgc3RyZWFtKSBzbyB0aGF0IHRoZQogKiBkYXRhIG1heSBiZSBtb2RpZmllZCBhcyBkZXNpcmVkLiBZb3UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZHMKICogZXhhY3RseSBhcyBkZXNjcmliZWQgaW4gcGhwX3VzZXJfZmlsdGVyIC0gZG9pbmcKICogb3RoZXJ3aXNlIHdpbGwgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcihzdHJpbmcgJGZpbHRlcm5hbWUsIHN0cmluZyAkY2xhc3NuYW1lKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXIoJGZpbHRlcm5hbWUsICRjbGFzc25hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZW1vdmVzIGEgc3RyZWFtIGZpbHRlciBwcmV2aW91c2x5IGFkZGVkIHRvIGEgc3RyZWFtIHdpdGgKICogc3RyZWFtX2ZpbHRlcl9wcmVwZW5kIG9yCiAqIHN0cmVhbV9maWx0ZXJfYXBwZW5kLiAgQW55IGRhdGEgcmVtYWluaW5nIGluIHRoZQogKiBmaWx0ZXIncyBpbnRlcm5hbCBidWZmZXIgd2lsbCBiZSBmbHVzaGVkIHRocm91Z2ggdG8gdGhlIG5leHQgZmlsdGVyIGJlZm9yZQogKiByZW1vdmluZyBpdC4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW1fZmlsdGVyIFRoZSBzdHJlYW0gZmlsdGVyIHRvIGJlIHJlbW92ZWQuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZmlsdGVyX3JlbW92ZSgkc3RyZWFtX2ZpbHRlcik6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fZmlsdGVyX3JlbW92ZSgkc3RyZWFtX2ZpbHRlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIElkZW50aWNhbCB0byBmaWxlX2dldF9jb250ZW50cywgZXhjZXB0IHRoYXQKICogc3RyZWFtX2dldF9jb250ZW50cyBvcGVyYXRlcyBvbiBhbiBhbHJlYWR5IG9wZW4KICogc3RyZWFtIHJlc291cmNlIGFuZCByZXR1cm5zIHRoZSByZW1haW5pbmcgY29udGVudHMgaW4gYSBzdHJpbmcsIHVwIHRvCiAqIG1heGxlbmd0aCBieXRlcyBhbmQgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZAogKiBvZmZzZXQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGFuZGxlIEEgc3RyZWFtIHJlc291cmNlIChlLmcuIHJldHVybmVkIGZyb20gZm9wZW4pCiAqIEBwYXJhbSBpbnQgJG1heGxlbmd0aCBUaGUgbWF4aW11bSBieXRlcyB0byByZWFkLiBEZWZhdWx0cyB0byAtMSAocmVhZCBhbGwgdGhlIHJlbWFpbmluZwogKiBidWZmZXIpLgogKiBAcGFyYW0gaW50ICRvZmZzZXQgU2VlayB0byB0aGUgc3BlY2lmaWVkIG9mZnNldCBiZWZvcmUgcmVhZGluZy4gSWYgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUsCiAqIG5vIHNlZWtpbmcgd2lsbCBvY2N1ciBhbmQgcmVhZGluZyB3aWxsIHN0YXJ0IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRoYW5kbGUsIGludCAkbWF4bGVuZ3RoID0gLTEsIGludCAkb2Zmc2V0ID0gLTEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fZ2V0X2NvbnRlbnRzKCRoYW5kbGUsICRtYXhsZW5ndGgsICRvZmZzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERldGVybWluZXMgaWYgc3RyZWFtIHN0cmVhbSByZWZlcnMgdG8gYSB2YWxpZCB0ZXJtaW5hbCB0eXBlIGRldmljZS4KICogVGhpcyBpcyBhIG1vcmUgcG9ydGFibGUgdmVyc2lvbiBvZiBwb3NpeF9pc2F0dHksIHNpbmNlIGl0IHdvcmtzIG9uIFdpbmRvd3Mgc3lzdGVtcyB0b28uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1faXNhdHR5KCRzdHJlYW0pOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX2lzYXR0eSgkc3RyZWFtKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVzb2x2ZSBmaWxlbmFtZSBhZ2FpbnN0IHRoZSBpbmNsdWRlIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIGZvcGVuL2luY2x1ZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byByZXNvbHZlLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIGFic29sdXRlIGZpbGVuYW1lLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKHN0cmluZyAkZmlsZW5hbWUpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoJGZpbGVuYW1lKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTZXRzIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBtb2RlIG9uIGEgc3RyZWFtLgogKgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGZvciBhbnkgc3RyZWFtIHRoYXQgc3VwcG9ydHMgbm9uLWJsb2NraW5nIG1vZGUKICogKGN1cnJlbnRseSwgcmVndWxhciBmaWxlcyBhbmQgc29ja2V0IHN0cmVhbXMpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSBUaGUgc3RyZWFtLgogKiBAcGFyYW0gYm9vbCAkbW9kZSBJZiBtb2RlIGlzIEZBTFNFLCB0aGUgZ2l2ZW4gc3RyZWFtCiAqIHdpbGwgYmUgc3dpdGNoZWQgdG8gbm9uLWJsb2NraW5nIG1vZGUsIGFuZCBpZiBUUlVFLCBpdAogKiB3aWxsIGJlIHN3aXRjaGVkIHRvIGJsb2NraW5nIG1vZGUuICBUaGlzIGFmZmVjdHMgY2FsbHMgbGlrZQogKiBmZ2V0cyBhbmQgZnJlYWQKICogdGhhdCByZWFkIGZyb20gdGhlIHN0cmVhbS4gIEluIG5vbi1ibG9ja2luZyBtb2RlIGFuCiAqIGZnZXRzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHJpZ2h0IGF3YXkKICogd2hpbGUgaW4gYmxvY2tpbmcgbW9kZSBpdCB3aWxsIHdhaXQgZm9yIGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZQogKiBvbiB0aGUgc3RyZWFtLgogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3NldF9ibG9ja2luZygkc3RyZWFtLCBib29sICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zZXRfYmxvY2tpbmcoJHN0cmVhbSwgJG1vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBTZXRzIHRoZSB0aW1lb3V0IHZhbHVlIG9uIHN0cmVhbSwKICogZXhwcmVzc2VkIGluIHRoZSBzdW0gb2Ygc2Vjb25kcyBhbmQKICogbWljcm9zZWNvbmRzLgogKgogKiBXaGVuIHRoZSBzdHJlYW0gdGltZXMgb3V0LCB0aGUgJ3RpbWVkX291dCcga2V5IG9mIHRoZSBhcnJheSByZXR1cm5lZCBieQogKiBzdHJlYW1fZ2V0X21ldGFfZGF0YSBpcyBzZXQgdG8gVFJVRSwgYWx0aG91Z2ggbm8KICogZXJyb3Ivd2FybmluZyBpcyBnZW5lcmF0ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSB0YXJnZXQgc3RyZWFtLgogKiBAcGFyYW0gaW50ICRzZWNvbmRzIFRoZSBzZWNvbmRzIHBhcnQgb2YgdGhlIHRpbWVvdXQgdG8gYmUgc2V0LgogKiBAcGFyYW0gaW50ICRtaWNyb3NlY29uZHMgVGhlIG1pY3Jvc2Vjb25kcyBwYXJ0IG9mIHRoZSB0aW1lb3V0IHRvIGJlIHNldC4KICogQHRocm93cyBTdHJlYW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0cmVhbV9zZXRfdGltZW91dCgkc3RyZWFtLCBpbnQgJHNlY29uZHMsIGludCAkbWljcm9zZWNvbmRzID0gMCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fc2V0X3RpbWVvdXQoJHN0cmVhbSwgJHNlY29uZHMsICRtaWNyb3NlY29uZHMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0IHByZXZpb3VzbHkgY3JlYXRlZCBieQogKiBzdHJlYW1fc29ja2V0X3NlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRzZXJ2ZXJfc29ja2V0IFRoZSBzZXJ2ZXIgc29ja2V0IHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbS4KICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNvY2tldCBhY2NlcHQgdGltZW91dC4gVGltZSBzaG91bGQgYmUgZ2l2ZW4gaW4KICogc2Vjb25kcy4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwZWVybmFtZSBXaWxsIGJlIHNldCB0byB0aGUgbmFtZSAoYWRkcmVzcykgb2YgdGhlIGNsaWVudCB3aGljaCBjb25uZWN0ZWQsIGlmCiAqIGluY2x1ZGVkIGFuZCBhdmFpbGFibGUgZnJvbSB0aGUgc2VsZWN0ZWQgdHJhbnNwb3J0LgogKgogKiBDYW4gYWxzbyBiZSBkZXRlcm1pbmVkIGxhdGVyIHVzaW5nCiAqIHN0cmVhbV9zb2NrZXRfZ2V0X25hbWUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHN0cmVhbSB0byB0aGUgYWNjZXB0ZWQgc29ja2V0IGNvbm5lY3Rpb24uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X2FjY2VwdCgkc2VydmVyX3NvY2tldCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsLCA/c3RyaW5nICYkcGVlcm5hbWUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBlZXJuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X2FjY2VwdCgkc2VydmVyX3NvY2tldCwgJHRpbWVvdXQsICRwZWVybmFtZSk7CiAgICB9IGVsc2VpZiAoJHRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfYWNjZXB0KCRzZXJ2ZXJfc29ja2V0LCAkdGltZW91dCk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9hY2NlcHQoJHNlcnZlcl9zb2NrZXQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluaXRpYXRlcyBhIHN0cmVhbSBvciBkYXRhZ3JhbSBjb25uZWN0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbiBzcGVjaWZpZWQKICogYnkgcmVtb3RlX3NvY2tldC4gIFRoZSB0eXBlIG9mIHNvY2tldCBjcmVhdGVkCiAqIGlzIGRldGVybWluZWQgYnkgdGhlIHRyYW5zcG9ydCBzcGVjaWZpZWQgdXNpbmcgc3RhbmRhcmQgVVJMIGZvcm1hdHRpbmc6CiAqIHRyYW5zcG9ydDovL3RhcmdldC4gIEZvciBJbnRlcm5ldCBEb21haW4gc29ja2V0cwogKiAoQUZfSU5FVCkgc3VjaCBhcyBUQ1AgYW5kIFVEUCwgdGhlIHRhcmdldCBwb3J0aW9uCiAqIG9mIHRoZSByZW1vdGVfc29ja2V0IHBhcmFtZXRlciBzaG91bGQgY29uc2lzdCBvZgogKiBhIGhvc3RuYW1lIG9yIElQIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBjb2xvbiBhbmQgYSBwb3J0IG51bWJlci4gIEZvciBVbml4CiAqIGRvbWFpbiBzb2NrZXRzLCB0aGUgdGFyZ2V0IHBvcnRpb24gc2hvdWxkIHBvaW50CiAqIHRvIHRoZSBzb2NrZXQgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbS4KICoKICogQHBhcmFtIHN0cmluZyAkcmVtb3RlX3NvY2tldCBBZGRyZXNzIHRvIHRoZSBzb2NrZXQgdG8gY29ubmVjdCB0by4KICogQHBhcmFtIGludCAkZXJybm8gV2lsbCBiZSBzZXQgdG8gdGhlIHN5c3RlbSBsZXZlbCBlcnJvciBudW1iZXIgaWYgY29ubmVjdGlvbiBmYWlscy4KICogQHBhcmFtIHN0cmluZyAkZXJyc3RyIFdpbGwgYmUgc2V0IHRvIHRoZSBzeXN0ZW0gbGV2ZWwgZXJyb3IgbWVzc2FnZSBpZiB0aGUgY29ubmVjdGlvbiBmYWlscy4KICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IE51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBjb25uZWN0KCkgc3lzdGVtIGNhbGwKICogc2hvdWxkIHRpbWVvdXQuCiAqCiAqCiAqIFRoaXMgcGFyYW1ldGVyIG9ubHkgYXBwbGllcyB3aGVuIG5vdCBtYWtpbmcgYXN5bmNocm9ub3VzCiAqIGNvbm5lY3Rpb24gYXR0ZW1wdHMuCiAqCiAqCiAqCiAqCiAqIFRvIHNldCBhIHRpbWVvdXQgZm9yIHJlYWRpbmcvd3JpdGluZyBkYXRhIG92ZXIgdGhlIHNvY2tldCwgdXNlIHRoZQogKiBzdHJlYW1fc2V0X3RpbWVvdXQsIGFzIHRoZQogKiB0aW1lb3V0IG9ubHkgYXBwbGllcyB3aGlsZSBtYWtpbmcgY29ubmVjdGluZwogKiB0aGUgc29ja2V0LgogKgogKgogKgogKiBUbyBzZXQgYSB0aW1lb3V0IGZvciByZWFkaW5nL3dyaXRpbmcgZGF0YSBvdmVyIHRoZSBzb2NrZXQsIHVzZSB0aGUKICogc3RyZWFtX3NldF90aW1lb3V0LCBhcyB0aGUKICogdGltZW91dCBvbmx5IGFwcGxpZXMgd2hpbGUgbWFraW5nIGNvbm5lY3RpbmcKICogdGhlIHNvY2tldC4KICogQHBhcmFtIGludCAkZmxhZ3MgQml0bWFzayBmaWVsZCB3aGljaCBtYXkgYmUgc2V0IHRvIGFueSBjb21iaW5hdGlvbiBvZiBjb25uZWN0aW9uIGZsYWdzLgogKiBDdXJyZW50bHkgdGhlIHNlbGVjdCBvZiBjb25uZWN0aW9uIGZsYWdzIGlzIGxpbWl0ZWQgdG8KICogU1RSRUFNX0NMSUVOVF9DT05ORUNUIChkZWZhdWx0KSwKICogU1RSRUFNX0NMSUVOVF9BU1lOQ19DT05ORUNUIGFuZAogKiBTVFJFQU1fQ0xJRU5UX1BFUlNJU1RFTlQuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIHZhbGlkIGNvbnRleHQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHN0cmVhbV9jb250ZXh0X2NyZWF0ZS4KICogQHJldHVybiByZXNvdXJjZSBPbiBzdWNjZXNzIGEgc3RyZWFtIHJlc291cmNlIGlzIHJldHVybmVkIHdoaWNoIG1heQogKiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpbGUgZnVuY3Rpb25zIChzdWNoIGFzCiAqIGZnZXRzLCBmZ2V0c3MsCiAqIGZ3cml0ZSwgZmNsb3NlLCBhbmQKICogZmVvZiksIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X2NsaWVudChzdHJpbmcgJHJlbW90ZV9zb2NrZXQsIGludCAmJGVycm5vID0gbnVsbCwgc3RyaW5nICYkZXJyc3RyID0gbnVsbCwgZmxvYXQgJHRpbWVvdXQgPSBudWxsLCBpbnQgJGZsYWdzID0gU1RSRUFNX0NMSUVOVF9DT05ORUNULCAkY29udGV4dCA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkY29udGV4dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9jbGllbnQoJHJlbW90ZV9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJHRpbWVvdXQsICRmbGFncywgJGNvbnRleHQpOwogICAgfSBlbHNlaWYgKCRmbGFncyAhPT0gU1RSRUFNX0NMSUVOVF9DT05ORUNUKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X2NsaWVudCgkcmVtb3RlX3NvY2tldCwgJGVycm5vLCAkZXJyc3RyLCAkdGltZW91dCwgJGZsYWdzKTsKICAgIH0gZWxzZWlmICgkdGltZW91dCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3RyZWFtX3NvY2tldF9jbGllbnQoJHJlbW90ZV9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJHRpbWVvdXQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfY2xpZW50KCRyZW1vdGVfc29ja2V0LCAkZXJybm8sICRlcnJzdHIpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIHN0cmVhbV9zb2NrZXRfcGFpciBjcmVhdGVzIGEgcGFpciBvZiBjb25uZWN0ZWQsCiAqIGluZGlzdGluZ3Vpc2hhYmxlIHNvY2tldCBzdHJlYW1zLiBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IHVzZWQgaW4gSVBDCiAqIChJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pLgogKgogKiBAcGFyYW0gaW50ICRkb21haW4gVGhlIHByb3RvY29sIGZhbWlseSB0byBiZSB1c2VkOiBTVFJFQU1fUEZfSU5FVCwKICogU1RSRUFNX1BGX0lORVQ2IG9yCiAqIFNUUkVBTV9QRl9VTklYCiAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgb2YgY29tbXVuaWNhdGlvbiB0byBiZSB1c2VkOgogKiBTVFJFQU1fU09DS19ER1JBTSwKICogU1RSRUFNX1NPQ0tfUkFXLAogKiBTVFJFQU1fU09DS19SRE0sCiAqIFNUUkVBTV9TT0NLX1NFUVBBQ0tFVCBvcgogKiBTVFJFQU1fU09DS19TVFJFQU0KICogQHBhcmFtIGludCAkcHJvdG9jb2wgVGhlIHByb3RvY29sIHRvIGJlIHVzZWQ6IFNUUkVBTV9JUFBST1RPX0lDTVAsCiAqIFNUUkVBTV9JUFBST1RPX0lQLAogKiBTVFJFQU1fSVBQUk9UT19SQVcsCiAqIFNUUkVBTV9JUFBST1RPX1RDUCBvcgogKiBTVFJFQU1fSVBQUk9UT19VRFAKICogQHJldHVybiByZXNvdXJjZVtdIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgdHdvIHNvY2tldCByZXNvdXJjZXMgb24gc3VjY2Vzcy4KICogQHRocm93cyBTdHJlYW1FeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN0cmVhbV9zb2NrZXRfcGFpcihpbnQgJGRvbWFpbiwgaW50ICR0eXBlLCBpbnQgJHByb3RvY29sKTogaXRlcmFibGUKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X3BhaXIoJGRvbWFpbiwgJHR5cGUsICRwcm90b2NvbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ3JlYXRlcyBhIHN0cmVhbSBvciBkYXRhZ3JhbSBzb2NrZXQgb24gdGhlIHNwZWNpZmllZAogKiBsb2NhbF9zb2NrZXQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gb25seSBjcmVhdGVzIGEgc29ja2V0LCB0byBiZWdpbiBhY2NlcHRpbmcgY29ubmVjdGlvbnMKICogdXNlIHN0cmVhbV9zb2NrZXRfYWNjZXB0LgogKgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9zb2NrZXQgVGhlIHR5cGUgb2Ygc29ja2V0IGNyZWF0ZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHJhbnNwb3J0IHNwZWNpZmllZAogKiB1c2luZyBzdGFuZGFyZCBVUkwgZm9ybWF0dGluZzogdHJhbnNwb3J0Oi8vdGFyZ2V0LgogKgogKiBGb3IgSW50ZXJuZXQgRG9tYWluIHNvY2tldHMgKEFGX0lORVQpIHN1Y2ggYXMgVENQIGFuZCBVRFAsIHRoZQogKiB0YXJnZXQgcG9ydGlvbiBvZiB0aGUKICogcmVtb3RlX3NvY2tldCBwYXJhbWV0ZXIgc2hvdWxkIGNvbnNpc3Qgb2YgYQogKiBob3N0bmFtZSBvciBJUCBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgY29sb24gYW5kIGEgcG9ydCBudW1iZXIuICBGb3IKICogVW5peCBkb21haW4gc29ja2V0cywgdGhlIHRhcmdldCBwb3J0aW9uIHNob3VsZAogKiBwb2ludCB0byB0aGUgc29ja2V0IGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0uCiAqCiAqIERlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQsIFVuaXggZG9tYWluIHNvY2tldHMgbWF5IG5vdCBiZSBhdmFpbGFibGUuCiAqIEEgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNwb3J0cyBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCiAqIHN0cmVhbV9nZXRfdHJhbnNwb3J0cy4gU2VlCiAqIGZvciBhIGxpc3Qgb2YgYnVsaXRpbiB0cmFuc3BvcnRzLgogKiBAcGFyYW0gaW50ICRlcnJubyBJZiB0aGUgb3B0aW9uYWwgZXJybm8gYW5kIGVycnN0cgogKiBhcmd1bWVudHMgYXJlIHByZXNlbnQgdGhleSB3aWxsIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgYWN0dWFsIHN5c3RlbQogKiBsZXZlbCBlcnJvciB0aGF0IG9jY3VycmVkIGluIHRoZSBzeXN0ZW0tbGV2ZWwgc29ja2V0KCksCiAqIGJpbmQoKSwgYW5kIGxpc3RlbigpIGNhbGxzLiBJZgogKiB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gZXJybm8gaXMKICogMCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybmVkIEZBTFNFLCBpdCBpcyBhbgogKiBpbmRpY2F0aW9uIHRoYXQgdGhlIGVycm9yIG9jY3VycmVkIGJlZm9yZSB0aGUgYmluZCgpCiAqIGNhbGwuIFRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGEgcHJvYmxlbSBpbml0aWFsaXppbmcgdGhlIHNvY2tldC4KICogTm90ZSB0aGF0IHRoZSBlcnJubyBhbmQKICogZXJyc3RyIGFyZ3VtZW50cyB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgogKiBAcGFyYW0gc3RyaW5nICRlcnJzdHIgU2VlIGVycm5vIGRlc2NyaXB0aW9uLgogKiBAcGFyYW0gaW50ICRmbGFncyBBIGJpdG1hc2sgZmllbGQgd2hpY2ggbWF5IGJlIHNldCB0byBhbnkgY29tYmluYXRpb24gb2Ygc29ja2V0IGNyZWF0aW9uCiAqIGZsYWdzLgogKgogKiBGb3IgVURQIHNvY2tldHMsIHlvdSBtdXN0IHVzZSBTVFJFQU1fU0VSVkVSX0JJTkQgYXMKICogdGhlIGZsYWdzIHBhcmFtZXRlci4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0CiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyB0aGUgY3JlYXRlZCBzdHJlYW0uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X3NlcnZlcihzdHJpbmcgJGxvY2FsX3NvY2tldCwgaW50ICYkZXJybm8gPSBudWxsLCBzdHJpbmcgJiRlcnJzdHIgPSBudWxsLCBpbnQgJGZsYWdzID0gU1RSRUFNX1NFUlZFUl9CSU5EIHwgU1RSRUFNX1NFUlZFUl9MSVNURU4sICRjb250ZXh0ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb250ZXh0ICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdHJlYW1fc29ja2V0X3NlcnZlcigkbG9jYWxfc29ja2V0LCAkZXJybm8sICRlcnJzdHIsICRmbGFncywgJGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfc2VydmVyKCRsb2NhbF9zb2NrZXQsICRlcnJubywgJGVycnN0ciwgJGZsYWdzKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBTaHV0ZG93bnMgKHBhcnRpYWxseSBvciBub3QpIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0gQW4gb3BlbiBzdHJlYW0gKG9wZW5lZCB3aXRoIHN0cmVhbV9zb2NrZXRfY2xpZW50LAogKiBmb3IgZXhhbXBsZSkKICogQHBhcmFtIGludCAkaG93IE9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czogU1RSRUFNX1NIVVRfUkQKICogKGRpc2FibGUgZnVydGhlciByZWNlcHRpb25zKSwgU1RSRUFNX1NIVVRfV1IKICogKGRpc2FibGUgZnVydGhlciB0cmFuc21pc3Npb25zKSBvcgogKiBTVFJFQU1fU0hVVF9SRFdSIChkaXNhYmxlIGZ1cnRoZXIgcmVjZXB0aW9ucyBhbmQKICogdHJhbnNtaXNzaW9ucykuCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc29ja2V0X3NodXRkb3duKCRzdHJlYW0sIGludCAkaG93KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zb2NrZXRfc2h1dGRvd24oJHN0cmVhbSwgJGhvdyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJlYW1FeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRlbGxzIHdoZXRoZXIgdGhlIHN0cmVhbSBzdXBwb3J0cyBsb2NraW5nIHRocm91Z2gKICogZmxvY2suCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSBzdHJlYW0gdG8gY2hlY2suCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fc3VwcG9ydHNfbG9jaygkc3RyZWFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV9zdXBwb3J0c19sb2NrKCRzdHJlYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBBbGxvd3MgeW91IHRvIGltcGxlbWVudCB5b3VyIG93biBwcm90b2NvbCBoYW5kbGVycyBhbmQgc3RyZWFtcyBmb3IgdXNlCiAqIHdpdGggYWxsIHRoZSBvdGhlciBmaWxlc3lzdGVtIGZ1bmN0aW9ucyAoc3VjaCBhcyBmb3BlbiwKICogZnJlYWQgZXRjLikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHByb3RvY29sIFRoZSB3cmFwcGVyIG5hbWUgdG8gYmUgcmVnaXN0ZXJlZC4KICogQHBhcmFtIHN0cmluZyAkY2xhc3NuYW1lIFRoZSBjbGFzc25hbWUgd2hpY2ggaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFNob3VsZCBiZSBzZXQgdG8gU1RSRUFNX0lTX1VSTCBpZgogKiBwcm90b2NvbCBpcyBhIFVSTCBwcm90b2NvbC4gRGVmYXVsdCBpcyAwLCBsb2NhbAogKiBzdHJlYW0uCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlcihzdHJpbmcgJHByb3RvY29sLCBzdHJpbmcgJGNsYXNzbmFtZSwgaW50ICRmbGFncyA9IDApOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIoJHByb3RvY29sLCAkY2xhc3NuYW1lLCAkZmxhZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBSZXN0b3JlcyBhIGJ1aWx0LWluIHdyYXBwZXIgcHJldmlvdXNseSB1bnJlZ2lzdGVyZWQgd2l0aAogKiBzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRwcm90b2NvbAogKiBAdGhyb3dzIFN0cmVhbUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3RyZWFtX3dyYXBwZXJfcmVzdG9yZShzdHJpbmcgJHByb3RvY29sKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUoJHByb3RvY29sKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmVhbUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogQWxsb3dzIHlvdSB0byBkaXNhYmxlIGFuIGFscmVhZHkgZGVmaW5lZCBzdHJlYW0gd3JhcHBlci4gT25jZSB0aGUgd3JhcHBlcgogKiBoYXMgYmVlbiBkaXNhYmxlZCB5b3UgbWF5IG92ZXJyaWRlIGl0IHdpdGggYSB1c2VyLWRlZmluZWQgd3JhcHBlciB1c2luZwogKiBzdHJlYW1fd3JhcHBlcl9yZWdpc3RlciBvciByZWVuYWJsZSBpdCBsYXRlciBvbiB3aXRoCiAqIHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHByb3RvY29sCiAqIEB0aHJvd3MgU3RyZWFtRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyKHN0cmluZyAkcHJvdG9jb2wpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcigkcHJvdG9jb2wpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyZWFtRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/strings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTdHJpbmdzRXhjZXB0aW9uOwoKLyoqCiAqIGNvbnZlcnRfdXVkZWNvZGUgZGVjb2RlcyBhIHV1ZW5jb2RlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHV1ZW5jb2RlZCBkYXRhLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkZWNvZGVkIGRhdGEgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gY29udmVydF91dWRlY29kZShzdHJpbmcgJGRhdGEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxjb252ZXJ0X3V1ZGVjb2RlKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogY29udmVydF91dWVuY29kZSBlbmNvZGVzIGEgc3RyaW5nIHVzaW5nIHRoZSB1dWVuY29kZQogKiBhbGdvcml0aG0uCiAqCiAqIFV1ZW5jb2RlIHRyYW5zbGF0ZXMgYWxsIHN0cmluZ3MgKGluY2x1ZGluZyBiaW5hcnkgZGF0YSkgaW50byBwcmludGFibGUKICogY2hhcmFjdGVycywgbWFraW5nIHRoZW0gc2FmZSBmb3IgbmV0d29yayB0cmFuc21pc3Npb25zLiBVdWVuY29kZWQgZGF0YSBpcwogKiBhYm91dCAzNSUgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGJlIGVuY29kZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHV1ZW5jb2RlZCBkYXRhLgogKiBAdGhyb3dzIFN0cmluZ3NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGNvbnZlcnRfdXVlbmNvZGUoc3RyaW5nICRkYXRhKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcY29udmVydF91dWVuY29kZSgkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIERlY29kZXMgYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgYmluYXJ5IHN0cmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBkYXRhLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaGV4MmJpbihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxoZXgyYmluKCRkYXRhKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgTUQ1IGhhc2ggb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZQogKiBmaWxlbmFtZSBwYXJhbWV0ZXIgdXNpbmcgdGhlCiAqIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCiAqIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0sIGFuZCByZXR1cm5zIHRoYXQgaGFzaC4KICogVGhlIGhhc2ggaXMgYSAzMi1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgbnVtYmVyLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUKICogQHBhcmFtIGJvb2wgJHJhd19vdXRwdXQgV2hlbiBUUlVFLCByZXR1cm5zIHRoZSBkaWdlc3QgaW4gcmF3IGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aCBvZgogKiAxNi4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWQ1X2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYm9vbCAkcmF3X291dHB1dCA9IGZhbHNlKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcbWQ1X2ZpbGUoJGZpbGVuYW1lLCAkcmF3X291dHB1dCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENhbGN1bGF0ZXMgdGhlIG1ldGFwaG9uZSBrZXkgb2Ygc3RyLgogKgogKiBTaW1pbGFyIHRvIHNvdW5kZXggbWV0YXBob25lIGNyZWF0ZXMgdGhlIHNhbWUga2V5IGZvcgogKiBzaW1pbGFyIHNvdW5kaW5nIHdvcmRzLiBJdCdzIG1vcmUgYWNjdXJhdGUgdGhhbgogKiBzb3VuZGV4IGFzIGl0IGtub3dzIHRoZSBiYXNpYyBydWxlcyBvZiBFbmdsaXNoCiAqIHByb251bmNpYXRpb24uICBUaGUgbWV0YXBob25lIGdlbmVyYXRlZCBrZXlzIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCiAqCiAqIE1ldGFwaG9uZSB3YXMgZGV2ZWxvcGVkIGJ5IExhd3JlbmNlIFBoaWxpcHMKICogJmx0O2xwaGlsaXBzIGF0IHZlcml0eSBkb3QgY29tJmd0Oy4gSXQgaXMgZGVzY3JpYmVkIGluIFsiUHJhY3RpY2FsCiAqIEFsZ29yaXRobXMgZm9yIFByb2dyYW1tZXJzIiwgQmluc3RvY2sgJmFtcDsgUmV4LCBBZGRpc29uIFdlc2xleSwKICogMTk5NV0uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gaW50ICRwaG9uZW1lcyBUaGlzIHBhcmFtZXRlciByZXN0cmljdHMgdGhlIHJldHVybmVkIG1ldGFwaG9uZSBrZXkgdG8KICogcGhvbmVtZXMgY2hhcmFjdGVycyBpbiBsZW5ndGguCiAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDAgbWVhbnMgbm8gcmVzdHJpY3Rpb24uCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIG1ldGFwaG9uZSBrZXkgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gbWV0YXBob25lKHN0cmluZyAkc3RyLCBpbnQgJHBob25lbWVzID0gMCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG1ldGFwaG9uZSgkc3RyLCAkcGhvbmVtZXMpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyaW5nc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gaGFzaC4KICogQHBhcmFtIGJvb2wgJHJhd19vdXRwdXQgV2hlbiBUUlVFLCByZXR1cm5zIHRoZSBkaWdlc3QgaW4gcmF3IGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aCBvZgogKiAyMC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc2hhMV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJHJhd19vdXRwdXQgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNoYTFfZmlsZSgkZmlsZW5hbWUsICRyYXdfb3V0cHV0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ2FsY3VsYXRlcyB0aGUgc291bmRleCBrZXkgb2Ygc3RyLgogKgogKiBTb3VuZGV4IGtleXMgaGF2ZSB0aGUgcHJvcGVydHkgdGhhdCB3b3JkcyBwcm9ub3VuY2VkIHNpbWlsYXJseQogKiBwcm9kdWNlIHRoZSBzYW1lIHNvdW5kZXgga2V5LCBhbmQgY2FuIHRodXMgYmUgdXNlZCB0byBzaW1wbGlmeQogKiBzZWFyY2hlcyBpbiBkYXRhYmFzZXMgd2hlcmUgeW91IGtub3cgdGhlIHByb251bmNpYXRpb24gYnV0IG5vdAogKiB0aGUgc3BlbGxpbmcuIFRoaXMgc291bmRleCBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIDQgY2hhcmFjdGVycwogKiBsb25nLCBzdGFydGluZyB3aXRoIGEgbGV0dGVyLgogKgogKiBUaGlzIHBhcnRpY3VsYXIgc291bmRleCBmdW5jdGlvbiBpcyBvbmUgZGVzY3JpYmVkIGJ5IERvbmFsZCBLbnV0aAogKiBpbiAiVGhlIEFydCBPZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sLiAzOiBTb3J0aW5nIEFuZAogKiBTZWFyY2hpbmciLCBBZGRpc29uLVdlc2xleSAoMTk3MyksIHBwLiAzOTEtMzkyLgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIGlucHV0IHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgc291bmRleCBrZXkgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc291bmRleChzdHJpbmcgJHN0cik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHNvdW5kZXgoJHN0cik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTdHJpbmdzRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgcHJvZHVjZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHN0cmluZwogKiBmb3JtYXQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBUaGUgZm9ybWF0IHN0cmluZyBpcyBjb21wb3NlZCBvZiB6ZXJvIG9yIG1vcmUgZGlyZWN0aXZlczoKICogb3JkaW5hcnkgY2hhcmFjdGVycyAoZXhjbHVkaW5nICUpIHRoYXQgYXJlCiAqIGNvcGllZCBkaXJlY3RseSB0byB0aGUgcmVzdWx0IGFuZCBjb252ZXJzaW9uCiAqIHNwZWNpZmljYXRpb25zLCBlYWNoIG9mIHdoaWNoIHJlc3VsdHMgaW4gZmV0Y2hpbmcgaXRzCiAqIG93biBwYXJhbWV0ZXIuCiAqCiAqIEEgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvbGxvd3MgdGhpcyBwcm90b3R5cGU6CiAqICVbYXJnbnVtJF1bZmxhZ3NdW3dpZHRoXVsucHJlY2lzaW9uXXNwZWNpZmllci4KICoKICogQW4gaW50ZWdlciBmb2xsb3dlZCBieSBhIGRvbGxhciBzaWduICQsCiAqIHRvIHNwZWNpZnkgd2hpY2ggbnVtYmVyIGFyZ3VtZW50IHRvIHRyZWF0IGluIHRoZSBjb252ZXJzaW9uLgogKgogKgogKiBGbGFncwogKgogKgogKgogKiBGbGFnCiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqIC0KICoKICogTGVmdC1qdXN0aWZ5IHdpdGhpbiB0aGUgZ2l2ZW4gZmllbGQgd2lkdGg7CiAqIFJpZ2h0IGp1c3RpZmljYXRpb24gaXMgdGhlIGRlZmF1bHQKICoKICoKICoKICogKwogKgogKiBQcmVmaXggcG9zaXRpdmUgbnVtYmVycyB3aXRoIGEgcGx1cyBzaWduCiAqICs7IERlZmF1bHQgb25seSBuZWdhdGl2ZQogKiBhcmUgcHJlZml4ZWQgd2l0aCBhIG5lZ2F0aXZlIHNpZ24uCiAqCiAqCiAqCiAqIChzcGFjZSkKICoKICogUGFkcyB0aGUgcmVzdWx0IHdpdGggc3BhY2VzLgogKiBUaGlzIGlzIHRoZSBkZWZhdWx0LgogKgogKgogKgogKiAwCiAqCiAqIE9ubHkgbGVmdC1wYWRzIG51bWJlcnMgd2l0aCB6ZXJvcy4KICogV2l0aCBzIHNwZWNpZmllcnMgdGhpcyBjYW4KICogYWxzbyByaWdodC1wYWQgd2l0aCB6ZXJvcy4KICoKICoKICoKICogJyhjaGFyKQogKgogKiBQYWRzIHRoZSByZXN1bHQgd2l0aCB0aGUgY2hhcmFjdGVyIChjaGFyKS4KICoKICoKICoKICoKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNheXMgaG93IG1hbnkgY2hhcmFjdGVycyAobWluaW11bSkKICogdGhpcyBjb252ZXJzaW9uIHNob3VsZCByZXN1bHQgaW4uCiAqCiAqIEEgcGVyaW9kIC4gZm9sbG93ZWQgYnkgYW4gaW50ZWdlcgogKiB3aG8ncyBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllcjoKICoKICoKICoKICogRm9yIGUsIEUsCiAqIGYgYW5kIEYKICogc3BlY2lmaWVyczogdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBwcmludGVkCiAqIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IChieSBkZWZhdWx0LCB0aGlzIGlzIDYpLgogKgogKgogKgogKgogKiBGb3IgZyBhbmQgRwogKiBzcGVjaWZpZXJzOiB0aGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudAogKiBkaWdpdHMgdG8gYmUgcHJpbnRlZC4KICoKICoKICoKICoKICogRm9yIHMgc3BlY2lmaWVyOiBpdCBhY3RzIGFzIGEgY3V0b2ZmIHBvaW50LAogKiBzZXR0aW5nIGEgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgdG8gdGhlIHN0cmluZy4KICoKICoKICoKICoKICoKICogSWYgdGhlIHBlcmlvZCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgcHJlY2lzaW9uLAogKiAwIGlzIGFzc3VtZWQuCiAqCiAqCiAqCiAqCiAqIFNwZWNpZmllcnMKICoKICoKICoKICogU3BlY2lmaWVyCiAqIERlc2NyaXB0aW9uCiAqCiAqCiAqCiAqCiAqICUKICoKICogQSBsaXRlcmFsIHBlcmNlbnQgY2hhcmFjdGVyLiBObyBhcmd1bWVudCBpcyByZXF1aXJlZC4KICoKICoKICoKICogYgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSBiaW5hcnkgbnVtYmVyLgogKgogKgogKgogKiBjCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyB0aGUgY2hhcmFjdGVyIHdpdGggdGhhdCBBU0NJSS4KICoKICoKICoKICogZAogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSAoc2lnbmVkKSBkZWNpbWFsIG51bWJlci4KICoKICoKICoKICogZQogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBzY2llbnRpZmljIG5vdGF0aW9uIChlLmcuIDEuMmUrMikuCiAqIFRoZSBwcmVjaXNpb24gc3BlY2lmaWVyIHN0YW5kcyBmb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCiAqIGRlY2ltYWwgcG9pbnQgc2luY2UgUEhQIDUuMi4xLiBJbiBlYXJsaWVyIHZlcnNpb25zLCBpdCB3YXMgdGFrZW4gYXMKICogbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyAob25lIGxlc3MpLgogKgogKgogKgogKiBFCiAqCiAqIExpa2UgdGhlIGUgc3BlY2lmaWVyIGJ1dCB1c2VzCiAqIHVwcGVyY2FzZSBsZXR0ZXIgKGUuZy4gMS4yRSsyKS4KICoKICoKICoKICogZgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZsb2F0IGFuZCBwcmVzZW50ZWQKICogYXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKGxvY2FsZSBhd2FyZSkuCiAqCiAqCiAqCiAqIEYKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmbG9hdCBhbmQgcHJlc2VudGVkCiAqIGFzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChub24tbG9jYWxlIGF3YXJlKS4KICogQXZhaWxhYmxlIGFzIG9mIFBIUCA1LjAuMy4KICoKICoKICoKICogZwogKgogKgogKiBHZW5lcmFsIGZvcm1hdC4KICoKICoKICogTGV0IFAgZXF1YWwgdGhlIHByZWNpc2lvbiBpZiBub256ZXJvLCA2IGlmIHRoZSBwcmVjaXNpb24gaXMgb21pdHRlZCwKICogb3IgMSBpZiB0aGUgcHJlY2lzaW9uIGlzIHplcm8uCiAqIFRoZW4sIGlmIGEgY29udmVyc2lvbiB3aXRoIHN0eWxlIEUgd291bGQgaGF2ZSBhbiBleHBvbmVudCBvZiBYOgogKgogKgogKiBJZiBQICZndDsgWCDiiaUg4oiSNCwgdGhlIGNvbnZlcnNpb24gaXMgd2l0aCBzdHlsZSBmIGFuZCBwcmVjaXNpb24gUCDiiJIgKFggKyAxKS4KICogT3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGUgYW5kIHByZWNpc2lvbiBQIOKIkiAxLgogKgogKgogKgogKgogKiBHCiAqCiAqIExpa2UgdGhlIGcgc3BlY2lmaWVyIGJ1dCB1c2VzCiAqIEUgYW5kIGYuCiAqCiAqCiAqCiAqIG8KICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGFuIG9jdGFsIG51bWJlci4KICoKICoKICoKICogcwogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhbmQgcHJlc2VudGVkIGFzIGEgc3RyaW5nLgogKgogKgogKgogKiB1CiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhbiB1bnNpZ25lZCBkZWNpbWFsIG51bWJlci4KICoKICoKICoKICogeAogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYSBoZXhhZGVjaW1hbCBudW1iZXIgKHdpdGggbG93ZXJjYXNlIGxldHRlcnMpLgogKgogKgogKgogKiBYCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGhleGFkZWNpbWFsIG51bWJlciAod2l0aCB1cHBlcmNhc2UgbGV0dGVycykuCiAqCiAqCiAqCiAqCiAqCiAqCiAqIEdlbmVyYWwgZm9ybWF0LgogKgogKiBMZXQgUCBlcXVhbCB0aGUgcHJlY2lzaW9uIGlmIG5vbnplcm8sIDYgaWYgdGhlIHByZWNpc2lvbiBpcyBvbWl0dGVkLAogKiBvciAxIGlmIHRoZSBwcmVjaXNpb24gaXMgemVyby4KICogVGhlbiwgaWYgYSBjb252ZXJzaW9uIHdpdGggc3R5bGUgRSB3b3VsZCBoYXZlIGFuIGV4cG9uZW50IG9mIFg6CiAqCiAqIElmIFAgJmd0OyBYIOKJpSDiiJI0LCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGYgYW5kIHByZWNpc2lvbiBQIOKIkiAoWCArIDEpLgogKiBPdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZSBhbmQgcHJlY2lzaW9uIFAg4oiSIDEuCiAqCiAqIFRoZSBjIHR5cGUgc3BlY2lmaWVyIGlnbm9yZXMgcGFkZGluZyBhbmQgd2lkdGgKICoKICogQXR0ZW1wdGluZyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUgc3RyaW5nIGFuZCB3aWR0aCBzcGVjaWZpZXJzIHdpdGggY2hhcmFjdGVyIHNldHMgdGhhdCByZXF1aXJlIG1vcmUgdGhhbiBvbmUgYnl0ZSBwZXIgY2hhcmFjdGVyIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCByZXN1bHRzCiAqCiAqIFZhcmlhYmxlcyB3aWxsIGJlIGNvLWVyY2VkIHRvIGEgc3VpdGFibGUgdHlwZSBmb3IgdGhlIHNwZWNpZmllcjoKICoKICogVHlwZSBIYW5kbGluZwogKgogKgogKgogKiBUeXBlCiAqIFNwZWNpZmllcnMKICoKICoKICoKICoKICogc3RyaW5nCiAqIHMKICoKICoKICogaW50ZWdlcgogKgogKiBkLAogKiB1LAogKiBjLAogKiBvLAogKiB4LAogKiBYLAogKiBiCiAqCiAqCiAqCiAqIGRvdWJsZQogKgogKiBnLAogKiBHLAogKiBlLAogKiBFLAogKiBmLAogKiBGCiAqCiAqCiAqCiAqCiAqCiAqIEBwYXJhbSBtaXhlZCAkcGFyYW1zCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgcHJvZHVjZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHN0cmluZwogKiBmb3JtYXQuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3ByaW50ZihzdHJpbmcgJGZvcm1hdCwgLi4uJHBhcmFtcyk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtcyAhPT0gW10pIHsKICAgICAgICAkcmVzdWx0ID0gXHNwcmludGYoJGZvcm1hdCwgLi4uJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcc3ByaW50ZigkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZQogKiBzdGFydCBhbmQgbGVuZ3RoIHBhcmFtZXRlcnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgaW5wdXQgc3RyaW5nLgogKiBAcGFyYW0gaW50ICRzdGFydCBJZiBzdGFydCBpcyBub24tbmVnYXRpdmUsIHRoZSByZXR1cm5lZCBzdHJpbmcKICogd2lsbCBzdGFydCBhdCB0aGUgc3RhcnQndGggcG9zaXRpb24gaW4KICogc3RyaW5nLCBjb3VudGluZyBmcm9tIHplcm8uIEZvciBpbnN0YW5jZSwKICogaW4gdGhlIHN0cmluZyAnYWJjZGVmJywgdGhlIGNoYXJhY3RlciBhdAogKiBwb3NpdGlvbiAwIGlzICdhJywgdGhlCiAqIGNoYXJhY3RlciBhdCBwb3NpdGlvbiAyIGlzCiAqICdjJywgYW5kIHNvIGZvcnRoLgogKgogKiBJZiBzdGFydCBpcyBuZWdhdGl2ZSwgdGhlIHJldHVybmVkIHN0cmluZwogKiB3aWxsIHN0YXJ0IGF0IHRoZSBzdGFydCd0aCBjaGFyYWN0ZXIKICogZnJvbSB0aGUgZW5kIG9mIHN0cmluZy4KICoKICogSWYgc3RyaW5nIGlzIGxlc3MgdGhhbgogKiBzdGFydCBjaGFyYWN0ZXJzIGxvbmcsIEZBTFNFIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqCiAqIFVzaW5nIGEgbmVnYXRpdmUgc3RhcnQKICoKICoKICogXV0+CiAqCiAqCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBJZiBsZW5ndGggaXMgZ2l2ZW4gYW5kIGlzIHBvc2l0aXZlLCB0aGUgc3RyaW5nCiAqIHJldHVybmVkIHdpbGwgY29udGFpbiBhdCBtb3N0IGxlbmd0aCBjaGFyYWN0ZXJzCiAqIGJlZ2lubmluZyBmcm9tIHN0YXJ0IChkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZgogKiBzdHJpbmcpLgogKgogKiBJZiBsZW5ndGggaXMgZ2l2ZW4gYW5kIGlzIG5lZ2F0aXZlLCB0aGVuIHRoYXQgbWFueQogKiBjaGFyYWN0ZXJzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBlbmQgb2Ygc3RyaW5nCiAqIChhZnRlciB0aGUgc3RhcnQgcG9zaXRpb24gaGFzIGJlZW4gY2FsY3VsYXRlZCB3aGVuIGEKICogc3RhcnQgaXMgbmVnYXRpdmUpLiAgSWYKICogc3RhcnQgZGVub3RlcyB0aGUgcG9zaXRpb24gb2YgdGhpcyB0cnVuY2F0aW9uIG9yCiAqIGJleW9uZCwgRkFMU0Ugd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgbGVuZ3RoIGlzIGdpdmVuIGFuZCBpcyAwLAogKiBGQUxTRSBvciBOVUxMLCBhbiBlbXB0eSBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC4KICoKICogSWYgbGVuZ3RoIGlzIG9taXR0ZWQsIHRoZSBzdWJzdHJpbmcgc3RhcnRpbmcgZnJvbQogKiBzdGFydCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2lsbCBiZQogKiByZXR1cm5lZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZXh0cmFjdGVkIHBhcnQgb2Ygc3RyaW5nOywgb3IKICogYW4gZW1wdHkgc3RyaW5nLgogKiBAdGhyb3dzIFN0cmluZ3NFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN1YnN0cihzdHJpbmcgJHN0cmluZywgaW50ICRzdGFydCwgaW50ICRsZW5ndGggPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkbGVuZ3RoICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdWJzdHIoJHN0cmluZywgJHN0YXJ0LCAkbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzdWJzdHIoJHN0cmluZywgJHN0YXJ0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN0cmluZ3NFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogT3BlcmF0ZXMgYXMgc3ByaW50ZiBidXQgYWNjZXB0cyBhbiBhcnJheSBvZgogKiBhcmd1bWVudHMsIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KICoKICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IFRoZSBmb3JtYXQgc3RyaW5nIGlzIGNvbXBvc2VkIG9mIHplcm8gb3IgbW9yZSBkaXJlY3RpdmVzOgogKiBvcmRpbmFyeSBjaGFyYWN0ZXJzIChleGNsdWRpbmcgJSkgdGhhdCBhcmUKICogY29waWVkIGRpcmVjdGx5IHRvIHRoZSByZXN1bHQgYW5kIGNvbnZlcnNpb24KICogc3BlY2lmaWNhdGlvbnMsIGVhY2ggb2Ygd2hpY2ggcmVzdWx0cyBpbiBmZXRjaGluZyBpdHMKICogb3duIHBhcmFtZXRlci4KICoKICogQSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gZm9sbG93cyB0aGlzIHByb3RvdHlwZToKICogJVthcmdudW0kXVtmbGFnc11bd2lkdGhdWy5wcmVjaXNpb25dc3BlY2lmaWVyLgogKgogKiBBbiBpbnRlZ2VyIGZvbGxvd2VkIGJ5IGEgZG9sbGFyIHNpZ24gJCwKICogdG8gc3BlY2lmeSB3aGljaCBudW1iZXIgYXJndW1lbnQgdG8gdHJlYXQgaW4gdGhlIGNvbnZlcnNpb24uCiAqCiAqCiAqIEZsYWdzCiAqCiAqCiAqCiAqIEZsYWcKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogLQogKgogKiBMZWZ0LWp1c3RpZnkgd2l0aGluIHRoZSBnaXZlbiBmaWVsZCB3aWR0aDsKICogUmlnaHQganVzdGlmaWNhdGlvbiBpcyB0aGUgZGVmYXVsdAogKgogKgogKgogKiArCiAqCiAqIFByZWZpeCBwb3NpdGl2ZSBudW1iZXJzIHdpdGggYSBwbHVzIHNpZ24KICogKzsgRGVmYXVsdCBvbmx5IG5lZ2F0aXZlCiAqIGFyZSBwcmVmaXhlZCB3aXRoIGEgbmVnYXRpdmUgc2lnbi4KICoKICoKICoKICogKHNwYWNlKQogKgogKiBQYWRzIHRoZSByZXN1bHQgd2l0aCBzcGFjZXMuCiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQuCiAqCiAqCiAqCiAqIDAKICoKICogT25seSBsZWZ0LXBhZHMgbnVtYmVycyB3aXRoIHplcm9zLgogKiBXaXRoIHMgc3BlY2lmaWVycyB0aGlzIGNhbgogKiBhbHNvIHJpZ2h0LXBhZCB3aXRoIHplcm9zLgogKgogKgogKgogKiAnKGNoYXIpCiAqCiAqIFBhZHMgdGhlIHJlc3VsdCB3aXRoIHRoZSBjaGFyYWN0ZXIgKGNoYXIpLgogKgogKgogKgogKgogKgogKgogKiBBbiBpbnRlZ2VyIHRoYXQgc2F5cyBob3cgbWFueSBjaGFyYWN0ZXJzIChtaW5pbXVtKQogKiB0aGlzIGNvbnZlcnNpb24gc2hvdWxkIHJlc3VsdCBpbi4KICoKICogQSBwZXJpb2QgLiBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyCiAqIHdobydzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVyOgogKgogKgogKgogKiBGb3IgZSwgRSwKICogZiBhbmQgRgogKiBzcGVjaWZpZXJzOiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGJlIHByaW50ZWQKICogYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKGJ5IGRlZmF1bHQsIHRoaXMgaXMgNikuCiAqCiAqCiAqCiAqCiAqIEZvciBnIGFuZCBHCiAqIHNwZWNpZmllcnM6IHRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50CiAqIGRpZ2l0cyB0byBiZSBwcmludGVkLgogKgogKgogKgogKgogKiBGb3IgcyBzcGVjaWZpZXI6IGl0IGFjdHMgYXMgYSBjdXRvZmYgcG9pbnQsCiAqIHNldHRpbmcgYSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCB0byB0aGUgc3RyaW5nLgogKgogKgogKgogKgogKgogKiBJZiB0aGUgcGVyaW9kIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGV4cGxpY2l0IHZhbHVlIGZvciBwcmVjaXNpb24sCiAqIDAgaXMgYXNzdW1lZC4KICoKICoKICoKICoKICogU3BlY2lmaWVycwogKgogKgogKgogKiBTcGVjaWZpZXIKICogRGVzY3JpcHRpb24KICoKICoKICoKICoKICogJQogKgogKiBBIGxpdGVyYWwgcGVyY2VudCBjaGFyYWN0ZXIuIE5vIGFyZ3VtZW50IGlzIHJlcXVpcmVkLgogKgogKgogKgogKiBiCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGJpbmFyeSBudW1iZXIuCiAqCiAqCiAqCiAqIGMKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIHRoZSBjaGFyYWN0ZXIgd2l0aCB0aGF0IEFTQ0lJLgogKgogKgogKgogKiBkCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIChzaWduZWQpIGRlY2ltYWwgbnVtYmVyLgogKgogKgogKgogKiBlCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIHNjaWVudGlmaWMgbm90YXRpb24gKGUuZy4gMS4yZSsyKS4KICogVGhlIHByZWNpc2lvbiBzcGVjaWZpZXIgc3RhbmRzIGZvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKICogZGVjaW1hbCBwb2ludCBzaW5jZSBQSFAgNS4yLjEuIEluIGVhcmxpZXIgdmVyc2lvbnMsIGl0IHdhcyB0YWtlbiBhcwogKiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIChvbmUgbGVzcykuCiAqCiAqCiAqCiAqIEUKICoKICogTGlrZSB0aGUgZSBzcGVjaWZpZXIgYnV0IHVzZXMKICogdXBwZXJjYXNlIGxldHRlciAoZS5nLiAxLjJFKzIpLgogKgogKgogKgogKiBmCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmxvYXQgYW5kIHByZXNlbnRlZAogKiBhcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAobG9jYWxlIGF3YXJlKS4KICoKICoKICoKICogRgogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZsb2F0IGFuZCBwcmVzZW50ZWQKICogYXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKG5vbi1sb2NhbGUgYXdhcmUpLgogKiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuMC4zLgogKgogKgogKgogKiBnCiAqCiAqCiAqIEdlbmVyYWwgZm9ybWF0LgogKgogKgogKiBMZXQgUCBlcXVhbCB0aGUgcHJlY2lzaW9uIGlmIG5vbnplcm8sIDYgaWYgdGhlIHByZWNpc2lvbiBpcyBvbWl0dGVkLAogKiBvciAxIGlmIHRoZSBwcmVjaXNpb24gaXMgemVyby4KICogVGhlbiwgaWYgYSBjb252ZXJzaW9uIHdpdGggc3R5bGUgRSB3b3VsZCBoYXZlIGFuIGV4cG9uZW50IG9mIFg6CiAqCiAqCiAqIElmIFAgJmd0OyBYIOKJpSDiiJI0LCB0aGUgY29udmVyc2lvbiBpcyB3aXRoIHN0eWxlIGYgYW5kIHByZWNpc2lvbiBQIOKIkiAoWCArIDEpLgogKiBPdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZSBhbmQgcHJlY2lzaW9uIFAg4oiSIDEuCiAqCiAqCiAqCiAqCiAqIEcKICoKICogTGlrZSB0aGUgZyBzcGVjaWZpZXIgYnV0IHVzZXMKICogRSBhbmQgZi4KICoKICoKICoKICogbwogKgogKiBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhbiBpbnRlZ2VyIGFuZCBwcmVzZW50ZWQKICogYXMgYW4gb2N0YWwgbnVtYmVyLgogKgogKgogKgogKiBzCiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFuZCBwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCiAqCiAqCiAqCiAqIHUKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGFuIHVuc2lnbmVkIGRlY2ltYWwgbnVtYmVyLgogKgogKgogKgogKiB4CiAqCiAqIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGFuIGludGVnZXIgYW5kIHByZXNlbnRlZAogKiBhcyBhIGhleGFkZWNpbWFsIG51bWJlciAod2l0aCBsb3dlcmNhc2UgbGV0dGVycykuCiAqCiAqCiAqCiAqIFgKICoKICogVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYW4gaW50ZWdlciBhbmQgcHJlc2VudGVkCiAqIGFzIGEgaGV4YWRlY2ltYWwgbnVtYmVyICh3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzKS4KICoKICoKICoKICoKICoKICoKICogR2VuZXJhbCBmb3JtYXQuCiAqCiAqIExldCBQIGVxdWFsIHRoZSBwcmVjaXNpb24gaWYgbm9uemVybywgNiBpZiB0aGUgcHJlY2lzaW9uIGlzIG9taXR0ZWQsCiAqIG9yIDEgaWYgdGhlIHByZWNpc2lvbiBpcyB6ZXJvLgogKiBUaGVuLCBpZiBhIGNvbnZlcnNpb24gd2l0aCBzdHlsZSBFIHdvdWxkIGhhdmUgYW4gZXhwb25lbnQgb2YgWDoKICoKICogSWYgUCAmZ3Q7IFgg4omlIOKIkjQsIHRoZSBjb252ZXJzaW9uIGlzIHdpdGggc3R5bGUgZiBhbmQgcHJlY2lzaW9uIFAg4oiSIChYICsgMSkuCiAqIE90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gaXMgd2l0aCBzdHlsZSBlIGFuZCBwcmVjaXNpb24gUCDiiJIgMS4KICoKICogVGhlIGMgdHlwZSBzcGVjaWZpZXIgaWdub3JlcyBwYWRkaW5nIGFuZCB3aWR0aAogKgogKiBBdHRlbXB0aW5nIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzdHJpbmcgYW5kIHdpZHRoIHNwZWNpZmllcnMgd2l0aCBjaGFyYWN0ZXIgc2V0cyB0aGF0IHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBieXRlIHBlciBjaGFyYWN0ZXIgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIHJlc3VsdHMKICoKICogVmFyaWFibGVzIHdpbGwgYmUgY28tZXJjZWQgdG8gYSBzdWl0YWJsZSB0eXBlIGZvciB0aGUgc3BlY2lmaWVyOgogKgogKiBUeXBlIEhhbmRsaW5nCiAqCiAqCiAqCiAqIFR5cGUKICogU3BlY2lmaWVycwogKgogKgogKgogKgogKiBzdHJpbmcKICogcwogKgogKgogKiBpbnRlZ2VyCiAqCiAqIGQsCiAqIHUsCiAqIGMsCiAqIG8sCiAqIHgsCiAqIFgsCiAqIGIKICoKICoKICoKICogZG91YmxlCiAqCiAqIGcsCiAqIEcsCiAqIGUsCiAqIEUsCiAqIGYsCiAqIEYKICoKICoKICoKICoKICoKICogQHBhcmFtIGFycmF5ICRhcmdzCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybiBhcnJheSB2YWx1ZXMgYXMgYSBmb3JtYXR0ZWQgc3RyaW5nIGFjY29yZGluZyB0bwogKiBmb3JtYXQuCiAqIEB0aHJvd3MgU3RyaW5nc0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gdnNwcmludGYoc3RyaW5nICRmb3JtYXQsIGFycmF5ICRhcmdzKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcdnNwcmludGYoJGZvcm1hdCwgJGFyZ3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3RyaW5nc0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/swoole.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xTd29vbGVFeGNlcHRpb247CgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIGJlaW5nIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgVGhlIGNvbnRlbnQgd3JpdGluZyB0byB0aGUgZmlsZS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBvZmZzZXQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogQHRocm93cyBTd29vbGVFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHN3b29sZV9hc3luY193cml0ZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJGNvbnRlbnQsIGludCAkb2Zmc2V0ID0gbnVsbCwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjYWxsYmFjayAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3dvb2xlX2FzeW5jX3dyaXRlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRvZmZzZXQsICRjYWxsYmFjayk7CiAgICB9IGVsc2VpZiAoJG9mZnNldCAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcc3dvb2xlX2FzeW5jX3dyaXRlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRvZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHN3b29sZV9hc3luY193cml0ZSgkZmlsZW5hbWUsICRjb250ZW50KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN3b29sZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIGJlaW5nIHdyaXR0ZW4uCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgVGhlIGNvbnRlbnQgd3JpdGluZyB0byB0aGUgZmlsZS4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBAcGFyYW0gaW50ICRmbGFncwogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2FzeW5jX3dyaXRlZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJGNvbnRlbnQsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGludCAkZmxhZ3MgPSAwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGZsYWdzICE9PSAwKSB7CiAgICAgICAgJHJlc3VsdCA9IFxzd29vbGVfYXN5bmNfd3JpdGVmaWxlKCRmaWxlbmFtZSwgJGNvbnRlbnQsICRjYWxsYmFjaywgJGZsYWdzKTsKICAgIH0gZWxzZWlmICgkY2FsbGJhY2sgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHN3b29sZV9hc3luY193cml0ZWZpbGUoJGZpbGVuYW1lLCAkY29udGVudCwgJGNhbGxiYWNrKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxzd29vbGVfYXN5bmNfd3JpdGVmaWxlKCRmaWxlbmFtZSwgJGNvbnRlbnQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3dvb2xlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIEB0aHJvd3MgU3dvb2xlRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBzd29vbGVfZXZlbnRfZGVmZXIoY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN3b29sZV9ldmVudF9kZWZlcigkY2FsbGJhY2spOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgU3dvb2xlRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKgogKgogKiBAcGFyYW0gaW50ICRmZAogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2V2ZW50X2RlbChpbnQgJGZkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHN3b29sZV9ldmVudF9kZWwoJGZkKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFN3b29sZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICoKICoKICogQHBhcmFtIGludCAkZmQKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAdGhyb3dzIFN3b29sZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc3dvb2xlX2V2ZW50X3dyaXRlKGludCAkZmQsIHN0cmluZyAkZGF0YSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzd29vbGVfZXZlbnRfd3JpdGUoJGZkLCAkZGF0YSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBTd29vbGVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/uodbc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVb2RiY0V4Y2VwdGlvbjsKCi8qKgogKiBUb2dnbGVzIGF1dG9jb21taXQgYmVoYXZpb3VyLgogKgogKiBCeSBkZWZhdWx0LCBhdXRvLWNvbW1pdCBpcyBvbiBmb3IgYSBjb25uZWN0aW9uLiAgRGlzYWJsaW5nCiAqIGF1dG8tY29tbWl0IGlzIGVxdWl2YWxlbnQgd2l0aCBzdGFydGluZyBhIHRyYW5zYWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gYm9vbCAkT25PZmYgSWYgT25PZmYgaXMgVFJVRSwgYXV0by1jb21taXQgaXMgZW5hYmxlZCwgaWYKICogaXQgaXMgRkFMU0UgYXV0by1jb21taXQgaXMgZGlzYWJsZWQuCiAqIEByZXR1cm4gbWl4ZWQgV2l0aG91dCB0aGUgT25PZmYgcGFyYW1ldGVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKICogYXV0by1jb21taXQgc3RhdHVzIGZvciBjb25uZWN0aW9uX2lkLiBOb24temVybyBpcwogKiByZXR1cm5lZCBpZiBhdXRvLWNvbW1pdCBpcyBvbiwgMCBpZiBpdCBpcyBvZmYsIG9yIEZBTFNFIGlmIGFuIGVycm9yCiAqIG9jY3Vycy4KICoKICogSWYgT25PZmYgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVFJVRSBvbgogKiBzdWNjZXNzLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2F1dG9jb21taXQoJGNvbm5lY3Rpb25faWQsIGJvb2wgJE9uT2ZmID0gZmFsc2UpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19hdXRvY29tbWl0KCRjb25uZWN0aW9uX2lkLCAkT25PZmYpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udHJvbHMgaGFuZGxpbmcgb2YgYmluYXJ5IGNvbHVtbiBkYXRhLiBPREJDIFNRTCB0eXBlcyBhZmZlY3RlZCBhcmUKICogQklOQVJZLCBWQVJCSU5BUlksIGFuZAogKiBMT05HVkFSQklOQVJZLgogKiBUaGUgZGVmYXVsdCBtb2RlIGNhbiBiZSBzZXQgdXNpbmcgdGhlCiAqIHVvZGJjLmRlZmF1bHRiaW5tb2RlIHBocC5pbmkgZGlyZWN0aXZlLgogKgogKiBXaGVuIGJpbmFyeSBTUUwgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gY2hhcmFjdGVyIEMgZGF0YSAoT0RCQ19CSU5NT0RFX0NPTlZFUlQpLCBlYWNoIGJ5dGUKICogKDggYml0cykgb2Ygc291cmNlIGRhdGEgaXMgcmVwcmVzZW50ZWQgYXMgdHdvIEFTQ0lJIGNoYXJhY3RlcnMuCiAqIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHRoZSBBU0NJSSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlCiAqIG51bWJlciBpbiBpdHMgaGV4YWRlY2ltYWwgZm9ybS4gRm9yIGV4YW1wbGUsIGEgYmluYXJ5CiAqIDAwMDAwMDAxIGlzIGNvbnZlcnRlZCB0bwogKiAiMDEiIGFuZCBhIGJpbmFyeSAxMTExMTExMQogKiBpcyBjb252ZXJ0ZWQgdG8gIkZGIi4KICoKICogV2hpbGUgdGhlIGhhbmRsaW5nIG9mIEJJTkFSWSBhbmQgVkFSQklOQVJZCiAqIGNvbHVtbnMgb25seSBkZXBlbmQgb24gdGhlIGJpbm1vZGUsIHRoZSBoYW5kbGluZyBvZiBMT05HVkFSQklOQVJZCiAqIGNvbHVtbnMgYWxzbyBkZXBlbmRzIG9uIHRoZSBsb25ncmVhZGxlbiBhcyB3ZWxsOgogKgogKiBMT05HVkFSQklOQVJZIGhhbmRsaW5nCiAqCiAqCiAqCiAqIGJpbm1vZGUKICogbG9uZ3JlYWRsZW4KICogcmVzdWx0CiAqCiAqCiAqCiAqCiAqIE9EQkNfQklOTU9ERV9QQVNTVEhSVQogKiAwCiAqIHBhc3N0aHJ1CiAqCiAqCiAqIE9EQkNfQklOTU9ERV9SRVRVUk4KICogMAogKiBwYXNzdGhydQogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVAogKiAwCiAqIHBhc3N0aHJ1CiAqCiAqCiAqIE9EQkNfQklOTU9ERV9QQVNTVEhSVQogKiAmZ3Q7MAogKiBwYXNzdGhydQogKgogKgogKiBPREJDX0JJTk1PREVfUkVUVVJOCiAqICZndDswCiAqIHJldHVybiBhcyBpcwogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVAogKiAmZ3Q7MAogKiByZXR1cm4gYXMgY2hhcgogKgogKgogKgogKgogKgogKiBJZiBvZGJjX2ZldGNoX2ludG8gaXMgdXNlZCwgcGFzc3RocnUgbWVhbnMgdGhhdCBhbgogKiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIHRoZXNlIGNvbHVtbnMuCiAqIElmIG9kYmNfcmVzdWx0IGlzIHVzZWQsIHBhc3N0aHJ1IG1lYW5zIHRoYXQgdGhlIGRhdGEgYXJlCiAqIHNlbnQgZGlyZWN0bHkgdG8gdGhlIGNsaWVudCAoaS5lLiBwcmludGVkKS4KICoKICogQHBhcmFtIGludCAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICoKICogSWYgcmVzdWx0X2lkIGlzIDAsIHRoZQogKiBzZXR0aW5ncyBhcHBseSBhcyBkZWZhdWx0IGZvciBuZXcgcmVzdWx0cy4KICogQHBhcmFtIGludCAkbW9kZSBQb3NzaWJsZSB2YWx1ZXMgZm9yIG1vZGUgYXJlOgogKgogKgogKgogKiBPREJDX0JJTk1PREVfUEFTU1RIUlU6IFBhc3N0aHJ1IEJJTkFSWSBkYXRhCiAqCiAqCiAqCiAqCiAqIE9EQkNfQklOTU9ERV9SRVRVUk46IFJldHVybiBhcyBpcwogKgogKgogKgogKgogKiBPREJDX0JJTk1PREVfQ09OVkVSVDogQ29udmVydCB0byBjaGFyIGFuZCByZXR1cm4KICoKICoKICoKICoKICoKICogSGFuZGxpbmcgb2YgYmluYXJ5IGxvbmcKICogY29sdW1ucyBpcyBhbHNvIGFmZmVjdGVkIGJ5IG9kYmNfbG9uZ3JlYWRsZW4uCiAqCiAqCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfYmlubW9kZShpbnQgJHJlc3VsdF9pZCwgaW50ICRtb2RlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfYmlubW9kZSgkcmVzdWx0X2lkLCAkbW9kZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTGlzdHMgY29sdW1ucyBhbmQgYXNzb2NpYXRlZCBwcml2aWxlZ2VzIGZvciB0aGUgZ2l2ZW4gdGFibGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBzdHJpbmcgJGNhdGFsb2cgVGhlIGNhdGFsb2cgKCdxdWFsaWZpZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSBUaGUgdGFibGUgbmFtZS4KICogVGhpcyBwYXJhbWV0ZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHNlYXJjaCBwYXR0ZXJuczoKICogJSB0byBtYXRjaCB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycywKICogYW5kIF8gdG8gbWF0Y2ggYSBzaW5nbGUgY2hhcmFjdGVyLgogKiBAcGFyYW0gc3RyaW5nICRjb2x1bW5fbmFtZSBUaGUgY29sdW1uIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqIFRoaXMgcmVzdWx0IGlkZW50aWZpZXIgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggYSBsaXN0IG9mIGNvbHVtbnMgYW5kCiAqIGFzc29jaWF0ZWQgcHJpdmlsZWdlcy4KICoKICogVGhlIHJlc3VsdCBzZXQgaGFzIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICoKICogVEFCTEVfQ0FUCiAqIFRBQkxFX1NDSEVNCiAqIFRBQkxFX05BTUUKICogQ09MVU1OX05BTUUKICogR1JBTlRPUgogKiBHUkFOVEVFCiAqIFBSSVZJTEVHRQogKiBJU19HUkFOVEFCTEUKICoKICogRHJpdmVycyBjYW4gcmVwb3J0IGFkZGl0aW9uYWwgY29sdW1ucy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19jb2x1bW5wcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUsIHN0cmluZyAkY29sdW1uX25hbWUpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5wcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJHRhYmxlX25hbWUsICRjb2x1bW5fbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBMaXN0cyBhbGwgY29sdW1ucyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgVGhlIGNvbHVtbiBuYW1lLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUQUJMRV9DQVQKICogVEFCTEVfU0NIRU0KICogVEFCTEVfTkFNRQogKiBDT0xVTU5fTkFNRQogKiBEQVRBX1RZUEUKICogVFlQRV9OQU1FCiAqIENPTFVNTl9TSVpFCiAqIEJVRkZFUl9MRU5HVEgKICogREVDSU1BTF9ESUdJVFMKICogTlVNX1BSRUNfUkFESVgKICogTlVMTEFCTEUKICogUkVNQVJLUwogKiBDT0xVTU5fREVGCiAqIFNRTF9EQVRBX1RZUEUKICogU1FMX0RBVEVUSU1FX1NVQgogKiBDSEFSX09DVEVUX0xFTkdUSAogKiBPUkRJTkFMX1BPU0lUSU9OCiAqIElTX05VTExBQkxFCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfY29sdW1ucygkY29ubmVjdGlvbl9pZCwgc3RyaW5nICRjYXRhbG9nID0gbnVsbCwgc3RyaW5nICRzY2hlbWEgPSBudWxsLCBzdHJpbmcgJHRhYmxlX25hbWUgPSBudWxsLCBzdHJpbmcgJGNvbHVtbl9uYW1lID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRjb2x1bW5fbmFtZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJHRhYmxlX25hbWUsICRjb2x1bW5fbmFtZSk7CiAgICB9IGVsc2VpZiAoJHRhYmxlX25hbWUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfY29sdW1ucygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZV9uYW1lKTsKICAgIH0gZWxzZWlmICgkc2NoZW1hICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX2NvbHVtbnMoJGNvbm5lY3Rpb25faWQsICRjYXRhbG9nLCAkc2NoZW1hKTsKICAgIH0gZWxzZWlmICgkY2F0YWxvZyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19jb2x1bW5zKCRjb25uZWN0aW9uX2lkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbW1pdHMgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIHRoZSBjb25uZWN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2NvbW1pdCgkY29ubmVjdGlvbl9pZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2NvbW1pdCgkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgRFNOIChhZnRlciBjYWxsaW5nIGl0CiAqIHNldmVyYWwgdGltZXMpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gaW50ICRmZXRjaF90eXBlIFRoZSBmZXRjaF90eXBlIGNhbiBiZSBvbmUgb2YgdHdvIGNvbnN0YW50IHR5cGVzOgogKiBTUUxfRkVUQ0hfRklSU1QsIFNRTF9GRVRDSF9ORVhULgogKiBVc2UgU1FMX0ZFVENIX0ZJUlNUIHRoZSBmaXJzdCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMKICogY2FsbGVkLCB0aGVyZWFmdGVyIHVzZSB0aGUgU1FMX0ZFVENIX05FWFQuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBGQUxTRSBvbiBlcnJvciwgYW4gYXJyYXkgdXBvbiBzdWNjZXNzLCBhbmQgTlVMTCBhZnRlciBmZXRjaGluZwogKiB0aGUgbGFzdCBhdmFpbGFibGUgRFNOLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2RhdGFfc291cmNlKCRjb25uZWN0aW9uX2lkLCBpbnQgJGZldGNoX3R5cGUpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZGF0YV9zb3VyY2UoJGNvbm5lY3Rpb25faWQsICRmZXRjaF90eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFNlbmRzIGFuIFNRTCBzdGF0ZW1lbnQgdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkcXVlcnlfc3RyaW5nIFRoZSBTUUwgc3RhdGVtZW50LgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGlzIHBhcmFtZXRlciBpcyBjdXJyZW50bHkgbm90IHVzZWQuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyIGlmIHRoZSBTUUwgY29tbWFuZCB3YXMgZXhlY3V0ZWQKICogc3VjY2Vzc2Z1bGx5LgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2V4ZWMoJGNvbm5lY3Rpb25faWQsIHN0cmluZyAkcXVlcnlfc3RyaW5nLCBpbnQgJGZsYWdzID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmbGFncyAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19leGVjKCRjb25uZWN0aW9uX2lkLCAkcXVlcnlfc3RyaW5nLCAkZmxhZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZXhlYygkY29ubmVjdGlvbl9pZCwgJHF1ZXJ5X3N0cmluZyk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBFeGVjdXRlcyBhIHN0YXRlbWVudCBwcmVwYXJlZCB3aXRoIG9kYmNfcHJlcGFyZS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZCByZXNvdXJjZSwgZnJvbSBvZGJjX3ByZXBhcmUuCiAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVyc19hcnJheSBQYXJhbWV0ZXJzIGluIHBhcmFtZXRlcl9hcnJheSB3aWxsIGJlCiAqIHN1YnN0aXR1dGVkIGZvciBwbGFjZWhvbGRlcnMgaW4gdGhlIHByZXBhcmVkIHN0YXRlbWVudCBpbiBvcmRlci4KICogRWxlbWVudHMgb2YgdGhpcyBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGJ5IGNhbGxpbmcgdGhpcwogKiBmdW5jdGlvbi4KICoKICogQW55IHBhcmFtZXRlcnMgaW4gcGFyYW1ldGVyX2FycmF5IHdoaWNoCiAqIHN0YXJ0IGFuZCBlbmQgd2l0aCBzaW5nbGUgcXVvdGVzIHdpbGwgYmUgdGFrZW4gYXMgdGhlIG5hbWUgb2YgYQogKiBmaWxlIHRvIHJlYWQgYW5kIHNlbmQgdG8gdGhlIGRhdGFiYXNlIHNlcnZlciBhcyB0aGUgZGF0YSBmb3IgdGhlCiAqIGFwcHJvcHJpYXRlIHBsYWNlaG9sZGVyLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2V4ZWN1dGUoJHJlc3VsdF9pZCwgYXJyYXkgJHBhcmFtZXRlcnNfYXJyYXkgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHBhcmFtZXRlcnNfYXJyYXkgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZXhlY3V0ZSgkcmVzdWx0X2lkLCAkcGFyYW1ldGVyc19hcnJheSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19leGVjdXRlKCRyZXN1bHRfaWQpOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIEZldGNoIG9uZSByZXN1bHQgcm93IGludG8gYXJyYXkuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgcmVzb3VyY2UuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZXN1bHRfYXJyYXkgVGhlIHJlc3VsdCBhcnJheQogKiB0aGF0IGNhbiBiZSBvZiBhbnkgdHlwZSBzaW5jZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byB0eXBlCiAqIGFycmF5LiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHRoZSBjb2x1bW4gdmFsdWVzIHN0YXJ0aW5nIGF0IGFycmF5CiAqIGluZGV4IDAuCiAqIEBwYXJhbSBpbnQgJHJvd251bWJlciBUaGUgcm93IG51bWJlci4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlc3VsdDsKICogRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfZmV0Y2hfaW50bygkcmVzdWx0X2lkLCA/YXJyYXkgJiRyZXN1bHRfYXJyYXksIGludCAkcm93bnVtYmVyID0gbnVsbCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHJvd251bWJlciAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19mZXRjaF9pbnRvKCRyZXN1bHRfaWQsICRyZXN1bHRfYXJyYXksICRyb3dudW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfZmV0Y2hfaW50bygkcmVzdWx0X2lkLCAkcmVzdWx0X2FycmF5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGZpZWxkIGxlbmd0aC4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9sZW4oJHJlc3VsdF9pZCwgaW50ICRmaWVsZF9udW1iZXIpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2ZpZWxkX2xlbigkcmVzdWx0X2lkLCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIG9jY3VweWluZyB0aGUgZ2l2ZW4gY29sdW1uIG51bWJlciBpbiB0aGUgZ2l2ZW4KICogcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIFRoZSBmaWVsZCBudW1iZXIuIEZpZWxkIG51bWJlcmluZyBzdGFydHMgYXQgMS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZmllbGQgbmFtZSBhcyBhIHN0cmluZy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9uYW1lKCRyZXN1bHRfaWQsIGludCAkZmllbGRfbnVtYmVyKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19maWVsZF9uYW1lKCRyZXN1bHRfaWQsICRmaWVsZF9udW1iZXIpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBjb2x1bW4gc2xvdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lZCBmaWVsZCBpbgogKiB0aGUgZ2l2ZW4gcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIFRoZSByZXN1bHQgaWRlbnRpZmllci4KICogQHBhcmFtIHN0cmluZyAkZmllbGRfbmFtZSBUaGUgZmllbGQgbmFtZS4KICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgZmllbGQgbnVtYmVyIGFzIGEgaW50ZWdlci4KICogRmllbGQgbnVtYmVyaW5nIHN0YXJ0cyBhdCAxLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2ZpZWxkX251bSgkcmVzdWx0X2lkLCBzdHJpbmcgJGZpZWxkX25hbWUpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX2ZpZWxkX251bSgkcmVzdWx0X2lkLCAkZmllbGRfbmFtZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBzY2FsZSBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGZpZWxkIHNjYWxlIGFzIGEgaW50ZWdlci4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19maWVsZF9zY2FsZSgkcmVzdWx0X2lkLCBpbnQgJGZpZWxkX251bWJlcik6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZmllbGRfc2NhbGUoJHJlc3VsdF9pZCwgJGZpZWxkX251bWJlcik7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXRzIHRoZSBTUUwgdHlwZSBvZiB0aGUgZmllbGQgcmVmZXJlbmNlZCBieSBudW1iZXIgaW4gdGhlIGdpdmVuIHJlc3VsdAogKiBpZGVudGlmaWVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCBUaGUgcmVzdWx0IGlkZW50aWZpZXIuCiAqIEBwYXJhbSBpbnQgJGZpZWxkX251bWJlciBUaGUgZmllbGQgbnVtYmVyLiBGaWVsZCBudW1iZXJpbmcgc3RhcnRzIGF0IDEuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGZpZWxkIHR5cGUgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfZmllbGRfdHlwZSgkcmVzdWx0X2lkLCBpbnQgJGZpZWxkX251bWJlcik6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZmllbGRfdHlwZSgkcmVzdWx0X2lkLCAkZmllbGRfbnVtYmVyKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgZm9yZWlnbiBrZXlzIGluIHRoZSBzcGVjaWZpZWQgdGFibGUgb3IgYSBsaXN0IG9mCiAqIGZvcmVpZ24ga2V5cyBpbiBvdGhlciB0YWJsZXMgdGhhdCByZWZlciB0byB0aGUgcHJpbWFyeSBrZXkgaW4gdGhlCiAqIHNwZWNpZmllZCB0YWJsZQogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRwa19jYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpIG9mIHRoZSBwcmltYXJ5IGtleSB0YWJsZS4KICogQHBhcmFtIHN0cmluZyAkcGtfc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKSBvZiB0aGUgcHJpbWFyeSBrZXkgdGFibGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBrX3RhYmxlIFRoZSBwcmltYXJ5IGtleSB0YWJsZS4KICogQHBhcmFtIHN0cmluZyAkZmtfY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKSBvZiB0aGUgZm9yZWlnbiBrZXkgdGFibGUuCiAqIEBwYXJhbSBzdHJpbmcgJGZrX3NjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkgb2YgdGhlIGZvcmVpZ24ga2V5IHRhYmxlLgogKiBAcGFyYW0gc3RyaW5nICRma190YWJsZSBUaGUgZm9yZWlnbiBrZXkgdGFibGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBQS1RBQkxFX0NBVAogKiBQS1RBQkxFX1NDSEVNCiAqIFBLVEFCTEVfTkFNRQogKiBQS0NPTFVNTl9OQU1FCiAqIEZLVEFCTEVfQ0FUCiAqIEZLVEFCTEVfU0NIRU0KICogRktUQUJMRV9OQU1FCiAqIEZLQ09MVU1OX05BTUUKICogS0VZX1NFUQogKiBVUERBVEVfUlVMRQogKiBERUxFVEVfUlVMRQogKiBGS19OQU1FCiAqIFBLX05BTUUKICogREVGRVJSQUJJTElUWQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2ZvcmVpZ25rZXlzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJHBrX2NhdGFsb2csIHN0cmluZyAkcGtfc2NoZW1hLCBzdHJpbmcgJHBrX3RhYmxlLCBzdHJpbmcgJGZrX2NhdGFsb2csIHN0cmluZyAkZmtfc2NoZW1hLCBzdHJpbmcgJGZrX3RhYmxlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfZm9yZWlnbmtleXMoJGNvbm5lY3Rpb25faWQsICRwa19jYXRhbG9nLCAkcGtfc2NoZW1hLCAkcGtfdGFibGUsICRma19jYXRhbG9nLCAkZmtfc2NoZW1hLCAkZmtfdGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IGRhdGEgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhIHNvdXJjZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIGludCAkZGF0YV90eXBlIFRoZSBkYXRhIHR5cGUsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBpbmZvcm1hdGlvbiB0byBhCiAqIHNpbmdsZSBkYXRhIHR5cGUuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUWVBFX05BTUUKICogREFUQV9UWVBFCiAqIFBSRUNJU0lPTgogKiBMSVRFUkFMX1BSRUZJWAogKiBMSVRFUkFMX1NVRkZJWAogKiBDUkVBVEVfUEFSQU1TCiAqIE5VTExBQkxFCiAqIENBU0VfU0VOU0lUSVZFCiAqIFNFQVJDSEFCTEUKICogVU5TSUdORURfQVRUUklCVVRFCiAqIE1PTkVZCiAqIEFVVE9fSU5DUkVNRU5UCiAqIExPQ0FMX1RZUEVfTkFNRQogKiBNSU5JTVVNX1NDQUxFCiAqIE1BWElNVU1fU0NBTEUKICoKICoKICogVGhlIHJlc3VsdCBzZXQgaXMgb3JkZXJlZCBieSBEQVRBX1RZUEUgYW5kIFRZUEVfTkFNRS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCwgaW50ICRkYXRhX3R5cGUgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGRhdGFfdHlwZSAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCwgJGRhdGFfdHlwZSk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb2RiY19nZXR0eXBlaW5mbygkY29ubmVjdGlvbl9pZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBDb250cm9scyBoYW5kbGluZyBvZiBMT05HLCBMT05HVkFSQ0hBUiBhbmQgTE9OR1ZBUkJJTkFSWSBjb2x1bW5zLgogKiBUaGUgZGVmYXVsdCBsZW5ndGggY2FuIGJlIHNldCB1c2luZyB0aGUKICogdW9kYmMuZGVmYXVsdGxybCBwaHAuaW5pIGRpcmVjdGl2ZS4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCB0byBQSFAgaXMgY29udHJvbGxlZCBieSB0aGUgcGFyYW1ldGVyCiAqIGxlbmd0aC4gSWYgaXQgaXMgc2V0IHRvIDAsIGxvbmcgY29sdW1uIGRhdGEgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiAqIGNsaWVudCAoaS5lLiBwcmludGVkKSB3aGVuIHJldHJpZXZlZCB3aXRoIG9kYmNfcmVzdWx0LgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX2xvbmdyZWFkbGVuKCRyZXN1bHRfaWQsIGludCAkbGVuZ3RoKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfbG9uZ3JlYWRsZW4oJHJlc3VsdF9pZCwgJGxlbmd0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUHJlcGFyZXMgYSBzdGF0ZW1lbnQgZm9yIGV4ZWN1dGlvbi4gVGhlIHJlc3VsdCBpZGVudGlmaWVyIGNhbiBiZSB1c2VkCiAqIGxhdGVyIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCB3aXRoIG9kYmNfZXhlY3V0ZS4KICoKICogU29tZSBkYXRhYmFzZXMgKHN1Y2ggYXMgSUJNIERCMiwgTVMgU1FMIFNlcnZlciwgYW5kIE9yYWNsZSkgc3VwcG9ydAogKiBzdG9yZWQgcHJvY2VkdXJlcyB0aGF0IGFjY2VwdCBwYXJhbWV0ZXJzIG9mIHR5cGUgSU4sIElOT1VULCBhbmQgT1VUIGFzCiAqIGRlZmluZWQgYnkgdGhlIE9EQkMgc3BlY2lmaWNhdGlvbi4gIEhvd2V2ZXIsIHRoZSBVbmlmaWVkIE9EQkMgZHJpdmVyCiAqIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHBhcmFtZXRlcnMgb2YgdHlwZSBJTiB0byBzdG9yZWQgcHJvY2VkdXJlcy4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkcXVlcnlfc3RyaW5nIFRoZSBxdWVyeSBzdHJpbmcgc3RhdGVtZW50IGJlaW5nIHByZXBhcmVkLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gT0RCQyByZXN1bHQgaWRlbnRpZmllciBpZiB0aGUgU1FMIGNvbW1hbmQgd2FzIHByZXBhcmVkCiAqIHN1Y2Nlc3NmdWxseS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19wcmVwYXJlKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJHF1ZXJ5X3N0cmluZykKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX3ByZXBhcmUoJGNvbm5lY3Rpb25faWQsICRxdWVyeV9zdHJpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcwogKiB0aGF0IGNvbXByaXNlIHRoZSBwcmltYXJ5IGtleSBmb3IgYSB0YWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX2lkIFRoZSBPREJDIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogc2VlIG9kYmNfY29ubmVjdCBmb3IgZGV0YWlscy4KICogQHBhcmFtIHN0cmluZyAkY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkdGFibGUKICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFRBQkxFX0NBVAogKiBUQUJMRV9TQ0hFTQogKiBUQUJMRV9OQU1FCiAqIENPTFVNTl9OQU1FCiAqIEtFWV9TRVEKICogUEtfTkFNRQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3ByaW1hcnlrZXlzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfcHJpbWFyeWtleXMoJGNvbm5lY3Rpb25faWQsICRjYXRhbG9nLCAkc2NoZW1hLCAkdGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUHJpbnRzIGFsbCByb3dzIGZyb20gYSByZXN1bHQgaWRlbnRpZmllciBwcm9kdWNlZCBieQogKiBvZGJjX2V4ZWMuIFRoZSByZXN1bHQgaXMgcHJpbnRlZCBpbiBIVE1MIHRhYmxlIGZvcm1hdC4KICogVGhlIGRhdGEgaXMgbm90IGVzY2FwZWQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHM7IGl0IGlzCiAqIG1lcmVseSBtZWFudCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMsIHRvIGdldCBhIHJlc3VsdCBzZXQgcXVpY2tseSByZW5kZXJlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIHJlc3VsdCBpZGVudGlmaWVyLgogKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgQWRkaXRpb25hbCBvdmVyYWxsIHRhYmxlIGZvcm1hdHRpbmcuCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfcmVzdWx0X2FsbCgkcmVzdWx0X2lkLCBzdHJpbmcgJGZvcm1hdCA9IG51bGwpOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRmb3JtYXQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfcmVzdWx0X2FsbCgkcmVzdWx0X2lkLCAkZm9ybWF0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3Jlc3VsdF9hbGwoJHJlc3VsdF9pZCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBHZXQgcmVzdWx0IGRhdGEKICoKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWQgVGhlIE9EQkMgcmVzb3VyY2UuCiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgVGhlIGZpZWxkIG5hbWUgYmVpbmcgcmV0cmlldmVkLiBJdCBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIgY29udGFpbmluZwogKiB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgZmllbGQgeW91IHdhbnQ7IG9yIGl0IGNhbiBiZSBhIHN0cmluZwogKiBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMgb2YgdGhlIGZpZWxkLCBGQUxTRSBvbiBlcnJvciwgTlVMTCBmb3IKICogTlVMTCBkYXRhLCBvciBUUlVFIGZvciBiaW5hcnkgZGF0YS4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19yZXN1bHQoJHJlc3VsdF9pZCwgJGZpZWxkKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfcmVzdWx0KCRyZXN1bHRfaWQsICRmaWVsZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSb2xscyBiYWNrIGFsbCBwZW5kaW5nIHN0YXRlbWVudHMgb24gdGhlIGNvbm5lY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfcm9sbGJhY2soJGNvbm5lY3Rpb25faWQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcb2RiY19yb2xsYmFjaygkY29ubmVjdGlvbl9pZCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVb2RiY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZmlkZGxpbmcgd2l0aCB0aGUgT0RCQyBvcHRpb25zIGZvciBhCiAqIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBvciBxdWVyeSByZXN1bHQuICBJdCB3YXMgd3JpdHRlbiB0byBoZWxwCiAqIGZpbmQgd29yayBhcm91bmQgdG8gcHJvYmxlbXMgaW4gcXVpcmt5IE9EQkMgZHJpdmVycy4gIFlvdSBzaG91bGQKICogcHJvYmFibHkgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFuIE9EQkMgcHJvZ3JhbW1lciBhbmQKICogdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyB0aGUgdmFyaW91cyBvcHRpb25zIHdpbGwgaGF2ZS4gIFlvdSB3aWxsCiAqIGNlcnRhaW5seSBuZWVkIGEgZ29vZCBPREJDIHJlZmVyZW5jZSB0byBleHBsYWluIGFsbCB0aGUgZGlmZmVyZW50CiAqIG9wdGlvbnMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkLiAgRGlmZmVyZW50IGRyaXZlciB2ZXJzaW9ucwogKiBzdXBwb3J0IGRpZmZlcmVudCBvcHRpb25zLgogKgogKiBCZWNhdXNlIHRoZSBlZmZlY3RzIG1heSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgT0RCQyBkcml2ZXIsIHVzZSBvZgogKiB0aGlzIGZ1bmN0aW9uIGluIHNjcmlwdHMgdG8gYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUgaXMKICogc3Ryb25nbHkgZGlzY291cmFnZWQuICBBbHNvLCBzb21lIE9EQkMgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZQogKiB0byB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdGhleSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KICogaXMgZXN0YWJsaXNoZWQgb3IgdGhlIHF1ZXJ5IGlzIHByZXBhcmVkLiAgSG93ZXZlciwgaWYgb24gYQogKiBwYXJ0aWN1bGFyIGpvYiBpdCBjYW4gbWFrZSBQSFAgd29yayBzbyB5b3VyIGJvc3MgZG9lc24ndCB0ZWxsIHlvdQogKiB0byB1c2UgYSBjb21tZXJjaWFsIHByb2R1Y3QsIHRoYXQncyBhbGwgdGhhdCByZWFsbHkKICogbWF0dGVycy4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBJcyBhIGNvbm5lY3Rpb24gaWQgb3IgcmVzdWx0IGlkIG9uIHdoaWNoIHRvIGNoYW5nZSB0aGUgc2V0dGluZ3MuCiAqIEZvciBTUUxTZXRDb25uZWN0T3B0aW9uKCksIHRoaXMgaXMgYSBjb25uZWN0aW9uIGlkLgogKiBGb3IgU1FMU2V0U3RtdE9wdGlvbigpLCB0aGlzIGlzIGEgcmVzdWx0IGlkLgogKiBAcGFyYW0gaW50ICRmdW5jdGlvbiBJcyB0aGUgT0RCQyBmdW5jdGlvbiB0byB1c2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUKICogMSBmb3IgU1FMU2V0Q29ubmVjdE9wdGlvbigpIGFuZAogKiAyIGZvciBTUUxTZXRTdG10T3B0aW9uKCkuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbiBUaGUgb3B0aW9uIHRvIHNldC4KICogQHBhcmFtIGludCAkcGFyYW0gVGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gb3B0aW9uLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3NldG9wdGlvbigkaWQsIGludCAkZnVuY3Rpb24sIGludCAkb3B0aW9uLCBpbnQgJHBhcmFtKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfc2V0b3B0aW9uKCRpZCwgJGZ1bmN0aW9uLCAkb3B0aW9uLCAkcGFyYW0pOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFJldHJpZXZlcyBlaXRoZXIgdGhlIG9wdGltYWwgc2V0IG9mIGNvbHVtbnMgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEKICogcm93IGluIHRoZSB0YWJsZSwgb3IgY29sdW1ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbiBhbnkKICogdmFsdWUgaW4gdGhlIHJvdyBpcyB1cGRhdGVkIGJ5IGEgdHJhbnNhY3Rpb24uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBpbnQgJHR5cGUKICogQHBhcmFtIHN0cmluZyAkY2F0YWxvZyBUaGUgY2F0YWxvZyAoJ3F1YWxpZmllcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFRoZSBzY2hlbWEgKCdvd25lcicgaW4gT0RCQyAyIHBhcmxhbmNlKS4KICogQHBhcmFtIHN0cmluZyAkdGFibGUgVGhlIHRhYmxlLgogKiBAcGFyYW0gaW50ICRzY29wZSBUaGUgc2NvcGUsIHdoaWNoIG9yZGVycyB0aGUgcmVzdWx0IHNldC4KICogT25lIG9mIFNRTF9TQ09QRV9DVVJST1csIFNRTF9TQ09QRV9UUkFOU0FDVElPTgogKiBvciBTUUxfU0NPUEVfU0VTU0lPTi4KICogQHBhcmFtIGludCAkbnVsbGFibGUgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJldHVybiBzcGVjaWFsIGNvbHVtbnMgdGhhdCBjYW4gaGF2ZSBhIE5VTEwgdmFsdWUuCiAqIE9uZSBvZiBTUUxfTk9fTlVMTFMgb3IgU1FMX05VTExBQkxFIC4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFNDT1BFCiAqIENPTFVNTl9OQU1FCiAqIERBVEFfVFlQRQogKiBUWVBFX05BTUUKICogQ09MVU1OX1NJWkUKICogQlVGRkVSX0xFTkdUSAogKiBERUNJTUFMX0RJR0lUUwogKiBQU0VVRE9fQ09MVU1OCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfc3BlY2lhbGNvbHVtbnMoJGNvbm5lY3Rpb25faWQsIGludCAkdHlwZSwgc3RyaW5nICRjYXRhbG9nLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICR0YWJsZSwgaW50ICRzY29wZSwgaW50ICRudWxsYWJsZSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxvZGJjX3NwZWNpYWxjb2x1bW5zKCRjb25uZWN0aW9uX2lkLCAkdHlwZSwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZSwgJHNjb3BlLCAkbnVsbGFibGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgYSB0YWJsZSBhbmQgaXRzIGluZGV4ZXMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBUaGUgT0RCQyBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHNlZSBvZGJjX2Nvbm5lY3QgZm9yIGRldGFpbHMuCiAqIEBwYXJhbSBzdHJpbmcgJGNhdGFsb2cgVGhlIGNhdGFsb2cgKCdxdWFsaWZpZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYSBUaGUgc2NoZW1hICgnb3duZXInIGluIE9EQkMgMiBwYXJsYW5jZSkuCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgVGhlIHRhYmxlIG5hbWUuCiAqIEBwYXJhbSBpbnQgJHVuaXF1ZSBUaGUgdHlwZSBvZiB0aGUgaW5kZXguCiAqIE9uZSBvZiBTUUxfSU5ERVhfVU5JUVVFIG9yIFNRTF9JTkRFWF9BTEwuCiAqIEBwYXJhbSBpbnQgJGFjY3VyYWN5IE9uZSBvZiBTUUxfRU5TVVJFIG9yIFNRTF9RVUlDSy4KICogVGhlIGxhdHRlciByZXF1ZXN0cyB0aGF0IHRoZSBkcml2ZXIgcmV0cmlldmUgdGhlIENBUkRJTkFMSVRZIGFuZAogKiBQQUdFUyBvbmx5IGlmIHRoZXkgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGZyb20gdGhlIHNlcnZlci4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGFuIE9EQkMgcmVzdWx0IGlkZW50aWZpZXIuCiAqCiAqIFRoZSByZXN1bHQgc2V0IGhhcyB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqCiAqIFRBQkxFX0NBVAogKiBUQUJMRV9TQ0hFTQogKiBUQUJMRV9OQU1FCiAqIE5PTl9VTklRVUUKICogSU5ERVhfUVVBTElGSUVSCiAqIElOREVYX05BTUUKICogVFlQRQogKiBPUkRJTkFMX1BPU0lUSU9OCiAqIENPTFVNTl9OQU1FCiAqIEFTQ19PUl9ERVNDCiAqIENBUkRJTkFMSVRZCiAqIFBBR0VTCiAqIEZJTFRFUl9DT05ESVRJT04KICoKICogRHJpdmVycyBjYW4gcmVwb3J0IGFkZGl0aW9uYWwgY29sdW1ucy4KICogQHRocm93cyBVb2RiY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gb2RiY19zdGF0aXN0aWNzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2csIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUsIGludCAkdW5pcXVlLCBpbnQgJGFjY3VyYWN5KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfc3RhdGlzdGljcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICR0YWJsZV9uYW1lLCAkdW5pcXVlLCAkYWNjdXJhY3kpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTGlzdHMgdGFibGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgYW5kIHRoZSBwcml2aWxlZ2VzIGFzc29jaWF0ZWQKICogd2l0aCBlYWNoIHRhYmxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHJldHVybiByZXNvdXJjZSBBbiBPREJDIHJlc3VsdCBpZGVudGlmaWVyLgogKgogKiBUaGUgcmVzdWx0IHNldCBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKgogKiBUQUJMRV9DQVQKICogVEFCTEVfU0NIRU0KICogVEFCTEVfTkFNRQogKiBHUkFOVE9SCiAqIEdSQU5URUUKICogUFJJVklMRUdFCiAqIElTX0dSQU5UQUJMRQogKgogKiBEcml2ZXJzIGNhbiByZXBvcnQgYWRkaXRpb25hbCBjb2x1bW5zLgogKiBAdGhyb3dzIFVvZGJjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvZGJjX3RhYmxlcHJpdmlsZWdlcygkY29ubmVjdGlvbl9pZCwgc3RyaW5nICRjYXRhbG9nLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICRuYW1lKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXG9kYmNfdGFibGVwcml2aWxlZ2VzKCRjb25uZWN0aW9uX2lkLCAkY2F0YWxvZywgJHNjaGVtYSwgJG5hbWUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9kYmNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogTGlzdHMgYWxsIHRhYmxlcyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLgogKgogKiBUbyBzdXBwb3J0IGVudW1lcmF0aW9uIG9mIHF1YWxpZmllcnMsIG93bmVycywgYW5kIHRhYmxlIHR5cGVzLAogKiB0aGUgZm9sbG93aW5nIHNwZWNpYWwgc2VtYW50aWNzIGZvciB0aGUKICogY2F0YWxvZywgc2NoZW1hLAogKiBuYW1lLCBhbmQKICogdGFibGVfdHlwZSBhcmUgYXZhaWxhYmxlOgogKgogKgogKgogKiBJZiBjYXRhbG9nIGlzIGEgc2luZ2xlIHBlcmNlbnQKICogY2hhcmFjdGVyICglKSBhbmQgc2NoZW1hIGFuZAogKiBuYW1lIGFyZSBlbXB0eSBzdHJpbmdzLCB0aGVuIHRoZSByZXN1bHQKICogc2V0IGNvbnRhaW5zIGEgbGlzdCBvZiB2YWxpZCBxdWFsaWZpZXJzIGZvciB0aGUgZGF0YQogKiBzb3VyY2UuIChBbGwgY29sdW1ucyBleGNlcHQgdGhlIFRBQkxFX1FVQUxJRklFUiBjb2x1bW4gY29udGFpbgogKiBOVUxMcy4pCiAqCiAqCiAqCiAqCiAqIElmIHNjaGVtYSBpcyBhIHNpbmdsZSBwZXJjZW50IGNoYXJhY3RlcgogKiAoJSkgYW5kIGNhdGFsb2cgYW5kCiAqIG5hbWUgYXJlIGVtcHR5IHN0cmluZ3MsIHRoZW4gdGhlIHJlc3VsdAogKiBzZXQgY29udGFpbnMgYSBsaXN0IG9mIHZhbGlkIG93bmVycyBmb3IgdGhlIGRhdGEgc291cmNlLiAoQWxsCiAqIGNvbHVtbnMgZXhjZXB0IHRoZSBUQUJMRV9PV05FUiBjb2x1bW4gY29udGFpbgogKiBOVUxMcy4pCiAqCiAqCiAqCiAqCiAqIElmIHRhYmxlX3R5cGUgaXMgYSBzaW5nbGUgcGVyY2VudAogKiBjaGFyYWN0ZXIgKCUpIGFuZCBjYXRhbG9nLAogKiBzY2hlbWEgYW5kIG5hbWUKICogYXJlIGVtcHR5IHN0cmluZ3MsIHRoZW4gdGhlIHJlc3VsdCBzZXQgY29udGFpbnMgYSBsaXN0IG9mCiAqIHZhbGlkIHRhYmxlIHR5cGVzIGZvciB0aGUgZGF0YSBzb3VyY2UuIChBbGwgY29sdW1ucyBleGNlcHQgdGhlCiAqIFRBQkxFX1RZUEUgY29sdW1uIGNvbnRhaW4gTlVMTHMuKQogKgogKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgVGhlIE9EQkMgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiBzZWUgb2RiY19jb25uZWN0IGZvciBkZXRhaWxzLgogKiBAcGFyYW0gc3RyaW5nICRjYXRhbG9nIFRoZSBjYXRhbG9nICgncXVhbGlmaWVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgVGhlIHNjaGVtYSAoJ293bmVyJyBpbiBPREJDIDIgcGFybGFuY2UpLgogKiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdHRlcm5zOgogKiAlIHRvIG1hdGNoIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLAogKiBhbmQgXyB0byBtYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUuCiAqIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0dGVybnM6CiAqICUgdG8gbWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMsCiAqIGFuZCBfIHRvIG1hdGNoIGEgc2luZ2xlIGNoYXJhY3Rlci4KICogQHBhcmFtIHN0cmluZyAkdHlwZXMgSWYgdGFibGVfdHlwZSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBpdAogKiBtdXN0IGNvbnRhaW4gYSBsaXN0IG9mIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgZm9yIHRoZSB0eXBlcyBvZgogKiBpbnRlcmVzdDsgZWFjaCB2YWx1ZSBtYXkgYmUgZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3RlcyAoJykgb3IKICogdW5xdW90ZWQuIEZvciBleGFtcGxlLCAnVEFCTEUnLCdWSUVXJyBvciBUQUJMRSwgVklFVy4gIElmIHRoZQogKiBkYXRhIHNvdXJjZSBkb2VzIG5vdCBzdXBwb3J0IGEgc3BlY2lmaWVkIHRhYmxlIHR5cGUsCiAqIG9kYmNfdGFibGVzIGRvZXMgbm90IHJldHVybiBhbnkgcmVzdWx0cyBmb3IKICogdGhhdCB0eXBlLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gT0RCQyByZXN1bHQgaWRlbnRpZmllciBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbi4KICoKICogVGhlIHJlc3VsdCBzZXQgaGFzIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICoKICogVEFCTEVfQ0FUCiAqIFRBQkxFX1NDSEVNCiAqIFRBQkxFX05BTUUKICogVEFCTEVfVFlQRQogKiBSRU1BUktTCiAqCiAqIERyaXZlcnMgY2FuIHJlcG9ydCBhZGRpdGlvbmFsIGNvbHVtbnMuCiAqIEB0aHJvd3MgVW9kYmNFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIG9kYmNfdGFibGVzKCRjb25uZWN0aW9uX2lkLCBzdHJpbmcgJGNhdGFsb2cgPSBudWxsLCBzdHJpbmcgJHNjaGVtYSA9IG51bGwsIHN0cmluZyAkbmFtZSA9IG51bGwsIHN0cmluZyAkdHlwZXMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJHR5cGVzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICRuYW1lLCAkdHlwZXMpOwogICAgfSBlbHNlaWYgKCRuYW1lICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEsICRuYW1lKTsKICAgIH0gZWxzZWlmICgkc2NoZW1hICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2csICRzY2hlbWEpOwogICAgfSBlbHNlaWYgKCRjYXRhbG9nICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxvZGJjX3RhYmxlcygkY29ubmVjdGlvbl9pZCwgJGNhdGFsb2cpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXG9kYmNfdGFibGVzKCRjb25uZWN0aW9uX2lkKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVvZGJjRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/uopz.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVb3B6RXhjZXB0aW9uOwoKLyoqCiAqIE1ha2VzIGNsYXNzIGV4dGVuZCBwYXJlbnQKICoKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGV4dGVuZAogKiBAcGFyYW0gc3RyaW5nICRwYXJlbnQgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGluaGVyaXQKICogQHRocm93cyBVb3B6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1b3B6X2V4dGVuZChzdHJpbmcgJGNsYXNzLCBzdHJpbmcgJHBhcmVudCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1b3B6X2V4dGVuZCgkY2xhc3MsICRwYXJlbnQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9wekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgY2xhc3MgaW1wbGVtZW50IGludGVyZmFjZQogKgogKiBAcGFyYW0gc3RyaW5nICRjbGFzcwogKiBAcGFyYW0gc3RyaW5nICRpbnRlcmZhY2UKICogQHRocm93cyBVb3B6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB1b3B6X2ltcGxlbWVudChzdHJpbmcgJGNsYXNzLCBzdHJpbmcgJGludGVyZmFjZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx1b3B6X2ltcGxlbWVudCgkY2xhc3MsICRpbnRlcmZhY2UpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVW9wekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xVcmxFeGNlcHRpb247CgovKioKICogRGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGVuY29kZWQgZGF0YS4KICogQHBhcmFtIGJvb2wgJHN0cmljdCBJZiB0aGUgc3RyaWN0IHBhcmFtZXRlciBpcyBzZXQgdG8gVFJVRQogKiB0aGVuIHRoZSBiYXNlNjRfZGVjb2RlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCiAqIEZBTFNFIGlmIHRoZSBpbnB1dCBjb250YWlucyBjaGFyYWN0ZXIgZnJvbSBvdXRzaWRlIHRoZSBiYXNlNjQKICogYWxwaGFiZXQuIE90aGVyd2lzZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbCBiZSBzaWxlbnRseSBkaXNjYXJkZWQuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGRlY29kZWQgZGF0YS4gVGhlIHJldHVybmVkIGRhdGEgbWF5IGJlCiAqIGJpbmFyeS4KICogQHRocm93cyBVcmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGJhc2U2NF9kZWNvZGUoc3RyaW5nICRkYXRhLCBib29sICRzdHJpY3QgPSBmYWxzZSk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGJhc2U2NF9kZWNvZGUoJGRhdGEsICRzdHJpY3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgVXJsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIGdldF9oZWFkZXJzIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgaGVhZGVycyBzZW50CiAqIGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uc2UgdG8gYSBIVFRQIHJlcXVlc3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCBUaGUgdGFyZ2V0IFVSTC4KICogQHBhcmFtIGludCAkZm9ybWF0IElmIHRoZSBvcHRpb25hbCBmb3JtYXQgcGFyYW1ldGVyIGlzIHNldCB0byBub24temVybywKICogZ2V0X2hlYWRlcnMgcGFyc2VzIHRoZSByZXNwb25zZSBhbmQgc2V0cyB0aGUKICogYXJyYXkncyBrZXlzLgogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgQSB2YWxpZCBjb250ZXh0IHJlc291cmNlIGNyZWF0ZWQgd2l0aAogKiBzdHJlYW1fY29udGV4dF9jcmVhdGUuCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBpbmRleGVkIG9yIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIGhlYWRlcnMuCiAqIEB0aHJvd3MgVXJsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnZXRfaGVhZGVycyhzdHJpbmcgJHVybCwgaW50ICRmb3JtYXQgPSAwLCAkY29udGV4dCA9IG51bGwpOiBhcnJheQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGNvbnRleHQgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGdldF9oZWFkZXJzKCR1cmwsICRmb3JtYXQsICRjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnZXRfaGVhZGVycygkdXJsLCAkZm9ybWF0KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFVybEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIFVSTCBhbmQgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGFueQogKiBvZiB0aGUgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoZSBVUkwgdGhhdCBhcmUgcHJlc2VudC4KICogVGhlIHZhbHVlcyBvZiB0aGUgYXJyYXkgZWxlbWVudHMgYXJlIG5vdCBVUkwgZGVjb2RlZC4KICoKICogVGhpcyBmdW5jdGlvbiBpcyBub3QgbWVhbnQgdG8gdmFsaWRhdGUKICogdGhlIGdpdmVuIFVSTCwgaXQgb25seSBicmVha3MgaXQgdXAgaW50byB0aGUgYWJvdmUgbGlzdGVkIHBhcnRzLiBQYXJ0aWFsCiAqIFVSTHMgYXJlIGFsc28gYWNjZXB0ZWQsIHBhcnNlX3VybCB0cmllcyBpdHMgYmVzdCB0bwogKiBwYXJzZSB0aGVtIGNvcnJlY3RseS4KICoKICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gcGFyc2UuIEludmFsaWQgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkKICogXy4KICogQHBhcmFtIGludCAkY29tcG9uZW50IFNwZWNpZnkgb25lIG9mIFBIUF9VUkxfU0NIRU1FLAogKiBQSFBfVVJMX0hPU1QsIFBIUF9VUkxfUE9SVCwKICogUEhQX1VSTF9VU0VSLCBQSFBfVVJMX1BBU1MsCiAqIFBIUF9VUkxfUEFUSCwgUEhQX1VSTF9RVUVSWQogKiBvciBQSFBfVVJMX0ZSQUdNRU5UIHRvIHJldHJpZXZlIGp1c3QgYSBzcGVjaWZpYwogKiBVUkwgY29tcG9uZW50IGFzIGEgc3RyaW5nIChleGNlcHQgd2hlbgogKiBQSFBfVVJMX1BPUlQgaXMgZ2l2ZW4sIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybgogKiB2YWx1ZSB3aWxsIGJlIGFuIGludGVnZXIpLgogKiBAcmV0dXJuIG1peGVkIE9uIHNlcmlvdXNseSBtYWxmb3JtZWQgVVJMcywgcGFyc2VfdXJsLgogKgogKiBJZiB0aGUgY29tcG9uZW50IHBhcmFtZXRlciBpcyBvbWl0dGVkLCBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBpcyByZXR1cm5lZC4gQXQgbGVhc3Qgb25lIGVsZW1lbnQgd2lsbCBiZQogKiBwcmVzZW50IHdpdGhpbiB0aGUgYXJyYXkuIFBvdGVudGlhbCBrZXlzIHdpdGhpbiB0aGlzIGFycmF5IGFyZToKICoKICoKICoKICogc2NoZW1lIC0gZS5nLiBodHRwCiAqCiAqCiAqCiAqCiAqIGhvc3QKICoKICoKICoKICoKICogcG9ydAogKgogKgogKgogKgogKiB1c2VyCiAqCiAqCiAqCiAqCiAqIHBhc3MKICoKICoKICoKICoKICogcGF0aAogKgogKgogKgogKgogKiBxdWVyeSAtIGFmdGVyIHRoZSBxdWVzdGlvbiBtYXJrID8KICoKICoKICoKICoKICogZnJhZ21lbnQgLSBhZnRlciB0aGUgaGFzaG1hcmsgIwogKgogKgogKgogKgogKiBJZiB0aGUgY29tcG9uZW50IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsCiAqIHBhcnNlX3VybCByZXR1cm5zIGEgc3RyaW5nIChvciBhbgogKiBpbnRlZ2VyLCBpbiB0aGUgY2FzZSBvZiBQSFBfVVJMX1BPUlQpCiAqIGluc3RlYWQgb2YgYW4gYXJyYXkuIElmIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QKICogd2l0aGluIHRoZSBnaXZlbiBVUkwsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICogQHRocm93cyBVcmxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHBhcnNlX3VybChzdHJpbmcgJHVybCwgaW50ICRjb21wb25lbnQgPSAtMSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwYXJzZV91cmwoJHVybCwgJGNvbXBvbmVudCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBVcmxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/var.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xWYXJFeGNlcHRpb247CgovKioKICogU2V0IHRoZSB0eXBlIG9mIHZhcmlhYmxlIHZhciB0bwogKiB0eXBlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhciBUaGUgdmFyaWFibGUgYmVpbmcgY29udmVydGVkLgogKiBAcGFyYW0gc3RyaW5nICR0eXBlIFBvc3NpYmxlcyB2YWx1ZXMgb2YgdHlwZSBhcmU6CiAqCiAqCiAqCiAqICJib29sZWFuIiBvciAiYm9vbCIKICoKICoKICoKICoKICogImludGVnZXIiIG9yICJpbnQiCiAqCiAqCiAqCiAqCiAqICJmbG9hdCIgb3IgImRvdWJsZSIKICoKICoKICoKICoKICogInN0cmluZyIKICoKICoKICoKICoKICogImFycmF5IgogKgogKgogKgogKgogKiAib2JqZWN0IgogKgogKgogKgogKgogKiAibnVsbCIKICoKICoKICoKICogQHRocm93cyBWYXJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHNldHR5cGUoJiR2YXIsIHN0cmluZyAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxzZXR0eXBlKCR2YXIsICR0eXBlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFZhckV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xdiff.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYZGlmZkV4Y2VwdGlvbjsKCi8qKgogKiBNYWtlcyBhIGJpbmFyeSBkaWZmIG9mIHR3byBmaWxlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBwYXRjaCBmaWxlLgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYm90aCB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMuIFJlc3VsdGluZyBwYXRjaAogKiBmaWxlIGNhbiBiZSBsYXRlciBhcHBsaWVkIHVzaW5nIHhkaWZmX2ZpbGVfYnBhdGNoL3hkaWZmX3N0cmluZ19icGF0Y2guCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9maWxlIFBhdGggdG8gdGhlIGZpcnN0IGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJvbGQiIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19maWxlIFBhdGggdG8gdGhlIHNlY29uZCBmaWxlLiBUaGlzIGZpbGUgYWN0cyBhcyAibmV3IiBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBwYXRjaCBmaWxlLiBSZXN1bHRpbmcgZmlsZSBjb250YWlucyBkaWZmZXJlbmNlcwogKiBiZXR3ZWVuICJvbGQiIGFuZCAibmV3IiBmaWxlcy4gSXQgaXMgaW4gYmluYXJ5IGZvcm1hdCBhbmQgaXMgaHVtYW4tdW5yZWFkYWJsZS4KICogQHRocm93cyBYZGlmZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9iZGlmZihzdHJpbmcgJG9sZF9maWxlLCBzdHJpbmcgJG5ld19maWxlLCBzdHJpbmcgJGRlc3QpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceGRpZmZfZmlsZV9iZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhdGNoZXMgYSBmaWxlIHdpdGggYSBiaW5hcnkKICogcGF0Y2ggYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgZmlsZSBkZXN0LgogKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgcGF0Y2hlcyBjcmVhdGVkIGJvdGggdmlhIHhkaWZmX2ZpbGVfYmRpZmYKICogYW5kIHhkaWZmX2ZpbGVfcmFiZGlmZiBmdW5jdGlvbnMgb3IgdGhlaXIgc3RyaW5nIGNvdW50ZXJwYXJ0cy4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgb3JpZ2luYWwgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIGJpbmFyeSBwYXRjaCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBmaWxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX2JwYXRjaChzdHJpbmcgJGZpbGUsIHN0cmluZyAkcGF0Y2gsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9maWxlX2JwYXRjaCgkZmlsZSwgJHBhdGNoLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYSBiaW5hcnkgZGlmZiBvZiB0d28gZmlsZXMgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgcGF0Y2ggZmlsZS4KICogVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIGJvdGggdGV4dCBhbmQgYmluYXJ5IGZpbGVzLiBSZXN1bHRpbmcgcGF0Y2gKICogZmlsZSBjYW4gYmUgbGF0ZXIgYXBwbGllZCB1c2luZyB4ZGlmZl9maWxlX2JwYXRjaC4KICoKICogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNS4wIHRoaXMgZnVuY3Rpb24gaXMgYW4gYWxpYXMgb2YgeGRpZmZfZmlsZV9iZGlmZi4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuIFJlc3VsdGluZyBmaWxlIGNvbnRhaW5zIGRpZmZlcmVuY2VzCiAqIGJldHdlZW4gIm9sZCIgYW5kICJuZXciIGZpbGVzLiBJdCBpcyBpbiBiaW5hcnkgZm9ybWF0IGFuZCBpcyBodW1hbi11bnJlYWRhYmxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX2RpZmZfYmluYXJ5KHN0cmluZyAkb2xkX2ZpbGUsIHN0cmluZyAkbmV3X2ZpbGUsIHN0cmluZyAkZGVzdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9maWxlX2RpZmZfYmluYXJ5KCRvbGRfZmlsZSwgJG5ld19maWxlLCAkZGVzdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogTWFrZXMgYW4gdW5pZmllZCBkaWZmIGNvbnRhaW5pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiBvbGRfZmlsZSBhbmQKICogbmV3X2ZpbGUgYW5kIHN0b3JlcyBpdCBpbiBkZXN0IGZpbGUuIFRoZQogKiByZXN1bHRpbmcgZmlsZSBpcyBodW1hbi1yZWFkYWJsZS4gQW4gb3B0aW9uYWwgY29udGV4dCBwYXJhbWV0ZXIKICogc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgc2hvdWxkIGJlIGFkZGVkIGFyb3VuZCBlYWNoIGNoYW5nZS4KICogU2V0dGluZyBtaW5pbWFsIHBhcmFtZXRlciB0byB0cnVlIHdpbGwgcmVzdWx0IGluIG91dHB1dHRpbmcgdGhlIHNob3J0ZXN0CiAqIHBhdGNoIGZpbGUgcG9zc2libGUgKGNhbiB0YWtlIGEgbG9uZyB0aW1lKS4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBpbnQgJGNvbnRleHQgSW5kaWNhdGVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBkaWZmCiAqIHJlc3VsdC4KICogQHBhcmFtIGJvb2wgJG1pbmltYWwgU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgaWYgeW91IHdhbnQgdG8gbWluaW1hbGl6ZSBzaXplIG9mIHRoZSByZXN1bHQKICogKGNhbiB0YWtlIGEgbG9uZyB0aW1lKS4KICogQHRocm93cyBYZGlmZkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9kaWZmKHN0cmluZyAkb2xkX2ZpbGUsIHN0cmluZyAkbmV3X2ZpbGUsIHN0cmluZyAkZGVzdCwgaW50ICRjb250ZXh0ID0gMywgYm9vbCAkbWluaW1hbCA9IGZhbHNlKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QsICRjb250ZXh0LCAkbWluaW1hbCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUGF0Y2hlcyBhIGZpbGUgd2l0aCBhIGJpbmFyeQogKiBwYXRjaCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBmaWxlIGRlc3QuCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBwYXRjaGVzIGNyZWF0ZWQgYm90aCB2aWEgeGRpZmZfZmlsZV9iZGlmZgogKiBvciB4ZGlmZl9maWxlX3JhYmRpZmYgZnVuY3Rpb25zIG9yIHRoZWlyIHN0cmluZyBjb3VudGVycGFydHMuCiAqCiAqIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUuMCB0aGlzIGZ1bmN0aW9uIGlzIGFuIGFsaWFzIG9mIHhkaWZmX2ZpbGVfYnBhdGNoLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBvcmlnaW5hbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIGZpbGUuCiAqIEB0aHJvd3MgWGRpZmZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5KHN0cmluZyAkZmlsZSwgc3RyaW5nICRwYXRjaCwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5KCRmaWxlLCAkcGF0Y2gsICRkZXN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhkaWZmRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBNYWtlcyBhIGJpbmFyeSBkaWZmIG9mIHR3byBmaWxlcyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBwYXRjaCBmaWxlLgogKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHhkaWZmX2ZpbGVfYmRpZmYgaXMgZGlmZmVyZW50CiAqIGFsZ29yaXRobSB1c2VkIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gZmFzdGVyIGV4ZWN1dGlvbiBhbmQgc21hbGxlciBkaWZmIHByb2R1Y2VkLgogKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYm90aCB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMuIFJlc3VsdGluZyBwYXRjaAogKiBmaWxlIGNhbiBiZSBsYXRlciBhcHBsaWVkIHVzaW5nIHhkaWZmX2ZpbGVfYnBhdGNoL3hkaWZmX3N0cmluZ19icGF0Y2guCiAqCiAqIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgZGlmZmVyZW5jZXMgYmV0d2VlbiBhbGdvcml0aG0gdXNlZCBwbGVhc2UgY2hlY2sgbGlieGRpZmYKICogd2Vic2l0ZS4KICoKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuIFJlc3VsdGluZyBmaWxlIGNvbnRhaW5zIGRpZmZlcmVuY2VzCiAqIGJldHdlZW4gIm9sZCIgYW5kICJuZXciIGZpbGVzLiBJdCBpcyBpbiBiaW5hcnkgZm9ybWF0IGFuZCBpcyBodW1hbi11bnJlYWRhYmxlLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX3JhYmRpZmYoc3RyaW5nICRvbGRfZmlsZSwgc3RyaW5nICRuZXdfZmlsZSwgc3RyaW5nICRkZXN0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHhkaWZmX2ZpbGVfcmFiZGlmZigkb2xkX2ZpbGUsICRuZXdfZmlsZSwgJGRlc3QpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFBhdGNoZXMgYSBzdHJpbmcgc3RyIHdpdGggYSBiaW5hcnkgcGF0Y2guCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBwYXRjaGVzIGNyZWF0ZWQgYm90aCB2aWEgeGRpZmZfc3RyaW5nX2JkaWZmCiAqIGFuZCB4ZGlmZl9zdHJpbmdfcmFiZGlmZiBmdW5jdGlvbnMgb3IgdGhlaXIgZmlsZSBjb3VudGVycGFydHMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgb3JpZ2luYWwgYmluYXJ5IHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIGJpbmFyeSBwYXRjaCBzdHJpbmcuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHBhdGNoZWQgc3RyaW5nLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfYnBhdGNoKHN0cmluZyAkc3RyLCBzdHJpbmcgJHBhdGNoKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceGRpZmZfc3RyaW5nX2JwYXRjaCgkc3RyLCAkcGF0Y2gpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWGRpZmZFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogUGF0Y2hlcyBhIHN0cmluZyBzdHIgd2l0aCBhIGJpbmFyeSBwYXRjaC4KICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHBhdGNoZXMgY3JlYXRlZCBib3RoIHZpYSB4ZGlmZl9zdHJpbmdfYmRpZmYKICogYW5kIHhkaWZmX3N0cmluZ19yYWJkaWZmIGZ1bmN0aW9ucyBvciB0aGVpciBmaWxlIGNvdW50ZXJwYXJ0cy4KICoKICogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNS4wIHRoaXMgZnVuY3Rpb24gaXMgYW4gYWxpYXMgb2YgeGRpZmZfc3RyaW5nX2JwYXRjaC4KICoKICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBvcmlnaW5hbCBiaW5hcnkgc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIHN0cmluZy4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgcGF0Y2hlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWGRpZmZFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19wYXRjaF9iaW5hcnkoc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5KCRzdHIsICRwYXRjaCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBQYXRjaGVzIGEgc3RyIHN0cmluZyB3aXRoIGFuIHVuaWZpZWQgcGF0Y2ggaW4gcGF0Y2ggcGFyYW1ldGVyCiAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIHBhdGNoIGhhcyB0byBiZSBhbiB1bmlmaWVkIGRpZmYgY3JlYXRlZCBieQogKiB4ZGlmZl9maWxlX2RpZmYveGRpZmZfc3RyaW5nX2RpZmYgZnVuY3Rpb24uCiAqIEFuIG9wdGlvbmFsIGZsYWdzIHBhcmFtZXRlciBzcGVjaWZpZXMgbW9kZSBvZiBvcGVyYXRpb24uIEFueQogKiByZWplY3RlZCBwYXJ0cyBvZiB0aGUgcGF0Y2ggd2lsbCBiZSBzdG9yZWQgaW5zaWRlIGVycm9yIHZhcmlhYmxlIGlmCiAqIGl0IGlzIHByb3ZpZGVkLgogKgogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG9yaWdpbmFsIHN0cmluZy4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIHVuaWZpZWQgcGF0Y2ggc3RyaW5nLiBJdCBoYXMgdG8gYmUgY3JlYXRlZCB1c2luZyB4ZGlmZl9zdHJpbmdfZGlmZiwKICogeGRpZmZfZmlsZV9kaWZmIGZ1bmN0aW9ucyBvciBjb21wYXRpYmxlIHRvb2xzLgogKiBAcGFyYW0gaW50ICRmbGFncyBmbGFncyBjYW4gYmUgZWl0aGVyCiAqIFhESUZGX1BBVENIX05PUk1BTCAoZGVmYXVsdCBtb2RlLCBub3JtYWwgcGF0Y2gpCiAqIG9yIFhESUZGX1BBVENIX1JFVkVSU0UgKHJldmVyc2VkIHBhdGNoKS4KICoKICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNS4wLCB5b3UgY2FuIGFsc28gdXNlIGJpbmFyeSBPUiB0byBlbmFibGUKICogWERJRkZfUEFUQ0hfSUdOT1JFU1BBQ0UgZmxhZy4KICogQHBhcmFtIHN0cmluZ3xudWxsICRlcnJvciBJZiBwcm92aWRlZCB0aGVuIHJlamVjdGVkIHBhcnRzIGFyZSBzdG9yZWQgaW5zaWRlIHRoaXMgdmFyaWFibGUuCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHBhdGNoZWQgc3RyaW5nLgogKiBAdGhyb3dzIFhkaWZmRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfcGF0Y2goc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gsIGludCAkZmxhZ3MgPSBudWxsLCA/c3RyaW5nICYkZXJyb3IgPSBudWxsKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZXJyb3IgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhkaWZmX3N0cmluZ19wYXRjaCgkc3RyLCAkcGF0Y2gsICRmbGFncywgJGVycm9yKTsKICAgIH0gZWxzZWlmICgkZmxhZ3MgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhkaWZmX3N0cmluZ19wYXRjaCgkc3RyLCAkcGF0Y2gsICRmbGFncyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceGRpZmZfc3RyaW5nX3BhdGNoKCRzdHIsICRwYXRjaCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYZGlmZkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYbWxFeGNlcHRpb247CgovKioKICogeG1sX3BhcnNlcl9jcmVhdGVfbnMgY3JlYXRlcyBhIG5ldyBYTUwgcGFyc2VyCiAqIHdpdGggWE1MIG5hbWVzcGFjZSBzdXBwb3J0IGFuZCByZXR1cm5zIGEgcmVzb3VyY2UgaGFuZGxlIHJlZmVyZW5jaW5nCiAqIGl0IHRvIGJlIHVzZWQgYnkgdGhlIG90aGVyIFhNTCBmdW5jdGlvbnMuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFRoZSBpbnB1dCBlbmNvZGluZyBpcyBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLCBzbyB0aGF0IHRoZQogKiBlbmNvZGluZyBwYXJhbWV0ZXIgc3BlY2lmaWVzIG9ubHkgdGhlIG91dHB1dAogKiBlbmNvZGluZy4gSW4gUEhQIDUuMC4wIGFuZCA1LjAuMSwgdGhlIGRlZmF1bHQgb3V0cHV0IGNoYXJzZXQgaXMKICogSVNPLTg4NTktMSwgd2hpbGUgaW4gUEhQIDUuMC4yIGFuZCB1cHBlciBpcyBVVEYtOC4gVGhlIHN1cHBvcnRlZAogKiBlbmNvZGluZ3MgYXJlIElTTy04ODU5LTEsIFVURi04IGFuZAogKiBVUy1BU0NJSS4KICogQHBhcmFtIHN0cmluZyAkc2VwYXJhdG9yIFdpdGggYSBuYW1lc3BhY2UgYXdhcmUgcGFyc2VyIHRhZyBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgdmFyaW91cwogKiBoYW5kbGVyIGZ1bmN0aW9ucyB3aWxsIGNvbnNpc3Qgb2YgbmFtZXNwYWNlIGFuZCB0YWcgbmFtZSBzZXBhcmF0ZWQgYnkKICogdGhlIHN0cmluZyBzcGVjaWZpZWQgaW4gc2VwYXJhdG9yLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYSByZXNvdXJjZSBoYW5kbGUgZm9yIHRoZSBuZXcgWE1MIHBhcnNlci4KICogQHRocm93cyBYbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhtbF9wYXJzZXJfY3JlYXRlX25zKHN0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBzdHJpbmcgJHNlcGFyYXRvciA9ICI6IikKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRzZXBhcmF0b3IgIT09ICI6IikgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGVfbnMoJGVuY29kaW5nLCAkc2VwYXJhdG9yKTsKICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhtbF9wYXJzZXJfY3JlYXRlX25zKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGVfbnMoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiB4bWxfcGFyc2VyX2NyZWF0ZSBjcmVhdGVzIGEgbmV3IFhNTCBwYXJzZXIKICogYW5kIHJldHVybnMgYSByZXNvdXJjZSBoYW5kbGUgcmVmZXJlbmNpbmcgaXQgdG8gYmUgdXNlZCBieSB0aGUKICogb3RoZXIgWE1MIGZ1bmN0aW9ucy4KICoKICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIG9wdGlvbmFsIGVuY29kaW5nIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyCiAqIGVuY29kaW5nIGZvciB0aGUgaW5wdXQvb3V0cHV0IGluIFBIUCA0LiBTdGFydGluZyBmcm9tIFBIUCA1LCB0aGUgaW5wdXQKICogZW5jb2RpbmcgaXMgYXV0b21hdGljYWxseSBkZXRlY3RlZCwgc28gdGhhdCB0aGUKICogZW5jb2RpbmcgcGFyYW1ldGVyIHNwZWNpZmllcyBvbmx5IHRoZSBvdXRwdXQKICogZW5jb2RpbmcuIEluIFBIUCA0LCB0aGUgZGVmYXVsdCBvdXRwdXQgZW5jb2RpbmcgaXMgdGhlIHNhbWUgYXMgdGhlCiAqIGlucHV0IGNoYXJzZXQuIElmIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQsIHRoZSBwYXJzZXIgYXR0ZW1wdHMgdG8gaWRlbnRpZnkKICogd2hpY2ggZW5jb2RpbmcgdGhlIGRvY3VtZW50IGlzIGVuY29kZWQgaW4gYnkgbG9va2luZyBhdCB0aGUgaGVhZGluZyAzIG9yCiAqIDQgYnl0ZXMuIEluIFBIUCA1LjAuMCBhbmQgNS4wLjEsIHRoZSBkZWZhdWx0IG91dHB1dCBjaGFyc2V0IGlzCiAqIElTTy04ODU5LTEsIHdoaWxlIGluIFBIUCA1LjAuMiBhbmQgdXBwZXIgaXMgVVRGLTguIFRoZSBzdXBwb3J0ZWQKICogZW5jb2RpbmdzIGFyZSBJU08tODg1OS0xLCBVVEYtOCBhbmQKICogVVMtQVNDSUkuCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIHJlc291cmNlIGhhbmRsZSBmb3IgdGhlIG5ldyBYTUwgcGFyc2VyLgogKiBAdGhyb3dzIFhtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geG1sX3BhcnNlcl9jcmVhdGUoc3RyaW5nICRlbmNvZGluZyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIGlmICgkZW5jb2RpbmcgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHhtbF9wYXJzZXJfY3JlYXRlKCRlbmNvZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBceG1sX3BhcnNlcl9jcmVhdGUoKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byB1c2UgcGFyc2VyIGluc2lkZQogKiBvYmplY3QuIEFsbCBjYWxsYmFjayBmdW5jdGlvbnMgY291bGQgYmUgc2V0IHdpdGgKICogeG1sX3NldF9lbGVtZW50X2hhbmRsZXIgZXRjIGFuZCBhc3N1bWVkIHRvIGJlCiAqIG1ldGhvZHMgb2Ygb2JqZWN0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBhcnNlciBBIHJlZmVyZW5jZSB0byB0aGUgWE1MIHBhcnNlciB0byB1c2UgaW5zaWRlIHRoZSBvYmplY3QuCiAqIEBwYXJhbSBvYmplY3QgJG9iamVjdCBUaGUgb2JqZWN0IHdoZXJlIHRvIHVzZSB0aGUgWE1MIHBhcnNlci4KICogQHRocm93cyBYbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHhtbF9zZXRfb2JqZWN0KCRwYXJzZXIsIG9iamVjdCAmJG9iamVjdCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4bWxfc2V0X29iamVjdCgkcGFyc2VyLCAkb2JqZWN0KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFhtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/xmlrpc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xYbWxycGNFeGNlcHRpb247CgovKioKICogU2V0cyB4bWxycGMgdHlwZSwgYmFzZTY0IG9yIGRhdGV0aW1lLCBmb3IgYSBQSFAgc3RyaW5nIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nfFxEYXRlVGltZSAkdmFsdWUgVmFsdWUgdG8gc2V0IHRoZSB0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgJ2Jhc2U2NCcgb3IgJ2RhdGV0aW1lJwogKiBAdGhyb3dzIFhtbHJwY0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geG1scnBjX3NldF90eXBlKCYkdmFsdWUsIHN0cmluZyAkdHlwZSk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx4bWxycGNfc2V0X3R5cGUoJHZhbHVlLCAkdHlwZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBYbWxycGNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/yaml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xZYW1sRXhjZXB0aW9uOwoKLyoqCiAqIENvbnZlcnQgYWxsIG9yIHBhcnQgb2YgYSBZQU1MIGRvY3VtZW50IHN0cmVhbSByZWFkIGZyb20gYSBmaWxlIHRvIGEgUEhQIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBQYXRoIHRvIHRoZSBmaWxlLgogKiBAcGFyYW0gaW50ICRwb3MgRG9jdW1lbnQgdG8gZXh0cmFjdCBmcm9tIHN0cmVhbSAoLTEgZm9yIGFsbAogKiBkb2N1bWVudHMsIDAgZm9yIGZpcnN0IGRvY3VtZW50LCAuLi4pLgogKiBAcGFyYW0gaW50fG51bGwgJG5kb2NzIElmIG5kb2NzIGlzIHByb3ZpZGVkLCB0aGVuIGl0IGlzIGZpbGxlZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgZG9jdW1lbnRzIGZvdW5kIGluIHN0cmVhbS4KICogQHBhcmFtIGFycmF5ICRjYWxsYmFja3MgQ29udGVudCBoYW5kbGVycyBmb3IgWUFNTCBub2Rlcy4gQXNzb2NpYXRpdmUgYXJyYXkgb2YgWUFNTAogKiB0YWcgPSZndDsgY2FsbGFibGUgbWFwcGluZ3MuIFNlZQogKiBwYXJzZSBjYWxsYmFja3MgZm9yIG1vcmUKICogZGV0YWlscy4KICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGlucHV0IGluIGFwcHJvcHJpYXRlCiAqIFBIUCB0eXBlLiBJZiBwb3MgaXMgLTEgYW4KICogYXJyYXkgd2lsbCBiZSByZXR1cm5lZCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaCBkb2N1bWVudCBmb3VuZAogKiBpbiB0aGUgc3RyZWFtLgogKiBAdGhyb3dzIFlhbWxFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhbWxfcGFyc2VfZmlsZShzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJHBvcyA9IDAsID9pbnQgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhbWxfcGFyc2VfZmlsZSgkZmlsZW5hbWUsICRwb3MsICRuZG9jcywgJGNhbGxiYWNrcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYW1sRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENvbnZlcnQgYWxsIG9yIHBhcnQgb2YgYSBZQU1MIGRvY3VtZW50IHN0cmVhbSByZWFkIGZyb20gYSBVUkwgdG8gYSBQSFAgdmFyaWFibGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVybCB1cmwgc2hvdWxkIGJlIG9mIHRoZSBmb3JtICJzY2hlbWU6Ly8uLi4iLiBQSFAKICogd2lsbCBzZWFyY2ggZm9yIGEgcHJvdG9jb2wgaGFuZGxlciAoYWxzbyBrbm93biBhcyBhIHdyYXBwZXIpIGZvciB0aGF0CiAqIHNjaGVtZS4gSWYgbm8gd3JhcHBlcnMgZm9yIHRoYXQgcHJvdG9jb2wgYXJlIHJlZ2lzdGVyZWQsIFBIUCB3aWxsIGVtaXQKICogYSBub3RpY2UgdG8gaGVscCB5b3UgdHJhY2sgcG90ZW50aWFsIHByb2JsZW1zIGluIHlvdXIgc2NyaXB0IGFuZCB0aGVuCiAqIGNvbnRpbnVlIGFzIHRob3VnaCBmaWxlbmFtZSBzcGVjaWZpZXMgYSByZWd1bGFyIGZpbGUuCiAqIEBwYXJhbSBpbnQgJHBvcyBEb2N1bWVudCB0byBleHRyYWN0IGZyb20gc3RyZWFtICgtMSBmb3IgYWxsCiAqIGRvY3VtZW50cywgMCBmb3IgZmlyc3QgZG9jdW1lbnQsIC4uLikuCiAqIEBwYXJhbSBpbnR8bnVsbCAkbmRvY3MgSWYgbmRvY3MgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGggdGhlCiAqIG51bWJlciBvZiBkb2N1bWVudHMgZm91bmQgaW4gc3RyZWFtLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MCiAqIHRhZyA9Jmd0OyBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlCiAqIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZQogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHZhbHVlIGVuY29kZWQgaW4gaW5wdXQgaW4gYXBwcm9wcmlhdGUKICogUEhQIHR5cGUuIElmIHBvcyBpcwogKiAtMSBhbiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5CiAqIGZvciBlYWNoIGRvY3VtZW50IGZvdW5kIGluIHRoZSBzdHJlYW0uCiAqIEB0aHJvd3MgWWFtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWFtbF9wYXJzZV91cmwoc3RyaW5nICR1cmwsIGludCAkcG9zID0gMCwgP2ludCAmJG5kb2NzID0gbnVsbCwgYXJyYXkgJGNhbGxiYWNrcyA9IG51bGwpCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWFtbF9wYXJzZV91cmwoJHVybCwgJHBvcywgJG5kb2NzLCAkY2FsbGJhY2tzKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhbWxFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogQ29udmVydCBhbGwgb3IgcGFydCBvZiBhIFlBTUwgZG9jdW1lbnQgc3RyZWFtIHRvIGEgUEhQIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBUaGUgc3RyaW5nIHRvIHBhcnNlIGFzIGEgWUFNTCBkb2N1bWVudCBzdHJlYW0uCiAqIEBwYXJhbSBpbnQgJHBvcyBEb2N1bWVudCB0byBleHRyYWN0IGZyb20gc3RyZWFtICgtMSBmb3IgYWxsCiAqIGRvY3VtZW50cywgMCBmb3IgZmlyc3QgZG9jdW1lbnQsIC4uLikuCiAqIEBwYXJhbSBpbnR8bnVsbCAkbmRvY3MgSWYgbmRvY3MgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGggdGhlCiAqIG51bWJlciBvZiBkb2N1bWVudHMgZm91bmQgaW4gc3RyZWFtLgogKiBAcGFyYW0gYXJyYXkgJGNhbGxiYWNrcyBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MCiAqIHRhZyA9Jmd0OyBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlCiAqIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZQogKiBkZXRhaWxzLgogKiBAcmV0dXJuIG1peGVkIFJldHVybnMgdGhlIHZhbHVlIGVuY29kZWQgaW4gaW5wdXQgaW4gYXBwcm9wcmlhdGUKICogUEhQIHR5cGUuIElmIHBvcyBpcyAtMSBhbgogKiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGRvY3VtZW50IGZvdW5kCiAqIGluIHRoZSBzdHJlYW0uCiAqIEB0aHJvd3MgWWFtbEV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWFtbF9wYXJzZShzdHJpbmcgJGlucHV0LCBpbnQgJHBvcyA9IDAsID9pbnQgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhbWxfcGFyc2UoJGlucHV0LCAkcG9zLCAkbmRvY3MsICRjYWxsYmFja3MpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWFtbEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/yaz.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xZYXpFeGNlcHRpb247CgovKioKICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIGEgQ0NMIHBhcnNlci4gSXQgY29udmVydHMgYSBnaXZlbiBDQ0wgRklORCBxdWVyeSB0bwogKiBhbiBSUE4gcXVlcnkgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGUgeWF6X3NlYXJjaAogKiBmdW5jdGlvbiB0byBwZXJmb3JtIGEgc2VhcmNoLgogKgogKiBUbyBkZWZpbmUgYSBzZXQgb2YgdmFsaWQgQ0NMIGZpZWxkcyBjYWxsIHlhel9jY2xfY29uZgogKiBwcmlvciB0byB0aGlzIGZ1bmN0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlkIFRoZSBjb25uZWN0aW9uIHJlc291cmNlIHJldHVybmVkIGJ5IHlhel9jb25uZWN0LgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgQ0NMIEZJTkQgcXVlcnkuCiAqIEBwYXJhbSBhcnJheXxudWxsICRyZXN1bHQgSWYgdGhlIGZ1bmN0aW9uIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHksIHRoaXMgd2lsbCBiZSBhbiBhcnJheQogKiBjb250YWluaW5nIHRoZSB2YWxpZCBSUE4gcXVlcnkgdW5kZXIgdGhlIGtleSBycG4uCiAqCiAqIFVwb24gZmFpbHVyZSwgdGhyZWUgaW5kZXhlcyBhcmUgc2V0IGluIHRoaXMgYXJyYXkgdG8gaW5kaWNhdGUgdGhlIGNhdXNlCiAqIG9mIGZhaWx1cmU6CiAqCiAqCiAqCiAqIGVycm9yY29kZSAtIHRoZSBDQ0wgZXJyb3IgY29kZSAoaW50ZWdlcikKICoKICoKICoKICoKICogZXJyb3JzdHJpbmcgLSB0aGUgQ0NMIGVycm9yIHN0cmluZwogKgogKgogKgogKgogKiBlcnJvcnBvcyAtIGFwcHJveGltYXRlIHBvc2l0aW9uIGluIHF1ZXJ5IG9mIGZhaWx1cmUKICogKGludGVnZXIgaXMgY2hhcmFjdGVyIHBvc2l0aW9uKQogKgogKgogKgogKgogKiBlcnJvcmNvZGUgLSB0aGUgQ0NMIGVycm9yIGNvZGUgKGludGVnZXIpCiAqCiAqIGVycm9yc3RyaW5nIC0gdGhlIENDTCBlcnJvciBzdHJpbmcKICoKICogZXJyb3Jwb3MgLSBhcHByb3hpbWF0ZSBwb3NpdGlvbiBpbiBxdWVyeSBvZiBmYWlsdXJlCiAqIChpbnRlZ2VyIGlzIGNoYXJhY3RlciBwb3NpdGlvbikKICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9jY2xfcGFyc2UoJGlkLCBzdHJpbmcgJHF1ZXJ5LCA/YXJyYXkgJiRyZXN1bHQpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWF6X2NjbF9wYXJzZSgkaWQsICRxdWVyeSwgJHJlc3VsdCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYXpFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiBnaXZlbiBieSBwYXJhbWV0ZXIgaWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfY2xvc2UoJGlkKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9jbG9zZSgkaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIHplcm8gb24KICogZmFpbHVyZS4KICoKICogeWF6X2Nvbm5lY3QgcHJlcGFyZXMgZm9yIGEgY29ubmVjdGlvbiB0byBhCiAqIFozOS41MCBzZXJ2ZXIuCiAqIFRoaXMgZnVuY3Rpb24gaXMgbm9uLWJsb2NraW5nIGFuZCBkb2VzIG5vdCBhdHRlbXB0IHRvIGVzdGFibGlzaAogKiBhIGNvbm5lY3Rpb24gIC0gaXQgbWVyZWx5IHByZXBhcmVzIGEgY29ubmVjdCB0byBiZSBwZXJmb3JtZWQgbGF0ZXIgd2hlbgogKiB5YXpfd2FpdCBpcyBjYWxsZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHp1cmwgQSBzdHJpbmcgdGhhdCB0YWtlcyB0aGUgZm9ybSBob3N0Wzpwb3J0XVsvZGF0YWJhc2VdLgogKiBJZiBwb3J0IGlzIG9taXR0ZWQsIHBvcnQgMjEwIGlzIHVzZWQuIElmIGRhdGFiYXNlIGlzIG9taXR0ZWQKICogRGVmYXVsdCBpcyB1c2VkLgogKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgSWYgZ2l2ZW4gYXMgYSBzdHJpbmcsIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIFozOS41MCBWMiBhdXRoZW50aWNhdGlvbgogKiBzdHJpbmcgKE9wZW5BdXRoKS4KICoKICogSWYgZ2l2ZW4gYXMgYW4gYXJyYXksIHRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2VydmVzIGFzIG9wdGlvbnMuCiAqCiAqCiAqIHVzZXIKICoKICoKICogVXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLgogKgogKgogKgogKgogKiBncm91cAogKgogKgogKiBHcm91cCBmb3IgYXV0aGVudGljYXRpb24uCiAqCiAqCiAqCiAqCiAqIHBhc3N3b3JkCiAqCiAqCiAqIFBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi4KICoKICoKICoKICoKICogY29va2llCiAqCiAqCiAqIENvb2tpZSBmb3Igc2Vzc2lvbiAoWUFaIHByb3h5KS4KICoKICoKICoKICoKICogcHJveHkKICoKICoKICogUHJveHkgZm9yIGNvbm5lY3Rpb24gKFlBWiBwcm94eSkuCiAqCiAqCiAqCiAqCiAqIHBlcnNpc3RlbnQKICoKICoKICogQSBib29sZWFuLiBJZiBUUlVFIHRoZSBjb25uZWN0aW9uIGlzIHBlcnNpc3RlbnQ7IElmIEZBTFNFIHRoZQogKiBjb25uZWN0aW9uIGlzIG5vdCBwZXJzaXN0ZW50LiBCeSBkZWZhdWx0IGNvbm5lY3Rpb25zIGFyZSBwZXJzaXN0ZW50LgogKgogKgogKgogKiBJZiB5b3Ugb3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgeW91IHdvbid0IGJlIGFibGUgdG8gY2xvc2UKICogaXQgbGF0ZXIgd2l0aCB5YXpfY2xvc2UuCiAqCiAqCiAqCiAqCiAqCiAqIHBpZ2d5YmFjawogKgogKgogKiBBIGJvb2xlYW4uIElmIFRSVUUgcGlnZ3liYWNrIGlzIGVuYWJsZWQgZm9yIHNlYXJjaGVzOyBJZiBGQUxTRQogKiBwaWdneWJhY2sgaXMgZGlzYWJsZWQuIEJ5IGRlZmF1bHQgcGlnZ3liYWNrIGlzIGVuYWJsZWQuCiAqCiAqCiAqIEVuYWJsaW5nIHBpZ2d5YmFjayBpcyBtb3JlIGVmZmljaWVudCBhbmQgdXN1YWxseSBzYXZlcyBhCiAqIG5ldHdvcmstcm91bmQtdHJpcCBmb3IgZmlyc3QgdGltZSBmZXRjaGVzIG9mIHJlY29yZHMuIEhvd2V2ZXIsIGEKICogZmV3IFozOS41MCBzZXJ2ZXJzIGRvIG5vdCBzdXBwb3J0IHBpZ2d5YmFjayBvciB0aGV5IGlnbm9yZSBlbGVtZW50CiAqIHNldCBuYW1lcy4gRm9yIHRob3NlLCBwaWdneWJhY2sgc2hvdWxkIGJlIGRpc2FibGVkLgogKgogKgogKgogKgogKiBjaGFyc2V0CiAqCiAqCiAqIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBpbiBaMzkuNTAKICogbGFuZ3VhZ2UgYW5kIGNoYXJhY3RlciBzZXQgbmVnb3RpYXRpb24uIFVzZSBzdHJpbmdzIHN1Y2ggYXM6CiAqIElTTy04ODU5LTEsIFVURi04LAogKiBVVEYtMTYuCiAqCiAqCiAqIE1vc3QgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlIChhbmQgdGh1cywgdGhpcyBpcwogKiBpZ25vcmVkKS4gTWFueSBzZXJ2ZXJzIHVzZSB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBmb3IgcXVlcmllcyBhbmQKICogbWVzc2FnZXMuIE1BUkMyMS9VU01BUkMgcmVjb3JkcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KICoKICoKICoKICoKICoKICogcHJlZmVycmVkTWVzc2FnZVNpemUKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYWxsIHJlY29yZHMKICogdG8gYmUgcmV0dXJuZWQgYnkgYSB0YXJnZXQgZHVyaW5nIHJldHJpZXZhbC4gU2VlIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQgZm9yIG1vcmUKICogaW5mb3JtYXRpb24uCiAqCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICoKICoKICoKICoKICoKICogbWF4aW11bVJlY29yZFNpemUKICoKICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYSBzaW5nbGUgcmVjb3JkCiAqIHRvIGJlIHJldHVybmVkIGJ5IGEgdGFyZ2V0IGR1cmluZyByZXRyaWV2YWwuIFRoaXMKICogZW50aXR5IGlzIHJlZmVycmVkIHRvIGFzIEV4Y2VwdGlvbmFsLXJlY29yZC1zaXplIGluIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQuCiAqCiAqCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICoKICoKICoKICoKICoKICoKICogVXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLgogKgogKiBHcm91cCBmb3IgYXV0aGVudGljYXRpb24uCiAqCiAqIFBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi4KICoKICogQ29va2llIGZvciBzZXNzaW9uIChZQVogcHJveHkpLgogKgogKiBQcm94eSBmb3IgY29ubmVjdGlvbiAoWUFaIHByb3h5KS4KICoKICogQSBib29sZWFuLiBJZiBUUlVFIHRoZSBjb25uZWN0aW9uIGlzIHBlcnNpc3RlbnQ7IElmIEZBTFNFIHRoZQogKiBjb25uZWN0aW9uIGlzIG5vdCBwZXJzaXN0ZW50LiBCeSBkZWZhdWx0IGNvbm5lY3Rpb25zIGFyZSBwZXJzaXN0ZW50LgogKgogKiBJZiB5b3Ugb3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgeW91IHdvbid0IGJlIGFibGUgdG8gY2xvc2UKICogaXQgbGF0ZXIgd2l0aCB5YXpfY2xvc2UuCiAqCiAqIEEgYm9vbGVhbi4gSWYgVFJVRSBwaWdneWJhY2sgaXMgZW5hYmxlZCBmb3Igc2VhcmNoZXM7IElmIEZBTFNFCiAqIHBpZ2d5YmFjayBpcyBkaXNhYmxlZC4gQnkgZGVmYXVsdCBwaWdneWJhY2sgaXMgZW5hYmxlZC4KICoKICogRW5hYmxpbmcgcGlnZ3liYWNrIGlzIG1vcmUgZWZmaWNpZW50IGFuZCB1c3VhbGx5IHNhdmVzIGEKICogbmV0d29yay1yb3VuZC10cmlwIGZvciBmaXJzdCB0aW1lIGZldGNoZXMgb2YgcmVjb3Jkcy4gSG93ZXZlciwgYQogKiBmZXcgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgcGlnZ3liYWNrIG9yIHRoZXkgaWdub3JlIGVsZW1lbnQKICogc2V0IG5hbWVzLiBGb3IgdGhvc2UsIHBpZ2d5YmFjayBzaG91bGQgYmUgZGlzYWJsZWQuCiAqCiAqIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBpbiBaMzkuNTAKICogbGFuZ3VhZ2UgYW5kIGNoYXJhY3RlciBzZXQgbmVnb3RpYXRpb24uIFVzZSBzdHJpbmdzIHN1Y2ggYXM6CiAqIElTTy04ODU5LTEsIFVURi04LAogKiBVVEYtMTYuCiAqCiAqIE1vc3QgWjM5LjUwIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlIChhbmQgdGh1cywgdGhpcyBpcwogKiBpZ25vcmVkKS4gTWFueSBzZXJ2ZXJzIHVzZSB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBmb3IgcXVlcmllcyBhbmQKICogbWVzc2FnZXMuIE1BUkMyMS9VU01BUkMgcmVjb3JkcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYWxsIHJlY29yZHMKICogdG8gYmUgcmV0dXJuZWQgYnkgYSB0YXJnZXQgZHVyaW5nIHJldHJpZXZhbC4gU2VlIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQgZm9yIG1vcmUKICogaW5mb3JtYXRpb24uCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICoKICogQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBieXRlIHNpemUgb2YgYSBzaW5nbGUgcmVjb3JkCiAqIHRvIGJlIHJldHVybmVkIGJ5IGEgdGFyZ2V0IGR1cmluZyByZXRyaWV2YWwuIFRoaXMKICogZW50aXR5IGlzIHJlZmVycmVkIHRvIGFzIEV4Y2VwdGlvbmFsLXJlY29yZC1zaXplIGluIHRoZQogKiBaMzkuNTAgc3RhbmRhcmQuCiAqCiAqIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBpbiBQRUNMIFlBWiAxLjAuNSBvciBsYXRlci4KICogQHJldHVybiBtaXhlZCBBIGNvbm5lY3Rpb24gcmVzb3VyY2Ugb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfY29ubmVjdChzdHJpbmcgJHp1cmwsICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRvcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFx5YXpfY29ubmVjdCgkenVybCwgJG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHlhel9jb25uZWN0KCR6dXJsKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gY2hhbmdlIGRhdGFiYXNlcyB3aXRoaW4gYSBzZXNzaW9uIGJ5CiAqIHNwZWNpZnlpbmcgb25lIG9yIG1vcmUgZGF0YWJhc2VzIHRvIGJlIHVzZWQgaW4gc2VhcmNoLCByZXRyaWV2YWwsIGV0Yy4KICogLSBvdmVycmlkaW5nIGRhdGFiYXNlcyBzcGVjaWZpZWQgaW4gY2FsbCB0bwogKiB5YXpfY29ubmVjdC4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSB5YXpfY29ubmVjdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2VzIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgZGF0YWJhc2VzLiBNdWx0aXBsZSBkYXRhYmFzZXMgYXJlCiAqIHNlcGFyYXRlZCBieSBhIHBsdXMgc2lnbiArLgogKiBAdGhyb3dzIFlhekV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24geWF6X2RhdGFiYXNlKCRpZCwgc3RyaW5nICRkYXRhYmFzZXMpOiB2b2lkCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBceWF6X2RhdGFiYXNlKCRpZCwgJGRhdGFiYXNlcyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBZYXpFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZWxlbWVudCBzZXQgbmFtZSBmb3IgcmV0cmlldmFsLgogKgogKiBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHlhel9zZWFyY2ggb3IKICogeWF6X3ByZXNlbnQgdG8gc3BlY2lmeSB0aGUgZWxlbWVudCBzZXQgbmFtZSBmb3IKICogcmVjb3JkcyB0byBiZSByZXRyaWV2ZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJGVsZW1lbnRzZXQgTW9zdCBzZXJ2ZXJzIHN1cHBvcnQgRiAoZm9yIGZ1bGwgcmVjb3JkcykgYW5kCiAqIEIgKGZvciBicmllZiByZWNvcmRzKS4KICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9lbGVtZW50KCRpZCwgc3RyaW5nICRlbGVtZW50c2V0KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9lbGVtZW50KCRpZCwgJGVsZW1lbnRzZXQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGZvciByZXRyaWV2YWwgb2YgcmVjb3JkcyBhZnRlciBhIHN1Y2Nlc3NmdWwgc2VhcmNoLgogKgogKiBUaGUgeWF6X3JhbmdlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8gdGhpcwogKiBmdW5jdGlvbiB0byBzcGVjaWZ5IHRoZSByYW5nZSBvZiByZWNvcmRzIHRvIGJlIHJldHJpZXZlZC4KICoKICogQHBhcmFtIHJlc291cmNlICRpZCBUaGUgY29ubmVjdGlvbiByZXNvdXJjZSByZXR1cm5lZCBieSB5YXpfY29ubmVjdC4KICogQHRocm93cyBZYXpFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHlhel9wcmVzZW50KCRpZCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFx5YXpfcHJlc2VudCgkaWQpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWWF6RXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiB5YXpfc2VhcmNoIHByZXBhcmVzIGZvciBhIHNlYXJjaCBvbiB0aGUgZ2l2ZW4KICogY29ubmVjdGlvbi4KICoKICogTGlrZSB5YXpfY29ubmVjdCB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1ibG9ja2luZyBhbmQKICogb25seSBwcmVwYXJlcyBmb3IgYSBzZWFyY2ggdG8gYmUgZXhlY3V0ZWQgbGF0ZXIgd2hlbgogKiB5YXpfd2FpdCBpcyBjYWxsZWQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkaWQgVGhlIGNvbm5lY3Rpb24gcmVzb3VyY2UgcmV0dXJuZWQgYnkgeWF6X2Nvbm5lY3QuCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgVGhpcyBwYXJhbWV0ZXIgcmVwcmVzZW50cyB0aGUgcXVlcnkgdHlwZSAtIG9ubHkgInJwbiIKICogaXMgc3VwcG9ydGVkIG5vdyBpbiB3aGljaCBjYXNlIHRoZSB0aGlyZCBhcmd1bWVudCBzcGVjaWZpZXMgYSBUeXBlLTEKICogcXVlcnkgaW4gcHJlZml4IHF1ZXJ5IG5vdGF0aW9uLgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgUlBOIHF1ZXJ5IGlzIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVHlwZS0xIHF1ZXJ5IGFzCiAqIGRlZmluZWQgYnkgdGhlIFozOS41MCBzdGFuZGFyZC4gSG93ZXZlciwgaW4gdGhlIHRleHQgcmVwcmVzZW50YXRpb24KICogYXMgdXNlZCBieSBZQVogYSBwcmVmaXggbm90YXRpb24gaXMgdXNlZCwgdGhhdCBpcyB0aGUgb3BlcmF0b3IKICogcHJlY2VkZXMgdGhlIG9wZXJhbmRzLiBUaGUgcXVlcnkgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdG9rZW5zIHdoZXJlCiAqIHdoaXRlIHNwYWNlIGlzIGlnbm9yZWQgdW5sZXNzIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3Rlcy4gVG9rZW5zIGJlZ2lubmluZwogKiB3aXRoIGFuIGF0LWNoYXJhY3RlciAoQCkgYXJlIGNvbnNpZGVyZWQgb3BlcmF0b3JzLAogKiBvdGhlcndpc2UgdGhleSBhcmUgdHJlYXRlZCBhcyBzZWFyY2ggdGVybXMuCiAqCiAqIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBhdHRyaWJ1dGVzIGF0IHRoZQogKiBaMzkuNTAgTWFpbnRlbmFuY2UgQWdlbmN5CiAqIHNpdGUuCiAqCiAqIElmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBhIG1vcmUgZnJpZW5kbHkgbm90YXRpb24sCiAqIHVzZSB0aGUgQ0NMIHBhcnNlciAtIGZ1bmN0aW9ucyB5YXpfY2NsX2NvbmYgYW5kCiAqIHlhel9jY2xfcGFyc2UuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfc2VhcmNoKCRpZCwgc3RyaW5nICR0eXBlLCBzdHJpbmcgJHF1ZXJ5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel9zZWFyY2goJGlkLCAkdHlwZSwgJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogVGhpcyBmdW5jdGlvbiBjYXJyaWVzIG91dCBuZXR3b3JrZWQgKGJsb2NrZWQpIGFjdGl2aXR5IGZvciBvdXRzdGFuZGluZwogKiByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcHJlcGFyZWQgYnkgdGhlIGZ1bmN0aW9ucwogKiB5YXpfY29ubmVjdCwgeWF6X3NlYXJjaCwKICogeWF6X3ByZXNlbnQsIHlhel9zY2FuIGFuZAogKiB5YXpfaXRlbW9yZGVyLgogKgogKiB5YXpfd2FpdCByZXR1cm5zIHdoZW4gYWxsIHNlcnZlcnMgaGF2ZSBlaXRoZXIKICogY29tcGxldGVkIGFsbCByZXF1ZXN0cyBvciBhYm9ydGVkIChpbiBjYXNlIG9mIGVycm9ycykuCiAqCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zOgogKgogKgogKiB0aW1lb3V0CiAqCiAqCiAqIFNldHMgdGltZW91dCBpbiBzZWNvbmRzLiBJZiBhIHNlcnZlciBoYXMgbm90IHJlc3BvbmRlZCB3aXRoaW4gdGhlCiAqIHRpbWVvdXQgaXQgaXMgY29uc2lkZXJlZCBkZWFkIGFuZCB5YXpfd2FpdAogKiByZXR1cm5zLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGltZW91dCBpcyAxNSBzZWNvbmRzLgogKgogKgogKgogKgogKiBldmVudAogKgogKgogKiBBIGJvb2xlYW4uCiAqCiAqCiAqCiAqCiAqCiAqIFNldHMgdGltZW91dCBpbiBzZWNvbmRzLiBJZiBhIHNlcnZlciBoYXMgbm90IHJlc3BvbmRlZCB3aXRoaW4gdGhlCiAqIHRpbWVvdXQgaXQgaXMgY29uc2lkZXJlZCBkZWFkIGFuZCB5YXpfd2FpdAogKiByZXR1cm5zLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGltZW91dCBpcyAxNSBzZWNvbmRzLgogKgogKiBBIGJvb2xlYW4uCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCiAqIEluIGV2ZW50IG1vZGUsIHJldHVybnMgcmVzb3VyY2UuCiAqIEB0aHJvd3MgWWF6RXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB5YXpfd2FpdChhcnJheSAmJG9wdGlvbnMgPSBudWxsKQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHlhel93YWl0KCRvcHRpb25zKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFlhekV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/zip.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xaaXBFeGNlcHRpb247CgovKioKICogQ2xvc2VzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSBBIGRpcmVjdG9yeSBlbnRyeSBwcmV2aW91c2x5IG9wZW5lZCB6aXBfZW50cnlfb3Blbi4KICogQHRocm93cyBaaXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHppcF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFppcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogT3BlbnMgYSBkaXJlY3RvcnkgZW50cnkgaW4gYSB6aXAgZmlsZSBmb3IgcmVhZGluZy4KICoKICogQHBhcmFtIHJlc291cmNlICR6aXAgQSB2YWxpZCByZXNvdXJjZSBoYW5kbGUgcmV0dXJuZWQgYnkgemlwX29wZW4uCiAqIEBwYXJhbSByZXNvdXJjZSAkemlwX2VudHJ5IEEgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkIGJ5IHppcF9yZWFkLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIEFueSBvZiB0aGUgbW9kZXMgc3BlY2lmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mCiAqIGZvcGVuLgogKgogKiBDdXJyZW50bHksIG1vZGUgaXMgaWdub3JlZCBhbmQgaXMgYWx3YXlzCiAqICJyYiIuIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgemlwIHN1cHBvcnQKICogaW4gUEhQIGlzIHJlYWQgb25seSBhY2Nlc3MuCiAqIEB0aHJvd3MgWmlwRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB6aXBfZW50cnlfb3BlbigkemlwLCAkemlwX2VudHJ5LCBzdHJpbmcgJG1vZGUgPSBudWxsKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG1vZGUgIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9vcGVuKCR6aXAsICR6aXBfZW50cnksICRtb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFx6aXBfZW50cnlfb3BlbigkemlwLCAkemlwX2VudHJ5KTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFppcEV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9Cn0KCgovKioKICogUmVhZHMgZnJvbSBhbiBvcGVuIGRpcmVjdG9yeSBlbnRyeS4KICoKICogQHBhcmFtIHJlc291cmNlICR6aXBfZW50cnkgQSBkaXJlY3RvcnkgZW50cnkgcmV0dXJuZWQgYnkgemlwX3JlYWQuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybi4KICoKICogVGhpcyBzaG91bGQgYmUgdGhlIHVuY29tcHJlc3NlZCBsZW5ndGggeW91IHdpc2ggdG8gcmVhZC4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZGF0YSByZWFkLCBlbXB0eSBzdHJpbmcgb24gZW5kIG9mIGEgZmlsZS4KICogQHRocm93cyBaaXBFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHppcF9lbnRyeV9yZWFkKCR6aXBfZW50cnksIGludCAkbGVuZ3RoID0gMTAyNCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHppcF9lbnRyeV9yZWFkKCR6aXBfZW50cnksICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmlwRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/generated/zlib.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIFNhZmVcRXhjZXB0aW9uc1xabGliRXhjZXB0aW9uOwoKLyoqCiAqIEluY3JlbWVudGFsbHkgZGVmbGF0ZXMgZGF0YSBpbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBBIGNvbnRleHQgY3JlYXRlZCB3aXRoIGRlZmxhdGVfaW5pdC4KICogQHBhcmFtIHN0cmluZyAkZGF0YSBBIGNodW5rIG9mIGRhdGEgdG8gY29tcHJlc3MuCiAqIEBwYXJhbSBpbnQgJGZsdXNoX21vZGUgT25lIG9mIFpMSUJfQkxPQ0ssCiAqIFpMSUJfTk9fRkxVU0gsCiAqIFpMSUJfUEFSVElBTF9GTFVTSCwKICogWkxJQl9TWU5DX0ZMVVNIIChkZWZhdWx0KSwKICogWkxJQl9GVUxMX0ZMVVNILCBaTElCX0ZJTklTSC4KICogTm9ybWFsbHkgeW91IHdpbGwgd2FudCB0byBzZXQgWkxJQl9OT19GTFVTSCB0bwogKiBtYXhpbWl6ZSBjb21wcmVzc2lvbiwgYW5kIFpMSUJfRklOSVNIIHRvIHRlcm1pbmF0ZQogKiB3aXRoIHRoZSBsYXN0IGNodW5rIG9mIGRhdGEuIFNlZSB0aGUgemxpYiBtYW51YWwgZm9yIGEKICogZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGRlZmxhdGVfYWRkKCRjb250ZXh0LCBzdHJpbmcgJGRhdGEsIGludCAkZmx1c2hfbW9kZSA9IFpMSUJfU1lOQ19GTFVTSCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGRlZmxhdGVfYWRkKCRjb250ZXh0LCAkZGF0YSwgJGZsdXNoX21vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWFsaXplcyBhbiBpbmNyZW1lbnRhbCBkZWZsYXRlIGNvbnRleHQgdXNpbmcgdGhlIHNwZWNpZmllZAogKiBlbmNvZGluZy4KICoKICogTm90ZSB0aGF0IHRoZSB3aW5kb3cgb3B0aW9uIGhlcmUgb25seSBzZXRzIHRoZSB3aW5kb3cgc2l6ZQogKiBvZiB0aGUgYWxnb3JpdGhtLCBkaWZmZXJlbnRseSBmcm9tIHRoZSB6bGliIGZpbHRlcnMgd2hlcmUgdGhlIHNhbWUgcGFyYW1ldGVyCiAqIGFsc28gc2V0cyB0aGUgZW5jb2RpbmcgdG8gdXNlOyB0aGUgZW5jb2RpbmcgbXVzdCBiZSBzZXQgd2l0aCB0aGUKICogZW5jb2RpbmcgcGFyYW1ldGVyLgogKgogKiBMaW1pdGF0aW9uOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIHNldCB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIG9uIGEgR1pJUAogKiBjb21wcmVzc2VkIHN0cmVhbSwgd2hpY2ggYXJlIHNldCBhcyBmb2xsb3dzOiBHWklQIHNpZ25hdHVyZQogKiAoXHgxZlx4OEIpOyBjb21wcmVzc2lvbiBtZXRob2QgKFx4MDgKICogPT0gREVGTEFURSk7IDYgemVybyBieXRlczsgdGhlIG9wZXJhdGluZyBzeXN0ZW0gc2V0IHRvIHRoZSBjdXJyZW50IHN5c3RlbQogKiAoXHgwMCA9IFdpbmRvd3MsIFx4MDMgPSBVbml4LCBldGMuKQogKgogKiBAcGFyYW0gaW50ICRlbmNvZGluZyBPbmUgb2YgdGhlIFpMSUJfRU5DT0RJTkdfKiBjb25zdGFudHMuCiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSB3aGljaCBtYXkgY29udGFpbiB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKgogKgogKiBsZXZlbAogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbGV2ZWwgaW4gcmFuZ2UgLTEuLjk7IGRlZmF1bHRzIHRvIC0xLgogKgogKgogKgogKgogKiBtZW1vcnkKICoKICoKICogVGhlIGNvbXByZXNzaW9uIG1lbW9yeSBsZXZlbCBpbiByYW5nZSAxLi45OyBkZWZhdWx0cyB0byA4LgogKgogKgogKgogKgogKiB3aW5kb3cKICoKICoKICogVGhlIHpsaWIgd2luZG93IHNpemUgKGxvZ2FyaXRobWljKSBpbiByYW5nZSA4Li4xNTsgZGVmYXVsdHMgdG8gMTUuCiAqCiAqCiAqCiAqCiAqIHN0cmF0ZWd5CiAqCiAqCiAqIE9uZSBvZiBaTElCX0ZJTFRFUkVELAogKiBaTElCX0hVRkZNQU5fT05MWSwgWkxJQl9STEUsCiAqIFpMSUJfRklYRUQgb3IKICogWkxJQl9ERUZBVUxUX1NUUkFURUdZICh0aGUgZGVmYXVsdCkuCiAqCiAqCiAqCiAqCiAqIGRpY3Rpb25hcnkKICoKICoKICogQSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncwogKiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnkgKGRlZmF1bHQ6IG5vIHByZXNldCBkaWN0aW9uYXJ5KS4KICoKICoKICoKICoKICoKICogVGhlIGNvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIC0xLi45OyBkZWZhdWx0cyB0byAtMS4KICoKICogVGhlIGNvbXByZXNzaW9uIG1lbW9yeSBsZXZlbCBpbiByYW5nZSAxLi45OyBkZWZhdWx0cyB0byA4LgogKgogKiBUaGUgemxpYiB3aW5kb3cgc2l6ZSAobG9nYXJpdGhtaWMpIGluIHJhbmdlIDguLjE1OyBkZWZhdWx0cyB0byAxNS4KICoKICogT25lIG9mIFpMSUJfRklMVEVSRUQsCiAqIFpMSUJfSFVGRk1BTl9PTkxZLCBaTElCX1JMRSwKICogWkxJQl9GSVhFRCBvcgogKiBaTElCX0RFRkFVTFRfU1RSQVRFR1kgKHRoZSBkZWZhdWx0KS4KICoKICogQSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncwogKiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnkgKGRlZmF1bHQ6IG5vIHByZXNldCBkaWN0aW9uYXJ5KS4KICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgZGVmbGF0ZSBjb250ZXh0IHJlc291cmNlICh6bGliLmRlZmxhdGUpIG9uCiAqIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZGVmbGF0ZV9pbml0KGludCAkZW5jb2RpbmcsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxkZWZsYXRlX2luaXQoJGVuY29kaW5nLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIENsb3NlcyB0aGUgZ2l2ZW4gZ3otZmlsZSBwb2ludGVyLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemNsb3NlKCR6cCk6IHZvaWQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnemNsb3NlKCR6cCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGNvbXByZXNzZXMgdGhlIGdpdmVuIHN0cmluZyB1c2luZyB0aGUgWkxJQgogKiBkYXRhIGZvcm1hdC4KICoKICogRm9yIGRldGFpbHMgb24gdGhlIFpMSUIgY29tcHJlc3Npb24gYWxnb3JpdGhtIHNlZSB0aGUgZG9jdW1lbnQKICogIlpMSUIgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdAogKiBTcGVjaWZpY2F0aW9uIHZlcnNpb24gMy4zIiAoUkZDIDE5NTApLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzLgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgb2YgY29tcHJlc3Npb24uIENhbiBiZSBnaXZlbiBhcyAwIGZvciBubyBjb21wcmVzc2lvbiB1cCB0byA5CiAqIGZvciBtYXhpbXVtIGNvbXByZXNzaW9uLgogKgogKiBJZiAtMSBpcyB1c2VkLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBvZiB0aGUgemxpYiBsaWJyYXJ5IGlzIHVzZWQgd2hpY2ggaXMgNi4KICogQHBhcmFtIGludCAkZW5jb2RpbmcgT25lIG9mIFpMSUJfRU5DT0RJTkdfKiBjb25zdGFudHMuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb21wcmVzc2VkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemNvbXByZXNzKHN0cmluZyAkZGF0YSwgaW50ICRsZXZlbCA9IC0xLCBpbnQgJGVuY29kaW5nID0gWkxJQl9FTkNPRElOR19ERUZMQVRFKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ3pjb21wcmVzcygkZGF0YSwgJGxldmVsLCAkZW5jb2RpbmcpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkZWNvZGVkIHZlcnNpb24gb2YgdGhlIGlucHV0CiAqIGRhdGEuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVjb2RlLCBlbmNvZGVkIGJ5IGd6ZW5jb2RlLgogKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIG1heGltdW0gbGVuZ3RoIG9mIGRhdGEgdG8gZGVjb2RlLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGVjb2RlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pkZWNvZGUoc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGd6ZGVjb2RlKCRkYXRhLCAkbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemRlY29kZSgkZGF0YSk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY29tcHJlc3NlcyB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBERUZMQVRFCiAqIGRhdGEgZm9ybWF0LgogKgogKiBGb3IgZGV0YWlscyBvbiB0aGUgREVGTEFURSBjb21wcmVzc2lvbiBhbGdvcml0aG0gc2VlIHRoZSBkb2N1bWVudAogKiAiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0CiAqIFNwZWNpZmljYXRpb24gdmVyc2lvbiAxLjMiIChSRkMgMTk1MSkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZGVmbGF0ZS4KICogQHBhcmFtIGludCAkbGV2ZWwgVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uLiBDYW4gYmUgZ2l2ZW4gYXMgMCBmb3Igbm8gY29tcHJlc3Npb24gdXAgdG8gOQogKiBmb3IgbWF4aW11bSBjb21wcmVzc2lvbi4gSWYgbm90IGdpdmVuLCB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbCB3aWxsCiAqIGJlIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIG9mIHRoZSB6bGliIGxpYnJhcnkuCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIE9uZSBvZiBaTElCX0VOQ09ESU5HXyogY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGVmbGF0ZWQgc3RyaW5nLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGd6ZGVmbGF0ZShzdHJpbmcgJGRhdGEsIGludCAkbGV2ZWwgPSAtMSwgaW50ICRlbmNvZGluZyA9IFpMSUJfRU5DT0RJTkdfUkFXKTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcZ3pkZWZsYXRlKCRkYXRhLCAkbGV2ZWwsICRlbmNvZGluZyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQKICogZGF0YSBjb21wYXRpYmxlIHdpdGggdGhlIG91dHB1dCBvZiB0aGUKICogZ3ppcCBwcm9ncmFtLgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgR1pJUCBmaWxlIGZvcm1hdCwgc2VlIHRoZSBkb2N1bWVudDoKICogR1pJUCBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uCiAqIHZlcnNpb24gNC4zIChSRkMgMTk1MikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZW5jb2RlLgogKiBAcGFyYW0gaW50ICRsZXZlbCBUaGUgbGV2ZWwgb2YgY29tcHJlc3Npb24uIENhbiBiZSBnaXZlbiBhcyAwIGZvciBubyBjb21wcmVzc2lvbiB1cCB0byA5CiAqIGZvciBtYXhpbXVtIGNvbXByZXNzaW9uLiBJZiBub3QgZ2l2ZW4sIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIHdpbGwKICogYmUgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIHpsaWIgbGlicmFyeS4KICogQHBhcmFtIGludCAkZW5jb2RpbmdfbW9kZSBUaGUgZW5jb2RpbmcgbW9kZS4gQ2FuIGJlIEZPUkNFX0daSVAgKHRoZSBkZWZhdWx0KQogKiBvciBGT1JDRV9ERUZMQVRFLgogKgogKiBQcmlvciB0byBQSFAgNS40LjAsIHVzaW5nIEZPUkNFX0RFRkxBVEUgcmVzdWx0cyBpbgogKiBhIHN0YW5kYXJkIHpsaWIgZGVmbGF0ZWQgc3RyaW5nIChpbmNsdXNpdmUgemxpYiBoZWFkZXJzKSBhZnRlciBhIGd6aXAKICogZmlsZSBoZWFkZXIgYnV0IHdpdGhvdXQgdGhlIHRyYWlsaW5nIGNyYzMyIGNoZWNrc3VtLgogKgogKiBJbiBQSFAgNS40LjAgYW5kIGxhdGVyLCBGT1JDRV9ERUZMQVRFIGdlbmVyYXRlcwogKiBSRkMgMTk1MCBjb21wbGlhbnQgb3V0cHV0LCBjb25zaXN0aW5nIG9mIGEgemxpYiBoZWFkZXIsIHRoZSBkZWZsYXRlZAogKiBkYXRhLCBhbmQgYW4gQWRsZXIgY2hlY2tzdW0uCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNvZGVkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemVuY29kZShzdHJpbmcgJGRhdGEsIGludCAkbGV2ZWwgPSAtMSwgaW50ICRlbmNvZGluZ19tb2RlID0gRk9SQ0VfR1pJUCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6ZW5jb2RlKCRkYXRhLCAkbGV2ZWwsICRlbmNvZGluZ19tb2RlKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogR2V0cyBhICh1bmNvbXByZXNzZWQpIHN0cmluZyBvZiB1cCB0byBsZW5ndGggLSAxIGJ5dGVzIHJlYWQgZnJvbSB0aGUgZ2l2ZW4KICogZmlsZSBwb2ludGVyLiBSZWFkaW5nIGVuZHMgd2hlbiBsZW5ndGggLSAxIGJ5dGVzIGhhdmUgYmVlbiByZWFkLCBvbiBhCiAqIG5ld2xpbmUsIG9yIG9uIEVPRiAod2hpY2hldmVyIGNvbWVzIGZpcnN0KS4KICoKICogQHBhcmFtIHJlc291cmNlICR6cCBUaGUgZ3otZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkLCBhbmQgbXVzdCBwb2ludCB0byBhIGZpbGUKICogc3VjY2Vzc2Z1bGx5IG9wZW5lZCBieSBnem9wZW4uCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gZ2V0LgogKiBAcmV0dXJuIHN0cmluZyBUaGUgdW5jb21wcmVzc2VkIHN0cmluZy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemdldHMoJHpwLCBpbnQgJGxlbmd0aCA9IG51bGwpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgaWYgKCRsZW5ndGggIT09IG51bGwpIHsKICAgICAgICAkcmVzdWx0ID0gXGd6Z2V0cygkenAsICRsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXGd6Z2V0cygkenApOwogICAgfQogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJZGVudGljYWwgdG8gZ3pnZXRzLCBleGNlcHQgdGhhdAogKiBnemdldHNzIGF0dGVtcHRzIHRvIHN0cmlwIGFueSBIVE1MIGFuZCBQSFAKICogdGFncyBmcm9tIHRoZSB0ZXh0IGl0IHJlYWRzLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHBhcmFtIGludCAkbGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBnZXQuCiAqIEBwYXJhbSBzdHJpbmcgJGFsbG93YWJsZV90YWdzIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGFncyB3aGljaCBzaG91bGQgbm90CiAqIGJlIHN0cmlwcGVkLgogKiBAcmV0dXJuIHN0cmluZyBUaGUgdW5jb21wcmVzc2VkIGFuZCBzdHJpcHBlZCBzdHJpbmcuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pnZXRzcygkenAsIGludCAkbGVuZ3RoLCBzdHJpbmcgJGFsbG93YWJsZV90YWdzID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJGFsbG93YWJsZV90YWdzICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemdldHNzKCR6cCwgJGxlbmd0aCwgJGFsbG93YWJsZV90YWdzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxnemdldHNzKCR6cCwgJGxlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaW5mbGF0ZXMgYSBkZWZsYXRlZCBzdHJpbmcuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgY29tcHJlc3NlZCBieSBnemRlZmxhdGUuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBsZW5ndGggb2YgZGF0YSB0byBkZWNvZGUuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4KICoKICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBpcyBtb3JlIHRoYW4KICogMzI3NjggdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dCBkYXRhCiAqIG9yIG1vcmUgdGhhbiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnemluZmxhdGUoc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnemluZmxhdGUoJGRhdGEsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBSZWFkcyB0byBFT0Ygb24gdGhlIGdpdmVuIGd6LWZpbGUgcG9pbnRlciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZAogKiB3cml0ZXMgdGhlICh1bmNvbXByZXNzZWQpIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHpwIFRoZSBnei1maWxlIHBvaW50ZXIuIEl0IG11c3QgYmUgdmFsaWQsIGFuZCBtdXN0IHBvaW50IHRvIGEgZmlsZQogKiBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5IGd6b3Blbi4KICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgY2hhcmFjdGVycyByZWFkIGZyb20gZ3oKICogYW5kIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBpbnB1dC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnenBhc3N0aHJ1KCR6cCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6cGFzc3RocnUoJHpwKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCgovKioKICogU2V0cyB0aGUgZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3Igb2YgdGhlIGdpdmVuIGd6LWZpbGUgcG9pbnRlciB0byB0aGUKICogYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlICR6cCBUaGUgZ3otZmlsZSBwb2ludGVyLiBJdCBtdXN0IGJlIHZhbGlkLCBhbmQgbXVzdCBwb2ludCB0byBhIGZpbGUKICogc3VjY2Vzc2Z1bGx5IG9wZW5lZCBieSBnem9wZW4uCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gZ3pyZXdpbmQoJHpwKTogdm9pZAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGd6cmV3aW5kKCR6cCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KfQoKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHVuY29tcHJlc3MgYSBjb21wcmVzc2VkIHN0cmluZy4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZGF0YSBjb21wcmVzc2VkIGJ5IGd6Y29tcHJlc3MuCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbWF4aW11bSBsZW5ndGggb2YgZGF0YSB0byBkZWNvZGUuCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0YS4KICoKICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBpcyBtb3JlIHRoYW4KICogMzI3NjggdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dCBkYXRhCiAqIG9yIG1vcmUgdGhhbiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aC4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBnenVuY29tcHJlc3Moc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCA9IDApOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxnenVuY29tcHJlc3MoJGRhdGEsICRsZW5ndGgpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc291cmNlCiAqIEByZXR1cm4gaW50IFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgc28gZmFyLgogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIGluZmxhdGVfZ2V0X3JlYWRfbGVuKCRyZXNvdXJjZSk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGluZmxhdGVfZ2V0X3JlYWRfbGVuKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFVzdWFsbHkgcmV0dXJucyBlaXRoZXIgWkxJQl9PSyBvciBaTElCX1NUUkVBTV9FTkQuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UKICogQHJldHVybiBpbnQgUmV0dXJucyBkZWNvbXByZXNzaW9uIHN0YXR1cy4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBpbmZsYXRlX2dldF9zdGF0dXMoJHJlc291cmNlKTogaW50CnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgICRyZXN1bHQgPSBcaW5mbGF0ZV9nZXRfc3RhdHVzKCRyZXNvdXJjZSk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIEluY3JlbWVudGFsbHkgaW5mbGF0ZXMgZW5jb2RlZCBkYXRhIGluIHRoZSBzcGVjaWZpZWQgY29udGV4dC4KICoKICogTGltaXRhdGlvbjogaGVhZGVyIGluZm9ybWF0aW9uIGZyb20gR1pJUCBjb21wcmVzc2VkIGRhdGEgYXJlIG5vdCBtYWRlCiAqIGF2YWlsYWJsZS4KICoKICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IEEgY29udGV4dCBjcmVhdGVkIHdpdGggaW5mbGF0ZV9pbml0LgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGVkX2RhdGEgQSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEuCiAqIEBwYXJhbSBpbnQgJGZsdXNoX21vZGUgT25lIG9mIFpMSUJfQkxPQ0ssCiAqIFpMSUJfTk9fRkxVU0gsCiAqIFpMSUJfUEFSVElBTF9GTFVTSCwKICogWkxJQl9TWU5DX0ZMVVNIIChkZWZhdWx0KSwKICogWkxJQl9GVUxMX0ZMVVNILCBaTElCX0ZJTklTSC4KICogTm9ybWFsbHkgeW91IHdpbGwgd2FudCB0byBzZXQgWkxJQl9OT19GTFVTSCB0bwogKiBtYXhpbWl6ZSBjb21wcmVzc2lvbiwgYW5kIFpMSUJfRklOSVNIIHRvIHRlcm1pbmF0ZQogKiB3aXRoIHRoZSBsYXN0IGNodW5rIG9mIGRhdGEuIFNlZSB0aGUgemxpYiBtYW51YWwgZm9yIGEKICogZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uc3RhbnRzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgY2h1bmsgb2YgdW5jb21wcmVzc2VkIGRhdGEuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5mbGF0ZV9hZGQoJGNvbnRleHQsIHN0cmluZyAkZW5jb2RlZF9kYXRhLCBpbnQgJGZsdXNoX21vZGUgPSBaTElCX1NZTkNfRkxVU0gpOiBzdHJpbmcKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmZsYXRlX2FkZCgkY29udGV4dCwgJGVuY29kZWRfZGF0YSwgJGZsdXNoX21vZGUpOwogICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgdGhyb3cgWmxpYkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKCi8qKgogKiBJbml0aWFsaXplIGFuIGluY3JlbWVudGFsIGluZmxhdGUgY29udGV4dCB3aXRoIHRoZSBzcGVjaWZpZWQKICogZW5jb2RpbmcuCiAqCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIE9uZSBvZiB0aGUgWkxJQl9FTkNPRElOR18qIGNvbnN0YW50cy4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIGFzc29jaWF0aXZlIGFycmF5IHdoaWNoIG1heSBjb250YWluIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqCiAqCiAqIGxldmVsCiAqCiAqCiAqIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBpbiByYW5nZSAtMS4uOTsgZGVmYXVsdHMgdG8gLTEuCiAqCiAqCiAqCiAqCiAqIG1lbW9yeQogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbWVtb3J5IGxldmVsIGluIHJhbmdlIDEuLjk7IGRlZmF1bHRzIHRvIDguCiAqCiAqCiAqCiAqCiAqIHdpbmRvdwogKgogKgogKiBUaGUgemxpYiB3aW5kb3cgc2l6ZSAobG9nYXJpdGhtaWMpIGluIHJhbmdlIDguLjE1OyBkZWZhdWx0cyB0byAxNS4KICoKICoKICoKICoKICogc3RyYXRlZ3kKICoKICoKICogT25lIG9mIFpMSUJfRklMVEVSRUQsCiAqIFpMSUJfSFVGRk1BTl9PTkxZLCBaTElCX1JMRSwKICogWkxJQl9GSVhFRCBvcgogKiBaTElCX0RFRkFVTFRfU1RSQVRFR1kgKHRoZSBkZWZhdWx0KS4KICoKICoKICoKICoKICogZGljdGlvbmFyeQogKgogKgogKiBBIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzCiAqIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeSAoZGVmYXVsdDogbm8gcHJlc2V0IGRpY3Rpb25hcnkpLgogKgogKgogKgogKgogKgogKiBUaGUgY29tcHJlc3Npb24gbGV2ZWwgaW4gcmFuZ2UgLTEuLjk7IGRlZmF1bHRzIHRvIC0xLgogKgogKiBUaGUgY29tcHJlc3Npb24gbWVtb3J5IGxldmVsIGluIHJhbmdlIDEuLjk7IGRlZmF1bHRzIHRvIDguCiAqCiAqIFRoZSB6bGliIHdpbmRvdyBzaXplIChsb2dhcml0aG1pYykgaW4gcmFuZ2UgOC4uMTU7IGRlZmF1bHRzIHRvIDE1LgogKgogKiBPbmUgb2YgWkxJQl9GSUxURVJFRCwKICogWkxJQl9IVUZGTUFOX09OTFksIFpMSUJfUkxFLAogKiBaTElCX0ZJWEVEIG9yCiAqIFpMSUJfREVGQVVMVF9TVFJBVEVHWSAodGhlIGRlZmF1bHQpLgogKgogKiBBIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzCiAqIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeSAoZGVmYXVsdDogbm8gcHJlc2V0IGRpY3Rpb25hcnkpLgogKiBAcmV0dXJuIHJlc291cmNlIFJldHVybnMgYW4gaW5mbGF0ZSBjb250ZXh0IHJlc291cmNlICh6bGliLmluZmxhdGUpIG9uCiAqIHN1Y2Nlc3MuCiAqIEB0aHJvd3MgWmxpYkV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gaW5mbGF0ZV9pbml0KGludCAkZW5jb2RpbmcsIGFycmF5ICRvcHRpb25zID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxpbmZsYXRlX2luaXQoJGVuY29kaW5nLCAkb3B0aW9ucyk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFJlYWRzIGEgZmlsZSwgZGVjb21wcmVzc2VzIGl0IGFuZCB3cml0ZXMgaXQgdG8gc3RhbmRhcmQgb3V0cHV0LgogKgogKiByZWFkZ3pmaWxlIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbgogKiBnemlwIGZvcm1hdDsgaW4gdGhpcyBjYXNlIHJlYWRnemZpbGUgd2lsbCBkaXJlY3RseQogKiByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSBuYW1lLiBUaGlzIGZpbGUgd2lsbCBiZSBvcGVuZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBhbmQgaXRzCiAqIGNvbnRlbnRzIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0LgogKiBAcGFyYW0gaW50ICR1c2VfaW5jbHVkZV9wYXRoIFlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIDEsIGlmIHlvdQogKiB3YW50IHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgaW4gdGhlIGluY2x1ZGVfcGF0aCB0b28uCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiAodW5jb21wcmVzc2VkKSBieXRlcyByZWFkIGZyb20gdGhlIGZpbGUgb24gc3VjY2VzcwogKiBAdGhyb3dzIFpsaWJFeGNlcHRpb24KICoKICovCmZ1bmN0aW9uIHJlYWRnemZpbGUoc3RyaW5nICRmaWxlbmFtZSwgaW50ICR1c2VfaW5jbHVkZV9wYXRoID0gMCk6IGludAp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXHJlYWRnemZpbGUoJGZpbGVuYW1lLCAkdXNlX2luY2x1ZGVfcGF0aCk7CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBabGliRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgoKLyoqCiAqIFVuY29tcHJlc3MgYW55IHJhdy9nemlwL3psaWIgZW5jb2RlZCBkYXRhLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBpbnQgJG1heF9kZWNvZGVkX2xlbgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KICogQHRocm93cyBabGliRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiB6bGliX2RlY29kZShzdHJpbmcgJGRhdGEsIGludCAkbWF4X2RlY29kZWRfbGVuID0gbnVsbCk6IHN0cmluZwp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICBpZiAoJG1heF9kZWNvZGVkX2xlbiAhPT0gbnVsbCkgewogICAgICAgICRyZXN1bHQgPSBcemxpYl9kZWNvZGUoJGRhdGEsICRtYXhfZGVjb2RlZF9sZW4pOwogICAgfSBlbHNlIHsKICAgICAgICAkcmVzdWx0ID0gXHpsaWJfZGVjb2RlKCRkYXRhKTsKICAgIH0KICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFpsaWJFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/DateTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIERhdGVJbnRlcnZhbDsKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwp1c2UgRGF0ZVRpbWVab25lOwp1c2UgU2FmZVxFeGNlcHRpb25zXERhdGV0aW1lRXhjZXB0aW9uOwoKLyoqIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNhZmUgdmVyc2lvbiBvZiB0aGUgRGF0ZXRpbWUgY2xhc3MgKi8KY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBcRGF0ZVRpbWUKewogICAgLy9zd2l0Y2ggZnJvbSByZWd1bGFyIGRhdGV0aW1lIHRvIHNhZmUgdmVyc2lvbgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVJlZ3VsYXIoXERhdGVUaW1lICRkYXRldGltZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGV0aW1lLT5mb3JtYXQoJ1ktbS1kIEg6aTpzLnUnKSwgJGRhdGV0aW1lLT5nZXRUaW1lem9uZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZQogICAgICogQHBhcmFtIERhdGVUaW1lWm9uZXxudWxsICR0aW1lem9uZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJHRpbWUsICR0aW1lem9uZSA9IG51bGwpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGV0aW1lID0gcGFyZW50OjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICR0aW1lLCAkdGltZXpvbmUpOwogICAgICAgIGlmICgkZGF0ZXRpbWUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKCRkYXRldGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVJbnRlcmZhY2UgJGRhdGV0aW1lMiBUaGUgZGF0ZSB0byBjb21wYXJlIHRvLgogICAgICogQHBhcmFtIGJvb2xlYW4gJGFic29sdXRlIFtvcHRpb25hbF0gV2hldGhlciB0byByZXR1cm4gYWJzb2x1dGUgZGlmZmVyZW5jZS4KICAgICAqIEByZXR1cm4gRGF0ZUludGVydmFsIFRoZSBEYXRlSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMuCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWZmKCRkYXRldGltZTIsICRhYnNvbHV0ZSA9IGZhbHNlKTogRGF0ZUludGVydmFsCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVJbnRlcnZhbHxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9IHBhcmVudDo6ZGlmZigkZGF0ZXRpbWUyLCAkYWJzb2x1dGUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kaWZ5IEEgZGF0ZS90aW1lIHN0cmluZy4gVmFsaWQgZm9ybWF0cyBhcmUgZXhwbGFpbmVkIGluIDxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmZvcm1hdHMucGhwIj5EYXRlIGFuZCBUaW1lIEZvcm1hdHM8L2E+LgogICAgICogQHJldHVybiBEYXRlVGltZSBSZXR1cm5zIHRoZSBEYXRlVGltZSBvYmplY3QgZm9yIG1ldGhvZCBjaGFpbmluZy4KICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGlmeSgkbW9kaWZ5KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIERhdGVUaW1lfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gcGFyZW50Ojptb2RpZnkoJG1vZGlmeSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyCiAgICAgKiBAcGFyYW0gaW50ICRtb250aAogICAgICogQHBhcmFtIGludCAkZGF5CiAgICAgKiBAcmV0dXJuIERhdGVUaW1lCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREYXRlKCR5ZWFyLCAkbW9udGgsICRkYXkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgRGF0ZVRpbWV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6OnNldERhdGUoJHllYXIsICRtb250aCwgJGRheSk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IERhdGV0aW1lRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/DateTimeImmutable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBTYWZlOwoKdXNlIERhdGVJbnRlcnZhbDsKdXNlIERhdGVUaW1lOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBEYXRlVGltZVpvbmU7CnVzZSBTYWZlXEV4Y2VwdGlvbnNcRGF0ZXRpbWVFeGNlcHRpb247CgovKioKICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhIHNhZmUgdmVyc2lvbiBvZiB0aGUgRGF0ZXRpbWVJbW11dGFibGUgY2xhc3MuCiAqIFdoaWxlIGl0IHRlY2huaWNhbGx5IG92ZXJsb2FkcyBcRGF0ZVRpbWVJbW11dGFibGUgZm9yIHR5cGVoaW50IGNvbXBhdGliaWxpdHksCiAqIGl0IGlzIGFjdHVhbGx5IHVzZWQgYXMgYSB3cmFwcGVyIG9mIFxEYXRlVGltZUltbXV0YWJsZSwgbW9zdGx5IHRvIGJlIGFibGUgdG8gb3ZlcndyaXRlIGZ1bmN0aW9ucyBsaWtlIGdldFRpbWVzdGFtcCgpIHdoaWxlIHN0aWxsIGJlaW5nIGFibGUgdG8gZWRpdCBtaWxsaXNlY29uZHMgdmlhIHNldFRpbWUoKS4KICovCmNsYXNzIERhdGVUaW1lSW1tdXRhYmxlIGV4dGVuZHMgXERhdGVUaW1lSW1tdXRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBcRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHJpdmF0ZSAkaW5uZXJEYXRlVGltZTsKCiAgICAvKioKICAgICAqIERhdGVUaW1lSW1tdXRhYmxlIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIHN0cmluZyAkdGltZQogICAgICogQHBhcmFtIERhdGVUaW1lWm9uZXxudWxsICR0aW1lem9uZQogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdGltZSA9ICdub3cnLCAkdGltZXpvbmUgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHRpbWUsICR0aW1lem9uZSk7CiAgICAgICAgJHRoaXMtPmlubmVyRGF0ZVRpbWUgPSBuZXcgcGFyZW50KCR0aW1lLCAkdGltZXpvbmUpOwogICAgfQoKICAgIC8vc3dpdGNoIGJldHdlZW4gcmVndWxhciBkYXRldGltZSBhbmQgc2FmZSB2ZXJzaW9uCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21SZWd1bGFyKFxEYXRlVGltZUltbXV0YWJsZSAkZGF0ZXRpbWUpOiBzZWxmCiAgICB7CiAgICAgICAgJHNhZmVEYXRldGltZSA9IG5ldyBzZWxmKCRkYXRldGltZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cy51JyksICRkYXRldGltZS0+Z2V0VGltZXpvbmUoKSk7IC8vd2UgbmVlZCB0byBhbHNvIHVwZGF0ZSB0aGUgd3JhcHBlciB0byBub3QgYnJlYWsgdGhlIG9wZXJhdG9ycyAnPCcgYW5kICc+JwogICAgICAgICRzYWZlRGF0ZXRpbWUtPmlubmVyRGF0ZVRpbWUgPSAkZGF0ZXRpbWU7IC8vdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgaW5mb3JtYXRpb24gYmVjYXVzZSBvZiB0aGUgZm9ybWF0KCkuCiAgICAgICAgcmV0dXJuICRzYWZlRGF0ZXRpbWU7CiAgICB9CgogICAgLy91c2VmdWxsIGlmIHlvdSBuZWVkIHRvIHN3aXRjaCBiYWNrIHRvIHJlZ3VsYXIgRGF0ZVRpbWVJbW11dGFibGUgKGZvciBleGFtcGxlIHdoZW4gdXNpbmcgRGF0ZVBlcmlvZCkKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm5lckRhdGVUaW1lKCk6IFxEYXRlVGltZUltbXV0YWJsZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZTsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gb3ZlcmxvYWQgZnVuY3Rpb25zIHdpdGggZmFsc2UgZXJyb3JzCgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWUKICAgICAqIEBwYXJhbSBEYXRlVGltZVpvbmV8bnVsbCAkdGltZXpvbmUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICR0aW1lLCAkdGltZXpvbmUgPSBudWxsKTogc2VsZgogICAgewogICAgICAgICRkYXRldGltZSA9IHBhcmVudDo6Y3JlYXRlRnJvbUZvcm1hdCgkZm9ybWF0LCAkdGltZSwgJHRpbWV6b25lKTsKICAgICAgICBpZiAoJGRhdGV0aW1lID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkZGF0ZXRpbWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybWF0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRmb3JtYXQpOiBzdHJpbmcKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmd8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Zm9ybWF0KCRmb3JtYXQpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIERhdGVUaW1lSW50ZXJmYWNlICRkYXRldGltZTIKICAgICAqIEBwYXJhbSBib29sICRhYnNvbHV0ZQogICAgICogQHJldHVybiBEYXRlSW50ZXJ2YWwKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmYoJGRhdGV0aW1lMiwgJGFic29sdXRlID0gZmFsc2UpOiBEYXRlSW50ZXJ2YWwKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZUludGVydmFsfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmRpZmYoJGRhdGV0aW1lMiwgJGFic29sdXRlKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZGlmeQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kaWZ5KCRtb2RpZnkpOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVUaW1lSW1tdXRhYmxlfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPm1vZGlmeSgkbW9kaWZ5KTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7IC8vd2UgaGF2ZSB0byByZWNyZWF0ZSBhIHNhZmUgZGF0ZXRpbWUgYmVjYXVzZSBtb2RpZnkgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIFxEYXRlVGltZUltbXV0YWJsZQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkeWVhcgogICAgICogQHBhcmFtIGludCAkbW9udGgKICAgICAqIEBwYXJhbSBpbnQgJGRheQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGF0ZSgkeWVhciwgJG1vbnRoLCAkZGF5KTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zZXREYXRlKCR5ZWFyLCAkbW9udGgsICRkYXkpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsgLy93ZSBoYXZlIHRvIHJlY3JlYXRlIGEgc2FmZSBkYXRldGltZSBiZWNhdXNlIG1vZGlmeSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgXERhdGVUaW1lSW1tdXRhYmxlCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyCiAgICAgKiBAcGFyYW0gaW50ICR3ZWVrCiAgICAgKiBAcGFyYW0gaW50ICRkYXkKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElTT0RhdGUoJHllYXIsICR3ZWVrLCAkZGF5ID0gMSk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZVRpbWVJbW11dGFibGV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+c2V0SVNPRGF0ZSgkeWVhciwgJHdlZWssICRkYXkpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsgLy93ZSBoYXZlIHRvIHJlY3JlYXRlIGEgc2FmZSBkYXRldGltZSBiZWNhdXNlIG1vZGlmeSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgXERhdGVUaW1lSW1tdXRhYmxlCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRob3VyCiAgICAgKiBAcGFyYW0gaW50ICRtaW51dGUKICAgICAqIEBwYXJhbSBpbnQgJHNlY29uZAogICAgICogQHBhcmFtIGludCAkbWljcm9zZWNvbmRzCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kID0gMCwgJG1pY3Jvc2Vjb25kcyA9IDApOiBzZWxmCiAgICB7CiAgICAgICAgLyoqIEB2YXIgXERhdGVUaW1lSW1tdXRhYmxlfGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPnNldFRpbWUoJGhvdXIsICRtaW51dGUsICRzZWNvbmQsICRtaWNyb3NlY29uZHMpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHVuaXh0aW1lc3RhbXAKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqIEB0aHJvd3MgRGF0ZXRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVzdGFtcCgkdW5peHRpbWVzdGFtcCk6IHNlbGYKICAgIHsKICAgICAgICAvKiogQHZhciBcRGF0ZVRpbWVJbW11dGFibGV8ZmFsc2UgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgPSAkdGhpcy0+aW5uZXJEYXRlVGltZS0+c2V0VGltZXN0YW1wKCR1bml4dGltZXN0YW1wKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVab25lICR0aW1lem9uZQogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICogQHRocm93cyBEYXRldGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZXpvbmUoJHRpbWV6b25lKTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zZXRUaW1lem9uZSgkdGltZXpvbmUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tUmVndWxhcigkcmVzdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBEYXRlSW50ZXJ2YWwgJGludGVydmFsCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW1tdXRhYmxlCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWIoJGludGVydmFsKTogc2VsZgogICAgewogICAgICAgIC8qKiBAdmFyIFxEYXRlVGltZUltbXV0YWJsZXxmYWxzZSAkcmVzdWx0ICovCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5pbm5lckRhdGVUaW1lLT5zdWIoJGludGVydmFsKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgRGF0ZXRpbWVFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHJlc3VsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIERhdGV0aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKTogaW50CiAgICB7CiAgICAgICAgLyoqIEB2YXIgaW50fGZhbHNlICRyZXN1bHQgKi8KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmdldE9mZnNldCgpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBEYXRldGltZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy9vdmVybG9hZCBnZXR0ZXJzIHRvIHVzZSB0aGUgaW5uZXIgZGF0ZXRpbWUgaW1tdXRhYmxlIGluc3RlYWQgb2YgaXRzZWxmCgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGF0ZUludGVydmFsICRpbnRlcnZhbAogICAgICogQHJldHVybiBEYXRlVGltZUltbXV0YWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRpbnRlcnZhbCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVJlZ3VsYXIoJHRoaXMtPmlubmVyRGF0ZVRpbWUtPmFkZCgkaW50ZXJ2YWwpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBEYXRlVGltZSAkZGF0ZVRpbWUKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tTXV0YWJsZSgkZGF0ZVRpbWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKHBhcmVudDo6Y3JlYXRlRnJvbU11dGFibGUoJGRhdGVUaW1lKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXJyYXkKICAgICAqIEByZXR1cm4gRGF0ZVRpbWVJbW11dGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX3NldF9zdGF0ZSgkYXJyYXkpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21SZWd1bGFyKHBhcmVudDo6X19zZXRfc3RhdGUoJGFycmF5KSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWV6b25lKCk6IERhdGVUaW1lWm9uZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Z2V0VGltZXpvbmUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW5uZXJEYXRlVGltZS0+Z2V0VGltZXN0YW1wKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/CurlException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgQ3VybEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRjaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21DdXJsUmVzb3VyY2UoJGNoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZihcY3VybF9lcnJvcigkY2gpLCBcY3VybF9lcnJubygkY2gpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/JsonException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgSnNvbkV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXGpzb25fbGFzdF9lcnJvcl9tc2coKSwgXGpzb25fbGFzdF9lcnJvcigpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/OpensslException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgT3BlbnNzbEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoXG9wZW5zc2xfZXJyb3Jfc3RyaW5nKCkgPzogJycsIDApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/PcreException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKY2xhc3MgUGNyZUV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24gaW1wbGVtZW50cyBTYWZlRXhjZXB0aW9uSW50ZXJmYWNlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVBocEVycm9yKCk6IHNlbGYKICAgIHsKICAgICAgICAkZXJyb3JNYXAgPSBbCiAgICAgICAgICAgIFBSRUdfSU5URVJOQUxfRVJST1IgPT4gJ1BSRUdfSU5URVJOQUxfRVJST1I6IEludGVybmFsIGVycm9yJywKICAgICAgICAgICAgUFJFR19CQUNLVFJBQ0tfTElNSVRfRVJST1IgPT4gJ1BSRUdfQkFDS1RSQUNLX0xJTUlUX0VSUk9SOiBCYWNrdHJhY2sgbGltaXQgcmVhY2hlZCcsCiAgICAgICAgICAgIFBSRUdfUkVDVVJTSU9OX0xJTUlUX0VSUk9SID0+ICdQUkVHX1JFQ1VSU0lPTl9MSU1JVF9FUlJPUjogUmVjdXJzaW9uIGxpbWl0IHJlYWNoZWQnLAogICAgICAgICAgICBQUkVHX0JBRF9VVEY4X0VSUk9SID0+ICdQUkVHX0JBRF9VVEY4X0VSUk9SOiBJbnZhbGlkIFVURjggY2hhcmFjdGVyJywKICAgICAgICAgICAgUFJFR19CQURfVVRGOF9PRkZTRVRfRVJST1IgPT4gJ1BSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SJywKICAgICAgICAgICAgUFJFR19KSVRfU1RBQ0tMSU1JVF9FUlJPUiA9PiAnUFJFR19KSVRfU1RBQ0tMSU1JVF9FUlJPUicsCiAgICAgICAgXTsKICAgICAgICAkZXJyTXNnID0gJGVycm9yTWFwW3ByZWdfbGFzdF9lcnJvcigpXSA/PyAnVW5rbm93biBQQ1JFIGVycm9yOiAnLnByZWdfbGFzdF9lcnJvcigpOwogICAgICAgIHJldHVybiBuZXcgc2VsZigkZXJyTXNnLCBccHJlZ19sYXN0X2Vycm9yKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/Exceptions/SafeExceptionInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgpuYW1lc3BhY2UgU2FmZVxFeGNlcHRpb25zOwoKaW50ZXJmYWNlIFNhZmVFeGNlcHRpb25JbnRlcmZhY2UgZXh0ZW5kcyBcVGhyb3dhYmxlCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/lib/special_cases.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIG5vdCBiZSBkZWFsdCB3aXRoIGF1dG9tYXRpY2FsbHkgdXNpbmcgdGhlIGNvZGUgZ2VuZXJhdG9yLgogKiBJZiB5b3UgYWRkIGEgZnVuY3Rpb24gaW4gdGhpcyBsaXN0LCBkbyBub3QgZm9yZ2V0IHRvIGFkZCBpdCBpbiB0aGUgZ2VuZXJhdG9yL2NvbmZpZy9zcGVjaWFsQ2FzZXNGdW5jdGlvbnMucGhwCiAqCiAqLwoKbmFtZXNwYWNlIFNhZmU7Cgp1c2UgU2FmZVxFeGNlcHRpb25zXFNvY2tldHNFeGNlcHRpb247CnVzZSBjb25zdCBQUkVHX05PX0VSUk9SOwp1c2UgU2FmZVxFeGNlcHRpb25zXEFwY0V4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xBcGN1RXhjZXB0aW9uOwp1c2UgU2FmZVxFeGNlcHRpb25zXEpzb25FeGNlcHRpb247CnVzZSBTYWZlXEV4Y2VwdGlvbnNcT3BlbnNzbEV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xQY3JlRXhjZXB0aW9uOwoKLyoqCiAqIFdyYXBwZXIgZm9yIGpzb25fZGVjb2RlIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gc3RyaW5nICRqc29uICAgIEpTT04gZGF0YSB0byBwYXJzZQogKiBAcGFyYW0gYm9vbCAkYXNzb2MgICAgIFdoZW4gdHJ1ZSwgcmV0dXJuZWQgb2JqZWN0cyB3aWxsIGJlIGNvbnZlcnRlZAogKiAgICAgICAgICAgICAgICAgICAgICAgIGludG8gYXNzb2NpYXRpdmUgYXJyYXlzLgogKiBAcGFyYW0gaW50ICRkZXB0aCAgIFVzZXIgc3BlY2lmaWVkIHJlY3Vyc2lvbiBkZXB0aC4KICogQHBhcmFtIGludCAkb3B0aW9ucyBCaXRtYXNrIG9mIEpTT04gZGVjb2RlIG9wdGlvbnMuCiAqCiAqIEByZXR1cm4gbWl4ZWQKICogQHRocm93cyBKc29uRXhjZXB0aW9uIGlmIHRoZSBKU09OIGNhbm5vdCBiZSBkZWNvZGVkLgogKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZGVjb2RlLnBocAogKi8KZnVuY3Rpb24ganNvbl9kZWNvZGUoc3RyaW5nICRqc29uLCBib29sICRhc3NvYyA9IGZhbHNlLCBpbnQgJGRlcHRoID0gNTEyLCBpbnQgJG9wdGlvbnMgPSAwKQp7CiAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkanNvbiwgJGFzc29jLCAkZGVwdGgsICRvcHRpb25zKTsKICAgIGlmIChKU09OX0VSUk9SX05PTkUgIT09IGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgdGhyb3cgSnNvbkV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJGRhdGE7Cn0KCgovKioKICogRmV0Y2hzIGEgc3RvcmVkIHZhcmlhYmxlIGZyb20gdGhlIGNhY2hlLgogKgogKiBAcGFyYW0gbWl4ZWQgJGtleSBUaGUga2V5IHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlICh3aXRoCiAqIGFwY19zdG9yZSkuIElmIGFuIGFycmF5IGlzIHBhc3NlZCB0aGVuIGVhY2gKICogZWxlbWVudCBpcyBmZXRjaGVkIGFuZCByZXR1cm5lZC4KICogQHJldHVybiBtaXhlZCBUaGUgc3RvcmVkIHZhcmlhYmxlIG9yIGFycmF5IG9mIHZhcmlhYmxlcyBvbiBzdWNjZXNzOyBGQUxTRSBvbiBmYWlsdXJlCiAqIEB0aHJvd3MgQXBjRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBhcGNfZmV0Y2goJGtleSkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxhcGNfZmV0Y2goJGtleSwgJHN1Y2Nlc3MpOwogICAgaWYgKCRzdWNjZXNzID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY0V4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEZldGNocyBhbiBlbnRyeSBmcm9tIHRoZSBjYWNoZS4KICoKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAka2V5IFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUgKHdpdGgKICogYXBjdV9zdG9yZSkuIElmIGFuIGFycmF5IGlzIHBhc3NlZCB0aGVuIGVhY2gKICogZWxlbWVudCBpcyBmZXRjaGVkIGFuZCByZXR1cm5lZC4KICogQHJldHVybiBtaXhlZCBUaGUgc3RvcmVkIHZhcmlhYmxlIG9yIGFycmF5IG9mIHZhcmlhYmxlcyBvbiBzdWNjZXNzCiAqIEB0aHJvd3MgQXBjdUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gYXBjdV9mZXRjaCgka2V5KQp7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgICAkcmVzdWx0ID0gXGFwY3VfZmV0Y2goJGtleSwgJHN1Y2Nlc3MpOwogICAgaWYgKCRzdWNjZXNzID09PSBmYWxzZSkgewogICAgICAgIHRocm93IEFwY3VFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8qKgogKiBTZWFyY2hlcyBzdWJqZWN0IGZvciBtYXRjaGVzIHRvCiAqIHBhdHRlcm4gYW5kIHJlcGxhY2VzIHRoZW0gd2l0aAogKiByZXBsYWNlbWVudC4KICoKICogQHBhcmFtIG1peGVkICRwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IuIEl0IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkgd2l0aAogKiBzdHJpbmdzLgogKgogKiBTZXZlcmFsIFBDUkUgbW9kaWZpZXJzCiAqIGFyZSBhbHNvIGF2YWlsYWJsZS4KICogQHBhcmFtIG1peGVkICRyZXBsYWNlbWVudCBUaGUgc3RyaW5nIG9yIGFuIGFycmF5IHdpdGggc3RyaW5ncyB0byByZXBsYWNlLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBhCiAqIHN0cmluZyBhbmQgdGhlIHBhdHRlcm4gcGFyYW1ldGVyIGlzIGFuIGFycmF5LAogKiBhbGwgcGF0dGVybnMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGF0IHN0cmluZy4gSWYgYm90aAogKiBwYXR0ZXJuIGFuZCByZXBsYWNlbWVudAogKiBwYXJhbWV0ZXJzIGFyZSBhcnJheXMsIGVhY2ggcGF0dGVybiB3aWxsIGJlCiAqIHJlcGxhY2VkIGJ5IHRoZSByZXBsYWNlbWVudCBjb3VudGVycGFydC4gSWYKICogdGhlcmUgYXJlIGZld2VyIGVsZW1lbnRzIGluIHRoZSByZXBsYWNlbWVudAogKiBhcnJheSB0aGFuIGluIHRoZSBwYXR0ZXJuIGFycmF5LCBhbnkgZXh0cmEKICogcGF0dGVybnMgd2lsbCBiZSByZXBsYWNlZCBieSBhbiBlbXB0eSBzdHJpbmcuCiAqCiAqIHJlcGxhY2VtZW50IG1heSBjb250YWluIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0KICogXFxuIG9yCiAqICRuLCB3aXRoIHRoZSBsYXR0ZXIgZm9ybQogKiBiZWluZyB0aGUgcHJlZmVycmVkIG9uZS4gRXZlcnkgc3VjaCByZWZlcmVuY2Ugd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdGV4dAogKiBjYXB0dXJlZCBieSB0aGUgbid0aCBwYXJlbnRoZXNpemVkIHBhdHRlcm4uCiAqIG4gY2FuIGJlIGZyb20gMCB0byA5OSwgYW5kCiAqIFxcMCBvciAkMCByZWZlcnMgdG8gdGhlIHRleHQgbWF0Y2hlZAogKiBieSB0aGUgd2hvbGUgcGF0dGVybi4gT3BlbmluZyBwYXJlbnRoZXNlcyBhcmUgY291bnRlZCBmcm9tIGxlZnQgdG8gcmlnaHQKICogKHN0YXJ0aW5nIGZyb20gMSkgdG8gb2J0YWluIHRoZSBudW1iZXIgb2YgdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJuLgogKiBUbyB1c2UgYmFja3NsYXNoIGluIHJlcGxhY2VtZW50LCBpdCBtdXN0IGJlIGRvdWJsZWQKICogKCJcXFxcIiBQSFAgc3RyaW5nKS4KICoKICogV2hlbiB3b3JraW5nIHdpdGggYSByZXBsYWNlbWVudCBwYXR0ZXJuIHdoZXJlIGEgYmFja3JlZmVyZW5jZSBpcwogKiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyIG51bWJlciAoaS5lLjogcGxhY2luZyBhIGxpdGVyYWwgbnVtYmVyCiAqIGltbWVkaWF0ZWx5IGFmdGVyIGEgbWF0Y2hlZCBwYXR0ZXJuKSwgeW91IGNhbm5vdCB1c2UgdGhlIGZhbWlsaWFyCiAqIFxcMSBub3RhdGlvbiBmb3IgeW91ciBiYWNrcmVmZXJlbmNlLgogKiBcXDExLCBmb3IgZXhhbXBsZSwgd291bGQgY29uZnVzZQogKiBwcmVnX3JlcGxhY2Ugc2luY2UgaXQgZG9lcyBub3Qga25vdyB3aGV0aGVyIHlvdQogKiB3YW50IHRoZSBcXDEgYmFja3JlZmVyZW5jZSBmb2xsb3dlZCBieSBhIGxpdGVyYWwKICogMSwgb3IgdGhlIFxcMTEgYmFja3JlZmVyZW5jZQogKiBmb2xsb3dlZCBieSBub3RoaW5nLiAgSW4gdGhpcyBjYXNlIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UKICogJHsxfTEuICBUaGlzIGNyZWF0ZXMgYW4gaXNvbGF0ZWQKICogJDEgYmFja3JlZmVyZW5jZSwgbGVhdmluZyB0aGUgMQogKiBhcyBhIGxpdGVyYWwuCiAqCiAqIFdoZW4gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgZSBtb2RpZmllciwgdGhpcyBmdW5jdGlvbiBlc2NhcGVzCiAqIHNvbWUgY2hhcmFjdGVycyAobmFtZWx5ICcsICIsCiAqIFwgYW5kIE5VTEwpIGluIHRoZSBzdHJpbmdzIHRoYXQgcmVwbGFjZSB0aGUKICogYmFja3JlZmVyZW5jZXMuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCBubyBzeW50YXggZXJyb3JzIGFyaXNlCiAqIGZyb20gYmFja3JlZmVyZW5jZSB1c2FnZSB3aXRoIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAoZS5nLgogKiAnc3RybGVuKFwnJDFcJykrc3RybGVuKCIkMiIpJykuIE1ha2Ugc3VyZSB5b3UgYXJlCiAqIGF3YXJlIG9mIFBIUCdzIHN0cmluZwogKiBzeW50YXggdG8ga25vdyBleGFjdGx5IGhvdyB0aGUgaW50ZXJwcmV0ZWQgc3RyaW5nIHdpbGwgbG9vay4KICogQHBhcmFtIHN0cmluZ3xhcnJheXxzdHJpbmdbXSAkc3ViamVjdCBUaGUgc3RyaW5nIG9yIGFuIGFycmF5IHdpdGggc3RyaW5ncyB0byBzZWFyY2ggYW5kIHJlcGxhY2UuCiAqCiAqIElmIHN1YmplY3QgaXMgYW4gYXJyYXksIHRoZW4gdGhlIHNlYXJjaCBhbmQKICogcmVwbGFjZSBpcyBwZXJmb3JtZWQgb24gZXZlcnkgZW50cnkgb2Ygc3ViamVjdCwKICogYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgYXMgd2VsbC4KICogQHBhcmFtIGludCAkbGltaXQgVGhlIG1heGltdW0gcG9zc2libGUgcmVwbGFjZW1lbnRzIGZvciBlYWNoIHBhdHRlcm4gaW4gZWFjaAogKiBzdWJqZWN0IHN0cmluZy4gRGVmYXVsdHMgdG8KICogLTEgKG5vIGxpbWl0KS4KICogQHBhcmFtIGludCAkY291bnQgSWYgc3BlY2lmaWVkLCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIG51bWJlciBvZgogKiByZXBsYWNlbWVudHMgZG9uZS4KICogQHJldHVybiBzdHJpbmd8YXJyYXl8c3RyaW5nW10gcHJlZ19yZXBsYWNlIHJldHVybnMgYW4gYXJyYXkgaWYgdGhlCiAqIHN1YmplY3QgcGFyYW1ldGVyIGlzIGFuIGFycmF5LCBvciBhIHN0cmluZwogKiBvdGhlcndpc2UuCiAqCiAqIElmIG1hdGNoZXMgYXJlIGZvdW5kLCB0aGUgbmV3IHN1YmplY3Qgd2lsbAogKiBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIHN1YmplY3Qgd2lsbCBiZQogKiByZXR1cm5lZCB1bmNoYW5nZWQuCiAqCiAqIEB0aHJvd3MgUGNyZUV4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsIGludCAmJGNvdW50ID0gbnVsbCkKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9IFxwcmVnX3JlcGxhY2UoJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJHN1YmplY3QsICRsaW1pdCwgJGNvdW50KTsKICAgIGlmIChwcmVnX2xhc3RfZXJyb3IoKSAhPT0gUFJFR19OT19FUlJPUiB8fCAkcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6Y3JlYXRlRnJvbVBocEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRkaXJfaGFuZGxlCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbiBzYWZlIGJlY2F1c2UgdGhlIHBocCBkb2N1bWVudGF0aW9uIGlzIHdyb25nCiAqLwpmdW5jdGlvbiByZWFkZGlyKCRkaXJfaGFuZGxlID0gbnVsbCkKewogICAgaWYgKCRkaXJfaGFuZGxlICE9PSBudWxsKSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkZGlyKCRkaXJfaGFuZGxlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdCA9IFxyZWFkZGlyKCk7CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqIEVuY3J5cHRzIGdpdmVuIGRhdGEgd2l0aCBnaXZlbiBtZXRob2QgYW5kIGtleSwgcmV0dXJucyBhIHJhdwogKiBvciBiYXNlNjQgZW5jb2RlZCBzdHJpbmcKICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgcGxhaW50ZXh0IG1lc3NhZ2UgZGF0YSB0byBiZSBlbmNyeXB0ZWQuCiAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgY2lwaGVyIG1ldGhvZC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVyIG1ldGhvZHMsIHVzZSBvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kcy4KICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkuCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgb3B0aW9ucyBpcyBhIGJpdHdpc2UgZGlzanVuY3Rpb24gb2YgdGhlIGZsYWdzCiAqIE9QRU5TU0xfUkFXX0RBVEEgYW5kCiAqIE9QRU5TU0xfWkVST19QQURESU5HLgogKiBAcGFyYW0gc3RyaW5nICRpdiBBIG5vbi1OVUxMIEluaXRpYWxpemF0aW9uIFZlY3Rvci4KICogQHBhcmFtIHN0cmluZyAkdGFnIFRoZSBhdXRoZW50aWNhdGlvbiB0YWcgcGFzc2VkIGJ5IHJlZmVyZW5jZSB3aGVuIHVzaW5nIEFFQUQgY2lwaGVyIG1vZGUgKEdDTSBvciBDQ00pLgogKiBAcGFyYW0gc3RyaW5nICRhYWQgQWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLgogKiBAcGFyYW0gaW50ICR0YWdfbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZy4gSXRzIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDQgYW5kIDE2IGZvciBHQ00gbW9kZS4KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgZW5jcnlwdGVkIHN0cmluZy4KICogQHRocm93cyBPcGVuc3NsRXhjZXB0aW9uCiAqCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2VuY3J5cHQoc3RyaW5nICRkYXRhLCBzdHJpbmcgJG1ldGhvZCwgc3RyaW5nICRrZXksIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkaXYgPSAiIiwgc3RyaW5nICYkdGFnID0gIiIsIHN0cmluZyAkYWFkID0gIiIsIGludCAkdGFnX2xlbmd0aCA9IDE2KTogc3RyaW5nCnsKICAgIGVycm9yX2NsZWFyX2xhc3QoKTsKICAgIC8vIFRoZSAkdGFnIHBhcmFtZXRlciBpcyBoYW5kbGVkIGluIGEgd2VpcmQgd2F5IGJ5IG9wZW5zc2xfZW5jcnlwdC4gSXQgY2Fubm90IGJlIHByb3ZpZGVkIHVubGVzcyBlbmNvZGluZyBpcyBBRUFECiAgICBpZiAoZnVuY19udW1fYXJncygpIDw9IDUpIHsKICAgICAgICAkcmVzdWx0ID0gXG9wZW5zc2xfZW5jcnlwdCgkZGF0YSwgJG1ldGhvZCwgJGtleSwgJG9wdGlvbnMsICRpdik7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBcb3BlbnNzbF9lbmNyeXB0KCRkYXRhLCAkbWV0aG9kLCAka2V5LCAkb3B0aW9ucywgJGl2LCAkdGFnLCAkYWFkLCAkdGFnX2xlbmd0aCk7CiAgICB9CiAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBPcGVuc3NsRXhjZXB0aW9uOjpjcmVhdGVGcm9tUGhwRXJyb3IoKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogVGhlIGZ1bmN0aW9uIHNvY2tldF93cml0ZSB3cml0ZXMgdG8gdGhlCiAqIHNvY2tldCBmcm9tIHRoZSBnaXZlbgogKiBidWZmZXIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc29ja2V0CiAqIEBwYXJhbSBzdHJpbmcgJGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGJlIHdyaXR0ZW4uCiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGxlbmd0aCBjYW4gc3BlY2lmeSBhbgogKiBhbHRlcm5hdGUgbGVuZ3RoIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIHNvY2tldC4gSWYgdGhpcyBsZW5ndGggaXMKICogZ3JlYXRlciB0aGFuIHRoZSBidWZmZXIgbGVuZ3RoLCBpdCBpcyBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdGhlIGxlbmd0aAogKiBvZiB0aGUgYnVmZmVyLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIHNvY2tldC4KICogVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIHNvY2tldF9sYXN0X2Vycm9yLiBUaGlzIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiBzb2NrZXRfc3RyZXJyb3IgdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIEB0aHJvd3MgU29ja2V0c0V4Y2VwdGlvbgogKgogKi8KZnVuY3Rpb24gc29ja2V0X3dyaXRlKCRzb2NrZXQsIHN0cmluZyAkYnVmZmVyLCBpbnQgJGxlbmd0aCA9IDApOiBpbnQKewogICAgZXJyb3JfY2xlYXJfbGFzdCgpOwogICAgJHJlc3VsdCA9ICRsZW5ndGggPT09IDAgPyBcc29ja2V0X3dyaXRlKCRzb2NrZXQsICRidWZmZXIpIDogXHNvY2tldF93cml0ZSgkc29ja2V0LCAkYnVmZmVyLCAkbGVuZ3RoKTsKICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgIHRocm93IFNvY2tldHNFeGNlcHRpb246OmNyZWF0ZUZyb21QaHBFcnJvcigpOwogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBUaGVDb2RpbmdNYWNoaW5lCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WyFbTGF0ZXN0IFN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS92L3N0YWJsZS5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtUb3RhbCBEb3dubG9hZHNdKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvdGhlY29kaW5nbWFjaGluZS9zYWZlL2Rvd25sb2Fkcy5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtMYXRlc3QgVW5zdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy90aGVjb2RpbmdtYWNoaW5lL3NhZmUvdi91bnN0YWJsZS5zdmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvdGhlY29kaW5nbWFjaGluZS9zYWZlKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9saWNlbnNlLnN2ZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy90aGVjb2RpbmdtYWNoaW5lL3NhZmUpClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL3RoZWNvZGluZ21hY2hpbmUvc2FmZS5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy90aGVjb2RpbmdtYWNoaW5lL3NhZmUpClshW0NvbnRpbnVvdXMgSW50ZWdyYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS90aGVjb2RpbmdtYWNoaW5lL3NhZmUvd29ya2Zsb3dzL0NvbnRpbnVvdXMlMjBJbnRlZ3JhdGlvbi9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vdGhlY29kaW5nbWFjaGluZS9zYWZlL2FjdGlvbnMpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC90aGVjb2RpbmdtYWNoaW5lL3NhZmUvYnJhbmNoL21hc3Rlci9ncmFwaC9iYWRnZS5zdmcpXShodHRwczovL2NvZGVjb3YuaW8vZ2gvdGhlY29kaW5nbWFjaGluZS9zYWZlKQoKU2FmZSBQSFAKPT09PT09PT0KCioqV29yayBpbiBwcm9ncmVzcyoqCgpBIHNldCBvZiBjb3JlIFBIUCBmdW5jdGlvbnMgcmV3cml0dGVuIHRvIHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGZhbHNlYCB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgoKIyMgVGhlIHByb2JsZW0KCk1vc3QgUEhQIGNvcmUgZnVuY3Rpb25zIHdlcmUgd3JpdHRlbiBiZWZvcmUgZXhjZXB0aW9uIGhhbmRsaW5nIHdhcyBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UuIFRoZXJlZm9yZSwgbW9zdCBQSFAgZnVuY3Rpb25zCmRvIG5vdCB0aHJvdyBleGNlcHRpb25zLiBJbnN0ZWFkLCB0aGV5IHJldHVybiBgZmFsc2VgIGluIGNhc2Ugb2YgZXJyb3IuCgpCdXQgbW9zdCBvZiB1cyBhcmUgdG9vIGxhenkgdG8gY2hlY2sgZXhwbGljaXRseSBmb3IgZXZlcnkgc2luZ2xlIHJldHVybiBvZiBldmVyeSBjb3JlIFBIUCBmdW5jdGlvbi4KCmBgYHBocAovLyBUaGlzIGNvZGUgaXMgaW5jb3JyZWN0LiBUd2ljZS4KLy8gImZpbGVfZ2V0X2NvbnRlbnRzIiBjYW4gcmV0dXJuIGZhbHNlIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0cwovLyAianNvbl9kZWNvZGUiIGNhbiByZXR1cm4gZmFsc2UgaWYgdGhlIGZpbGUgY29udGVudCBpcyBub3QgdmFsaWQgSlNPTgokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdmb29iYXIuanNvbicpOwokZm9vYmFyID0ganNvbl9kZWNvZGUoJGNvbnRlbnQpOwpgYGAKClRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhpcyBjb2RlIHdvdWxkIGJlOgoKYGBgcGhwCiRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJ2Zvb2Jhci5qc29uJyk7CmlmICgkY29udGVudCA9PT0gZmFsc2UpIHsKICAgIHRocm93IG5ldyBGaWxlTG9hZGluZ0V4Y2VwdGlvbignQ291bGQgbm90IGxvYWQgZmlsZSBmb29iYXIuanNvbicpOwp9CiRmb29iYXIgPSBqc29uX2RlY29kZSgkY29udGVudCk7CmlmIChqc29uX2xhc3RfZXJyb3IoKSAhPT0gSlNPTl9FUlJPUl9OT05FKSB7CiAgICB0aHJvdyBuZXcgRmlsZUxvYWRpbmdFeGNlcHRpb24oJ2Zvb2Jhci5qc29uIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgSlNPTjogJy5qc29uX2xhc3RfZXJyb3JfbXNnKCkpOwp9CmBgYAoKT2J2aW91c2x5LCB3aGlsZSB0aGlzIHNuaXBwZXQgaXMgY29ycmVjdCwgaXQgaXMgbGVzcyBlYXN5IHRvIHJlYWQuCgojIyBUaGUgc29sdXRpb24KCkVudGVyICp0aGVjb2RpbmdtYWNoaW5lL3NhZmUqIGFrYSBTYWZlLVBIUC4KClNhZmUtUEhQIHJlZGVjbGFyZXMgYWxsIGNvcmUgUEhQIGZ1bmN0aW9ucy4gVGhlIG5ldyBQSFAgZnVuY3Rpb25zIGFjdCBleGFjdGx5IGFzIHRoZSBvbGQgb25lcywgZXhjZXB0IHRoZXkKdGhyb3cgZXhjZXB0aW9ucyBwcm9wZXJseSB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLiBUaGUgInNhZmUiIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNvcmUgUEhQCmZ1bmN0aW9ucywgZXhjZXB0IHRoZXkgYXJlIGluIHRoZSBgU2FmZWAgbmFtZXNwYWNlLgoKYGBgcGhwCnVzZSBmdW5jdGlvbiBTYWZlXGZpbGVfZ2V0X2NvbnRlbnRzOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCi8vIFRoaXMgY29kZSBpcyBib3RoIHNhZmUgYW5kIHNpbXBsZSEKJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygnZm9vYmFyLmpzb24nKTsKJGZvb2JhciA9IGpzb25fZGVjb2RlKCRjb250ZW50KTsKYGBgCgpBbGwgUEhQIGZ1bmN0aW9ucyB0aGF0IGNhbiByZXR1cm4gYGZhbHNlYCBvbiBlcnJvciBhcmUgcGFydCBvZiBTYWZlLgpJbiBhZGRpdGlvbiwgU2FmZSBhbHNvIHByb3ZpZGUgMiAnU2FmZScgY2xhc3NlczogYFNhZmVcRGF0ZVRpbWVgIGFuZCBgU2FmZVxEYXRlVGltZUltbXV0YWJsZWAgd2hvc2UgbWV0aG9kcyB3aWxsIHRocm93IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2UuCgojIyBQSFBTdGFuIGludGVncmF0aW9uCgo+IFllYWguLi4gYnV0IEkgbXVzdCBleHBsaWNpdGx5IHRoaW5rIGFib3V0IGltcG9ydGluZyB0aGUgInNhZmUiIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uLCBmb3IgZWFjaCBhbmQgZXZlcnkgZmlsZSBvZiBteSBhcHBsaWNhdGlvbi4KPiBJJ20gc3VyZSBJIHdpbGwgZm9yZ2V0IHNvbWUgInVzZSBmdW5jdGlvbiIgc3RhdGVtZW50cyEKCkZlYXIgbm90ISB0aGVjb2RpbmdtYWNoaW5lL3NhZmUgY29tZXMgd2l0aCBhIFBIUFN0YW4gcnVsZS4KCk5ldmVyIGhlYXJkIG9mIFtQSFBTdGFuXShodHRwczovL2dpdGh1Yi5jb20vcGhwc3Rhbi9waHBzdGFuKSBiZWZvcmU/CkNoZWNrIGl0IG91dCwgaXQncyBhbiBhbWF6aW5nIGNvZGUgYW5hbHl6ZXIgZm9yIFBIUC4KClNpbXBseSBpbnN0YWxsIHRoZSBTYWZlIHJ1bGUgaW4geW91ciBQSFBTdGFuIHNldHVwIChleHBsYWluZWQgaW4gdGhlICJJbnN0YWxsYXRpb24iIHNlY3Rpb24pIGFuZCBQSFBTdGFuIHdpbGwgbGV0IHlvdSBrbm93IGVhY2ggdGltZSB5b3UgYXJlIHVzaW5nIGFuICJ1bnNhZmUiIGZ1bmN0aW9uLgoKVGhlIGNvZGUgYmVsb3cgd2lsbCB0cmlnZ2VyIHRoaXMgd2FybmluZzoKCmBgYHBocAokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdmb29iYXIuanNvbicpOwpgYGAKCj4gRnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHMgaXMgdW5zYWZlIHRvIHVzZS4gSXQgY2FuIHJldHVybiBGQUxTRSBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4gUGxlYXNlIGFkZCAndXNlIGZ1bmN0aW9uIFNhZmVcXGZpbGVfZ2V0X2NvbnRlbnRzOycgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB1c2UgdGhlIHZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlICd0aGVjb2RpbmdtYWNoaW5lL3NhZmUnIGxpYnJhcnkuCgojIyBJbnN0YWxsYXRpb24KClVzZSBjb21wb3NlciB0byBpbnN0YWxsIFNhZmUtUEhQOgoKYGBgYmFzaAokIGNvbXBvc2VyIHJlcXVpcmUgdGhlY29kaW5nbWFjaGluZS9zYWZlCmBgYAoKKkhpZ2hseSByZWNvbW1lbmRlZCo6IGluc3RhbGwgUEhQU3RhbiBhbmQgUEhQU3RhbiBleHRlbnNpb246CgpgYGBiYXNoCiQgY29tcG9zZXIgcmVxdWlyZSAtLWRldiB0aGVjb2RpbmdtYWNoaW5lL3BocHN0YW4tc2FmZS1ydWxlCmBgYAoKTm93LCBlZGl0IHlvdXIgYHBocHN0YW4ubmVvbmAgZmlsZSBhbmQgYWRkIHRoZXNlIHJ1bGVzOgoKYGBgeW1sCmluY2x1ZGVzOgogICAgLSB2ZW5kb3IvdGhlY29kaW5nbWFjaGluZS9waHBzdGFuLXNhZmUtcnVsZS9waHBzdGFuLXNhZmUtcnVsZS5uZW9uCmBgYAoKIyMgQXV0b21hdGVkIHJlZmFjdG9yaW5nCgpZb3UgaGF2ZSBhIGxhcmdlIGxlZ2FjeSBjb2RlYmFzZSBhbmQgd2FudCB0byB1c2UgIlNhZmUtUEhQIiBmdW5jdGlvbnMgdGhyb3VnaG91dCB5b3VyIHByb2plY3Q/IFBIUFN0YW4gd2lsbCBoZWxwIHlvdQpmaW5kIHRoZXNlIGZ1bmN0aW9ucyBidXQgY2hhbmdpbmcgdGhlIG5hbWVzcGFjZSBvZiB0aGUgZnVuY3Rpb25zIG9uZSBmdW5jdGlvbiBhdCBhIHRpbWUgbWlnaHQgYmUgYSB0ZWRpb3VzIHRhc2suCgpGb3J0dW5hdGVseSwgU2FmZSBjb21lcyBidW5kbGVkIHdpdGggYSAiUmVjdG9yIiBjb25maWd1cmF0aW9uIGZpbGUuIFtSZWN0b3JdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWN0b3JwaHAvcmVjdG9yKSBpcyBhIGNvbW1hbmQtbGluZQp0b29sIHRoYXQgcGVyZm9ybXMgaW5zdGFudCByZWZhY3RvcmluZyBvZiB5b3VyIGFwcGxpY2F0aW9uLgoKUnVuCgpgYGBiYXNoCiQgY29tcG9zZXIgcmVxdWlyZSAtLWRldiByZWN0b3IvcmVjdG9yOl4wLjcKYGBgCgp0byBpbnN0YWxsIGByZWN0b3IvcmVjdG9yYC4KClJ1bgoKYGBgYmFzaAp2ZW5kb3IvYmluL3JlY3RvciBwcm9jZXNzIHNyYy8gLS1jb25maWcgdmVuZG9yL3RoZWNvZGluZ21hY2hpbmUvc2FmZS9yZWN0b3ItbWlncmF0ZS0wLjcucGhwCmBgYAoKdG8gcnVuIGByZWN0b3IvcmVjdG9yYC4KCipOb3RlOiogZG8gbm90IGZvcmdldCB0byByZXBsYWNlICJzcmMvIiB3aXRoIHRoZSBwYXRoIHRvIHlvdXIgc291cmNlIGRpcmVjdG9yeS4KCioqSW1wb3J0YW50OioqIHRoZSByZWZhY3RvcmluZyBvbmx5IHBlcmZvcm1zIGEgImR1bWIiIHJlcGxhY2VtZW50IG9mIGZ1bmN0aW9ucy4gSXQgd2lsbCBub3QgbW9kaWZ5IHRoZSB3YXkKImZhbHNlIiByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkLiBTbyBpZiB5b3VyIGNvZGUgd2FzIGFscmVhZHkgcGVyZm9ybWluZyBlcnJvciBoYW5kbGluZywgeW91IHdpbGwgaGF2ZSB0byBkZWFsCndpdGggaXQgbWFudWFsbHkuCgpFc3BlY2lhbGx5LCB5b3Ugc2hvdWxkIGxvb2sgZm9yIGVycm9yIGhhbmRsaW5nIHRoYXQgd2FzIGFscmVhZHkgcGVyZm9ybWVkLCBsaWtlOgoKYGBgcGhwCmlmICghbWtkaXIoJGRpclBhdGgpKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKClRoaXMgY29kZSB3aWxsIGJlIHJlZmFjdG9yZWQgYnkgUmVjdG9yIHRvOgoKYGBgcGhwCmlmICghXFNhZmVcbWtkaXIoJGRpclBhdGgpKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKCllvdSBzaG91bGQgdGhlbiAobWFudWFsbHkpIHJlZmFjdG9yIGl0IHRvOgoKYGBgcGhwCnRyeSB7CiAgICBcU2FmZVxta2RpcigkZGlyUGF0aCkpOwp9IGNhdGNoIChcU2FmZVxGaWxlc3lzdGVtRXhjZXB0aW9uICRlKSB7CiAgICAvLyBEbyBzb21ldGhpbmcgb24gZXJyb3IKfQpgYGAKCiMjIFBlcmZvcm1hbmNlIGltcGFjdAoKU2FmZSBpcyBsb2FkaW5nIDEwMDArIGZ1bmN0aW9ucyBmcm9tIH44NSBmaWxlcyBvbiBlYWNoIHJlcXVlc3QuIFlldCwgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGxvYWRpbmcgaXMgcXVpdGUgbG93LgoKSW4gY2FzZSB5b3Ugd29ycnksIHVzaW5nIFNhZmUgd2lsbCAiY29zdCIgeW91IH43MDDCtXMgb24gZWFjaCByZXF1ZXN0LiBUaGUgW3BlcmZvcm1hbmNlIHNlY3Rpb25dKHBlcmZvcm1hbmNlL1JFQURNRS5tZCkKY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHdheSB3ZSB0ZXN0ZWQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiBTYWZlLgoKIyMgTGVhcm4gbW9yZQoKUmVhZCBbdGhlIHJlbGVhc2UgYXJ0aWNsZSBvbiBUaGVDb2RpbmdNYWNoaW5lJ3MgYmxvZ10oaHR0cHM6Ly90aGVjb2RpbmdtYWNoaW5lLmlvL2ludHJvZHVjaW5nLXNhZmUtcGhwKSBpZiB5b3Ugd2FudCB0bwpsZWFybiBtb3JlIGFib3V0IHdoYXQgdHJpZ2dlcmVkIHRoZSBkZXZlbG9wbWVudCBvZiBTYWZlLVBIUC4KCiMjIENvbnRyaWJ1dGluZwoKVGhlIGZpbGVzIHRoYXQgY29udGFpbiBhbGwgdGhlIGZ1bmN0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSB0aGUgUEhQIGRvYy4KUmVhZCB0aGUgW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKSBmaWxlIHRvIGxlYXJuIGhvdyB0byByZWdlbmVyYXRlIHRoZXNlIGZpbGVzIGFuZCB0byBjb250cmlidXRlIHRvIHRoaXMgbGlicmFyeS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/thecodingmachine/safe/rector-migrate-0.7.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKdXNlIFJlY3RvclxSZW5hbWluZ1xSZWN0b3JcRnVuY0NhbGxcUmVuYW1lRnVuY3Rpb25SZWN0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxEZXBlbmRlbmN5SW5qZWN0aW9uXExvYWRlclxDb25maWd1cmF0b3JcQ29udGFpbmVyQ29uZmlndXJhdG9yOwoKIyBUaGlzIGZpbGUgY29uZmlndXJlcyByZWN0b3IvcmVjdG9yOn4wLjcuMCB0byByZXBsYWNlIGFsbCBQSFAgZnVuY3Rpb25zIHdpdGggdGhlaXIgZXF1aXZhbGVudCAic2FmZSIgZnVuY3Rpb25zCnJldHVybiBzdGF0aWMgZnVuY3Rpb24gKENvbnRhaW5lckNvbmZpZ3VyYXRvciAkY29udGFpbmVyQ29uZmlndXJhdG9yKTogdm9pZCB7CiAgICAkc2VydmljZXMgPSAkY29udGFpbmVyQ29uZmlndXJhdG9yLT5zZXJ2aWNlcygpOwoKICAgICRzZXJ2aWNlcy0+c2V0KFJlbmFtZUZ1bmN0aW9uUmVjdG9yOjpjbGFzcykKICAgICAgICAtPmNhbGwoJ2NvbmZpZ3VyZScsIFtbIFJlbmFtZUZ1bmN0aW9uUmVjdG9yOjpPTERfRlVOQ1RJT05fVE9fTkVXX0ZVTkNUSU9OID0+IFsKICAgICAgICAgICAgJ2FwYWNoZV9nZXRlbnYnID0+ICdTYWZlXGFwYWNoZV9nZXRlbnYnLAogICAgICAgICAgICAnYXBhY2hlX2dldF92ZXJzaW9uJyA9PiAnU2FmZVxhcGFjaGVfZ2V0X3ZlcnNpb24nLAogICAgICAgICAgICAnYXBhY2hlX3JlcXVlc3RfaGVhZGVycycgPT4gJ1NhZmVcYXBhY2hlX3JlcXVlc3RfaGVhZGVycycsCiAgICAgICAgICAgICdhcGFjaGVfcmVzZXRfdGltZW91dCcgPT4gJ1NhZmVcYXBhY2hlX3Jlc2V0X3RpbWVvdXQnLAogICAgICAgICAgICAnYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMnID0+ICdTYWZlXGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzJywKICAgICAgICAgICAgJ2FwYWNoZV9zZXRlbnYnID0+ICdTYWZlXGFwYWNoZV9zZXRlbnYnLAogICAgICAgICAgICAnYXBjdV9jYWNoZV9pbmZvJyA9PiAnU2FmZVxhcGN1X2NhY2hlX2luZm8nLAogICAgICAgICAgICAnYXBjdV9jYXMnID0+ICdTYWZlXGFwY3VfY2FzJywKICAgICAgICAgICAgJ2FwY3VfZGVjJyA9PiAnU2FmZVxhcGN1X2RlYycsCiAgICAgICAgICAgICdhcGN1X2ZldGNoJyA9PiAnU2FmZVxhcGN1X2ZldGNoJywKICAgICAgICAgICAgJ2FwY3VfaW5jJyA9PiAnU2FmZVxhcGN1X2luYycsCiAgICAgICAgICAgICdhcGN1X3NtYV9pbmZvJyA9PiAnU2FmZVxhcGN1X3NtYV9pbmZvJywKICAgICAgICAgICAgJ2FwY19mZXRjaCcgPT4gJ1NhZmVcYXBjX2ZldGNoJywKICAgICAgICAgICAgJ2FycmF5X2NvbWJpbmUnID0+ICdTYWZlXGFycmF5X2NvbWJpbmUnLAogICAgICAgICAgICAnYXJyYXlfZmxpcCcgPT4gJ1NhZmVcYXJyYXlfZmxpcCcsCiAgICAgICAgICAgICdhcnJheV9yZXBsYWNlJyA9PiAnU2FmZVxhcnJheV9yZXBsYWNlJywKICAgICAgICAgICAgJ2FycmF5X3JlcGxhY2VfcmVjdXJzaXZlJyA9PiAnU2FmZVxhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZScsCiAgICAgICAgICAgICdhcnJheV93YWxrX3JlY3Vyc2l2ZScgPT4gJ1NhZmVcYXJyYXlfd2Fsa19yZWN1cnNpdmUnLAogICAgICAgICAgICAnYXJzb3J0JyA9PiAnU2FmZVxhcnNvcnQnLAogICAgICAgICAgICAnYXNvcnQnID0+ICdTYWZlXGFzb3J0JywKICAgICAgICAgICAgJ2Jhc2U2NF9kZWNvZGUnID0+ICdTYWZlXGJhc2U2NF9kZWNvZGUnLAogICAgICAgICAgICAnYnpjbG9zZScgPT4gJ1NhZmVcYnpjbG9zZScsCiAgICAgICAgICAgICdiemZsdXNoJyA9PiAnU2FmZVxiemZsdXNoJywKICAgICAgICAgICAgJ2J6cmVhZCcgPT4gJ1NhZmVcYnpyZWFkJywKICAgICAgICAgICAgJ2J6d3JpdGUnID0+ICdTYWZlXGJ6d3JpdGUnLAogICAgICAgICAgICAnY2hkaXInID0+ICdTYWZlXGNoZGlyJywKICAgICAgICAgICAgJ2NoZ3JwJyA9PiAnU2FmZVxjaGdycCcsCiAgICAgICAgICAgICdjaG1vZCcgPT4gJ1NhZmVcY2htb2QnLAogICAgICAgICAgICAnY2hvd24nID0+ICdTYWZlXGNob3duJywKICAgICAgICAgICAgJ2Nocm9vdCcgPT4gJ1NhZmVcY2hyb290JywKICAgICAgICAgICAgJ2NsYXNzX2FsaWFzJyA9PiAnU2FmZVxjbGFzc19hbGlhcycsCiAgICAgICAgICAgICdjbGFzc19pbXBsZW1lbnRzJyA9PiAnU2FmZVxjbGFzc19pbXBsZW1lbnRzJywKICAgICAgICAgICAgJ2NsYXNzX3BhcmVudHMnID0+ICdTYWZlXGNsYXNzX3BhcmVudHMnLAogICAgICAgICAgICAnY2xhc3NfdXNlcycgPT4gJ1NhZmVcY2xhc3NfdXNlcycsCiAgICAgICAgICAgICdjbGlfc2V0X3Byb2Nlc3NfdGl0bGUnID0+ICdTYWZlXGNsaV9zZXRfcHJvY2Vzc190aXRsZScsCiAgICAgICAgICAgICdjbG9zZWxvZycgPT4gJ1NhZmVcY2xvc2Vsb2cnLAogICAgICAgICAgICAnY29tX2V2ZW50X3NpbmsnID0+ICdTYWZlXGNvbV9ldmVudF9zaW5rJywKICAgICAgICAgICAgJ2NvbV9sb2FkX3R5cGVsaWInID0+ICdTYWZlXGNvbV9sb2FkX3R5cGVsaWInLAogICAgICAgICAgICAnY29tX3ByaW50X3R5cGVpbmZvJyA9PiAnU2FmZVxjb21fcHJpbnRfdHlwZWluZm8nLAogICAgICAgICAgICAnY29udmVydF91dWRlY29kZScgPT4gJ1NhZmVcY29udmVydF91dWRlY29kZScsCiAgICAgICAgICAgICdjb252ZXJ0X3V1ZW5jb2RlJyA9PiAnU2FmZVxjb252ZXJ0X3V1ZW5jb2RlJywKICAgICAgICAgICAgJ2NvcHknID0+ICdTYWZlXGNvcHknLAogICAgICAgICAgICAnY3JlYXRlX2Z1bmN0aW9uJyA9PiAnU2FmZVxjcmVhdGVfZnVuY3Rpb24nLAogICAgICAgICAgICAnY3VicmlkX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxjdWJyaWRfZnJlZV9yZXN1bHQnLAogICAgICAgICAgICAnY3VicmlkX2dldF9jaGFyc2V0JyA9PiAnU2FmZVxjdWJyaWRfZ2V0X2NoYXJzZXQnLAogICAgICAgICAgICAnY3VicmlkX2dldF9jbGllbnRfaW5mbycgPT4gJ1NhZmVcY3VicmlkX2dldF9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdjdWJyaWRfZ2V0X2RiX3BhcmFtZXRlcicgPT4gJ1NhZmVcY3VicmlkX2dldF9kYl9wYXJhbWV0ZXInLAogICAgICAgICAgICAnY3VicmlkX2dldF9zZXJ2ZXJfaW5mbycgPT4gJ1NhZmVcY3VicmlkX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdjdWJyaWRfaW5zZXJ0X2lkJyA9PiAnU2FmZVxjdWJyaWRfaW5zZXJ0X2lkJywKICAgICAgICAgICAgJ2N1YnJpZF9sb2IyX25ldycgPT4gJ1NhZmVcY3VicmlkX2xvYjJfbmV3JywKICAgICAgICAgICAgJ2N1YnJpZF9sb2IyX3NpemUnID0+ICdTYWZlXGN1YnJpZF9sb2IyX3NpemUnLAogICAgICAgICAgICAnY3VicmlkX2xvYjJfc2l6ZTY0JyA9PiAnU2FmZVxjdWJyaWRfbG9iMl9zaXplNjQnLAogICAgICAgICAgICAnY3VicmlkX2xvYjJfdGVsbCcgPT4gJ1NhZmVcY3VicmlkX2xvYjJfdGVsbCcsCiAgICAgICAgICAgICdjdWJyaWRfbG9iMl90ZWxsNjQnID0+ICdTYWZlXGN1YnJpZF9sb2IyX3RlbGw2NCcsCiAgICAgICAgICAgICdjdWJyaWRfc2V0X2RiX3BhcmFtZXRlcicgPT4gJ1NhZmVcY3VicmlkX3NldF9kYl9wYXJhbWV0ZXInLAogICAgICAgICAgICAnY3VybF9lc2NhcGUnID0+ICdTYWZlXGN1cmxfZXNjYXBlJywKICAgICAgICAgICAgJ2N1cmxfZXhlYycgPT4gJ1NhZmVcY3VybF9leGVjJywKICAgICAgICAgICAgJ2N1cmxfZ2V0aW5mbycgPT4gJ1NhZmVcY3VybF9nZXRpbmZvJywKICAgICAgICAgICAgJ2N1cmxfaW5pdCcgPT4gJ1NhZmVcY3VybF9pbml0JywKICAgICAgICAgICAgJ2N1cmxfbXVsdGlfZXJybm8nID0+ICdTYWZlXGN1cmxfbXVsdGlfZXJybm8nLAogICAgICAgICAgICAnY3VybF9tdWx0aV9pbmZvX3JlYWQnID0+ICdTYWZlXGN1cmxfbXVsdGlfaW5mb19yZWFkJywKICAgICAgICAgICAgJ2N1cmxfbXVsdGlfaW5pdCcgPT4gJ1NhZmVcY3VybF9tdWx0aV9pbml0JywKICAgICAgICAgICAgJ2N1cmxfc2V0b3B0JyA9PiAnU2FmZVxjdXJsX3NldG9wdCcsCiAgICAgICAgICAgICdjdXJsX3NoYXJlX2Vycm5vJyA9PiAnU2FmZVxjdXJsX3NoYXJlX2Vycm5vJywKICAgICAgICAgICAgJ2N1cmxfc2hhcmVfc2V0b3B0JyA9PiAnU2FmZVxjdXJsX3NoYXJlX3NldG9wdCcsCiAgICAgICAgICAgICdjdXJsX3VuZXNjYXBlJyA9PiAnU2FmZVxjdXJsX3VuZXNjYXBlJywKICAgICAgICAgICAgJ2RhdGUnID0+ICdTYWZlXGRhdGUnLAogICAgICAgICAgICAnZGF0ZV9wYXJzZScgPT4gJ1NhZmVcZGF0ZV9wYXJzZScsCiAgICAgICAgICAgICdkYXRlX3BhcnNlX2Zyb21fZm9ybWF0JyA9PiAnU2FmZVxkYXRlX3BhcnNlX2Zyb21fZm9ybWF0JywKICAgICAgICAgICAgJ2RhdGVfc3VucmlzZScgPT4gJ1NhZmVcZGF0ZV9zdW5yaXNlJywKICAgICAgICAgICAgJ2RhdGVfc3Vuc2V0JyA9PiAnU2FmZVxkYXRlX3N1bnNldCcsCiAgICAgICAgICAgICdkYXRlX3N1bl9pbmZvJyA9PiAnU2FmZVxkYXRlX3N1bl9pbmZvJywKICAgICAgICAgICAgJ2RiMl9hdXRvY29tbWl0JyA9PiAnU2FmZVxkYjJfYXV0b2NvbW1pdCcsCiAgICAgICAgICAgICdkYjJfYmluZF9wYXJhbScgPT4gJ1NhZmVcZGIyX2JpbmRfcGFyYW0nLAogICAgICAgICAgICAnZGIyX2NsaWVudF9pbmZvJyA9PiAnU2FmZVxkYjJfY2xpZW50X2luZm8nLAogICAgICAgICAgICAnZGIyX2Nsb3NlJyA9PiAnU2FmZVxkYjJfY2xvc2UnLAogICAgICAgICAgICAnZGIyX2NvbW1pdCcgPT4gJ1NhZmVcZGIyX2NvbW1pdCcsCiAgICAgICAgICAgICdkYjJfZXhlY3V0ZScgPT4gJ1NhZmVcZGIyX2V4ZWN1dGUnLAogICAgICAgICAgICAnZGIyX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxkYjJfZnJlZV9yZXN1bHQnLAogICAgICAgICAgICAnZGIyX2ZyZWVfc3RtdCcgPT4gJ1NhZmVcZGIyX2ZyZWVfc3RtdCcsCiAgICAgICAgICAgICdkYjJfZ2V0X29wdGlvbicgPT4gJ1NhZmVcZGIyX2dldF9vcHRpb24nLAogICAgICAgICAgICAnZGIyX3BjbG9zZScgPT4gJ1NhZmVcZGIyX3BjbG9zZScsCiAgICAgICAgICAgICdkYjJfcm9sbGJhY2snID0+ICdTYWZlXGRiMl9yb2xsYmFjaycsCiAgICAgICAgICAgICdkYjJfc2VydmVyX2luZm8nID0+ICdTYWZlXGRiMl9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdkYjJfc2V0X29wdGlvbicgPT4gJ1NhZmVcZGIyX3NldF9vcHRpb24nLAogICAgICAgICAgICAnZGVmaW5lJyA9PiAnU2FmZVxkZWZpbmUnLAogICAgICAgICAgICAnZGVmbGF0ZV9hZGQnID0+ICdTYWZlXGRlZmxhdGVfYWRkJywKICAgICAgICAgICAgJ2RlZmxhdGVfaW5pdCcgPT4gJ1NhZmVcZGVmbGF0ZV9pbml0JywKICAgICAgICAgICAgJ2Rpc2tfZnJlZV9zcGFjZScgPT4gJ1NhZmVcZGlza19mcmVlX3NwYWNlJywKICAgICAgICAgICAgJ2Rpc2tfdG90YWxfc3BhY2UnID0+ICdTYWZlXGRpc2tfdG90YWxfc3BhY2UnLAogICAgICAgICAgICAnZGwnID0+ICdTYWZlXGRsJywKICAgICAgICAgICAgJ2Ruc19nZXRfcmVjb3JkJyA9PiAnU2FmZVxkbnNfZ2V0X3JlY29yZCcsCiAgICAgICAgICAgICdlaW9fYnVzeScgPT4gJ1NhZmVcZWlvX2J1c3knLAogICAgICAgICAgICAnZWlvX2NobW9kJyA9PiAnU2FmZVxlaW9fY2htb2QnLAogICAgICAgICAgICAnZWlvX2Nob3duJyA9PiAnU2FmZVxlaW9fY2hvd24nLAogICAgICAgICAgICAnZWlvX2Nsb3NlJyA9PiAnU2FmZVxlaW9fY2xvc2UnLAogICAgICAgICAgICAnZWlvX2N1c3RvbScgPT4gJ1NhZmVcZWlvX2N1c3RvbScsCiAgICAgICAgICAgICdlaW9fZHVwMicgPT4gJ1NhZmVcZWlvX2R1cDInLAogICAgICAgICAgICAnZWlvX2V2ZW50X2xvb3AnID0+ICdTYWZlXGVpb19ldmVudF9sb29wJywKICAgICAgICAgICAgJ2Vpb19mYWxsb2NhdGUnID0+ICdTYWZlXGVpb19mYWxsb2NhdGUnLAogICAgICAgICAgICAnZWlvX2ZjaG1vZCcgPT4gJ1NhZmVcZWlvX2ZjaG1vZCcsCiAgICAgICAgICAgICdlaW9fZmRhdGFzeW5jJyA9PiAnU2FmZVxlaW9fZmRhdGFzeW5jJywKICAgICAgICAgICAgJ2Vpb19mc3RhdCcgPT4gJ1NhZmVcZWlvX2ZzdGF0JywKICAgICAgICAgICAgJ2Vpb19mc3RhdHZmcycgPT4gJ1NhZmVcZWlvX2ZzdGF0dmZzJywKICAgICAgICAgICAgJ2Vpb19mc3luYycgPT4gJ1NhZmVcZWlvX2ZzeW5jJywKICAgICAgICAgICAgJ2Vpb19mdHJ1bmNhdGUnID0+ICdTYWZlXGVpb19mdHJ1bmNhdGUnLAogICAgICAgICAgICAnZWlvX2Z1dGltZScgPT4gJ1NhZmVcZWlvX2Z1dGltZScsCiAgICAgICAgICAgICdlaW9fZ3JwJyA9PiAnU2FmZVxlaW9fZ3JwJywKICAgICAgICAgICAgJ2Vpb19sc3RhdCcgPT4gJ1NhZmVcZWlvX2xzdGF0JywKICAgICAgICAgICAgJ2Vpb19ta2RpcicgPT4gJ1NhZmVcZWlvX21rZGlyJywKICAgICAgICAgICAgJ2Vpb19ta25vZCcgPT4gJ1NhZmVcZWlvX21rbm9kJywKICAgICAgICAgICAgJ2Vpb19ub3AnID0+ICdTYWZlXGVpb19ub3AnLAogICAgICAgICAgICAnZWlvX3JlYWRhaGVhZCcgPT4gJ1NhZmVcZWlvX3JlYWRhaGVhZCcsCiAgICAgICAgICAgICdlaW9fcmVhZGRpcicgPT4gJ1NhZmVcZWlvX3JlYWRkaXInLAogICAgICAgICAgICAnZWlvX3JlYWRsaW5rJyA9PiAnU2FmZVxlaW9fcmVhZGxpbmsnLAogICAgICAgICAgICAnZWlvX3JlbmFtZScgPT4gJ1NhZmVcZWlvX3JlbmFtZScsCiAgICAgICAgICAgICdlaW9fcm1kaXInID0+ICdTYWZlXGVpb19ybWRpcicsCiAgICAgICAgICAgICdlaW9fc2VlaycgPT4gJ1NhZmVcZWlvX3NlZWsnLAogICAgICAgICAgICAnZWlvX3NlbmRmaWxlJyA9PiAnU2FmZVxlaW9fc2VuZGZpbGUnLAogICAgICAgICAgICAnZWlvX3N0YXQnID0+ICdTYWZlXGVpb19zdGF0JywKICAgICAgICAgICAgJ2Vpb19zdGF0dmZzJyA9PiAnU2FmZVxlaW9fc3RhdHZmcycsCiAgICAgICAgICAgICdlaW9fc3ltbGluaycgPT4gJ1NhZmVcZWlvX3N5bWxpbmsnLAogICAgICAgICAgICAnZWlvX3N5bmMnID0+ICdTYWZlXGVpb19zeW5jJywKICAgICAgICAgICAgJ2Vpb19zeW5jZnMnID0+ICdTYWZlXGVpb19zeW5jZnMnLAogICAgICAgICAgICAnZWlvX3N5bmNfZmlsZV9yYW5nZScgPT4gJ1NhZmVcZWlvX3N5bmNfZmlsZV9yYW5nZScsCiAgICAgICAgICAgICdlaW9fdHJ1bmNhdGUnID0+ICdTYWZlXGVpb190cnVuY2F0ZScsCiAgICAgICAgICAgICdlaW9fdW5saW5rJyA9PiAnU2FmZVxlaW9fdW5saW5rJywKICAgICAgICAgICAgJ2Vpb191dGltZScgPT4gJ1NhZmVcZWlvX3V0aW1lJywKICAgICAgICAgICAgJ2Vpb193cml0ZScgPT4gJ1NhZmVcZWlvX3dyaXRlJywKICAgICAgICAgICAgJ2Vycm9yX2xvZycgPT4gJ1NhZmVcZXJyb3JfbG9nJywKICAgICAgICAgICAgJ2Zhc3RjZ2lfZmluaXNoX3JlcXVlc3QnID0+ICdTYWZlXGZhc3RjZ2lfZmluaXNoX3JlcXVlc3QnLAogICAgICAgICAgICAnZmJpcmRfYmxvYl9jYW5jZWwnID0+ICdTYWZlXGZiaXJkX2Jsb2JfY2FuY2VsJywKICAgICAgICAgICAgJ2ZjbG9zZScgPT4gJ1NhZmVcZmNsb3NlJywKICAgICAgICAgICAgJ2ZmbHVzaCcgPT4gJ1NhZmVcZmZsdXNoJywKICAgICAgICAgICAgJ2ZpbGUnID0+ICdTYWZlXGZpbGUnLAogICAgICAgICAgICAnZmlsZWF0aW1lJyA9PiAnU2FmZVxmaWxlYXRpbWUnLAogICAgICAgICAgICAnZmlsZWN0aW1lJyA9PiAnU2FmZVxmaWxlY3RpbWUnLAogICAgICAgICAgICAnZmlsZWlub2RlJyA9PiAnU2FmZVxmaWxlaW5vZGUnLAogICAgICAgICAgICAnZmlsZW10aW1lJyA9PiAnU2FmZVxmaWxlbXRpbWUnLAogICAgICAgICAgICAnZmlsZW93bmVyJyA9PiAnU2FmZVxmaWxlb3duZXInLAogICAgICAgICAgICAnZmlsZXNpemUnID0+ICdTYWZlXGZpbGVzaXplJywKICAgICAgICAgICAgJ2ZpbGVfZ2V0X2NvbnRlbnRzJyA9PiAnU2FmZVxmaWxlX2dldF9jb250ZW50cycsCiAgICAgICAgICAgICdmaWxlX3B1dF9jb250ZW50cycgPT4gJ1NhZmVcZmlsZV9wdXRfY29udGVudHMnLAogICAgICAgICAgICAnZmlsdGVyX2lucHV0X2FycmF5JyA9PiAnU2FmZVxmaWx0ZXJfaW5wdXRfYXJyYXknLAogICAgICAgICAgICAnZmlsdGVyX3Zhcl9hcnJheScgPT4gJ1NhZmVcZmlsdGVyX3Zhcl9hcnJheScsCiAgICAgICAgICAgICdmaW5mb19jbG9zZScgPT4gJ1NhZmVcZmluZm9fY2xvc2UnLAogICAgICAgICAgICAnZmluZm9fb3BlbicgPT4gJ1NhZmVcZmluZm9fb3BlbicsCiAgICAgICAgICAgICdmbG9jaycgPT4gJ1NhZmVcZmxvY2snLAogICAgICAgICAgICAnZm9wZW4nID0+ICdTYWZlXGZvcGVuJywKICAgICAgICAgICAgJ2ZwdXRjc3YnID0+ICdTYWZlXGZwdXRjc3YnLAogICAgICAgICAgICAnZnJlYWQnID0+ICdTYWZlXGZyZWFkJywKICAgICAgICAgICAgJ2Zzb2Nrb3BlbicgPT4gJ1NhZmVcZnNvY2tvcGVuJywKICAgICAgICAgICAgJ2Z0cF9hbGxvYycgPT4gJ1NhZmVcZnRwX2FsbG9jJywKICAgICAgICAgICAgJ2Z0cF9hcHBlbmQnID0+ICdTYWZlXGZ0cF9hcHBlbmQnLAogICAgICAgICAgICAnZnRwX2NkdXAnID0+ICdTYWZlXGZ0cF9jZHVwJywKICAgICAgICAgICAgJ2Z0cF9jaGRpcicgPT4gJ1NhZmVcZnRwX2NoZGlyJywKICAgICAgICAgICAgJ2Z0cF9jaG1vZCcgPT4gJ1NhZmVcZnRwX2NobW9kJywKICAgICAgICAgICAgJ2Z0cF9jbG9zZScgPT4gJ1NhZmVcZnRwX2Nsb3NlJywKICAgICAgICAgICAgJ2Z0cF9jb25uZWN0JyA9PiAnU2FmZVxmdHBfY29ubmVjdCcsCiAgICAgICAgICAgICdmdHBfZGVsZXRlJyA9PiAnU2FmZVxmdHBfZGVsZXRlJywKICAgICAgICAgICAgJ2Z0cF9mZ2V0JyA9PiAnU2FmZVxmdHBfZmdldCcsCiAgICAgICAgICAgICdmdHBfZnB1dCcgPT4gJ1NhZmVcZnRwX2ZwdXQnLAogICAgICAgICAgICAnZnRwX2dldCcgPT4gJ1NhZmVcZnRwX2dldCcsCiAgICAgICAgICAgICdmdHBfbG9naW4nID0+ICdTYWZlXGZ0cF9sb2dpbicsCiAgICAgICAgICAgICdmdHBfbWtkaXInID0+ICdTYWZlXGZ0cF9ta2RpcicsCiAgICAgICAgICAgICdmdHBfbWxzZCcgPT4gJ1NhZmVcZnRwX21sc2QnLAogICAgICAgICAgICAnZnRwX25saXN0JyA9PiAnU2FmZVxmdHBfbmxpc3QnLAogICAgICAgICAgICAnZnRwX3Bhc3YnID0+ICdTYWZlXGZ0cF9wYXN2JywKICAgICAgICAgICAgJ2Z0cF9wdXQnID0+ICdTYWZlXGZ0cF9wdXQnLAogICAgICAgICAgICAnZnRwX3B3ZCcgPT4gJ1NhZmVcZnRwX3B3ZCcsCiAgICAgICAgICAgICdmdHBfcmVuYW1lJyA9PiAnU2FmZVxmdHBfcmVuYW1lJywKICAgICAgICAgICAgJ2Z0cF9ybWRpcicgPT4gJ1NhZmVcZnRwX3JtZGlyJywKICAgICAgICAgICAgJ2Z0cF9zaXRlJyA9PiAnU2FmZVxmdHBfc2l0ZScsCiAgICAgICAgICAgICdmdHBfc3NsX2Nvbm5lY3QnID0+ICdTYWZlXGZ0cF9zc2xfY29ubmVjdCcsCiAgICAgICAgICAgICdmdHBfc3lzdHlwZScgPT4gJ1NhZmVcZnRwX3N5c3R5cGUnLAogICAgICAgICAgICAnZnRydW5jYXRlJyA9PiAnU2FmZVxmdHJ1bmNhdGUnLAogICAgICAgICAgICAnZndyaXRlJyA9PiAnU2FmZVxmd3JpdGUnLAogICAgICAgICAgICAnZ2V0YWxsaGVhZGVycycgPT4gJ1NhZmVcZ2V0YWxsaGVhZGVycycsCiAgICAgICAgICAgICdnZXRjd2QnID0+ICdTYWZlXGdldGN3ZCcsCiAgICAgICAgICAgICdnZXRob3N0bmFtZScgPT4gJ1NhZmVcZ2V0aG9zdG5hbWUnLAogICAgICAgICAgICAnZ2V0aW1hZ2VzaXplJyA9PiAnU2FmZVxnZXRpbWFnZXNpemUnLAogICAgICAgICAgICAnZ2V0bGFzdG1vZCcgPT4gJ1NhZmVcZ2V0bGFzdG1vZCcsCiAgICAgICAgICAgICdnZXRteWdpZCcgPT4gJ1NhZmVcZ2V0bXlnaWQnLAogICAgICAgICAgICAnZ2V0bXlpbm9kZScgPT4gJ1NhZmVcZ2V0bXlpbm9kZScsCiAgICAgICAgICAgICdnZXRteXBpZCcgPT4gJ1NhZmVcZ2V0bXlwaWQnLAogICAgICAgICAgICAnZ2V0bXl1aWQnID0+ICdTYWZlXGdldG15dWlkJywKICAgICAgICAgICAgJ2dldG9wdCcgPT4gJ1NhZmVcZ2V0b3B0JywKICAgICAgICAgICAgJ2dldHByb3RvYnluYW1lJyA9PiAnU2FmZVxnZXRwcm90b2J5bmFtZScsCiAgICAgICAgICAgICdnZXRwcm90b2J5bnVtYmVyJyA9PiAnU2FmZVxnZXRwcm90b2J5bnVtYmVyJywKICAgICAgICAgICAgJ2dldF9oZWFkZXJzJyA9PiAnU2FmZVxnZXRfaGVhZGVycycsCiAgICAgICAgICAgICdnbG9iJyA9PiAnU2FmZVxnbG9iJywKICAgICAgICAgICAgJ2dtZGF0ZScgPT4gJ1NhZmVcZ21kYXRlJywKICAgICAgICAgICAgJ2dtcF9iaW5vbWlhbCcgPT4gJ1NhZmVcZ21wX2Jpbm9taWFsJywKICAgICAgICAgICAgJ2dtcF9leHBvcnQnID0+ICdTYWZlXGdtcF9leHBvcnQnLAogICAgICAgICAgICAnZ21wX2ltcG9ydCcgPT4gJ1NhZmVcZ21wX2ltcG9ydCcsCiAgICAgICAgICAgICdnbXBfcmFuZG9tX3NlZWQnID0+ICdTYWZlXGdtcF9yYW5kb21fc2VlZCcsCiAgICAgICAgICAgICdnbnVwZ19hZGRkZWNyeXB0a2V5JyA9PiAnU2FmZVxnbnVwZ19hZGRkZWNyeXB0a2V5JywKICAgICAgICAgICAgJ2dudXBnX2FkZGVuY3J5cHRrZXknID0+ICdTYWZlXGdudXBnX2FkZGVuY3J5cHRrZXknLAogICAgICAgICAgICAnZ251cGdfYWRkc2lnbmtleScgPT4gJ1NhZmVcZ251cGdfYWRkc2lnbmtleScsCiAgICAgICAgICAgICdnbnVwZ19jbGVhcmRlY3J5cHRrZXlzJyA9PiAnU2FmZVxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzJywKICAgICAgICAgICAgJ2dudXBnX2NsZWFyZW5jcnlwdGtleXMnID0+ICdTYWZlXGdudXBnX2NsZWFyZW5jcnlwdGtleXMnLAogICAgICAgICAgICAnZ251cGdfY2xlYXJzaWdua2V5cycgPT4gJ1NhZmVcZ251cGdfY2xlYXJzaWdua2V5cycsCiAgICAgICAgICAgICdnbnVwZ19zZXRhcm1vcicgPT4gJ1NhZmVcZ251cGdfc2V0YXJtb3InLAogICAgICAgICAgICAnZ251cGdfc2V0c2lnbm1vZGUnID0+ICdTYWZlXGdudXBnX3NldHNpZ25tb2RlJywKICAgICAgICAgICAgJ2d6Y2xvc2UnID0+ICdTYWZlXGd6Y2xvc2UnLAogICAgICAgICAgICAnZ3pjb21wcmVzcycgPT4gJ1NhZmVcZ3pjb21wcmVzcycsCiAgICAgICAgICAgICdnemRlY29kZScgPT4gJ1NhZmVcZ3pkZWNvZGUnLAogICAgICAgICAgICAnZ3pkZWZsYXRlJyA9PiAnU2FmZVxnemRlZmxhdGUnLAogICAgICAgICAgICAnZ3plbmNvZGUnID0+ICdTYWZlXGd6ZW5jb2RlJywKICAgICAgICAgICAgJ2d6Z2V0cycgPT4gJ1NhZmVcZ3pnZXRzJywKICAgICAgICAgICAgJ2d6Z2V0c3MnID0+ICdTYWZlXGd6Z2V0c3MnLAogICAgICAgICAgICAnZ3ppbmZsYXRlJyA9PiAnU2FmZVxnemluZmxhdGUnLAogICAgICAgICAgICAnZ3pwYXNzdGhydScgPT4gJ1NhZmVcZ3pwYXNzdGhydScsCiAgICAgICAgICAgICdnenJld2luZCcgPT4gJ1NhZmVcZ3pyZXdpbmQnLAogICAgICAgICAgICAnZ3p1bmNvbXByZXNzJyA9PiAnU2FmZVxnenVuY29tcHJlc3MnLAogICAgICAgICAgICAnaGFzaF9oa2RmJyA9PiAnU2FmZVxoYXNoX2hrZGYnLAogICAgICAgICAgICAnaGFzaF91cGRhdGVfZmlsZScgPT4gJ1NhZmVcaGFzaF91cGRhdGVfZmlsZScsCiAgICAgICAgICAgICdoZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2snID0+ICdTYWZlXGhlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaycsCiAgICAgICAgICAgICdoZXgyYmluJyA9PiAnU2FmZVxoZXgyYmluJywKICAgICAgICAgICAgJ2hpZ2hsaWdodF9maWxlJyA9PiAnU2FmZVxoaWdobGlnaHRfZmlsZScsCiAgICAgICAgICAgICdoaWdobGlnaHRfc3RyaW5nJyA9PiAnU2FmZVxoaWdobGlnaHRfc3RyaW5nJywKICAgICAgICAgICAgJ2liYXNlX2FkZF91c2VyJyA9PiAnU2FmZVxpYmFzZV9hZGRfdXNlcicsCiAgICAgICAgICAgICdpYmFzZV9iYWNrdXAnID0+ICdTYWZlXGliYXNlX2JhY2t1cCcsCiAgICAgICAgICAgICdpYmFzZV9ibG9iX2NhbmNlbCcgPT4gJ1NhZmVcaWJhc2VfYmxvYl9jYW5jZWwnLAogICAgICAgICAgICAnaWJhc2VfYmxvYl9jcmVhdGUnID0+ICdTYWZlXGliYXNlX2Jsb2JfY3JlYXRlJywKICAgICAgICAgICAgJ2liYXNlX2Jsb2JfZ2V0JyA9PiAnU2FmZVxpYmFzZV9ibG9iX2dldCcsCiAgICAgICAgICAgICdpYmFzZV9jbG9zZScgPT4gJ1NhZmVcaWJhc2VfY2xvc2UnLAogICAgICAgICAgICAnaWJhc2VfY29tbWl0JyA9PiAnU2FmZVxpYmFzZV9jb21taXQnLAogICAgICAgICAgICAnaWJhc2VfY29tbWl0X3JldCcgPT4gJ1NhZmVcaWJhc2VfY29tbWl0X3JldCcsCiAgICAgICAgICAgICdpYmFzZV9jb25uZWN0JyA9PiAnU2FmZVxpYmFzZV9jb25uZWN0JywKICAgICAgICAgICAgJ2liYXNlX2RlbGV0ZV91c2VyJyA9PiAnU2FmZVxpYmFzZV9kZWxldGVfdXNlcicsCiAgICAgICAgICAgICdpYmFzZV9kcm9wX2RiJyA9PiAnU2FmZVxpYmFzZV9kcm9wX2RiJywKICAgICAgICAgICAgJ2liYXNlX2ZyZWVfZXZlbnRfaGFuZGxlcicgPT4gJ1NhZmVcaWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyJywKICAgICAgICAgICAgJ2liYXNlX2ZyZWVfcXVlcnknID0+ICdTYWZlXGliYXNlX2ZyZWVfcXVlcnknLAogICAgICAgICAgICAnaWJhc2VfZnJlZV9yZXN1bHQnID0+ICdTYWZlXGliYXNlX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ2liYXNlX21haW50YWluX2RiJyA9PiAnU2FmZVxpYmFzZV9tYWludGFpbl9kYicsCiAgICAgICAgICAgICdpYmFzZV9tb2RpZnlfdXNlcicgPT4gJ1NhZmVcaWJhc2VfbW9kaWZ5X3VzZXInLAogICAgICAgICAgICAnaWJhc2VfbmFtZV9yZXN1bHQnID0+ICdTYWZlXGliYXNlX25hbWVfcmVzdWx0JywKICAgICAgICAgICAgJ2liYXNlX3Bjb25uZWN0JyA9PiAnU2FmZVxpYmFzZV9wY29ubmVjdCcsCiAgICAgICAgICAgICdpYmFzZV9yZXN0b3JlJyA9PiAnU2FmZVxpYmFzZV9yZXN0b3JlJywKICAgICAgICAgICAgJ2liYXNlX3JvbGxiYWNrJyA9PiAnU2FmZVxpYmFzZV9yb2xsYmFjaycsCiAgICAgICAgICAgICdpYmFzZV9yb2xsYmFja19yZXQnID0+ICdTYWZlXGliYXNlX3JvbGxiYWNrX3JldCcsCiAgICAgICAgICAgICdpYmFzZV9zZXJ2aWNlX2F0dGFjaCcgPT4gJ1NhZmVcaWJhc2Vfc2VydmljZV9hdHRhY2gnLAogICAgICAgICAgICAnaWJhc2Vfc2VydmljZV9kZXRhY2gnID0+ICdTYWZlXGliYXNlX3NlcnZpY2VfZGV0YWNoJywKICAgICAgICAgICAgJ2ljb252JyA9PiAnU2FmZVxpY29udicsCiAgICAgICAgICAgICdpY29udl9nZXRfZW5jb2RpbmcnID0+ICdTYWZlXGljb252X2dldF9lbmNvZGluZycsCiAgICAgICAgICAgICdpY29udl9zZXRfZW5jb2RpbmcnID0+ICdTYWZlXGljb252X3NldF9lbmNvZGluZycsCiAgICAgICAgICAgICdpbWFnZTJ3Ym1wJyA9PiAnU2FmZVxpbWFnZTJ3Ym1wJywKICAgICAgICAgICAgJ2ltYWdlYWZmaW5lJyA9PiAnU2FmZVxpbWFnZWFmZmluZScsCiAgICAgICAgICAgICdpbWFnZWFmZmluZW1hdHJpeGNvbmNhdCcgPT4gJ1NhZmVcaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQnLAogICAgICAgICAgICAnaW1hZ2VhZmZpbmVtYXRyaXhnZXQnID0+ICdTYWZlXGltYWdlYWZmaW5lbWF0cml4Z2V0JywKICAgICAgICAgICAgJ2ltYWdlYWxwaGFibGVuZGluZycgPT4gJ1NhZmVcaW1hZ2VhbHBoYWJsZW5kaW5nJywKICAgICAgICAgICAgJ2ltYWdlYW50aWFsaWFzJyA9PiAnU2FmZVxpbWFnZWFudGlhbGlhcycsCiAgICAgICAgICAgICdpbWFnZWFyYycgPT4gJ1NhZmVcaW1hZ2VhcmMnLAogICAgICAgICAgICAnaW1hZ2VibXAnID0+ICdTYWZlXGltYWdlYm1wJywKICAgICAgICAgICAgJ2ltYWdlY2hhcicgPT4gJ1NhZmVcaW1hZ2VjaGFyJywKICAgICAgICAgICAgJ2ltYWdlY2hhcnVwJyA9PiAnU2FmZVxpbWFnZWNoYXJ1cCcsCiAgICAgICAgICAgICdpbWFnZWNvbG9yYXQnID0+ICdTYWZlXGltYWdlY29sb3JhdCcsCiAgICAgICAgICAgICdpbWFnZWNvbG9yZGVhbGxvY2F0ZScgPT4gJ1NhZmVcaW1hZ2Vjb2xvcmRlYWxsb2NhdGUnLAogICAgICAgICAgICAnaW1hZ2Vjb2xvcm1hdGNoJyA9PiAnU2FmZVxpbWFnZWNvbG9ybWF0Y2gnLAogICAgICAgICAgICAnaW1hZ2Vjb252b2x1dGlvbicgPT4gJ1NhZmVcaW1hZ2Vjb252b2x1dGlvbicsCiAgICAgICAgICAgICdpbWFnZWNvcHknID0+ICdTYWZlXGltYWdlY29weScsCiAgICAgICAgICAgICdpbWFnZWNvcHltZXJnZScgPT4gJ1NhZmVcaW1hZ2Vjb3B5bWVyZ2UnLAogICAgICAgICAgICAnaW1hZ2Vjb3B5bWVyZ2VncmF5JyA9PiAnU2FmZVxpbWFnZWNvcHltZXJnZWdyYXknLAogICAgICAgICAgICAnaW1hZ2Vjb3B5cmVzYW1wbGVkJyA9PiAnU2FmZVxpbWFnZWNvcHlyZXNhbXBsZWQnLAogICAgICAgICAgICAnaW1hZ2Vjb3B5cmVzaXplZCcgPT4gJ1NhZmVcaW1hZ2Vjb3B5cmVzaXplZCcsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZScgPT4gJ1NhZmVcaW1hZ2VjcmVhdGUnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tYm1wJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb21ibXAnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tZ2QnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbWdkJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbWdkMicgPT4gJ1NhZmVcaW1hZ2VjcmVhdGVmcm9tZ2QyJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbWdkMnBhcnQnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbWdkMnBhcnQnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tZ2lmJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb21naWYnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tanBlZycgPT4gJ1NhZmVcaW1hZ2VjcmVhdGVmcm9tanBlZycsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZWZyb21wbmcnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbXBuZycsCiAgICAgICAgICAgICdpbWFnZWNyZWF0ZWZyb213Ym1wJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb213Ym1wJywKICAgICAgICAgICAgJ2ltYWdlY3JlYXRlZnJvbXdlYnAnID0+ICdTYWZlXGltYWdlY3JlYXRlZnJvbXdlYnAnLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9teGJtJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb214Ym0nLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGVmcm9teHBtJyA9PiAnU2FmZVxpbWFnZWNyZWF0ZWZyb214cG0nLAogICAgICAgICAgICAnaW1hZ2VjcmVhdGV0cnVlY29sb3InID0+ICdTYWZlXGltYWdlY3JlYXRldHJ1ZWNvbG9yJywKICAgICAgICAgICAgJ2ltYWdlY3JvcCcgPT4gJ1NhZmVcaW1hZ2Vjcm9wJywKICAgICAgICAgICAgJ2ltYWdlY3JvcGF1dG8nID0+ICdTYWZlXGltYWdlY3JvcGF1dG8nLAogICAgICAgICAgICAnaW1hZ2VkYXNoZWRsaW5lJyA9PiAnU2FmZVxpbWFnZWRhc2hlZGxpbmUnLAogICAgICAgICAgICAnaW1hZ2VkZXN0cm95JyA9PiAnU2FmZVxpbWFnZWRlc3Ryb3knLAogICAgICAgICAgICAnaW1hZ2VlbGxpcHNlJyA9PiAnU2FmZVxpbWFnZWVsbGlwc2UnLAogICAgICAgICAgICAnaW1hZ2VmaWxsJyA9PiAnU2FmZVxpbWFnZWZpbGwnLAogICAgICAgICAgICAnaW1hZ2VmaWxsZWRhcmMnID0+ICdTYWZlXGltYWdlZmlsbGVkYXJjJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkZWxsaXBzZScgPT4gJ1NhZmVcaW1hZ2VmaWxsZWRlbGxpcHNlJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkcG9seWdvbicgPT4gJ1NhZmVcaW1hZ2VmaWxsZWRwb2x5Z29uJywKICAgICAgICAgICAgJ2ltYWdlZmlsbGVkcmVjdGFuZ2xlJyA9PiAnU2FmZVxpbWFnZWZpbGxlZHJlY3RhbmdsZScsCiAgICAgICAgICAgICdpbWFnZWZpbGx0b2JvcmRlcicgPT4gJ1NhZmVcaW1hZ2VmaWxsdG9ib3JkZXInLAogICAgICAgICAgICAnaW1hZ2VmaWx0ZXInID0+ICdTYWZlXGltYWdlZmlsdGVyJywKICAgICAgICAgICAgJ2ltYWdlZmxpcCcgPT4gJ1NhZmVcaW1hZ2VmbGlwJywKICAgICAgICAgICAgJ2ltYWdlZ2FtbWFjb3JyZWN0JyA9PiAnU2FmZVxpbWFnZWdhbW1hY29ycmVjdCcsCiAgICAgICAgICAgICdpbWFnZWdkJyA9PiAnU2FmZVxpbWFnZWdkJywKICAgICAgICAgICAgJ2ltYWdlZ2QyJyA9PiAnU2FmZVxpbWFnZWdkMicsCiAgICAgICAgICAgICdpbWFnZWdpZicgPT4gJ1NhZmVcaW1hZ2VnaWYnLAogICAgICAgICAgICAnaW1hZ2VncmFic2NyZWVuJyA9PiAnU2FmZVxpbWFnZWdyYWJzY3JlZW4nLAogICAgICAgICAgICAnaW1hZ2VncmFid2luZG93JyA9PiAnU2FmZVxpbWFnZWdyYWJ3aW5kb3cnLAogICAgICAgICAgICAnaW1hZ2VqcGVnJyA9PiAnU2FmZVxpbWFnZWpwZWcnLAogICAgICAgICAgICAnaW1hZ2VsYXllcmVmZmVjdCcgPT4gJ1NhZmVcaW1hZ2VsYXllcmVmZmVjdCcsCiAgICAgICAgICAgICdpbWFnZWxpbmUnID0+ICdTYWZlXGltYWdlbGluZScsCiAgICAgICAgICAgICdpbWFnZWxvYWRmb250JyA9PiAnU2FmZVxpbWFnZWxvYWRmb250JywKICAgICAgICAgICAgJ2ltYWdlb3BlbnBvbHlnb24nID0+ICdTYWZlXGltYWdlb3BlbnBvbHlnb24nLAogICAgICAgICAgICAnaW1hZ2VwbmcnID0+ICdTYWZlXGltYWdlcG5nJywKICAgICAgICAgICAgJ2ltYWdlcG9seWdvbicgPT4gJ1NhZmVcaW1hZ2Vwb2x5Z29uJywKICAgICAgICAgICAgJ2ltYWdlcmVjdGFuZ2xlJyA9PiAnU2FmZVxpbWFnZXJlY3RhbmdsZScsCiAgICAgICAgICAgICdpbWFnZXJvdGF0ZScgPT4gJ1NhZmVcaW1hZ2Vyb3RhdGUnLAogICAgICAgICAgICAnaW1hZ2VzYXZlYWxwaGEnID0+ICdTYWZlXGltYWdlc2F2ZWFscGhhJywKICAgICAgICAgICAgJ2ltYWdlc2NhbGUnID0+ICdTYWZlXGltYWdlc2NhbGUnLAogICAgICAgICAgICAnaW1hZ2VzZXRicnVzaCcgPT4gJ1NhZmVcaW1hZ2VzZXRicnVzaCcsCiAgICAgICAgICAgICdpbWFnZXNldGNsaXAnID0+ICdTYWZlXGltYWdlc2V0Y2xpcCcsCiAgICAgICAgICAgICdpbWFnZXNldGludGVycG9sYXRpb24nID0+ICdTYWZlXGltYWdlc2V0aW50ZXJwb2xhdGlvbicsCiAgICAgICAgICAgICdpbWFnZXNldHBpeGVsJyA9PiAnU2FmZVxpbWFnZXNldHBpeGVsJywKICAgICAgICAgICAgJ2ltYWdlc2V0c3R5bGUnID0+ICdTYWZlXGltYWdlc2V0c3R5bGUnLAogICAgICAgICAgICAnaW1hZ2VzZXR0aGlja25lc3MnID0+ICdTYWZlXGltYWdlc2V0dGhpY2tuZXNzJywKICAgICAgICAgICAgJ2ltYWdlc2V0dGlsZScgPT4gJ1NhZmVcaW1hZ2VzZXR0aWxlJywKICAgICAgICAgICAgJ2ltYWdlc3RyaW5nJyA9PiAnU2FmZVxpbWFnZXN0cmluZycsCiAgICAgICAgICAgICdpbWFnZXN0cmluZ3VwJyA9PiAnU2FmZVxpbWFnZXN0cmluZ3VwJywKICAgICAgICAgICAgJ2ltYWdlc3gnID0+ICdTYWZlXGltYWdlc3gnLAogICAgICAgICAgICAnaW1hZ2VzeScgPT4gJ1NhZmVcaW1hZ2VzeScsCiAgICAgICAgICAgICdpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZScgPT4gJ1NhZmVcaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUnLAogICAgICAgICAgICAnaW1hZ2V0dGZiYm94JyA9PiAnU2FmZVxpbWFnZXR0ZmJib3gnLAogICAgICAgICAgICAnaW1hZ2V0dGZ0ZXh0JyA9PiAnU2FmZVxpbWFnZXR0ZnRleHQnLAogICAgICAgICAgICAnaW1hZ2V3Ym1wJyA9PiAnU2FmZVxpbWFnZXdibXAnLAogICAgICAgICAgICAnaW1hZ2V3ZWJwJyA9PiAnU2FmZVxpbWFnZXdlYnAnLAogICAgICAgICAgICAnaW1hZ2V4Ym0nID0+ICdTYWZlXGltYWdleGJtJywKICAgICAgICAgICAgJ2ltYXBfYXBwZW5kJyA9PiAnU2FmZVxpbWFwX2FwcGVuZCcsCiAgICAgICAgICAgICdpbWFwX2NoZWNrJyA9PiAnU2FmZVxpbWFwX2NoZWNrJywKICAgICAgICAgICAgJ2ltYXBfY2xlYXJmbGFnX2Z1bGwnID0+ICdTYWZlXGltYXBfY2xlYXJmbGFnX2Z1bGwnLAogICAgICAgICAgICAnaW1hcF9jbG9zZScgPT4gJ1NhZmVcaW1hcF9jbG9zZScsCiAgICAgICAgICAgICdpbWFwX2NyZWF0ZW1haWxib3gnID0+ICdTYWZlXGltYXBfY3JlYXRlbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX2RlbGV0ZW1haWxib3gnID0+ICdTYWZlXGltYXBfZGVsZXRlbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX2ZldGNoc3RydWN0dXJlJyA9PiAnU2FmZVxpbWFwX2ZldGNoc3RydWN0dXJlJywKICAgICAgICAgICAgJ2ltYXBfZ2MnID0+ICdTYWZlXGltYXBfZ2MnLAogICAgICAgICAgICAnaW1hcF9oZWFkZXJpbmZvJyA9PiAnU2FmZVxpbWFwX2hlYWRlcmluZm8nLAogICAgICAgICAgICAnaW1hcF9tYWlsJyA9PiAnU2FmZVxpbWFwX21haWwnLAogICAgICAgICAgICAnaW1hcF9tYWlsYm94bXNnaW5mbycgPT4gJ1NhZmVcaW1hcF9tYWlsYm94bXNnaW5mbycsCiAgICAgICAgICAgICdpbWFwX21haWxfY29tcG9zZScgPT4gJ1NhZmVcaW1hcF9tYWlsX2NvbXBvc2UnLAogICAgICAgICAgICAnaW1hcF9tYWlsX2NvcHknID0+ICdTYWZlXGltYXBfbWFpbF9jb3B5JywKICAgICAgICAgICAgJ2ltYXBfbWFpbF9tb3ZlJyA9PiAnU2FmZVxpbWFwX21haWxfbW92ZScsCiAgICAgICAgICAgICdpbWFwX211dGY3X3RvX3V0ZjgnID0+ICdTYWZlXGltYXBfbXV0ZjdfdG9fdXRmOCcsCiAgICAgICAgICAgICdpbWFwX251bV9tc2cnID0+ICdTYWZlXGltYXBfbnVtX21zZycsCiAgICAgICAgICAgICdpbWFwX29wZW4nID0+ICdTYWZlXGltYXBfb3BlbicsCiAgICAgICAgICAgICdpbWFwX3JlbmFtZW1haWxib3gnID0+ICdTYWZlXGltYXBfcmVuYW1lbWFpbGJveCcsCiAgICAgICAgICAgICdpbWFwX3NhdmVib2R5JyA9PiAnU2FmZVxpbWFwX3NhdmVib2R5JywKICAgICAgICAgICAgJ2ltYXBfc2V0YWNsJyA9PiAnU2FmZVxpbWFwX3NldGFjbCcsCiAgICAgICAgICAgICdpbWFwX3NldGZsYWdfZnVsbCcgPT4gJ1NhZmVcaW1hcF9zZXRmbGFnX2Z1bGwnLAogICAgICAgICAgICAnaW1hcF9zZXRfcXVvdGEnID0+ICdTYWZlXGltYXBfc2V0X3F1b3RhJywKICAgICAgICAgICAgJ2ltYXBfc29ydCcgPT4gJ1NhZmVcaW1hcF9zb3J0JywKICAgICAgICAgICAgJ2ltYXBfc3Vic2NyaWJlJyA9PiAnU2FmZVxpbWFwX3N1YnNjcmliZScsCiAgICAgICAgICAgICdpbWFwX3RocmVhZCcgPT4gJ1NhZmVcaW1hcF90aHJlYWQnLAogICAgICAgICAgICAnaW1hcF90aW1lb3V0JyA9PiAnU2FmZVxpbWFwX3RpbWVvdXQnLAogICAgICAgICAgICAnaW1hcF91bmRlbGV0ZScgPT4gJ1NhZmVcaW1hcF91bmRlbGV0ZScsCiAgICAgICAgICAgICdpbWFwX3Vuc3Vic2NyaWJlJyA9PiAnU2FmZVxpbWFwX3Vuc3Vic2NyaWJlJywKICAgICAgICAgICAgJ2ltYXBfdXRmOF90b19tdXRmNycgPT4gJ1NhZmVcaW1hcF91dGY4X3RvX211dGY3JywKICAgICAgICAgICAgJ2luZXRfbnRvcCcgPT4gJ1NhZmVcaW5ldF9udG9wJywKICAgICAgICAgICAgJ2luZmxhdGVfYWRkJyA9PiAnU2FmZVxpbmZsYXRlX2FkZCcsCiAgICAgICAgICAgICdpbmZsYXRlX2dldF9yZWFkX2xlbicgPT4gJ1NhZmVcaW5mbGF0ZV9nZXRfcmVhZF9sZW4nLAogICAgICAgICAgICAnaW5mbGF0ZV9nZXRfc3RhdHVzJyA9PiAnU2FmZVxpbmZsYXRlX2dldF9zdGF0dXMnLAogICAgICAgICAgICAnaW5mbGF0ZV9pbml0JyA9PiAnU2FmZVxpbmZsYXRlX2luaXQnLAogICAgICAgICAgICAnaW5ncmVzX2F1dG9jb21taXQnID0+ICdTYWZlXGluZ3Jlc19hdXRvY29tbWl0JywKICAgICAgICAgICAgJ2luZ3Jlc19jbG9zZScgPT4gJ1NhZmVcaW5ncmVzX2Nsb3NlJywKICAgICAgICAgICAgJ2luZ3Jlc19jb21taXQnID0+ICdTYWZlXGluZ3Jlc19jb21taXQnLAogICAgICAgICAgICAnaW5ncmVzX2Nvbm5lY3QnID0+ICdTYWZlXGluZ3Jlc19jb25uZWN0JywKICAgICAgICAgICAgJ2luZ3Jlc19leGVjdXRlJyA9PiAnU2FmZVxpbmdyZXNfZXhlY3V0ZScsCiAgICAgICAgICAgICdpbmdyZXNfZmllbGRfbmFtZScgPT4gJ1NhZmVcaW5ncmVzX2ZpZWxkX25hbWUnLAogICAgICAgICAgICAnaW5ncmVzX2ZpZWxkX3R5cGUnID0+ICdTYWZlXGluZ3Jlc19maWVsZF90eXBlJywKICAgICAgICAgICAgJ2luZ3Jlc19mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcaW5ncmVzX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ2luZ3Jlc19wY29ubmVjdCcgPT4gJ1NhZmVcaW5ncmVzX3Bjb25uZWN0JywKICAgICAgICAgICAgJ2luZ3Jlc19yZXN1bHRfc2VlaycgPT4gJ1NhZmVcaW5ncmVzX3Jlc3VsdF9zZWVrJywKICAgICAgICAgICAgJ2luZ3Jlc19yb2xsYmFjaycgPT4gJ1NhZmVcaW5ncmVzX3JvbGxiYWNrJywKICAgICAgICAgICAgJ2luZ3Jlc19zZXRfZW52aXJvbm1lbnQnID0+ICdTYWZlXGluZ3Jlc19zZXRfZW52aXJvbm1lbnQnLAogICAgICAgICAgICAnaW5pX2dldCcgPT4gJ1NhZmVcaW5pX2dldCcsCiAgICAgICAgICAgICdpbmlfc2V0JyA9PiAnU2FmZVxpbmlfc2V0JywKICAgICAgICAgICAgJ2lub3RpZnlfaW5pdCcgPT4gJ1NhZmVcaW5vdGlmeV9pbml0JywKICAgICAgICAgICAgJ2lub3RpZnlfcm1fd2F0Y2gnID0+ICdTYWZlXGlub3RpZnlfcm1fd2F0Y2gnLAogICAgICAgICAgICAnaXB0Y2VtYmVkJyA9PiAnU2FmZVxpcHRjZW1iZWQnLAogICAgICAgICAgICAnaXB0Y3BhcnNlJyA9PiAnU2FmZVxpcHRjcGFyc2UnLAogICAgICAgICAgICAnamR0b3VuaXgnID0+ICdTYWZlXGpkdG91bml4JywKICAgICAgICAgICAgJ2pwZWcyd2JtcCcgPT4gJ1NhZmVcanBlZzJ3Ym1wJywKICAgICAgICAgICAgJ2pzb25fZGVjb2RlJyA9PiAnU2FmZVxqc29uX2RlY29kZScsCiAgICAgICAgICAgICdqc29uX2VuY29kZScgPT4gJ1NhZmVcanNvbl9lbmNvZGUnLAogICAgICAgICAgICAnanNvbl9sYXN0X2Vycm9yX21zZycgPT4gJ1NhZmVcanNvbl9sYXN0X2Vycm9yX21zZycsCiAgICAgICAgICAgICdrcnNvcnQnID0+ICdTYWZlXGtyc29ydCcsCiAgICAgICAgICAgICdrc29ydCcgPT4gJ1NhZmVca3NvcnQnLAogICAgICAgICAgICAnbGNoZ3JwJyA9PiAnU2FmZVxsY2hncnAnLAogICAgICAgICAgICAnbGNob3duJyA9PiAnU2FmZVxsY2hvd24nLAogICAgICAgICAgICAnbGRhcF9hZGQnID0+ICdTYWZlXGxkYXBfYWRkJywKICAgICAgICAgICAgJ2xkYXBfYWRkX2V4dCcgPT4gJ1NhZmVcbGRhcF9hZGRfZXh0JywKICAgICAgICAgICAgJ2xkYXBfYmluZCcgPT4gJ1NhZmVcbGRhcF9iaW5kJywKICAgICAgICAgICAgJ2xkYXBfYmluZF9leHQnID0+ICdTYWZlXGxkYXBfYmluZF9leHQnLAogICAgICAgICAgICAnbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcgPT4gJ1NhZmVcbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlJyA9PiAnU2FmZVxsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlJywKICAgICAgICAgICAgJ2xkYXBfY291bnRfZW50cmllcycgPT4gJ1NhZmVcbGRhcF9jb3VudF9lbnRyaWVzJywKICAgICAgICAgICAgJ2xkYXBfZGVsZXRlJyA9PiAnU2FmZVxsZGFwX2RlbGV0ZScsCiAgICAgICAgICAgICdsZGFwX2RlbGV0ZV9leHQnID0+ICdTYWZlXGxkYXBfZGVsZXRlX2V4dCcsCiAgICAgICAgICAgICdsZGFwX2V4b3AnID0+ICdTYWZlXGxkYXBfZXhvcCcsCiAgICAgICAgICAgICdsZGFwX2V4b3BfcGFzc3dkJyA9PiAnU2FmZVxsZGFwX2V4b3BfcGFzc3dkJywKICAgICAgICAgICAgJ2xkYXBfZXhvcF93aG9hbWknID0+ICdTYWZlXGxkYXBfZXhvcF93aG9hbWknLAogICAgICAgICAgICAnbGRhcF9leHBsb2RlX2RuJyA9PiAnU2FmZVxsZGFwX2V4cGxvZGVfZG4nLAogICAgICAgICAgICAnbGRhcF9maXJzdF9hdHRyaWJ1dGUnID0+ICdTYWZlXGxkYXBfZmlyc3RfYXR0cmlidXRlJywKICAgICAgICAgICAgJ2xkYXBfZmlyc3RfZW50cnknID0+ICdTYWZlXGxkYXBfZmlyc3RfZW50cnknLAogICAgICAgICAgICAnbGRhcF9mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcbGRhcF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX2dldF9hdHRyaWJ1dGVzJyA9PiAnU2FmZVxsZGFwX2dldF9hdHRyaWJ1dGVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X2RuJyA9PiAnU2FmZVxsZGFwX2dldF9kbicsCiAgICAgICAgICAgICdsZGFwX2dldF9lbnRyaWVzJyA9PiAnU2FmZVxsZGFwX2dldF9lbnRyaWVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X29wdGlvbicgPT4gJ1NhZmVcbGRhcF9nZXRfb3B0aW9uJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X3ZhbHVlcycgPT4gJ1NhZmVcbGRhcF9nZXRfdmFsdWVzJywKICAgICAgICAgICAgJ2xkYXBfZ2V0X3ZhbHVlc19sZW4nID0+ICdTYWZlXGxkYXBfZ2V0X3ZhbHVlc19sZW4nLAogICAgICAgICAgICAnbGRhcF9saXN0JyA9PiAnU2FmZVxsZGFwX2xpc3QnLAogICAgICAgICAgICAnbGRhcF9tb2RpZnlfYmF0Y2gnID0+ICdTYWZlXGxkYXBfbW9kaWZ5X2JhdGNoJywKICAgICAgICAgICAgJ2xkYXBfbW9kX2FkZCcgPT4gJ1NhZmVcbGRhcF9tb2RfYWRkJywKICAgICAgICAgICAgJ2xkYXBfbW9kX2FkZF9leHQnID0+ICdTYWZlXGxkYXBfbW9kX2FkZF9leHQnLAogICAgICAgICAgICAnbGRhcF9tb2RfZGVsJyA9PiAnU2FmZVxsZGFwX21vZF9kZWwnLAogICAgICAgICAgICAnbGRhcF9tb2RfZGVsX2V4dCcgPT4gJ1NhZmVcbGRhcF9tb2RfZGVsX2V4dCcsCiAgICAgICAgICAgICdsZGFwX21vZF9yZXBsYWNlJyA9PiAnU2FmZVxsZGFwX21vZF9yZXBsYWNlJywKICAgICAgICAgICAgJ2xkYXBfbW9kX3JlcGxhY2VfZXh0JyA9PiAnU2FmZVxsZGFwX21vZF9yZXBsYWNlX2V4dCcsCiAgICAgICAgICAgICdsZGFwX25leHRfYXR0cmlidXRlJyA9PiAnU2FmZVxsZGFwX25leHRfYXR0cmlidXRlJywKICAgICAgICAgICAgJ2xkYXBfcGFyc2VfZXhvcCcgPT4gJ1NhZmVcbGRhcF9wYXJzZV9leG9wJywKICAgICAgICAgICAgJ2xkYXBfcGFyc2VfcmVzdWx0JyA9PiAnU2FmZVxsZGFwX3BhcnNlX3Jlc3VsdCcsCiAgICAgICAgICAgICdsZGFwX3JlYWQnID0+ICdTYWZlXGxkYXBfcmVhZCcsCiAgICAgICAgICAgICdsZGFwX3JlbmFtZScgPT4gJ1NhZmVcbGRhcF9yZW5hbWUnLAogICAgICAgICAgICAnbGRhcF9yZW5hbWVfZXh0JyA9PiAnU2FmZVxsZGFwX3JlbmFtZV9leHQnLAogICAgICAgICAgICAnbGRhcF9zYXNsX2JpbmQnID0+ICdTYWZlXGxkYXBfc2FzbF9iaW5kJywKICAgICAgICAgICAgJ2xkYXBfc2VhcmNoJyA9PiAnU2FmZVxsZGFwX3NlYXJjaCcsCiAgICAgICAgICAgICdsZGFwX3NldF9vcHRpb24nID0+ICdTYWZlXGxkYXBfc2V0X29wdGlvbicsCiAgICAgICAgICAgICdsZGFwX3VuYmluZCcgPT4gJ1NhZmVcbGRhcF91bmJpbmQnLAogICAgICAgICAgICAnbGlieG1sX2dldF9sYXN0X2Vycm9yJyA9PiAnU2FmZVxsaWJ4bWxfZ2V0X2xhc3RfZXJyb3InLAogICAgICAgICAgICAnbGlieG1sX3NldF9leHRlcm5hbF9lbnRpdHlfbG9hZGVyJyA9PiAnU2FmZVxsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXInLAogICAgICAgICAgICAnbGluaycgPT4gJ1NhZmVcbGluaycsCiAgICAgICAgICAgICdsemZfY29tcHJlc3MnID0+ICdTYWZlXGx6Zl9jb21wcmVzcycsCiAgICAgICAgICAgICdsemZfZGVjb21wcmVzcycgPT4gJ1NhZmVcbHpmX2RlY29tcHJlc3MnLAogICAgICAgICAgICAnbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZScgPT4gJ1NhZmVcbWFpbHBhcnNlX21zZ19leHRyYWN0X3BhcnRfZmlsZScsCiAgICAgICAgICAgICdtYWlscGFyc2VfbXNnX2ZyZWUnID0+ICdTYWZlXG1haWxwYXJzZV9tc2dfZnJlZScsCiAgICAgICAgICAgICdtYWlscGFyc2VfbXNnX3BhcnNlJyA9PiAnU2FmZVxtYWlscGFyc2VfbXNnX3BhcnNlJywKICAgICAgICAgICAgJ21haWxwYXJzZV9tc2dfcGFyc2VfZmlsZScgPT4gJ1NhZmVcbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlJywKICAgICAgICAgICAgJ21haWxwYXJzZV9zdHJlYW1fZW5jb2RlJyA9PiAnU2FmZVxtYWlscGFyc2Vfc3RyZWFtX2VuY29kZScsCiAgICAgICAgICAgICdtYl9jaHInID0+ICdTYWZlXG1iX2NocicsCiAgICAgICAgICAgICdtYl9kZXRlY3Rfb3JkZXInID0+ICdTYWZlXG1iX2RldGVjdF9vcmRlcicsCiAgICAgICAgICAgICdtYl9lbmNvZGluZ19hbGlhc2VzJyA9PiAnU2FmZVxtYl9lbmNvZGluZ19hbGlhc2VzJywKICAgICAgICAgICAgJ21iX2VyZWdpX3JlcGxhY2UnID0+ICdTYWZlXG1iX2VyZWdpX3JlcGxhY2UnLAogICAgICAgICAgICAnbWJfZXJlZ19yZXBsYWNlJyA9PiAnU2FmZVxtYl9lcmVnX3JlcGxhY2UnLAogICAgICAgICAgICAnbWJfZXJlZ19yZXBsYWNlX2NhbGxiYWNrJyA9PiAnU2FmZVxtYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2snLAogICAgICAgICAgICAnbWJfZXJlZ19zZWFyY2hfZ2V0cmVncycgPT4gJ1NhZmVcbWJfZXJlZ19zZWFyY2hfZ2V0cmVncycsCiAgICAgICAgICAgICdtYl9lcmVnX3NlYXJjaF9pbml0JyA9PiAnU2FmZVxtYl9lcmVnX3NlYXJjaF9pbml0JywKICAgICAgICAgICAgJ21iX2VyZWdfc2VhcmNoX3JlZ3MnID0+ICdTYWZlXG1iX2VyZWdfc2VhcmNoX3JlZ3MnLAogICAgICAgICAgICAnbWJfZXJlZ19zZWFyY2hfc2V0cG9zJyA9PiAnU2FmZVxtYl9lcmVnX3NlYXJjaF9zZXRwb3MnLAogICAgICAgICAgICAnbWJfaHR0cF9vdXRwdXQnID0+ICdTYWZlXG1iX2h0dHBfb3V0cHV0JywKICAgICAgICAgICAgJ21iX2ludGVybmFsX2VuY29kaW5nJyA9PiAnU2FmZVxtYl9pbnRlcm5hbF9lbmNvZGluZycsCiAgICAgICAgICAgICdtYl9vcmQnID0+ICdTYWZlXG1iX29yZCcsCiAgICAgICAgICAgICdtYl9wYXJzZV9zdHInID0+ICdTYWZlXG1iX3BhcnNlX3N0cicsCiAgICAgICAgICAgICdtYl9yZWdleF9lbmNvZGluZycgPT4gJ1NhZmVcbWJfcmVnZXhfZW5jb2RpbmcnLAogICAgICAgICAgICAnbWJfc2VuZF9tYWlsJyA9PiAnU2FmZVxtYl9zZW5kX21haWwnLAogICAgICAgICAgICAnbWJfc3BsaXQnID0+ICdTYWZlXG1iX3NwbGl0JywKICAgICAgICAgICAgJ21iX3N0cl9zcGxpdCcgPT4gJ1NhZmVcbWJfc3RyX3NwbGl0JywKICAgICAgICAgICAgJ21kNV9maWxlJyA9PiAnU2FmZVxtZDVfZmlsZScsCiAgICAgICAgICAgICdtZXRhcGhvbmUnID0+ICdTYWZlXG1ldGFwaG9uZScsCiAgICAgICAgICAgICdtaW1lX2NvbnRlbnRfdHlwZScgPT4gJ1NhZmVcbWltZV9jb250ZW50X3R5cGUnLAogICAgICAgICAgICAnbWtkaXInID0+ICdTYWZlXG1rZGlyJywKICAgICAgICAgICAgJ21rdGltZScgPT4gJ1NhZmVcbWt0aW1lJywKICAgICAgICAgICAgJ21zZ19xdWV1ZV9leGlzdHMnID0+ICdTYWZlXG1zZ19xdWV1ZV9leGlzdHMnLAogICAgICAgICAgICAnbXNnX3JlY2VpdmUnID0+ICdTYWZlXG1zZ19yZWNlaXZlJywKICAgICAgICAgICAgJ21zZ19yZW1vdmVfcXVldWUnID0+ICdTYWZlXG1zZ19yZW1vdmVfcXVldWUnLAogICAgICAgICAgICAnbXNnX3NlbmQnID0+ICdTYWZlXG1zZ19zZW5kJywKICAgICAgICAgICAgJ21zZ19zZXRfcXVldWUnID0+ICdTYWZlXG1zZ19zZXRfcXVldWUnLAogICAgICAgICAgICAnbXNxbF9hZmZlY3RlZF9yb3dzJyA9PiAnU2FmZVxtc3FsX2FmZmVjdGVkX3Jvd3MnLAogICAgICAgICAgICAnbXNxbF9jbG9zZScgPT4gJ1NhZmVcbXNxbF9jbG9zZScsCiAgICAgICAgICAgICdtc3FsX2Nvbm5lY3QnID0+ICdTYWZlXG1zcWxfY29ubmVjdCcsCiAgICAgICAgICAgICdtc3FsX2NyZWF0ZV9kYicgPT4gJ1NhZmVcbXNxbF9jcmVhdGVfZGInLAogICAgICAgICAgICAnbXNxbF9kYXRhX3NlZWsnID0+ICdTYWZlXG1zcWxfZGF0YV9zZWVrJywKICAgICAgICAgICAgJ21zcWxfZGJfcXVlcnknID0+ICdTYWZlXG1zcWxfZGJfcXVlcnknLAogICAgICAgICAgICAnbXNxbF9kcm9wX2RiJyA9PiAnU2FmZVxtc3FsX2Ryb3BfZGInLAogICAgICAgICAgICAnbXNxbF9maWVsZF9sZW4nID0+ICdTYWZlXG1zcWxfZmllbGRfbGVuJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfbmFtZScgPT4gJ1NhZmVcbXNxbF9maWVsZF9uYW1lJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfc2VlaycgPT4gJ1NhZmVcbXNxbF9maWVsZF9zZWVrJywKICAgICAgICAgICAgJ21zcWxfZmllbGRfdGFibGUnID0+ICdTYWZlXG1zcWxfZmllbGRfdGFibGUnLAogICAgICAgICAgICAnbXNxbF9maWVsZF90eXBlJyA9PiAnU2FmZVxtc3FsX2ZpZWxkX3R5cGUnLAogICAgICAgICAgICAnbXNxbF9mcmVlX3Jlc3VsdCcgPT4gJ1NhZmVcbXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdtc3FsX3Bjb25uZWN0JyA9PiAnU2FmZVxtc3FsX3Bjb25uZWN0JywKICAgICAgICAgICAgJ21zcWxfcXVlcnknID0+ICdTYWZlXG1zcWxfcXVlcnknLAogICAgICAgICAgICAnbXNxbF9zZWxlY3RfZGInID0+ICdTYWZlXG1zcWxfc2VsZWN0X2RiJywKICAgICAgICAgICAgJ215c3FsaV9nZXRfY2FjaGVfc3RhdHMnID0+ICdTYWZlXG15c3FsaV9nZXRfY2FjaGVfc3RhdHMnLAogICAgICAgICAgICAnbXlzcWxpX2dldF9jbGllbnRfc3RhdHMnID0+ICdTYWZlXG15c3FsaV9nZXRfY2xpZW50X3N0YXRzJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZHVtcF9zZXJ2ZXJzJyA9PiAnU2FmZVxteXNxbG5kX21zX2R1bXBfc2VydmVycycsCiAgICAgICAgICAgICdteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsJyA9PiAnU2FmZVxteXNxbG5kX21zX2ZhYnJpY19zZWxlY3RfZ2xvYmFsJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZmFicmljX3NlbGVjdF9zaGFyZCcgPT4gJ1NhZmVcbXlzcWxuZF9tc19mYWJyaWNfc2VsZWN0X3NoYXJkJywKICAgICAgICAgICAgJ215c3FsbmRfbXNfZ2V0X2xhc3RfdXNlZF9jb25uZWN0aW9uJyA9PiAnU2FmZVxteXNxbG5kX21zX2dldF9sYXN0X3VzZWRfY29ubmVjdGlvbicsCiAgICAgICAgICAgICdteXNxbG5kX3FjX2NsZWFyX2NhY2hlJyA9PiAnU2FmZVxteXNxbG5kX3FjX2NsZWFyX2NhY2hlJywKICAgICAgICAgICAgJ215c3FsbmRfcWNfc2V0X2lzX3NlbGVjdCcgPT4gJ1NhZmVcbXlzcWxuZF9xY19zZXRfaXNfc2VsZWN0JywKICAgICAgICAgICAgJ215c3FsbmRfcWNfc2V0X3N0b3JhZ2VfaGFuZGxlcicgPT4gJ1NhZmVcbXlzcWxuZF9xY19zZXRfc3RvcmFnZV9oYW5kbGVyJywKICAgICAgICAgICAgJ215c3FsX2Nsb3NlJyA9PiAnU2FmZVxteXNxbF9jbG9zZScsCiAgICAgICAgICAgICdteXNxbF9jb25uZWN0JyA9PiAnU2FmZVxteXNxbF9jb25uZWN0JywKICAgICAgICAgICAgJ215c3FsX2NyZWF0ZV9kYicgPT4gJ1NhZmVcbXlzcWxfY3JlYXRlX2RiJywKICAgICAgICAgICAgJ215c3FsX2RhdGFfc2VlaycgPT4gJ1NhZmVcbXlzcWxfZGF0YV9zZWVrJywKICAgICAgICAgICAgJ215c3FsX2RiX25hbWUnID0+ICdTYWZlXG15c3FsX2RiX25hbWUnLAogICAgICAgICAgICAnbXlzcWxfZGJfcXVlcnknID0+ICdTYWZlXG15c3FsX2RiX3F1ZXJ5JywKICAgICAgICAgICAgJ215c3FsX2Ryb3BfZGInID0+ICdTYWZlXG15c3FsX2Ryb3BfZGInLAogICAgICAgICAgICAnbXlzcWxfZmV0Y2hfbGVuZ3RocycgPT4gJ1NhZmVcbXlzcWxfZmV0Y2hfbGVuZ3RocycsCiAgICAgICAgICAgICdteXNxbF9maWVsZF9mbGFncycgPT4gJ1NhZmVcbXlzcWxfZmllbGRfZmxhZ3MnLAogICAgICAgICAgICAnbXlzcWxfZmllbGRfbGVuJyA9PiAnU2FmZVxteXNxbF9maWVsZF9sZW4nLAogICAgICAgICAgICAnbXlzcWxfZmllbGRfbmFtZScgPT4gJ1NhZmVcbXlzcWxfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdteXNxbF9maWVsZF9zZWVrJyA9PiAnU2FmZVxteXNxbF9maWVsZF9zZWVrJywKICAgICAgICAgICAgJ215c3FsX2ZyZWVfcmVzdWx0JyA9PiAnU2FmZVxteXNxbF9mcmVlX3Jlc3VsdCcsCiAgICAgICAgICAgICdteXNxbF9nZXRfaG9zdF9pbmZvJyA9PiAnU2FmZVxteXNxbF9nZXRfaG9zdF9pbmZvJywKICAgICAgICAgICAgJ215c3FsX2dldF9wcm90b19pbmZvJyA9PiAnU2FmZVxteXNxbF9nZXRfcHJvdG9faW5mbycsCiAgICAgICAgICAgICdteXNxbF9nZXRfc2VydmVyX2luZm8nID0+ICdTYWZlXG15c3FsX2dldF9zZXJ2ZXJfaW5mbycsCiAgICAgICAgICAgICdteXNxbF9pbmZvJyA9PiAnU2FmZVxteXNxbF9pbmZvJywKICAgICAgICAgICAgJ215c3FsX2xpc3RfZGJzJyA9PiAnU2FmZVxteXNxbF9saXN0X2RicycsCiAgICAgICAgICAgICdteXNxbF9saXN0X2ZpZWxkcycgPT4gJ1NhZmVcbXlzcWxfbGlzdF9maWVsZHMnLAogICAgICAgICAgICAnbXlzcWxfbGlzdF9wcm9jZXNzZXMnID0+ICdTYWZlXG15c3FsX2xpc3RfcHJvY2Vzc2VzJywKICAgICAgICAgICAgJ215c3FsX2xpc3RfdGFibGVzJyA9PiAnU2FmZVxteXNxbF9saXN0X3RhYmxlcycsCiAgICAgICAgICAgICdteXNxbF9udW1fZmllbGRzJyA9PiAnU2FmZVxteXNxbF9udW1fZmllbGRzJywKICAgICAgICAgICAgJ215c3FsX251bV9yb3dzJyA9PiAnU2FmZVxteXNxbF9udW1fcm93cycsCiAgICAgICAgICAgICdteXNxbF9xdWVyeScgPT4gJ1NhZmVcbXlzcWxfcXVlcnknLAogICAgICAgICAgICAnbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nJyA9PiAnU2FmZVxteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcnLAogICAgICAgICAgICAnbXlzcWxfcmVzdWx0JyA9PiAnU2FmZVxteXNxbF9yZXN1bHQnLAogICAgICAgICAgICAnbXlzcWxfc2VsZWN0X2RiJyA9PiAnU2FmZVxteXNxbF9zZWxlY3RfZGInLAogICAgICAgICAgICAnbXlzcWxfc2V0X2NoYXJzZXQnID0+ICdTYWZlXG15c3FsX3NldF9jaGFyc2V0JywKICAgICAgICAgICAgJ215c3FsX3RhYmxlbmFtZScgPT4gJ1NhZmVcbXlzcWxfdGFibGVuYW1lJywKICAgICAgICAgICAgJ215c3FsX3RocmVhZF9pZCcgPT4gJ1NhZmVcbXlzcWxfdGhyZWFkX2lkJywKICAgICAgICAgICAgJ215c3FsX3VuYnVmZmVyZWRfcXVlcnknID0+ICdTYWZlXG15c3FsX3VuYnVmZmVyZWRfcXVlcnknLAogICAgICAgICAgICAnbmF0Y2FzZXNvcnQnID0+ICdTYWZlXG5hdGNhc2Vzb3J0JywKICAgICAgICAgICAgJ25hdHNvcnQnID0+ICdTYWZlXG5hdHNvcnQnLAogICAgICAgICAgICAnb2JfZW5kX2NsZWFuJyA9PiAnU2FmZVxvYl9lbmRfY2xlYW4nLAogICAgICAgICAgICAnb2JfZW5kX2ZsdXNoJyA9PiAnU2FmZVxvYl9lbmRfZmx1c2gnLAogICAgICAgICAgICAnb2NpX2JpbmRfYXJyYXlfYnlfbmFtZScgPT4gJ1NhZmVcb2NpX2JpbmRfYXJyYXlfYnlfbmFtZScsCiAgICAgICAgICAgICdvY2lfYmluZF9ieV9uYW1lJyA9PiAnU2FmZVxvY2lfYmluZF9ieV9uYW1lJywKICAgICAgICAgICAgJ29jaV9jYW5jZWwnID0+ICdTYWZlXG9jaV9jYW5jZWwnLAogICAgICAgICAgICAnb2NpX2Nsb3NlJyA9PiAnU2FmZVxvY2lfY2xvc2UnLAogICAgICAgICAgICAnb2NpX2NvbW1pdCcgPT4gJ1NhZmVcb2NpX2NvbW1pdCcsCiAgICAgICAgICAgICdvY2lfY29ubmVjdCcgPT4gJ1NhZmVcb2NpX2Nvbm5lY3QnLAogICAgICAgICAgICAnb2NpX2RlZmluZV9ieV9uYW1lJyA9PiAnU2FmZVxvY2lfZGVmaW5lX2J5X25hbWUnLAogICAgICAgICAgICAnb2NpX2V4ZWN1dGUnID0+ICdTYWZlXG9jaV9leGVjdXRlJywKICAgICAgICAgICAgJ29jaV9mZXRjaF9hbGwnID0+ICdTYWZlXG9jaV9mZXRjaF9hbGwnLAogICAgICAgICAgICAnb2NpX2ZpZWxkX25hbWUnID0+ICdTYWZlXG9jaV9maWVsZF9uYW1lJywKICAgICAgICAgICAgJ29jaV9maWVsZF9wcmVjaXNpb24nID0+ICdTYWZlXG9jaV9maWVsZF9wcmVjaXNpb24nLAogICAgICAgICAgICAnb2NpX2ZpZWxkX3NjYWxlJyA9PiAnU2FmZVxvY2lfZmllbGRfc2NhbGUnLAogICAgICAgICAgICAnb2NpX2ZpZWxkX3NpemUnID0+ICdTYWZlXG9jaV9maWVsZF9zaXplJywKICAgICAgICAgICAgJ29jaV9maWVsZF90eXBlJyA9PiAnU2FmZVxvY2lfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdvY2lfZmllbGRfdHlwZV9yYXcnID0+ICdTYWZlXG9jaV9maWVsZF90eXBlX3JhdycsCiAgICAgICAgICAgICdvY2lfZnJlZV9kZXNjcmlwdG9yJyA9PiAnU2FmZVxvY2lfZnJlZV9kZXNjcmlwdG9yJywKICAgICAgICAgICAgJ29jaV9mcmVlX3N0YXRlbWVudCcgPT4gJ1NhZmVcb2NpX2ZyZWVfc3RhdGVtZW50JywKICAgICAgICAgICAgJ29jaV9uZXdfY29sbGVjdGlvbicgPT4gJ1NhZmVcb2NpX25ld19jb2xsZWN0aW9uJywKICAgICAgICAgICAgJ29jaV9uZXdfY29ubmVjdCcgPT4gJ1NhZmVcb2NpX25ld19jb25uZWN0JywKICAgICAgICAgICAgJ29jaV9uZXdfY3Vyc29yJyA9PiAnU2FmZVxvY2lfbmV3X2N1cnNvcicsCiAgICAgICAgICAgICdvY2lfbmV3X2Rlc2NyaXB0b3InID0+ICdTYWZlXG9jaV9uZXdfZGVzY3JpcHRvcicsCiAgICAgICAgICAgICdvY2lfbnVtX2ZpZWxkcycgPT4gJ1NhZmVcb2NpX251bV9maWVsZHMnLAogICAgICAgICAgICAnb2NpX251bV9yb3dzJyA9PiAnU2FmZVxvY2lfbnVtX3Jvd3MnLAogICAgICAgICAgICAnb2NpX3BhcnNlJyA9PiAnU2FmZVxvY2lfcGFyc2UnLAogICAgICAgICAgICAnb2NpX3Bjb25uZWN0JyA9PiAnU2FmZVxvY2lfcGNvbm5lY3QnLAogICAgICAgICAgICAnb2NpX3Jlc3VsdCcgPT4gJ1NhZmVcb2NpX3Jlc3VsdCcsCiAgICAgICAgICAgICdvY2lfcm9sbGJhY2snID0+ICdTYWZlXG9jaV9yb2xsYmFjaycsCiAgICAgICAgICAgICdvY2lfc2VydmVyX3ZlcnNpb24nID0+ICdTYWZlXG9jaV9zZXJ2ZXJfdmVyc2lvbicsCiAgICAgICAgICAgICdvY2lfc2V0X2FjdGlvbicgPT4gJ1NhZmVcb2NpX3NldF9hY3Rpb24nLAogICAgICAgICAgICAnb2NpX3NldF9jYWxsX3RpbWVvdXQnID0+ICdTYWZlXG9jaV9zZXRfY2FsbF90aW1lb3V0JywKICAgICAgICAgICAgJ29jaV9zZXRfY2xpZW50X2lkZW50aWZpZXInID0+ICdTYWZlXG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXInLAogICAgICAgICAgICAnb2NpX3NldF9jbGllbnRfaW5mbycgPT4gJ1NhZmVcb2NpX3NldF9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdvY2lfc2V0X2RiX29wZXJhdGlvbicgPT4gJ1NhZmVcb2NpX3NldF9kYl9vcGVyYXRpb24nLAogICAgICAgICAgICAnb2NpX3NldF9lZGl0aW9uJyA9PiAnU2FmZVxvY2lfc2V0X2VkaXRpb24nLAogICAgICAgICAgICAnb2NpX3NldF9tb2R1bGVfbmFtZScgPT4gJ1NhZmVcb2NpX3NldF9tb2R1bGVfbmFtZScsCiAgICAgICAgICAgICdvY2lfc2V0X3ByZWZldGNoJyA9PiAnU2FmZVxvY2lfc2V0X3ByZWZldGNoJywKICAgICAgICAgICAgJ29jaV9zdGF0ZW1lbnRfdHlwZScgPT4gJ1NhZmVcb2NpX3N0YXRlbWVudF90eXBlJywKICAgICAgICAgICAgJ29jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaycgPT4gJ1NhZmVcb2NpX3VucmVnaXN0ZXJfdGFmX2NhbGxiYWNrJywKICAgICAgICAgICAgJ29kYmNfYXV0b2NvbW1pdCcgPT4gJ1NhZmVcb2RiY19hdXRvY29tbWl0JywKICAgICAgICAgICAgJ29kYmNfYmlubW9kZScgPT4gJ1NhZmVcb2RiY19iaW5tb2RlJywKICAgICAgICAgICAgJ29kYmNfY29sdW1ucHJpdmlsZWdlcycgPT4gJ1NhZmVcb2RiY19jb2x1bW5wcml2aWxlZ2VzJywKICAgICAgICAgICAgJ29kYmNfY29sdW1ucycgPT4gJ1NhZmVcb2RiY19jb2x1bW5zJywKICAgICAgICAgICAgJ29kYmNfY29tbWl0JyA9PiAnU2FmZVxvZGJjX2NvbW1pdCcsCiAgICAgICAgICAgICdvZGJjX2RhdGFfc291cmNlJyA9PiAnU2FmZVxvZGJjX2RhdGFfc291cmNlJywKICAgICAgICAgICAgJ29kYmNfZXhlYycgPT4gJ1NhZmVcb2RiY19leGVjJywKICAgICAgICAgICAgJ29kYmNfZXhlY3V0ZScgPT4gJ1NhZmVcb2RiY19leGVjdXRlJywKICAgICAgICAgICAgJ29kYmNfZmV0Y2hfaW50bycgPT4gJ1NhZmVcb2RiY19mZXRjaF9pbnRvJywKICAgICAgICAgICAgJ29kYmNfZmllbGRfbGVuJyA9PiAnU2FmZVxvZGJjX2ZpZWxkX2xlbicsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX25hbWUnID0+ICdTYWZlXG9kYmNfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX251bScgPT4gJ1NhZmVcb2RiY19maWVsZF9udW0nLAogICAgICAgICAgICAnb2RiY19maWVsZF9zY2FsZScgPT4gJ1NhZmVcb2RiY19maWVsZF9zY2FsZScsCiAgICAgICAgICAgICdvZGJjX2ZpZWxkX3R5cGUnID0+ICdTYWZlXG9kYmNfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdvZGJjX2ZvcmVpZ25rZXlzJyA9PiAnU2FmZVxvZGJjX2ZvcmVpZ25rZXlzJywKICAgICAgICAgICAgJ29kYmNfZ2V0dHlwZWluZm8nID0+ICdTYWZlXG9kYmNfZ2V0dHlwZWluZm8nLAogICAgICAgICAgICAnb2RiY19sb25ncmVhZGxlbicgPT4gJ1NhZmVcb2RiY19sb25ncmVhZGxlbicsCiAgICAgICAgICAgICdvZGJjX3ByZXBhcmUnID0+ICdTYWZlXG9kYmNfcHJlcGFyZScsCiAgICAgICAgICAgICdvZGJjX3ByaW1hcnlrZXlzJyA9PiAnU2FmZVxvZGJjX3ByaW1hcnlrZXlzJywKICAgICAgICAgICAgJ29kYmNfcmVzdWx0JyA9PiAnU2FmZVxvZGJjX3Jlc3VsdCcsCiAgICAgICAgICAgICdvZGJjX3Jlc3VsdF9hbGwnID0+ICdTYWZlXG9kYmNfcmVzdWx0X2FsbCcsCiAgICAgICAgICAgICdvZGJjX3JvbGxiYWNrJyA9PiAnU2FmZVxvZGJjX3JvbGxiYWNrJywKICAgICAgICAgICAgJ29kYmNfc2V0b3B0aW9uJyA9PiAnU2FmZVxvZGJjX3NldG9wdGlvbicsCiAgICAgICAgICAgICdvZGJjX3NwZWNpYWxjb2x1bW5zJyA9PiAnU2FmZVxvZGJjX3NwZWNpYWxjb2x1bW5zJywKICAgICAgICAgICAgJ29kYmNfc3RhdGlzdGljcycgPT4gJ1NhZmVcb2RiY19zdGF0aXN0aWNzJywKICAgICAgICAgICAgJ29kYmNfdGFibGVwcml2aWxlZ2VzJyA9PiAnU2FmZVxvZGJjX3RhYmxlcHJpdmlsZWdlcycsCiAgICAgICAgICAgICdvZGJjX3RhYmxlcycgPT4gJ1NhZmVcb2RiY190YWJsZXMnLAogICAgICAgICAgICAnb3BjYWNoZV9jb21waWxlX2ZpbGUnID0+ICdTYWZlXG9wY2FjaGVfY29tcGlsZV9maWxlJywKICAgICAgICAgICAgJ29wY2FjaGVfZ2V0X3N0YXR1cycgPT4gJ1NhZmVcb3BjYWNoZV9nZXRfc3RhdHVzJywKICAgICAgICAgICAgJ29wZW5kaXInID0+ICdTYWZlXG9wZW5kaXInLAogICAgICAgICAgICAnb3BlbmxvZycgPT4gJ1NhZmVcb3BlbmxvZycsCiAgICAgICAgICAgICdvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgnID0+ICdTYWZlXG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCcsCiAgICAgICAgICAgICdvcGVuc3NsX2Nzcl9leHBvcnQnID0+ICdTYWZlXG9wZW5zc2xfY3NyX2V4cG9ydCcsCiAgICAgICAgICAgICdvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZScgPT4gJ1NhZmVcb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUnLAogICAgICAgICAgICAnb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QnID0+ICdTYWZlXG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0JywKICAgICAgICAgICAgJ29wZW5zc2xfY3NyX25ldycgPT4gJ1NhZmVcb3BlbnNzbF9jc3JfbmV3JywKICAgICAgICAgICAgJ29wZW5zc2xfY3NyX3NpZ24nID0+ICdTYWZlXG9wZW5zc2xfY3NyX3NpZ24nLAogICAgICAgICAgICAnb3BlbnNzbF9kZWNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX2RlY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9kaF9jb21wdXRlX2tleScgPT4gJ1NhZmVcb3BlbnNzbF9kaF9jb21wdXRlX2tleScsCiAgICAgICAgICAgICdvcGVuc3NsX2RpZ2VzdCcgPT4gJ1NhZmVcb3BlbnNzbF9kaWdlc3QnLAogICAgICAgICAgICAnb3BlbnNzbF9lbmNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX2VuY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9vcGVuJyA9PiAnU2FmZVxvcGVuc3NsX29wZW4nLAogICAgICAgICAgICAnb3BlbnNzbF9wYmtkZjInID0+ICdTYWZlXG9wZW5zc2xfcGJrZGYyJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfZGVjcnlwdCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfZW5jcnlwdCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19lbmNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfcmVhZCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19yZWFkJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczdfc2lnbicgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzN19zaWduJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydCcgPT4gJ1NhZmVcb3BlbnNzbF9wa2NzMTJfZXhwb3J0JywKICAgICAgICAgICAgJ29wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlJyA9PiAnU2FmZVxvcGVuc3NsX3BrY3MxMl9leHBvcnRfdG9fZmlsZScsCiAgICAgICAgICAgICdvcGVuc3NsX3BrY3MxMl9yZWFkJyA9PiAnU2FmZVxvcGVuc3NsX3BrY3MxMl9yZWFkJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtleV9leHBvcnQnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9leHBvcnQnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlJyA9PiAnU2FmZVxvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlJyA9PiAnU2FmZVxvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUnLAogICAgICAgICAgICAnb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9nZXRfcHVibGljJywKICAgICAgICAgICAgJ29wZW5zc2xfcGtleV9uZXcnID0+ICdTYWZlXG9wZW5zc2xfcGtleV9uZXcnLAogICAgICAgICAgICAnb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQnID0+ICdTYWZlXG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX3ByaXZhdGVfZW5jcnlwdCcsCiAgICAgICAgICAgICdvcGVuc3NsX3B1YmxpY19kZWNyeXB0JyA9PiAnU2FmZVxvcGVuc3NsX3B1YmxpY19kZWNyeXB0JywKICAgICAgICAgICAgJ29wZW5zc2xfcHVibGljX2VuY3J5cHQnID0+ICdTYWZlXG9wZW5zc2xfcHVibGljX2VuY3J5cHQnLAogICAgICAgICAgICAnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJyA9PiAnU2FmZVxvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMnLAogICAgICAgICAgICAnb3BlbnNzbF9zZWFsJyA9PiAnU2FmZVxvcGVuc3NsX3NlYWwnLAogICAgICAgICAgICAnb3BlbnNzbF9zaWduJyA9PiAnU2FmZVxvcGVuc3NsX3NpZ24nLAogICAgICAgICAgICAnb3BlbnNzbF94NTA5X2V4cG9ydCcgPT4gJ1NhZmVcb3BlbnNzbF94NTA5X2V4cG9ydCcsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUnID0+ICdTYWZlXG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZScsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQnID0+ICdTYWZlXG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCcsCiAgICAgICAgICAgICdvcGVuc3NsX3g1MDlfcmVhZCcgPT4gJ1NhZmVcb3BlbnNzbF94NTA5X3JlYWQnLAogICAgICAgICAgICAnb3V0cHV0X2FkZF9yZXdyaXRlX3ZhcicgPT4gJ1NhZmVcb3V0cHV0X2FkZF9yZXdyaXRlX3ZhcicsCiAgICAgICAgICAgICdvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJyA9PiAnU2FmZVxvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzJywKICAgICAgICAgICAgJ3BhY2snID0+ICdTYWZlXHBhY2snLAogICAgICAgICAgICAncGFyc2VfaW5pX2ZpbGUnID0+ICdTYWZlXHBhcnNlX2luaV9maWxlJywKICAgICAgICAgICAgJ3BhcnNlX2luaV9zdHJpbmcnID0+ICdTYWZlXHBhcnNlX2luaV9zdHJpbmcnLAogICAgICAgICAgICAncGFyc2VfdXJsJyA9PiAnU2FmZVxwYXJzZV91cmwnLAogICAgICAgICAgICAncGFzc3dvcmRfaGFzaCcgPT4gJ1NhZmVccGFzc3dvcmRfaGFzaCcsCiAgICAgICAgICAgICdwY250bF9leGVjJyA9PiAnU2FmZVxwY250bF9leGVjJywKICAgICAgICAgICAgJ3BjbnRsX2dldHByaW9yaXR5JyA9PiAnU2FmZVxwY250bF9nZXRwcmlvcml0eScsCiAgICAgICAgICAgICdwY250bF9zZXRwcmlvcml0eScgPT4gJ1NhZmVccGNudGxfc2V0cHJpb3JpdHknLAogICAgICAgICAgICAncGNudGxfc2lnbmFsX2Rpc3BhdGNoJyA9PiAnU2FmZVxwY250bF9zaWduYWxfZGlzcGF0Y2gnLAogICAgICAgICAgICAncGNudGxfc2lncHJvY21hc2snID0+ICdTYWZlXHBjbnRsX3NpZ3Byb2NtYXNrJywKICAgICAgICAgICAgJ3BjbnRsX3N0cmVycm9yJyA9PiAnU2FmZVxwY250bF9zdHJlcnJvcicsCiAgICAgICAgICAgICdQREZfYWN0aXZhdGVfaXRlbScgPT4gJ1NhZmVcUERGX2FjdGl2YXRlX2l0ZW0nLAogICAgICAgICAgICAnUERGX2FkZF9sb2NhbGxpbmsnID0+ICdTYWZlXFBERl9hZGRfbG9jYWxsaW5rJywKICAgICAgICAgICAgJ1BERl9hZGRfbmFtZWRkZXN0JyA9PiAnU2FmZVxQREZfYWRkX25hbWVkZGVzdCcsCiAgICAgICAgICAgICdQREZfYWRkX25vdGUnID0+ICdTYWZlXFBERl9hZGRfbm90ZScsCiAgICAgICAgICAgICdQREZfYWRkX3BkZmxpbmsnID0+ICdTYWZlXFBERl9hZGRfcGRmbGluaycsCiAgICAgICAgICAgICdQREZfYWRkX3RodW1ibmFpbCcgPT4gJ1NhZmVcUERGX2FkZF90aHVtYm5haWwnLAogICAgICAgICAgICAnUERGX2FkZF93ZWJsaW5rJyA9PiAnU2FmZVxQREZfYWRkX3dlYmxpbmsnLAogICAgICAgICAgICAnUERGX2F0dGFjaF9maWxlJyA9PiAnU2FmZVxQREZfYXR0YWNoX2ZpbGUnLAogICAgICAgICAgICAnUERGX2JlZ2luX2xheWVyJyA9PiAnU2FmZVxQREZfYmVnaW5fbGF5ZXInLAogICAgICAgICAgICAnUERGX2JlZ2luX3BhZ2UnID0+ICdTYWZlXFBERl9iZWdpbl9wYWdlJywKICAgICAgICAgICAgJ1BERl9iZWdpbl9wYWdlX2V4dCcgPT4gJ1NhZmVcUERGX2JlZ2luX3BhZ2VfZXh0JywKICAgICAgICAgICAgJ1BERl9jaXJjbGUnID0+ICdTYWZlXFBERl9jaXJjbGUnLAogICAgICAgICAgICAnUERGX2NsaXAnID0+ICdTYWZlXFBERl9jbGlwJywKICAgICAgICAgICAgJ1BERl9jbG9zZScgPT4gJ1NhZmVcUERGX2Nsb3NlJywKICAgICAgICAgICAgJ1BERl9jbG9zZXBhdGgnID0+ICdTYWZlXFBERl9jbG9zZXBhdGgnLAogICAgICAgICAgICAnUERGX2Nsb3NlcGF0aF9maWxsX3N0cm9rZScgPT4gJ1NhZmVcUERGX2Nsb3NlcGF0aF9maWxsX3N0cm9rZScsCiAgICAgICAgICAgICdQREZfY2xvc2VwYXRoX3N0cm9rZScgPT4gJ1NhZmVcUERGX2Nsb3NlcGF0aF9zdHJva2UnLAogICAgICAgICAgICAnUERGX2Nsb3NlX3BkaScgPT4gJ1NhZmVcUERGX2Nsb3NlX3BkaScsCiAgICAgICAgICAgICdQREZfY2xvc2VfcGRpX3BhZ2UnID0+ICdTYWZlXFBERl9jbG9zZV9wZGlfcGFnZScsCiAgICAgICAgICAgICdQREZfY29uY2F0JyA9PiAnU2FmZVxQREZfY29uY2F0JywKICAgICAgICAgICAgJ1BERl9jb250aW51ZV90ZXh0JyA9PiAnU2FmZVxQREZfY29udGludWVfdGV4dCcsCiAgICAgICAgICAgICdQREZfY3VydmV0bycgPT4gJ1NhZmVcUERGX2N1cnZldG8nLAogICAgICAgICAgICAnUERGX2RlbGV0ZScgPT4gJ1NhZmVcUERGX2RlbGV0ZScsCiAgICAgICAgICAgICdQREZfZW5kX2xheWVyJyA9PiAnU2FmZVxQREZfZW5kX2xheWVyJywKICAgICAgICAgICAgJ1BERl9lbmRfcGFnZScgPT4gJ1NhZmVcUERGX2VuZF9wYWdlJywKICAgICAgICAgICAgJ1BERl9lbmRfcGFnZV9leHQnID0+ICdTYWZlXFBERl9lbmRfcGFnZV9leHQnLAogICAgICAgICAgICAnUERGX2VuZF9wYXR0ZXJuJyA9PiAnU2FmZVxQREZfZW5kX3BhdHRlcm4nLAogICAgICAgICAgICAnUERGX2VuZF90ZW1wbGF0ZScgPT4gJ1NhZmVcUERGX2VuZF90ZW1wbGF0ZScsCiAgICAgICAgICAgICdQREZfZmlsbCcgPT4gJ1NhZmVcUERGX2ZpbGwnLAogICAgICAgICAgICAnUERGX2ZpbGxfc3Ryb2tlJyA9PiAnU2FmZVxQREZfZmlsbF9zdHJva2UnLAogICAgICAgICAgICAnUERGX2ZpdF9pbWFnZScgPT4gJ1NhZmVcUERGX2ZpdF9pbWFnZScsCiAgICAgICAgICAgICdQREZfZml0X3BkaV9wYWdlJyA9PiAnU2FmZVxQREZfZml0X3BkaV9wYWdlJywKICAgICAgICAgICAgJ1BERl9maXRfdGV4dGxpbmUnID0+ICdTYWZlXFBERl9maXRfdGV4dGxpbmUnLAogICAgICAgICAgICAnUERGX2luaXRncmFwaGljcycgPT4gJ1NhZmVcUERGX2luaXRncmFwaGljcycsCiAgICAgICAgICAgICdQREZfbGluZXRvJyA9PiAnU2FmZVxQREZfbGluZXRvJywKICAgICAgICAgICAgJ1BERl9tYWtlc3BvdGNvbG9yJyA9PiAnU2FmZVxQREZfbWFrZXNwb3Rjb2xvcicsCiAgICAgICAgICAgICdQREZfbW92ZXRvJyA9PiAnU2FmZVxQREZfbW92ZXRvJywKICAgICAgICAgICAgJ1BERl9vcGVuX2ZpbGUnID0+ICdTYWZlXFBERl9vcGVuX2ZpbGUnLAogICAgICAgICAgICAnUERGX3BsYWNlX2ltYWdlJyA9PiAnU2FmZVxQREZfcGxhY2VfaW1hZ2UnLAogICAgICAgICAgICAnUERGX3BsYWNlX3BkaV9wYWdlJyA9PiAnU2FmZVxQREZfcGxhY2VfcGRpX3BhZ2UnLAogICAgICAgICAgICAnUERGX3JlY3QnID0+ICdTYWZlXFBERl9yZWN0JywKICAgICAgICAgICAgJ1BERl9yZXN0b3JlJyA9PiAnU2FmZVxQREZfcmVzdG9yZScsCiAgICAgICAgICAgICdQREZfcm90YXRlJyA9PiAnU2FmZVxQREZfcm90YXRlJywKICAgICAgICAgICAgJ1BERl9zYXZlJyA9PiAnU2FmZVxQREZfc2F2ZScsCiAgICAgICAgICAgICdQREZfc2NhbGUnID0+ICdTYWZlXFBERl9zY2FsZScsCiAgICAgICAgICAgICdQREZfc2V0Y29sb3InID0+ICdTYWZlXFBERl9zZXRjb2xvcicsCiAgICAgICAgICAgICdQREZfc2V0ZGFzaCcgPT4gJ1NhZmVcUERGX3NldGRhc2gnLAogICAgICAgICAgICAnUERGX3NldGRhc2hwYXR0ZXJuJyA9PiAnU2FmZVxQREZfc2V0ZGFzaHBhdHRlcm4nLAogICAgICAgICAgICAnUERGX3NldGZsYXQnID0+ICdTYWZlXFBERl9zZXRmbGF0JywKICAgICAgICAgICAgJ1BERl9zZXRmb250JyA9PiAnU2FmZVxQREZfc2V0Zm9udCcsCiAgICAgICAgICAgICdQREZfc2V0Z3JheScgPT4gJ1NhZmVcUERGX3NldGdyYXknLAogICAgICAgICAgICAnUERGX3NldGdyYXlfZmlsbCcgPT4gJ1NhZmVcUERGX3NldGdyYXlfZmlsbCcsCiAgICAgICAgICAgICdQREZfc2V0Z3JheV9zdHJva2UnID0+ICdTYWZlXFBERl9zZXRncmF5X3N0cm9rZScsCiAgICAgICAgICAgICdQREZfc2V0bGluZWpvaW4nID0+ICdTYWZlXFBERl9zZXRsaW5lam9pbicsCiAgICAgICAgICAgICdQREZfc2V0bGluZXdpZHRoJyA9PiAnU2FmZVxQREZfc2V0bGluZXdpZHRoJywKICAgICAgICAgICAgJ1BERl9zZXRtYXRyaXgnID0+ICdTYWZlXFBERl9zZXRtYXRyaXgnLAogICAgICAgICAgICAnUERGX3NldG1pdGVybGltaXQnID0+ICdTYWZlXFBERl9zZXRtaXRlcmxpbWl0JywKICAgICAgICAgICAgJ1BERl9zZXRyZ2Jjb2xvcicgPT4gJ1NhZmVcUERGX3NldHJnYmNvbG9yJywKICAgICAgICAgICAgJ1BERl9zZXRyZ2Jjb2xvcl9maWxsJyA9PiAnU2FmZVxQREZfc2V0cmdiY29sb3JfZmlsbCcsCiAgICAgICAgICAgICdQREZfc2V0cmdiY29sb3Jfc3Ryb2tlJyA9PiAnU2FmZVxQREZfc2V0cmdiY29sb3Jfc3Ryb2tlJywKICAgICAgICAgICAgJ1BERl9zZXRfYm9yZGVyX2NvbG9yJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9jb2xvcicsCiAgICAgICAgICAgICdQREZfc2V0X2JvcmRlcl9kYXNoJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9kYXNoJywKICAgICAgICAgICAgJ1BERl9zZXRfYm9yZGVyX3N0eWxlJyA9PiAnU2FmZVxQREZfc2V0X2JvcmRlcl9zdHlsZScsCiAgICAgICAgICAgICdQREZfc2V0X2luZm8nID0+ICdTYWZlXFBERl9zZXRfaW5mbycsCiAgICAgICAgICAgICdQREZfc2V0X2xheWVyX2RlcGVuZGVuY3knID0+ICdTYWZlXFBERl9zZXRfbGF5ZXJfZGVwZW5kZW5jeScsCiAgICAgICAgICAgICdQREZfc2V0X3BhcmFtZXRlcicgPT4gJ1NhZmVcUERGX3NldF9wYXJhbWV0ZXInLAogICAgICAgICAgICAnUERGX3NldF90ZXh0X3BvcycgPT4gJ1NhZmVcUERGX3NldF90ZXh0X3BvcycsCiAgICAgICAgICAgICdQREZfc2V0X3ZhbHVlJyA9PiAnU2FmZVxQREZfc2V0X3ZhbHVlJywKICAgICAgICAgICAgJ1BERl9zaG93JyA9PiAnU2FmZVxQREZfc2hvdycsCiAgICAgICAgICAgICdQREZfc2hvd194eScgPT4gJ1NhZmVcUERGX3Nob3dfeHknLAogICAgICAgICAgICAnUERGX3NrZXcnID0+ICdTYWZlXFBERl9za2V3JywKICAgICAgICAgICAgJ1BERl9zdHJva2UnID0+ICdTYWZlXFBERl9zdHJva2UnLAogICAgICAgICAgICAncGdfY2FuY2VsX3F1ZXJ5JyA9PiAnU2FmZVxwZ19jYW5jZWxfcXVlcnknLAogICAgICAgICAgICAncGdfY2xpZW50X2VuY29kaW5nJyA9PiAnU2FmZVxwZ19jbGllbnRfZW5jb2RpbmcnLAogICAgICAgICAgICAncGdfY2xvc2UnID0+ICdTYWZlXHBnX2Nsb3NlJywKICAgICAgICAgICAgJ3BnX2Nvbm5lY3QnID0+ICdTYWZlXHBnX2Nvbm5lY3QnLAogICAgICAgICAgICAncGdfY29ubmVjdGlvbl9yZXNldCcgPT4gJ1NhZmVccGdfY29ubmVjdGlvbl9yZXNldCcsCiAgICAgICAgICAgICdwZ19jb252ZXJ0JyA9PiAnU2FmZVxwZ19jb252ZXJ0JywKICAgICAgICAgICAgJ3BnX2NvcHlfZnJvbScgPT4gJ1NhZmVccGdfY29weV9mcm9tJywKICAgICAgICAgICAgJ3BnX2NvcHlfdG8nID0+ICdTYWZlXHBnX2NvcHlfdG8nLAogICAgICAgICAgICAncGdfZGJuYW1lJyA9PiAnU2FmZVxwZ19kYm5hbWUnLAogICAgICAgICAgICAncGdfZGVsZXRlJyA9PiAnU2FmZVxwZ19kZWxldGUnLAogICAgICAgICAgICAncGdfZW5kX2NvcHknID0+ICdTYWZlXHBnX2VuZF9jb3B5JywKICAgICAgICAgICAgJ3BnX2V4ZWN1dGUnID0+ICdTYWZlXHBnX2V4ZWN1dGUnLAogICAgICAgICAgICAncGdfZmllbGRfbmFtZScgPT4gJ1NhZmVccGdfZmllbGRfbmFtZScsCiAgICAgICAgICAgICdwZ19maWVsZF90YWJsZScgPT4gJ1NhZmVccGdfZmllbGRfdGFibGUnLAogICAgICAgICAgICAncGdfZmllbGRfdHlwZScgPT4gJ1NhZmVccGdfZmllbGRfdHlwZScsCiAgICAgICAgICAgICdwZ19mbHVzaCcgPT4gJ1NhZmVccGdfZmx1c2gnLAogICAgICAgICAgICAncGdfZnJlZV9yZXN1bHQnID0+ICdTYWZlXHBnX2ZyZWVfcmVzdWx0JywKICAgICAgICAgICAgJ3BnX2hvc3QnID0+ICdTYWZlXHBnX2hvc3QnLAogICAgICAgICAgICAncGdfaW5zZXJ0JyA9PiAnU2FmZVxwZ19pbnNlcnQnLAogICAgICAgICAgICAncGdfbGFzdF9lcnJvcicgPT4gJ1NhZmVccGdfbGFzdF9lcnJvcicsCiAgICAgICAgICAgICdwZ19sYXN0X25vdGljZScgPT4gJ1NhZmVccGdfbGFzdF9ub3RpY2UnLAogICAgICAgICAgICAncGdfbGFzdF9vaWQnID0+ICdTYWZlXHBnX2xhc3Rfb2lkJywKICAgICAgICAgICAgJ3BnX2xvX2Nsb3NlJyA9PiAnU2FmZVxwZ19sb19jbG9zZScsCiAgICAgICAgICAgICdwZ19sb19leHBvcnQnID0+ICdTYWZlXHBnX2xvX2V4cG9ydCcsCiAgICAgICAgICAgICdwZ19sb19pbXBvcnQnID0+ICdTYWZlXHBnX2xvX2ltcG9ydCcsCiAgICAgICAgICAgICdwZ19sb19vcGVuJyA9PiAnU2FmZVxwZ19sb19vcGVuJywKICAgICAgICAgICAgJ3BnX2xvX3JlYWQnID0+ICdTYWZlXHBnX2xvX3JlYWQnLAogICAgICAgICAgICAncGdfbG9fcmVhZF9hbGwnID0+ICdTYWZlXHBnX2xvX3JlYWRfYWxsJywKICAgICAgICAgICAgJ3BnX2xvX3NlZWsnID0+ICdTYWZlXHBnX2xvX3NlZWsnLAogICAgICAgICAgICAncGdfbG9fdHJ1bmNhdGUnID0+ICdTYWZlXHBnX2xvX3RydW5jYXRlJywKICAgICAgICAgICAgJ3BnX2xvX3VubGluaycgPT4gJ1NhZmVccGdfbG9fdW5saW5rJywKICAgICAgICAgICAgJ3BnX2xvX3dyaXRlJyA9PiAnU2FmZVxwZ19sb193cml0ZScsCiAgICAgICAgICAgICdwZ19tZXRhX2RhdGEnID0+ICdTYWZlXHBnX21ldGFfZGF0YScsCiAgICAgICAgICAgICdwZ19vcHRpb25zJyA9PiAnU2FmZVxwZ19vcHRpb25zJywKICAgICAgICAgICAgJ3BnX3BhcmFtZXRlcl9zdGF0dXMnID0+ICdTYWZlXHBnX3BhcmFtZXRlcl9zdGF0dXMnLAogICAgICAgICAgICAncGdfcGNvbm5lY3QnID0+ICdTYWZlXHBnX3Bjb25uZWN0JywKICAgICAgICAgICAgJ3BnX3BpbmcnID0+ICdTYWZlXHBnX3BpbmcnLAogICAgICAgICAgICAncGdfcG9ydCcgPT4gJ1NhZmVccGdfcG9ydCcsCiAgICAgICAgICAgICdwZ19wcmVwYXJlJyA9PiAnU2FmZVxwZ19wcmVwYXJlJywKICAgICAgICAgICAgJ3BnX3B1dF9saW5lJyA9PiAnU2FmZVxwZ19wdXRfbGluZScsCiAgICAgICAgICAgICdwZ19xdWVyeScgPT4gJ1NhZmVccGdfcXVlcnknLAogICAgICAgICAgICAncGdfcXVlcnlfcGFyYW1zJyA9PiAnU2FmZVxwZ19xdWVyeV9wYXJhbXMnLAogICAgICAgICAgICAncGdfcmVzdWx0X2Vycm9yX2ZpZWxkJyA9PiAnU2FmZVxwZ19yZXN1bHRfZXJyb3JfZmllbGQnLAogICAgICAgICAgICAncGdfcmVzdWx0X3NlZWsnID0+ICdTYWZlXHBnX3Jlc3VsdF9zZWVrJywKICAgICAgICAgICAgJ3BnX3NlbGVjdCcgPT4gJ1NhZmVccGdfc2VsZWN0JywKICAgICAgICAgICAgJ3BnX3NlbmRfZXhlY3V0ZScgPT4gJ1NhZmVccGdfc2VuZF9leGVjdXRlJywKICAgICAgICAgICAgJ3BnX3NlbmRfcHJlcGFyZScgPT4gJ1NhZmVccGdfc2VuZF9wcmVwYXJlJywKICAgICAgICAgICAgJ3BnX3NlbmRfcXVlcnknID0+ICdTYWZlXHBnX3NlbmRfcXVlcnknLAogICAgICAgICAgICAncGdfc2VuZF9xdWVyeV9wYXJhbXMnID0+ICdTYWZlXHBnX3NlbmRfcXVlcnlfcGFyYW1zJywKICAgICAgICAgICAgJ3BnX3NvY2tldCcgPT4gJ1NhZmVccGdfc29ja2V0JywKICAgICAgICAgICAgJ3BnX3RyYWNlJyA9PiAnU2FmZVxwZ190cmFjZScsCiAgICAgICAgICAgICdwZ190dHknID0+ICdTYWZlXHBnX3R0eScsCiAgICAgICAgICAgICdwZ191cGRhdGUnID0+ICdTYWZlXHBnX3VwZGF0ZScsCiAgICAgICAgICAgICdwZ192ZXJzaW9uJyA9PiAnU2FmZVxwZ192ZXJzaW9uJywKICAgICAgICAgICAgJ3BocGNyZWRpdHMnID0+ICdTYWZlXHBocGNyZWRpdHMnLAogICAgICAgICAgICAncGhwaW5mbycgPT4gJ1NhZmVccGhwaW5mbycsCiAgICAgICAgICAgICdwbmcyd2JtcCcgPT4gJ1NhZmVccG5nMndibXAnLAogICAgICAgICAgICAncG9zaXhfYWNjZXNzJyA9PiAnU2FmZVxwb3NpeF9hY2Nlc3MnLAogICAgICAgICAgICAncG9zaXhfZ2V0Z3JuYW0nID0+ICdTYWZlXHBvc2l4X2dldGdybmFtJywKICAgICAgICAgICAgJ3Bvc2l4X2dldHBnaWQnID0+ICdTYWZlXHBvc2l4X2dldHBnaWQnLAogICAgICAgICAgICAncG9zaXhfaW5pdGdyb3VwcycgPT4gJ1NhZmVccG9zaXhfaW5pdGdyb3VwcycsCiAgICAgICAgICAgICdwb3NpeF9raWxsJyA9PiAnU2FmZVxwb3NpeF9raWxsJywKICAgICAgICAgICAgJ3Bvc2l4X21rZmlmbycgPT4gJ1NhZmVccG9zaXhfbWtmaWZvJywKICAgICAgICAgICAgJ3Bvc2l4X21rbm9kJyA9PiAnU2FmZVxwb3NpeF9ta25vZCcsCiAgICAgICAgICAgICdwb3NpeF9zZXRlZ2lkJyA9PiAnU2FmZVxwb3NpeF9zZXRlZ2lkJywKICAgICAgICAgICAgJ3Bvc2l4X3NldGV1aWQnID0+ICdTYWZlXHBvc2l4X3NldGV1aWQnLAogICAgICAgICAgICAncG9zaXhfc2V0Z2lkJyA9PiAnU2FmZVxwb3NpeF9zZXRnaWQnLAogICAgICAgICAgICAncG9zaXhfc2V0cGdpZCcgPT4gJ1NhZmVccG9zaXhfc2V0cGdpZCcsCiAgICAgICAgICAgICdwb3NpeF9zZXRybGltaXQnID0+ICdTYWZlXHBvc2l4X3NldHJsaW1pdCcsCiAgICAgICAgICAgICdwb3NpeF9zZXR1aWQnID0+ICdTYWZlXHBvc2l4X3NldHVpZCcsCiAgICAgICAgICAgICdwcmVnX21hdGNoJyA9PiAnU2FmZVxwcmVnX21hdGNoJywKICAgICAgICAgICAgJ3ByZWdfbWF0Y2hfYWxsJyA9PiAnU2FmZVxwcmVnX21hdGNoX2FsbCcsCiAgICAgICAgICAgICdwcmVnX3JlcGxhY2UnID0+ICdTYWZlXHByZWdfcmVwbGFjZScsCiAgICAgICAgICAgICdwcmVnX3NwbGl0JyA9PiAnU2FmZVxwcmVnX3NwbGl0JywKICAgICAgICAgICAgJ3Byb2NfZ2V0X3N0YXR1cycgPT4gJ1NhZmVccHJvY19nZXRfc3RhdHVzJywKICAgICAgICAgICAgJ3Byb2NfbmljZScgPT4gJ1NhZmVccHJvY19uaWNlJywKICAgICAgICAgICAgJ3BzcGVsbF9hZGRfdG9fcGVyc29uYWwnID0+ICdTYWZlXHBzcGVsbF9hZGRfdG9fcGVyc29uYWwnLAogICAgICAgICAgICAncHNwZWxsX2FkZF90b19zZXNzaW9uJyA9PiAnU2FmZVxwc3BlbGxfYWRkX3RvX3Nlc3Npb24nLAogICAgICAgICAgICAncHNwZWxsX2NsZWFyX3Nlc3Npb24nID0+ICdTYWZlXHBzcGVsbF9jbGVhcl9zZXNzaW9uJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfY3JlYXRlJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX2NyZWF0ZScsCiAgICAgICAgICAgICdwc3BlbGxfY29uZmlnX2RhdGFfZGlyJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX2RhdGFfZGlyJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfZGljdF9kaXInID0+ICdTYWZlXHBzcGVsbF9jb25maWdfZGljdF9kaXInLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19pZ25vcmUnID0+ICdTYWZlXHBzcGVsbF9jb25maWdfaWdub3JlJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfbW9kZScgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19tb2RlJywKICAgICAgICAgICAgJ3BzcGVsbF9jb25maWdfcGVyc29uYWwnID0+ICdTYWZlXHBzcGVsbF9jb25maWdfcGVyc29uYWwnLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19yZXBsJyA9PiAnU2FmZVxwc3BlbGxfY29uZmlnX3JlcGwnLAogICAgICAgICAgICAncHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcicgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcicsCiAgICAgICAgICAgICdwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCcgPT4gJ1NhZmVccHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwnLAogICAgICAgICAgICAncHNwZWxsX25ldycgPT4gJ1NhZmVccHNwZWxsX25ldycsCiAgICAgICAgICAgICdwc3BlbGxfbmV3X2NvbmZpZycgPT4gJ1NhZmVccHNwZWxsX25ld19jb25maWcnLAogICAgICAgICAgICAncHNwZWxsX3NhdmVfd29yZGxpc3QnID0+ICdTYWZlXHBzcGVsbF9zYXZlX3dvcmRsaXN0JywKICAgICAgICAgICAgJ3BzcGVsbF9zdG9yZV9yZXBsYWNlbWVudCcgPT4gJ1NhZmVccHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50JywKICAgICAgICAgICAgJ3BzX2FkZF9sYXVuY2hsaW5rJyA9PiAnU2FmZVxwc19hZGRfbGF1bmNobGluaycsCiAgICAgICAgICAgICdwc19hZGRfbG9jYWxsaW5rJyA9PiAnU2FmZVxwc19hZGRfbG9jYWxsaW5rJywKICAgICAgICAgICAgJ3BzX2FkZF9ub3RlJyA9PiAnU2FmZVxwc19hZGRfbm90ZScsCiAgICAgICAgICAgICdwc19hZGRfcGRmbGluaycgPT4gJ1NhZmVccHNfYWRkX3BkZmxpbmsnLAogICAgICAgICAgICAncHNfYWRkX3dlYmxpbmsnID0+ICdTYWZlXHBzX2FkZF93ZWJsaW5rJywKICAgICAgICAgICAgJ3BzX2FyYycgPT4gJ1NhZmVccHNfYXJjJywKICAgICAgICAgICAgJ3BzX2FyY24nID0+ICdTYWZlXHBzX2FyY24nLAogICAgICAgICAgICAncHNfYmVnaW5fcGFnZScgPT4gJ1NhZmVccHNfYmVnaW5fcGFnZScsCiAgICAgICAgICAgICdwc19iZWdpbl9wYXR0ZXJuJyA9PiAnU2FmZVxwc19iZWdpbl9wYXR0ZXJuJywKICAgICAgICAgICAgJ3BzX2JlZ2luX3RlbXBsYXRlJyA9PiAnU2FmZVxwc19iZWdpbl90ZW1wbGF0ZScsCiAgICAgICAgICAgICdwc19jaXJjbGUnID0+ICdTYWZlXHBzX2NpcmNsZScsCiAgICAgICAgICAgICdwc19jbGlwJyA9PiAnU2FmZVxwc19jbGlwJywKICAgICAgICAgICAgJ3BzX2Nsb3NlJyA9PiAnU2FmZVxwc19jbG9zZScsCiAgICAgICAgICAgICdwc19jbG9zZXBhdGgnID0+ICdTYWZlXHBzX2Nsb3NlcGF0aCcsCiAgICAgICAgICAgICdwc19jbG9zZXBhdGhfc3Ryb2tlJyA9PiAnU2FmZVxwc19jbG9zZXBhdGhfc3Ryb2tlJywKICAgICAgICAgICAgJ3BzX2Nsb3NlX2ltYWdlJyA9PiAnU2FmZVxwc19jbG9zZV9pbWFnZScsCiAgICAgICAgICAgICdwc19jb250aW51ZV90ZXh0JyA9PiAnU2FmZVxwc19jb250aW51ZV90ZXh0JywKICAgICAgICAgICAgJ3BzX2N1cnZldG8nID0+ICdTYWZlXHBzX2N1cnZldG8nLAogICAgICAgICAgICAncHNfZGVsZXRlJyA9PiAnU2FmZVxwc19kZWxldGUnLAogICAgICAgICAgICAncHNfZW5kX3BhZ2UnID0+ICdTYWZlXHBzX2VuZF9wYWdlJywKICAgICAgICAgICAgJ3BzX2VuZF9wYXR0ZXJuJyA9PiAnU2FmZVxwc19lbmRfcGF0dGVybicsCiAgICAgICAgICAgICdwc19lbmRfdGVtcGxhdGUnID0+ICdTYWZlXHBzX2VuZF90ZW1wbGF0ZScsCiAgICAgICAgICAgICdwc19maWxsJyA9PiAnU2FmZVxwc19maWxsJywKICAgICAgICAgICAgJ3BzX2ZpbGxfc3Ryb2tlJyA9PiAnU2FmZVxwc19maWxsX3N0cm9rZScsCiAgICAgICAgICAgICdwc19nZXRfcGFyYW1ldGVyJyA9PiAnU2FmZVxwc19nZXRfcGFyYW1ldGVyJywKICAgICAgICAgICAgJ3BzX2h5cGhlbmF0ZScgPT4gJ1NhZmVccHNfaHlwaGVuYXRlJywKICAgICAgICAgICAgJ3BzX2luY2x1ZGVfZmlsZScgPT4gJ1NhZmVccHNfaW5jbHVkZV9maWxlJywKICAgICAgICAgICAgJ3BzX2xpbmV0bycgPT4gJ1NhZmVccHNfbGluZXRvJywKICAgICAgICAgICAgJ3BzX21vdmV0bycgPT4gJ1NhZmVccHNfbW92ZXRvJywKICAgICAgICAgICAgJ3BzX25ldycgPT4gJ1NhZmVccHNfbmV3JywKICAgICAgICAgICAgJ3BzX29wZW5fZmlsZScgPT4gJ1NhZmVccHNfb3Blbl9maWxlJywKICAgICAgICAgICAgJ3BzX3BsYWNlX2ltYWdlJyA9PiAnU2FmZVxwc19wbGFjZV9pbWFnZScsCiAgICAgICAgICAgICdwc19yZWN0JyA9PiAnU2FmZVxwc19yZWN0JywKICAgICAgICAgICAgJ3BzX3Jlc3RvcmUnID0+ICdTYWZlXHBzX3Jlc3RvcmUnLAogICAgICAgICAgICAncHNfcm90YXRlJyA9PiAnU2FmZVxwc19yb3RhdGUnLAogICAgICAgICAgICAncHNfc2F2ZScgPT4gJ1NhZmVccHNfc2F2ZScsCiAgICAgICAgICAgICdwc19zY2FsZScgPT4gJ1NhZmVccHNfc2NhbGUnLAogICAgICAgICAgICAncHNfc2V0Y29sb3InID0+ICdTYWZlXHBzX3NldGNvbG9yJywKICAgICAgICAgICAgJ3BzX3NldGRhc2gnID0+ICdTYWZlXHBzX3NldGRhc2gnLAogICAgICAgICAgICAncHNfc2V0ZmxhdCcgPT4gJ1NhZmVccHNfc2V0ZmxhdCcsCiAgICAgICAgICAgICdwc19zZXRmb250JyA9PiAnU2FmZVxwc19zZXRmb250JywKICAgICAgICAgICAgJ3BzX3NldGdyYXknID0+ICdTYWZlXHBzX3NldGdyYXknLAogICAgICAgICAgICAncHNfc2V0bGluZWNhcCcgPT4gJ1NhZmVccHNfc2V0bGluZWNhcCcsCiAgICAgICAgICAgICdwc19zZXRsaW5lam9pbicgPT4gJ1NhZmVccHNfc2V0bGluZWpvaW4nLAogICAgICAgICAgICAncHNfc2V0bGluZXdpZHRoJyA9PiAnU2FmZVxwc19zZXRsaW5ld2lkdGgnLAogICAgICAgICAgICAncHNfc2V0bWl0ZXJsaW1pdCcgPT4gJ1NhZmVccHNfc2V0bWl0ZXJsaW1pdCcsCiAgICAgICAgICAgICdwc19zZXRvdmVycHJpbnRtb2RlJyA9PiAnU2FmZVxwc19zZXRvdmVycHJpbnRtb2RlJywKICAgICAgICAgICAgJ3BzX3NldHBvbHlkYXNoJyA9PiAnU2FmZVxwc19zZXRwb2x5ZGFzaCcsCiAgICAgICAgICAgICdwc19zZXRfYm9yZGVyX2NvbG9yJyA9PiAnU2FmZVxwc19zZXRfYm9yZGVyX2NvbG9yJywKICAgICAgICAgICAgJ3BzX3NldF9ib3JkZXJfZGFzaCcgPT4gJ1NhZmVccHNfc2V0X2JvcmRlcl9kYXNoJywKICAgICAgICAgICAgJ3BzX3NldF9ib3JkZXJfc3R5bGUnID0+ICdTYWZlXHBzX3NldF9ib3JkZXJfc3R5bGUnLAogICAgICAgICAgICAncHNfc2V0X2luZm8nID0+ICdTYWZlXHBzX3NldF9pbmZvJywKICAgICAgICAgICAgJ3BzX3NldF9wYXJhbWV0ZXInID0+ICdTYWZlXHBzX3NldF9wYXJhbWV0ZXInLAogICAgICAgICAgICAncHNfc2V0X3RleHRfcG9zJyA9PiAnU2FmZVxwc19zZXRfdGV4dF9wb3MnLAogICAgICAgICAgICAncHNfc2V0X3ZhbHVlJyA9PiAnU2FmZVxwc19zZXRfdmFsdWUnLAogICAgICAgICAgICAncHNfc2hhZGluZycgPT4gJ1NhZmVccHNfc2hhZGluZycsCiAgICAgICAgICAgICdwc19zaGFkaW5nX3BhdHRlcm4nID0+ICdTYWZlXHBzX3NoYWRpbmdfcGF0dGVybicsCiAgICAgICAgICAgICdwc19zaGZpbGwnID0+ICdTYWZlXHBzX3NoZmlsbCcsCiAgICAgICAgICAgICdwc19zaG93JyA9PiAnU2FmZVxwc19zaG93JywKICAgICAgICAgICAgJ3BzX3Nob3cyJyA9PiAnU2FmZVxwc19zaG93MicsCiAgICAgICAgICAgICdwc19zaG93X3h5JyA9PiAnU2FmZVxwc19zaG93X3h5JywKICAgICAgICAgICAgJ3BzX3Nob3dfeHkyJyA9PiAnU2FmZVxwc19zaG93X3h5MicsCiAgICAgICAgICAgICdwc19zdHJva2UnID0+ICdTYWZlXHBzX3N0cm9rZScsCiAgICAgICAgICAgICdwc19zeW1ib2wnID0+ICdTYWZlXHBzX3N5bWJvbCcsCiAgICAgICAgICAgICdwc190cmFuc2xhdGUnID0+ICdTYWZlXHBzX3RyYW5zbGF0ZScsCiAgICAgICAgICAgICdwdXRlbnYnID0+ICdTYWZlXHB1dGVudicsCiAgICAgICAgICAgICdyZWFkZmlsZScgPT4gJ1NhZmVccmVhZGZpbGUnLAogICAgICAgICAgICAncmVhZGd6ZmlsZScgPT4gJ1NhZmVccmVhZGd6ZmlsZScsCiAgICAgICAgICAgICdyZWFkbGluZV9hZGRfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfYWRkX2hpc3RvcnknLAogICAgICAgICAgICAncmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsJyA9PiAnU2FmZVxyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwnLAogICAgICAgICAgICAncmVhZGxpbmVfY2xlYXJfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfY2xlYXJfaGlzdG9yeScsCiAgICAgICAgICAgICdyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uJyA9PiAnU2FmZVxyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uJywKICAgICAgICAgICAgJ3JlYWRsaW5lX3JlYWRfaGlzdG9yeScgPT4gJ1NhZmVccmVhZGxpbmVfcmVhZF9oaXN0b3J5JywKICAgICAgICAgICAgJ3JlYWRsaW5lX3dyaXRlX2hpc3RvcnknID0+ICdTYWZlXHJlYWRsaW5lX3dyaXRlX2hpc3RvcnknLAogICAgICAgICAgICAncmVhZGxpbmsnID0+ICdTYWZlXHJlYWRsaW5rJywKICAgICAgICAgICAgJ3JlYWxwYXRoJyA9PiAnU2FmZVxyZWFscGF0aCcsCiAgICAgICAgICAgICdyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJyA9PiAnU2FmZVxyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJywKICAgICAgICAgICAgJ3JlbmFtZScgPT4gJ1NhZmVccmVuYW1lJywKICAgICAgICAgICAgJ3Jld2luZCcgPT4gJ1NhZmVccmV3aW5kJywKICAgICAgICAgICAgJ3Jld2luZGRpcicgPT4gJ1NhZmVccmV3aW5kZGlyJywKICAgICAgICAgICAgJ3JtZGlyJyA9PiAnU2FmZVxybWRpcicsCiAgICAgICAgICAgICdycG1hZGR0YWcnID0+ICdTYWZlXHJwbWFkZHRhZycsCiAgICAgICAgICAgICdycmRfY3JlYXRlJyA9PiAnU2FmZVxycmRfY3JlYXRlJywKICAgICAgICAgICAgJ3Jzb3J0JyA9PiAnU2FmZVxyc29ydCcsCiAgICAgICAgICAgICdzYXBpX3dpbmRvd3NfY3BfY29udicgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2NwX2NvbnYnLAogICAgICAgICAgICAnc2FwaV93aW5kb3dzX2NwX3NldCcgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2NwX3NldCcsCiAgICAgICAgICAgICdzYXBpX3dpbmRvd3NfZ2VuZXJhdGVfY3RybF9ldmVudCcgPT4gJ1NhZmVcc2FwaV93aW5kb3dzX2dlbmVyYXRlX2N0cmxfZXZlbnQnLAogICAgICAgICAgICAnc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQnID0+ICdTYWZlXHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0JywKICAgICAgICAgICAgJ3NjYW5kaXInID0+ICdTYWZlXHNjYW5kaXInLAogICAgICAgICAgICAnc2VtX2FjcXVpcmUnID0+ICdTYWZlXHNlbV9hY3F1aXJlJywKICAgICAgICAgICAgJ3NlbV9nZXQnID0+ICdTYWZlXHNlbV9nZXQnLAogICAgICAgICAgICAnc2VtX3JlbGVhc2UnID0+ICdTYWZlXHNlbV9yZWxlYXNlJywKICAgICAgICAgICAgJ3NlbV9yZW1vdmUnID0+ICdTYWZlXHNlbV9yZW1vdmUnLAogICAgICAgICAgICAnc2Vzc2lvbl9hYm9ydCcgPT4gJ1NhZmVcc2Vzc2lvbl9hYm9ydCcsCiAgICAgICAgICAgICdzZXNzaW9uX2RlY29kZScgPT4gJ1NhZmVcc2Vzc2lvbl9kZWNvZGUnLAogICAgICAgICAgICAnc2Vzc2lvbl9kZXN0cm95JyA9PiAnU2FmZVxzZXNzaW9uX2Rlc3Ryb3knLAogICAgICAgICAgICAnc2Vzc2lvbl9yZWdlbmVyYXRlX2lkJyA9PiAnU2FmZVxzZXNzaW9uX3JlZ2VuZXJhdGVfaWQnLAogICAgICAgICAgICAnc2Vzc2lvbl9yZXNldCcgPT4gJ1NhZmVcc2Vzc2lvbl9yZXNldCcsCiAgICAgICAgICAgICdzZXNzaW9uX3Vuc2V0JyA9PiAnU2FmZVxzZXNzaW9uX3Vuc2V0JywKICAgICAgICAgICAgJ3Nlc3Npb25fd3JpdGVfY2xvc2UnID0+ICdTYWZlXHNlc3Npb25fd3JpdGVfY2xvc2UnLAogICAgICAgICAgICAnc2V0dHlwZScgPT4gJ1NhZmVcc2V0dHlwZScsCiAgICAgICAgICAgICdzZXRfaW5jbHVkZV9wYXRoJyA9PiAnU2FmZVxzZXRfaW5jbHVkZV9wYXRoJywKICAgICAgICAgICAgJ3NldF90aW1lX2xpbWl0JyA9PiAnU2FmZVxzZXRfdGltZV9saW1pdCcsCiAgICAgICAgICAgICdzaGExX2ZpbGUnID0+ICdTYWZlXHNoYTFfZmlsZScsCiAgICAgICAgICAgICdzaG1vcF9kZWxldGUnID0+ICdTYWZlXHNobW9wX2RlbGV0ZScsCiAgICAgICAgICAgICdzaG1vcF9yZWFkJyA9PiAnU2FmZVxzaG1vcF9yZWFkJywKICAgICAgICAgICAgJ3NobW9wX3dyaXRlJyA9PiAnU2FmZVxzaG1vcF93cml0ZScsCiAgICAgICAgICAgICdzaG1fcHV0X3ZhcicgPT4gJ1NhZmVcc2htX3B1dF92YXInLAogICAgICAgICAgICAnc2htX3JlbW92ZScgPT4gJ1NhZmVcc2htX3JlbW92ZScsCiAgICAgICAgICAgICdzaG1fcmVtb3ZlX3ZhcicgPT4gJ1NhZmVcc2htX3JlbW92ZV92YXInLAogICAgICAgICAgICAnc2h1ZmZsZScgPT4gJ1NhZmVcc2h1ZmZsZScsCiAgICAgICAgICAgICdzaW1wbGV4bWxfaW1wb3J0X2RvbScgPT4gJ1NhZmVcc2ltcGxleG1sX2ltcG9ydF9kb20nLAogICAgICAgICAgICAnc2ltcGxleG1sX2xvYWRfZmlsZScgPT4gJ1NhZmVcc2ltcGxleG1sX2xvYWRfZmlsZScsCiAgICAgICAgICAgICdzaW1wbGV4bWxfbG9hZF9zdHJpbmcnID0+ICdTYWZlXHNpbXBsZXhtbF9sb2FkX3N0cmluZycsCiAgICAgICAgICAgICdzbGVlcCcgPT4gJ1NhZmVcc2xlZXAnLAogICAgICAgICAgICAnc29ja2V0X2FjY2VwdCcgPT4gJ1NhZmVcc29ja2V0X2FjY2VwdCcsCiAgICAgICAgICAgICdzb2NrZXRfYWRkcmluZm9fYmluZCcgPT4gJ1NhZmVcc29ja2V0X2FkZHJpbmZvX2JpbmQnLAogICAgICAgICAgICAnc29ja2V0X2FkZHJpbmZvX2Nvbm5lY3QnID0+ICdTYWZlXHNvY2tldF9hZGRyaW5mb19jb25uZWN0JywKICAgICAgICAgICAgJ3NvY2tldF9iaW5kJyA9PiAnU2FmZVxzb2NrZXRfYmluZCcsCiAgICAgICAgICAgICdzb2NrZXRfY29ubmVjdCcgPT4gJ1NhZmVcc29ja2V0X2Nvbm5lY3QnLAogICAgICAgICAgICAnc29ja2V0X2NyZWF0ZScgPT4gJ1NhZmVcc29ja2V0X2NyZWF0ZScsCiAgICAgICAgICAgICdzb2NrZXRfY3JlYXRlX2xpc3RlbicgPT4gJ1NhZmVcc29ja2V0X2NyZWF0ZV9saXN0ZW4nLAogICAgICAgICAgICAnc29ja2V0X2NyZWF0ZV9wYWlyJyA9PiAnU2FmZVxzb2NrZXRfY3JlYXRlX3BhaXInLAogICAgICAgICAgICAnc29ja2V0X2V4cG9ydF9zdHJlYW0nID0+ICdTYWZlXHNvY2tldF9leHBvcnRfc3RyZWFtJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRwZWVybmFtZScgPT4gJ1NhZmVcc29ja2V0X2dldHBlZXJuYW1lJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRzb2NrbmFtZScgPT4gJ1NhZmVcc29ja2V0X2dldHNvY2tuYW1lJywKICAgICAgICAgICAgJ3NvY2tldF9nZXRfb3B0aW9uJyA9PiAnU2FmZVxzb2NrZXRfZ2V0X29wdGlvbicsCiAgICAgICAgICAgICdzb2NrZXRfaW1wb3J0X3N0cmVhbScgPT4gJ1NhZmVcc29ja2V0X2ltcG9ydF9zdHJlYW0nLAogICAgICAgICAgICAnc29ja2V0X2xpc3RlbicgPT4gJ1NhZmVcc29ja2V0X2xpc3RlbicsCiAgICAgICAgICAgICdzb2NrZXRfcmVhZCcgPT4gJ1NhZmVcc29ja2V0X3JlYWQnLAogICAgICAgICAgICAnc29ja2V0X3NlbmQnID0+ICdTYWZlXHNvY2tldF9zZW5kJywKICAgICAgICAgICAgJ3NvY2tldF9zZW5kbXNnJyA9PiAnU2FmZVxzb2NrZXRfc2VuZG1zZycsCiAgICAgICAgICAgICdzb2NrZXRfc2VuZHRvJyA9PiAnU2FmZVxzb2NrZXRfc2VuZHRvJywKICAgICAgICAgICAgJ3NvY2tldF9zZXRfYmxvY2snID0+ICdTYWZlXHNvY2tldF9zZXRfYmxvY2snLAogICAgICAgICAgICAnc29ja2V0X3NldF9ub25ibG9jaycgPT4gJ1NhZmVcc29ja2V0X3NldF9ub25ibG9jaycsCiAgICAgICAgICAgICdzb2NrZXRfc2V0X29wdGlvbicgPT4gJ1NhZmVcc29ja2V0X3NldF9vcHRpb24nLAogICAgICAgICAgICAnc29ja2V0X3NodXRkb3duJyA9PiAnU2FmZVxzb2NrZXRfc2h1dGRvd24nLAogICAgICAgICAgICAnc29ja2V0X3dyaXRlJyA9PiAnU2FmZVxzb2NrZXRfd3JpdGUnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fZXhwb3J0JyA9PiAnU2FmZVxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0JyA9PiAnU2FmZVxzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQnLAogICAgICAgICAgICAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScgPT4gJ1NhZmVcc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScsCiAgICAgICAgICAgICdzb2RpdW1fY3J5cHRvX3B3aGFzaCcgPT4gJ1NhZmVcc29kaXVtX2NyeXB0b19wd2hhc2gnLAogICAgICAgICAgICAnc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyJyA9PiAnU2FmZVxzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHInLAogICAgICAgICAgICAnc29scl9nZXRfdmVyc2lvbicgPT4gJ1NhZmVcc29scl9nZXRfdmVyc2lvbicsCiAgICAgICAgICAgICdzb3J0JyA9PiAnU2FmZVxzb3J0JywKICAgICAgICAgICAgJ3NvdW5kZXgnID0+ICdTYWZlXHNvdW5kZXgnLAogICAgICAgICAgICAnc3BsX2F1dG9sb2FkX3JlZ2lzdGVyJyA9PiAnU2FmZVxzcGxfYXV0b2xvYWRfcmVnaXN0ZXInLAogICAgICAgICAgICAnc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXInID0+ICdTYWZlXHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyJywKICAgICAgICAgICAgJ3NwcmludGYnID0+ICdTYWZlXHNwcmludGYnLAogICAgICAgICAgICAnc3Fsc3J2X2JlZ2luX3RyYW5zYWN0aW9uJyA9PiAnU2FmZVxzcWxzcnZfYmVnaW5fdHJhbnNhY3Rpb24nLAogICAgICAgICAgICAnc3Fsc3J2X2NhbmNlbCcgPT4gJ1NhZmVcc3Fsc3J2X2NhbmNlbCcsCiAgICAgICAgICAgICdzcWxzcnZfY2xpZW50X2luZm8nID0+ICdTYWZlXHNxbHNydl9jbGllbnRfaW5mbycsCiAgICAgICAgICAgICdzcWxzcnZfY2xvc2UnID0+ICdTYWZlXHNxbHNydl9jbG9zZScsCiAgICAgICAgICAgICdzcWxzcnZfY29tbWl0JyA9PiAnU2FmZVxzcWxzcnZfY29tbWl0JywKICAgICAgICAgICAgJ3NxbHNydl9jb25maWd1cmUnID0+ICdTYWZlXHNxbHNydl9jb25maWd1cmUnLAogICAgICAgICAgICAnc3Fsc3J2X2V4ZWN1dGUnID0+ICdTYWZlXHNxbHNydl9leGVjdXRlJywKICAgICAgICAgICAgJ3NxbHNydl9mcmVlX3N0bXQnID0+ICdTYWZlXHNxbHNydl9mcmVlX3N0bXQnLAogICAgICAgICAgICAnc3Fsc3J2X2dldF9maWVsZCcgPT4gJ1NhZmVcc3Fsc3J2X2dldF9maWVsZCcsCiAgICAgICAgICAgICdzcWxzcnZfbmV4dF9yZXN1bHQnID0+ICdTYWZlXHNxbHNydl9uZXh0X3Jlc3VsdCcsCiAgICAgICAgICAgICdzcWxzcnZfbnVtX2ZpZWxkcycgPT4gJ1NhZmVcc3Fsc3J2X251bV9maWVsZHMnLAogICAgICAgICAgICAnc3Fsc3J2X251bV9yb3dzJyA9PiAnU2FmZVxzcWxzcnZfbnVtX3Jvd3MnLAogICAgICAgICAgICAnc3Fsc3J2X3ByZXBhcmUnID0+ICdTYWZlXHNxbHNydl9wcmVwYXJlJywKICAgICAgICAgICAgJ3NxbHNydl9xdWVyeScgPT4gJ1NhZmVcc3Fsc3J2X3F1ZXJ5JywKICAgICAgICAgICAgJ3NxbHNydl9yb2xsYmFjaycgPT4gJ1NhZmVcc3Fsc3J2X3JvbGxiYWNrJywKICAgICAgICAgICAgJ3NzZGVlcF9mdXp6eV9jb21wYXJlJyA9PiAnU2FmZVxzc2RlZXBfZnV6enlfY29tcGFyZScsCiAgICAgICAgICAgICdzc2RlZXBfZnV6enlfaGFzaCcgPT4gJ1NhZmVcc3NkZWVwX2Z1enp5X2hhc2gnLAogICAgICAgICAgICAnc3NkZWVwX2Z1enp5X2hhc2hfZmlsZW5hbWUnID0+ICdTYWZlXHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9hZ2VudCcgPT4gJ1NhZmVcc3NoMl9hdXRoX2FnZW50JywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZScgPT4gJ1NhZmVcc3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9wYXNzd29yZCcgPT4gJ1NhZmVcc3NoMl9hdXRoX3Bhc3N3b3JkJywKICAgICAgICAgICAgJ3NzaDJfYXV0aF9wdWJrZXlfZmlsZScgPT4gJ1NhZmVcc3NoMl9hdXRoX3B1YmtleV9maWxlJywKICAgICAgICAgICAgJ3NzaDJfY29ubmVjdCcgPT4gJ1NhZmVcc3NoMl9jb25uZWN0JywKICAgICAgICAgICAgJ3NzaDJfZGlzY29ubmVjdCcgPT4gJ1NhZmVcc3NoMl9kaXNjb25uZWN0JywKICAgICAgICAgICAgJ3NzaDJfZXhlYycgPT4gJ1NhZmVcc3NoMl9leGVjJywKICAgICAgICAgICAgJ3NzaDJfcHVibGlja2V5X2FkZCcgPT4gJ1NhZmVcc3NoMl9wdWJsaWNrZXlfYWRkJywKICAgICAgICAgICAgJ3NzaDJfcHVibGlja2V5X2luaXQnID0+ICdTYWZlXHNzaDJfcHVibGlja2V5X2luaXQnLAogICAgICAgICAgICAnc3NoMl9wdWJsaWNrZXlfcmVtb3ZlJyA9PiAnU2FmZVxzc2gyX3B1YmxpY2tleV9yZW1vdmUnLAogICAgICAgICAgICAnc3NoMl9zY3BfcmVjdicgPT4gJ1NhZmVcc3NoMl9zY3BfcmVjdicsCiAgICAgICAgICAgICdzc2gyX3NjcF9zZW5kJyA9PiAnU2FmZVxzc2gyX3NjcF9zZW5kJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cCcgPT4gJ1NhZmVcc3NoMl9zZnRwJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9jaG1vZCcgPT4gJ1NhZmVcc3NoMl9zZnRwX2NobW9kJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9ta2RpcicgPT4gJ1NhZmVcc3NoMl9zZnRwX21rZGlyJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF9yZW5hbWUnID0+ICdTYWZlXHNzaDJfc2Z0cF9yZW5hbWUnLAogICAgICAgICAgICAnc3NoMl9zZnRwX3JtZGlyJyA9PiAnU2FmZVxzc2gyX3NmdHBfcm1kaXInLAogICAgICAgICAgICAnc3NoMl9zZnRwX3N5bWxpbmsnID0+ICdTYWZlXHNzaDJfc2Z0cF9zeW1saW5rJywKICAgICAgICAgICAgJ3NzaDJfc2Z0cF91bmxpbmsnID0+ICdTYWZlXHNzaDJfc2Z0cF91bmxpbmsnLAogICAgICAgICAgICAnc3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcycgPT4gJ1NhZmVcc3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcycsCiAgICAgICAgICAgICdzdHJlYW1fY29weV90b19zdHJlYW0nID0+ICdTYWZlXHN0cmVhbV9jb3B5X3RvX3N0cmVhbScsCiAgICAgICAgICAgICdzdHJlYW1fZmlsdGVyX2FwcGVuZCcgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9hcHBlbmQnLAogICAgICAgICAgICAnc3RyZWFtX2ZpbHRlcl9wcmVwZW5kJyA9PiAnU2FmZVxzdHJlYW1fZmlsdGVyX3ByZXBlbmQnLAogICAgICAgICAgICAnc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcicgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9yZWdpc3RlcicsCiAgICAgICAgICAgICdzdHJlYW1fZmlsdGVyX3JlbW92ZScgPT4gJ1NhZmVcc3RyZWFtX2ZpbHRlcl9yZW1vdmUnLAogICAgICAgICAgICAnc3RyZWFtX2dldF9jb250ZW50cycgPT4gJ1NhZmVcc3RyZWFtX2dldF9jb250ZW50cycsCiAgICAgICAgICAgICdzdHJlYW1faXNhdHR5JyA9PiAnU2FmZVxzdHJlYW1faXNhdHR5JywKICAgICAgICAgICAgJ3N0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aCcgPT4gJ1NhZmVcc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoJywKICAgICAgICAgICAgJ3N0cmVhbV9zZXRfYmxvY2tpbmcnID0+ICdTYWZlXHN0cmVhbV9zZXRfYmxvY2tpbmcnLAogICAgICAgICAgICAnc3RyZWFtX3NldF90aW1lb3V0JyA9PiAnU2FmZVxzdHJlYW1fc2V0X3RpbWVvdXQnLAogICAgICAgICAgICAnc3RyZWFtX3NvY2tldF9hY2NlcHQnID0+ICdTYWZlXHN0cmVhbV9zb2NrZXRfYWNjZXB0JywKICAgICAgICAgICAgJ3N0cmVhbV9zb2NrZXRfY2xpZW50JyA9PiAnU2FmZVxzdHJlYW1fc29ja2V0X2NsaWVudCcsCiAgICAgICAgICAgICdzdHJlYW1fc29ja2V0X3BhaXInID0+ICdTYWZlXHN0cmVhbV9zb2NrZXRfcGFpcicsCiAgICAgICAgICAgICdzdHJlYW1fc29ja2V0X3NlcnZlcicgPT4gJ1NhZmVcc3RyZWFtX3NvY2tldF9zZXJ2ZXInLAogICAgICAgICAgICAnc3RyZWFtX3NvY2tldF9zaHV0ZG93bicgPT4gJ1NhZmVcc3RyZWFtX3NvY2tldF9zaHV0ZG93bicsCiAgICAgICAgICAgICdzdHJlYW1fc3VwcG9ydHNfbG9jaycgPT4gJ1NhZmVcc3RyZWFtX3N1cHBvcnRzX2xvY2snLAogICAgICAgICAgICAnc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXInID0+ICdTYWZlXHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyJywKICAgICAgICAgICAgJ3N0cmVhbV93cmFwcGVyX3Jlc3RvcmUnID0+ICdTYWZlXHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUnLAogICAgICAgICAgICAnc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcicgPT4gJ1NhZmVcc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcicsCiAgICAgICAgICAgICdzdHJwdGltZScgPT4gJ1NhZmVcc3RycHRpbWUnLAogICAgICAgICAgICAnc3RydG90aW1lJyA9PiAnU2FmZVxzdHJ0b3RpbWUnLAogICAgICAgICAgICAnc3Vic3RyJyA9PiAnU2FmZVxzdWJzdHInLAogICAgICAgICAgICAnc3dvb2xlX2FzeW5jX3dyaXRlJyA9PiAnU2FmZVxzd29vbGVfYXN5bmNfd3JpdGUnLAogICAgICAgICAgICAnc3dvb2xlX2FzeW5jX3dyaXRlZmlsZScgPT4gJ1NhZmVcc3dvb2xlX2FzeW5jX3dyaXRlZmlsZScsCiAgICAgICAgICAgICdzd29vbGVfZXZlbnRfZGVmZXInID0+ICdTYWZlXHN3b29sZV9ldmVudF9kZWZlcicsCiAgICAgICAgICAgICdzd29vbGVfZXZlbnRfZGVsJyA9PiAnU2FmZVxzd29vbGVfZXZlbnRfZGVsJywKICAgICAgICAgICAgJ3N3b29sZV9ldmVudF93cml0ZScgPT4gJ1NhZmVcc3dvb2xlX2V2ZW50X3dyaXRlJywKICAgICAgICAgICAgJ3N5bWxpbmsnID0+ICdTYWZlXHN5bWxpbmsnLAogICAgICAgICAgICAnc3lzbG9nJyA9PiAnU2FmZVxzeXNsb2cnLAogICAgICAgICAgICAnc3lzdGVtJyA9PiAnU2FmZVxzeXN0ZW0nLAogICAgICAgICAgICAndGVtcG5hbScgPT4gJ1NhZmVcdGVtcG5hbScsCiAgICAgICAgICAgICd0aW1lem9uZV9uYW1lX2Zyb21fYWJicicgPT4gJ1NhZmVcdGltZXpvbmVfbmFtZV9mcm9tX2FiYnInLAogICAgICAgICAgICAndGltZV9uYW5vc2xlZXAnID0+ICdTYWZlXHRpbWVfbmFub3NsZWVwJywKICAgICAgICAgICAgJ3RpbWVfc2xlZXBfdW50aWwnID0+ICdTYWZlXHRpbWVfc2xlZXBfdW50aWwnLAogICAgICAgICAgICAndG1wZmlsZScgPT4gJ1NhZmVcdG1wZmlsZScsCiAgICAgICAgICAgICd0b3VjaCcgPT4gJ1NhZmVcdG91Y2gnLAogICAgICAgICAgICAndWFzb3J0JyA9PiAnU2FmZVx1YXNvcnQnLAogICAgICAgICAgICAndWtzb3J0JyA9PiAnU2FmZVx1a3NvcnQnLAogICAgICAgICAgICAndW5saW5rJyA9PiAnU2FmZVx1bmxpbmsnLAogICAgICAgICAgICAndW5wYWNrJyA9PiAnU2FmZVx1bnBhY2snLAogICAgICAgICAgICAndW9wel9leHRlbmQnID0+ICdTYWZlXHVvcHpfZXh0ZW5kJywKICAgICAgICAgICAgJ3VvcHpfaW1wbGVtZW50JyA9PiAnU2FmZVx1b3B6X2ltcGxlbWVudCcsCiAgICAgICAgICAgICd1c29ydCcgPT4gJ1NhZmVcdXNvcnQnLAogICAgICAgICAgICAndmlydHVhbCcgPT4gJ1NhZmVcdmlydHVhbCcsCiAgICAgICAgICAgICd2c3ByaW50ZicgPT4gJ1NhZmVcdnNwcmludGYnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9iZGlmZicgPT4gJ1NhZmVceGRpZmZfZmlsZV9iZGlmZicsCiAgICAgICAgICAgICd4ZGlmZl9maWxlX2JwYXRjaCcgPT4gJ1NhZmVceGRpZmZfZmlsZV9icGF0Y2gnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9kaWZmJyA9PiAnU2FmZVx4ZGlmZl9maWxlX2RpZmYnLAogICAgICAgICAgICAneGRpZmZfZmlsZV9kaWZmX2JpbmFyeScgPT4gJ1NhZmVceGRpZmZfZmlsZV9kaWZmX2JpbmFyeScsCiAgICAgICAgICAgICd4ZGlmZl9maWxlX3BhdGNoX2JpbmFyeScgPT4gJ1NhZmVceGRpZmZfZmlsZV9wYXRjaF9iaW5hcnknLAogICAgICAgICAgICAneGRpZmZfZmlsZV9yYWJkaWZmJyA9PiAnU2FmZVx4ZGlmZl9maWxlX3JhYmRpZmYnLAogICAgICAgICAgICAneGRpZmZfc3RyaW5nX2JwYXRjaCcgPT4gJ1NhZmVceGRpZmZfc3RyaW5nX2JwYXRjaCcsCiAgICAgICAgICAgICd4ZGlmZl9zdHJpbmdfcGF0Y2gnID0+ICdTYWZlXHhkaWZmX3N0cmluZ19wYXRjaCcsCiAgICAgICAgICAgICd4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5JyA9PiAnU2FmZVx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5JywKICAgICAgICAgICAgJ3htbHJwY19zZXRfdHlwZScgPT4gJ1NhZmVceG1scnBjX3NldF90eXBlJywKICAgICAgICAgICAgJ3htbF9wYXJzZXJfY3JlYXRlJyA9PiAnU2FmZVx4bWxfcGFyc2VyX2NyZWF0ZScsCiAgICAgICAgICAgICd4bWxfcGFyc2VyX2NyZWF0ZV9ucycgPT4gJ1NhZmVceG1sX3BhcnNlcl9jcmVhdGVfbnMnLAogICAgICAgICAgICAneG1sX3NldF9vYmplY3QnID0+ICdTYWZlXHhtbF9zZXRfb2JqZWN0JywKICAgICAgICAgICAgJ3lhbWxfcGFyc2UnID0+ICdTYWZlXHlhbWxfcGFyc2UnLAogICAgICAgICAgICAneWFtbF9wYXJzZV9maWxlJyA9PiAnU2FmZVx5YW1sX3BhcnNlX2ZpbGUnLAogICAgICAgICAgICAneWFtbF9wYXJzZV91cmwnID0+ICdTYWZlXHlhbWxfcGFyc2VfdXJsJywKICAgICAgICAgICAgJ3lhel9jY2xfcGFyc2UnID0+ICdTYWZlXHlhel9jY2xfcGFyc2UnLAogICAgICAgICAgICAneWF6X2Nsb3NlJyA9PiAnU2FmZVx5YXpfY2xvc2UnLAogICAgICAgICAgICAneWF6X2Nvbm5lY3QnID0+ICdTYWZlXHlhel9jb25uZWN0JywKICAgICAgICAgICAgJ3lhel9kYXRhYmFzZScgPT4gJ1NhZmVceWF6X2RhdGFiYXNlJywKICAgICAgICAgICAgJ3lhel9lbGVtZW50JyA9PiAnU2FmZVx5YXpfZWxlbWVudCcsCiAgICAgICAgICAgICd5YXpfcHJlc2VudCcgPT4gJ1NhZmVceWF6X3ByZXNlbnQnLAogICAgICAgICAgICAneWF6X3NlYXJjaCcgPT4gJ1NhZmVceWF6X3NlYXJjaCcsCiAgICAgICAgICAgICd5YXpfd2FpdCcgPT4gJ1NhZmVceWF6X3dhaXQnLAogICAgICAgICAgICAnemlwX2VudHJ5X2Nsb3NlJyA9PiAnU2FmZVx6aXBfZW50cnlfY2xvc2UnLAogICAgICAgICAgICAnemlwX2VudHJ5X29wZW4nID0+ICdTYWZlXHppcF9lbnRyeV9vcGVuJywKICAgICAgICAgICAgJ3ppcF9lbnRyeV9yZWFkJyA9PiAnU2FmZVx6aXBfZW50cnlfcmVhZCcsCiAgICAgICAgICAgICd6bGliX2RlY29kZScgPT4gJ1NhZmVcemxpYl9kZWNvZGUnLApdXV0pOwp9Owo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvY29zZS1saWIiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImRlc2NyaXB0aW9uIjogIkNCT1IgT2JqZWN0IFNpZ25pbmcgYW5kIEVuY3J5cHRpb24gKENPU0UpIEZvciBQSFAiLAogICAgImtleXdvcmRzIjogWyJDT1NFIiwgIlJGQzgxNTIiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWF1dGgiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoL2Nvc2UvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49Ny4yIiwKICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgImV4dC1vcGVuc3NsIjogIioiLAogICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAiYmViZXJsZWkvYXNzZXJ0IjogIl4zLjIiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkNvc2VcXCI6ICJzcmMvIgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Algorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKaW50ZXJmYWNlIEFsZ29yaXRobQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/Hmac.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxLZXlcS2V5OwoKYWJzdHJhY3QgY2xhc3MgSG1hYyBpbXBsZW1lbnRzIE1hYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzaChzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNLZXkoJGtleSk7CiAgICAgICAgJHNpZ25hdHVyZSA9IGhhc2hfaG1hYygkdGhpcy0+Z2V0SGFzaEFsZ29yaXRobSgpLCAkZGF0YSwgJGtleS0+Z2V0KC0xKSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBtYl9zdWJzdHIoJHNpZ25hdHVyZSwgMCwgaW50ZGl2KCR0aGlzLT5nZXRTaWduYXR1cmVMZW5ndGgoKSwgOCksICc4Yml0Jyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gaGFzaF9lcXVhbHMoJHRoaXMtPmhhc2goJGRhdGEsICRrZXkpLCAkc2lnbmF0dXJlKTsKICAgIH0KCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBzdHJpbmc7CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZUxlbmd0aCgpOiBpbnQ7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVjS2V5KEtleSAka2V5KTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6ZXEoJGtleS0+dHlwZSgpLCA0LCAnSW52YWxpZCBrZXkuIE11c3QgYmUgb2YgdHlwZSBzeW1tZXRyaWMnKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJGtleS0+aGFzKC0xKSwgJ0ludmFsaWQga2V5LiBUaGUgdmFsdWUgb2YgdGhlIGtleSBpcyBtaXNzaW5nJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMjU2IGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA1OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEyNTYnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDI1NjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS256Truncated64.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMjU2VHJ1bmNhdGVkNjQgZXh0ZW5kcyBIbWFjCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IDQ7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3NoYTI1Nic7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZUxlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gNjQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTMzg0IGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA2OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEzODQnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDM4NDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/HS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCmZpbmFsIGNsYXNzIEhTNTEyIGV4dGVuZHMgSG1hYwp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSA3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGE1MTInOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDUxMjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Mac/Mac.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXE1hYzsKCnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEtleVxLZXk7CgppbnRlcmZhY2UgTWFjIGV4dGVuZHMgQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNoKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgTWFuYWdlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtW10KICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQWxnb3JpdGhtICRhbGdvcml0aG0pOiB2b2lkCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSAkYWxnb3JpdGhtOjppZGVudGlmaWVyKCk7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobXNbJGlkZW50aWZpZXJdID0gJGFsZ29yaXRobTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdCgpOiBpdGVyYWJsZQogICAgewogICAgICAgIHlpZWxkIGZyb20gYXJyYXlfa2V5cygkdGhpcy0+YWxnb3JpdGhtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEFsZ29yaXRobVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tICR0aGlzLT5hbGdvcml0aG1zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoaW50ICRpZGVudGlmaWVyKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpZGVudGlmaWVyLCAkdGhpcy0+YWxnb3JpdGhtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJGlkZW50aWZpZXIpOiBBbGdvcml0aG0KICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmhhcygkaWRlbnRpZmllciksICdVbnN1cHBvcnRlZCBhbGdvcml0aG0nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hbGdvcml0aG1zWyRpZGVudGlmaWVyXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/ManagerFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBNYW5hZ2VyRmFjdG9yeQp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtW10KICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhbGlhcywgQWxnb3JpdGhtICRhbGdvcml0aG0pOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobXNbJGFsaWFzXSA9ICRhbGdvcml0aG07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxpc3QoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tIGFycmF5X2tleXMoJHRoaXMtPmFsZ29yaXRobXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogaXRlcmFibGUKICAgIHsKICAgICAgICB5aWVsZCBmcm9tIGFycmF5X2tleXMoJHRoaXMtPmFsZ29yaXRobXMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoYXJyYXkgJGFsaWFzZXMpOiBNYW5hZ2VyCiAgICB7CiAgICAgICAgJG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwogICAgICAgIGZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhcykgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkdGhpcy0+YWxnb3JpdGhtcywgJGFsaWFzLCBzcHJpbnRmKCdUaGUgYWxnb3JpdGhtIHdpdGggYWxpYXMgIiVzIiBpcyBub3Qgc3VwcG9ydGVkJywgJGFsaWFzKSk7CiAgICAgICAgICAgICRtYW5hZ2VyLT5hZGQoJHRoaXMtPmFsZ29yaXRobXNbJGFsaWFzXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG1hbmFnZXI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ECDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcS2V5XEVjMktleTsKdXNlIENvc2VcS2V5XEtleTsKCmFic3RyYWN0IGNsYXNzIEVDRFNBIGltcGxlbWVudHMgU2lnbmF0dXJlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmcKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKICAgICAgICBvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUEVNKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpOwoKICAgICAgICByZXR1cm4gRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsICR0aGlzLT5nZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgJHB1YmxpY0tleSA9ICRrZXktPnRvUHVibGljKCk7CiAgICAgICAgJHNpZ25hdHVyZSA9IEVDU2lnbmF0dXJlOjp0b0FzbjEoJHNpZ25hdHVyZSwgJHRoaXMtPmdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKSk7CgogICAgICAgIHJldHVybiAxID09PSBvcGVuc3NsX3ZlcmlmeSgkZGF0YSwgJHNpZ25hdHVyZSwgJHB1YmxpY0tleS0+YXNQRU0oKSwgJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSk7CiAgICB9CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnZlKCk6IGludDsKCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBpbnQ7CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50OwoKICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlS2V5KEtleSAka2V5KTogRWMyS2V5CiAgICB7CiAgICAgICAgJGtleSA9IG5ldyBFYzJLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRrZXktPmN1cnZlKCksICR0aGlzLT5nZXRDdXJ2ZSgpLCAnVGhpcyBrZXkgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIGFsZ29yaXRobScpOwoKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ECSignature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBmdW5jdGlvbiBiaW4yaGV4Owp1c2UgZnVuY3Rpb24gZGVjaGV4Owp1c2UgZnVuY3Rpb24gaGV4ZGVjOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gbWJfc3RybGVuOwp1c2UgZnVuY3Rpb24gbWJfc3Vic3RyOwp1c2UgZnVuY3Rpb24gc3RyX3BhZDsKdXNlIGNvbnN0IFNUUl9QQURfTEVGVDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIEVDU2lnbmF0dXJlCnsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9TRVFVRU5DRSA9ICczMCc7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfSU5URUdFUiA9ICcwMic7CiAgICBwcml2YXRlIGNvbnN0IEFTTjFfTUFYX1NJTkdMRV9CWVRFID0gMTI4OwogICAgcHJpdmF0ZSBjb25zdCBBU04xX0xFTkdUSF8yQllURVMgPSAnODEnOwogICAgcHJpdmF0ZSBjb25zdCBBU04xX0JJR19JTlRFR0VSX0xJTUlUID0gJzdmJzsKICAgIHByaXZhdGUgY29uc3QgQVNOMV9ORUdBVElWRV9JTlRFR0VSID0gJzAwJzsKICAgIHByaXZhdGUgY29uc3QgQllURV9TSVpFID0gMjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvQXNuMShzdHJpbmcgJHNpZ25hdHVyZSwgaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkc2lnbmF0dXJlID0gYmluMmhleCgkc2lnbmF0dXJlKTsKCiAgICAgICAgaWYgKHNlbGY6Om9jdGV0TGVuZ3RoKCRzaWduYXR1cmUpICE9PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgc2lnbmF0dXJlIGxlbmd0aC4nKTsKICAgICAgICB9CgogICAgICAgICRwb2ludFIgPSBzZWxmOjpwcmVwYXJlUG9zaXRpdmVJbnRlZ2VyKG1iX3N1YnN0cigkc2lnbmF0dXJlLCAwLCAkbGVuZ3RoLCAnOGJpdCcpKTsKICAgICAgICAkcG9pbnRTID0gc2VsZjo6cHJlcGFyZVBvc2l0aXZlSW50ZWdlcihtYl9zdWJzdHIoJHNpZ25hdHVyZSwgJGxlbmd0aCwgbnVsbCwgJzhiaXQnKSk7CgogICAgICAgICRsZW5ndGhSID0gc2VsZjo6b2N0ZXRMZW5ndGgoJHBvaW50Uik7CiAgICAgICAgJGxlbmd0aFMgPSBzZWxmOjpvY3RldExlbmd0aCgkcG9pbnRTKTsKCiAgICAgICAgJHRvdGFsTGVuZ3RoID0gJGxlbmd0aFIgKyAkbGVuZ3RoUyArIHNlbGY6OkJZVEVfU0laRSArIHNlbGY6OkJZVEVfU0laRTsKICAgICAgICAkbGVuZ3RoUHJlZml4ID0gJHRvdGFsTGVuZ3RoID4gc2VsZjo6QVNOMV9NQVhfU0lOR0xFX0JZVEUgPyBzZWxmOjpBU04xX0xFTkdUSF8yQllURVMgOiAnJzsKCiAgICAgICAgJGJpbiA9IGhleDJiaW4oCiAgICAgICAgICAgIHNlbGY6OkFTTjFfU0VRVUVOQ0UKICAgICAgICAgICAgLiRsZW5ndGhQcmVmaXguZGVjaGV4KCR0b3RhbExlbmd0aCkKICAgICAgICAgICAgLnNlbGY6OkFTTjFfSU5URUdFUi5kZWNoZXgoJGxlbmd0aFIpLiRwb2ludFIKICAgICAgICAgICAgLnNlbGY6OkFTTjFfSU5URUdFUi5kZWNoZXgoJGxlbmd0aFMpLiRwb2ludFMKICAgICAgICApOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGJpbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCBpbnRvIEFTTi4xJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJpbjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21Bc24xKHN0cmluZyAkc2lnbmF0dXJlLCBpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRtZXNzYWdlID0gYmluMmhleCgkc2lnbmF0dXJlKTsKICAgICAgICAkcG9zaXRpb24gPSAwOwoKICAgICAgICBpZiAoc2VsZjo6QVNOMV9TRVFVRU5DRSAhPT0gc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sIHNlbGY6OkJZVEVfU0laRSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBTaG91bGQgc3RhcnQgd2l0aCBhIHNlcXVlbmNlLicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQHBocHN0YW4taWdub3JlLW5leHQtbGluZQogICAgICAgIGlmIChzZWxmOjpBU04xX0xFTkdUSF8yQllURVMgPT09IHNlbGY6OnJlYWRBc24xQ29udGVudCgkbWVzc2FnZSwgJHBvc2l0aW9uLCBzZWxmOjpCWVRFX1NJWkUpKSB7CiAgICAgICAgICAgICRwb3NpdGlvbiArPSBzZWxmOjpCWVRFX1NJWkU7CiAgICAgICAgfQoKICAgICAgICAkcG9pbnRSID0gc2VsZjo6cmV0cmlldmVQb3NpdGl2ZUludGVnZXIoc2VsZjo6cmVhZEFzbjFJbnRlZ2VyKCRtZXNzYWdlLCAkcG9zaXRpb24pKTsKICAgICAgICAkcG9pbnRTID0gc2VsZjo6cmV0cmlldmVQb3NpdGl2ZUludGVnZXIoc2VsZjo6cmVhZEFzbjFJbnRlZ2VyKCRtZXNzYWdlLCAkcG9zaXRpb24pKTsKCiAgICAgICAgJGJpbiA9IGhleDJiaW4oc3RyX3BhZCgkcG9pbnRSLCAkbGVuZ3RoLCAnMCcsIFNUUl9QQURfTEVGVCkuc3RyX3BhZCgkcG9pbnRTLCAkbGVuZ3RoLCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGJpbikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gY29udmVydCBmcm9tIEFTTi4xJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGJpbjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBvY3RldExlbmd0aChzdHJpbmcgJGRhdGEpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gaW50ZGl2KG1iX3N0cmxlbigkZGF0YSwgJzhiaXQnKSwgc2VsZjo6QllURV9TSVpFKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwcmVwYXJlUG9zaXRpdmVJbnRlZ2VyKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgIGlmIChtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA+IHNlbGY6OkFTTjFfQklHX0lOVEVHRVJfTElNSVQpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkFTTjFfTkVHQVRJVkVfSU5URUdFUi4kZGF0YTsKICAgICAgICB9CgogICAgICAgIHdoaWxlICgKICAgICAgICAgICAgc2VsZjo6QVNOMV9ORUdBVElWRV9JTlRFR0VSID09PSBtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKQogICAgICAgICAgICAmJiBtYl9zdWJzdHIoJGRhdGEsIDIsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA8PSBzZWxmOjpBU04xX0JJR19JTlRFR0VSX0xJTUlUCiAgICAgICAgKSB7CiAgICAgICAgICAgICRkYXRhID0gbWJfc3Vic3RyKCRkYXRhLCAyLCBudWxsLCAnOGJpdCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJlYWRBc24xQ29udGVudChzdHJpbmcgJG1lc3NhZ2UsIGludCAmJHBvc2l0aW9uLCBpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRjb250ZW50ID0gbWJfc3Vic3RyKCRtZXNzYWdlLCAkcG9zaXRpb24sICRsZW5ndGgsICc4Yml0Jyk7CiAgICAgICAgJHBvc2l0aW9uICs9ICRsZW5ndGg7CgogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiByZWFkQXNuMUludGVnZXIoc3RyaW5nICRtZXNzYWdlLCBpbnQgJiRwb3NpdGlvbik6IHN0cmluZwogICAgewogICAgICAgIGlmIChzZWxmOjpBU04xX0lOVEVHRVIgIT09IHNlbGY6OnJlYWRBc24xQ29udGVudCgkbWVzc2FnZSwgJHBvc2l0aW9uLCBzZWxmOjpCWVRFX1NJWkUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gU2hvdWxkIGNvbnRhaW4gYW4gaW50ZWdlci4nKTsKICAgICAgICB9CgogICAgICAgICRsZW5ndGggPSAoaW50KSBoZXhkZWMoc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sIHNlbGY6OkJZVEVfU0laRSkpOwoKICAgICAgICByZXR1cm4gc2VsZjo6cmVhZEFzbjFDb250ZW50KCRtZXNzYWdlLCAkcG9zaXRpb24sICRsZW5ndGggKiBzZWxmOjpCWVRFX1NJWkUpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlUG9zaXRpdmVJbnRlZ2VyKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgIHdoaWxlICgKICAgICAgICAgICAgc2VsZjo6QVNOMV9ORUdBVElWRV9JTlRFR0VSID09PSBtYl9zdWJzdHIoJGRhdGEsIDAsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKQogICAgICAgICAgICAmJiBtYl9zdWJzdHIoJGRhdGEsIDIsIHNlbGY6OkJZVEVfU0laRSwgJzhiaXQnKSA+IHNlbGY6OkFTTjFfQklHX0lOVEVHRVJfTElNSVQKICAgICAgICApIHsKICAgICAgICAgICAgJGRhdGEgPSBtYl9zdWJzdHIoJGRhdGEsIDIsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzI1NiBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC03OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEyNTY7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnZlKCk6IGludAogICAgewogICAgICAgIHJldHVybiBFYzJLZXk6OkNVUlZFX1AyNTY7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDY0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES256K.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzI1NksgZXh0ZW5kcyBFQ0RTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtNDY7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGFzaEFsZ29yaXRobSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gT1BFTlNTTF9BTEdPX1NIQTI1NjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q3VydmUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIEVjMktleTo6Q1VSVkVfUDI1Nks7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZVBhcnRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIDY0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzM4NCBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0zNTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludAogICAgewogICAgICAgIHJldHVybiBPUEVOU1NMX0FMR09fU0hBMzg0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gRWMyS2V5OjpDVVJWRV9QMzg0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiA5NjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/ECDSA/ES512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKCnVzZSBDb3NlXEtleVxFYzJLZXk7CgpmaW5hbCBjbGFzcyBFUzUxMiBleHRlbmRzIEVDRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0zNjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludAogICAgewogICAgICAgIHJldHVybiBPUEVOU1NMX0FMR09fU0hBNTEyOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gRWMyS2V5OjpDVVJWRV9QNTIxOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiAxMzI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBDb3NlXEtleVxLZXk7CgpmaW5hbCBjbGFzcyBFRDI1NiBleHRlbmRzIEVkRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0yNjA7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGEyNTYnLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnNpZ24oJGhhc2hlZERhdGEsICRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGEyNTYnLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnZlcmlmeSgkaGFzaGVkRGF0YSwgJGtleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBDb3NlXEtleVxLZXk7CgpmaW5hbCBjbGFzcyBFRDUxMiBleHRlbmRzIEVkRFNBCnsKICAgIHB1YmxpYyBjb25zdCBJRCA9IC0yNjE7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZGVudGlmaWVyKCk6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjpJRDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGE1MTInLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnNpZ24oJGhhc2hlZERhdGEsICRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoc3RyaW5nICRkYXRhLCBLZXkgJGtleSwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgJGhhc2hlZERhdGEgPSBoYXNoKCdzaGE1MTInLCAkZGF0YSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBwYXJlbnQ6OnZlcmlmeSgkaGFzaGVkRGF0YSwgJGtleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCmZpbmFsIGNsYXNzIEVkMjU1MTkgZXh0ZW5kcyBFZERTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtODsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklEOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/EdDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcQWxnb3JpdGhtczsKdXNlIENvc2VcS2V5XEtleTsKdXNlIENvc2VcS2V5XE9rcEtleTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZDsKdXNlIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQ7CgpjbGFzcyBFZERTQSBpbXBsZW1lbnRzIFNpZ25hdHVyZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRrZXktPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICAkeCA9ICRrZXktPngoKTsKICAgICAgICAkZCA9ICRrZXktPmQoKTsKICAgICAgICAkc2VjcmV0ID0gJGQuJHg7CgogICAgICAgIHN3aXRjaCAoJGtleS0+Y3VydmUoKSkgewogICAgICAgICAgICBjYXNlIE9rcEtleTo6Q1VSVkVfRUQyNTUxOToKICAgICAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQoJGRhdGEsICRzZWNyZXQpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgY3VydmUnKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKCiAgICAgICAgc3dpdGNoICgka2V5LT5jdXJ2ZSgpKSB7CiAgICAgICAgICAgIGNhc2UgT2twS2V5OjpDVVJWRV9FRDI1NTE5OgogICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJGRhdGEsICRrZXktPngoKSk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBjdXJ2ZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlkZW50aWZpZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIEFsZ29yaXRobXM6OkNPU0VfQUxHT1JJVEhNX0VkRFNBOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaGFuZGxlS2V5KEtleSAka2V5KTogT2twS2V5CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBPa3BLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFMyNTYgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGEyNTYoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFMzODQgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM4OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGEzODQoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQ29zZVxIYXNoOwoKZmluYWwgY2xhc3MgUFM1MTIgZXh0ZW5kcyBQU1NSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTM5OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaAogICAgewogICAgICAgIHJldHVybiBIYXNoOjpzaGE1MTIoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/PSSRSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgZnVuY3Rpb24gY2VpbDsKdXNlIGZ1bmN0aW9uIGNocjsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxTaWduYXR1cmU7CnVzZSBDb3NlXEJpZ0ludGVnZXI7CnVzZSBDb3NlXEhhc2g7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBoYXNoX2VxdWFsczsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIG1iX3N0cmxlbjsKdXNlIGZ1bmN0aW9uIG1iX3N1YnN0cjsKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIGZ1bmN0aW9uIHJhbmRvbV9ieXRlczsKdXNlIFJ1bnRpbWVFeGNlcHRpb247CnVzZSBmdW5jdGlvbiBzdHJfcGFkOwp1c2UgZnVuY3Rpb24gc3RyX3JlcGVhdDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIFBTU1JTQSBpbXBsZW1lbnRzIFNpZ25hdHVyZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihzdHJpbmcgJGRhdGEsIEtleSAka2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGtleSA9ICR0aGlzLT5oYW5kbGVLZXkoJGtleSk7CiAgICAgICAgJG1vZHVsdXNMZW5ndGggPSBtYl9zdHJsZW4oJGtleS0+bigpLCAnOGJpdCcpOwoKICAgICAgICAkZW0gPSAkdGhpcy0+ZW5jb2RlRU1TQVBTUygkZGF0YSwgOCAqICRtb2R1bHVzTGVuZ3RoIC0gMSwgJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSk7CiAgICAgICAgJG1lc3NhZ2UgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRlbSk7CiAgICAgICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5leHBvbmVudGlhdGUoJGtleSwgJG1lc3NhZ2UpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnZlcnRJbnRlZ2VyVG9PY3RldFN0cmluZygkc2lnbmF0dXJlLCAkbW9kdWx1c0xlbmd0aCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICAka2V5ID0gJHRoaXMtPmhhbmRsZUtleSgka2V5KTsKICAgICAgICAkbW9kdWx1c0xlbmd0aCA9IG1iX3N0cmxlbigka2V5LT5uKCksICc4Yml0Jyk7CgogICAgICAgIGlmIChtYl9zdHJsZW4oJHNpZ25hdHVyZSwgJzhiaXQnKSAhPT0gJG1vZHVsdXNMZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtb2R1bHVzIGxlbmd0aCcpOwogICAgICAgIH0KICAgICAgICAkczIgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRzaWduYXR1cmUpOwogICAgICAgICRtMiA9ICR0aGlzLT5leHBvbmVudGlhdGUoJGtleSwgJHMyKTsKICAgICAgICAkZW0gPSAkdGhpcy0+Y29udmVydEludGVnZXJUb09jdGV0U3RyaW5nKCRtMiwgJG1vZHVsdXNMZW5ndGgpOwogICAgICAgICRtb2RCaXRzID0gOCAqICRtb2R1bHVzTGVuZ3RoOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnZlcmlmeUVNU0FQU1MoJGRhdGEsICRlbSwgJG1vZEJpdHMgLSAxLCAkdGhpcy0+Z2V0SGFzaEFsZ29yaXRobSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cG9uZW50aWF0ZSB3aXRoIG9yIHdpdGhvdXQgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbS4KICAgICAqIE9wZXJhdGlvbiB3aXRoIHByaW1lcyAncCcgYW5kICdxJyBpcyBhcHBveC4gMnggZmFzdGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwb25lbnRpYXRlKFJzYUtleSAka2V5LCBCaWdJbnRlZ2VyICRjKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIGlmICgkYy0+Y29tcGFyZShCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tRGVjaW1hbCgwKSkgPCAwIHx8ICRjLT5jb21wYXJlKEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoJGtleS0+bigpKSkgPiAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5LT5pc1B1YmxpYygpIHx8ICEka2V5LT5oYXNQcmltZXMoKSB8fCAhJGtleS0+aGFzRXhwb25lbnRzKCkgfHwgISRrZXktPmhhc0NvZWZmaWNpZW50KCkpIHsKICAgICAgICAgICAgcmV0dXJuICRjLT5tb2RQb3coQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbUJpbmFyeVN0cmluZygka2V5LT5lKCkpLCBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRrZXktPm4oKSkpOwogICAgICAgIH0KCiAgICAgICAgWyRwLCAkcV0gPSAka2V5LT5wcmltZXMoKTsKICAgICAgICBbJGRQLCAkZFFdID0gJGtleS0+ZXhwb25lbnRzKCk7CiAgICAgICAgJHFJbnYgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRrZXktPlFJbnYoKSk7CgogICAgICAgICRtMSA9ICRjLT5tb2RQb3coJGRQLCAkcCk7CiAgICAgICAgJG0yID0gJGMtPm1vZFBvdygkZFEsICRxKTsKICAgICAgICAkaCA9ICRxSW52LT5tdWx0aXBseSgkbTEtPnN1YnRyYWN0KCRtMiktPmFkZCgkcCkpLT5tb2QoJHApOwoKICAgICAgICByZXR1cm4gJG0yLT5hZGQoJGgtPm11bHRpcGx5KCRxKSk7CiAgICB9CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogSGFzaDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUtleShLZXkgJGtleSk6IFJzYUtleQogICAgewogICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRrZXktPmdldERhdGEoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb252ZXJ0SW50ZWdlclRvT2N0ZXRTdHJpbmcoQmlnSW50ZWdlciAkeCwgaW50ICR4TGVuKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHggPSAkeC0+dG9CeXRlcygpOwogICAgICAgIGlmIChtYl9zdHJsZW4oJHgsICc4Yml0JykgPiAkeExlbikgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdGhlIGludGVnZXInKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJfcGFkKCR4LCAkeExlbiwgY2hyKDApLCBTVFJfUEFEX0xFRlQpOwogICAgfQoKICAgIC8qKgogICAgICogTUdGMS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRNR0YxKHN0cmluZyAkbWdmU2VlZCwgaW50ICRtYXNrTGVuLCBIYXNoICRtZ2ZIYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHQgPSAnJzsKICAgICAgICAkY291bnQgPSBjZWlsKCRtYXNrTGVuIC8gJG1nZkhhc2gtPmdldExlbmd0aCgpKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgJGMgPSBwYWNrKCdOJywgJGkpOwogICAgICAgICAgICAkdCAuPSAkbWdmSGFzaC0+aGFzaCgkbWdmU2VlZC4kYyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWJfc3Vic3RyKCR0LCAwLCAkbWFza0xlbiwgJzhiaXQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVNU0EtUFNTLUVOQ09ERS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBlbmNvZGVFTVNBUFNTKHN0cmluZyAkbWVzc2FnZSwgaW50ICRtb2R1bHVzTGVuZ3RoLCBIYXNoICRoYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGVtTGVuID0gKCRtb2R1bHVzTGVuZ3RoICsgMSkgPj4gMzsKICAgICAgICAkc0xlbiA9ICRoYXNoLT5nZXRMZW5ndGgoKTsKICAgICAgICAkbUhhc2ggPSAkaGFzaC0+aGFzaCgkbWVzc2FnZSk7CiAgICAgICAgaWYgKCRlbUxlbiA8PSAkaGFzaC0+Z2V0TGVuZ3RoKCkgKyAkc0xlbiArIDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgJHNhbHQgPSByYW5kb21fYnl0ZXMoJHNMZW4pOwogICAgICAgICRtMiA9ICJcMFwwXDBcMFwwXDBcMFwwIi4kbUhhc2guJHNhbHQ7CiAgICAgICAgJGggPSAkaGFzaC0+aGFzaCgkbTIpOwogICAgICAgICRwcyA9IHN0cl9yZXBlYXQoY2hyKDApLCAkZW1MZW4gLSAkc0xlbiAtICRoYXNoLT5nZXRMZW5ndGgoKSAtIDIpOwogICAgICAgICRkYiA9ICRwcy5jaHIoMSkuJHNhbHQ7CiAgICAgICAgJGRiTWFzayA9ICR0aGlzLT5nZXRNR0YxKCRoLCAkZW1MZW4gLSAkaGFzaC0+Z2V0TGVuZ3RoKCkgLSAxLCAkaGFzaCk7CiAgICAgICAgJG1hc2tlZERCID0gJGRiIF4gJGRiTWFzazsKICAgICAgICAkbWFza2VkREJbMF0gPSB+Y2hyKDB4RkYgPDwgKCRtb2R1bHVzTGVuZ3RoICYgNykpICYgJG1hc2tlZERCWzBdOwoKICAgICAgICByZXR1cm4gJG1hc2tlZERCLiRoLmNocigweEJDKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVNU0EtUFNTLVZFUklGWS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2ZXJpZnlFTVNBUFNTKHN0cmluZyAkbSwgc3RyaW5nICRlbSwgaW50ICRlbUJpdHMsIEhhc2ggJGhhc2gpOiBib29sCiAgICB7CiAgICAgICAgJGVtTGVuID0gKCRlbUJpdHMgKyAxKSA+PiAzOwogICAgICAgICRzTGVuID0gJGhhc2gtPmdldExlbmd0aCgpOwogICAgICAgICRtSGFzaCA9ICRoYXNoLT5oYXNoKCRtKTsKICAgICAgICBpZiAoJGVtTGVuIDwgJGhhc2gtPmdldExlbmd0aCgpICsgJHNMZW4gKyAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRlbVttYl9zdHJsZW4oJGVtLCAnOGJpdCcpIC0gMV0gIT09IGNocigweEJDKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRtYXNrZWREQiA9IG1iX3N1YnN0cigkZW0sIDAsIC0kaGFzaC0+Z2V0TGVuZ3RoKCkgLSAxLCAnOGJpdCcpOwogICAgICAgICRoID0gbWJfc3Vic3RyKCRlbSwgLSRoYXNoLT5nZXRMZW5ndGgoKSAtIDEsICRoYXNoLT5nZXRMZW5ndGgoKSwgJzhiaXQnKTsKICAgICAgICAkdGVtcCA9IGNocigweEZGIDw8ICgkZW1CaXRzICYgNykpOwogICAgICAgIGlmICgofiRtYXNrZWREQlswXSAmICR0ZW1wKSAhPT0gJHRlbXApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkZGJNYXNrID0gJHRoaXMtPmdldE1HRjEoJGgsICRlbUxlbiAtICRoYXNoLT5nZXRMZW5ndGgoKSAtIDEsICRoYXNoLypNR0YqLyk7CiAgICAgICAgJGRiID0gJG1hc2tlZERCIF4gJGRiTWFzazsKICAgICAgICAkZGJbMF0gPSB+Y2hyKDB4RkYgPDwgKCRlbUJpdHMgJiA3KSkgJiAkZGJbMF07CiAgICAgICAgJHRlbXAgPSAkZW1MZW4gLSAkaGFzaC0+Z2V0TGVuZ3RoKCkgLSAkc0xlbiAtIDI7CiAgICAgICAgaWYgKG1iX3N1YnN0cigkZGIsIDAsICR0ZW1wLCAnOGJpdCcpICE9PSBzdHJfcmVwZWF0KGNocigwKSwgJHRlbXApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKDEgIT09IG9yZCgkZGJbJHRlbXBdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRzYWx0ID0gbWJfc3Vic3RyKCRkYiwgJHRlbXAgKyAxLCBudWxsLCAnOGJpdCcpOyAvLyBzaG91bGQgYmUgJHNMZW4gbG9uZwogICAgICAgICRtMiA9ICJcMFwwXDBcMFwwXDBcMFwwIi4kbUhhc2guJHNhbHQ7CiAgICAgICAgJGgyID0gJGhhc2gtPmhhc2goJG0yKTsKCiAgICAgICAgcmV0dXJuIGhhc2hfZXF1YWxzKCRoLCAkaDIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzEgZXh0ZW5kcyBSU0EKewogICAgcHVibGljIGNvbnN0IElEID0gLTY1NTM1OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEExOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzI1NiBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU3OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEyNTY7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzM4NCBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU4OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEEzODQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CgpmaW5hbCBjbGFzcyBSUzUxMiBleHRlbmRzIFJTQQp7CiAgICBwdWJsaWMgY29uc3QgSUQgPSAtMjU5OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRlbnRpZmllcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SUQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIE9QRU5TU0xfQUxHT19TSEE1MTI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/RSA/RSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxTaWduYXR1cmU7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgphYnN0cmFjdCBjbGFzcyBSU0EgaW1wbGVtZW50cyBTaWduYXR1cmUKewogICAgcHVibGljIGZ1bmN0aW9uIHNpZ24oc3RyaW5nICRkYXRhLCBLZXkgJGtleSk6IHN0cmluZwogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+aGFuZGxlS2V5KCRrZXkpOwogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgka2V5LT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUnKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSBvcGVuc3NsX3NpZ24oJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUGVtKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBzaWduIHRoZSBkYXRhJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KHN0cmluZyAkZGF0YSwgS2V5ICRrZXksIHN0cmluZyAkc2lnbmF0dXJlKTogYm9vbAogICAgewogICAgICAgICRrZXkgPSAkdGhpcy0+aGFuZGxlS2V5KCRrZXkpOwoKICAgICAgICByZXR1cm4gMSA9PT0gb3BlbnNzbF92ZXJpZnkoJGRhdGEsICRzaWduYXR1cmUsICRrZXktPmFzUGVtKCksICR0aGlzLT5nZXRIYXNoQWxnb3JpdGhtKCkpOwogICAgfQoKICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IGludDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZUtleShLZXkgJGtleSk6IFJzYUtleQogICAgewogICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRrZXktPmdldERhdGEoKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithm/Signature/Signature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZTsKCnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEtleVxLZXk7CgppbnRlcmZhY2UgU2lnbmF0dXJlIGV4dGVuZHMgQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKHN0cmluZyAkZGF0YSwgS2V5ICRrZXkpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShzdHJpbmcgJGRhdGEsIEtleSAka2V5LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Algorithms.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEFzc2VydFxBc3NlcnRpb25GYWlsZWRFeGNlcHRpb247CgovKioKICogQHNlZSBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jb3NlL2Nvc2UueGh0bWwjYWxnb3JpdGhtcwogKi8KYWJzdHJhY3QgY2xhc3MgQWxnb3JpdGhtcwp7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF8xMjhfMjU2ID0gMzM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF8xMjhfMTI4ID0gMzI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl8xMjhfMjU2ID0gMzE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl8xMjhfMTI4ID0gMzA7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX01BQ18yNTZfMTI4ID0gMjY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX01BQ18xMjhfMTI4ID0gMjU7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQ0hBQ0hBMjBfUE9MWTEzMDUgPSAyNDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9BRVNfTUFDXzI1Nl82NCA9IDE1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0FFU19NQUNfMTI4XzY0ID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV82NF82NF8yNTYgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9BRVNfQ0NNXzY0XzY0XzEyOCA9IDEyOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0FFU19DQ01fMTZfNjRfMjU2ID0gMTE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQUVTX0NDTV8xNl82NF8xMjggPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9IUzUxMiA9IDc7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fSFMzODQgPSA2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0hTMjU2ID0gNTsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9IUzI1Nl82NCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTI1NkdDTSA9IDM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTE5MkdDTSA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTEyOEdDTSA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTEyOEtXID0gLTM7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTE5MktXID0gLTQ7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fQTI1NktXID0gLTU7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUID0gLTY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRVMyNTYgPSAtNzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FZERTQSA9IC04OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VEMjU2ID0gLTI2MDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FRDUxMiA9IC0yNjE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUX0hLREZfU0hBXzI1NiA9IC0xMDsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9ESVJFQ1RfSEtERl9TSEFfNTEyID0gLTExOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0RJUkVDVF9IS0RGX0FFU18xMjggPSAtMTI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRElSRUNUX0hLREZfQUVTXzI1NiA9IC0xMzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FQ0RIX0VTX0hLREZfMjU2ID0gLTI1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfSEtERl81MTIgPSAtMjY7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRUNESF9TU19IS0RGXzI1NiA9IC0yNzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9FQ0RIX1NTX0hLREZfNTEyID0gLTI4OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTEyOEtXID0gLTI5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTE5MktXID0gLTMwOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfRVNfQTI1NktXID0gLTMxOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTEyOEtXID0gLTMyOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTE5MktXID0gLTMzOwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VDREhfU1NfQTI1NktXID0gLTM0OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VTMzg0ID0gLTM1OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX0VTNTEyID0gLTM2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTMjU2ID0gLTM3OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTMzg0ID0gLTM4OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1BTNTEyID0gLTM5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTQUVTX09BRVAgPSAtNDA7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlNBRVNfT0FFUF8yNTYgPSAtNDE7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlNBRVNfT0FFUF81MTIgPSAtNDI7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fRVMyNTZLID0gLTQ2OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTMjU2ID0gLTI1NzsKICAgIHB1YmxpYyBjb25zdCBDT1NFX0FMR09SSVRITV9SUzM4NCA9IC0yNTg7CiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fUlM1MTIgPSAtMjU5OwogICAgcHVibGljIGNvbnN0IENPU0VfQUxHT1JJVEhNX1JTMSA9IC02NTUzNTsKCiAgICBwdWJsaWMgY29uc3QgQ09TRV9BTEdPUklUSE1fTUFQID0gWwogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMjU2ID0+IE9QRU5TU0xfQUxHT19TSEEyNTYsCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fRVMzODQgPT4gT1BFTlNTTF9BTEdPX1NIQTM4NCwKICAgICAgICBzZWxmOjpDT1NFX0FMR09SSVRITV9FUzUxMiA9PiBPUEVOU1NMX0FMR09fU0hBNTEyLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMjU2ID0+IE9QRU5TU0xfQUxHT19TSEEyNTYsCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fUlMzODQgPT4gT1BFTlNTTF9BTEdPX1NIQTM4NCwKICAgICAgICBzZWxmOjpDT1NFX0FMR09SSVRITV9SUzUxMiA9PiBPUEVOU1NMX0FMR09fU0hBNTEyLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMSA9PiBPUEVOU1NMX0FMR09fU0hBMSwKICAgIF07CgogICAgcHVibGljIGNvbnN0IENPU0VfSEFTSF9NQVAgPSBbCiAgICAgICAgc2VsZjo6Q09TRV9BTEdPUklUSE1fRVMyNTZLID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX0VTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTMjU2ID0+ICdzaGEyNTYnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTMzg0ID0+ICdzaGEzODQnLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1BTNTEyID0+ICdzaGE1MTInLAogICAgICAgIHNlbGY6OkNPU0VfQUxHT1JJVEhNX1JTMSA9PiAnc2hhMScsCiAgICBdOwoKICAgIC8qKgogICAgICogQHRocm93cyBBc3NlcnRpb25GYWlsZWRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcGVuc3NsQWxnb3JpdGhtRm9yKGludCAkYWxnb3JpdGhtSWRlbnRpZmllcik6IGludAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKHNlbGY6OkNPU0VfQUxHT1JJVEhNX01BUCwgJGFsZ29yaXRobUlkZW50aWZpZXIsICdUaGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OkNPU0VfQUxHT1JJVEhNX01BUFskYWxnb3JpdGhtSWRlbnRpZmllcl07CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG1Gb3IoaW50ICRhbGdvcml0aG1JZGVudGlmaWVyKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoc2VsZjo6Q09TRV9IQVNIX01BUCwgJGFsZ29yaXRobUlkZW50aWZpZXIsICdUaGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OkNPU0VfSEFTSF9NQVBbJGFsZ29yaXRobUlkZW50aWZpZXJdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7Cgp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyIGFzIEJyaWNrQmlnSW50ZWdlcjsKdXNlIGZ1bmN0aW9uIGNocjsKdXNlIGZ1bmN0aW9uIGhleDJiaW47CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBmdW5jdGlvbiB1bnBhY2s7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBCaWdJbnRlZ2VyCnsKICAgIC8qKgogICAgICogSG9sZHMgdGhlIEJpZ0ludGVnZXIncyB2YWx1ZS4KICAgICAqCiAgICAgKiBAdmFyIEJyaWNrQmlnSW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KEJyaWNrQmlnSW50ZWdlciAkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUJpbmFyeVN0cmluZyhzdHJpbmcgJHZhbHVlKTogc2VsZgogICAgewogICAgICAgICRyZXMgPSB1bnBhY2soJ0gqJywgJHZhbHVlKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdGhlIGRhdGEgZnJvbSBiaW5hcnknKTsKICAgICAgICB9CiAgICAgICAgJGRhdGEgPSBjdXJyZW50KCRyZXMpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoQnJpY2tCaWdJbnRlZ2VyOjpmcm9tQmFzZSgkZGF0YSwgMTYpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21EZWNpbWFsKGludCAkdmFsdWUpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKEJyaWNrQmlnSW50ZWdlcjo6b2YoJHZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIEJpZ0ludGVnZXIgdG8gYSBiaW5hcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9CeXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlLT5pc0VxdWFsVG8oQnJpY2tCaWdJbnRlZ2VyOjp6ZXJvKCkpKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICR0ZW1wID0gJHRoaXMtPnZhbHVlLT50b0Jhc2UoMTYpOwogICAgICAgICR0ZW1wID0gMCAhPT0gKG1iX3N0cmxlbigkdGVtcCwgJzhiaXQnKSAmIDEpID8gJzAnLiR0ZW1wIDogJHRlbXA7CiAgICAgICAgJHRlbXAgPSBoZXgyYmluKCR0ZW1wKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICR0ZW1wKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBkYXRhIGludG8gYmluYXJ5Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbHRyaW0oJHRlbXAsIGNocigwKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHR3byBCaWdJbnRlZ2Vycy4KICAgICAqCiAgICAgKiAgQHBhcmFtIEJpZ0ludGVnZXIgJHkKICAgICAqCiAgICAgKiAgQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc2VsZiAkeSk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPnBsdXMoJHktPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIEJpZ0ludGVnZXJzLgogICAgICoKICAgICAqICBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICoKICAgICAqICBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KHNlbGYgJHkpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlLT5taW51cygkeS0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIE11bHRpcGxpZXMgdHdvIEJpZ0ludGVnZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICR4CiAgICAgKgogICAgICogIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoc2VsZiAkeCk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPm11bHRpcGxpZWRCeSgkeC0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIG1vZHVsYXIgZXhwb25lbnRpYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJGUKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICRuCiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RQb3coc2VsZiAkZSwgc2VsZiAkbik6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUtPm1vZFBvdygkZS0+dmFsdWUsICRuLT52YWx1ZSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkZAogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kKHNlbGYgJGQpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnZhbHVlLT5tb2QoJGQtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0d28gbnVtYmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZShzZWxmICR5KTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZS0+Y29tcGFyZVRvKCR5LT52YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Hash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBIYXNoCnsKICAgIC8qKgogICAgICogSGFzaCBQYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkaGFzaDsKCiAgICAvKioKICAgICAqIERFUiBlbmNvZGluZyBULgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHQ7CgogICAgLyoqCiAgICAgKiBIYXNoIExlbmd0aC4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRsZW5ndGg7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGhhc2gsIGludCAkbGVuZ3RoLCBzdHJpbmcgJHQpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhc2ggPSAkaGFzaDsKICAgICAgICAkdGhpcy0+bGVuZ3RoID0gJGxlbmd0aDsKICAgICAgICAkdGhpcy0+dCA9ICR0OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBIYXNoCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2hhMSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGExJywgMjAsICJceDMwXHgyMVx4MzBceDA5XHgwNlx4MDVceDJiXHgwZVx4MDNceDAyXHgxYVx4MDVceDAwXHgwNFx4MTQiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTI1NigpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGEyNTYnLCAzMiwgIlx4MzBceDMxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwMVx4MDVceDAwXHgwNFx4MjAiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTM4NCgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGEzODQnLCA0OCwgIlx4MzBceDQxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwMlx4MDVceDAwXHgwNFx4MzAiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTUxMigpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGE1MTInLCA2NCwgIlx4MzBceDUxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwM1x4MDVceDAwXHgwNFx4NDAiKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVuZ3RoKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGVuZ3RoOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcHV0ZSB0aGUgSE1BQy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc2goc3RyaW5nICR0ZXh0KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIGhhc2goJHRoaXMtPmhhc2gsICR0ZXh0LCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/Ec2Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgRkdcQVNOMVxFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPY3RldFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNlcXVlbmNlOwoKY2xhc3MgRWMyS2V5IGV4dGVuZHMgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9QMjU2ID0gMTsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9QMjU2SyA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ1VSVkVfUDM4NCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ1VSVkVfUDUyMSA9IDM7CgogICAgcHVibGljIGNvbnN0IERBVEFfQ1VSVkUgPSAtMTsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1ggPSAtMjsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1kgPSAtMzsKICAgIHB1YmxpYyBjb25zdCBEQVRBX0QgPSAtNDsKCiAgICBwcml2YXRlIGNvbnN0IFNVUFBPUlRFRF9DVVJWRVMgPSBbCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NiwKICAgICAgICBzZWxmOjpDVVJWRV9QMjU2SywKICAgICAgICBzZWxmOjpDVVJWRV9QMzg0LAogICAgICAgIHNlbGY6OkNVUlZFX1A1MjEsCiAgICBdOwoKICAgIHByaXZhdGUgY29uc3QgTkFNRURfQ1VSVkVfT0lEID0gWwogICAgICAgIHNlbGY6OkNVUlZFX1AyNTYgPT4gJzEuMi44NDAuMTAwNDUuMy4xLjcnLCAvLyBOSVNUIFAtMjU2IC8gc2VjcDI1NnIxCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NksgPT4gJzEuMy4xMzIuMC4xMCcsIC8vIE5JU1QgUC0yNTZLIC8gc2VjcDI1NmsxCiAgICAgICAgc2VsZjo6Q1VSVkVfUDM4NCA9PiAnMS4zLjEzMi4wLjM0JywgLy8gTklTVCBQLTM4NCAvIHNlY3AzODRyMQogICAgICAgIHNlbGY6OkNVUlZFX1A1MjEgPT4gJzEuMy4xMzIuMC4zNScsIC8vIE5JU1QgUC01MjEgLyBzZWNwNTIxcjEKICAgIF07CgogICAgcHJpdmF0ZSBjb25zdCBDVVJWRV9LRVlfTEVOR1RIID0gWwogICAgICAgIHNlbGY6OkNVUlZFX1AyNTYgPT4gMzIsCiAgICAgICAgc2VsZjo6Q1VSVkVfUDI1NksgPT4gMzIsCiAgICAgICAgc2VsZjo6Q1VSVkVfUDM4NCA9PiA0OCwKICAgICAgICBzZWxmOjpDVVJWRV9QNTIxID0+IDY2LAogICAgXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9FQzIsICdJbnZhbGlkIEVDMiBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIEVDMiBrZXknKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9DVVJWRSwgJ0ludmFsaWQgRUMyIGtleS4gVGhlIGN1cnZlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9YLCAnSW52YWxpZCBFQzIga2V5LiBUaGUgeCBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9ZLCAnSW52YWxpZCBFQzIga2V5LiBUaGUgeSBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246Omxlbmd0aCgkZGF0YVtzZWxmOjpEQVRBX1hdLCBzZWxmOjpDVVJWRV9LRVlfTEVOR1RIWyRkYXRhW3NlbGY6OkRBVEFfQ1VSVkVdXSwgJ0ludmFsaWQgbGVuZ3RoIGZvciB4IGNvb3JkaW5hdGUnLCBudWxsLCAnOGJpdCcpOwogICAgICAgIEFzc2VydGlvbjo6bGVuZ3RoKCRkYXRhW3NlbGY6OkRBVEFfWV0sIHNlbGY6OkNVUlZFX0tFWV9MRU5HVEhbJGRhdGFbc2VsZjo6REFUQV9DVVJWRV1dLCAnSW52YWxpZCBsZW5ndGggZm9yIHkgY29vcmRpbmF0ZScsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KChpbnQpICRkYXRhW3NlbGY6OkRBVEFfQ1VSVkVdLCBzZWxmOjpTVVBQT1JURURfQ1VSVkVTLCAnVGhlIGN1cnZlIGlzIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9QdWJsaWMoKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmdldERhdGEoKTsKICAgICAgICB1bnNldCgkZGF0YVtzZWxmOjpEQVRBX0RdKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24geCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX1gpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfWSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHJpdmF0ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoc2VsZjo6REFUQV9ELCAkdGhpcy0+Z2V0RGF0YSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX0QpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPmdldChzZWxmOjpEQVRBX0NVUlZFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNQRU0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5pc1ByaXZhdGUoKSkgewogICAgICAgICAgICAkZGVyID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICAgICAgbmV3IEludGVnZXIoMSksCiAgICAgICAgICAgICAgICBuZXcgT2N0ZXRTdHJpbmcoYmluMmhleCgkdGhpcy0+ZCgpKSksCiAgICAgICAgICAgICAgICBuZXcgRXhwbGljaXRseVRhZ2dlZE9iamVjdCgwLCBuZXcgT2JqZWN0SWRlbnRpZmllcigkdGhpcy0+Z2V0Q3VydmVPaWQoKSkpLAogICAgICAgICAgICAgICAgbmV3IEV4cGxpY2l0bHlUYWdnZWRPYmplY3QoMSwgbmV3IEJpdFN0cmluZyhiaW4yaGV4KCR0aGlzLT5nZXRVbmNvbXByZXNzZWRDb29yZGluYXRlcygpKSkpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnBlbSgnRUMgUFJJVkFURSBLRVknLCAkZGVyLT5nZXRCaW5hcnkoKSk7CiAgICAgICAgfQoKICAgICAgICAkZGVyID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0SWRlbnRpZmllcignMS4yLjg0MC4xMDA0NS4yLjEnKSwKICAgICAgICAgICAgICAgIG5ldyBPYmplY3RJZGVudGlmaWVyKCR0aGlzLT5nZXRDdXJ2ZU9pZCgpKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKGJpbjJoZXgoJHRoaXMtPmdldFVuY29tcHJlc3NlZENvb3JkaW5hdGVzKCkpKQogICAgICAgICk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cGVtKCdQVUJMSUMgS0VZJywgJGRlci0+Z2V0QmluYXJ5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRDb29yZGluYXRlcygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gIlx4MDQiLiR0aGlzLT54KCkuJHRoaXMtPnkoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEN1cnZlT2lkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpOQU1FRF9DVVJWRV9PSURbJHRoaXMtPmN1cnZlKCldOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcGVtKHN0cmluZyAkdHlwZSwgc3RyaW5nICRkZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLS0tLS1CRUdJTiAlcy0tLS0tXG4iLCBtYl9zdHJ0b3VwcGVyKCR0eXBlKSkuCiAgICAgICAgICAgIGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlciksIDY0LCAiXG4iKS4KICAgICAgICAgICAgc3ByaW50ZigiLS0tLS1FTkQgJXMtLS0tLVxuIiwgbWJfc3RydG91cHBlcigkdHlwZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/Key.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBUWVBFID0gMTsKICAgIHB1YmxpYyBjb25zdCBUWVBFX09LUCA9IDE7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9FQzIgPSAyOwogICAgcHVibGljIGNvbnN0IFRZUEVfUlNBID0gMzsKICAgIHB1YmxpYyBjb25zdCBUWVBFX09DVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgS0lEID0gMjsKICAgIHB1YmxpYyBjb25zdCBBTEcgPSAzOwogICAgcHVibGljIGNvbnN0IEtFWV9PUFMgPSA0OwogICAgcHVibGljIGNvbnN0IEJBU0VfSVYgPSA1OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6VFlQRSwgJ0ludmFsaWQga2V5OiB0aGUgdHlwZSBpcyBub3QgZGVmaW5lZCcpOwogICAgICAgICR0aGlzLT5kYXRhID0gJGRhdGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRGF0YShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6VFlQRSwgJ0ludmFsaWQga2V5OiB0aGUgdHlwZSBpcyBub3QgZGVmaW5lZCcpOwogICAgICAgIHN3aXRjaCAoJGRhdGFbc2VsZjo6VFlQRV0pIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPa3BLZXkoJGRhdGEpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVjMktleSgkZGF0YSk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnNhS2V5KCRkYXRhKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTeW1tZXRyaWNLZXkoJGRhdGEpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVtzZWxmOjpUWVBFXTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxnKCk6IGludAogICAgewogICAgICAgIHJldHVybiAoaW50KSAkdGhpcy0+Z2V0KHNlbGY6OkFMRyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERhdGEoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhpbnQgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoaW50ICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHRoaXMtPmRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgaGFzIG5vIGRhdGEgYXQgaW5kZXggJWQnLCAka2V5KSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVska2V5XTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/OkpKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgT2twS2V5IGV4dGVuZHMgS2V5CnsKICAgIHB1YmxpYyBjb25zdCBDVVJWRV9YMjU1MTkgPSA0OwogICAgcHVibGljIGNvbnN0IENVUlZFX1g0NDggPSA1OwogICAgcHVibGljIGNvbnN0IENVUlZFX0VEMjU1MTkgPSA2OwogICAgcHVibGljIGNvbnN0IENVUlZFX0VENDQ4ID0gNzsKCiAgICBwdWJsaWMgY29uc3QgREFUQV9DVVJWRSA9IC0xOwogICAgcHVibGljIGNvbnN0IERBVEFfWCA9IC0yOwogICAgcHVibGljIGNvbnN0IERBVEFfRCA9IC00OwoKICAgIHByaXZhdGUgY29uc3QgU1VQUE9SVEVEX0NVUlZFUyA9IFsKICAgICAgICBzZWxmOjpDVVJWRV9YMjU1MTksCiAgICAgICAgc2VsZjo6Q1VSVkVfWDQ0OCwKICAgICAgICBzZWxmOjpDVVJWRV9FRDI1NTE5LAogICAgICAgIHNlbGY6OkNVUlZFX0VENDQ4LAogICAgXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9PS1AsICdJbnZhbGlkIE9LUCBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIE9LUCBrZXknKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9DVVJWRSwgJ0ludmFsaWQgRUMyIGtleS4gVGhlIGN1cnZlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9YLCAnSW52YWxpZCBPS1Aga2V5LiBUaGUgeCBjb29yZGluYXRlIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoKGludCkgJGRhdGFbc2VsZjo6REFUQV9DVVJWRV0sIHNlbGY6OlNVUFBPUlRFRF9DVVJWRVMsICdUaGUgY3VydmUgaXMgbm90IHN1cHBvcnRlZCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB4KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfWCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHJpdmF0ZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoc2VsZjo6REFUQV9ELCAkdGhpcy0+Z2V0RGF0YSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZScpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX0QpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJ2ZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPmdldChzZWxmOjpEQVRBX0NVUlZFKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/RsaKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQnJpY2tcTWF0aFxCaWdJbnRlZ2VyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgpjbGFzcyBSc2FLZXkgZXh0ZW5kcyBLZXkKewogICAgcHVibGljIGNvbnN0IERBVEFfTiA9IC0xOwogICAgcHVibGljIGNvbnN0IERBVEFfRSA9IC0yOwogICAgcHVibGljIGNvbnN0IERBVEFfRCA9IC0zOwogICAgcHVibGljIGNvbnN0IERBVEFfUCA9IC00OwogICAgcHVibGljIGNvbnN0IERBVEFfUSA9IC01OwogICAgcHVibGljIGNvbnN0IERBVEFfRFAgPSAtNjsKICAgIHB1YmxpYyBjb25zdCBEQVRBX0RRID0gLTc7CiAgICBwdWJsaWMgY29uc3QgREFUQV9RSSA9IC04OwogICAgcHVibGljIGNvbnN0IERBVEFfT1RIRVIgPSAtOTsKICAgIHB1YmxpYyBjb25zdCBEQVRBX1JJID0gLTEwOwogICAgcHVibGljIGNvbnN0IERBVEFfREkgPSAtMTE7CiAgICBwdWJsaWMgY29uc3QgREFUQV9USSA9IC0xMjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGF0YVtzZWxmOjpUWVBFXSwgc2VsZjo6VFlQRV9SU0EsICdJbnZhbGlkIFJTQSBrZXkuIFRoZSBrZXkgdHlwZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgUlNBIGtleScpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCBzZWxmOjpEQVRBX04sICdJbnZhbGlkIFJTQSBrZXkuIFRoZSBtb2R1bHVzIGlzIG1pc3NpbmcnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgc2VsZjo6REFUQV9FLCAnSW52YWxpZCBSU0Ega2V5LiBUaGUgZXhwb25lbnQgaXMgbWlzc2luZycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfTik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9FKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9EKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcCgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9QKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9RKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZFAoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfRFApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkUSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9EUSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFFJbnYoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfUUkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcigpOiBhcnJheQogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aXNQcml2YXRlKCksICdUaGUga2V5IGlzIG5vdCBwcml2YXRlLicpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX09USEVSKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gckkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfUkkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkSSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzUHJpdmF0ZSgpLCAnVGhlIGtleSBpcyBub3QgcHJpdmF0ZS4nKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXQoc2VsZjo6REFUQV9ESSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRJKCk6IHN0cmluZwogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aXNQcml2YXRlKCksICdUaGUga2V5IGlzIG5vdCBwcml2YXRlLicpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldChzZWxmOjpEQVRBX1RJKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUHJpbWVzKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcyhzZWxmOjpEQVRBX1ApICYmICR0aGlzLT5oYXMoc2VsZjo6REFUQV9RKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJpbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJHRoaXMtPnAoKSwKICAgICAgICAgICAgJHRoaXMtPnEoKSwKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHBvbmVudHMoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGFzKHNlbGY6OkRBVEFfRFApICYmICR0aGlzLT5oYXMoc2VsZjo6REFUQV9EUSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4cG9uZW50cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICR0aGlzLT5kUCgpLAogICAgICAgICAgICAkdGhpcy0+ZFEoKSwKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDb2VmZmljaWVudCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXMoc2VsZjo6REFUQV9RSSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHVibGljKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5pc1ByaXZhdGUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcml2YXRlKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cyhzZWxmOjpEQVRBX0QsICR0aGlzLT5nZXREYXRhKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhc1BlbSgpOiBzdHJpbmcKICAgIHsKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCR0aGlzLT5pc1ByaXZhdGUoKSwgJ1Vuc3VwcG9ydGVkIGZvciBwcml2YXRlIGtleXMuJyk7CiAgICAgICAgJGJpdFNyaW5nID0gbmV3IFNlcXVlbmNlKAogICAgICAgICAgICBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+bigpKSksCiAgICAgICAgICAgIG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT5lKCkpKQogICAgICAgICk7CgogICAgICAgICRkZXIgPSBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgIG5ldyBTZXF1ZW5jZSgKICAgICAgICAgICAgICAgIG5ldyBPYmplY3RJZGVudGlmaWVyKCcxLjIuODQwLjExMzU0OS4xLjEuMScpLAogICAgICAgICAgICAgICAgbmV3IE51bGxPYmplY3QoKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKGJpbjJoZXgoJGJpdFNyaW5nLT5nZXRCaW5hcnkoKSkpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5wZW0oJ1BVQkxJQyBLRVknLCAkZGVyLT5nZXRCaW5hcnkoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmcm9tQmFzZTY0VG9JbnRlZ2VyKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZGF0YSA9IHVucGFjaygnSConLCAkdmFsdWUpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJGRhdGEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGNvbnZlcnQgdG8gYW4gaW50ZWdlcicpOwogICAgICAgIH0KCiAgICAgICAgJGhleCA9IGN1cnJlbnQoJGRhdGEpOwoKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6ZnJvbUJhc2UoJGhleCwgMTYpLT50b0Jhc2UoMTApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcGVtKHN0cmluZyAkdHlwZSwgc3RyaW5nICRkZXIpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc3ByaW50ZigiLS0tLS1CRUdJTiAlcy0tLS0tXG4iLCBtYl9zdHJ0b3VwcGVyKCR0eXBlKSkuCiAgICAgICAgICAgIGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlciksIDY0LCAiXG4iKS4KICAgICAgICAgICAgc3ByaW50ZigiLS0tLS1FTkQgJXMtLS0tLVxuIiwgbWJfc3RydG91cHBlcigkdHlwZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Key/SymmetricKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2VcS2V5OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBTeW1tZXRyaWNLZXkgZXh0ZW5kcyBLZXkKewogICAgcHVibGljIGNvbnN0IERBVEFfSyA9IC0xOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkYXRhKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRkYXRhW3NlbGY6OlRZUEVdLCBzZWxmOjpUWVBFX09DVCwgJ0ludmFsaWQgc3ltbWV0cmljIGtleS4gVGhlIGtleSB0eXBlIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzeW1tZXRyaWMga2V5Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsIHNlbGY6OkRBVEFfSywgJ0ludmFsaWQgc3ltbWV0cmljIGtleS4gVGhlIHBhcmFtZXRlciAiayIgaXMgbWlzc2luZycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBrKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KHNlbGY6OkRBVEFfSyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/cose-lib/src/Verifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIENvc2U7CgpjbGFzcyBWZXJpZmllcgp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiZGVzY3JpcHRpb24iOiAiTWV0YWRhdGEgU2VydmljZSBmb3IgRklETzIvV2ViYXV0aG4iLAogICAgImtleXdvcmRzIjogWyJGSURPIiwgIkZJRE8yIiwgIndlYmF1dGhuIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC9tZXRhZGF0YS1zZXJ2aWNlL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgImxlYWd1ZS91cmkiOiAiXjYuMCIsCiAgICAgICAgInBzci9odHRwLWNsaWVudCI6ICJeMS4wIiwKICAgICAgICAicHNyL2h0dHAtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAicHNyL2xvZyI6ICJeMS4xIgogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJwc3IvbG9nLWltcGxlbWVudGF0aW9uIjogIlJlY29tbWVuZGVkIHRvIHJlY2VpdmUgbG9ncyBmcm9tIHRoZSBsaWJyYXJ5IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJXZWJhdXRoblxcTWV0YWRhdGFTZXJ2aWNlXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgIndlYi10b2tlbi9qd3Qta2V5LW1nbXQiOiAiTWFuZGF0b3J5IGZvciBmZXRjaGluZyBNZXRhZGF0YSBTdGF0ZW1lbnQgZnJvbSBkaXN0YW50IHNvdXJjZXMiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiTWFuZGF0b3J5IGZvciBmZXRjaGluZyBNZXRhZGF0YSBTdGF0ZW1lbnQgZnJvbSBkaXN0YW50IHNvdXJjZXMiCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/AbstractDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGVzY3JpcHRvciBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1heFJldHJpZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGJsb2NrU2xvd2Rvd247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkbWF4UmV0cmllcywgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWF4UmV0cmllcyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJGJsb2NrU2xvd2Rvd24sIDAsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgdmFsdWUgb2YgImJsb2NrU2xvd2Rvd24iIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJykpOwoKICAgICAgICAkdGhpcy0+bWF4UmV0cmllcyA9ICRtYXhSZXRyaWVzOwogICAgICAgICR0aGlzLT5ibG9ja1Nsb3dkb3duID0gJGJsb2NrU2xvd2Rvd247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heFJldHJpZXMoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWF4UmV0cmllczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmxvY2tTbG93ZG93bigpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ibG9ja1Nsb3dkb3duOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/AuthenticatorStatus.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCmFic3RyYWN0IGNsYXNzIEF1dGhlbnRpY2F0b3JTdGF0dXMKewogICAgcHVibGljIGNvbnN0IE5PVF9GSURPX0NFUlRJRklFRCA9ICdOT1RfRklET19DRVJUSUZJRUQnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEID0gJ0ZJRE9fQ0VSVElGSUVEJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9CWVBBU1MgPSAnVVNFUl9WRVJJRklDQVRJT05fQllQQVNTJzsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSA9ICdBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UgPSAnVVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UnOwogICAgcHVibGljIGNvbnN0IFVTRVJfS0VZX1BIWVNJQ0FMX0NPTVBST01JU0UgPSAnVVNFUl9LRVlfUEhZU0lDQUxfQ09NUFJPTUlTRSc7CiAgICBwdWJsaWMgY29uc3QgVVBEQVRFX0FWQUlMQUJMRSA9ICdVUERBVEVfQVZBSUxBQkxFJzsKICAgIHB1YmxpYyBjb25zdCBSRVZPS0VEID0gJ1JFVk9LRUQnOwogICAgcHVibGljIGNvbnN0IFNFTEZfQVNTRVJUSU9OX1NVQk1JVFRFRCA9ICdTRUxGX0FTU0VSVElPTl9TVUJNSVRURUQnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0wxID0gJ0ZJRE9fQ0VSVElGSUVEX0wxJzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MMXBsdXMgPSAnRklET19DRVJUSUZJRURfTDFwbHVzJzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MMiA9ICdGSURPX0NFUlRJRklFRF9MMic7CiAgICBwdWJsaWMgY29uc3QgRklET19DRVJUSUZJRURfTDJwbHVzID0gJ0ZJRE9fQ0VSVElGSUVEX0wycGx1cyc7CiAgICBwdWJsaWMgY29uc3QgRklET19DRVJUSUZJRURfTDMgPSAnRklET19DRVJUSUZJRURfTDMnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0wzcGx1cyA9ICdGSURPX0NFUlRJRklFRF9MM3BsdXMnOwogICAgcHVibGljIGNvbnN0IEZJRE9fQ0VSVElGSUVEX0w0ID0gJ0ZJRE9fQ0VSVElGSUVEX0w0JzsKICAgIHB1YmxpYyBjb25zdCBGSURPX0NFUlRJRklFRF9MNSA9ICdGSURPX0NFUlRJRklFRF9MNSc7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaXN0KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgc2VsZjo6Tk9UX0ZJRE9fQ0VSVElGSUVELAogICAgICAgICAgICBzZWxmOjpGSURPX0NFUlRJRklFRCwKICAgICAgICAgICAgc2VsZjo6VVNFUl9WRVJJRklDQVRJT05fQllQQVNTLAogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9LRVlfQ09NUFJPTUlTRSwKICAgICAgICAgICAgc2VsZjo6VVNFUl9LRVlfUkVNT1RFX0NPTVBST01JU0UsCiAgICAgICAgICAgIHNlbGY6OlVTRVJfS0VZX1BIWVNJQ0FMX0NPTVBST01JU0UsCiAgICAgICAgICAgIHNlbGY6OlVQREFURV9BVkFJTEFCTEUsCiAgICAgICAgICAgIHNlbGY6OlJFVk9LRUQsCiAgICAgICAgICAgIHNlbGY6OlNFTEZfQVNTRVJUSU9OX1NVQk1JVFRFRCwKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDEsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wxcGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDIsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wycGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDMsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0wzcGx1cywKICAgICAgICAgICAgc2VsZjo6RklET19DRVJUSUZJRURfTDQsCiAgICAgICAgICAgIHNlbGY6OkZJRE9fQ0VSVElGSUVEX0w1LAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/BiometricAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgQmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yIGV4dGVuZHMgQWJzdHJhY3REZXNjcmlwdG9yCnsKICAgIC8qKgogICAgICogQHZhciBmbG9hdHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJEZBUjsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRGUlI7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkRUVSOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJEZBQVI7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1heFJlZmVyZW5jZURhdGFTZXRzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/ZmxvYXQgJEZBUiwgP2Zsb2F0ICRGUlIsID9mbG9hdCAkRUVSLCA/ZmxvYXQgJEZBQVIsID9pbnQgJG1heFJlZmVyZW5jZURhdGFTZXRzLCA/aW50ICRtYXhSZXRyaWVzID0gbnVsbCwgP2ludCAkYmxvY2tTbG93ZG93biA9IG51bGwpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1heFJlZmVyZW5jZURhdGFTZXRzLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHZhbHVlIG9mICJtYXhSZWZlcmVuY2VEYXRhU2V0cyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgJHRoaXMtPkZSUiA9ICRGUlI7CiAgICAgICAgJHRoaXMtPkZBUiA9ICRGQVI7CiAgICAgICAgJHRoaXMtPkVFUiA9ICRFRVI7CiAgICAgICAgJHRoaXMtPkZBQVIgPSAkRkFBUjsKICAgICAgICAkdGhpcy0+bWF4UmVmZXJlbmNlRGF0YVNldHMgPSAkbWF4UmVmZXJlbmNlRGF0YVNldHM7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbWF4UmV0cmllcywgJGJsb2NrU2xvd2Rvd24pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGQVIoKTogP2Zsb2F0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5GQVI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZSUigpOiA/ZmxvYXQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkZSUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RUVSKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RUVSOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGQUFSKCk6ID9mbG9hdAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RkFBUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWF4UmVmZXJlbmNlRGF0YVNldHMoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWF4UmVmZXJlbmNlRGF0YVNldHM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnRkFSJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ0ZSUiddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydFRVInXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnRkFBUiddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydtYXhSZWZlcmVuY2VEYXRhU2V0cyddID8/IG51bGwsCiAgICAgICAgICAgICRkYXRhWydtYXhSZXRyaWVzJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2Jsb2NrU2xvd2Rvd24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnRkFSJyA9PiAkdGhpcy0+RkFSLAogICAgICAgICAgICAnRlJSJyA9PiAkdGhpcy0+RlJSLAogICAgICAgICAgICAnRUVSJyA9PiAkdGhpcy0+RUVSLAogICAgICAgICAgICAnRkFBUicgPT4gJHRoaXMtPkZBQVIsCiAgICAgICAgICAgICdtYXhSZWZlcmVuY2VEYXRhU2V0cycgPT4gJHRoaXMtPm1heFJlZmVyZW5jZURhdGFTZXRzLAogICAgICAgICAgICAnbWF4UmV0cmllcycgPT4gJHRoaXMtPmdldE1heFJldHJpZXMoKSwKICAgICAgICAgICAgJ2Jsb2NrU2xvd2Rvd24nID0+ICR0aGlzLT5nZXRCbG9ja1Nsb3dkb3duKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/BiometricStatusReport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKY2xhc3MgQmlvbWV0cmljU3RhdHVzUmVwb3J0IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRMZXZlbDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1vZGFsaXR5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRlZmZlY3RpdmVEYXRlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGVOdW1iZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydExldmVsKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydExldmVsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2RhbGl0eSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZGFsaXR5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVEYXRlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVmZmVjdGl2ZURhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25EZXNjcmlwdG9yKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZXJ0aWZpY2F0ZU51bWJlcigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZU51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigpOwogICAgICAgICRvYmplY3QtPmNlcnRMZXZlbCA9ICRkYXRhWydjZXJ0TGV2ZWwnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPm1vZGFsaXR5ID0gJGRhdGFbJ21vZGFsaXR5J10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5lZmZlY3RpdmVEYXRlID0gJGRhdGFbJ2VmZmVjdGl2ZURhdGUnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yID0gJGRhdGFbJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJ10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5jZXJ0aWZpY2F0ZU51bWJlciA9ICRkYXRhWydjZXJ0aWZpY2F0ZU51bWJlciddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24gPSAkZGF0YVsnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uID0gJGRhdGFbJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJ10gPz8gbnVsbDsKCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ2NlcnRMZXZlbCcgPT4gJHRoaXMtPmNlcnRMZXZlbCwKICAgICAgICAgICAgJ21vZGFsaXR5JyA9PiAkdGhpcy0+bW9kYWxpdHksCiAgICAgICAgICAgICdlZmZlY3RpdmVEYXRlJyA9PiAkdGhpcy0+ZWZmZWN0aXZlRGF0ZSwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IsCiAgICAgICAgICAgICdjZXJ0aWZpY2F0ZU51bWJlcicgPT4gJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyLAogICAgICAgICAgICAnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nID0+ICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24sCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIGFycmF5X2ZpbHRlcigkZGF0YSwgc3RhdGljIGZ1bmN0aW9uICgkdmFyKTogYm9vbCB7cmV0dXJuIG51bGwgIT09ICR2YXI7IH0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/CodeAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKY2xhc3MgQ29kZUFjY3VyYWN5RGVzY3JpcHRvciBleHRlbmRzIEFic3RyYWN0RGVzY3JpcHRvcgp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGJhc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtaW5MZW5ndGg7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkYmFzZSwgaW50ICRtaW5MZW5ndGgsID9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkYmFzZSwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAiYmFzZSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1pbkxlbmd0aCwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWluTGVuZ3RoIiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpKTsKICAgICAgICAkdGhpcy0+YmFzZSA9ICRiYXNlOwogICAgICAgICR0aGlzLT5taW5MZW5ndGggPSAkbWluTGVuZ3RoOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1heFJldHJpZXMsICRibG9ja1Nsb3dkb3duKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJhc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbkxlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbkxlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2Jhc2UnLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgImJhc2UiIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdtaW5MZW5ndGgnLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgIm1pbkxlbmd0aCIgaXMgbWlzc2luZycpKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnYmFzZSddLAogICAgICAgICAgICAkZGF0YVsnbWluTGVuZ3RoJ10sCiAgICAgICAgICAgICRkYXRhWydtYXhSZXRyaWVzJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2Jsb2NrU2xvd2Rvd24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnYmFzZScgPT4gJHRoaXMtPmJhc2UsCiAgICAgICAgICAgICdtaW5MZW5ndGgnID0+ICR0aGlzLT5taW5MZW5ndGgsCiAgICAgICAgICAgICdtYXhSZXRyaWVzJyA9PiAkdGhpcy0+Z2V0TWF4UmV0cmllcygpLAogICAgICAgICAgICAnYmxvY2tTbG93ZG93bicgPT4gJHRoaXMtPmdldEJsb2NrU2xvd2Rvd24oKSwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/DisplayPNGCharacteristicsDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIERpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NEZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHdpZHRoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkaGVpZ2h0OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYml0RGVwdGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRjb2xvclR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRjb21wcmVzc2lvbjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGZpbHRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGludGVybGFjZTsKCiAgICAvKioKICAgICAqIEB2YXIgUmdiUGFsZXR0ZUVudHJ5W10KICAgICAqLwogICAgcHJpdmF0ZSAkcGx0ZSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHdpZHRoLCBpbnQgJGhlaWdodCwgaW50ICRiaXREZXB0aCwgaW50ICRjb2xvclR5cGUsIGludCAkY29tcHJlc3Npb24sIGludCAkZmlsdGVyLCBpbnQgJGludGVybGFjZSkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkd2lkdGgsIDAsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCB3aWR0aCcpKTsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkaGVpZ2h0LCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgaGVpZ2h0JykpOwogICAgICAgIEFzc2VydGlvbjo6cmFuZ2UoJGJpdERlcHRoLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBiaXQgZGVwdGgnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkY29sb3JUeXBlLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBjb2xvciB0eXBlJykpOwogICAgICAgIEFzc2VydGlvbjo6cmFuZ2UoJGNvbXByZXNzaW9uLCAwLCAyNTQsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBjb21wcmVzc2lvbicpKTsKICAgICAgICBBc3NlcnRpb246OnJhbmdlKCRmaWx0ZXIsIDAsIDI1NCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGZpbHRlcicpKTsKICAgICAgICBBc3NlcnRpb246OnJhbmdlKCRpbnRlcmxhY2UsIDAsIDI1NCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGludGVybGFjZScpKTsKCiAgICAgICAgJHRoaXMtPndpZHRoID0gJHdpZHRoOwogICAgICAgICR0aGlzLT5oZWlnaHQgPSAkaGVpZ2h0OwogICAgICAgICR0aGlzLT5iaXREZXB0aCA9ICRiaXREZXB0aDsKICAgICAgICAkdGhpcy0+Y29sb3JUeXBlID0gJGNvbG9yVHlwZTsKICAgICAgICAkdGhpcy0+Y29tcHJlc3Npb24gPSAkY29tcHJlc3Npb247CiAgICAgICAgJHRoaXMtPmZpbHRlciA9ICRmaWx0ZXI7CiAgICAgICAgJHRoaXMtPmludGVybGFjZSA9ICRpbnRlcmxhY2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBhbGV0dGUoUmdiUGFsZXR0ZUVudHJ5ICRyZ2JQYWxldHRlRW50cnkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnBsdGVbXSA9ICRyZ2JQYWxldHRlRW50cnk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkdGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53aWR0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVpZ2h0KCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGVpZ2h0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaXREZXB0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJpdERlcHRoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xvclR5cGUoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2xvclR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbXByZXNzaW9uKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcHJlc3Npb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbHRlcigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZXJsYWNlKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aW50ZXJsYWNlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZ2JQYWxldHRlRW50cnlbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGx0ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGx0ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgICAgICBmb3JlYWNoIChbJ3dpZHRoJywgJ2NvbXByZXNzaW9uJywgJ2hlaWdodCcsICdiaXREZXB0aCcsICdjb2xvclR5cGUnLCAnY29tcHJlc3Npb24nLCAnZmlsdGVyJywgJ2ludGVybGFjZSddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIGtleSAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3dpZHRoJ10sCiAgICAgICAgICAgICRkYXRhWydoZWlnaHQnXSwKICAgICAgICAgICAgJGRhdGFbJ2JpdERlcHRoJ10sCiAgICAgICAgICAgICRkYXRhWydjb2xvclR5cGUnXSwKICAgICAgICAgICAgJGRhdGFbJ2NvbXByZXNzaW9uJ10sCiAgICAgICAgICAgICRkYXRhWydmaWx0ZXInXSwKICAgICAgICAgICAgJGRhdGFbJ2ludGVybGFjZSddCiAgICAgICAgKTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3BsdGUnXSkpIHsKICAgICAgICAgICAgJHBsdGUgPSAkZGF0YVsncGx0ZSddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHBsdGUsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCAicGx0ZSIgcGFyYW1ldGVyJykpOwogICAgICAgICAgICBmb3JlYWNoICgkcGx0ZSBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgJG9iamVjdC0+YWRkUGFsZXR0ZShSZ2JQYWxldHRlRW50cnk6OmNyZWF0ZUZyb21BcnJheSgkaXRlbSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnd2lkdGgnID0+ICR0aGlzLT53aWR0aCwKICAgICAgICAgICAgJ2hlaWdodCcgPT4gJHRoaXMtPmhlaWdodCwKICAgICAgICAgICAgJ2JpdERlcHRoJyA9PiAkdGhpcy0+Yml0RGVwdGgsCiAgICAgICAgICAgICdjb2xvclR5cGUnID0+ICR0aGlzLT5jb2xvclR5cGUsCiAgICAgICAgICAgICdjb21wcmVzc2lvbicgPT4gJHRoaXMtPmNvbXByZXNzaW9uLAogICAgICAgICAgICAnZmlsdGVyJyA9PiAkdGhpcy0+ZmlsdGVyLAogICAgICAgICAgICAnaW50ZXJsYWNlJyA9PiAkdGhpcy0+aW50ZXJsYWNlLAogICAgICAgICAgICAncGx0ZScgPT4gJHRoaXMtPnBsdGUsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/DistantSingleMetadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIERpc3RhbnRTaW5nbGVNZXRhZGF0YSBleHRlbmRzIFNpbmdsZU1ldGFkYXRhCnsKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkaHR0cENsaWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdEZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGFkZGl0aW9uYWxIZWFkZXJzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGlzQmFzZTY0RW5jb2RlZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0RW5jb2RlZCwgQ2xpZW50SW50ZXJmYWNlICRodHRwQ2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHVyaSwgJGlzQmFzZTY0RW5jb2RlZCk7IC8vVXNlbGVzcwogICAgICAgICR0aGlzLT51cmkgPSAkdXJpOwogICAgICAgICR0aGlzLT5pc0Jhc2U2NEVuY29kZWQgPSAkaXNCYXNlNjRFbmNvZGVkOwogICAgICAgICR0aGlzLT5odHRwQ2xpZW50ID0gJGh0dHBDbGllbnQ7CiAgICAgICAgJHRoaXMtPnJlcXVlc3RGYWN0b3J5ID0gJHJlcXVlc3RGYWN0b3J5OwogICAgICAgICR0aGlzLT5hZGRpdGlvbmFsSGVhZGVycyA9ICRhZGRpdGlvbmFsSGVhZGVyczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnQoKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICAkcGF5bG9hZCA9ICR0aGlzLT5mZXRjaCgpOwogICAgICAgICRqc29uID0gJHRoaXMtPmlzQmFzZTY0RW5jb2RlZCA/IEJhc2U2NFVybDo6ZGVjb2RlKCRwYXlsb2FkKSA6ICRwYXlsb2FkOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwoKICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmZXRjaCgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5yZXF1ZXN0RmFjdG9yeS0+Y3JlYXRlUmVxdWVzdCgnR0VUJywgJHRoaXMtPnVyaSk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmFkZGl0aW9uYWxIZWFkZXJzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICRyZXF1ZXN0ID0gJHJlcXVlc3QtPndpdGhIZWFkZXIoJGssICR2KTsKICAgICAgICB9CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmh0dHBDbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICBBc3NlcnRpb246OmVxKDIwMCwgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCksIHNwcmludGYoJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFJlc3BvbnNlIGNvZGUgaXMgJWQnLCAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkpOwogICAgICAgICRjb250ZW50ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY29udGVudCwgJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFRoZSByZXNwb25zZSBoYXMgbm8gY29udGVudCcpOwoKICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/EcdaaTrustAnchor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBFY2RhYVRydXN0QW5jaG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJFg7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRZOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHN4OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc3k7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRHMUN1cnZlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJFgsIHN0cmluZyAkWSwgc3RyaW5nICRjLCBzdHJpbmcgJHN4LCBzdHJpbmcgJHN5LCBzdHJpbmcgJEcxQ3VydmUpCiAgICB7CiAgICAgICAgJHRoaXMtPlggPSAkWDsKICAgICAgICAkdGhpcy0+WSA9ICRZOwogICAgICAgICR0aGlzLT5jID0gJGM7CiAgICAgICAgJHRoaXMtPnN4ID0gJHN4OwogICAgICAgICR0aGlzLT5zeSA9ICRzeTsKICAgICAgICAkdGhpcy0+RzFDdXJ2ZSA9ICRHMUN1cnZlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRYKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+WDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPlk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN4OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHMUN1cnZlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+RzFDdXJ2ZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgICAgICBmb3JlYWNoIChbJ1gnLCAnWScsICdjJywgJ3N4JywgJ3N5JywgJ0cxQ3VydmUnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAka2V5LCBzcHJpbnRmKCdJbnZhbGlkIGRhdGEuIFRoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YVsnWCddKSwKICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ1knXSksCiAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydjJ10pLAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YVsnc3gnXSksCiAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydzeSddKSwKICAgICAgICAgICAgJGRhdGFbJ0cxQ3VydmUnXQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ1gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5YKSwKICAgICAgICAgICAgJ1knID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5ZKSwKICAgICAgICAgICAgJ2MnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jKSwKICAgICAgICAgICAgJ3N4JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+c3gpLAogICAgICAgICAgICAnc3knID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5zeSksCiAgICAgICAgICAgICdHMUN1cnZlJyA9PiAkdGhpcy0+RzFDdXJ2ZSwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/ExtensionDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CgpjbGFzcyBFeHRlbnNpb25EZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGlkOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0YWc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkZmFpbF9pZl91bmtub3duOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGlkLCA/aW50ICR0YWcsID9zdHJpbmcgJGRhdGEsIGJvb2wgJGZhaWxfaWZfdW5rbm93bikKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRhZykgewogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkdGFnLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAidGFnIiBzaGFsbCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5mYWlsX2lmX3Vua25vd24gPSAkZmFpbF9pZl91bmtub3duOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUYWcoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGFnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRhKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRmFpbElmVW5rbm93bigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWlsX2lmX3Vua25vd247CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBVdGlsczo6ZmlsdGVyTnVsbFZhbHVlcygkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdpZCcsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJpZCIgaXMgbWlzc2luZycpKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnaWQnXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImlkIiBzaGFsbCBiZSBhIHN0cmluZycpKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2ZhaWxfaWZfdW5rbm93bicsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJmYWlsX2lmX3Vua25vd24iIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpib29sZWFuKCRkYXRhWydmYWlsX2lmX3Vua25vd24nXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImZhaWxfaWZfdW5rbm93biIgc2hhbGwgYmUgYSBib29sZWFuJykpOwogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd0YWcnLCAkZGF0YSkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppbnRlZ2VyKCRkYXRhWyd0YWcnXSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgInRhZyIgc2hhbGwgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJykpOwogICAgICAgIH0KICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnZGF0YScsICRkYXRhKSkgewogICAgICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnZGF0YSddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiZGF0YSIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydpZCddLAogICAgICAgICAgICAkZGF0YVsndGFnJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2RhdGEnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnZmFpbF9pZl91bmtub3duJ10KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFsKICAgICAgICAgICAgJ2lkJyA9PiAkdGhpcy0+aWQsCiAgICAgICAgICAgICd0YWcnID0+ICR0aGlzLT50YWcsCiAgICAgICAgICAgICdkYXRhJyA9PiAkdGhpcy0+ZGF0YSwKICAgICAgICAgICAgJ2ZhaWxfaWZfdW5rbm93bicgPT4gJHRoaXMtPmZhaWxfaWZfdW5rbm93biwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJHJlc3VsdCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataService.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEVTMjU2Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXI7CnVzZSBMZWFndWVcVXJpXFVyaVN0cmluZzsKdXNlIExvZ2ljRXhjZXB0aW9uOwp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBUaHJvd2FibGU7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CgpjbGFzcyBNZXRhZGF0YVNlcnZpY2UKewogICAgLyoqCiAgICAgKiBAdmFyIENsaWVudEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRodHRwQ2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkYWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRhZGRpdGlvbmFsSGVhZGVyczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNlcnZpY2VVcmk7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc2VydmljZVVyaSwgQ2xpZW50SW50ZXJmYWNlICRodHRwQ2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsUXVlcnlTdHJpbmdWYWx1ZXMgPSBbXSwgYXJyYXkgJGFkZGl0aW9uYWxIZWFkZXJzID0gW10sID9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRhZGRpdGlvbmFsUXVlcnlTdHJpbmdWYWx1ZXMpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcyIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBhbiBlbXB0eSBhcnJheSBpbnN0ZWFkIGFuZCB1cyB0aGUgbWV0aG9kIGBhZGRRdWVyeVN0cmluZ1ZhbHVlc2AuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAoMCAhPT0gY291bnQoJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcykpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYWRkaXRpb25hbEhlYWRlcnMiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSBzZXQgYW4gZW1wdHkgYXJyYXkgaW5zdGVhZCBhbmQgdXMgdGhlIG1ldGhvZCBgYWRkSGVhZGVyc2AuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGxvZ2dlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsb2dnZXIiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TG9nZ2VyIiBpbnN0ZWFkLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNlcnZpY2VVcmkgPSAkc2VydmljZVVyaTsKICAgICAgICAkdGhpcy0+aHR0cENsaWVudCA9ICRodHRwQ2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzID0gJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlczsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbEhlYWRlcnMgPSAkYWRkaXRpb25hbEhlYWRlcnM7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUXVlcnlTdHJpbmdWYWx1ZXMoYXJyYXkgJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlcyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzID0gJGFkZGl0aW9uYWxRdWVyeVN0cmluZ1ZhbHVlczsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRIZWFkZXJzKGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWRkaXRpb25hbEhlYWRlcnMgPSAkYWRkaXRpb25hbEhlYWRlcnM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGFhZ3VpZCk6IGJvb2wKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdG9jID0gJHRoaXMtPmZldGNoTWV0YWRhdGFUT0NQYXlsb2FkKCk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHRvYy0+Z2V0RW50cmllcygpIGFzICRlbnRyeSkgewogICAgICAgICAgICBpZiAoJGVudHJ5LT5nZXRBYWd1aWQoKSA9PT0gJGFhZ3VpZCAmJiBudWxsICE9PSAkZW50cnktPmdldFVybCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRhYWd1aWQpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICR0b2MgPSAkdGhpcy0+ZmV0Y2hNZXRhZGF0YVRPQ1BheWxvYWQoKTsKICAgICAgICBmb3JlYWNoICgkdG9jLT5nZXRFbnRyaWVzKCkgYXMgJGVudHJ5KSB7CiAgICAgICAgICAgIGlmICgkZW50cnktPmdldEFhZ3VpZCgpID09PSAkYWFndWlkICYmIG51bGwgIT09ICRlbnRyeS0+Z2V0VXJsKCkpIHsKICAgICAgICAgICAgICAgICRtZHMgPSAkdGhpcy0+ZmV0Y2hNZXRhZGF0YVN0YXRlbWVudEZvcigkZW50cnkpOwogICAgICAgICAgICAgICAgJG1kcwogICAgICAgICAgICAgICAgICAgIC0+c2V0U3RhdHVzUmVwb3J0cygkZW50cnktPmdldFN0YXR1c1JlcG9ydHMoKSkKICAgICAgICAgICAgICAgICAgICAtPnNldFJvb3RDZXJ0aWZpY2F0ZXMoJHRvYy0+Z2V0Um9vdENlcnRpZmljYXRlcygpKQogICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgIHJldHVybiAkbWRzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBNZXRhZGF0YSBTdGF0ZW1lbnQgd2l0aCBBQUdVSUQgIiVzIiBpcyBtaXNzaW5nJywgJGFhZ3VpZCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBzaW5jZSB2My4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjQuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnRGb3IoTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgJGVudHJ5LCBzdHJpbmcgJGhhc2hpbmdGdW5jdGlvbiA9ICdzaGEyNTYnKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZldGNoTWV0YWRhdGFTdGF0ZW1lbnRGb3IoJGVudHJ5LCAkaGFzaGluZ0Z1bmN0aW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YVN0YXRlbWVudEZvcihNZXRhZGF0YVRPQ1BheWxvYWRFbnRyeSAkZW50cnksIHN0cmluZyAkaGFzaGluZ0Z1bmN0aW9uID0gJ3NoYTI1NicpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ1RyeWluZyB0byBnZXQgdGhlIG1ldGFkYXRhIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBlbnRyeScsIFsnZW50cnknID0+ICRlbnRyeV0pOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRoYXNoID0gJGVudHJ5LT5nZXRIYXNoKCk7CiAgICAgICAgICAgICR1cmwgPSAkZW50cnktPmdldFVybCgpOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gJGhhc2ggfHwgbnVsbCA9PT0gJHVybCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdUaGUgTWV0YWRhdGEgU3RhdGVtZW50IGhhcyBub3QgYmVlbiBwdWJsaXNoZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdXJpID0gJHRoaXMtPmJ1aWxkVXJpKCR1cmwpOwogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoJHVyaSwgdHJ1ZSwgJGhhc2gsICRoYXNoaW5nRnVuY3Rpb24pOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUaGUgbWV0YWRhdGEgc3RhdGVtZW50IGV4aXN0cycpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnTWV0YWRhdGEgU3RhdGVtZW50JywgWydtZHMnID0+ICRyZXN1bHRdKTsKCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhVE9DUGF5bG9hZCgpOiBNZXRhZGF0YVRPQ1BheWxvYWQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZldGNoTWV0YWRhdGFUT0NQYXlsb2FkKCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhVE9DUGF5bG9hZCgpOiBNZXRhZGF0YVRPQ1BheWxvYWQKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gZ2V0IHRoZSBtZXRhZGF0YSBzZXJ2aWNlIFRPQyBwYXlsb2FkJyk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHVyaSA9ICR0aGlzLT5idWlsZFVyaSgkdGhpcy0+c2VydmljZVVyaSk7CiAgICAgICAgICAgICR0b2MgPSAkdGhpcy0+ZmV0Y2hUYWJsZU9mQ29udGVudCgkdXJpKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIFRPQyBwYXlsb2FkIGhhcyBiZWVuIHJlY2VpdmVkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdUT0MgcGF5bG9hZCcsIFsndG9jJyA9PiAkdG9jXSk7CgogICAgICAgICAgICByZXR1cm4gJHRvYzsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCBbCiAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJyA9PiAkdGhyb3dhYmxlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFVyaShzdHJpbmcgJHVyaSk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWRVcmkgPSBVcmlTdHJpbmc6OnBhcnNlKCR1cmkpOwogICAgICAgICRxdWVyeVN0cmluZyA9ICRwYXJzZWRVcmlbJ3F1ZXJ5J107CiAgICAgICAgJHF1ZXJ5ID0gW107CiAgICAgICAgaWYgKG51bGwgIT09ICRxdWVyeVN0cmluZykgewogICAgICAgICAgICBwYXJzZV9zdHIoJHF1ZXJ5U3RyaW5nLCAkcXVlcnkpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+YWRkaXRpb25hbFF1ZXJ5U3RyaW5nVmFsdWVzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHF1ZXJ5WyRrXSkpIHsKICAgICAgICAgICAgICAgICRxdWVyeVska10gPSAkdjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJHF1ZXJ5WyRrXSkpIHsKICAgICAgICAgICAgICAgICRxdWVyeVska10gPSBbJHF1ZXJ5WyRrXSwgJHZdOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHF1ZXJ5WyRrXVtdID0gJHY7CiAgICAgICAgfQogICAgICAgICRwYXJzZWRVcmlbJ3F1ZXJ5J10gPSAwID09PSBjb3VudCgkcXVlcnkpID8gbnVsbCA6IGh0dHBfYnVpbGRfcXVlcnkoJHF1ZXJ5LCAnJywgJyYnLCBQSFBfUVVFUllfUkZDMzk4Nik7CgogICAgICAgIHJldHVybiBVcmlTdHJpbmc6OmJ1aWxkKCRwYXJzZWRVcmkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZmV0Y2hUYWJsZU9mQ29udGVudChzdHJpbmcgJHVyaSk6IE1ldGFkYXRhVE9DUGF5bG9hZAogICAgewogICAgICAgICRjb250ZW50ID0gJHRoaXMtPmZldGNoKCR1cmkpOwogICAgICAgICRyb290Q2VydGlmaWNhdGVzID0gW107CiAgICAgICAgJHBheWxvYWQgPSAkdGhpcy0+Z2V0SndzUGF5bG9hZCgkY29udGVudCwgJHJvb3RDZXJ0aWZpY2F0ZXMpOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJHBheWxvYWQsIHRydWUpOwoKICAgICAgICAkdG9jID0gTWV0YWRhdGFUT0NQYXlsb2FkOjpjcmVhdGVGcm9tQXJyYXkoJGRhdGEpOwogICAgICAgICR0b2MtPnNldFJvb3RDZXJ0aWZpY2F0ZXMoJHJvb3RDZXJ0aWZpY2F0ZXMpOwoKICAgICAgICByZXR1cm4gJHRvYzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0VXJsRW5jb2RlZCwgc3RyaW5nICRoYXNoID0gJycsIHN0cmluZyAkaGFzaGluZ0Z1bmN0aW9uID0gJ3NoYTI1NicpOiBNZXRhZGF0YVN0YXRlbWVudAogICAgewogICAgICAgICRwYXlsb2FkID0gJHRoaXMtPmZldGNoKCR1cmkpOwogICAgICAgIGlmICgnJyAhPT0gJGhhc2gpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRoYXNoLCBoYXNoKCRoYXNoaW5nRnVuY3Rpb24sICRwYXlsb2FkLCB0cnVlKSksICdUaGUgaGFzaCBjYW5ub3QgYmUgdmVyaWZpZWQuIFRoZSBtZXRhZGF0YSBzdGF0ZW1lbnQgc2hhbGwgYmUgcmVqZWN0ZWQnKTsKICAgICAgICB9CiAgICAgICAgJGpzb24gPSAkaXNCYXNlNjRVcmxFbmNvZGVkID8gQmFzZTY0VXJsOjpkZWNvZGUoJHBheWxvYWQpIDogJHBheWxvYWQ7CiAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBNZXRhZGF0YVN0YXRlbWVudDo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZldGNoKHN0cmluZyAkdXJpKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICR1cmkpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5hZGRpdGlvbmFsSGVhZGVycyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCRrLCAkdik7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5odHRwQ2xpZW50LT5zZW5kUmVxdWVzdCgkcmVxdWVzdCk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgyMDAsICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCBzcHJpbnRmKCdVbmFibGUgdG8gY29udGFjdCB0aGUgc2VydmVyLiBSZXNwb25zZSBjb2RlIGlzICVkJywgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkpKTsKICAgICAgICAkY29udGVudCA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5nZXRDb250ZW50cygpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGNvbnRlbnQsICdVbmFibGUgdG8gY29udGFjdCB0aGUgc2VydmVyLiBUaGUgcmVzcG9uc2UgaGFzIG5vIGNvbnRlbnQnKTsKCiAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0SndzUGF5bG9hZChzdHJpbmcgJHRva2VuLCBhcnJheSAmJHJvb3RDZXJ0aWZpY2F0ZXMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkandzID0gKG5ldyBDb21wYWN0U2VyaWFsaXplcigpKS0+dW5zZXJpYWxpemUoJHRva2VuKTsKICAgICAgICBBc3NlcnRpb246OmVxKDEsICRqd3MtPmNvdW50U2lnbmF0dXJlcygpLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBPbmx5IG9uZSBzaWduYXR1cmUgc2hhbGwgYmUgcHJlc2VudC4nKTsKICAgICAgICAkc2lnbmF0dXJlID0gJGp3cy0+Z2V0U2lnbmF0dXJlKDApOwogICAgICAgICRwYXlsb2FkID0gJGp3cy0+Z2V0UGF5bG9hZCgpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJHBheWxvYWQsICdJbnZhbGlkIHJlc3BvbnNlIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZpY2UuIFRoZSB0b2tlbiBwYXlsb2FkIGlzIGVtcHR5LicpOwogICAgICAgICRoZWFkZXIgPSAkc2lnbmF0dXJlLT5nZXRQcm90ZWN0ZWRIZWFkZXIoKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkaGVhZGVyLCAnYWxnJywgJ1RoZSAiYWxnIiBwYXJhbWV0ZXIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRoZWFkZXJbJ2FsZyddLCAnRVMyNTYnLCAnVGhlIGV4cGVjdGVkICJhbGciIHBhcmFtZXRlciB2YWx1ZSBzaG91bGQgYmUgIkVTMjU2Ii4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkaGVhZGVyLCAneDVjJywgJ1RoZSAieDVjIiBwYXJhbWV0ZXIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGhlYWRlclsneDVjJ10sICdUaGUgIng1YyIgcGFyYW1ldGVyIHNob3VsZCBiZSBhbiBhcnJheS4nKTsKICAgICAgICAka2V5ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbVg1QygkaGVhZGVyWyd4NWMnXSk7CiAgICAgICAgJHJvb3RDZXJ0aWZpY2F0ZXMgPSBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChzdHJpbmcgJHg1MDkpOiBzdHJpbmcgewogICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVUb29sYm94OjpmaXhQRU1TdHJ1Y3R1cmUoJHg1MDkpOwogICAgICAgIH0sICRoZWFkZXJbJ3g1YyddKTsKICAgICAgICAkYWxnb3JpdGhtID0gbmV3IEVTMjU2KCk7CiAgICAgICAgJGlzVmFsaWQgPSAkYWxnb3JpdGhtLT52ZXJpZnkoJGtleSwgJHNpZ25hdHVyZS0+Z2V0RW5jb2RlZFByb3RlY3RlZEhlYWRlcigpLicuJy4kandzLT5nZXRFbmNvZGVkUGF5bG9hZCgpLCAkc2lnbmF0dXJlLT5nZXRTaWduYXR1cmUoKSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRpc1ZhbGlkLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBUaGUgdG9rZW4gc2lnbmF0dXJlIGlzIGludmFsaWQuJyk7CgogICAgICAgIHJldHVybiAkandzLT5nZXRQYXlsb2FkKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBNZXRhZGF0YVN0YXRlbWVudCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX1NPRlRXQVJFID0gMHgwMDAxOwogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX0hBUkRXQVJFID0gMHgwMDAyOwogICAgcHVibGljIGNvbnN0IEtFWV9QUk9URUNUSU9OX1RFRSA9IDB4MDAwNDsKICAgIHB1YmxpYyBjb25zdCBLRVlfUFJPVEVDVElPTl9TRUNVUkVfRUxFTUVOVCA9IDB4MDAwODsKICAgIHB1YmxpYyBjb25zdCBLRVlfUFJPVEVDVElPTl9SRU1PVEVfSEFORExFID0gMHgwMDEwOwoKICAgIHB1YmxpYyBjb25zdCBNQVRDSEVSX1BST1RFQ1RJT05fU09GVFdBUkUgPSAweDAwMDE7CiAgICBwdWJsaWMgY29uc3QgTUFUQ0hFUl9QUk9URUNUSU9OX1RFRSA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBNQVRDSEVSX1BST1RFQ1RJT05fT05fQ0hJUCA9IDB4MDAwNDsKCiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX0lOVEVSTkFMID0gMHgwMDAxOwogICAgcHVibGljIGNvbnN0IEFUVEFDSE1FTlRfSElOVF9FWFRFUk5BTCA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfV0lSRUQgPSAweDAwMDQ7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX1dJUkVMRVNTID0gMHgwMDA4OwogICAgcHVibGljIGNvbnN0IEFUVEFDSE1FTlRfSElOVF9ORkMgPSAweDAwMTA7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX0JMVUVUT09USCA9IDB4MDAyMDsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfTkVUV09SSyA9IDB4MDA0MDsKICAgIHB1YmxpYyBjb25zdCBBVFRBQ0hNRU5UX0hJTlRfUkVBRFkgPSAweDAwODA7CiAgICBwdWJsaWMgY29uc3QgQVRUQUNITUVOVF9ISU5UX1dJRklfRElSRUNUID0gMHgwMTAwOwoKICAgIHB1YmxpYyBjb25zdCBUUkFOU0FDVElPTl9DT05GSVJNQVRJT05fRElTUExBWV9BTlkgPSAweDAwMDE7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfUFJJVklMRUdFRF9TT0ZUV0FSRSA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBUUkFOU0FDVElPTl9DT05GSVJNQVRJT05fRElTUExBWV9URUUgPSAweDAwMDQ7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfSEFSRFdBUkUgPSAweDAwMDg7CiAgICBwdWJsaWMgY29uc3QgVFJBTlNBQ1RJT05fQ09ORklSTUFUSU9OX0RJU1BMQVlfUkVNT1RFID0gMHgwMDEwOwoKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9TRUNQMjU2UjFfRUNEU0FfU0hBMjU2X1JBVyA9IDB4MDAwMTsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9TRUNQMjU2UjFfRUNEU0FfU0hBMjU2X0RFUiA9IDB4MDAwMjsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUFNTX1NIQTI1Nl9SQVcgPSAweDAwMDM7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BTU19TSEEyNTZfREVSID0gMHgwMDA0OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AyNTZLMV9FQ0RTQV9TSEEyNTZfUkFXID0gMHgwMDA1OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AyNTZLMV9FQ0RTQV9TSEEyNTZfREVSID0gMHgwMDA2OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NNMl9TTTNfUkFXID0gMHgwMDA3OwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQV9FTVNBX1BLQ1MxX1NIQTI1Nl9SQVcgPSAweDAwMDg7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBX0VNU0FfUEtDUzFfU0hBMjU2X0RFUiA9IDB4MDAwOTsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUFNTX1NIQTM4NF9SQVcgPSAweDAwMEE7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BTU19TSEE1MTJfUkFXID0gMHgwMDBCOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQVNTQV9QS0NTVjE1X1NIQTI1Nl9SQVcgPSAweDAwMEM7CiAgICBwdWJsaWMgY29uc3QgQUxHX1NJR05fUlNBU1NBX1BLQ1NWMTVfU0hBMzg0X1JBVyA9IDB4MDAwRDsKICAgIHB1YmxpYyBjb25zdCBBTEdfU0lHTl9SU0FTU0FfUEtDU1YxNV9TSEE1MTJfUkFXID0gMHgwMDBFOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1JTQVNTQV9QS0NTVjE1X1NIQTFfUkFXID0gMHgwMDBGOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1AzODRSMV9FQ0RTQV9TSEEzODRfUkFXID0gMHgwMDEwOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX1NFQ1A1MjFSMV9FQ0RTQV9TSEE1MTJfUkFXID0gMHgwMDExOwogICAgcHVibGljIGNvbnN0IEFMR19TSUdOX0VEMjU1MTlfRUREU0FfU0hBMjU2X1JBVyA9IDB4MDAxMjsKCiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9FQ0NfWDk2Ml9SQVcgPSAweDAxMDA7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9FQ0NfWDk2Ml9ERVIgPSAweDAxMDE7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9SU0FfMjA0OF9SQVcgPSAweDAxMDI7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9SU0FfMjA0OF9ERVIgPSAweDAxMDM7CiAgICBwdWJsaWMgY29uc3QgQUxHX0tFWV9DT1NFID0gMHgwMTA0OwoKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9CQVNJQ19GVUxMID0gMHgzRTA3OwogICAgcHVibGljIGNvbnN0IEFUVEVTVEFUSU9OX0JBU0lDX1NVUlJPR0FURSA9IDB4M0UwODsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9FQ0RBQSA9IDB4M0UwOTsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9BVFRDQSA9IDB4M0UwQTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbGVnYWxIZWFkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGFhaWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGFhZ3VpZDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGRlc2NyaXB0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRhbHRlcm5hdGl2ZURlc2NyaXB0aW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYXV0aGVudGljYXRvclZlcnNpb247CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRwcm90b2NvbEZhbWlseTsKCiAgICAvKioKICAgICAqIEB2YXIgVmVyc2lvbltdCiAgICAgKi8KICAgIHByaXZhdGUgJHVwdiA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhc3NlcnRpb25TY2hlbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtOwoKICAgIC8qKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdGlvbkFsZ29yaXRobXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcHVibGljS2V5QWxnQW5kRW5jb2Rpbmc7CgogICAgLyoqCiAgICAgKiBAdmFyIGludFtdCiAgICAgKi8KICAgIHByaXZhdGUgJHB1YmxpY0tleUFsZ0FuZEVuY29kaW5ncyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwcml2YXRlICRhdHRlc3RhdGlvblR5cGVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9uc1tdCiAgICAgKi8KICAgIHByaXZhdGUgJHVzZXJWZXJpZmljYXRpb25EZXRhaWxzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRrZXlQcm90ZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNLZXlSZXN0cmljdGVkOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG1hdGNoZXJQcm90ZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjcnlwdG9TdHJlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkb3BlcmF0aW5nRW52OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0YWNobWVudEhpbnQgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBib29sfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaXNTZWNvbmRGYWN0b3JPbmx5OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdGNEaXNwbGF5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR0Y0Rpc3BsYXlDb250ZW50VHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljc0Rlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIEVjZGFhVHJ1c3RBbmNob3JbXQogICAgICovCiAgICBwcml2YXRlICRlY2RhYVRydXN0QW5jaG9ycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRpY29uOwoKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25EZXNjcmlwdG9yW10KICAgICAqLwogICAgcHJpdmF0ZSAkc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIFN0YXR1c1JlcG9ydD4KICAgICAqLwogICAgcHJpdmF0ZSAkc3RhdHVzUmVwb3J0cyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRyb290Q2VydGlmaWNhdGVzID0gW107CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkc3RhdGVtZW50KTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJHN0YXRlbWVudCwgdHJ1ZSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldExlZ2FsSGVhZGVyKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxlZ2FsSGVhZGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWlkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFhaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFhZ3VpZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hYWd1aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVyczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZXNjcmlwdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsdGVybmF0aXZlRGVzY3JpcHRpb25zKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbHRlcm5hdGl2ZURlc2NyaXB0aW9uczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRvclZlcnNpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yVmVyc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdG9jb2xGYW1pbHkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm90b2NvbEZhbWlseTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gVmVyc2lvbltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcHYoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwdjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXNzZXJ0aW9uU2NoZW1lKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFzc2VydGlvblNjaGVtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRpb25BbGdvcml0aG0oKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXV0aGVudGljYXRpb25BbGdvcml0aG07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5QWxnQW5kRW5jb2RpbmcoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5QWxnQW5kRW5jb2Rpbmc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlBbGdBbmRFbmNvZGluZ3MoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnB1YmxpY0tleUFsZ0FuZEVuY29kaW5nczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uVHlwZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9uc1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyVmVyaWZpY2F0aW9uRGV0YWlscygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbkRldGFpbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEtleVByb3RlY3Rpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5rZXlQcm90ZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0tleVJlc3RyaWN0ZWQoKTogP2Jvb2wKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5pc0tleVJlc3RyaWN0ZWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRnJlc2hVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZWQoKTogP2Jvb2wKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5pc0ZyZXNoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXRjaGVyUHJvdGVjdGlvbigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1hdGNoZXJQcm90ZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcnlwdG9TdHJlbmd0aCgpOiA/aW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcnlwdG9TdHJlbmd0aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3BlcmF0aW5nRW52KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wZXJhdGluZ0VudjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEhpbnQoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRhY2htZW50SGludDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWNvbmRGYWN0b3JPbmx5KCk6ID9ib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSAkdGhpcy0+aXNTZWNvbmRGYWN0b3JPbmx5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUY0Rpc3BsYXkoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50Y0Rpc3BsYXk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRjRGlzcGxheUNvbnRlbnRUeXBlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRjRGlzcGxheUNvbnRlbnRUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUY0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uUm9vdENlcnRpZmljYXRlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBFY2RhYVRydXN0QW5jaG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVjZGFhVHJ1c3RBbmNob3JzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lY2RhYVRydXN0QW5jaG9yczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWNvbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pY29uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBFeHRlbnNpb25EZXNjcmlwdG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1cHBvcnRlZEV4dGVuc2lvbnM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoWydkZXNjcmlwdGlvbicsICdwcm90b2NvbEZhbWlseSddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkZGF0YVska2V5XSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9iamVjdC0+bGVnYWxIZWFkZXIgPSAkZGF0YVsnbGVnYWxIZWFkZXInXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmFhaWQgPSAkZGF0YVsnYWFpZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YWFndWlkID0gJGRhdGFbJ2FhZ3VpZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzID0gJGRhdGFbJ2F0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyddID8/IFtdOwogICAgICAgICRvYmplY3QtPmRlc2NyaXB0aW9uID0gJGRhdGFbJ2Rlc2NyaXB0aW9uJ107CiAgICAgICAgJG9iamVjdC0+YWx0ZXJuYXRpdmVEZXNjcmlwdGlvbnMgPSAkZGF0YVsnYWx0ZXJuYXRpdmVEZXNjcmlwdGlvbnMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5hdXRoZW50aWNhdG9yVmVyc2lvbiA9ICRkYXRhWydhdXRoZW50aWNhdG9yVmVyc2lvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+cHJvdG9jb2xGYW1pbHkgPSAkZGF0YVsncHJvdG9jb2xGYW1pbHknXTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3VwdiddKSkgewogICAgICAgICAgICAkdXB2ID0gJGRhdGFbJ3VwdiddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHVwdiwgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR1cHYgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHZhbHVlLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnVwdltdID0gVmVyc2lvbjo6Y3JlYXRlRnJvbUFycmF5KCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9iamVjdC0+YXNzZXJ0aW9uU2NoZW1lID0gJGRhdGFbJ2Fzc2VydGlvblNjaGVtZSddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+YXV0aGVudGljYXRpb25BbGdvcml0aG0gPSAkZGF0YVsnYXV0aGVudGljYXRpb25BbGdvcml0aG0nXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyA9ICRkYXRhWydhdXRoZW50aWNhdGlvbkFsZ29yaXRobXMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5wdWJsaWNLZXlBbGdBbmRFbmNvZGluZyA9ICRkYXRhWydwdWJsaWNLZXlBbGdBbmRFbmNvZGluZyddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+cHVibGljS2V5QWxnQW5kRW5jb2RpbmdzID0gJGRhdGFbJ3B1YmxpY0tleUFsZ0FuZEVuY29kaW5ncyddID8/IFtdOwogICAgICAgICRvYmplY3QtPmF0dGVzdGF0aW9uVHlwZXMgPSAkZGF0YVsnYXR0ZXN0YXRpb25UeXBlcyddID8/IFtdOwogICAgICAgIGlmIChpc3NldCgkZGF0YVsndXNlclZlcmlmaWNhdGlvbkRldGFpbHMnXSkpIHsKICAgICAgICAgICAgJHVzZXJWZXJpZmljYXRpb25EZXRhaWxzID0gJGRhdGFbJ3VzZXJWZXJpZmljYXRpb25EZXRhaWxzJ107CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkdXNlclZlcmlmaWNhdGlvbkRldGFpbHMsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkdXNlclZlcmlmaWNhdGlvbkRldGFpbHMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHZhbHVlLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnVzZXJWZXJpZmljYXRpb25EZXRhaWxzW10gPSBWZXJpZmljYXRpb25NZXRob2RBTkRDb21iaW5hdGlvbnM6OmNyZWF0ZUZyb21BcnJheSgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRvYmplY3QtPmtleVByb3RlY3Rpb24gPSAkZGF0YVsna2V5UHJvdGVjdGlvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+aXNLZXlSZXN0cmljdGVkID0gJGRhdGFbJ2lzS2V5UmVzdHJpY3RlZCddID8/IG51bGw7CiAgICAgICAgJG9iamVjdC0+aXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZCA9ICRkYXRhWydpc0ZyZXNoVXNlclZlcmlmaWNhdGlvblJlcXVpcmVkJ10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT5tYXRjaGVyUHJvdGVjdGlvbiA9ICRkYXRhWydtYXRjaGVyUHJvdGVjdGlvbiddID8/IDA7CiAgICAgICAgJG9iamVjdC0+Y3J5cHRvU3RyZW5ndGggPSAkZGF0YVsnY3J5cHRvU3RyZW5ndGgnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPm9wZXJhdGluZ0VudiA9ICRkYXRhWydvcGVyYXRpbmdFbnYnXSA/PyBudWxsOwogICAgICAgICRvYmplY3QtPmF0dGFjaG1lbnRIaW50ID0gJGRhdGFbJ2F0dGFjaG1lbnRIaW50J10gPz8gMDsKICAgICAgICAkb2JqZWN0LT5pc1NlY29uZEZhY3Rvck9ubHkgPSAkZGF0YVsnaXNTZWNvbmRGYWN0b3JPbmx5J10gPz8gbnVsbDsKICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXkgPSAkZGF0YVsndGNEaXNwbGF5J10gPz8gMDsKICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXlDb250ZW50VHlwZSA9ICRkYXRhWyd0Y0Rpc3BsYXlDb250ZW50VHlwZSddID8/IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyd0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MnXSkpIHsKICAgICAgICAgICAgJHRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljcyA9ICRkYXRhWyd0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MnXTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3MsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkdGNEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzIGFzICR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpYykgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCR0Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpYywgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT50Y0Rpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NbXSA9IERpc3BsYXlQTkdDaGFyYWN0ZXJpc3RpY3NEZXNjcmlwdG9yOjpjcmVhdGVGcm9tQXJyYXkoJHRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkb2JqZWN0LT5hdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMgPSAkZGF0YVsnYXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzJ10gPz8gW107CiAgICAgICAgJG9iamVjdC0+ZWNkYWFUcnVzdEFuY2hvcnMgPSAkZGF0YVsnZWNkYWFUcnVzdEFuY2hvcnMnXSA/PyBbXTsKICAgICAgICAkb2JqZWN0LT5pY29uID0gJGRhdGFbJ2ljb24nXSA/PyBudWxsOwogICAgICAgIGlmIChpc3NldCgkZGF0YVsnc3VwcG9ydGVkRXh0ZW5zaW9ucyddKSkgewogICAgICAgICAgICAkc3VwcG9ydGVkRXh0ZW5zaW9ucyA9ICRkYXRhWydzdXBwb3J0ZWRFeHRlbnNpb25zJ107CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9ucywgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzdXBwb3J0ZWRFeHRlbnNpb25zIGFzICRzdXBwb3J0ZWRFeHRlbnNpb24pIHsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9uLCAnSW52YWxpZCBNZXRhZGF0YSBTdGF0ZW1lbnQnKTsKICAgICAgICAgICAgICAgICRvYmplY3QtPnN1cHBvcnRlZEV4dGVuc2lvbnNbXSA9IEV4dGVuc2lvbkRlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkc3VwcG9ydGVkRXh0ZW5zaW9uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkb2JqZWN0LT5yb290Q2VydGlmaWNhdGVzID0gJGRhdGFbJ3Jvb3RDZXJ0aWZpY2F0ZXMnXSA/PyBbXTsKICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3N0YXR1c1JlcG9ydHMnXSkpIHsKICAgICAgICAgICAgJHJlcG9ydHMgPSAkZGF0YVsnc3RhdHVzUmVwb3J0cyddOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHJlcG9ydHMsICdJbnZhbGlkIE1ldGFkYXRhIFN0YXRlbWVudCcpOwogICAgICAgICAgICBmb3JlYWNoICgkcmVwb3J0cyBhcyAkcmVwb3J0KSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHJlcG9ydCwgJ0ludmFsaWQgTWV0YWRhdGEgU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT5zdGF0dXNSZXBvcnRzW10gPSBTdGF0dXNSZXBvcnQ6OmNyZWF0ZUZyb21BcnJheSgkcmVwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ2xlZ2FsSGVhZGVyJyA9PiAkdGhpcy0+bGVnYWxIZWFkZXIsCiAgICAgICAgICAgICdhYWlkJyA9PiAkdGhpcy0+YWFpZCwKICAgICAgICAgICAgJ2FhZ3VpZCcgPT4gJHRoaXMtPmFhZ3VpZCwKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycycgPT4gJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycywKICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkdGhpcy0+ZGVzY3JpcHRpb24sCiAgICAgICAgICAgICdhbHRlcm5hdGl2ZURlc2NyaXB0aW9ucycgPT4gJHRoaXMtPmFsdGVybmF0aXZlRGVzY3JpcHRpb25zLAogICAgICAgICAgICAnYXV0aGVudGljYXRvclZlcnNpb24nID0+ICR0aGlzLT5hdXRoZW50aWNhdG9yVmVyc2lvbiwKICAgICAgICAgICAgJ3Byb3RvY29sRmFtaWx5JyA9PiAkdGhpcy0+cHJvdG9jb2xGYW1pbHksCiAgICAgICAgICAgICd1cHYnID0+ICR0aGlzLT51cHYsCiAgICAgICAgICAgICdhc3NlcnRpb25TY2hlbWUnID0+ICR0aGlzLT5hc3NlcnRpb25TY2hlbWUsCiAgICAgICAgICAgICdhdXRoZW50aWNhdGlvbkFsZ29yaXRobScgPT4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtLAogICAgICAgICAgICAnYXV0aGVudGljYXRpb25BbGdvcml0aG1zJyA9PiAkdGhpcy0+YXV0aGVudGljYXRpb25BbGdvcml0aG1zLAogICAgICAgICAgICAncHVibGljS2V5QWxnQW5kRW5jb2RpbmcnID0+ICR0aGlzLT5wdWJsaWNLZXlBbGdBbmRFbmNvZGluZywKICAgICAgICAgICAgJ3B1YmxpY0tleUFsZ0FuZEVuY29kaW5ncycgPT4gJHRoaXMtPnB1YmxpY0tleUFsZ0FuZEVuY29kaW5ncywKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uVHlwZXMnID0+ICR0aGlzLT5hdHRlc3RhdGlvblR5cGVzLAogICAgICAgICAgICAndXNlclZlcmlmaWNhdGlvbkRldGFpbHMnID0+ICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uRGV0YWlscywKICAgICAgICAgICAgJ2tleVByb3RlY3Rpb24nID0+ICR0aGlzLT5rZXlQcm90ZWN0aW9uLAogICAgICAgICAgICAnaXNLZXlSZXN0cmljdGVkJyA9PiAkdGhpcy0+aXNLZXlSZXN0cmljdGVkLAogICAgICAgICAgICAnaXNGcmVzaFVzZXJWZXJpZmljYXRpb25SZXF1aXJlZCcgPT4gJHRoaXMtPmlzRnJlc2hVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZWQsCiAgICAgICAgICAgICdtYXRjaGVyUHJvdGVjdGlvbicgPT4gJHRoaXMtPm1hdGNoZXJQcm90ZWN0aW9uLAogICAgICAgICAgICAnY3J5cHRvU3RyZW5ndGgnID0+ICR0aGlzLT5jcnlwdG9TdHJlbmd0aCwKICAgICAgICAgICAgJ29wZXJhdGluZ0VudicgPT4gJHRoaXMtPm9wZXJhdGluZ0VudiwKICAgICAgICAgICAgJ2F0dGFjaG1lbnRIaW50JyA9PiAkdGhpcy0+YXR0YWNobWVudEhpbnQsCiAgICAgICAgICAgICdpc1NlY29uZEZhY3Rvck9ubHknID0+ICR0aGlzLT5pc1NlY29uZEZhY3Rvck9ubHksCiAgICAgICAgICAgICd0Y0Rpc3BsYXknID0+ICR0aGlzLT50Y0Rpc3BsYXksCiAgICAgICAgICAgICd0Y0Rpc3BsYXlDb250ZW50VHlwZScgPT4gJHRoaXMtPnRjRGlzcGxheUNvbnRlbnRUeXBlLAogICAgICAgICAgICAndGNEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChEaXNwbGF5UE5HQ2hhcmFjdGVyaXN0aWNzRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnRjRGlzcGxheVBOR0NoYXJhY3RlcmlzdGljcyksCiAgICAgICAgICAgICdhdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMnID0+ICR0aGlzLT5hdHRlc3RhdGlvblJvb3RDZXJ0aWZpY2F0ZXMsCiAgICAgICAgICAgICdlY2RhYVRydXN0QW5jaG9ycycgPT4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoRWNkYWFUcnVzdEFuY2hvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPmVjZGFhVHJ1c3RBbmNob3JzKSwKICAgICAgICAgICAgJ2ljb24nID0+ICR0aGlzLT5pY29uLAogICAgICAgICAgICAnc3VwcG9ydGVkRXh0ZW5zaW9ucycgPT4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoRXh0ZW5zaW9uRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnN1cHBvcnRlZEV4dGVuc2lvbnMpLAogICAgICAgICAgICAncm9vdENlcnRpZmljYXRlcycgPT4gJHRoaXMtPnJvb3RDZXJ0aWZpY2F0ZXMsCiAgICAgICAgICAgICdzdGF0dXNSZXBvcnRzJyA9PiAkdGhpcy0+c3RhdHVzUmVwb3J0cywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBTdGF0dXNSZXBvcnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdHVzUmVwb3J0cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdHVzUmVwb3J0czsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBTdGF0dXNSZXBvcnRbXSAkc3RhdHVzUmVwb3J0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RhdHVzUmVwb3J0cyhhcnJheSAkc3RhdHVzUmVwb3J0cyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+c3RhdHVzUmVwb3J0cyA9ICRzdGF0dXNSZXBvcnRzOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb290Q2VydGlmaWNhdGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb290Q2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRyb290Q2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSb290Q2VydGlmaWNhdGVzKGFycmF5ICRyb290Q2VydGlmaWNhdGVzKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5yb290Q2VydGlmaWNhdGVzID0gJHJvb3RDZXJ0aWZpY2F0ZXM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatementFetcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVMyNTY7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcjsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCi8qKgogKiBAZGVwcmVjYXRlZCBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAKICovCmNsYXNzIE1ldGFkYXRhU3RhdGVtZW50RmV0Y2hlcgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZldGNoVGFibGVPZkNvbnRlbnQoc3RyaW5nICR1cmksIENsaWVudEludGVyZmFjZSAkY2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKTogTWV0YWRhdGFUT0NQYXlsb2FkCiAgICB7CiAgICAgICAgJGNvbnRlbnQgPSBzZWxmOjpmZXRjaCgkdXJpLCAkY2xpZW50LCAkcmVxdWVzdEZhY3RvcnksICRhZGRpdGlvbmFsSGVhZGVycyk7CiAgICAgICAgJHBheWxvYWQgPSBzZWxmOjpnZXRKd3NQYXlsb2FkKCRjb250ZW50KTsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRwYXlsb2FkLCB0cnVlKTsKCiAgICAgICAgcmV0dXJuIE1ldGFkYXRhVE9DUGF5bG9hZDo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGFTdGF0ZW1lbnQoc3RyaW5nICR1cmksIGJvb2wgJGlzQmFzZTY0VXJsRW5jb2RlZCwgQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlICRyZXF1ZXN0RmFjdG9yeSwgYXJyYXkgJGFkZGl0aW9uYWxIZWFkZXJzID0gW10sIHN0cmluZyAkaGFzaCA9ICcnLCBzdHJpbmcgJGhhc2hpbmdGdW5jdGlvbiA9ICdzaGEyNTYnKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICAkcGF5bG9hZCA9IHNlbGY6OmZldGNoKCR1cmksICRjbGllbnQsICRyZXF1ZXN0RmFjdG9yeSwgJGFkZGl0aW9uYWxIZWFkZXJzKTsKICAgICAgICBpZiAoJycgIT09ICRoYXNoKSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZShoYXNoX2VxdWFscygkaGFzaCwgaGFzaCgkaGFzaGluZ0Z1bmN0aW9uLCAkcGF5bG9hZCwgdHJ1ZSkpLCAnVGhlIGhhc2ggY2Fubm90IGJlIHZlcmlmaWVkLiBUaGUgbWV0YWRhdGEgc3RhdGVtZW50IHNoYWxsIGJlIHJlamVjdGVkJyk7CiAgICAgICAgfQogICAgICAgICRqc29uID0gJGlzQmFzZTY0VXJsRW5jb2RlZCA/IEJhc2U2NFVybDo6ZGVjb2RlKCRwYXlsb2FkKSA6ICRwYXlsb2FkOwogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwoKICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZmV0Y2goc3RyaW5nICR1cmksIENsaWVudEludGVyZmFjZSAkY2xpZW50LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnksIGFycmF5ICRhZGRpdGlvbmFsSGVhZGVycyA9IFtdKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICR1cmkpOwogICAgICAgIGZvcmVhY2ggKCRhZGRpdGlvbmFsSGVhZGVycyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCRrLCAkdik7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZSA9ICRjbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICBBc3NlcnRpb246OmVxKDIwMCwgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCksIHNwcmludGYoJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFJlc3BvbnNlIGNvZGUgaXMgJWQnLCAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkpOwogICAgICAgICRjb250ZW50ID0gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY29udGVudCwgJ1VuYWJsZSB0byBjb250YWN0IHRoZSBzZXJ2ZXIuIFRoZSByZXNwb25zZSBoYXMgbm8gY29udGVudCcpOwoKICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SndzUGF5bG9hZChzdHJpbmcgJHRva2VuKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGp3cyA9IChuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoKSktPnVuc2VyaWFsaXplKCR0b2tlbik7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgxLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSwgJ0ludmFsaWQgcmVzcG9uc2UgZnJvbSB0aGUgbWV0YWRhdGEgc2VydmljZS4gT25seSBvbmUgc2lnbmF0dXJlIHNoYWxsIGJlIHByZXNlbnQuJyk7CiAgICAgICAgJHNpZ25hdHVyZSA9ICRqd3MtPmdldFNpZ25hdHVyZSgwKTsKICAgICAgICAkcGF5bG9hZCA9ICRqd3MtPmdldFBheWxvYWQoKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRwYXlsb2FkLCAnSW52YWxpZCByZXNwb25zZSBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2aWNlLiBUaGUgdG9rZW4gcGF5bG9hZCBpcyBlbXB0eS4nKTsKICAgICAgICAkaGVhZGVyID0gJHNpZ25hdHVyZS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGhlYWRlciwgJ2FsZycsICdUaGUgImFsZyIgcGFyYW1ldGVyIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkaGVhZGVyWydhbGcnXSwgJ0VTMjU2JywgJ1RoZSBleHBlY3RlZCAiYWxnIiBwYXJhbWV0ZXIgdmFsdWUgc2hvdWxkIGJlICJFUzI1NiIuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGhlYWRlciwgJ3g1YycsICdUaGUgIng1YyIgcGFyYW1ldGVyIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRoZWFkZXJbJ3g1YyddLCAnVGhlICJ4NWMiIHBhcmFtZXRlciBzaG91bGQgYmUgYW4gYXJyYXkuJyk7CiAgICAgICAgJGtleSA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21YNUMoJGhlYWRlclsneDVjJ10pOwogICAgICAgICRhbGdvcml0aG0gPSBuZXcgRVMyNTYoKTsKICAgICAgICAkaXNWYWxpZCA9ICRhbGdvcml0aG0tPnZlcmlmeSgka2V5LCAkc2lnbmF0dXJlLT5nZXRFbmNvZGVkUHJvdGVjdGVkSGVhZGVyKCkuJy4nLiRqd3MtPmdldEVuY29kZWRQYXlsb2FkKCksICRzaWduYXR1cmUtPmdldFNpZ25hdHVyZSgpKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJGlzVmFsaWQsICdJbnZhbGlkIHJlc3BvbnNlIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZpY2UuIFRoZSB0b2tlbiBzaWduYXR1cmUgaXMgaW52YWxpZC4nKTsKCiAgICAgICAgcmV0dXJuICRqd3MtPmdldFBheWxvYWQoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataStatementRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCmludGVyZmFjZSBNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRPbmVCeUFBR1VJRChzdHJpbmcgJGFhZ3VpZCk6ID9NZXRhZGF0YVN0YXRlbWVudDsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHY0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAiZ2V0U3RhdHVzUmVwb3J0cygpIiBwcm92aWRlZCBieSB0aGUgTWV0YWRhdGFTdGF0ZW1lbnQgb2JqZWN0CiAgICAgKgogICAgICogQHJldHVybiBTdGF0dXNSZXBvcnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZFN0YXR1c1JlcG9ydHNCeUFBR1VJRChzdHJpbmcgJGFhZ3VpZCk6IGFycmF5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataTOCPayload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBNZXRhZGF0YVRPQ1BheWxvYWQgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRsZWdhbEhlYWRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJG5vOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkbmV4dFVwZGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgTWV0YWRhdGFUT0NQYXlsb2FkRW50cnlbXQogICAgICovCiAgICBwcml2YXRlICRlbnRyaWVzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJHJvb3RDZXJ0aWZpY2F0ZXM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkbm8sIHN0cmluZyAkbmV4dFVwZGF0ZSwgP3N0cmluZyAkbGVnYWxIZWFkZXIgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5ubyA9ICRubzsKICAgICAgICAkdGhpcy0+bmV4dFVwZGF0ZSA9ICRuZXh0VXBkYXRlOwogICAgICAgICR0aGlzLT5sZWdhbEhlYWRlciA9ICRsZWdhbEhlYWRlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRW50cnkoTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgJGVudHJ5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5lbnRyaWVzW10gPSAkZW50cnk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVnYWxIZWFkZXIoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGVnYWxIZWFkZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5uZXh0VXBkYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBNZXRhZGF0YVRPQ1BheWxvYWRFbnRyeVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbnRyaWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lbnRyaWVzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIGZvcmVhY2ggKFsnbm8nLCAnbmV4dFVwZGF0ZScsICdlbnRyaWVzJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJGtleSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSkpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJGRhdGFbJ25vJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJubyIgc2hhbGwgYmUgYW4gaW50ZWdlcicpKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZGF0YVsnbmV4dFVwZGF0ZSddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAibmV4dFVwZGF0ZSIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhWydlbnRyaWVzJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJlbnRyaWVzIiBzaGFsbCBiZSBhIG4gYXJyYXkgb2YgZW50cmllcycpKTsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnbGVnYWxIZWFkZXInLCAkZGF0YSkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGRhdGFbJ2xlZ2FsSGVhZGVyJ10sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJsZWdhbEhlYWRlciIgc2hhbGwgYmUgYSBzdHJpbmcnKSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ25vJ10sCiAgICAgICAgICAgICRkYXRhWyduZXh0VXBkYXRlJ10sCiAgICAgICAgICAgICRkYXRhWydsZWdhbEhlYWRlciddID8/IG51bGwKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRkYXRhWydlbnRyaWVzJ10gYXMgJGsgPT4gJGVudHJ5KSB7CiAgICAgICAgICAgICRvYmplY3QtPmFkZEVudHJ5KE1ldGFkYXRhVE9DUGF5bG9hZEVudHJ5OjpjcmVhdGVGcm9tQXJyYXkoJGVudHJ5KSk7CiAgICAgICAgfQogICAgICAgICRvYmplY3QtPnJvb3RDZXJ0aWZpY2F0ZXMgPSAkZGF0YVsncm9vdENlcnRpZmljYXRlcyddID8/IFtdOwoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnbGVnYWxIZWFkZXInID0+ICR0aGlzLT5sZWdhbEhlYWRlciwKICAgICAgICAgICAgJ25leHRVcGRhdGUnID0+ICR0aGlzLT5uZXh0VXBkYXRlLAogICAgICAgICAgICAnbm8nID0+ICR0aGlzLT5ubywKICAgICAgICAgICAgJ2VudHJpZXMnID0+IGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKE1ldGFkYXRhVE9DUGF5bG9hZEVudHJ5ICRvYmplY3QpOiBhcnJheSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgICAgICB9LCAkdGhpcy0+ZW50cmllcyksCiAgICAgICAgICAgICdyb290Q2VydGlmaWNhdGVzJyA9PiAkdGhpcy0+cm9vdENlcnRpZmljYXRlcywKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um9vdENlcnRpZmljYXRlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cm9vdENlcnRpZmljYXRlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkcm9vdENlcnRpZmljYXRlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Um9vdENlcnRpZmljYXRlcyhhcnJheSAkcm9vdENlcnRpZmljYXRlcyk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+cm9vdENlcnRpZmljYXRlcyA9ICRyb290Q2VydGlmaWNhdGVzOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/MetadataTOCPayloadEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIExvZ2ljRXhjZXB0aW9uOwoKY2xhc3MgTWV0YWRhdGFUT0NQYXlsb2FkRW50cnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhYWlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhYWd1aWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRoYXNoOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR1cmw7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0YXR1c1JlcG9ydFtdCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1c1JlcG9ydHMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVPZkxhc3RTdGF0dXNDaGFuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyb2d1ZUxpc3RVUkw7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyb2d1ZUxpc3RIYXNoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/c3RyaW5nICRhYWlkLCA/c3RyaW5nICRhYWd1aWQsIGFycmF5ICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMsID9zdHJpbmcgJGhhc2gsID9zdHJpbmcgJHVybCwgc3RyaW5nICR0aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlLCA/c3RyaW5nICRyb2d1ZUxpc3RVUkwsID9zdHJpbmcgJHJvZ3VlTGlzdEhhc2gpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRhYWlkICYmIG51bGwgIT09ICRhYWd1aWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdBdXRoZW50aWNhdG9ycyBjYW5ub3Qgc3VwcG9ydCBib3RoIEFBSUQgYW5kIEFBR1VJRCcpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCA9PT0gJGFhaWQgJiYgbnVsbCA9PT0gJGFhZ3VpZCAmJiAwID09PSBjb3VudCgkYXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0lmIG5laXRoZXIgQUFJRCBub3IgQUFHVUlEIGFyZSBzZXQsIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZSBpZGVudGlmaWVyIGxpc3Qgc2hhbGwgbm90IGJlIGVtcHR5Jyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMgYXMgJGF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGlkZW50aWZpZXIuIFNoYWxsIGJlIGEgbGlzdCBvZiBzdHJpbmdzJykpOwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGlkZW50aWZpZXIuIFNoYWxsIGJlIGEgbGlzdCBvZiBzdHJpbmdzJykpOwogICAgICAgICAgICBBc3NlcnRpb246OnJlZ2V4KCRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllciwgJy9eWzAtOWEtZl0rJC8nLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUgaWRlbnRpZmllci4gU2hhbGwgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hYWlkID0gJGFhaWQ7CiAgICAgICAgJHRoaXMtPmFhZ3VpZCA9ICRhYWd1aWQ7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycyA9ICRhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnM7CiAgICAgICAgJHRoaXMtPmhhc2ggPSBCYXNlNjRVcmw6OmRlY29kZSgkaGFzaCk7CiAgICAgICAgJHRoaXMtPnVybCA9ICR1cmw7CiAgICAgICAgJHRoaXMtPnRpbWVPZkxhc3RTdGF0dXNDaGFuZ2UgPSAkdGltZU9mTGFzdFN0YXR1c0NoYW5nZTsKICAgICAgICAkdGhpcy0+cm9ndWVMaXN0VVJMID0gJHJvZ3VlTGlzdFVSTDsKICAgICAgICAkdGhpcy0+cm9ndWVMaXN0SGFzaCA9ICRyb2d1ZUxpc3RIYXNoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWlkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFhaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFhZ3VpZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hYWd1aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uQ2VydGlmaWNhdGVLZXlJZGVudGlmaWVycygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYXNoKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFN0YXR1c1JlcG9ydHMoU3RhdHVzUmVwb3J0ICRzdGF0dXNSZXBvcnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YXR1c1JlcG9ydHNbXSA9ICRzdGF0dXNSZXBvcnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gU3RhdHVzUmVwb3J0W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c1JlcG9ydHMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1c1JlcG9ydHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVPZkxhc3RTdGF0dXNDaGFuZ2UoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb2d1ZUxpc3RVUkwoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb2d1ZUxpc3RVUkw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJvZ3VlTGlzdEhhc2goKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yb2d1ZUxpc3RIYXNoOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAndGltZU9mTGFzdFN0YXR1c0NoYW5nZScsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJ0aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnc3RhdHVzUmVwb3J0cycsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJzdGF0dXNSZXBvcnRzIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YVsnc3RhdHVzUmVwb3J0cyddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAic3RhdHVzUmVwb3J0cyIgc2hhbGwgYmUgYW4gYXJyYXkgb2YgU3RhdHVzUmVwb3J0IG9iamVjdHMnKSk7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKAogICAgICAgICRkYXRhWydhYWlkJ10gPz8gbnVsbCwKICAgICAgICAkZGF0YVsnYWFndWlkJ10gPz8gbnVsbCwKICAgICAgICAkZGF0YVsnYXR0ZXN0YXRpb25DZXJ0aWZpY2F0ZUtleUlkZW50aWZpZXJzJ10gPz8gW10sCiAgICAgICAgJGRhdGFbJ2hhc2gnXSA/PyBudWxsLAogICAgICAgICRkYXRhWyd1cmwnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsndGltZU9mTGFzdFN0YXR1c0NoYW5nZSddLAogICAgICAgICAgICAkZGF0YVsncm9ndWVMaXN0VVJMJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ3JvZ3VlTGlzdEhhc2gnXSA/PyBudWxsCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkZGF0YVsnc3RhdHVzUmVwb3J0cyddIGFzICRzdGF0dXNSZXBvcnQpIHsKICAgICAgICAgICAgJG9iamVjdC0+YWRkU3RhdHVzUmVwb3J0cyhTdGF0dXNSZXBvcnQ6OmNyZWF0ZUZyb21BcnJheSgkc3RhdHVzUmVwb3J0KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnYWFpZCcgPT4gJHRoaXMtPmFhaWQsCiAgICAgICAgICAgICdhYWd1aWQnID0+ICR0aGlzLT5hYWd1aWQsCiAgICAgICAgICAgICdhdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMnID0+ICR0aGlzLT5hdHRlc3RhdGlvbkNlcnRpZmljYXRlS2V5SWRlbnRpZmllcnMsCiAgICAgICAgICAgICdoYXNoJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+aGFzaCksCiAgICAgICAgICAgICd1cmwnID0+ICR0aGlzLT51cmwsCiAgICAgICAgICAgICdzdGF0dXNSZXBvcnRzJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChTdGF0dXNSZXBvcnQgJG9iamVjdCk6IGFycmF5IHsKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5qc29uU2VyaWFsaXplKCk7CiAgICAgICAgICAgIH0sICR0aGlzLT5zdGF0dXNSZXBvcnRzKSwKICAgICAgICAgICAgJ3RpbWVPZkxhc3RTdGF0dXNDaGFuZ2UnID0+ICR0aGlzLT50aW1lT2ZMYXN0U3RhdHVzQ2hhbmdlLAogICAgICAgICAgICAncm9ndWVMaXN0VVJMJyA9PiAkdGhpcy0+cm9ndWVMaXN0VVJMLAogICAgICAgICAgICAncm9ndWVMaXN0SGFzaCcgPT4gJHRoaXMtPnJvZ3VlTGlzdEhhc2gsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/PatternAccuracyDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFBhdHRlcm5BY2N1cmFjeURlc2NyaXB0b3IgZXh0ZW5kcyBBYnN0cmFjdERlc2NyaXB0b3IKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtaW5Db21wbGV4aXR5OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJG1pbkNvbXBsZXhpdHksID9pbnQgJG1heFJldHJpZXMgPSBudWxsLCA/aW50ICRibG9ja1Nsb3dkb3duID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkbWluQ29tcGxleGl0eSwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEuIFRoZSB2YWx1ZSBvZiAibWluQ29tcGxleGl0eSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKSk7CiAgICAgICAgJHRoaXMtPm1pbkNvbXBsZXhpdHkgPSAkbWluQ29tcGxleGl0eTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtYXhSZXRyaWVzLCAkYmxvY2tTbG93ZG93bik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbkNvbXBsZXhpdHkoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5taW5Db21wbGV4aXR5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnbWluQ29tcGxleGl0eScsIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbignVGhlIGtleSAibWluQ29tcGxleGl0eSIgaXMgbWlzc2luZycpKTsKICAgICAgICBmb3JlYWNoIChbJ21pbkNvbXBsZXhpdHknLCAnbWF4UmV0cmllcycsICdibG9ja1Nsb3dkb3duJ10gYXMgJGtleSkgewogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZGF0YSkpIHsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkZGF0YVska2V5XSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgZGF0YS4gVGhlIHZhbHVlIG9mICIlcyIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInLCAka2V5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydtaW5Db21wbGV4aXR5J10sCiAgICAgICAgJGRhdGFbJ21heFJldHJpZXMnXSA/PyBudWxsLAogICAgICAgICRkYXRhWydibG9ja1Nsb3dkb3duJ10gPz8gbnVsbAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ21pbkNvbXBsZXhpdHknID0+ICR0aGlzLT5taW5Db21wbGV4aXR5LAogICAgICAgICAgICAnbWF4UmV0cmllcycgPT4gJHRoaXMtPmdldE1heFJldHJpZXMoKSwKICAgICAgICAgICAgJ2Jsb2NrU2xvd2Rvd24nID0+ICR0aGlzLT5nZXRCbG9ja1Nsb3dkb3duKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/RgbPaletteEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFJnYlBhbGV0dGVFbnRyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRyOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkZzsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkciwgaW50ICRnLCBpbnQgJGIpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkciwgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgInIiIGlzIGludmFsaWQnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkZywgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgImciIGlzIGludmFsaWQnKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpyYW5nZSgkYiwgMCwgMjU1LCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBrZXkgImIiIGlzIGludmFsaWQnKSk7CiAgICAgICAgJHRoaXMtPnIgPSAkcjsKICAgICAgICAkdGhpcy0+ZyA9ICRnOwogICAgICAgICR0aGlzLT5iID0gJGI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydyJywgJ2cnLCAnYiddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJGRhdGFbJGtleV0sIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBpbnZhbGlkJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnciddLAogICAgICAgICAgICAkZGF0YVsnZyddLAogICAgICAgICAgICAkZGF0YVsnYiddCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdyJyA9PiAkdGhpcy0+ciwKICAgICAgICAgICAgJ2cnID0+ICR0aGlzLT5nLAogICAgICAgICAgICAnYicgPT4gJHRoaXMtPmIsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/RogueListEntry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmNsYXNzIFJvZ3VlTGlzdEVudHJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHNrOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzaywgc3RyaW5nICRkYXRlKQogICAgewogICAgICAgICR0aGlzLT5zayA9ICRzazsKICAgICAgICAkdGhpcy0+ZGF0ZSA9ICRkYXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREYXRlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICdzaycsICdUaGUga2V5ICJzayIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRkYXRhWydzayddLCAnVGhlIGtleSAic2siIGlzIGludmFsaWQnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJ2RhdGUnLCAnVGhlIGtleSAiZGF0ZSIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRkYXRhWydkYXRlJ10sICdUaGUga2V5ICJkYXRlIiBpcyBpbnZhbGlkJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3NrJ10sCiAgICAgICAgICAgICRkYXRhWydkYXRlJ10KICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3NrJyA9PiAkdGhpcy0+c2ssCiAgICAgICAgICAgICdkYXRlJyA9PiAkdGhpcy0+ZGF0ZSwKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/SingleMetadata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgU2luZ2xlTWV0YWRhdGEKewogICAgLyoqCiAgICAgKiBAdmFyIE1ldGFkYXRhU3RhdGVtZW50CiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXRlbWVudDsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByaXZhdGUgJGlzQmFzZTY0RW5jb2RlZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRkYXRhLCBib29sICRpc0Jhc2U2NEVuY29kZWQpCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICAkdGhpcy0+aXNCYXNlNjRFbmNvZGVkID0gJGlzQmFzZTY0RW5jb2RlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFTdGF0ZW1lbnQoKTogTWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPnN0YXRlbWVudCkgewogICAgICAgICAgICAkanNvbiA9ICR0aGlzLT5kYXRhOwogICAgICAgICAgICBpZiAoJHRoaXMtPmlzQmFzZTY0RW5jb2RlZCkgewogICAgICAgICAgICAgICAgJGpzb24gPSBiYXNlNjRfZGVjb2RlKCR0aGlzLT5kYXRhLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc3RhdGVtZW50ID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgICAgICAkdGhpcy0+c3RhdGVtZW50ID0gTWV0YWRhdGFTdGF0ZW1lbnQ6OmNyZWF0ZUZyb21BcnJheSgkc3RhdGVtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdGVtZW50OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/StatusReport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgU3RhdHVzUmVwb3J0IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKgogICAgICogQHNlZSBBdXRoZW50aWNhdG9yU3RhdHVzCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZWZmZWN0aXZlRGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHVybDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGlvbkRlc2NyaXB0b3I7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlTnVtYmVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc3RhdHVzLCA/c3RyaW5nICRlZmZlY3RpdmVEYXRlLCA/c3RyaW5nICRjZXJ0aWZpY2F0ZSwgP3N0cmluZyAkdXJsLCA/c3RyaW5nICRjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvciwgP3N0cmluZyAkY2VydGlmaWNhdGVOdW1iZXIsID9zdHJpbmcgJGNlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uLCA/c3RyaW5nICRjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbikKICAgIHsKICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoJHN0YXR1cywgQXV0aGVudGljYXRvclN0YXR1czo6bGlzdCgpLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSB2YWx1ZSBvZiB0aGUga2V5ICJzdGF0dXMiIGlzIG5vdCBhY2NlcHRhYmxlJykpOwoKICAgICAgICAkdGhpcy0+c3RhdHVzID0gJHN0YXR1czsKICAgICAgICAkdGhpcy0+ZWZmZWN0aXZlRGF0ZSA9ICRlZmZlY3RpdmVEYXRlOwogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0ZSA9ICRjZXJ0aWZpY2F0ZTsKICAgICAgICAkdGhpcy0+dXJsID0gJHVybDsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IgPSAkY2VydGlmaWNhdGlvbkRlc2NyaXB0b3I7CiAgICAgICAgJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyID0gJGNlcnRpZmljYXRlTnVtYmVyOwogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiA9ICRjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbjsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24gPSAkY2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29tcHJvbWlzZWQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBpbl9hcnJheSgkdGhpcy0+c3RhdHVzLCBbCiAgICAgICAgICAgIEF1dGhlbnRpY2F0b3JTdGF0dXM6OkFUVEVTVEFUSU9OX0tFWV9DT01QUk9NSVNFLAogICAgICAgICAgICBBdXRoZW50aWNhdG9yU3RhdHVzOjpVU0VSX0tFWV9QSFlTSUNBTF9DT01QUk9NSVNFLAogICAgICAgICAgICBBdXRoZW50aWNhdG9yU3RhdHVzOjpVU0VSX0tFWV9SRU1PVEVfQ09NUFJPTUlTRSwKICAgICAgICAgICAgQXV0aGVudGljYXRvclN0YXR1czo6VVNFUl9WRVJJRklDQVRJT05fQllQQVNTLAogICAgICAgIF0sIHRydWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVmZmVjdGl2ZURhdGUoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWZmZWN0aXZlRGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGUoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVybCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25EZXNjcmlwdG9yKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25EZXNjcmlwdG9yOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZXJ0aWZpY2F0ZU51bWJlcigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZU51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2VydGlmaWNhdGlvblBvbGljeVZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnc3RhdHVzJywgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUga2V5ICJzdGF0dXMiIGlzIG1pc3NpbmcnKSk7CiAgICAgICAgZm9yZWFjaCAoWydlZmZlY3RpdmVEYXRlJywgJ2NlcnRpZmljYXRlJywgJ3VybCcsICdjZXJ0aWZpY2F0aW9uRGVzY3JpcHRvcicsICdjZXJ0aWZpY2F0ZU51bWJlcicsICdjZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbicsICdjZXJ0aWZpY2F0aW9uUmVxdWlyZW1lbnRzVmVyc2lvbiddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyRrZXldKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjpudWxsT3JTdHJpbmcoJGRhdGFbJGtleV0sIFV0aWxzOjpsb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdUaGUgdmFsdWUgb2YgdGhlIGtleSAiJXMiIGlzIGludmFsaWQnLCAka2V5KSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRkYXRhWydzdGF0dXMnXSwKICAgICAgICAgICAgJGRhdGFbJ2VmZmVjdGl2ZURhdGUnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnY2VydGlmaWNhdGUnXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsndXJsJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRlTnVtYmVyJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25Qb2xpY3lWZXJzaW9uJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGRhdGFbJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJ10gPz8gbnVsbAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9IFsKICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHRoaXMtPnN0YXR1cywKICAgICAgICAgICAgJ2VmZmVjdGl2ZURhdGUnID0+ICR0aGlzLT5lZmZlY3RpdmVEYXRlLAogICAgICAgICAgICAnY2VydGlmaWNhdGUnID0+ICR0aGlzLT5jZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgJ3VybCcgPT4gJHRoaXMtPnVybCwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25EZXNjcmlwdG9yJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvbkRlc2NyaXB0b3IsCiAgICAgICAgICAgICdjZXJ0aWZpY2F0ZU51bWJlcicgPT4gJHRoaXMtPmNlcnRpZmljYXRlTnVtYmVyLAogICAgICAgICAgICAnY2VydGlmaWNhdGlvblBvbGljeVZlcnNpb24nID0+ICR0aGlzLT5jZXJ0aWZpY2F0aW9uUG9saWN5VmVyc2lvbiwKICAgICAgICAgICAgJ2NlcnRpZmljYXRpb25SZXF1aXJlbWVudHNWZXJzaW9uJyA9PiAkdGhpcy0+Y2VydGlmaWNhdGlvblJlcXVpcmVtZW50c1ZlcnNpb24sCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIFRocm93YWJsZTsKCi8qKgogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIFV0aWxzCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9naWNFeGNlcHRpb24oc3RyaW5nICRtZXNzYWdlLCA/VGhyb3dhYmxlICRwcmV2aW91c0V4Y2VwdGlvbiA9IG51bGwpOiBjYWxsYWJsZQogICAgewogICAgICAgIHJldHVybiBzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkbWVzc2FnZSwgJHByZXZpb3VzRXhjZXB0aW9uKTogTG9naWNFeGNlcHRpb24gewogICAgICAgICAgICByZXR1cm4gbmV3IExvZ2ljRXhjZXB0aW9uKCRtZXNzYWdlLCAwLCAkcHJldmlvdXNFeGNlcHRpb24pOwogICAgICAgIH07CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWx0ZXJOdWxsVmFsdWVzKGFycmF5ICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKCRkYXRhLCBzdGF0aWMgZnVuY3Rpb24gKCR2YXIpOiBib29sIHtyZXR1cm4gbnVsbCAhPT0gJHZhcjsgfSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/VerificationMethodANDCombinations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKCmNsYXNzIFZlcmlmaWNhdGlvbk1ldGhvZEFORENvbWJpbmF0aW9ucyBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICR2ZXJpZmljYXRpb25NZXRob2RzID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvciAkdmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dmVyaWZpY2F0aW9uTWV0aG9kc1tdID0gJHZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3I7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJpZmljYXRpb25NZXRob2RzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJpZmljYXRpb25NZXRob2RzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRvYmplY3QgPSBuZXcgc2VsZigpOwoKICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAkZGF0dW0pIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXR1bSwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEnKSk7CiAgICAgICAgICAgICRvYmplY3QtPmFkZFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXR1bSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoVmVyaWZpY2F0aW9uTWV0aG9kRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT52ZXJpZmljYXRpb25NZXRob2RzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/VerificationMethodDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFZlcmlmaWNhdGlvbk1ldGhvZERlc2NyaXB0b3IgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9QUkVTRU5DRSA9IDB4MDAwMDAwMDE7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfRklOR0VSUFJJTlQgPSAweDAwMDAwMDAyOwogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZZX1BBU1NDT0RFID0gMHgwMDAwMDAwNDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9WT0lDRVBSSU5UID0gMHgwMDAwMDAwODsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9GQUNFUFJJTlQgPSAweDAwMDAwMDEwOwogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZZX0xPQ0FUSU9OID0gMHgwMDAwMDAyMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9FWUVQUklOVCA9IDB4MDAwMDAwNDA7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfUEFUVEVSTiA9IDB4MDAwMDAwODA7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRllfSEFORFBSSU5UID0gMHgwMDAwMDEwMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9OT05FID0gMHgwMDAwMDIwMDsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGWV9BTEwgPSAweDAwMDAwNDAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAvKioKICAgICAqIEB2YXIgQ29kZUFjY3VyYWN5RGVzY3JpcHRvcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNhRGVzYzsKCiAgICAvKioKICAgICAqIEB2YXIgQmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYmFEZXNjOwoKICAgIC8qKgogICAgICogQHZhciBQYXR0ZXJuQWNjdXJhY3lEZXNjcmlwdG9yfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGFEZXNjOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHVzZXJWZXJpZmljYXRpb24sID9Db2RlQWNjdXJhY3lEZXNjcmlwdG9yICRjYURlc2MgPSBudWxsLCA/QmlvbWV0cmljQWNjdXJhY3lEZXNjcmlwdG9yICRiYURlc2MgPSBudWxsLCA/UGF0dGVybkFjY3VyYWN5RGVzY3JpcHRvciAkcGFEZXNjID0gbnVsbCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbigkdXNlclZlcmlmaWNhdGlvbiwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUgcGFyYW1ldGVyICJ1c2VyVmVyaWZpY2F0aW9uIiBpcyBpbnZhbGlkJykpOwogICAgICAgICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uID0gJHVzZXJWZXJpZmljYXRpb247CiAgICAgICAgJHRoaXMtPmNhRGVzYyA9ICRjYURlc2M7CiAgICAgICAgJHRoaXMtPmJhRGVzYyA9ICRiYURlc2M7CiAgICAgICAgJHRoaXMtPnBhRGVzYyA9ICRwYURlc2M7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJWZXJpZmljYXRpb24oKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VyUHJlc2VuY2UoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9QUkVTRU5DRSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZpbmdlcnByaW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKCR0aGlzLT51c2VyVmVyaWZpY2F0aW9uICYgc2VsZjo6VVNFUl9WRVJJRllfRklOR0VSUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwYXNzY29kZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX1BBU1NDT0RFKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdm9pY2VQcmludCgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX1ZPSUNFUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmYWNlUHJpbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9GQUNFUFJJTlQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGlvbigpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX0xPQ0FUSU9OKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXllUHJpbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9FWUVQUklOVCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhdHRlcm4oKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9QQVRURVJOKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZHByaW50KCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKCR0aGlzLT51c2VyVmVyaWZpY2F0aW9uICYgc2VsZjo6VVNFUl9WRVJJRllfSEFORFBSSU5UKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9uZSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09ICgkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiAmIHNlbGY6OlVTRVJfVkVSSUZZX05PTkUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAoJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gJiBzZWxmOjpVU0VSX1ZFUklGWV9BTEwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYURlc2MoKTogP0NvZGVBY2N1cmFjeURlc2NyaXB0b3IKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNhRGVzYzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFEZXNjKCk6ID9CaW9tZXRyaWNBY2N1cmFjeURlc2NyaXB0b3IKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJhRGVzYzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFEZXNjKCk6ID9QYXR0ZXJuQWNjdXJhY3lEZXNjcmlwdG9yCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYURlc2M7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBVdGlsczo6ZmlsdGVyTnVsbFZhbHVlcygkZGF0YSk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd1c2VyVmVyaWZpY2F0aW9uJywgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdUaGUgcGFyYW1ldGVyICJ1c2VyVmVyaWZpY2F0aW9uIiBpcyBtaXNzaW5nJykpOwogICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkZGF0YVsndXNlclZlcmlmaWNhdGlvbiddLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ1RoZSBwYXJhbWV0ZXIgInVzZXJWZXJpZmljYXRpb24iIGlzIGludmFsaWQnKSk7CiAgICAgICAgZm9yZWFjaCAoWydjYURlc2MnLCAnYmFEZXNjJywgJ3BhRGVzYyddIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRkYXRhWyRrZXldKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhWyRrZXldLCBVdGlsczo6bG9naWNFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBwYXJhbWV0ZXIgIiVzIicsICRrZXkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGRhdGFbJ3VzZXJWZXJpZmljYXRpb24nXSwKICAgICAgICAgICAgaXNzZXQoJGRhdGFbJ2NhRGVzYyddKSA/IENvZGVBY2N1cmFjeURlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkZGF0YVsnY2FEZXNjJ10pIDogbnVsbCwKICAgICAgICAgICAgaXNzZXQoJGRhdGFbJ2JhRGVzYyddKSA/IEJpb21ldHJpY0FjY3VyYWN5RGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhWydiYURlc2MnXSkgOiBudWxsLAogICAgICAgICAgICBpc3NldCgkZGF0YVsncGFEZXNjJ10pID8gUGF0dGVybkFjY3VyYWN5RGVzY3JpcHRvcjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhWydwYURlc2MnXSkgOiBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAndXNlclZlcmlmaWNhdGlvbicgPT4gJHRoaXMtPnVzZXJWZXJpZmljYXRpb24sCiAgICAgICAgICAgICdjYURlc2MnID0+IG51bGwgPT09ICR0aGlzLT5jYURlc2MgPyBudWxsIDogJHRoaXMtPmNhRGVzYy0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYmFEZXNjJyA9PiBudWxsID09PSAkdGhpcy0+YmFEZXNjID8gbnVsbCA6ICR0aGlzLT5iYURlc2MtPmpzb25TZXJpYWxpemUoKSwKICAgICAgICAgICAgJ3BhRGVzYycgPT4gbnVsbCA9PT0gJHRoaXMtPnBhRGVzYyA/IG51bGwgOiAkdGhpcy0+cGFEZXNjLT5qc29uU2VyaWFsaXplKCksCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/metadata-service/src/Version.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZTsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBMb2dpY0V4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIFZlcnNpb24gaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBpbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRtYWpvcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbWlub3I7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJG1ham9yLCA/aW50ICRtaW5vcikKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJG1ham9yICYmIG51bGwgPT09ICRtaW5vcikgewogICAgICAgICAgICB0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4gTXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBpdGVtJyk7CiAgICAgICAgfQogICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlck9yRXF1YWxUaGFuKCRtYWpvciwgMCwgVXRpbHM6OmxvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGFyZ3VtZW50ICJtYWpvciInKSk7CiAgICAgICAgQXNzZXJ0aW9uOjpncmVhdGVyT3JFcXVhbFRoYW4oJG1pbm9yLCAwLCBVdGlsczo6bG9naWNFeGNlcHRpb24oJ0ludmFsaWQgYXJndW1lbnQgIm1pbm9yIicpKTsKCiAgICAgICAgJHRoaXMtPm1ham9yID0gJG1ham9yOwogICAgICAgICR0aGlzLT5taW5vciA9ICRtaW5vcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFqb3IoKTogP2ludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFqb3I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbm9yKCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1pbm9yOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gVXRpbHM6OmZpbHRlck51bGxWYWx1ZXMoJGRhdGEpOwogICAgICAgIGZvcmVhY2ggKFsnbWFqb3InLCAnbWlub3InXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjppbnRlZ2VyKCRkYXRhWyRrZXldLCBzcHJpbnRmKCdJbnZhbGlkIHZhbHVlIGZvciBrZXkgIiVzIicsICRrZXkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnbWFqb3InXSA/PyBudWxsLAogICAgICAgICAgICAkZGF0YVsnbWlub3InXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gWwogICAgICAgICAgICAnbWFqb3InID0+ICR0aGlzLT5tYWpvciwKICAgICAgICAgICAgJ21pbm9yJyA9PiAkdGhpcy0+bWlub3IsCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFV0aWxzOjpmaWx0ZXJOdWxsVmFsdWVzKCRkYXRhKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLWF1dGgvd2ViYXV0aG4tbGliIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJkZXNjcmlwdGlvbiI6ICJGSURPMi9XZWJhdXRobiBTdXBwb3J0IEZvciBQSFAiLAogICAgImtleXdvcmRzIjogWyJGSURPIiwgIkZJRE8yIiwgIndlYmF1dGhuIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi1hdXRoIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItYXV0aC93ZWJhdXRobi1saWJyYXJ5L2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMiIsCiAgICAgICAgImV4dC1qc29uIjogIioiLAogICAgICAgICJleHQtb3BlbnNzbCI6ICIqIiwKICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICJiZWJlcmxlaS9hc3NlcnQiOiAiXjMuMiIsCiAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4xIiwKICAgICAgICAicHNyL2h0dHAtY2xpZW50IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIl4xLjAiLAogICAgICAgICJwc3IvbG9nIjogIl4xLjEiLAogICAgICAgICJyYW1zZXkvdXVpZCI6ICJeMy44fF40LjAiLAogICAgICAgICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiOiAiXjIuMCIsCiAgICAgICAgInNwb21reS1sYWJzL2Nib3ItcGhwIjogIl4xLjB8XjIuMCIsCiAgICAgICAgInN5bWZvbnkvcHJvY2VzcyI6ICJeMy4wfF40LjB8XjUuMCIsCiAgICAgICAgInRoZWNvZGluZ21hY2hpbmUvc2FmZSI6ICJeMS4xIiwKICAgICAgICAid2ViLWF1dGgvY29zZS1saWIiOiAic2VsZi52ZXJzaW9uIiwKICAgICAgICAid2ViLWF1dGgvbWV0YWRhdGEtc2VydmljZSI6ICJzZWxmLnZlcnNpb24iCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIldlYmF1dGhuXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgInBzci9sb2ctaW1wbGVtZW50YXRpb24iOiAiUmVjb21tZW5kZWQgdG8gcmVjZWl2ZSBsb2dzIGZyb20gdGhlIGxpYnJhcnkiLAogICAgICAgICJ3ZWItdG9rZW4vand0LWtleS1tZ210IjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIk1hbmRhdG9yeSBmb3IgdGhlIEFuZHJvaWRTYWZldHlOZXQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IHN1cHBvcnQiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiUmVjb21tZW5kZWQgZm9yIHRoZSBBbmRyb2lkU2FmZXR5TmV0IEF0dGVzdGF0aW9uIFN0YXRlbWVudCBzdXBwb3J0IiwKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIlJlY29tbWVuZGVkIGZvciB0aGUgQW5kcm9pZFNhZmV0eU5ldCBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgc3VwcG9ydCIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AndroidKeyAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobXM7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIEZHXEFTTjFcQVNOT2JqZWN0Owp1c2UgRkdcQVNOMVxFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2N0ZXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIGZ1bmN0aW9uIFNhZmVcaGV4MmJpbjsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQgaW1wbGVtZW50cyBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKewogICAgLyoqCiAgICAgKiBAdmFyIERlY29kZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVjb2RlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ2FuZHJvaWQta2V5JzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRlc3RhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbiwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBmb3JlYWNoIChbJ3NpZycsICd4NWMnLCAnYWxnJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJGtleSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiJXMiIGlzIG1pc3NpbmcuJywgJGtleSkpOwogICAgICAgIH0KICAgICAgICAkY2VydGlmaWNhdGVzID0gJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ3g1YyddOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydGlmaWNhdGVzLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJUaGFuKGNvdW50KCRjZXJ0aWZpY2F0ZXMpLCAwLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmFsbFN0cmluZygkY2VydGlmaWNhdGVzLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICAkY2VydGlmaWNhdGVzID0gQ2VydGlmaWNhdGVUb29sYm94Ojpjb252ZXJ0QWxsREVSVG9QRU0oJGNlcnRpZmljYXRlcyk7CgogICAgICAgIHJldHVybiBBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlQmFzaWMoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vRGVjb2RlIGxlYWYgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUKICAgICAgICAkbGVhZiA9ICRjZXJ0aWZpY2F0ZXNbMF07CiAgICAgICAgJHRoaXMtPmNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoJGxlYWYsICRjbGllbnREYXRhSlNPTkhhc2gsICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgICRzaWduZWREYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJGFsZyA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdhbGcnKTsKCiAgICAgICAgcmV0dXJuIDEgPT09IG9wZW5zc2xfdmVyaWZ5KCRzaWduZWREYXRhLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICRsZWFmLCBBbGdvcml0aG1zOjpnZXRPcGVuc3NsQWxnb3JpdGhtRm9yKChpbnQpICRhbGcpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoc3RyaW5nICRjZXJ0aWZpY2F0ZSwgc3RyaW5nICRjbGllbnREYXRhSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgICRyZXNvdXJjZSA9IG9wZW5zc2xfcGtleV9nZXRfcHVibGljKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgJGRldGFpbHMgPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlc291cmNlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdVbmFibGUgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGUnKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF1dGhEYXRhIHB1YmxpY0tleSBtYXRjaGVzIHRoZSBwdWJsaWMga2V5IGluIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZQogICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCAnTm8gYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGZvdW5kJyk7CiAgICAgICAgJHB1YmxpY0tleURhdGEgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5RGF0YSwgJ05vIGF0dGVzdGVkIHB1YmxpYyBrZXkgZm91bmQnKTsKICAgICAgICAkcHVibGljRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJHB1YmxpY0tleURhdGEpOwogICAgICAgICRjb3NlS2V5ID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkcHVibGljRGF0YVN0cmVhbSktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YmxpY0RhdGFTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkgZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJHB1YmxpY0RhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgJHB1YmxpY0tleSA9IEtleTo6Y3JlYXRlRnJvbURhdGEoJGNvc2VLZXkpOwoKICAgICAgICBBc3NlcnRpb246OnRydWUoKCRwdWJsaWNLZXkgaW5zdGFuY2VvZiBFYzJLZXkpIHx8ICgkcHVibGljS2V5IGluc3RhbmNlb2YgUnNhS2V5KSwgJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkcHVibGljS2V5LT5hc1BFTSgpLCAkZGV0YWlsc1sna2V5J10sICdJbnZhbGlkIGtleScpOwoKICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgICAgJGNlcnREZXRhaWxzID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CgogICAgICAgIC8vRmluZCBBbmRyb2lkIEtleVN0b3JlIEV4dGVuc2lvbiB3aXRoIE9JRCDigJwxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTfigJ0gaW4gY2VydGlmaWNhdGUgZXh0ZW5zaW9ucwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHMsICdUaGUgY2VydGlmaWNhdGUgaXMgbm90IHZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzLCAnZXh0ZW5zaW9ucycsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIGV4dGVuc2lvbicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHNbJ2V4dGVuc2lvbnMnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gZXh0ZW5zaW9uJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ10sICcxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTcnLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBtaXNzaW5nJyk7CiAgICAgICAgJGV4dGVuc2lvbiA9ICRjZXJ0RGV0YWlsc1snZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTcnXTsKICAgICAgICAkZXh0ZW5zaW9uQXNBc24xID0gQVNOT2JqZWN0Ojpmcm9tQmluYXJ5KCRleHRlbnNpb24pOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRleHRlbnNpb25Bc0FzbjEsIFNlcXVlbmNlOjpjbGFzcywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICRvYmplY3RzID0gJGV4dGVuc2lvbkFzQXNuMS0+Z2V0Q2hpbGRyZW4oKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF0dGVzdGF0aW9uQ2hhbGxlbmdlIGlzIHNldCB0byB0aGUgY2xpZW50RGF0YUhhc2guCiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJG9iamVjdHMsIDQsICdUaGUgY2VydGlmaWNhdGUgZXh0ZW5zaW9uICIxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTciIGlzIGludmFsaWQnKTsKICAgICAgICBBc3NlcnRpb246OmlzSW5zdGFuY2VPZigkb2JqZWN0c1s0XSwgT2N0ZXRTdHJpbmc6OmNsYXNzLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBpbnZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkY2xpZW50RGF0YUhhc2gsIGhleDJiaW4oKCRvYmplY3RzWzRdKS0+Z2V0Q29udGVudCgpKSwgJ1RoZSBjbGllbnQgZGF0YSBoYXNoIGlzIG5vdCB2YWxpZCcpOwoKICAgICAgICAvL0NoZWNrIHRoYXQgYm90aCB0ZWVFbmZvcmNlZCBhbmQgc29mdHdhcmVFbmZvcmNlZCBzdHJ1Y3R1cmVzIGRvbuKAmXQgY29udGFpbiBhbGxBcHBsaWNhdGlvbnMoNjAwKSB0YWcuCiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJG9iamVjdHMsIDYsICdUaGUgY2VydGlmaWNhdGUgZXh0ZW5zaW9uICIxLjMuNi4xLjQuMS4xMTEyOS4yLjEuMTciIGlzIGludmFsaWQnKTsKICAgICAgICAkc29mdHdhcmVFbmZvcmNlZEZsYWdzID0gJG9iamVjdHNbNl07CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHNvZnR3YXJlRW5mb3JjZWRGbGFncywgU2VxdWVuY2U6OmNsYXNzLCAnVGhlIGNlcnRpZmljYXRlIGV4dGVuc2lvbiAiMS4zLjYuMS40LjEuMTExMjkuMi4xLjE3IiBpcyBpbnZhbGlkJyk7CiAgICAgICAgJHRoaXMtPmNoZWNrQWJzZW5jZU9mQWxsQXBwbGljYXRpb25zVGFnKCRzb2Z0d2FyZUVuZm9yY2VkRmxhZ3MpOwoKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkb2JqZWN0cywgNywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICR0ZWVFbmZvcmNlZEZsYWdzID0gJG9iamVjdHNbNl07CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRlZUVuZm9yY2VkRmxhZ3MsIFNlcXVlbmNlOjpjbGFzcywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMy42LjEuNC4xLjExMTI5LjIuMS4xNyIgaXMgaW52YWxpZCcpOwogICAgICAgICR0aGlzLT5jaGVja0Fic2VuY2VPZkFsbEFwcGxpY2F0aW9uc1RhZygkdGVlRW5mb3JjZWRGbGFncyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0Fic2VuY2VPZkFsbEFwcGxpY2F0aW9uc1RhZyhTZXF1ZW5jZSAkc2VxdWVuY2UpOiB2b2lkCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHNlcXVlbmNlLT5nZXRDaGlsZHJlbigpIGFzICR0YWcpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRhZywgRXhwbGljaXRseVRhZ2dlZE9iamVjdDo6Y2xhc3MsICdJbnZhbGlkIHRhZycpOwogICAgICAgICAgICAvKiBAdmFyIEV4cGxpY2l0bHlUYWdnZWRPYmplY3QgJHRhZyAqLwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVxKDYwMCwgKGludCkgJHRhZy0+Z2V0VGFnKCksICdGb3JiaWRkZW4gdGFnIDYwMCBmb3VuZCcpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AndroidSafetyNetAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobSBhcyBBbGdvcml0aG1JbnRlcmZhY2U7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcSnNvbkNvbnZlcnRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU1ZlcmlmaWVyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXI7CnVzZSBQc3JcSHR0cFxDbGllbnRcQ2xpZW50SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cQ2VydGlmaWNhdGVUb29sYm94Owp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXENlcnRpZmljYXRlVHJ1c3RQYXRoOwoKZmluYWwgY2xhc3MgQW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYXBpS2V5OwoKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjbGllbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIENvbXBhY3RTZXJpYWxpemVyCiAgICAgKi8KICAgIHByaXZhdGUgJGp3c1NlcmlhbGl6ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEpXU1ZlcmlmaWVyfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkandzVmVyaWZpZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcmVxdWVzdEZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRsZWV3YXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtYXhBZ2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9DbGllbnRJbnRlcmZhY2UgJGNsaWVudCA9IG51bGwsID9zdHJpbmcgJGFwaUtleSA9IG51bGwsID9SZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnkgPSBudWxsLCA/aW50ICRsZWV3YXkgPSBudWxsLCA/aW50ICRtYXhBZ2UgPSBudWxsKQogICAgewogICAgICAgIGlmICghY2xhc3NfZXhpc3RzKEFsZ29yaXRobVxSUzI1Njo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgYWxnb3JpdGhtIFJTMjU2IGlzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluc3RhbGwgdGhlIHBhY2thZ2Ugd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYT8nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjbGFzc19leGlzdHMoSldLRmFjdG9yeTo6Y2xhc3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGUgY2xhc3MgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxKV0tGYWN0b3J5IGlzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluc3RhbGwgdGhlIHBhY2thZ2Ugd2ViLXRva2VuL2p3dC1rZXktbWdtdD8nKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRjbGllbnQpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiY2xpZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2Ugc2V0IGBudWxsYCBpbnN0ZWFkIGFuZCB1c2UgdGhlIG1ldGhvZCAiZW5hYmxlQXBpVmVyaWZpY2F0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkYXBpS2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImFwaUtleSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZCBhbmQgdXNlIHRoZSBtZXRob2QgImVuYWJsZUFwaVZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHJlcXVlc3RGYWN0b3J5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlcXVlc3RGYWN0b3J5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2Ugc2V0IGBudWxsYCBpbnN0ZWFkIGFuZCB1c2UgdGhlIG1ldGhvZCAiZW5hYmxlQXBpVmVyaWZpY2F0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkbWF4QWdlKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1heEFnZSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZCBhbmQgdXNlIHRoZSBtZXRob2QgInNldE1heEFnZSIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGxlZXdheSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsZWV3YXkiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSBzZXQgYG51bGxgIGluc3RlYWQgYW5kIHVzZSB0aGUgbWV0aG9kICJzZXRMZWV3YXkiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmp3c1NlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoKTsKICAgICAgICAkdGhpcy0+aW5pdEp3c1ZlcmlmaWVyKCk7CgogICAgICAgIC8vVG8gYmUgcmVtb3ZlZCBpbiA0LjAKICAgICAgICAkdGhpcy0+bGVld2F5ID0gJGxlZXdheSA/PyAwOwogICAgICAgICR0aGlzLT5tYXhBZ2UgPSAkbWF4QWdlID8/IDYwMDAwOwogICAgICAgICR0aGlzLT5hcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlQXBpVmVyaWZpY2F0aW9uKENsaWVudEludGVyZmFjZSAkY2xpZW50LCBzdHJpbmcgJGFwaUtleSwgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UgJHJlcXVlc3RGYWN0b3J5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhBZ2UoaW50ICRtYXhBZ2UpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm1heEFnZSA9ICRtYXhBZ2U7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGVld2F5KGludCAkbGVld2F5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sZWV3YXkgPSAkbGVld2F5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdhbmRyb2lkLXNhZmV0eW5ldCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgZm9yZWFjaCAoWyd2ZXInLCAncmVzcG9uc2UnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJGtleV0sIHNwcmludGYoJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIiVzIiBpcyBlbXB0eS4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRqd3MgPSAkdGhpcy0+andzU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ3Jlc3BvbnNlJ10pOwogICAgICAgICRqd3NIZWFkZXIgPSAkandzLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlcigpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqd3NIZWFkZXIsICd4NWMnLCAnVGhlIHJlc3BvbnNlIGluIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgbXVzdCBjb250YWluIGEgIng1YyIgaGVhZGVyLicpOwogICAgICAgIEFzc2VydGlvbjo6bm90RW1wdHkoJGp3c0hlYWRlclsneDVjJ10sICdUaGUgIng1YyIgcGFyYW1ldGVyIGluIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgcmVzcG9uc2UgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRoaXMtPmNvbnZlcnRDZXJ0aWZpY2F0ZXNUb1BlbSgkandzSGVhZGVyWyd4NWMnXSk7CiAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ2p3cyddID0gJGp3czsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVCYXNpYygKICAgICAgICAgICAgJHRoaXMtPm5hbWUoKSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sCiAgICAgICAgICAgIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKTsKICAgICAgICAkZmlyc3RDZXJ0aWZpY2F0ZSA9IGN1cnJlbnQoJGNlcnRpZmljYXRlcyk7CiAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGZpcnN0Q2VydGlmaWNhdGUsICdObyBjZXJ0aWZpY2F0ZScpOwoKICAgICAgICAkcGFyc2VkQ2VydGlmaWNhdGUgPSBvcGVuc3NsX3g1MDlfcGFyc2UoJGZpcnN0Q2VydGlmaWNhdGUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkQ2VydGlmaWNhdGUsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWRDZXJ0aWZpY2F0ZSwgJ3N1YmplY3QnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkQ2VydGlmaWNhdGVbJ3N1YmplY3QnXSwgJ0NOJywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkcGFyc2VkQ2VydGlmaWNhdGVbJ3N1YmplY3QnXVsnQ04nXSwgJ2F0dGVzdC5hbmRyb2lkLmNvbScsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICAvKiogQHZhciBKV1MgJGp3cyAqLwogICAgICAgICRqd3MgPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnandzJyk7CiAgICAgICAgJHBheWxvYWQgPSAkandzLT5nZXRQYXlsb2FkKCk7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlUGF5bG9hZCgkcGF5bG9hZCwgJGNsaWVudERhdGFKU09OSGFzaCwgJGF1dGhlbnRpY2F0b3JEYXRhKTsKCiAgICAgICAgLy9DaGVjayB0aGUgc2lnbmF0dXJlCiAgICAgICAgJHRoaXMtPnZhbGlkYXRlU2lnbmF0dXJlKCRqd3MsICR0cnVzdFBhdGgpOwoKICAgICAgICAvL0NoZWNrIGFnYWluc3QgR29vZ2xlIHNlcnZpY2UKICAgICAgICAkdGhpcy0+dmFsaWRhdGVVc2luZ0dvb2dsZUFwaSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlUGF5bG9hZCg/c3RyaW5nICRwYXlsb2FkLCBzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcGF5bG9hZCwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgJHBheWxvYWQgPSBKc29uQ29udmVydGVyOjpkZWNvZGUoJHBheWxvYWQpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGF5bG9hZCwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBheWxvYWQsICdub25jZScsICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdC4gIm5vbmNlIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJHBheWxvYWRbJ25vbmNlJ10sIGJhc2U2NF9lbmNvZGUoaGFzaCgnc2hhMjU2JywgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2gsIHRydWUpKSwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiBJbnZhbGlkIG5vbmNlJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBheWxvYWQsICdjdHNQcm9maWxlTWF0Y2gnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuICJjdHNQcm9maWxlTWF0Y2giIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwYXlsb2FkWydjdHNQcm9maWxlTWF0Y2gnXSwgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiAiY3RzUHJvZmlsZU1hdGNoIiB2YWx1ZSBpcyBmYWxzZS4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGF5bG9hZCwgJ3RpbWVzdGFtcE1zJywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0LiBUaW1lc3RhbXAgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBheWxvYWRbJ3RpbWVzdGFtcE1zJ10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdC4gVGltZXN0YW1wIHNoYWxsIGJlIGFuIGludGVnZXIuJyk7CiAgICAgICAgJGN1cnJlbnRUaW1lID0gdGltZSgpICogMTAwMDsKICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbigkcGF5bG9hZFsndGltZXN0YW1wTXMnXSwgJGN1cnJlbnRUaW1lICsgJHRoaXMtPmxlZXdheSwgc3ByaW50ZignSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIElzc3VlZCBpbiB0aGUgZnV0dXJlLiBDdXJyZW50IHRpbWU6ICVkLiBSZXNwb25zZSB0aW1lOiAlZCcsICRjdXJyZW50VGltZSwgJHBheWxvYWRbJ3RpbWVzdGFtcE1zJ10pKTsKICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbigkY3VycmVudFRpbWUgLSAkcGF5bG9hZFsndGltZXN0YW1wTXMnXSwgJHRoaXMtPm1heEFnZSwgc3ByaW50ZignSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIFRvbyBvbGQuIEN1cnJlbnQgdGltZTogJWQuIFJlc3BvbnNlIHRpbWU6ICVkJywgJGN1cnJlbnRUaW1lLCAkcGF5bG9hZFsndGltZXN0YW1wTXMnXSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVTaWduYXR1cmUoSldTICRqd3MsIENlcnRpZmljYXRlVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiB2b2lkCiAgICB7CiAgICAgICAgJGp3ayA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21DZXJ0aWZpY2F0ZSgkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKVswXSk7CiAgICAgICAgJGlzVmFsaWQgPSAkdGhpcy0+andzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGp3cywgJGp3aywgMCk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRpc1ZhbGlkLCAnSW52YWxpZCByZXNwb25zZSBzaWduYXR1cmUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlVXNpbmdHb29nbGVBcGkoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50KTogdm9pZAogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+Y2xpZW50IHx8IG51bGwgPT09ICR0aGlzLT5hcGlLZXkgfHwgbnVsbCA9PT0gJHRoaXMtPnJlcXVlc3RGYWN0b3J5KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHVyaSA9IHNwcmludGYoJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2FuZHJvaWRjaGVjay92MS9hdHRlc3RhdGlvbnMvdmVyaWZ5P2tleT0lcycsIHVybGVuY29kZSgkdGhpcy0+YXBpS2V5KSk7CiAgICAgICAgJHJlcXVlc3RCb2R5ID0gc3ByaW50ZigneyJzaWduZWRBdHRlc3RhdGlvbiI6IiVzIn0nLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgncmVzcG9uc2UnKSk7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ1BPU1QnLCAkdXJpKTsKICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgICRyZXF1ZXN0LT5nZXRCb2R5KCktPndyaXRlKCRyZXF1ZXN0Qm9keSk7CgogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jbGllbnQtPnNlbmRSZXF1ZXN0KCRyZXF1ZXN0KTsKICAgICAgICAkdGhpcy0+Y2hlY2tHb29nbGVBcGlSZXNwb25zZSgkcmVzcG9uc2UpOwogICAgICAgICRyZXNwb25zZUJvZHkgPSAkdGhpcy0+Z2V0UmVzcG9uc2VCb2R5KCRyZXNwb25zZSk7CiAgICAgICAgJHJlc3BvbnNlQm9keUpzb24gPSBqc29uX2RlY29kZSgkcmVzcG9uc2VCb2R5LCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcmVzcG9uc2VCb2R5SnNvbiwgJ2lzVmFsaWRTaWduYXR1cmUnLCAnSW52YWxpZCByZXNwb25zZS4nKTsKICAgICAgICBBc3NlcnRpb246OmJvb2xlYW4oJHJlc3BvbnNlQm9keUpzb25bJ2lzVmFsaWRTaWduYXR1cmUnXSwgJ0ludmFsaWQgcmVzcG9uc2UuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRyZXNwb25zZUJvZHlKc29uWydpc1ZhbGlkU2lnbmF0dXJlJ10sICdJbnZhbGlkIHJlc3BvbnNlLicpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5KFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSk6IHN0cmluZwogICAgewogICAgICAgICRyZXNwb25zZUJvZHkgPSAnJzsKICAgICAgICAkcmVzcG9uc2UtPmdldEJvZHkoKS0+cmV3aW5kKCk7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgJHRtcCA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpLT5yZWFkKDEwMjQpOwogICAgICAgICAgICBpZiAoJycgPT09ICR0bXApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXNwb25zZUJvZHkgLj0gJHRtcDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzcG9uc2VCb2R5OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tHb29nbGVBcGlSZXNwb25zZShSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpOiB2b2lkCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgyMDAsICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCAnUmVxdWVzdCBkaWQgbm90IHN1Y2NlZWRlZCcpOwogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkcmVzcG9uc2UtPmhhc0hlYWRlcignY29udGVudC10eXBlJyksICdVbnJlY29nbml6ZWQgcmVzcG9uc2UnKTsKCiAgICAgICAgZm9yZWFjaCAoJHJlc3BvbnNlLT5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpIGFzICRoZWFkZXIpIHsKICAgICAgICAgICAgaWYgKDAgPT09IG1iX3N0cnBvcygkaGVhZGVyLCAnYXBwbGljYXRpb24vanNvbicpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VucmVjb2duaXplZCByZXNwb25zZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRjZXJ0aWZpY2F0ZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY29udmVydENlcnRpZmljYXRlc1RvUGVtKGFycmF5ICRjZXJ0aWZpY2F0ZXMpOiBhcnJheQogICAgewogICAgICAgIGZvcmVhY2ggKCRjZXJ0aWZpY2F0ZXMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJGNlcnRpZmljYXRlc1ska10gPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmZpeFBFTVN0cnVjdHVyZSgkdik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNlcnRpZmljYXRlczsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluaXRKd3NWZXJpZmllcigpOiB2b2lkCiAgICB7CiAgICAgICAgJGFsZ29yaXRobUNsYXNzZXMgPSBbCiAgICAgICAgICAgIEFsZ29yaXRobVxSUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxSUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxSUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxQUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxQUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxQUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxFUzI1Njo6Y2xhc3MsIEFsZ29yaXRobVxFUzM4NDo6Y2xhc3MsIEFsZ29yaXRobVxFUzUxMjo6Y2xhc3MsCiAgICAgICAgICAgIEFsZ29yaXRobVxFZERTQTo6Y2xhc3MsCiAgICAgICAgXTsKICAgICAgICAvKiBAdmFyIEFsZ29yaXRobUludGVyZmFjZVtdICRhbGdvcml0aG1zICovCiAgICAgICAgJGFsZ29yaXRobXMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkYWxnb3JpdGhtQ2xhc3NlcyBhcyAkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJGFsZ29yaXRobSkpIHsKICAgICAgICAgICAgICAgIC8qIEB2YXIgQWxnb3JpdGhtSW50ZXJmYWNlICRhbGdvcml0aG0gKi8KICAgICAgICAgICAgICAgICRhbGdvcml0aG1zW10gPSBuZXcgJGFsZ29yaXRobSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRhbGdvcml0aG1NYW5hZ2VyID0gbmV3IEFsZ29yaXRobU1hbmFnZXIoJGFsZ29yaXRobXMpOwogICAgICAgICR0aGlzLT5qd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigkYWxnb3JpdGhtTWFuYWdlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AppleAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEFwcGxlQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0IGltcGxlbWVudHMgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0CnsKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdhcHBsZSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgZm9yZWFjaCAoWyd4NWMnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlclRoYW4oY291bnQoJGNlcnRpZmljYXRlcyksIDAsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6YWxsU3RyaW5nKCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmNvbnZlcnRBbGxERVJUb1BFTSgkY2VydGlmaWNhdGVzKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVBbm9ueW1pemF0aW9uQ0EoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vRGVjb2RlIGxlYWYgYXR0ZXN0YXRpb24gY2VydGlmaWNhdGUKICAgICAgICAkbGVhZiA9ICRjZXJ0aWZpY2F0ZXNbMF07CgogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQW5kR2V0UHVibGljS2V5KCRsZWFmLCAkY2xpZW50RGF0YUpTT05IYXNoLCAkYXV0aGVudGljYXRvckRhdGEpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVBbmRHZXRQdWJsaWNLZXkoc3RyaW5nICRjZXJ0aWZpY2F0ZSwgc3RyaW5nICRjbGllbnREYXRhSGFzaCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogdm9pZAogICAgewogICAgICAgICRyZXNvdXJjZSA9IG9wZW5zc2xfcGtleV9nZXRfcHVibGljKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgJGRldGFpbHMgPSBvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlc291cmNlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdVbmFibGUgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGUnKTsKCiAgICAgICAgLy9DaGVjayB0aGF0IGF1dGhEYXRhIHB1YmxpY0tleSBtYXRjaGVzIHRoZSBwdWJsaWMga2V5IGluIHRoZSBhdHRlc3RhdGlvbiBjZXJ0aWZpY2F0ZQogICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCAnTm8gYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGZvdW5kJyk7CiAgICAgICAgJHB1YmxpY0tleURhdGEgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5RGF0YSwgJ05vIGF0dGVzdGVkIHB1YmxpYyBrZXkgZm91bmQnKTsKICAgICAgICAkcHVibGljRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJHB1YmxpY0tleURhdGEpOwogICAgICAgICRjb3NlS2V5ID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkcHVibGljRGF0YVN0cmVhbSktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YmxpY0RhdGFTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkgZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJHB1YmxpY0RhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgJHB1YmxpY0tleSA9IEtleTo6Y3JlYXRlRnJvbURhdGEoJGNvc2VLZXkpOwoKICAgICAgICBBc3NlcnRpb246OnRydWUoKCRwdWJsaWNLZXkgaW5zdGFuY2VvZiBFYzJLZXkpIHx8ICgkcHVibGljS2V5IGluc3RhbmNlb2YgUnNhS2V5KSwgJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CgogICAgICAgIC8vV2UgY2hlY2sgdGhlIGF0dGVzdGVkIGtleSBjb3JyZXNwb25kcyB0byB0aGUga2V5IGluIHRoZSBjZXJ0aWZpY2F0ZQogICAgICAgIEFzc2VydGlvbjo6ZXEoJHB1YmxpY0tleS0+YXNQRU0oKSwgJGRldGFpbHNbJ2tleSddLCAnSW52YWxpZCBrZXknKTsKCiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICAgICRjZXJ0RGV0YWlscyA9IG9wZW5zc2xfeDUwOV9wYXJzZSgkY2VydGlmaWNhdGUpOwoKICAgICAgICAvL0ZpbmQgQXBwbGUgRXh0ZW5zaW9uIHdpdGggT0lEIOKAnDEuMi44NDAuMTEzNjM1LjEwMC44LjLigJ0gaW4gY2VydGlmaWNhdGUgZXh0ZW5zaW9ucwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHMsICdUaGUgY2VydGlmaWNhdGUgaXMgbm90IHZhbGlkJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzLCAnZXh0ZW5zaW9ucycsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIGV4dGVuc2lvbicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkY2VydERldGFpbHNbJ2V4dGVuc2lvbnMnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gZXh0ZW5zaW9uJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ10sICcxLjIuODQwLjExMzYzNS4xMDAuOC4yJywgJ1RoZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb24gIjEuMi44NDAuMTEzNjM1LjEwMC44LjIiIGlzIG1pc3NpbmcnKTsKICAgICAgICAkZXh0ZW5zaW9uID0gJGNlcnREZXRhaWxzWydleHRlbnNpb25zJ11bJzEuMi44NDAuMTEzNjM1LjEwMC44LjInXTsKCiAgICAgICAgJG5vbmNlVG9IYXNoID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSGFzaDsKICAgICAgICAkbm9uY2UgPSBoYXNoKCdzaGEyNTYnLCAkbm9uY2VUb0hhc2gpOwoKICAgICAgICAvLyczMDI0YTEyMjA0MjAnIGNvcnJlc3BvbmRzIHRvIHRoZSBTZXF1ZW5jZStFeHBsaWNpdGx5IFRhZ2dlZCBPYmplY3QgKyBPY3RldCBPYmplY3QKICAgICAgICBBc3NlcnRpb246OmVxKCczMDI0YTEyMjA0MjAnLiRub25jZSwgYmluMmhleCgkZXh0ZW5zaW9uKSwgJ1RoZSBjbGllbnQgZGF0YSBoYXNoIGlzIG5vdCB2YWxpZCcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXE1ldGFkYXRhU3RhdGVtZW50OwoKY2xhc3MgQXR0ZXN0YXRpb25PYmplY3QKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyYXdBdHRlc3RhdGlvbk9iamVjdDsKICAgIC8qKgogICAgICogQHZhciBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgICovCiAgICBwcml2YXRlICRhdHRTdG10OwogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JEYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBNZXRhZGF0YVN0YXRlbWVudHxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1ldGFkYXRhU3RhdGVtZW50OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHJhd0F0dGVzdGF0aW9uT2JqZWN0LCBBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0U3RtdCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhEYXRhLCA/TWV0YWRhdGFTdGF0ZW1lbnQgJG1ldGFkYXRhU3RhdGVtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJG1ldGFkYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1ldGFkYXRhU3RhdGVtZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldE1ldGFkYXRhU3RhdGVtZW50Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5yYXdBdHRlc3RhdGlvbk9iamVjdCA9ICRyYXdBdHRlc3RhdGlvbk9iamVjdDsKICAgICAgICAkdGhpcy0+YXR0U3RtdCA9ICRhdHRTdG10OwogICAgICAgICR0aGlzLT5hdXRoRGF0YSA9ICRhdXRoRGF0YTsKICAgICAgICAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnQgPSAkbWV0YWRhdGFTdGF0ZW1lbnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhd0F0dGVzdGF0aW9uT2JqZWN0KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmF3QXR0ZXN0YXRpb25PYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dFN0bXQoKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dFN0bXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dFN0bXQoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dFN0bXQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmF0dFN0bXQgPSAkYXR0U3RtdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aERhdGEoKTogQXV0aGVudGljYXRvckRhdGEKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhEYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YVN0YXRlbWVudCgpOiA/TWV0YWRhdGFTdGF0ZW1lbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNZXRhZGF0YVN0YXRlbWVudChNZXRhZGF0YVN0YXRlbWVudCAkbWV0YWRhdGFTdGF0ZW1lbnQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50ID0gJG1ldGFkYXRhU3RhdGVtZW50OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationObjectLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBmdW5jdGlvbiBvcmQ7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHVucGFjazsKdXNlIFRocm93YWJsZTsKdXNlIFdlYmF1dGhuXEF0dGVzdGVkQ3JlZGVudGlhbERhdGE7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKCmNsYXNzIEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyCnsKICAgIHByaXZhdGUgY29uc3QgRkxBR19BVCA9IDBiMDEwMDAwMDA7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfRUQgPSAwYjEwMDAwMDAwOwoKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTG9nZ2VySW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbG9nZ2VyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLCA/TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgIm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHNldCBgbnVsbGAgaW5zdGVhZC4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiIGluc3RlYWQuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlciA/PyBuZXcgTnVsbExvZ2dlcigpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChzdHJpbmcgJGRhdGEpOiBBdHRlc3RhdGlvbk9iamVjdAogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ1RyeWluZyB0byBsb2FkIHRoZSBkYXRhJywgWydkYXRhJyA9PiAkZGF0YV0pOwogICAgICAgICAgICAkZGVjb2RlZERhdGEgPSBCYXNlNjRVcmw6OmRlY29kZSgkZGF0YSk7CiAgICAgICAgICAgICRzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKCRkZWNvZGVkRGF0YSk7CiAgICAgICAgICAgICRwYXJzZWQgPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRzdHJlYW0pOwoKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnTG9hZGluZyB0aGUgQXR0ZXN0YXRpb24gU3RhdGVtZW50Jyk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCA9ICRwYXJzZWQtPmdldE5vcm1hbGl6ZWREYXRhKCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkc3RyZWFtLT5pc0VPRigpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICAgICAkc3RyZWFtLT5jbG9zZSgpOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGF0dGVzdGF0aW9uT2JqZWN0LCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uT2JqZWN0LCAnYXV0aERhdGEnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uT2JqZWN0LCAnZm10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbk9iamVjdCwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICAgICAgJGF1dGhEYXRhID0gJGF0dGVzdGF0aW9uT2JqZWN0WydhdXRoRGF0YSddOwoKICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9ICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5nZXQoJGF0dGVzdGF0aW9uT2JqZWN0WydmbXQnXSk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQtPmxvYWQoJGF0dGVzdGF0aW9uT2JqZWN0KTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0YXRpb24gU3RhdGVtZW50IGxvYWRlZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnQXR0ZXN0YXRpb24gU3RhdGVtZW50IGxvYWRlZCcsIFsnYXR0ZXN0YXRpb25TdGF0ZW1lbnQnID0+ICRhdHRlc3RhdGlvblN0YXRlbWVudF0pOwoKICAgICAgICAgICAgJGF1dGhEYXRhU3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkYXV0aERhdGEpOwogICAgICAgICAgICAkcnBfaWRfaGFzaCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgzMik7CiAgICAgICAgICAgICRmbGFncyA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgxKTsKICAgICAgICAgICAgJHNpZ25Db3VudCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCg0KTsKICAgICAgICAgICAgJHNpZ25Db3VudCA9IHVucGFjaygnTicsICRzaWduQ291bnQpWzFdOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZyhzcHJpbnRmKCdTaWduYXR1cmUgY291bnRlcjogJWQnLCAkc2lnbkNvdW50KSk7CgogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9IG51bGw7CiAgICAgICAgICAgIGlmICgwICE9PSAob3JkKCRmbGFncykgJiBzZWxmOjpGTEFHX0FUKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0ZWQgQ3JlZGVudGlhbCBEYXRhIGlzIHByZXNlbnQnKTsKICAgICAgICAgICAgICAgICRhYWd1aWQgPSBVdWlkOjpmcm9tQnl0ZXMoJGF1dGhEYXRhU3RyZWFtLT5yZWFkKDE2KSk7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgyKTsKICAgICAgICAgICAgICAgICRjcmVkZW50aWFsTGVuZ3RoID0gdW5wYWNrKCduJywgJGNyZWRlbnRpYWxMZW5ndGgpWzFdOwogICAgICAgICAgICAgICAgJGNyZWRlbnRpYWxJZCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgkY3JlZGVudGlhbExlbmd0aCk7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJGF1dGhEYXRhU3RyZWFtKTsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRjcmVkZW50aWFsUHVibGljS2V5LCBNYXBPYmplY3Q6OmNsYXNzLCAnVGhlIGRhdGEgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGNyZWRlbnRpYWwgcHVibGljIGtleS4nKTsKICAgICAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gbmV3IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEoJGFhZ3VpZCwgJGNyZWRlbnRpYWxJZCwgKHN0cmluZykgJGNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0ZWQgQ3JlZGVudGlhbCBEYXRhIGxvYWRlZCcpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0F0dGVzdGVkIENyZWRlbnRpYWwgRGF0YSBsb2FkZWQnLCBbJ2F0JyA9PiAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZXh0ZW5zaW9uID0gbnVsbDsKICAgICAgICAgICAgaWYgKDAgIT09IChvcmQoJGZsYWdzKSAmIHNlbGY6OkZMQUdfRUQpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdFeHRlbnNpb24gRGF0YSBsb2FkZWQnKTsKICAgICAgICAgICAgICAgICRleHRlbnNpb24gPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRhdXRoRGF0YVN0cmVhbSk7CiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uID0gQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjo6bG9hZCgkZXh0ZW5zaW9uKTsKICAgICAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0V4dGVuc2lvbiBEYXRhIGxvYWRlZCcpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0V4dGVuc2lvbiBEYXRhIGxvYWRlZCcsIFsnZWQnID0+ICRleHRlbnNpb25dKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF1dGhEYXRhU3RyZWFtLT5pc0VPRigpLCAnSW52YWxpZCBhdXRoZW50aWNhdGlvbiBkYXRhLiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAgICAgJGF1dGhEYXRhU3RyZWFtLT5jbG9zZSgpOwoKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhID0gbmV3IEF1dGhlbnRpY2F0b3JEYXRhKCRhdXRoRGF0YSwgJHJwX2lkX2hhc2gsICRmbGFncywgJHNpZ25Db3VudCwgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEsICRleHRlbnNpb24pOwogICAgICAgICAgICAkYXR0ZXN0YXRpb25PYmplY3QgPSBuZXcgQXR0ZXN0YXRpb25PYmplY3QoJGRhdGEsICRhdHRlc3RhdGlvblN0YXRlbWVudCwgJGF1dGhlbnRpY2F0b3JEYXRhKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQXR0ZXN0YXRpb24gT2JqZWN0IGxvYWRlZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnQXR0ZXN0YXRpb24gT2JqZWN0JywgWydlZCcgPT4gJGF0dGVzdGF0aW9uT2JqZWN0XSk7CgogICAgICAgICAgICByZXR1cm4gJGF0dGVzdGF0aW9uT2JqZWN0OwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcVHJ1c3RQYXRoTG9hZGVyOwoKY2xhc3MgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBjb25zdCBUWVBFX05PTkUgPSAnbm9uZSc7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9CQVNJQyA9ICdiYXNpYyc7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9TRUxGID0gJ3NlbGYnOwogICAgcHVibGljIGNvbnN0IFRZUEVfQVRUQ0EgPSAnYXR0Y2EnOwogICAgcHVibGljIGNvbnN0IFRZUEVfRUNEQUEgPSAnZWNkYWEnOwogICAgcHVibGljIGNvbnN0IFRZUEVfQU5PTkNBID0gJ2Fub25jYSc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRmbXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0U3RtdDsKCiAgICAvKioKICAgICAqIEB2YXIgVHJ1c3RQYXRoCiAgICAgKi8KICAgIHByaXZhdGUgJHRydXN0UGF0aDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0U3RtdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmbXQsIGFycmF5ICRhdHRTdG10LCBzdHJpbmcgJHR5cGUsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKQogICAgewogICAgICAgICR0aGlzLT5mbXQgPSAkZm10OwogICAgICAgICR0aGlzLT5hdHRTdG10ID0gJGF0dFN0bXQ7CiAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICAkdGhpcy0+dHJ1c3RQYXRoID0gJHRydXN0UGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRTdG10CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlTm9uZShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9OT05FLCAkdHJ1c3RQYXRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRTdG10CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQmFzaWMoc3RyaW5nICRmbXQsIGFycmF5ICRhdHRTdG10LCBUcnVzdFBhdGggJHRydXN0UGF0aCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGZtdCwgJGF0dFN0bXQsIHNlbGY6OlRZUEVfQkFTSUMsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dFN0bXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTZWxmKHN0cmluZyAkZm10LCBhcnJheSAkYXR0U3RtdCwgVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRmbXQsICRhdHRTdG10LCBzZWxmOjpUWVBFX1NFTEYsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dFN0bXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVBdHRDQShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9BVFRDQSwgJHRydXN0UGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0U3RtdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUVjZGFhKHN0cmluZyAkZm10LCBhcnJheSAkYXR0U3RtdCwgVHJ1c3RQYXRoICR0cnVzdFBhdGgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRmbXQsICRhdHRTdG10LCBzZWxmOjpUWVBFX0VDREFBLCAkdHJ1c3RQYXRoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUFub255bWl6YXRpb25DQShzdHJpbmcgJGZtdCwgYXJyYXkgJGF0dFN0bXQsIFRydXN0UGF0aCAkdHJ1c3RQYXRoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkZm10LCAkYXR0U3RtdCwgc2VsZjo6VFlQRV9BTk9OQ0EsICR0cnVzdFBhdGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGbXQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mbXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dFN0bXQoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dFN0bXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+YXR0U3RtdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5oYXMoJGtleSksIHNwcmludGYoJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgaGFzIG5vIGtleSAiJXMiLicsICRrZXkpKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRTdG10WyRrZXldOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcnVzdFBhdGgoKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cnVzdFBhdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydmbXQnLCAnYXR0U3RtdCcsICd0cnVzdFBhdGgnLCAndHlwZSddIGFzICRrZXkpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICRrZXksIHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkZGF0YVsnZm10J10sCiAgICAgICAgICAgICRkYXRhWydhdHRTdG10J10sCiAgICAgICAgICAgICRkYXRhWyd0eXBlJ10sCiAgICAgICAgICAgIFRydXN0UGF0aExvYWRlcjo6bG9hZFRydXN0UGF0aCgkZGF0YVsndHJ1c3RQYXRoJ10pCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdmbXQnID0+ICR0aGlzLT5mbXQsCiAgICAgICAgICAgICdhdHRTdG10JyA9PiAkdGhpcy0+YXR0U3RtdCwKICAgICAgICAgICAgJ3RydXN0UGF0aCcgPT4gJHRoaXMtPnRydXN0UGF0aC0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAndHlwZScgPT4gJHRoaXMtPnR5cGUsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwoKaW50ZXJmYWNlIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQ7CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/AttestationStatementSupportManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcgp7CiAgICAvKioKICAgICAqIEB2YXIgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0W10KICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0cyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydHNbJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydC0+bmFtZSgpXSA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJG5hbWUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAkbmFtZSk6IEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aGFzKCRuYW1lKSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCBmb3JtYXQgIiVzIiBpcyBub3Qgc3VwcG9ydGVkLicsICRuYW1lKSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0c1skbmFtZV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/FidoU2FAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE1hcE9iamVjdDsKdXNlIENCT1JcT3RoZXJPYmplY3RcT3RoZXJPYmplY3RNYW5hZ2VyOwp1c2UgQ0JPUlxUYWdcVGFnT2JqZWN0TWFuYWdlcjsKdXNlIENvc2VcS2V5XEVjMktleTsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcb3BlbnNzbF9wa2V5X2dldF9wdWJsaWM7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBUaHJvd2FibGU7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdG9yRGF0YTsKdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlVG9vbGJveDsKdXNlIFdlYmF1dGhuXFN0cmluZ1N0cmVhbTsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxDZXJ0aWZpY2F0ZVRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEZpZG9VMkZBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQgaW1wbGVtZW50cyBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKewogICAgLyoqCiAgICAgKiBAdmFyIERlY29kZXIKICAgICAqLwogICAgcHJpdmF0ZSAkZGVjb2RlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ2ZpZG8tdTJmJzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRhdHRlc3RhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZChhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvbiwgJ2F0dFN0bXQnLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKICAgICAgICBmb3JlYWNoIChbJ3NpZycsICd4NWMnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCAka2V5LCBzcHJpbnRmKCdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICIlcyIgaXMgbWlzc2luZy4nLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6Y291bnQoJGNlcnRpZmljYXRlcywgMSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBvbmUgY2VydGlmaWNhdGUuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjphbGxTdHJpbmcoJGNlcnRpZmljYXRlcywgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBvbmUgY2VydGlmaWNhdGUuJyk7CgogICAgICAgIHJlc2V0KCRjZXJ0aWZpY2F0ZXMpOwogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmNvbnZlcnRBbGxERVJUb1BFTSgkY2VydGlmaWNhdGVzKTsKICAgICAgICAkdGhpcy0+Y2hlY2tDZXJ0aWZpY2F0ZSgkY2VydGlmaWNhdGVzWzBdKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVCYXNpYygkYXR0ZXN0YXRpb25bJ2ZtdCddLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgbmV3IENlcnRpZmljYXRlVHJ1c3RQYXRoKCRjZXJ0aWZpY2F0ZXMpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldEFhZ3VpZCgpLT50b1N0cmluZygpLAogICAgICAgICAgICAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJywKICAgICAgICAgICAgJ0ludmFsaWQgQUFHVUlEIGZvciBmaWRvLXUyZiBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuIFNoYWxsIGJlICIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiJwogICAgICAgICk7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHRydXN0UGF0aCwgQ2VydGlmaWNhdGVUcnVzdFBhdGg6OmNsYXNzLCAnSW52YWxpZCB0cnVzdCBwYXRoJyk7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSA9ICJcMCI7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSAuPSAkYXV0aGVudGljYXRvckRhdGEtPmdldFJwSWRIYXNoKCk7CiAgICAgICAgJGRhdGFUb1ZlcmlmeSAuPSAkY2xpZW50RGF0YUpTT05IYXNoOwogICAgICAgICRkYXRhVG9WZXJpZnkgLj0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxJZCgpOwogICAgICAgICRkYXRhVG9WZXJpZnkgLj0gJHRoaXMtPmV4dHJhY3RQdWJsaWNLZXkoJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxQdWJsaWNLZXkoKSk7CgogICAgICAgIHJldHVybiAxID09PSBvcGVuc3NsX3ZlcmlmeSgkZGF0YVRvVmVyaWZ5LCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICR0cnVzdFBhdGgtPmdldENlcnRpZmljYXRlcygpWzBdLCBPUEVOU1NMX0FMR09fU0hBMjU2KTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RQdWJsaWNLZXkoP3N0cmluZyAkcHVibGljS2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRwdWJsaWNLZXksICdUaGUgYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBwdWJsaWMga2V5LicpOwoKICAgICAgICAkcHVibGljS2V5U3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkcHVibGljS2V5KTsKICAgICAgICAkY29zZUtleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJHB1YmxpY0tleVN0cmVhbSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwdWJsaWNLZXlTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICRwdWJsaWNLZXlTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJGNvc2VLZXksIE1hcE9iamVjdDo6Y2xhc3MsICdUaGUgYXR0ZXN0ZWQgY3JlZGVudGlhbCBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBwdWJsaWMga2V5LicpOwoKICAgICAgICAkY29zZUtleSA9ICRjb3NlS2V5LT5nZXROb3JtYWxpemVkRGF0YSgpOwogICAgICAgICRlYzJLZXkgPSBuZXcgRWMyS2V5KCRjb3NlS2V5ICsgW0VjMktleTo6VFlQRSA9PiAyLCBFYzJLZXk6OkRBVEFfQ1VSVkUgPT4gRWMyS2V5OjpDVVJWRV9QMjU2XSk7CgogICAgICAgIHJldHVybiAiXHgwNCIuJGVjMktleS0+eCgpLiRlYzJLZXktPnkoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGUoc3RyaW5nICRwdWJsaWNLZXkpOiB2b2lkCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlc291cmNlID0gb3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoJHB1YmxpY0tleSk7CiAgICAgICAgICAgICRkZXRhaWxzID0gb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRyZXNvdXJjZSk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicsIDAsICR0aHJvd2FibGUpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRldGFpbHMsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRldGFpbHMsICdlYycsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRldGFpbHNbJ2VjJ10sICdjdXJ2ZV9uYW1lJywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRkZXRhaWxzWydlYyddWydjdXJ2ZV9uYW1lJ10sICdwcmltZTI1NnYxJywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGV0YWlsc1snZWMnXSwgJ2N1cnZlX29pZCcsICdJbnZhbGlkIGNlcnRpZmljYXRlIG9yIGNlcnRpZmljYXRlIGNoYWluJyk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkZGV0YWlsc1snZWMnXVsnY3VydmVfb2lkJ10sICcxLjIuODQwLjEwMDQ1LjMuMS43JywgJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/NoneAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0b3JEYXRhOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXEVtcHR5VHJ1c3RQYXRoOwoKZmluYWwgY2xhc3MgTm9uZUF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ25vbmUnOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dGVzdGF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKGFycmF5ICRhdHRlc3RhdGlvbik6IEF0dGVzdGF0aW9uU3RhdGVtZW50CiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjpub0NvbnRlbnQoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICByZXR1cm4gQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OmNyZWF0ZU5vbmUoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBFbXB0eVRydXN0UGF0aCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgPT09IGNvdW50KCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0QXR0U3RtdCgpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/PackedAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcQWxnb3JpdGhtczsKdXNlIENvc2VcS2V5XEtleTsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRvckRhdGE7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CnVzZSBXZWJhdXRoblxTdHJpbmdTdHJlYW07CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcQ2VydGlmaWNhdGVUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcRWNkYWFLZXlJZFRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxFbXB0eVRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFV0aWxcQ29zZVNpZ25hdHVyZUZpeGVyOwoKZmluYWwgY2xhc3MgUGFja2VkQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0IGltcGxlbWVudHMgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0CnsKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtTWFuYWdlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTWFuYWdlciAkYWxnb3JpdGhtTWFuYWdlcikKICAgIHsKICAgICAgICAkdGhpcy0+ZGVjb2RlciA9IG5ldyBEZWNvZGVyKG5ldyBUYWdPYmplY3RNYW5hZ2VyKCksIG5ldyBPdGhlck9iamVjdE1hbmFnZXIoKSk7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobU1hbmFnZXIgPSAkYWxnb3JpdGhtTWFuYWdlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3BhY2tlZCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJ3NpZycsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJzaWciIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdhbGcnLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiYWxnIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydzaWcnXSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgInNpZyIgaXMgbWlzc2luZy4nKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCd4NWMnLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSk6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRCYXNpY1R5cGUoJGF0dGVzdGF0aW9uKTsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCdlY2RhYUtleUlkJywgJGF0dGVzdGF0aW9uWydhdHRTdG10J10pOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5sb2FkRWNkYWFUeXBlKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bG9hZEVtcHR5VHlwZSgkYXR0ZXN0YXRpb24pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZChzdHJpbmcgJGNsaWVudERhdGFKU09OSGFzaCwgQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBBdXRoZW50aWNhdG9yRGF0YSAkYXV0aGVudGljYXRvckRhdGEpOiBib29sCiAgICB7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgIGNhc2UgJHRydXN0UGF0aCBpbnN0YW5jZW9mIENlcnRpZmljYXRlVHJ1c3RQYXRoOgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcm9jZXNzV2l0aENlcnRpZmljYXRlKCRjbGllbnREYXRhSlNPTkhhc2gsICRhdHRlc3RhdGlvblN0YXRlbWVudCwgJGF1dGhlbnRpY2F0b3JEYXRhLCAkdHJ1c3RQYXRoKTsKICAgICAgICAgICAgY2FzZSAkdHJ1c3RQYXRoIGluc3RhbmNlb2YgRWNkYWFLZXlJZFRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhFQ0RBQSgpOwogICAgICAgICAgICBjYXNlICR0cnVzdFBhdGggaW5zdGFuY2VvZiBFbXB0eVRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhTZWxmQXR0ZXN0YXRpb24oJGNsaWVudERhdGFKU09OSGFzaCwgJGF0dGVzdGF0aW9uU3RhdGVtZW50LCAkYXV0aGVudGljYXRvckRhdGEpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgYXR0ZXN0YXRpb24gc3RhdGVtZW50Jyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGF0dGVzdGF0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEJhc2ljVHlwZShhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsneDVjJ107CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRjZXJ0aWZpY2F0ZXMsICdUaGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50IHZhbHVlICJ4NWMiIG11c3QgYmUgYSBsaXN0IHdpdGggYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlLicpOwogICAgICAgIEFzc2VydGlvbjo6bWluQ291bnQoJGNlcnRpZmljYXRlcywgMSwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgIng1YyIgbXVzdCBiZSBhIGxpc3Qgd2l0aCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUuJyk7CiAgICAgICAgJGNlcnRpZmljYXRlcyA9IENlcnRpZmljYXRlVG9vbGJveDo6Y29udmVydEFsbERFUlRvUEVNKCRjZXJ0aWZpY2F0ZXMpOwoKICAgICAgICByZXR1cm4gQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OmNyZWF0ZUJhc2ljKCRhdHRlc3RhdGlvblsnZm10J10sICRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCBuZXcgQ2VydGlmaWNhdGVUcnVzdFBhdGgoJGNlcnRpZmljYXRlcykpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEVjZGFhVHlwZShhcnJheSAkYXR0ZXN0YXRpb24pOiBBdHRlc3RhdGlvblN0YXRlbWVudAogICAgewogICAgICAgICRlY2RhYUtleUlkID0gJGF0dGVzdGF0aW9uWydhdHRTdG10J11bJ2VjZGFhS2V5SWQnXTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkZWNkYWFLZXlJZCwgJ1RoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgdmFsdWUgImVjZGFhS2V5SWQiIGlzIGludmFsaWQuJyk7CgogICAgICAgIHJldHVybiBBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlRWNkYWEoJGF0dGVzdGF0aW9uWydmbXQnXSwgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sIG5ldyBFY2RhYUtleUlkVHJ1c3RQYXRoKCRhdHRlc3RhdGlvblsnZWNkYWFLZXlJZCddKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBsb2FkRW1wdHlUeXBlKGFycmF5ICRhdHRlc3RhdGlvbik6IEF0dGVzdGF0aW9uU3RhdGVtZW50CiAgICB7CiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVTZWxmKCRhdHRlc3RhdGlvblsnZm10J10sICRhdHRlc3RhdGlvblsnYXR0U3RtdCddLCBuZXcgRW1wdHlUcnVzdFBhdGgoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0NlcnRpZmljYXRlKHN0cmluZyAkYXR0ZXN0bkNlcnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRhdHRlc3RuQ2VydCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRwYXJzZWQsICdJbnZhbGlkIGNlcnRpZmljYXRlJyk7CgogICAgICAgIC8vQ2hlY2sgdmVyc2lvbgogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3ZlcnNpb24nXSkgfHwgMiAhPT0gJHBhcnNlZFsndmVyc2lvbiddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSB2ZXJzaW9uJyk7CgogICAgICAgIC8vQ2hlY2sgc3ViamVjdCBmaWVsZAogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ25hbWUnXSkgfHwgZmFsc2UgPT09IG1iX3N0cnBvcygkcGFyc2VkWyduYW1lJ10sICcvT1U9QXV0aGVudGljYXRvciBBdHRlc3RhdGlvbicpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBuYW1lLiBUaGUgU3ViamVjdCBPcmdhbml6YXRpb24gVW5pdCBtdXN0IGJlICJBdXRoZW50aWNhdG9yIEF0dGVzdGF0aW9uIicpOwoKICAgICAgICAvL0NoZWNrIGV4dGVuc2lvbnMKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ10pIHx8ICFpc19hcnJheSgkcGFyc2VkWydleHRlbnNpb25zJ10pLCAnQ2VydGlmaWNhdGUgZXh0ZW5zaW9ucyBhcmUgbWlzc2luZycpOwoKICAgICAgICAvL0NoZWNrIGNlcnRpZmljYXRlIGlzIG5vdCBhIENBIGNlcnQKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ11bJ2Jhc2ljQ29uc3RyYWludHMnXSkgfHwgJ0NBOkZBTFNFJyAhPT0gJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydiYXNpY0NvbnN0cmFpbnRzJ10sICdUaGUgQmFzaWMgQ29uc3RyYWludHMgZXh0ZW5zaW9uIG11c3QgaGF2ZSB0aGUgQ0EgY29tcG9uZW50IHNldCB0byBmYWxzZScpOwoKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgYXZhaWxhYmxlJyk7CgogICAgICAgIC8vIGlkLWZpZG8tZ2VuLWNlLWFhZ3VpZCBPSUQgY2hlY2sKICAgICAgICBBc3NlcnRpb246OmZhbHNlKGluX2FycmF5KCcxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCcsICRwYXJzZWRbJ2V4dGVuc2lvbnMnXSwgdHJ1ZSkgJiYgIWhhc2hfZXF1YWxzKCRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRBYWd1aWQoKS0+Z2V0Qnl0ZXMoKSwgJHBhcnNlZFsnZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCddKSwgJ1RoZSB2YWx1ZSBvZiB0aGUgImFhZ3VpZCIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY2VydGlmaWNhdGUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoQ2VydGlmaWNhdGUoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhLCBDZXJ0aWZpY2F0ZVRydXN0UGF0aCAkdHJ1c3RQYXRoKTogYm9vbAogICAgewogICAgICAgICRjZXJ0aWZpY2F0ZXMgPSAkdHJ1c3RQYXRoLT5nZXRDZXJ0aWZpY2F0ZXMoKTsKCiAgICAgICAgLy8gQ2hlY2sgbGVhZiBjZXJ0aWZpY2F0ZQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlKCRjZXJ0aWZpY2F0ZXNbMF0sICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgIC8vIEdldCB0aGUgQ09TRSBhbGdvcml0aG0gaWRlbnRpZmllciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgT3BlblNTTCBvbmUKICAgICAgICAkY29zZUFsZ29yaXRobUlkZW50aWZpZXIgPSAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyk7CiAgICAgICAgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyID0gQWxnb3JpdGhtczo6Z2V0T3BlbnNzbEFsZ29yaXRobUZvcigkY29zZUFsZ29yaXRobUlkZW50aWZpZXIpOwoKICAgICAgICAvLyBWZXJpZmljYXRpb24gb2YgdGhlIHNpZ25hdHVyZQogICAgICAgICRzaWduZWREYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJHJlc3VsdCA9IG9wZW5zc2xfdmVyaWZ5KCRzaWduZWREYXRhLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnc2lnJyksICRjZXJ0aWZpY2F0ZXNbMF0sICRvcGVuc3NsQWxnb3JpdGhtSWRlbnRpZmllcik7CgogICAgICAgIHJldHVybiAxID09PSAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2Vzc1dpdGhFQ0RBQSgpOiBib29sCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ0VDREFBIG5vdCBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoU2VsZkF0dGVzdGF0aW9uKHN0cmluZyAkY2xpZW50RGF0YUpTT05IYXNoLCBBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IGJvb2wKICAgIHsKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgYXZhaWxhYmxlJyk7CiAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXkgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkY3JlZGVudGlhbFB1YmxpY0tleSwgJ05vIGNyZWRlbnRpYWwgcHVibGljIGtleSBhdmFpbGFibGUnKTsKICAgICAgICAkcHVibGljS2V5U3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSgkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgJHB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJHB1YmxpY0tleVN0cmVhbSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRwdWJsaWNLZXlTdHJlYW0tPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBrZXkuIFByZXNlbmNlIG9mIGV4dHJhIGJ5dGVzLicpOwogICAgICAgICRwdWJsaWNLZXlTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJHB1YmxpY0tleSwgTWFwT2JqZWN0OjpjbGFzcywgJ1RoZSBhdHRlc3RlZCBjcmVkZW50aWFsIGRhdGEgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHB1YmxpYyBrZXkuJyk7CiAgICAgICAgJHB1YmxpY0tleSA9ICRwdWJsaWNLZXktPmdldE5vcm1hbGl6ZWREYXRhKGZhbHNlKTsKICAgICAgICAkcHVibGljS2V5ID0gbmV3IEtleSgkcHVibGljS2V5KTsKICAgICAgICBBc3NlcnRpb246OmVxKCRwdWJsaWNLZXktPmFsZygpLCAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyksICdUaGUgYWxnb3JpdGhtIG9mIHRoZSBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQgYW5kIHRoZSBrZXkgYXJlIG5vdCBpZGVudGljYWwuJyk7CgogICAgICAgICRkYXRhVG9WZXJpZnkgPSAkYXV0aGVudGljYXRvckRhdGEtPmdldEF1dGhEYXRhKCkuJGNsaWVudERhdGFKU09OSGFzaDsKICAgICAgICAkYWxnb3JpdGhtID0gJHRoaXMtPmFsZ29yaXRobU1hbmFnZXItPmdldCgoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJykpOwogICAgICAgIGlmICghJGFsZ29yaXRobSBpbnN0YW5jZW9mIFNpZ25hdHVyZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBhbGdvcml0aG0nKTsKICAgICAgICB9CiAgICAgICAgJHNpZ25hdHVyZSA9IENvc2VTaWduYXR1cmVGaXhlcjo6Zml4KCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdzaWcnKSwgJGFsZ29yaXRobSk7CgogICAgICAgIHJldHVybiAkYWxnb3JpdGhtLT52ZXJpZnkoJGRhdGFUb1ZlcmlmeSwgJHB1YmxpY0tleSwgJHNpZ25hdHVyZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestationStatement/TPMAttestationStatementSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50OwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgQ0JPUlxEZWNvZGVyOwp1c2UgQ0JPUlxNYXBPYmplY3Q7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobXM7CnVzZSBDb3NlXEtleVxFYzJLZXk7CnVzZSBDb3NlXEtleVxLZXk7CnVzZSBDb3NlXEtleVxPa3BLZXk7CnVzZSBDb3NlXEtleVxSc2FLZXk7CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfYXJyYXk7CnVzZSBSdW50aW1lRXhjZXB0aW9uOwp1c2UgU2FmZVxEYXRlVGltZUltbXV0YWJsZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIFNhZmVcdW5wYWNrOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRvckRhdGE7CnVzZSBXZWJhdXRoblxDZXJ0aWZpY2F0ZVRvb2xib3g7CnVzZSBXZWJhdXRoblxTdHJpbmdTdHJlYW07CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcQ2VydGlmaWNhdGVUcnVzdFBhdGg7CnVzZSBXZWJhdXRoblxUcnVzdFBhdGhcRWNkYWFLZXlJZFRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIFRQTUF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCBpbXBsZW1lbnRzIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ3RwbSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXR0ZXN0YXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGF0dGVzdGF0aW9uKTogQXR0ZXN0YXRpb25TdGF0ZW1lbnQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb24sICdhdHRTdG10JywgJ0ludmFsaWQgYXR0ZXN0YXRpb24gb2JqZWN0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlOb3RFeGlzdHMoJGF0dGVzdGF0aW9uWydhdHRTdG10J10sICdlY2RhYUtleUlkJywgJ0VDREFBIG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgICBmb3JlYWNoIChbJ3ZlcicsICd2ZXInLCAnc2lnJywgJ2FsZycsICdjZXJ0SW5mbycsICdwdWJBcmVhJ10gYXMgJGtleSkgewogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXSwgJGtleSwgc3ByaW50ZignVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAiJXMiIGlzIG1pc3NpbmcuJywgJGtleSkpOwogICAgICAgIH0KICAgICAgICBBc3NlcnRpb246OmVxKCcyLjAnLCAkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsndmVyJ10sICdJbnZhbGlkIGF0dGVzdGF0aW9uIG9iamVjdCcpOwoKICAgICAgICAkY2VydEluZm8gPSAkdGhpcy0+Y2hlY2tDZXJ0SW5mbygkYXR0ZXN0YXRpb25bJ2F0dFN0bXQnXVsnY2VydEluZm8nXSk7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgnODAxNycsIGJpbjJoZXgoJGNlcnRJbmZvWyd0eXBlJ10pLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKCiAgICAgICAgJHB1YkFyZWEgPSAkdGhpcy0+Y2hlY2tQdWJBcmVhKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwdWJBcmVhJ10pOwogICAgICAgICRwdWJBcmVhQXR0ZXN0ZWROYW1lQWxnID0gbWJfc3Vic3RyKCRjZXJ0SW5mb1snYXR0ZXN0ZWROYW1lJ10sIDAsIDIsICc4Yml0Jyk7CiAgICAgICAgJHB1YkFyZWFIYXNoID0gaGFzaCgkdGhpcy0+Z2V0VFBNSGFzaCgkcHViQXJlYUF0dGVzdGVkTmFtZUFsZyksICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwdWJBcmVhJ10sIHRydWUpOwogICAgICAgICRhdHRlc3RlZE5hbWUgPSAkcHViQXJlYUF0dGVzdGVkTmFtZUFsZy4kcHViQXJlYUhhc2g7CiAgICAgICAgQXNzZXJ0aW9uOjplcSgkYXR0ZXN0ZWROYW1lLCAkY2VydEluZm9bJ2F0dGVzdGVkTmFtZSddLCAnSW52YWxpZCBhdHRlc3RlZCBuYW1lJyk7CgogICAgICAgICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwYXJzZWRDZXJ0SW5mbyddID0gJGNlcnRJbmZvOwogICAgICAgICRhdHRlc3RhdGlvblsnYXR0U3RtdCddWydwYXJzZWRQdWJBcmVhJ10gPSAkcHViQXJlYTsKCiAgICAgICAgJGNlcnRpZmljYXRlcyA9IENlcnRpZmljYXRlVG9vbGJveDo6Y29udmVydEFsbERFUlRvUEVNKCRhdHRlc3RhdGlvblsnYXR0U3RtdCddWyd4NWMnXSk7CiAgICAgICAgQXNzZXJ0aW9uOjptaW5Db3VudCgkY2VydGlmaWNhdGVzLCAxLCAnVGhlIGF0dGVzdGF0aW9uIHN0YXRlbWVudCB2YWx1ZSAieDVjIiBtdXN0IGJlIGEgbGlzdCB3aXRoIGF0IGxlYXN0IG9uZSBjZXJ0aWZpY2F0ZS4nKTsKCiAgICAgICAgcmV0dXJuIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpjcmVhdGVBdHRDQSgKICAgICAgICAgICAgJHRoaXMtPm5hbWUoKSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uWydhdHRTdG10J10sCiAgICAgICAgICAgIG5ldyBDZXJ0aWZpY2F0ZVRydXN0UGF0aCgkY2VydGlmaWNhdGVzKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICRhdHRUb0JlU2lnbmVkID0gJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdXRoRGF0YSgpLiRjbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgJGF0dFRvQmVTaWduZWRIYXNoID0gaGFzaChBbGdvcml0aG1zOjpnZXRIYXNoQWxnb3JpdGhtRm9yKChpbnQpICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdhbGcnKSksICRhdHRUb0JlU2lnbmVkLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmVxKCRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdwYXJzZWRDZXJ0SW5mbycpWydleHRyYURhdGEnXSwgJGF0dFRvQmVTaWduZWRIYXNoLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBoYXNoJyk7CiAgICAgICAgJHRoaXMtPmNoZWNrVW5pcXVlUHVibGljS2V5KAogICAgICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgncGFyc2VkUHViQXJlYScpWyd1bmlxdWUnXSwKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JEYXRhLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCktPmdldENyZWRlbnRpYWxQdWJsaWNLZXkoKQogICAgICAgICk7CgogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCkgaW5zdGFuY2VvZiBDZXJ0aWZpY2F0ZVRydXN0UGF0aDoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cHJvY2Vzc1dpdGhDZXJ0aWZpY2F0ZSgkY2xpZW50RGF0YUpTT05IYXNoLCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsICRhdXRoZW50aWNhdG9yRGF0YSk7CiAgICAgICAgICAgIGNhc2UgJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXRUcnVzdFBhdGgoKSBpbnN0YW5jZW9mIEVjZGFhS2V5SWRUcnVzdFBhdGg6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NXaXRoRUNEQUEoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGF0dGVzdGF0aW9uIHN0YXRlbWVudCcpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrVW5pcXVlUHVibGljS2V5KHN0cmluZyAkdW5pcXVlLCBzdHJpbmcgJGNib3JQdWJsaWNLZXkpOiB2b2lkCiAgICB7CiAgICAgICAgJGNib3JEZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgICAgICAkcHVibGljS2V5ID0gJGNib3JEZWNvZGVyLT5kZWNvZGUobmV3IFN0cmluZ1N0cmVhbSgkY2JvclB1YmxpY0tleSkpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRwdWJsaWNLZXksIE1hcE9iamVjdDo6Y2xhc3MsICdJbnZhbGlkIHB1YmxpYyBrZXknKTsKICAgICAgICAka2V5ID0gbmV3IEtleSgkcHVibGljS2V5LT5nZXROb3JtYWxpemVkRGF0YShmYWxzZSkpOwoKICAgICAgICBzd2l0Y2ggKCRrZXktPnR5cGUoKSkgewogICAgICAgICAgICBjYXNlIEtleTo6VFlQRV9PS1A6CiAgICAgICAgICAgICAgICAkdW5pcXVlRnJvbUtleSA9IChuZXcgT2twS2V5KCRrZXktPmdldERhdGEoKSkpLT54KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBLZXk6OlRZUEVfRUMyOgogICAgICAgICAgICAgICAgJGVjMktleSA9IG5ldyBFYzJLZXkoJGtleS0+Z2V0RGF0YSgpKTsKICAgICAgICAgICAgICAgICR1bmlxdWVGcm9tS2V5ID0gIlx4MDQiLiRlYzJLZXktPngoKS4kZWMyS2V5LT55KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBLZXk6OlRZUEVfUlNBOgogICAgICAgICAgICAgICAgJHVuaXF1ZUZyb21LZXkgPSAobmV3IFJzYUtleSgka2V5LT5nZXREYXRhKCkpKS0+bigpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGtleSB0eXBlLicpOwogICAgICAgIH0KCiAgICAgICAgQXNzZXJ0aW9uOjplcSgkdW5pcXVlLCAkdW5pcXVlRnJvbUtleSwgJ0ludmFsaWQgcHViQXJlYS51bmlxdWUgdmFsdWUnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydEluZm8oc3RyaW5nICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICAkY2VydEluZm8gPSBuZXcgU3RyaW5nU3RyZWFtKCRkYXRhKTsKCiAgICAgICAgJG1hZ2ljID0gJGNlcnRJbmZvLT5yZWFkKDQpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJ2ZmNTQ0MzQ3JywgYmluMmhleCgkbWFnaWMpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBvYmplY3QnKTsKCiAgICAgICAgJHR5cGUgPSAkY2VydEluZm8tPnJlYWQoMik7CgogICAgICAgICRxdWFsaWZpZWRTaWduZXJMZW5ndGggPSB1bnBhY2soJ24nLCAkY2VydEluZm8tPnJlYWQoMikpWzFdOwogICAgICAgICRxdWFsaWZpZWRTaWduZXIgPSAkY2VydEluZm8tPnJlYWQoJHF1YWxpZmllZFNpZ25lckxlbmd0aCk7IC8vSWdub3JlZAoKICAgICAgICAkZXh0cmFEYXRhTGVuZ3RoID0gdW5wYWNrKCduJywgJGNlcnRJbmZvLT5yZWFkKDIpKVsxXTsKICAgICAgICAkZXh0cmFEYXRhID0gJGNlcnRJbmZvLT5yZWFkKCRleHRyYURhdGFMZW5ndGgpOwoKICAgICAgICAkY2xvY2tJbmZvID0gJGNlcnRJbmZvLT5yZWFkKDE3KTsgLy9JZ25vcmUKCiAgICAgICAgJGZpcm13YXJlVmVyc2lvbiA9ICRjZXJ0SW5mby0+cmVhZCg4KTsKCiAgICAgICAgJGF0dGVzdGVkTmFtZUxlbmd0aCA9IHVucGFjaygnbicsICRjZXJ0SW5mby0+cmVhZCgyKSlbMV07CiAgICAgICAgJGF0dGVzdGVkTmFtZSA9ICRjZXJ0SW5mby0+cmVhZCgkYXR0ZXN0ZWROYW1lTGVuZ3RoKTsKCiAgICAgICAgJGF0dGVzdGVkUXVhbGlmaWVkTmFtZUxlbmd0aCA9IHVucGFjaygnbicsICRjZXJ0SW5mby0+cmVhZCgyKSlbMV07CiAgICAgICAgJGF0dGVzdGVkUXVhbGlmaWVkTmFtZSA9ICRjZXJ0SW5mby0+cmVhZCgkYXR0ZXN0ZWRRdWFsaWZpZWROYW1lTGVuZ3RoKTsgLy9JZ25vcmUKICAgICAgICBBc3NlcnRpb246OnRydWUoJGNlcnRJbmZvLT5pc0VPRigpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbi4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgJGNlcnRJbmZvLT5jbG9zZSgpOwoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnbWFnaWMnID0+ICRtYWdpYywKICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLAogICAgICAgICAgICAncXVhbGlmaWVkU2lnbmVyJyA9PiAkcXVhbGlmaWVkU2lnbmVyLAogICAgICAgICAgICAnZXh0cmFEYXRhJyA9PiAkZXh0cmFEYXRhLAogICAgICAgICAgICAnY2xvY2tJbmZvJyA9PiAkY2xvY2tJbmZvLAogICAgICAgICAgICAnZmlybXdhcmVWZXJzaW9uJyA9PiAkZmlybXdhcmVWZXJzaW9uLAogICAgICAgICAgICAnYXR0ZXN0ZWROYW1lJyA9PiAkYXR0ZXN0ZWROYW1lLAogICAgICAgICAgICAnYXR0ZXN0ZWRRdWFsaWZpZWROYW1lJyA9PiAkYXR0ZXN0ZWRRdWFsaWZpZWROYW1lLAogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1B1YkFyZWEoc3RyaW5nICRkYXRhKTogYXJyYXkKICAgIHsKICAgICAgICAkcHViQXJlYSA9IG5ldyBTdHJpbmdTdHJlYW0oJGRhdGEpOwoKICAgICAgICAkdHlwZSA9ICRwdWJBcmVhLT5yZWFkKDIpOwoKICAgICAgICAkbmFtZUFsZyA9ICRwdWJBcmVhLT5yZWFkKDIpOwoKICAgICAgICAkb2JqZWN0QXR0cmlidXRlcyA9ICRwdWJBcmVhLT5yZWFkKDQpOwoKICAgICAgICAkYXV0aFBvbGljeUxlbmd0aCA9IHVucGFjaygnbicsICRwdWJBcmVhLT5yZWFkKDIpKVsxXTsKICAgICAgICAkYXV0aFBvbGljeSA9ICRwdWJBcmVhLT5yZWFkKCRhdXRoUG9saWN5TGVuZ3RoKTsKCiAgICAgICAgJHBhcmFtZXRlcnMgPSAkdGhpcy0+Z2V0UGFyYW1ldGVycygkdHlwZSwgJHB1YkFyZWEpOwoKICAgICAgICAkdW5pcXVlTGVuZ3RoID0gdW5wYWNrKCduJywgJHB1YkFyZWEtPnJlYWQoMikpWzFdOwogICAgICAgICR1bmlxdWUgPSAkcHViQXJlYS0+cmVhZCgkdW5pcXVlTGVuZ3RoKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHB1YkFyZWEtPmlzRU9GKCksICdJbnZhbGlkIHB1YmxpYyBhcmVhLiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAkcHViQXJlYS0+Y2xvc2UoKTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLAogICAgICAgICAgICAnbmFtZUFsZycgPT4gJG5hbWVBbGcsCiAgICAgICAgICAgICdvYmplY3RBdHRyaWJ1dGVzJyA9PiAkb2JqZWN0QXR0cmlidXRlcywKICAgICAgICAgICAgJ2F1dGhQb2xpY3knID0+ICRhdXRoUG9saWN5LAogICAgICAgICAgICAncGFyYW1ldGVycycgPT4gJHBhcmFtZXRlcnMsCiAgICAgICAgICAgICd1bmlxdWUnID0+ICR1bmlxdWUsCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFBhcmFtZXRlcnMoc3RyaW5nICR0eXBlLCBTdHJpbmdTdHJlYW0gJHN0cmVhbSk6IGFycmF5CiAgICB7CiAgICAgICAgc3dpdGNoIChiaW4yaGV4KCR0eXBlKSkgewogICAgICAgICAgICBjYXNlICcwMDAxJzoKICAgICAgICAgICAgY2FzZSAnMDAxNCc6CiAgICAgICAgICAgIGNhc2UgJzAwMTYnOgogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnc3ltbWV0cmljJyA9PiAkc3RyZWFtLT5yZWFkKDIpLAogICAgICAgICAgICAgICAgICAgICdzY2hlbWUnID0+ICRzdHJlYW0tPnJlYWQoMiksCiAgICAgICAgICAgICAgICAgICAgJ2tleUJpdHMnID0+IHVucGFjaygnbicsICRzdHJlYW0tPnJlYWQoMikpWzFdLAogICAgICAgICAgICAgICAgICAgICdleHBvbmVudCcgPT4gJHRoaXMtPmdldEV4cG9uZW50KCRzdHJlYW0tPnJlYWQoNCkpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgY2FzZSAnMDAxOCc6CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdzeW1tZXRyaWMnID0+ICRzdHJlYW0tPnJlYWQoMiksCiAgICAgICAgICAgICAgICAgICAgJ3NjaGVtZScgPT4gJHN0cmVhbS0+cmVhZCgyKSwKICAgICAgICAgICAgICAgICAgICAnY3VydmVJZCcgPT4gJHN0cmVhbS0+cmVhZCgyKSwKICAgICAgICAgICAgICAgICAgICAna2RmJyA9PiAkc3RyZWFtLT5yZWFkKDIpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIHR5cGUnKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRFeHBvbmVudChzdHJpbmcgJGV4cG9uZW50KTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICcwMDAwMDAwMCcgPT09IGJpbjJoZXgoJGV4cG9uZW50KSA/IEJhc2U2NFVybDo6ZGVjb2RlKCdBUUFCJykgOiAkZXhwb25lbnQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRUUE1IYXNoKHN0cmluZyAkbmFtZUFsZyk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAoYmluMmhleCgkbmFtZUFsZykpIHsKICAgICAgICAgICAgY2FzZSAnMDAwNCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3NoYTEnOyAvLzogIlRQTV9BTEdfU0hBMSIsCiAgICAgICAgICAgIGNhc2UgJzAwMGInOgogICAgICAgICAgICAgICAgcmV0dXJuICdzaGEyNTYnOyAvLzogIlRQTV9BTEdfU0hBMjU2IiwKICAgICAgICAgICAgY2FzZSAnMDAwYyc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3NoYTM4NCc7IC8vOiAiVFBNX0FMR19TSEEzODQiLAogICAgICAgICAgICBjYXNlICcwMDBkJzoKICAgICAgICAgICAgICAgIHJldHVybiAnc2hhNTEyJzsgLy86ICJUUE1fQUxHX1NIQTUxMiIsCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobScpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoQ2VydGlmaWNhdGUoc3RyaW5nICRjbGllbnREYXRhSlNPTkhhc2gsIEF0dGVzdGF0aW9uU3RhdGVtZW50ICRhdHRlc3RhdGlvblN0YXRlbWVudCwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhKTogYm9vbAogICAgewogICAgICAgICR0cnVzdFBhdGggPSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFRydXN0UGF0aCgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCR0cnVzdFBhdGgsIENlcnRpZmljYXRlVHJ1c3RQYXRoOjpjbGFzcywgJ0ludmFsaWQgdHJ1c3QgcGF0aCcpOwoKICAgICAgICAkY2VydGlmaWNhdGVzID0gJHRydXN0UGF0aC0+Z2V0Q2VydGlmaWNhdGVzKCk7CgogICAgICAgIC8vIENoZWNrIGNlcnRpZmljYXRlIENBIGNoYWluIGFuZCByZXR1cm5zIHRoZSBBdHRlc3RhdGlvbiBDZXJ0aWZpY2F0ZQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlKCRjZXJ0aWZpY2F0ZXNbMF0sICRhdXRoZW50aWNhdG9yRGF0YSk7CgogICAgICAgIC8vIEdldCB0aGUgQ09TRSBhbGdvcml0aG0gaWRlbnRpZmllciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgT3BlblNTTCBvbmUKICAgICAgICAkY29zZUFsZ29yaXRobUlkZW50aWZpZXIgPSAoaW50KSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldCgnYWxnJyk7CiAgICAgICAgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyID0gQWxnb3JpdGhtczo6Z2V0T3BlbnNzbEFsZ29yaXRobUZvcigkY29zZUFsZ29yaXRobUlkZW50aWZpZXIpOwoKICAgICAgICAkcmVzdWx0ID0gb3BlbnNzbF92ZXJpZnkoJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXQoJ2NlcnRJbmZvJyksICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0KCdzaWcnKSwgJGNlcnRpZmljYXRlc1swXSwgJG9wZW5zc2xBbGdvcml0aG1JZGVudGlmaWVyKTsKCiAgICAgICAgcmV0dXJuIDEgPT09ICRyZXN1bHQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0NlcnRpZmljYXRlKHN0cmluZyAkYXR0ZXN0bkNlcnQsIEF1dGhlbnRpY2F0b3JEYXRhICRhdXRoZW50aWNhdG9yRGF0YSk6IHZvaWQKICAgIHsKICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRhdHRlc3RuQ2VydCk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRwYXJzZWQsICdJbnZhbGlkIGNlcnRpZmljYXRlJyk7CgogICAgICAgIC8vQ2hlY2sgdmVyc2lvbgogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3ZlcnNpb24nXSkgfHwgMiAhPT0gJHBhcnNlZFsndmVyc2lvbiddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSB2ZXJzaW9uJyk7CgogICAgICAgIC8vQ2hlY2sgc3ViamVjdCBmaWVsZCBpcyBlbXB0eQogICAgICAgIEFzc2VydGlvbjo6ZmFsc2UoIWlzc2V0KCRwYXJzZWRbJ3N1YmplY3QnXSkgfHwgIWlzX2FycmF5KCRwYXJzZWRbJ3N1YmplY3QnXSkgfHwgMCAhPT0gY291bnQoJHBhcnNlZFsnc3ViamVjdCddKSwgJ0ludmFsaWQgY2VydGlmaWNhdGUgbmFtZS4gVGhlIFN1YmplY3Qgc2hvdWxkIGJlIGVtcHR5Jyk7CgogICAgICAgIC8vIENoZWNrIHBlcmlvZCBvZiB2YWxpZGl0eQogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZEZyb21fdGltZV90JywgJ0ludmFsaWQgY2VydGlmaWNhdGUgc3RhcnQgZGF0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBzdGFydCBkYXRlLicpOwogICAgICAgICRzdGFydERhdGUgPSAobmV3IERhdGVUaW1lSW1tdXRhYmxlKCkpLT5zZXRUaW1lc3RhbXAoJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddKTsKICAgICAgICBBc3NlcnRpb246OnRydWUoJHN0YXJ0RGF0ZSA8IG5ldyBEYXRlVGltZUltbXV0YWJsZSgpLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBzdGFydCBkYXRlLicpOwoKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAndmFsaWRUb190aW1lX3QnLCAnSW52YWxpZCBjZXJ0aWZpY2F0ZSBlbmQgZGF0ZS4nKTsKICAgICAgICBBc3NlcnRpb246OmludGVnZXIoJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSwgJ0ludmFsaWQgY2VydGlmaWNhdGUgZW5kIGRhdGUuJyk7CiAgICAgICAgJGVuZERhdGUgPSAobmV3IERhdGVUaW1lSW1tdXRhYmxlKCkpLT5zZXRUaW1lc3RhbXAoJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSk7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRlbmREYXRlID4gbmV3IERhdGVUaW1lSW1tdXRhYmxlKCksICdJbnZhbGlkIGNlcnRpZmljYXRlIGVuZCBkYXRlLicpOwoKICAgICAgICAvL0NoZWNrIGV4dGVuc2lvbnMKICAgICAgICBBc3NlcnRpb246OmZhbHNlKCFpc3NldCgkcGFyc2VkWydleHRlbnNpb25zJ10pIHx8ICFpc19hcnJheSgkcGFyc2VkWydleHRlbnNpb25zJ10pLCAnQ2VydGlmaWNhdGUgZXh0ZW5zaW9ucyBhcmUgbWlzc2luZycpOwoKICAgICAgICAvL0NoZWNrIHN1YmplY3RBbHROYW1lCiAgICAgICAgQXNzZXJ0aW9uOjpmYWxzZSghaXNzZXQoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydzdWJqZWN0QWx0TmFtZSddKSwgJ1RoZSAic3ViamVjdEFsdE5hbWUiIGlzIG1pc3NpbmcnKTsKCiAgICAgICAgLy9DaGVjayBleHRlbmRlZEtleVVzYWdlCiAgICAgICAgQXNzZXJ0aW9uOjpmYWxzZSghaXNzZXQoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydleHRlbmRlZEtleVVzYWdlJ10pLCAnVGhlICJzdWJqZWN0QWx0TmFtZSIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6ZXEoJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydleHRlbmRlZEtleVVzYWdlJ10sICcyLjIzLjEzMy44LjMnLCAnVGhlICJleHRlbmRlZEtleVVzYWdlIiBpcyBpbnZhbGlkJyk7CgogICAgICAgIC8vIGlkLWZpZG8tZ2VuLWNlLWFhZ3VpZCBPSUQgY2hlY2sKICAgICAgICBBc3NlcnRpb246OmZhbHNlKGluX2FycmF5KCcxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCcsICRwYXJzZWRbJ2V4dGVuc2lvbnMnXSwgdHJ1ZSkgJiYgIWhhc2hfZXF1YWxzKCRhdXRoZW50aWNhdG9yRGF0YS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpLT5nZXRBYWd1aWQoKS0+Z2V0Qnl0ZXMoKSwgJHBhcnNlZFsnZXh0ZW5zaW9ucyddWycxLjMuNi4xLjQuMS40NTcyNC4xLjEuNCddKSwgJ1RoZSB2YWx1ZSBvZiB0aGUgImFhZ3VpZCIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY2VydGlmaWNhdGUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NXaXRoRUNEQUEoKTogYm9vbAogICAgewogICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdFQ0RBQSBub3Qgc3VwcG9ydGVkJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AttestedCredentialData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgUmFtc2V5XFV1aWRcVXVpZDsKdXNlIFJhbXNleVxVdWlkXFV1aWRJbnRlcmZhY2U7CnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI3NlYy1hdHRlc3RlZC1jcmVkZW50aWFsLWRhdGEKICovCmNsYXNzIEF0dGVzdGVkQ3JlZGVudGlhbERhdGEgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBVdWlkSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGFhZ3VpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNyZWRlbnRpYWxJZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkY3JlZGVudGlhbFB1YmxpY0tleTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoVXVpZEludGVyZmFjZSAkYWFndWlkLCBzdHJpbmcgJGNyZWRlbnRpYWxJZCwgP3N0cmluZyAkY3JlZGVudGlhbFB1YmxpY0tleSkKICAgIHsKICAgICAgICAkdGhpcy0+YWFndWlkID0gJGFhZ3VpZDsKICAgICAgICAkdGhpcy0+Y3JlZGVudGlhbElkID0gJGNyZWRlbnRpYWxJZDsKICAgICAgICAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleSA9ICRjcmVkZW50aWFsUHVibGljS2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWd1aWQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBYWd1aWQoVXVpZEludGVyZmFjZSAkYWFndWlkKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5hYWd1aWQgPSAkYWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVkZW50aWFsSWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVkZW50aWFsSWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENyZWRlbnRpYWxQdWJsaWNLZXkoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnYWFndWlkJywgJ0ludmFsaWQgaW5wdXQuICJhYWd1aWQiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdjcmVkZW50aWFsSWQnLCAnSW52YWxpZCBpbnB1dC4gImNyZWRlbnRpYWxJZCIgaXMgbWlzc2luZy4nKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSAzNiA9PT0gbWJfc3RybGVuKCRqc29uWydhYWd1aWQnXSwgJzhiaXQnKToKICAgICAgICAgICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbVN0cmluZygkanNvblsnYWFndWlkJ10pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIEtlcHQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZm9ybWF0CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2FhZ3VpZCddLCB0cnVlKTsKICAgICAgICAgICAgICAgICR1dWlkID0gVXVpZDo6ZnJvbUJ5dGVzKCRkZWNvZGVkKTsKICAgICAgICB9CiAgICAgICAgJGNyZWRlbnRpYWxJZCA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2NyZWRlbnRpYWxJZCddLCB0cnVlKTsKCiAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXkgPSBudWxsOwogICAgICAgIGlmIChpc3NldCgkanNvblsnY3JlZGVudGlhbFB1YmxpY0tleSddKSkgewogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9IGJhc2U2NF9kZWNvZGUoJGpzb25bJ2NyZWRlbnRpYWxQdWJsaWNLZXknXSwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICR1dWlkLAogICAgICAgICAgICAkY3JlZGVudGlhbElkLAogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gWwogICAgICAgICAgICAnYWFndWlkJyA9PiAkdGhpcy0+YWFndWlkLT50b1N0cmluZygpLAogICAgICAgICAgICAnY3JlZGVudGlhbElkJyA9PiBiYXNlNjRfZW5jb2RlKCR0aGlzLT5jcmVkZW50aWFsSWQpLAogICAgICAgIF07CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5jcmVkZW50aWFsUHVibGljS2V5KSB7CiAgICAgICAgICAgICRyZXN1bHRbJ2NyZWRlbnRpYWxQdWJsaWNLZXknXSA9IGJhc2U2NF9lbmNvZGUoJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtension.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKY2xhc3MgQXV0aGVudGljYXRpb25FeHRlbnNpb24gaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgbWl4ZWQKICAgICAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientInputs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIENvdW50YWJsZTsKdXNlIEl0ZXJhdG9yOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKY2xhc3MgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25bXQogICAgICovCiAgICBwcml2YXRlICRleHRlbnNpb25zID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChBdXRoZW50aWNhdGlvbkV4dGVuc2lvbiAkZXh0ZW5zaW9uKTogdm9pZAogICAgewogICAgICAgICR0aGlzLT5leHRlbnNpb25zWyRleHRlbnNpb24tPm5hbWUoKV0gPSAkZXh0ZW5zaW9uOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmCiAgICB7CiAgICAgICAgJG9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGpzb24gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJG9iamVjdC0+YWRkKG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbigkaywgJHYpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoc3RyaW5nICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmV4dGVuc2lvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KQogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkdGhpcy0+aGFzKCRrZXkpLCBzcHJpbnRmKCdUaGUgZXh0ZW5zaW9uIHdpdGgga2V5ICIlcyIgaXMgbm90IGF2YWlsYWJsZScsICRrZXkpKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRvYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICB9LCAkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPHN0cmluZywgQXV0aGVudGljYXRpb25FeHRlbnNpb24+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KGludCAkbW9kZSA9IENPVU5UX05PUk1BTCk6IGludAogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZXh0ZW5zaW9ucywgJG1vZGUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientOutputs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXJyYXlJdGVyYXRvcjsKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIENvdW50YWJsZTsKdXNlIEl0ZXJhdG9yOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKCmNsYXNzIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlCnsKICAgIC8qKgogICAgICogQHZhciBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbltdCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRleHRlbnNpb24pOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbnNbJGV4dGVuc2lvbi0+bmFtZSgpXSA9ICRleHRlbnNpb247CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICAkb2JqZWN0ID0gbmV3IHNlbGYoKTsKICAgICAgICBmb3JlYWNoICgkanNvbiBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkb2JqZWN0LT5hZGQobmV3IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uKCRrLCAkdikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdGhpcy0+ZXh0ZW5zaW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCR0aGlzLT5oYXMoJGtleSksIHNwcmludGYoJ1RoZSBleHRlbnNpb24gd2l0aCBrZXkgIiVzIiBpcyBub3QgYXZhaWxhYmxlJywgJGtleSkpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmV4dGVuc2lvbnNbJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoQXV0aGVudGljYXRpb25FeHRlbnNpb24gJG9iamVjdCkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT5leHRlbnNpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSXRlcmF0b3I8c3RyaW5nLCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5leHRlbnNpb25zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoaW50ICRtb2RlID0gQ09VTlRfTk9STUFMKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5leHRlbnNpb25zLCAkbW9kZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientOutputsLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQ0JPUlxDQk9ST2JqZWN0Owp1c2UgQ0JPUlxNYXBPYmplY3Q7CgphYnN0cmFjdCBjbGFzcyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzTG9hZGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZChDQk9ST2JqZWN0ICRvYmplY3QpOiBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJG9iamVjdCwgTWFwT2JqZWN0OjpjbGFzcywgJ0ludmFsaWQgZXh0ZW5zaW9uIG9iamVjdCcpOwogICAgICAgICRkYXRhID0gJG9iamVjdC0+Z2V0Tm9ybWFsaXplZERhdGEoKTsKICAgICAgICAkZXh0ZW5zaW9ucyA9IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzKCk7CiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGtleSwgJ0ludmFsaWQgZXh0ZW5zaW9uIGtleScpOwogICAgICAgICAgICAkZXh0ZW5zaW9ucy0+YWRkKG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbigka2V5LCAkdmFsdWUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZXh0ZW5zaW9uczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCmludGVyZmFjZSBFeHRlbnNpb25PdXRwdXRDaGVja2VyCnsKICAgIC8qKgogICAgICogQHRocm93cyBFeHRlbnNpb25PdXRwdXRFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRpbnB1dHMsIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgJG91dHB1dHMpOiB2b2lkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputCheckerHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCmNsYXNzIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCnsKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25PdXRwdXRDaGVja2VyW10KICAgICAqLwogICAgcHJpdmF0ZSAkY2hlY2tlcnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKEV4dGVuc2lvbk91dHB1dENoZWNrZXIgJGNoZWNrZXIpOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrZXJzW10gPSAkY2hlY2tlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgRXh0ZW5zaW9uT3V0cHV0RXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkaW5wdXRzLCBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICRvdXRwdXRzKTogdm9pZAogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jaGVja2VycyBhcyAkY2hlY2tlcikgewogICAgICAgICAgICAkY2hlY2tlci0+Y2hlY2soJGlucHV0cywgJG91dHB1dHMpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticationExtensions/ExtensionOutputError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uczsKCnVzZSBFeGNlcHRpb247CnVzZSBUaHJvd2FibGU7CgpjbGFzcyBFeHRlbnNpb25PdXRwdXRFcnJvciBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb24KICAgICAqLwogICAgcHJpdmF0ZSAkYXV0aGVudGljYXRpb25FeHRlbnNpb247CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbiwgc3RyaW5nICRtZXNzYWdlID0gJycsIGludCAkY29kZSA9IDAsIFRocm93YWJsZSAkcHJldmlvdXMgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwogICAgICAgICR0aGlzLT5hdXRoZW50aWNhdGlvbkV4dGVuc2lvbiA9ICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRpb25FeHRlbnNpb24oKTogQXV0aGVudGljYXRpb25FeHRlbnNpb24KICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAssertionResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIFNhZmVcYmFzZTY0X2RlY29kZTsKCi8qKgogKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jYXV0aGVudGljYXRvcmFzc2VydGlvbnJlc3BvbnNlCiAqLwpjbGFzcyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgZXh0ZW5kcyBBdXRoZW50aWNhdG9yUmVzcG9uc2UKewogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JEYXRhCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dGhlbnRpY2F0b3JEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc2lnbmF0dXJlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICR1c2VySGFuZGxlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb2xsZWN0ZWRDbGllbnREYXRhICRjbGllbnREYXRhSlNPTiwgQXV0aGVudGljYXRvckRhdGEgJGF1dGhlbnRpY2F0b3JEYXRhLCBzdHJpbmcgJHNpZ25hdHVyZSwgP3N0cmluZyAkdXNlckhhbmRsZSkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRjbGllbnREYXRhSlNPTik7CiAgICAgICAgJHRoaXMtPmF1dGhlbnRpY2F0b3JEYXRhID0gJGF1dGhlbnRpY2F0b3JEYXRhOwogICAgICAgICR0aGlzLT5zaWduYXR1cmUgPSAkc2lnbmF0dXJlOwogICAgICAgICR0aGlzLT51c2VySGFuZGxlID0gJHVzZXJIYW5kbGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0b3JEYXRhKCk6IEF1dGhlbnRpY2F0b3JEYXRhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yRGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VySGFuZGxlKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPnVzZXJIYW5kbGUgfHwgJycgPT09ICR0aGlzLT51c2VySGFuZGxlKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dXNlckhhbmRsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCR0aGlzLT51c2VySGFuZGxlLCB0cnVlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAssertionResponseValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXERlY29kZXI7CnVzZSBDQk9SXE90aGVyT2JqZWN0XE90aGVyT2JqZWN0TWFuYWdlcjsKdXNlIENCT1JcVGFnXFRhZ09iamVjdE1hbmFnZXI7CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKdXNlIENvc2VcS2V5XEtleTsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gaW5fYXJyYXk7CnVzZSBmdW5jdGlvbiBpc19zdHJpbmc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIGZ1bmN0aW9uIFNhZmVccGFyc2VfdXJsOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ291bnRlclxDb3VudGVyQ2hlY2tlcjsKdXNlIFdlYmF1dGhuXENvdW50ZXJcVGhyb3dFeGNlcHRpb25JZkludmFsaWQ7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcVG9rZW5CaW5kaW5nSGFuZGxlcjsKdXNlIFdlYmF1dGhuXFV0aWxcQ29zZVNpZ25hdHVyZUZpeGVyOwoKY2xhc3MgQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlVmFsaWRhdG9yCnsKICAgIC8qKgogICAgICogQHZhciBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeQogICAgICovCiAgICBwcml2YXRlICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgRGVjb2RlcgogICAgICovCiAgICBwcml2YXRlICRkZWNvZGVyOwoKICAgIC8qKgogICAgICogQHZhciBUb2tlbkJpbmRpbmdIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHRva2VuQmluZGluZ0hhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBNYW5hZ2VyfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtTWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgQ291bnRlckNoZWNrZXIKICAgICAqLwogICAgcHJpdmF0ZSAkY291bnRlckNoZWNrZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGxvZ2dlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5LCBUb2tlbkJpbmRpbmdIYW5kbGVyICR0b2tlbkJpbmRpbmdIYW5kbGVyLCBFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIsIE1hbmFnZXIgJGFsZ29yaXRobU1hbmFnZXIsID9Db3VudGVyQ2hlY2tlciAkY291bnRlckNoZWNrZXIgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRjb3VudGVyQ2hlY2tlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJjb3VudGVyQ2hlY2tlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRDb3VudGVyQ2hlY2tlciIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkgPSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnk7CiAgICAgICAgJHRoaXMtPmRlY29kZXIgPSBuZXcgRGVjb2RlcihuZXcgVGFnT2JqZWN0TWFuYWdlcigpLCBuZXcgT3RoZXJPYmplY3RNYW5hZ2VyKCkpOwogICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmdIYW5kbGVyID0gJHRva2VuQmluZGluZ0hhbmRsZXI7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwogICAgICAgICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyID0gJGFsZ29yaXRobU1hbmFnZXI7CiAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyID0gJGNvdW50ZXJDaGVja2VyID8/IG5ldyBUaHJvd0V4Y2VwdGlvbklmSW52YWxpZCgpOwogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyID8/IG5ldyBOdWxsTG9nZ2VyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jdmVyaWZ5aW5nLWFzc2VydGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soc3RyaW5nICRjcmVkZW50aWFsSWQsIEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgP3N0cmluZyAkdXNlckhhbmRsZSwgYXJyYXkgJHNlY3VyZWRSZWx5aW5nUGFydHlJZCA9IFtdKTogUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmluZm8oJ0NoZWNraW5nIHRoZSBhdXRoZW50aWNhdG9yIGFzc2VydGlvbiByZXNwb25zZScsIFsKICAgICAgICAgICAgICAgICdjcmVkZW50aWFsSWQnID0+ICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgICAgICAnYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlJyA9PiAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLAogICAgICAgICAgICAgICAgJ3B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucycgPT4gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywKICAgICAgICAgICAgICAgICdob3N0JyA9PiAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwKICAgICAgICAgICAgICAgICd1c2VySGFuZGxlJyA9PiAkdXNlckhhbmRsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xICovCiAgICAgICAgICAgIGlmICgwICE9PSBjb3VudCgkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRBbGxvd0NyZWRlbnRpYWxzKCkpKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmlzQ3JlZGVudGlhbElkQWxsb3dlZCgkY3JlZGVudGlhbElkLCAkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRBbGxvd0NyZWRlbnRpYWxzKCkpLCAnVGhlIGNyZWRlbnRpYWwgSUQgaXMgbm90IGFsbG93ZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4yICovCiAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlID0gJHRoaXMtPnB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5LT5maW5kT25lQnlDcmVkZW50aWFsSWQoJGNyZWRlbnRpYWxJZCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgJ1RoZSBjcmVkZW50aWFsIElEIGlzIGludmFsaWQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMyAqLwogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgICAgICRjcmVkZW50aWFsVXNlckhhbmRsZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5nZXRVc2VySGFuZGxlKCk7CiAgICAgICAgICAgICRyZXNwb25zZVVzZXJIYW5kbGUgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRVc2VySGFuZGxlKCk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMiBVc2VyIEhhbmRsZSovCiAgICAgICAgICAgIGlmIChudWxsICE9PSAkdXNlckhhbmRsZSkgeyAvL0lmIHRoZSB1c2VyIHdhcyBpZGVudGlmaWVkIGJlZm9yZSB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnkgd2FzIGluaXRpYXRlZCwKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJGNyZWRlbnRpYWxVc2VySGFuZGxlLCAkdXNlckhhbmRsZSwgJ0ludmFsaWQgdXNlciBoYW5kbGUnKTsKICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSAkcmVzcG9uc2VVc2VySGFuZGxlICYmICcnICE9PSAkcmVzcG9uc2VVc2VySGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjplcSgkY3JlZGVudGlhbFVzZXJIYW5kbGUsICRyZXNwb25zZVVzZXJIYW5kbGUsICdJbnZhbGlkIHVzZXIgaGFuZGxlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRyZXNwb25zZVVzZXJIYW5kbGUsICdVc2VyIGhhbmRsZSBpcyBtYW5kYXRvcnknKTsKICAgICAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJGNyZWRlbnRpYWxVc2VySGFuZGxlLCAkcmVzcG9uc2VVc2VySGFuZGxlLCAnSW52YWxpZCB1c2VyIGhhbmRsZScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRDcmVkZW50aWFsUHVibGljS2V5KCk7CiAgICAgICAgICAgICRpc1UyRiA9IFUyRlB1YmxpY0tleTo6aXNVMkZLZXkoJGNyZWRlbnRpYWxQdWJsaWNLZXkpOwogICAgICAgICAgICBpZiAoJGlzVTJGKSB7CiAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9IFUyRlB1YmxpY0tleTo6Y3JlYXRlQ09TRUtleSgkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQXNzZXJ0aW9uOjpub3ROdWxsKCRjcmVkZW50aWFsUHVibGljS2V5LCAnTm8gcHVibGljIGtleSBhdmFpbGFibGUuJyk7CiAgICAgICAgICAgICRzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKCRjcmVkZW50aWFsUHVibGljS2V5KTsKICAgICAgICAgICAgJGNyZWRlbnRpYWxQdWJsaWNLZXlTdHJlYW0gPSAkdGhpcy0+ZGVjb2Rlci0+ZGVjb2RlKCRzdHJlYW0pOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHN0cmVhbS0+aXNFT0YoKSwgJ0ludmFsaWQga2V5LiBQcmVzZW5jZSBvZiBleHRyYSBieXRlcy4nKTsKICAgICAgICAgICAgJHN0cmVhbS0+Y2xvc2UoKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi40ICovCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi41ICovCiAgICAgICAgICAgIC8vTm90aGluZyB0byBkby4gVXNlIG9mIG9iamVjdHMgZGlyZWN0bHkKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi42ICovCiAgICAgICAgICAgICRDID0gJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0Q2xpZW50RGF0YUpTT04oKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi43ICovCiAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEoJ3dlYmF1dGhuLmdldCcsICRDLT5nZXRUeXBlKCksICdUaGUgY2xpZW50IGRhdGEgdHlwZSBpcyBub3QgIndlYmF1dGhuLmdldCIuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuOCAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoaGFzaF9lcXVhbHMoJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0Q2hhbGxlbmdlKCksICRDLT5nZXRDaGFsbGVuZ2UoKSksICdJbnZhbGlkIGNoYWxsZW5nZS4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi45ICovCiAgICAgICAgICAgICRycElkID0gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0UnBJZCgpID8/ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpOwogICAgICAgICAgICAkZmFjZXRJZCA9ICR0aGlzLT5nZXRGYWNldElkKCRycElkLCAkcHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLT5nZXRFeHRlbnNpb25zKCksICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmdldEV4dGVuc2lvbnMoKSk7CiAgICAgICAgICAgICRwYXJzZWRSZWx5aW5nUGFydHlJZCA9IHBhcnNlX3VybCgkQy0+Z2V0T3JpZ2luKCkpOwogICAgICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJHBhcnNlZFJlbHlpbmdQYXJ0eUlkLCAnSW52YWxpZCBvcmlnaW4nKTsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkZmFjZXRJZCwgJHNlY3VyZWRSZWx5aW5nUGFydHlJZCwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRzY2hlbWUgPSAkcGFyc2VkUmVseWluZ1BhcnR5SWRbJ3NjaGVtZSddID8/ICcnOwogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjplcSgnaHR0cHMnLCAkc2NoZW1lLCAnSW52YWxpZCBzY2hlbWUuIEhUVFBTIHJlcXVpcmVkLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjbGllbnREYXRhUnBJZCA9ICRwYXJzZWRSZWx5aW5nUGFydHlJZFsnaG9zdCddID8/ICcnOwogICAgICAgICAgICBBc3NlcnRpb246Om5vdEVtcHR5KCRjbGllbnREYXRhUnBJZCwgJ0ludmFsaWQgb3JpZ2luIHJwSWQuJyk7CiAgICAgICAgICAgICRycElkTGVuZ3RoID0gbWJfc3RybGVuKCRmYWNldElkKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjplcShtYl9zdWJzdHIoJy4nLiRjbGllbnREYXRhUnBJZCwgLSgkcnBJZExlbmd0aCArIDEpKSwgJy4nLiRmYWNldElkLCAncnBJZCBtaXNtYXRjaC4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xMCAqLwogICAgICAgICAgICBpZiAobnVsbCAhPT0gJEMtPmdldFRva2VuQmluZGluZygpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlci0+Y2hlY2soJEMtPmdldFRva2VuQmluZGluZygpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRleHBlY3RlZFJwSWRIYXNoID0gJGlzVTJGID8gJEMtPmdldE9yaWdpbigpIDogJGZhY2V0SWQ7CiAgICAgICAgICAgIC8vIHUyZiByZXNwb25zZSBoYXMgZnVsbCBvcmlnaW4gaW4gcnBJZEhhc2gKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjExICovCiAgICAgICAgICAgICRycElkSGFzaCA9IGhhc2goJ3NoYTI1NicsICRleHBlY3RlZFJwSWRIYXNoLCB0cnVlKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRycElkSGFzaCwgJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0QXV0aGVudGljYXRvckRhdGEoKS0+Z2V0UnBJZEhhc2goKSksICdycElkIGhhc2ggbWlzbWF0Y2guJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjIuMTIgKi8KICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmlzVXNlclByZXNlbnQoKSwgJ1VzZXIgd2FzIG5vdCBwcmVzZW50Jyk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xMyAqLwogICAgICAgICAgICBpZiAoQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9SRVFVSVJFRCA9PT0gJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0VXNlclZlcmlmaWNhdGlvbigpKSB7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS0+Z2V0QXV0aGVudGljYXRvckRhdGEoKS0+aXNVc2VyVmVyaWZpZWQoKSwgJ1VzZXIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMi4xNCAqLwogICAgICAgICAgICAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRBdXRoZW50aWNhdG9yRGF0YSgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgICAgICAgIGlmIChudWxsICE9PSAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlci0+Y2hlY2soCiAgICAgICAgICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy0+Z2V0RXh0ZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE1ICovCiAgICAgICAgICAgICRnZXRDbGllbnREYXRhSlNPTkhhc2ggPSBoYXNoKCdzaGEyNTYnLCAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRDbGllbnREYXRhSlNPTigpLT5nZXRSYXdEYXRhKCksIHRydWUpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE2ICovCiAgICAgICAgICAgICRkYXRhVG9WZXJpZnkgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRBdXRoZW50aWNhdG9yRGF0YSgpLT5nZXRBdXRoRGF0YSgpLiRnZXRDbGllbnREYXRhSlNPTkhhc2g7CiAgICAgICAgICAgICRzaWduYXR1cmUgPSAkYXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLT5nZXRTaWduYXR1cmUoKTsKICAgICAgICAgICAgJGNvc2VLZXkgPSBuZXcgS2V5KCRjcmVkZW50aWFsUHVibGljS2V5U3RyZWFtLT5nZXROb3JtYWxpemVkRGF0YSgpKTsKICAgICAgICAgICAgJGFsZ29yaXRobSA9ICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyLT5nZXQoJGNvc2VLZXktPmFsZygpKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjppc0luc3RhbmNlT2YoJGFsZ29yaXRobSwgU2lnbmF0dXJlOjpjbGFzcywgJ0ludmFsaWQgYWxnb3JpdGhtIGlkZW50aWZpZXIuIFNob3VsZCByZWZlciB0byBhIHNpZ25hdHVyZSBhbGdvcml0aG0nKTsKICAgICAgICAgICAgJHNpZ25hdHVyZSA9IENvc2VTaWduYXR1cmVGaXhlcjo6Zml4KCRzaWduYXR1cmUsICRhbGdvcml0aG0pOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGFsZ29yaXRobS0+dmVyaWZ5KCRkYXRhVG9WZXJpZnksICRjb3NlS2V5LCAkc2lnbmF0dXJlKSwgJ0ludmFsaWQgc2lnbmF0dXJlLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE3ICovCiAgICAgICAgICAgICRzdG9yZWRDb3VudGVyID0gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPmdldENvdW50ZXIoKTsKICAgICAgICAgICAgJHJlc3BvbnNlQ291bnRlciA9ICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UtPmdldEF1dGhlbnRpY2F0b3JEYXRhKCktPmdldFNpZ25Db3VudCgpOwogICAgICAgICAgICBpZiAoMCAhPT0gJHJlc3BvbnNlQ291bnRlciB8fCAwICE9PSAkc3RvcmVkQ291bnRlcikgewogICAgICAgICAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyLT5jaGVjaygkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgJHJlc3BvbnNlQ291bnRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPnNldENvdW50ZXIoJHJlc3BvbnNlQ291bnRlcik7CiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeS0+c2F2ZUNyZWRlbnRpYWxTb3VyY2UoJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4yLjE4ICovCiAgICAgICAgICAgIC8vQWxsIGdvb2QuIFdlIGNhbiBjb250aW51ZS4KICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGFzc2VydGlvbiBpcyB2YWxpZCcpOwogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnUHVibGljIEtleSBDcmVkZW50aWFsIFNvdXJjZScsIFsncHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZScgPT4gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VdKTsKCiAgICAgICAgICAgIHJldHVybiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCBbCiAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJyA9PiAkdGhyb3dhYmxlLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb3VudGVyQ2hlY2tlcihDb3VudGVyQ2hlY2tlciAkY291bnRlckNoZWNrZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmNvdW50ZXJDaGVja2VyID0gJGNvdW50ZXJDaGVja2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+ICRhbGxvd2VkQ3JlZGVudGlhbHMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0NyZWRlbnRpYWxJZEFsbG93ZWQoc3RyaW5nICRjcmVkZW50aWFsSWQsIGFycmF5ICRhbGxvd2VkQ3JlZGVudGlhbHMpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGFsbG93ZWRDcmVkZW50aWFscyBhcyAkYWxsb3dlZENyZWRlbnRpYWwpIHsKICAgICAgICAgICAgaWYgKGhhc2hfZXF1YWxzKCRhbGxvd2VkQ3JlZGVudGlhbC0+Z2V0SWQoKSwgJGNyZWRlbnRpYWxJZCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRGYWNldElkKHN0cmluZyAkcnBJZCwgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMsID9BdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIHx8ICEkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLT5oYXMoJ2FwcGlkJykgfHwgISRhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLT5oYXMoJ2FwcGlkJykpIHsKICAgICAgICAgICAgcmV0dXJuICRycElkOwogICAgICAgIH0KICAgICAgICAkYXBwSWQgPSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLT5nZXQoJ2FwcGlkJyktPnZhbHVlKCk7CiAgICAgICAgJHdhc1VzZWQgPSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy0+Z2V0KCdhcHBpZCcpLT52YWx1ZSgpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRhcHBJZCkgfHwgdHJ1ZSAhPT0gJHdhc1VzZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRycElkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhcHBJZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAttestationResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEF0dGVzdGF0aW9uT2JqZWN0OwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNhdXRoZW50aWNhdG9yYXR0ZXN0YXRpb25yZXNwb25zZQogKi8KY2xhc3MgQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgZXh0ZW5kcyBBdXRoZW50aWNhdG9yUmVzcG9uc2UKewogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uT2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uT2JqZWN0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb2xsZWN0ZWRDbGllbnREYXRhICRjbGllbnREYXRhSlNPTiwgQXR0ZXN0YXRpb25PYmplY3QgJGF0dGVzdGF0aW9uT2JqZWN0KQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGNsaWVudERhdGFKU09OKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3QgPSAkYXR0ZXN0YXRpb25PYmplY3Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uT2JqZWN0KCk6IEF0dGVzdGF0aW9uT2JqZWN0CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRlc3RhdGlvbk9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorAttestationResponseValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gaXNfc3RyaW5nOwp1c2UgTG9naWNFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBmdW5jdGlvbiBTYWZlXHBhcnNlX3VybDsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIFRocm93YWJsZTsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEF0dGVzdGF0aW9uT2JqZWN0Owp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25TdGF0ZW1lbnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ2VydGlmaWNhdGVDaGFpbkNoZWNrZXJcQ2VydGlmaWNhdGVDaGFpbkNoZWNrZXI7CnVzZSBXZWJhdXRoblxNZXRhZGF0YVNlcnZpY2VcTWV0YWRhdGFTdGF0ZW1lbnQ7CnVzZSBXZWJhdXRoblxNZXRhZGF0YVNlcnZpY2VcTWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5Owp1c2UgV2ViYXV0aG5cTWV0YWRhdGFTZXJ2aWNlXFN0YXR1c1JlcG9ydDsKdXNlIFdlYmF1dGhuXFRva2VuQmluZGluZ1xUb2tlbkJpbmRpbmdIYW5kbGVyOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXENlcnRpZmljYXRlVHJ1c3RQYXRoOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXEVtcHR5VHJ1c3RQYXRoOwoKY2xhc3MgQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VWYWxpZGF0b3IKewogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVJlcG9zaXRvcnkKICAgICAqLwogICAgcHJpdmF0ZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCiAgICAvKioKICAgICAqIEB2YXIgVG9rZW5CaW5kaW5nSGFuZGxlcgogICAgICovCiAgICBwcml2YXRlICR0b2tlbkJpbmRpbmdIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcgogICAgICovCiAgICBwcml2YXRlICRleHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTG9nZ2VySW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgJGxvZ2dlcjsKCiAgICAvKioKICAgICAqIEB2YXIgTWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBDZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLCBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgVG9rZW5CaW5kaW5nSGFuZGxlciAkdG9rZW5CaW5kaW5nSGFuZGxlciwgRXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyLCA/TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSBudWxsLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkbG9nZ2VyKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImxvZ2dlciIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRMb2dnZXIiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAibWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlID0gJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2U7CiAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIgPSAkdG9rZW5CaW5kaW5nSGFuZGxlcjsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIgPSAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXI7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSA9ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENlcnRpZmljYXRlQ2hhaW5DaGVja2VyKENlcnRpZmljYXRlQ2hhaW5DaGVja2VyICRjZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+Y2VydGlmaWNhdGVDaGFpbkNoZWNrZXIgPSAkY2VydGlmaWNhdGVDaGFpbkNoZWNrZXI7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5tZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgPSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5OwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jcmVnaXN0ZXJpbmctYS1uZXctY3JlZGVudGlhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkc2VjdXJlZFJlbHlpbmdQYXJ0eUlkID0gW10pOiBQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnQ2hlY2tpbmcgdGhlIGF1dGhlbnRpY2F0b3IgYXR0ZXN0YXRpb24gcmVzcG9uc2UnLCBbCiAgICAgICAgICAgICAgICAnYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UnID0+ICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSwKICAgICAgICAgICAgICAgICdwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywKICAgICAgICAgICAgICAgICdob3N0JyA9PiAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xICovCiAgICAgICAgICAgIC8vTm90aGluZyB0byBkbwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjIgKi8KICAgICAgICAgICAgJEMgPSAkYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UtPmdldENsaWVudERhdGFKU09OKCk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMyAqLwogICAgICAgICAgICBBc3NlcnRpb246OmVxKCd3ZWJhdXRobi5jcmVhdGUnLCAkQy0+Z2V0VHlwZSgpLCAnVGhlIGNsaWVudCBkYXRhIHR5cGUgaXMgbm90ICJ3ZWJhdXRobi5jcmVhdGUiLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjQgKi8KICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRDaGFsbGVuZ2UoKSwgJEMtPmdldENoYWxsZW5nZSgpKSwgJ0ludmFsaWQgY2hhbGxlbmdlLicpOwoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjUgKi8KICAgICAgICAgICAgJHJwSWQgPSAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0UnAoKS0+Z2V0SWQoKSA/PyAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldEhvc3QoKTsKICAgICAgICAgICAgJGZhY2V0SWQgPSAkdGhpcy0+Z2V0RmFjZXRJZCgkcnBJZCwgJHB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMtPmdldEV4dGVuc2lvbnMoKSwgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLT5nZXRBdHRlc3RhdGlvbk9iamVjdCgpLT5nZXRBdXRoRGF0YSgpLT5nZXRFeHRlbnNpb25zKCkpOwoKICAgICAgICAgICAgJHBhcnNlZFJlbHlpbmdQYXJ0eUlkID0gcGFyc2VfdXJsKCRDLT5nZXRPcmlnaW4oKSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkUmVseWluZ1BhcnR5SWQsIHNwcmludGYoJ1RoZSBvcmlnaW4gVVJJICIlcyIgaXMgbm90IHZhbGlkJywgJEMtPmdldE9yaWdpbigpKSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWRSZWx5aW5nUGFydHlJZCwgJ3NjaGVtZScsICdJbnZhbGlkIG9yaWdpbiBycElkLicpOwogICAgICAgICAgICAkY2xpZW50RGF0YVJwSWQgPSAkcGFyc2VkUmVseWluZ1BhcnR5SWRbJ2hvc3QnXSA/PyAnJzsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpub3RFbXB0eSgkY2xpZW50RGF0YVJwSWQsICdJbnZhbGlkIG9yaWdpbiBycElkLicpOwogICAgICAgICAgICAkcnBJZExlbmd0aCA9IG1iX3N0cmxlbigkZmFjZXRJZCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6ZXEobWJfc3Vic3RyKCcuJy4kY2xpZW50RGF0YVJwSWQsIC0oJHJwSWRMZW5ndGggKyAxKSksICcuJy4kZmFjZXRJZCwgJ3JwSWQgbWlzbWF0Y2guJyk7CgogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRmYWNldElkLCAkc2VjdXJlZFJlbHlpbmdQYXJ0eUlkLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHNjaGVtZSA9ICRwYXJzZWRSZWx5aW5nUGFydHlJZFsnc2NoZW1lJ10gPz8gJyc7CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OmVxKCdodHRwcycsICRzY2hlbWUsICdJbnZhbGlkIHNjaGVtZS4gSFRUUFMgcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS42ICovCiAgICAgICAgICAgIGlmIChudWxsICE9PSAkQy0+Z2V0VG9rZW5CaW5kaW5nKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmdIYW5kbGVyLT5jaGVjaygkQy0+Z2V0VG9rZW5CaW5kaW5nKCksICRyZXF1ZXN0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjcgKi8KICAgICAgICAgICAgJGNsaWVudERhdGFKU09OSGFzaCA9IGhhc2goJ3NoYTI1NicsICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS0+Z2V0Q2xpZW50RGF0YUpTT04oKS0+Z2V0UmF3RGF0YSgpLCB0cnVlKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS44ICovCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCA9ICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS0+Z2V0QXR0ZXN0YXRpb25PYmplY3QoKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS45ICovCiAgICAgICAgICAgICRycElkSGFzaCA9IGhhc2goJ3NoYTI1NicsICRmYWNldElkLCB0cnVlKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKGhhc2hfZXF1YWxzKCRycElkSGFzaCwgJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRScElkSGFzaCgpKSwgJ3JwSWQgaGFzaCBtaXNtYXRjaC4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xMCAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5pc1VzZXJQcmVzZW50KCksICdVc2VyIHdhcyBub3QgcHJlc2VudCcpOwogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTEgKi8KICAgICAgICAgICAgaWYgKEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTo6VVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfUkVRVUlSRUQgPT09ICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKCktPmdldFVzZXJWZXJpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXV0aERhdGEoKS0+aXNVc2VyVmVyaWZpZWQoKSwgJ1VzZXIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xMiAqLwogICAgICAgICAgICAkZXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF1dGhEYXRhKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICAgICAgICAgaWYgKG51bGwgIT09ICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cykgewogICAgICAgICAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyLT5jaGVjaygKICAgICAgICAgICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0RXh0ZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjEzICovCiAgICAgICAgICAgICR0aGlzLT5jaGVja01ldGFkYXRhU3RhdGVtZW50KCRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCAkYXR0ZXN0YXRpb25PYmplY3QpOwogICAgICAgICAgICAkZm10ID0gJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdHRTdG10KCktPmdldEZtdCgpOwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJHRoaXMtPmF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmhhcygkZm10KSwgJ1Vuc3VwcG9ydGVkIGF0dGVzdGF0aW9uIHN0YXRlbWVudCBmb3JtYXQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTQgKi8KICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9ICR0aGlzLT5hdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5nZXQoJGZtdCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0LT5pc1ZhbGlkKCRjbGllbnREYXRhSlNPTkhhc2gsICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLCAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF1dGhEYXRhKCkpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuJyk7CgogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTUgKi8KICAgICAgICAgICAgLyoqIEBzZWUgNy4xLjE2ICovCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xNyAqLwogICAgICAgICAgICBBc3NlcnRpb246OnRydWUoJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5oYXNBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCksICdUaGVyZSBpcyBubyBhdHRlc3RlZCBjcmVkZW50aWFsIGRhdGEuJyk7CiAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ1RoZXJlIGlzIG5vIGF0dGVzdGVkIGNyZWRlbnRpYWwgZGF0YS4nKTsKICAgICAgICAgICAgJGNyZWRlbnRpYWxJZCA9ICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5nZXRDcmVkZW50aWFsSWQoKTsKICAgICAgICAgICAgQXNzZXJ0aW9uOjpudWxsKCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlLT5maW5kT25lQnlDcmVkZW50aWFsSWQoJGNyZWRlbnRpYWxJZCksICdUaGUgY3JlZGVudGlhbCBJRCBhbHJlYWR5IGV4aXN0cy4nKTsKCiAgICAgICAgICAgIC8qKiBAc2VlIDcuMS4xOCAqLwogICAgICAgICAgICAvKiogQHNlZSA3LjEuMTkgKi8KICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UgPSAkdGhpcy0+Y3JlYXRlUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSgKICAgICAgICAgICAgICAgICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwKICAgICAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdCwKICAgICAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLT5nZXRVc2VyKCktPmdldElkKCkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGF0dGVzdGF0aW9uIGlzIHZhbGlkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdQdWJsaWMgS2V5IENyZWRlbnRpYWwgU291cmNlJywgWydwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlJyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZV0pOwoKICAgICAgICAgICAgcmV0dXJuICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlOwogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkdGhyb3dhYmxlKSB7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCcsIFsKICAgICAgICAgICAgICAgICdleGNlcHRpb24nID0+ICR0aHJvd2FibGUsCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aHJvdyAkdGhyb3dhYmxlOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ2VydGlmaWNhdGVDaGFpbihBdHRlc3RhdGlvblN0YXRlbWVudCAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsID9NZXRhZGF0YVN0YXRlbWVudCAkbWV0YWRhdGFTdGF0ZW1lbnQpOiB2b2lkCiAgICB7CiAgICAgICAgJHRydXN0UGF0aCA9ICRhdHRlc3RhdGlvblN0YXRlbWVudC0+Z2V0VHJ1c3RQYXRoKCk7CiAgICAgICAgaWYgKCEkdHJ1c3RQYXRoIGluc3RhbmNlb2YgQ2VydGlmaWNhdGVUcnVzdFBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcyA9ICR0cnVzdFBhdGgtPmdldENlcnRpZmljYXRlcygpOwoKICAgICAgICBpZiAobnVsbCA9PT0gJG1ldGFkYXRhU3RhdGVtZW50KSB7CiAgICAgICAgICAgIC8vIEBwaHBzdGFuLWlnbm9yZS1uZXh0LWxpbmUKICAgICAgICAgICAgbnVsbCA9PT0gJHRoaXMtPmNlcnRpZmljYXRlQ2hhaW5DaGVja2VyID8gQ2VydGlmaWNhdGVUb29sYm94OjpjaGVja0NoYWluKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzKSA6ICR0aGlzLT5jZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlci0+Y2hlY2soJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIFtdLCBudWxsKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRtZXRhZGF0YVN0YXRlbWVudENlcnRpZmljYXRlcyA9ICRtZXRhZGF0YVN0YXRlbWVudC0+Z2V0QXR0ZXN0YXRpb25Sb290Q2VydGlmaWNhdGVzKCk7CiAgICAgICAgJHJvb3RTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMgPSAkbWV0YWRhdGFTdGF0ZW1lbnQtPmdldFJvb3RDZXJ0aWZpY2F0ZXMoKTsKICAgICAgICBmb3JlYWNoICgkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMgYXMgJGtleSA9PiAkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXNbJGtleV0gPSBDZXJ0aWZpY2F0ZVRvb2xib3g6OmZpeFBFTVN0cnVjdHVyZSgkbWV0YWRhdGFTdGF0ZW1lbnRDZXJ0aWZpY2F0ZSk7CiAgICAgICAgfQogICAgICAgICR0cnVzdGVkQ2VydGlmaWNhdGVzID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICRtZXRhZGF0YVN0YXRlbWVudENlcnRpZmljYXRlcywKICAgICAgICAgICAgJHJvb3RTdGF0ZW1lbnRDZXJ0aWZpY2F0ZXMKICAgICAgICApOwoKICAgICAgICAvLyBAcGhwc3Rhbi1pZ25vcmUtbmV4dC1saW5lCiAgICAgICAgbnVsbCA9PT0gJHRoaXMtPmNlcnRpZmljYXRlQ2hhaW5DaGVja2VyID8gQ2VydGlmaWNhdGVUb29sYm94OjpjaGVja0NoYWluKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCAkdHJ1c3RlZENlcnRpZmljYXRlcykgOiAkdGhpcy0+Y2VydGlmaWNhdGVDaGFpbkNoZWNrZXItPmNoZWNrKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCAkdHJ1c3RlZENlcnRpZmljYXRlcyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja01ldGFkYXRhU3RhdGVtZW50KFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgJHB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMsIEF0dGVzdGF0aW9uT2JqZWN0ICRhdHRlc3RhdGlvbk9iamVjdCk6IHZvaWQKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQgPSAkYXR0ZXN0YXRpb25PYmplY3QtPmdldEF0dFN0bXQoKTsKICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9ICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXV0aERhdGEoKS0+Z2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOwogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJ05vIGF0dGVzdGVkIGNyZWRlbnRpYWwgZGF0YSBmb3VuZCcpOwogICAgICAgICRhYWd1aWQgPSAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0QWFndWlkKCktPnRvU3RyaW5nKCk7CiAgICAgICAgaWYgKFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FID09PSAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy0+Z2V0QXR0ZXN0YXRpb24oKSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5kZWJ1ZygnTm8gYXR0ZXN0YXRpb24gaXMgYXNrZWQuJyk7CiAgICAgICAgICAgIC8vTm8gYXR0ZXN0YXRpb24gaXMgYXNrZWQuIFdlIHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGFub255bW91cy4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcgPT09ICRhYWd1aWQKICAgICAgICAgICAgICAgICYmIChBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9OT05FID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSB8fCBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9TRUxGID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdUaGUgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGlzIGFub255bW91cy4nKTsKICAgICAgICAgICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQ2hhaW4oJGF0dGVzdGF0aW9uU3RhdGVtZW50LCBudWxsKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0Fub255bWl6YXRpb24gcmVxdWlyZWQuIEFBR1VJRCBhbmQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGNoYW5nZWQuJywgWwogICAgICAgICAgICAgICAgJ2FhZ3VpZCcgPT4gJGFhZ3VpZCwKICAgICAgICAgICAgICAgICdBdHRlc3RhdGlvblN0YXRlbWVudCcgPT4gJGF0dGVzdGF0aW9uU3RhdGVtZW50LAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEtPnNldEFhZ3VpZCgKICAgICAgICAgICAgICAgIFV1aWQ6OmZyb21TdHJpbmcoJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+c2V0QXR0U3RtdChBdHRlc3RhdGlvblN0YXRlbWVudDo6Y3JlYXRlTm9uZSgnbm9uZScsIFtdLCBuZXcgRW1wdHlUcnVzdFBhdGgoKSkpOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OlRZUEVfTk9ORSA9PT0gJGF0dGVzdGF0aW9uU3RhdGVtZW50LT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ05vIGF0dGVzdGF0aW9uIHJldHVybmVkLicpOwogICAgICAgICAgICAvL05vIGF0dGVzdGF0aW9uIGlzIHJldHVybmVkLiBXZSBzaGFsbCBlbnN1cmUgdGhhdCB0aGUgQUFHVUlEIGlzIGEgbnVsbCBvbmUuCiAgICAgICAgICAgIGlmICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyAhPT0gJGFhZ3VpZCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZGVidWcoJ0Fub255bWl6YXRpb24gcmVxdWlyZWQuIEFBR1VJRCBhbmQgQXR0ZXN0YXRpb24gU3RhdGVtZW50IGNoYW5nZWQuJywgWwogICAgICAgICAgICAgICAgICAgICdhYWd1aWQnID0+ICRhYWd1aWQsCiAgICAgICAgICAgICAgICAgICAgJ0F0dGVzdGF0aW9uU3RhdGVtZW50JyA9PiAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQsCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLT5zZXRBYWd1aWQoCiAgICAgICAgICAgICAgICAgICAgVXVpZDo6ZnJvbVN0cmluZygnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJykKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvL1RoZSBNRFMgUmVwb3NpdG9yeSBpcyBtYW5kYXRvcnkgaGVyZQogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5LCAnVGhlIE1ldGFkYXRhIFN0YXRlbWVudCBSZXBvc2l0b3J5IGlzIG1hbmRhdG9yeSB3aGVuIHJlcXVlc3RpbmcgYXR0ZXN0YXRpb24gb2JqZWN0cy4nKTsKICAgICAgICAkbWV0YWRhdGFTdGF0ZW1lbnQgPSAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5LT5maW5kT25lQnlBQUdVSUQoJGFhZ3VpZCk7CgogICAgICAgIC8vIFdlIGNoZWNrIHRoZSBsYXN0IHN0YXR1cyByZXBvcnQKICAgICAgICAkdGhpcy0+Y2hlY2tTdGF0dXNSZXBvcnQobnVsbCA9PT0gJG1ldGFkYXRhU3RhdGVtZW50ID8gW10gOiAkbWV0YWRhdGFTdGF0ZW1lbnQtPmdldFN0YXR1c1JlcG9ydHMoKSk7CgogICAgICAgIC8vIFdlIGNoZWNrIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiAoaWYgYW55KQogICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlQ2hhaW4oJGF0dGVzdGF0aW9uU3RhdGVtZW50LCAkbWV0YWRhdGFTdGF0ZW1lbnQpOwoKICAgICAgICAvLyBJZiBubyBBdHRlc3RhdGlvbiBTdGF0ZW1lbnQgaGFzIGJlZW4gcmV0dXJuZWQgb3IgaWYgbnVsbCBBQUdVSUQgKD0wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApCiAgICAgICAgLy8gPT4gbm90aGluZyB0byBjaGVjawogICAgICAgIGlmICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyA9PT0gJGFhZ3VpZCB8fCBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9OT05FID09PSAkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgTWV0YWRhdGEgU3RhdGVtZW50IGlzIG1hbmRhdG9yeQogICAgICAgIEFzc2VydGlvbjo6bm90TnVsbCgkbWV0YWRhdGFTdGF0ZW1lbnQsIHNwcmludGYoJ1RoZSBNZXRhZGF0YSBTdGF0ZW1lbnQgZm9yIHRoZSBBQUdVSUQgIiVzIiBpcyBtaXNzaW5nJywgJGFhZ3VpZCkpOwoKICAgICAgICAvLyBDaGVjayBBdHRlc3RhdGlvbiBUeXBlIGlzIGFsbG93ZWQKICAgICAgICBpZiAoMCAhPT0gY291bnQoJG1ldGFkYXRhU3RhdGVtZW50LT5nZXRBdHRlc3RhdGlvblR5cGVzKCkpKSB7CiAgICAgICAgICAgICR0eXBlID0gJHRoaXMtPmdldEF0dGVzdGF0aW9uVHlwZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQpOwogICAgICAgICAgICBBc3NlcnRpb246OmluQXJyYXkoJHR5cGUsICRtZXRhZGF0YVN0YXRlbWVudC0+Z2V0QXR0ZXN0YXRpb25UeXBlcygpLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBzdGF0ZW1lbnQuIFRoZSBhdHRlc3RhdGlvbiB0eXBlIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIGF1dGhlbnRpY2F0b3InKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RhdHVzUmVwb3J0W10gJHN0YXR1c1JlcG9ydHMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1N0YXR1c1JlcG9ydChhcnJheSAkc3RhdHVzUmVwb3J0cyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHN0YXR1c1JlcG9ydHMpKSB7CiAgICAgICAgICAgICRsYXN0U3RhdHVzUmVwb3J0ID0gZW5kKCRzdGF0dXNSZXBvcnRzKTsKICAgICAgICAgICAgaWYgKCRsYXN0U3RhdHVzUmVwb3J0LT5pc0NvbXByb21pc2VkKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBMb2dpY0V4Y2VwdGlvbignVGhlIGF1dGhlbnRpY2F0b3IgaXMgY29tcHJvbWlzZWQgYW5kIGNhbm5vdCBiZSB1c2VkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVQdWJsaWNLZXlDcmVkZW50aWFsU291cmNlKHN0cmluZyAkY3JlZGVudGlhbElkLCBBdHRlc3RlZENyZWRlbnRpYWxEYXRhICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCBBdHRlc3RhdGlvbk9iamVjdCAkYXR0ZXN0YXRpb25PYmplY3QsIHN0cmluZyAkdXNlckhhbmRsZSk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UoCiAgICAgICAgICAgICRjcmVkZW50aWFsSWQsCiAgICAgICAgICAgIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yOjpDUkVERU5USUFMX1RZUEVfUFVCTElDX0tFWSwKICAgICAgICAgICAgW10sCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLT5nZXRUeXBlKCksCiAgICAgICAgICAgICRhdHRlc3RhdGlvbk9iamVjdC0+Z2V0QXR0U3RtdCgpLT5nZXRUcnVzdFBhdGgoKSwKICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEtPmdldEFhZ3VpZCgpLAogICAgICAgICAgICAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YS0+Z2V0Q3JlZGVudGlhbFB1YmxpY0tleSgpLAogICAgICAgICAgICAkdXNlckhhbmRsZSwKICAgICAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0LT5nZXRBdXRoRGF0YSgpLT5nZXRTaWduQ291bnQoKQogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvblR5cGUoQXR0ZXN0YXRpb25TdGF0ZW1lbnQgJGF0dGVzdGF0aW9uU3RhdGVtZW50KTogaW50CiAgICB7CiAgICAgICAgc3dpdGNoICgkYXR0ZXN0YXRpb25TdGF0ZW1lbnQtPmdldFR5cGUoKSkgewogICAgICAgICAgICBjYXNlIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpUWVBFX0JBU0lDOgogICAgICAgICAgICAgICAgcmV0dXJuIE1ldGFkYXRhU3RhdGVtZW50OjpBVFRFU1RBVElPTl9CQVNJQ19GVUxMOwogICAgICAgICAgICBjYXNlIEF0dGVzdGF0aW9uU3RhdGVtZW50OjpUWVBFX1NFTEY6CiAgICAgICAgICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OkFUVEVTVEFUSU9OX0JBU0lDX1NVUlJPR0FURTsKICAgICAgICAgICAgY2FzZSBBdHRlc3RhdGlvblN0YXRlbWVudDo6VFlQRV9BVFRDQToKICAgICAgICAgICAgICAgIHJldHVybiBNZXRhZGF0YVN0YXRlbWVudDo6QVRURVNUQVRJT05fQVRUQ0E7CiAgICAgICAgICAgIGNhc2UgQXR0ZXN0YXRpb25TdGF0ZW1lbnQ6OlRZUEVfRUNEQUE6CiAgICAgICAgICAgICAgICByZXR1cm4gTWV0YWRhdGFTdGF0ZW1lbnQ6OkFUVEVTVEFUSU9OX0VDREFBOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBhdHRlc3RhdGlvbiB0eXBlJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RmFjZXRJZChzdHJpbmcgJHJwSWQsIEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyk6IHN0cmluZwogICAgewogICAgICAgIGlmIChudWxsID09PSAkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyB8fCAhJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy0+aGFzKCdhcHBpZCcpIHx8ICEkYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy0+aGFzKCdhcHBpZCcpKSB7CiAgICAgICAgICAgIHJldHVybiAkcnBJZDsKICAgICAgICB9CiAgICAgICAgJGFwcElkID0gJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy0+Z2V0KCdhcHBpZCcpLT52YWx1ZSgpOwogICAgICAgICR3YXNVc2VkID0gJGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMtPmdldCgnYXBwaWQnKS0+dmFsdWUoKTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkYXBwSWQpIHx8IHRydWUgIT09ICR3YXNVc2VkKSB7CiAgICAgICAgICAgIHJldHVybiAkcnBJZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXBwSWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIG9yZDsKdXNlIFdlYmF1dGhuXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc1xBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNzZWMtYXV0aGVudGljYXRvci1kYXRhCiAqLwpjbGFzcyBBdXRoZW50aWNhdG9yRGF0YQp7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfVVAgPSAwYjAwMDAwMDAxOwogICAgcHJpdmF0ZSBjb25zdCBGTEFHX1JGVTEgPSAwYjAwMDAwMDEwOwogICAgcHJpdmF0ZSBjb25zdCBGTEFHX1VWID0gMGIwMDAwMDEwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19SRlUyID0gMGIwMDExMTAwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19BVCA9IDBiMDEwMDAwMDA7CiAgICBwcml2YXRlIGNvbnN0IEZMQUdfRUQgPSAwYjEwMDAwMDAwOwogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGF1dGhEYXRhOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRycElkSGFzaDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmxhZ3M7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJHNpZ25Db3VudDsKCiAgICAvKioKICAgICAqIEB2YXIgQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YXxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c3xudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZXh0ZW5zaW9uczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRhdXRoRGF0YSwgc3RyaW5nICRycElkSGFzaCwgc3RyaW5nICRmbGFncywgaW50ICRzaWduQ291bnQsID9BdHRlc3RlZENyZWRlbnRpYWxEYXRhICRhdHRlc3RlZENyZWRlbnRpYWxEYXRhLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAkZXh0ZW5zaW9ucykKICAgIHsKICAgICAgICAkdGhpcy0+cnBJZEhhc2ggPSAkcnBJZEhhc2g7CiAgICAgICAgJHRoaXMtPmZsYWdzID0gJGZsYWdzOwogICAgICAgICR0aGlzLT5zaWduQ291bnQgPSAkc2lnbkNvdW50OwogICAgICAgICR0aGlzLT5hdHRlc3RlZENyZWRlbnRpYWxEYXRhID0gJGF0dGVzdGVkQ3JlZGVudGlhbERhdGE7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbnMgPSAkZXh0ZW5zaW9uczsKICAgICAgICAkdGhpcy0+YXV0aERhdGEgPSAkYXV0aERhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhEYXRhKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXV0aERhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJwSWRIYXNoKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cnBJZEhhc2g7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzVXNlclByZXNlbnQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAob3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1VQKSA/IHRydWUgOiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNVc2VyVmVyaWZpZWQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwICE9PSAob3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1VWKSA/IHRydWUgOiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgIT09IChvcmQoJHRoaXMtPmZsYWdzKSAmIHNlbGY6OkZMQUdfQVQpID8gdHJ1ZSA6IGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNFeHRlbnNpb25zKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gMCAhPT0gKG9yZCgkdGhpcy0+ZmxhZ3MpICYgc2VsZjo6RkxBR19FRCkgPyB0cnVlIDogZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc2VydmVkRm9yRnV0dXJlVXNlMSgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1JGVTE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc2VydmVkRm9yRnV0dXJlVXNlMigpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5mbGFncykgJiBzZWxmOjpGTEFHX1JGVTI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ25Db3VudCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpZ25Db3VudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgpOiA/QXR0ZXN0ZWRDcmVkZW50aWFsRGF0YQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0ZXN0ZWRDcmVkZW50aWFsRGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9ucygpOiA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cwogICAgewogICAgICAgIHJldHVybiBudWxsICE9PSAkdGhpcy0+ZXh0ZW5zaW9ucyAmJiAkdGhpcy0+aGFzRXh0ZW5zaW9ucygpID8gJHRoaXMtPmV4dGVuc2lvbnMgOiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorResponse.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLyNhdXRoZW50aWNhdG9ycmVzcG9uc2UKICovCmFic3RyYWN0IGNsYXNzIEF1dGhlbnRpY2F0b3JSZXNwb25zZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ29sbGVjdGVkQ2xpZW50RGF0YQogICAgICovCiAgICBwcml2YXRlICRjbGllbnREYXRhSlNPTjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29sbGVjdGVkQ2xpZW50RGF0YSAkY2xpZW50RGF0YUpTT04pCiAgICB7CiAgICAgICAgJHRoaXMtPmNsaWVudERhdGFKU09OID0gJGNsaWVudERhdGFKU09OOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnREYXRhSlNPTigpOiBDb2xsZWN0ZWRDbGllbnREYXRhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGllbnREYXRhSlNPTjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/AuthenticatorSelectionCriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfQVRUQUNITUVOVF9OT19QUkVGRVJFTkNFID0gbnVsbDsKICAgIHB1YmxpYyBjb25zdCBBVVRIRU5USUNBVE9SX0FUVEFDSE1FTlRfUExBVEZPUk0gPSAncGxhdGZvcm0nOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfQVRUQUNITUVOVF9DUk9TU19QTEFURk9STSA9ICdjcm9zcy1wbGF0Zm9ybSc7CgogICAgcHVibGljIGNvbnN0IFVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1JFUVVJUkVEID0gJ3JlcXVpcmVkJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQgPSAncHJlZmVycmVkJzsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9ESVNDT1VSQUdFRCA9ICdkaXNjb3VyYWdlZCc7CgogICAgcHVibGljIGNvbnN0IFJFU0lERU5UX0tFWV9SRVFVSVJFTUVOVF9OT05FID0gbnVsbDsKICAgIHB1YmxpYyBjb25zdCBSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfUkVRVUlSRUQgPSAncmVxdWlyZWQnOwogICAgcHVibGljIGNvbnN0IFJFU0lERU5UX0tFWV9SRVFVSVJFTUVOVF9QUkVGRVJSRUQgPSAncHJlZmVycmVkJzsKICAgIHB1YmxpYyBjb25zdCBSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfRElTQ09VUkFHRUQgPSAnZGlzY291cmFnZWQnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdG9yQXR0YWNobWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRyZXF1aXJlUmVzaWRlbnRLZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR1c2VyVmVyaWZpY2F0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRyZXNpZGVudEtleTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBudWxsLCA/Ym9vbCAkcmVxdWlyZVJlc2lkZW50S2V5ID0gbnVsbCwgP3N0cmluZyAkdXNlclZlcmlmaWNhdGlvbiA9IG51bGwsID9zdHJpbmcgJHJlc2lkZW50S2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImF1dGhlbnRpY2F0b3JBdHRhY2htZW50IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldEF1dGhlbnRpY2F0b3JBdHRhY2htZW50Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkcmVxdWlyZVJlc2lkZW50S2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlcXVpcmVSZXNpZGVudEtleSIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRSZXF1aXJlUmVzaWRlbnRLZXkiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInVzZXJWZXJpZmljYXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0VXNlclZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHJlc2lkZW50S2V5KSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInJlc2lkZW50S2V5IiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldFJlc2lkZW50S2V5Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9ICRhdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgICAgICAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5ID0gJHJlcXVpcmVSZXNpZGVudEtleSA/PyBmYWxzZTsKICAgICAgICAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiA9ICR1c2VyVmVyaWZpY2F0aW9uID8/IHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1BSRUZFUlJFRDsKICAgICAgICAkdGhpcy0+cmVzaWRlbnRLZXkgPSAkcmVzaWRlbnRLZXkgPz8gc2VsZjo6UkVTSURFTlRfS0VZX1JFUVVJUkVNRU5UX05PTkU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCg/c3RyaW5nICRhdXRoZW50aWNhdG9yQXR0YWNobWVudCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSAkYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVxdWlyZVJlc2lkZW50S2V5KGJvb2wgJHJlcXVpcmVSZXNpZGVudEtleSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5ID0gJHJlcXVpcmVSZXNpZGVudEtleTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uKHN0cmluZyAkdXNlclZlcmlmaWNhdGlvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbiA9ICR1c2VyVmVyaWZpY2F0aW9uOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlc2lkZW50S2V5KD9zdHJpbmcgJHJlc2lkZW50S2V5KTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5yZXNpZGVudEtleSA9ICRyZXNpZGVudEtleTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZXF1aXJlUmVzaWRlbnRLZXkoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWlyZVJlc2lkZW50S2V5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyVmVyaWZpY2F0aW9uKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzaWRlbnRLZXkoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzaWRlbnRLZXk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlKCkKICAgICAgICAgICAgLT5zZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudCgkanNvblsnYXV0aGVudGljYXRvckF0dGFjaG1lbnQnXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldFJlcXVpcmVSZXNpZGVudEtleSgkanNvblsncmVxdWlyZVJlc2lkZW50S2V5J10gPz8gZmFsc2UpCiAgICAgICAgICAgIC0+c2V0VXNlclZlcmlmaWNhdGlvbigkanNvblsndXNlclZlcmlmaWNhdGlvbiddID8/IHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1BSRUZFUlJFRCkKICAgICAgICAgICAgLT5zZXRSZXNpZGVudEtleSgkanNvblsncmVzaWRlbnRLZXknXSA/PyBzZWxmOjpSRVNJREVOVF9LRVlfUkVRVUlSRU1FTlRfTk9ORSkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkanNvbiA9IFsKICAgICAgICAgICAgJ3JlcXVpcmVSZXNpZGVudEtleScgPT4gJHRoaXMtPnJlcXVpcmVSZXNpZGVudEtleSwKICAgICAgICAgICAgJ3VzZXJWZXJpZmljYXRpb24nID0+ICR0aGlzLT51c2VyVmVyaWZpY2F0aW9uLAogICAgICAgIF07CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCkgewogICAgICAgICAgICAkanNvblsnYXV0aGVudGljYXRvckF0dGFjaG1lbnQnXSA9ICR0aGlzLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudDsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5yZXNpZGVudEtleSkgewogICAgICAgICAgICAkanNvblsncmVzaWRlbnRLZXknXSA9ICR0aGlzLT5yZXNpZGVudEtleTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/CertificateChainChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKaW50ZXJmYWNlIENlcnRpZmljYXRlQ2hhaW5DaGVja2VyCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateChainChecker/OpenSSLCertificateChainChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIGlzX2ludDsKdXNlIFBzclxIdHRwXENsaWVudFxDbGllbnRJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxmaWxlX3B1dF9jb250ZW50czsKdXNlIGZ1bmN0aW9uIFNhZmVca3NvcnQ7CnVzZSBmdW5jdGlvbiBTYWZlXG1rZGlyOwp1c2UgZnVuY3Rpb24gU2FmZVxyZW5hbWU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHRlbXBuYW07CnVzZSBmdW5jdGlvbiBTYWZlXHVubGluazsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCmZpbmFsIGNsYXNzIE9wZW5TU0xDZXJ0aWZpY2F0ZUNoYWluQ2hlY2tlciBpbXBsZW1lbnRzIENlcnRpZmljYXRlQ2hhaW5DaGVja2VyCnsKICAgIC8qKgogICAgICogQHZhciBDbGllbnRJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJpdmF0ZSAkcm9vdENlcnRpZmljYXRlcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDbGllbnRJbnRlcmZhY2UgJGNsaWVudCwgUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2UgJHJlcXVlc3RGYWN0b3J5KQogICAgewogICAgICAgICR0aGlzLT5jbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUm9vdENlcnRpZmljYXRlKHN0cmluZyAkY2VydGlmaWNhdGUpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnJvb3RDZXJ0aWZpY2F0ZXNbXSA9ICRjZXJ0aWZpY2F0ZTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoMCA9PT0gY291bnQoJHRydXN0ZWRDZXJ0aWZpY2F0ZXMpKSB7CiAgICAgICAgICAgICR0aGlzLT5jaGVja0NlcnRpZmljYXRlc1ZhbGlkaXR5KCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCB0cnVlKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNoZWNrQ2VydGlmaWNhdGVzVmFsaWRpdHkoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIGZhbHNlKTsKCiAgICAgICAgJGhhc0NybHMgPSBmYWxzZTsKICAgICAgICAkcHJvY2Vzc0FyZ3VtZW50cyA9IFsnLW5vLUNBZmlsZScsICctbm8tQ0FwYXRoJ107CgogICAgICAgICRjYURpcm5hbWUgPSAkdGhpcy0+Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctLUNBcGF0aCc7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRjYURpcm5hbWU7CgogICAgICAgIGZvcmVhY2ggKCR0cnVzdGVkQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZSgkY2FEaXJuYW1lLCAkY2VydGlmaWNhdGUsICd3ZWJhdXRobi10cnVzdGVkLScsICcucGVtJyk7CiAgICAgICAgICAgICRjcmwgPSAkdGhpcy0+Z2V0Q3JscygkY2VydGlmaWNhdGUpOwogICAgICAgICAgICBpZiAoJycgIT09ICRjcmwpIHsKICAgICAgICAgICAgICAgICRoYXNDcmxzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR0aGlzLT5zYXZlVG9UZW1wb3JhcnlGaWxlKCRjYURpcm5hbWUsICRjcmwsICd3ZWJhdXRobi10cnVzdGVkLWNybC0nLCAnLmNybCcpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVoYXNoUHJvY2VzcyA9IG5ldyBQcm9jZXNzKFsnb3BlbnNzbCcsICdyZWhhc2gnLCAkY2FEaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICAgICAgaWYgKCEkcmVoYXNoUHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KCiAgICAgICAgJGZpbGVuYW1lcyA9IFtdOwogICAgICAgICRsZWFmQ2VydGlmaWNhdGUgPSBhcnJheV9zaGlmdCgkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcyk7CiAgICAgICAgJGxlYWZGaWxlbmFtZSA9ICR0aGlzLT5zYXZlVG9UZW1wb3JhcnlGaWxlKHN5c19nZXRfdGVtcF9kaXIoKSwgJGxlYWZDZXJ0aWZpY2F0ZSwgJ3dlYmF1dGhuLWxlYWYtJywgJy5wZW0nKTsKICAgICAgICAkY3JsID0gJHRoaXMtPmdldENybHMoJGxlYWZDZXJ0aWZpY2F0ZSk7CiAgICAgICAgaWYgKCcnICE9PSAkY3JsKSB7CiAgICAgICAgICAgICRoYXNDcmxzID0gdHJ1ZTsKICAgICAgICAgICAgJHRoaXMtPnNhdmVUb1RlbXBvcmFyeUZpbGUoJGNhRGlybmFtZSwgJGNybCwgJ3dlYmF1dGhuLWxlYWYtY3JsLScsICcucGVtJyk7CiAgICAgICAgfQogICAgICAgICRmaWxlbmFtZXNbXSA9ICRsZWFmRmlsZW5hbWU7CgogICAgICAgIGZvcmVhY2ggKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZShzeXNfZ2V0X3RlbXBfZGlyKCksICRjZXJ0aWZpY2F0ZSwgJ3dlYmF1dGhuLXVudHJ1c3RlZC0nLCAnLnBlbScpOwogICAgICAgICAgICAkY3JsID0gJHRoaXMtPmdldENybHMoJGNlcnRpZmljYXRlKTsKICAgICAgICAgICAgaWYgKCcnICE9PSAkY3JsKSB7CiAgICAgICAgICAgICAgICAkaGFzQ3JscyA9IHRydWU7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2F2ZVRvVGVtcG9yYXJ5RmlsZSgkY2FEaXJuYW1lLCAkY3JsLCAnd2ViYXV0aG4tdW50cnVzdGVkLWNybC0nLCAnLnBlbScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAnLXVudHJ1c3RlZCc7CiAgICAgICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAkdW50cnVzdGVkRmlsZW5hbWU7CiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9ICR1bnRydXN0ZWRGaWxlbmFtZTsKICAgICAgICB9CgogICAgICAgICRwcm9jZXNzQXJndW1lbnRzW10gPSAkbGVhZkZpbGVuYW1lOwogICAgICAgIGlmICgkaGFzQ3JscykgewogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9jaGVjaycpOwogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9jaGVja19hbGwnKTsKICAgICAgICAgICAgLy9hcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWNybF9kb3dubG9hZCcpOwogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnLWV4dGVuZGVkX2NybCcpOwogICAgICAgIH0KICAgICAgICBhcnJheV91bnNoaWZ0KCRwcm9jZXNzQXJndW1lbnRzLCAnb3BlbnNzbCcsICd2ZXJpZnknKTsKCiAgICAgICAgJHByb2Nlc3MgPSBuZXcgUHJvY2VzcygkcHJvY2Vzc0FyZ3VtZW50cyk7CiAgICAgICAgJHByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB1bmxpbmsoJGZpbGVuYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoRmlsZXN5c3RlbUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPmRlbGV0ZURpcmVjdG9yeSgkY2FEaXJuYW1lKTsKCiAgICAgICAgaWYgKCEkcHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eShhcnJheSAkY2VydGlmaWNhdGVzLCBib29sICRhbGxvd1Jvb3RDZXJ0aWZpY2F0ZSk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkLCAnVW5hYmxlIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlJyk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGFsbG93Um9vdENlcnRpZmljYXRlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2hlY2tSb290Q2VydGlmaWNhdGUoJHBhcnNlZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZFRvX3RpbWVfdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHZhbGlkaXR5IHBlcmlvZCcpOwogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAndmFsaWRGcm9tX3RpbWVfdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHZhbGlkaXR5IHBlcmlvZCcpOwogICAgICAgICAgICBBc3NlcnRpb246Omxlc3NPckVxdWFsVGhhbih0aW1lKCksICRwYXJzZWRbJ3ZhbGlkVG9fdGltZV90J10sICdUaGUgY2VydGlmaWNhdGUgZXhwaXJlZCcpOwogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJPckVxdWFsVGhhbih0aW1lKCksICRwYXJzZWRbJ3ZhbGlkRnJvbV90aW1lX3QnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdXNhYmxlIHlldCcpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheTxzdHJpbmcsIG1peGVkPiAkcGFyc2VkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tSb290Q2VydGlmaWNhdGUoYXJyYXkgJHBhcnNlZCk6IHZvaWQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnc3ViamVjdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHN1YmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnaXNzdWVyJywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gaXNzdWVyJyk7CiAgICAgICAgJHN1YmplY3QgPSAkcGFyc2VkWydzdWJqZWN0J107CiAgICAgICAgJGlzc3VlciA9ICRwYXJzZWRbJ2lzc3VlciddOwogICAgICAgIGtzb3J0KCRzdWJqZWN0KTsKICAgICAgICBrc29ydCgkaXNzdWVyKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVxKCRzdWJqZWN0LCAkaXNzdWVyLCAnUm9vdCBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkJyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGNhRGlyID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICd3ZWJhdXRobi1jYS0nKTsKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGNhRGlyKSkgewogICAgICAgICAgICB1bmxpbmsoJGNhRGlyKTsKICAgICAgICB9CiAgICAgICAgbWtkaXIoJGNhRGlyKTsKICAgICAgICBpZiAoIWlzX2RpcigkY2FEaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ0RpcmVjdG9yeSAiJXMiIHdhcyBub3QgY3JlYXRlZCcsICRjYURpcikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjYURpcjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRlbGV0ZURpcmVjdG9yeShzdHJpbmcgJGRpcm5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ3JtJywgJy1yZicsICRkaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzYXZlVG9UZW1wb3JhcnlGaWxlKHN0cmluZyAkZm9sZGVyLCBzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHByZWZpeCwgc3RyaW5nICRzdWZmaXgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZmlsZW5hbWUgPSB0ZW1wbmFtKCRmb2xkZXIsICRwcmVmaXgpOwogICAgICAgIHJlbmFtZSgkZmlsZW5hbWUsICRmaWxlbmFtZS4kc3VmZml4KTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUuJHN1ZmZpeCwgJGNlcnRpZmljYXRlLCBGSUxFX0FQUEVORCk7CgogICAgICAgIHJldHVybiAkZmlsZW5hbWUuJHN1ZmZpeDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENybHMoc3RyaW5nICRjZXJ0aWZpY2F0ZSk6IHN0cmluZwogICAgewogICAgICAgICRwYXJzZWQgPSBvcGVuc3NsX3g1MDlfcGFyc2UoJGNlcnRpZmljYXRlKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwYXJzZWQgfHwgIWlzc2V0KCRwYXJzZWRbJ2V4dGVuc2lvbnMnXVsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJGVuZHBvaW50ID0gJHBhcnNlZFsnZXh0ZW5zaW9ucyddWydjcmxEaXN0cmlidXRpb25Qb2ludHMnXTsKICAgICAgICAkcG9zID0gbWJfc3RycG9zKCRlbmRwb2ludCwgJ1VSSTonKTsKICAgICAgICBpZiAoIWlzX2ludCgkcG9zKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkZW5kcG9pbnQgPSB0cmltKG1iX3N1YnN0cigkZW5kcG9pbnQsICRwb3MgKyA0KSk7CiAgICAgICAgJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdEZhY3RvcnktPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICRlbmRwb2ludCk7CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmNsaWVudC0+c2VuZFJlcXVlc3QoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoMjAwICE9PSAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CertificateToolbox.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBjb3VudDsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKdXNlIFNhZmVcRXhjZXB0aW9uc1xGaWxlc3lzdGVtRXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxmaWxlX3B1dF9jb250ZW50czsKdXNlIGZ1bmN0aW9uIFNhZmVca3NvcnQ7CnVzZSBmdW5jdGlvbiBTYWZlXG1rZGlyOwp1c2UgZnVuY3Rpb24gU2FmZVxyZW5hbWU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBmdW5jdGlvbiBTYWZlXHRlbXBuYW07CnVzZSBmdW5jdGlvbiBTYWZlXHVubGluazsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCmNsYXNzIENlcnRpZmljYXRlVG9vbGJveAp7CiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkICJUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIHNpbmNlIHYzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBlbiB2NC4wLiBQbGVhc2UgdXNlIFdlYmF1dGhuXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyXENlcnRpZmljYXRlQ2hhaW5DaGVja2VyIGluc3RlYWQiCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRydXN0ZWRDZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0NoYWluKGFycmF5ICRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzLCBhcnJheSAkdHJ1c3RlZENlcnRpZmljYXRlcyA9IFtdKTogdm9pZAogICAgewogICAgICAgIGlmICgwID09PSBjb3VudCgkdHJ1c3RlZENlcnRpZmljYXRlcykpIHsKICAgICAgICAgICAgc2VsZjo6Y2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eSgkYXV0aGVudGljYXRvckNlcnRpZmljYXRlcywgdHJ1ZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNlbGY6OmNoZWNrQ2VydGlmaWNhdGVzVmFsaWRpdHkoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMsIGZhbHNlKTsKCiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHMgPSBbJy1uby1DQWZpbGUnLCAnLW5vLUNBcGF0aCddOwoKICAgICAgICAkY2FEaXJuYW1lID0gc2VsZjo6Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctLUNBcGF0aCc7CiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRjYURpcm5hbWU7CgogICAgICAgIGZvcmVhY2ggKCR0cnVzdGVkQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoJGNhRGlybmFtZSwgJGNlcnRpZmljYXRlLCAnd2ViYXV0aG4tdHJ1c3RlZC0nLCAnLnBlbScpOwogICAgICAgIH0KCiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ29wZW5zc2wnLCAncmVoYXNoJywgJGNhRGlybmFtZV0pOwogICAgICAgICRyZWhhc2hQcm9jZXNzLT5ydW4oKTsKICAgICAgICB3aGlsZSAoJHJlaGFzaFByb2Nlc3MtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIC8vSnVzdCB3YWl0CiAgICAgICAgfQogICAgICAgIGlmICghJHJlaGFzaFByb2Nlc3MtPmlzU3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgY2VydGlmaWNhdGUgb3IgY2VydGlmaWNhdGUgY2hhaW4nKTsKICAgICAgICB9CgogICAgICAgICRmaWxlbmFtZXMgPSBbXTsKICAgICAgICAkbGVhZkNlcnRpZmljYXRlID0gYXJyYXlfc2hpZnQoJGF1dGhlbnRpY2F0b3JDZXJ0aWZpY2F0ZXMpOwogICAgICAgICRsZWFmRmlsZW5hbWUgPSBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoc3lzX2dldF90ZW1wX2RpcigpLCAkbGVhZkNlcnRpZmljYXRlLCAnd2ViYXV0aG4tbGVhZi0nLCAnLnBlbScpOwogICAgICAgICRmaWxlbmFtZXNbXSA9ICRsZWFmRmlsZW5hbWU7CgogICAgICAgIGZvcmVhY2ggKCRhdXRoZW50aWNhdG9yQ2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSBzZWxmOjpwcmVwYXJlQ2VydGlmaWNhdGUoc3lzX2dldF90ZW1wX2RpcigpLCAkY2VydGlmaWNhdGUsICd3ZWJhdXRobi11bnRydXN0ZWQtJywgJy5wZW0nKTsKICAgICAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICctdW50cnVzdGVkJzsKICAgICAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICR1bnRydXN0ZWRGaWxlbmFtZTsKICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gJHVudHJ1c3RlZEZpbGVuYW1lOwogICAgICAgIH0KCiAgICAgICAgJHByb2Nlc3NBcmd1bWVudHNbXSA9ICRsZWFmRmlsZW5hbWU7CiAgICAgICAgYXJyYXlfdW5zaGlmdCgkcHJvY2Vzc0FyZ3VtZW50cywgJ29wZW5zc2wnLCAndmVyaWZ5Jyk7CgogICAgICAgICRwcm9jZXNzID0gbmV3IFByb2Nlc3MoJHByb2Nlc3NBcmd1bWVudHMpOwogICAgICAgICRwcm9jZXNzLT5ydW4oKTsKICAgICAgICB3aGlsZSAoJHByb2Nlc3MtPmlzUnVubmluZygpKSB7CiAgICAgICAgICAgIC8vSnVzdCB3YWl0CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkZmlsZW5hbWVzIGFzICRmaWxlbmFtZSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdW5saW5rKCRmaWxlbmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVzeXN0ZW1FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNlbGY6OmRlbGV0ZURpcmVjdG9yeSgkY2FEaXJuYW1lKTsKCiAgICAgICAgaWYgKCEkcHJvY2Vzcy0+aXNTdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBvciBjZXJ0aWZpY2F0ZSBjaGFpbicpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpeFBFTVN0cnVjdHVyZShzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJHBlbUNlcnQgPSAnLS0tLS1CRUdJTiAnLiR0eXBlLictLS0tLScuUEhQX0VPTDsKICAgICAgICAkcGVtQ2VydCAuPSBjaHVua19zcGxpdCgkY2VydGlmaWNhdGUsIDY0LCBQSFBfRU9MKTsKICAgICAgICAkcGVtQ2VydCAuPSAnLS0tLS1FTkQgJy4kdHlwZS4nLS0tLS0nLlBIUF9FT0w7CgogICAgICAgIHJldHVybiAkcGVtQ2VydDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRERVJUb1BFTShzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGRlckNlcnRpZmljYXRlID0gc2VsZjo6dW51c2VkQnl0ZXNGaXgoJGNlcnRpZmljYXRlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmZpeFBFTVN0cnVjdHVyZShiYXNlNjRfZW5jb2RlKCRkZXJDZXJ0aWZpY2F0ZSksICR0eXBlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRBbGxERVJUb1BFTShhcnJheSAkY2VydGlmaWNhdGVzLCBzdHJpbmcgJHR5cGUgPSAnQ0VSVElGSUNBVEUnKTogYXJyYXkKICAgIHsKICAgICAgICAkY2VydHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRwdWJsaWNLZXkpIHsKICAgICAgICAgICAgJGNlcnRzW10gPSBzZWxmOjpjb252ZXJ0REVSVG9QRU0oJHB1YmxpY0tleSwgJHR5cGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjZXJ0czsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB1bnVzZWRCeXRlc0ZpeChzdHJpbmcgJGNlcnRpZmljYXRlKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGNlcnRpZmljYXRlSGFzaCA9IGhhc2goJ3NoYTI1NicsICRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgaWYgKGluX2FycmF5KCRjZXJ0aWZpY2F0ZUhhc2gsIHNlbGY6OmdldENlcnRpZmljYXRlSGFzaGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgICRjZXJ0aWZpY2F0ZVttYl9zdHJsZW4oJGNlcnRpZmljYXRlLCAnOGJpdCcpIC0gMjU3XSA9ICJcMCI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNlcnRpZmljYXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRjZXJ0aWZpY2F0ZXMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tDZXJ0aWZpY2F0ZXNWYWxpZGl0eShhcnJheSAkY2VydGlmaWNhdGVzLCBib29sICRhbGxvd1Jvb3RDZXJ0aWZpY2F0ZSk6IHZvaWQKICAgIHsKICAgICAgICBmb3JlYWNoICgkY2VydGlmaWNhdGVzIGFzICRjZXJ0aWZpY2F0ZSkgewogICAgICAgICAgICAkcGFyc2VkID0gb3BlbnNzbF94NTA5X3BhcnNlKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkcGFyc2VkLCAnVW5hYmxlIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlJyk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGFsbG93Um9vdENlcnRpZmljYXRlKSB7CiAgICAgICAgICAgICAgICBzZWxmOjpjaGVja1Jvb3RDZXJ0aWZpY2F0ZSgkcGFyc2VkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHBhcnNlZCwgJ3ZhbGlkVG9fdGltZV90JywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gdmFsaWRpdHkgcGVyaW9kJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRwYXJzZWQsICd2YWxpZEZyb21fdGltZV90JywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gdmFsaWRpdHkgcGVyaW9kJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6bGVzc09yRXF1YWxUaGFuKHRpbWUoKSwgJHBhcnNlZFsndmFsaWRUb190aW1lX3QnXSwgJ1RoZSBjZXJ0aWZpY2F0ZSBleHBpcmVkJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6Z3JlYXRlck9yRXF1YWxUaGFuKHRpbWUoKSwgJHBhcnNlZFsndmFsaWRGcm9tX3RpbWVfdCddLCAnVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB1c2FibGUgeWV0Jyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5PHN0cmluZywgbWl4ZWQ+ICRwYXJzZWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tSb290Q2VydGlmaWNhdGUoYXJyYXkgJHBhcnNlZCk6IHZvaWQKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnc3ViamVjdCcsICdUaGUgY2VydGlmaWNhdGUgaGFzIG5vIHN1YmplY3QnKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkcGFyc2VkLCAnaXNzdWVyJywgJ1RoZSBjZXJ0aWZpY2F0ZSBoYXMgbm8gaXNzdWVyJyk7CiAgICAgICAgJHN1YmplY3QgPSAkcGFyc2VkWydzdWJqZWN0J107CiAgICAgICAgJGlzc3VlciA9ICRwYXJzZWRbJ2lzc3VlciddOwogICAgICAgIGtzb3J0KCRzdWJqZWN0KTsKICAgICAgICBrc29ydCgkaXNzdWVyKTsKICAgICAgICBBc3NlcnRpb246Om5vdEVxKCRzdWJqZWN0LCAkaXNzdWVyLCAnUm9vdCBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldENlcnRpZmljYXRlSGFzaGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJzM0OWJjYTEwMzFmOGM4MmM0Y2VjYTM4YjljZWJmMWE2OWRmOWZiM2I5NGVlZDk5ZWIzZmI5YWEzODIyZDI2ZTgnLAogICAgICAgICAgICAnZGQ1NzQ1MjdkZjYwOGU0N2FlNDVmYmJhNzVhMmFmZGQ1YzIwZmQ5NGEwMjQxOTM4MTgxM2NkNTVhMmEzMzk4ZicsCiAgICAgICAgICAgICcxZDg3NjRmMGY3Y2QxMzUyZGY2MTUwMDQ1YzhmNjM4ZTUxNzI3MGU4YjVkZGExYzYzYWRlOWMyMjgwMjQwY2FlJywKICAgICAgICAgICAgJ2QwZWRjOWE5MWExNjc3NDM1YTk1MzM5MDg2NWQyMDhjNTViMzE4M2M2NzU5YzliNWE3ZmY0OTRjMzIyNTU4ZWInLAogICAgICAgICAgICAnNjA3M2M0MzZkY2QwNjRhNDgxMjdkZGJmNjAzMmFjMWE2NmZkNTlhMGMyNDQzNGYwNzBkNGU1NjRjMTI0Yzg5NycsCiAgICAgICAgICAgICdjYTk5MzEyMTg0NmM0NjRkNjY2MDk2ZDM1ZjEzYmY0NGMxYjA1YWYyMDVmOWI0YTFlMDBjZjZjYzEwYzVlNTExJywKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkY2FEaXIgPSB0ZW1wbmFtKHN5c19nZXRfdGVtcF9kaXIoKSwgJ3dlYmF1dGhuLWNhLScpOwogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY2FEaXIpKSB7CiAgICAgICAgICAgIHVubGluaygkY2FEaXIpOwogICAgICAgIH0KICAgICAgICBta2RpcigkY2FEaXIpOwogICAgICAgIGlmICghaXNfZGlyKCRjYURpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignRGlyZWN0b3J5ICIlcyIgd2FzIG5vdCBjcmVhdGVkJywgJGNhRGlyKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNhRGlyOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZURpcmVjdG9yeShzdHJpbmcgJGRpcm5hbWUpOiB2b2lkCiAgICB7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MgPSBuZXcgUHJvY2VzcyhbJ3JtJywgJy1yZicsICRkaXJuYW1lXSk7CiAgICAgICAgJHJlaGFzaFByb2Nlc3MtPnJ1bigpOwogICAgICAgIHdoaWxlICgkcmVoYXNoUHJvY2Vzcy0+aXNSdW5uaW5nKCkpIHsKICAgICAgICAgICAgLy9KdXN0IHdhaXQKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUNlcnRpZmljYXRlKHN0cmluZyAkZm9sZGVyLCBzdHJpbmcgJGNlcnRpZmljYXRlLCBzdHJpbmcgJHByZWZpeCwgc3RyaW5nICRzdWZmaXgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdW50cnVzdGVkRmlsZW5hbWUgPSB0ZW1wbmFtKCRmb2xkZXIsICRwcmVmaXgpOwogICAgICAgIHJlbmFtZSgkdW50cnVzdGVkRmlsZW5hbWUsICR1bnRydXN0ZWRGaWxlbmFtZS4kc3VmZml4KTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkdW50cnVzdGVkRmlsZW5hbWUuJHN1ZmZpeCwgJGNlcnRpZmljYXRlLCBGSUxFX0FQUEVORCk7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHVudHJ1c3RlZEZpbGVuYW1lLiRzdWZmaXgsIFBIUF9FT0wsIEZJTEVfQVBQRU5EKTsKCiAgICAgICAgcmV0dXJuICR1bnRydXN0ZWRGaWxlbmFtZS4kc3VmZml4OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/CollectedClientData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcVG9rZW5CaW5kaW5nOwoKY2xhc3MgQ29sbGVjdGVkQ2xpZW50RGF0YQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHJhd0RhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW10KICAgICAqLwogICAgcHJpdmF0ZSAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRjaGFsbGVuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRvcmlnaW47CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkW118bnVsbAogICAgICovCiAgICBwcml2YXRlICR0b2tlbkJpbmRpbmc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRyYXdEYXRhLCBhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+dHlwZSA9ICR0aGlzLT5maW5kRGF0YSgkZGF0YSwgJ3R5cGUnKTsKICAgICAgICAkdGhpcy0+Y2hhbGxlbmdlID0gJHRoaXMtPmZpbmREYXRhKCRkYXRhLCAnY2hhbGxlbmdlJywgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgJHRoaXMtPm9yaWdpbiA9ICR0aGlzLT5maW5kRGF0YSgkZGF0YSwgJ29yaWdpbicpOwogICAgICAgICR0aGlzLT50b2tlbkJpbmRpbmcgPSAkdGhpcy0+ZmluZERhdGEoJGRhdGEsICd0b2tlbkJpbmRpbmcnLCBmYWxzZSk7CiAgICAgICAgJHRoaXMtPnJhd0RhdGEgPSAkcmF3RGF0YTsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRm9ybUpzb24oc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRyYXdEYXRhID0gQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGEpOwogICAgICAgICRqc29uID0ganNvbl9kZWNvZGUoJHJhd0RhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvbiwgJ0ludmFsaWQgY29sbGVjdGVkIGNsaWVudCBkYXRhJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkcmF3RGF0YSwgJGpzb24pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hhbGxlbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmlnaW4oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcmlnaW47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRva2VuQmluZGluZygpOiA/VG9rZW5CaW5kaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgPT09ICR0aGlzLT50b2tlbkJpbmRpbmcgPyBudWxsIDogVG9rZW5CaW5kaW5nOjpjcmVhdGVGb3JtQXJyYXkoJHRoaXMtPnRva2VuQmluZGluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhd0RhdGEoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYXdEYXRhOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoc3RyaW5nICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAka2V5KQogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygka2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kRGF0YShhcnJheSAkanNvbiwgc3RyaW5nICRrZXksIGJvb2wgJGlzUmVxdWlyZWQgPSB0cnVlLCBib29sICRpc0I2NCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkanNvbikpIHsKICAgICAgICAgICAgaWYgKCRpc1JlcXVpcmVkKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBrZXkgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGlzQjY0ID8gQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJGtleV0pIDogJGpzb25bJGtleV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/CounterChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENvdW50ZXI7Cgp1c2UgV2ViYXV0aG5cUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCmludGVyZmFjZSBDb3VudGVyQ2hlY2tlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgaW50ICRjdXJyZW50Q291bnRlcik6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Counter/ThrowExceptionIfInvalid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXENvdW50ZXI7Cgp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlOwp1c2UgUHNyXExvZ1xOdWxsTG9nZ2VyOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCmZpbmFsIGNsYXNzIFRocm93RXhjZXB0aW9uSWZJbnZhbGlkIGltcGxlbWVudHMgQ291bnRlckNoZWNrZXIKewogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSwgaW50ICRjdXJyZW50Q291bnRlcik6IHZvaWQKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBBc3NlcnRpb246OmdyZWF0ZXJUaGFuKCRjdXJyZW50Q291bnRlciwgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UtPmdldENvdW50ZXIoKSwgJ0ludmFsaWQgY291bnRlci4nKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5lcnJvcignVGhlIGNvdW50ZXIgaXMgaW52YWxpZCcsIFsKICAgICAgICAgICAgICAgICdjdXJyZW50JyA9PiAkY3VycmVudENvdW50ZXIsCiAgICAgICAgICAgICAgICAnbmV3JyA9PiAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZS0+Z2V0Q291bnRlcigpLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhyb3cgJHRocm93YWJsZTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Credential.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKLyoqCiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1jcmVkZW50aWFsLW1hbmFnZW1lbnQvI2NyZWRlbnRpYWwKICovCmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWwKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICR0eXBlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGlkLCBzdHJpbmcgJHR5cGUpCiAgICB7CiAgICAgICAgJHRoaXMtPmlkID0gJGlkOwogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredential.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIFNhZmVcanNvbl9lbmNvZGU7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2lmYWNlLXBrY3JlZGVudGlhbAogKi8KY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbCBleHRlbmRzIENyZWRlbnRpYWwKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJhd0lkOwoKICAgIC8qKgogICAgICogQHZhciBBdXRoZW50aWNhdG9yUmVzcG9uc2UKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXNwb25zZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRpZCwgc3RyaW5nICR0eXBlLCBzdHJpbmcgJHJhd0lkLCBBdXRoZW50aWNhdG9yUmVzcG9uc2UgJHJlc3BvbnNlKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlkLCAkdHlwZSk7CiAgICAgICAgJHRoaXMtPnJhd0lkID0gJHJhd0lkOwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIGpzb25fZW5jb2RlKCR0aGlzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3SWQoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yYXdJZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKTogQXV0aGVudGljYXRvclJlc3BvbnNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkdHJhbnNwb3J0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcihhcnJheSAkdHJhbnNwb3J0ID0gW10pOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IoJHRoaXMtPmdldFR5cGUoKSwgJHRoaXMtPmdldFJhd0lkKCksICR0cmFuc3BvcnQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialCreationOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsT3B0aW9ucwp7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX05PTkUgPSAnbm9uZSc7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0lORElSRUNUID0gJ2luZGlyZWN0JzsKICAgIHB1YmxpYyBjb25zdCBBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfRElSRUNUID0gJ2RpcmVjdCc7CiAgICBwdWJsaWMgY29uc3QgQVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0VOVEVSUFJJU0UgPSAnZW50ZXJwcmlzZSc7CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eQogICAgICovCiAgICBwcml2YXRlICRycDsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXQogICAgICovCiAgICBwcml2YXRlICRwdWJLZXlDcmVkUGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10KICAgICAqLwogICAgcHJpdmF0ZSAkZXhjbHVkZUNyZWRlbnRpYWxzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYQogICAgICovCiAgICBwcml2YXRlICRhdXRoZW50aWNhdG9yU2VsZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkYXR0ZXN0YXRpb247CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGV4Y2x1ZGVDcmVkZW50aWFscwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICRycCwgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgJHVzZXIsIHN0cmluZyAkY2hhbGxlbmdlLCBhcnJheSAkcHViS2V5Q3JlZFBhcmFtcywgP2ludCAkdGltZW91dCA9IG51bGwsIGFycmF5ICRleGNsdWRlQ3JlZGVudGlhbHMgPSBbXSwgP0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IG51bGwsID9zdHJpbmcgJGF0dGVzdGF0aW9uID0gbnVsbCwgP0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkZXh0ZW5zaW9ucyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRleGNsdWRlQ3JlZGVudGlhbHMpKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgImV4Y2x1ZGVDcmVkZW50aWFscyIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJleGNsdWRlQ3JlZGVudGlhbHMiIG9yICJleGNsdWRlQ3JlZGVudGlhbCIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYXV0aGVudGljYXRvclNlbGVjdGlvbiIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkYXR0ZXN0YXRpb24pIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAiYXR0ZXN0YXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0QXR0ZXN0YXRpb24iLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkY2hhbGxlbmdlLCAkdGltZW91dCwgJGV4dGVuc2lvbnMpOwogICAgICAgICR0aGlzLT5ycCA9ICRycDsKICAgICAgICAkdGhpcy0+dXNlciA9ICR1c2VyOwogICAgICAgICR0aGlzLT5wdWJLZXlDcmVkUGFyYW1zID0gJHB1YktleUNyZWRQYXJhbXM7CiAgICAgICAgJHRoaXMtPmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSAkYXV0aGVudGljYXRvclNlbGVjdGlvbiA/PyBuZXcgQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKCk7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uID0gJGF0dGVzdGF0aW9uID8/IHNlbGY6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FOwogICAgICAgICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHMoJGV4Y2x1ZGVDcmVkZW50aWFscykKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgJHJwLCBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlciwgc3RyaW5nICRjaGFsbGVuZ2UsIGFycmF5ICRwdWJLZXlDcmVkUGFyYW1zKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkcnAsICR1c2VyLCAkY2hhbGxlbmdlLCAkcHViS2V5Q3JlZFBhcmFtcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZFB1YktleUNyZWRQYXJhbShQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAkcHViS2V5Q3JlZFBhcmFtKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5wdWJLZXlDcmVkUGFyYW1zW10gPSAkcHViS2V5Q3JlZFBhcmFtOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSAkcHViS2V5Q3JlZFBhcmFtcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUHViS2V5Q3JlZFBhcmFtcyhhcnJheSAkcHViS2V5Q3JlZFBhcmFtcyk6IHNlbGYKICAgIHsKICAgICAgICBmb3JlYWNoICgkcHViS2V5Q3JlZFBhcmFtcyBhcyAkcHViS2V5Q3JlZFBhcmFtKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRQdWJLZXlDcmVkUGFyYW0oJHB1YktleUNyZWRQYXJhbSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2x1ZGVDcmVkZW50aWFsKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICRleGNsdWRlQ3JlZGVudGlhbCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZXhjbHVkZUNyZWRlbnRpYWxzW10gPSAkZXhjbHVkZUNyZWRlbnRpYWw7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdICRleGNsdWRlQ3JlZGVudGlhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2x1ZGVDcmVkZW50aWFscyhhcnJheSAkZXhjbHVkZUNyZWRlbnRpYWxzKTogc2VsZgogICAgewogICAgICAgIGZvcmVhY2ggKCRleGNsdWRlQ3JlZGVudGlhbHMgYXMgJGV4Y2x1ZGVDcmVkZW50aWFsKSB7CiAgICAgICAgICAgICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbCgkZXhjbHVkZUNyZWRlbnRpYWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkYXV0aGVudGljYXRvclNlbGVjdGlvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YXV0aGVudGljYXRvclNlbGVjdGlvbiA9ICRhdXRoZW50aWNhdG9yU2VsZWN0aW9uOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dGVzdGF0aW9uKHN0cmluZyAkYXR0ZXN0YXRpb24pOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KCRhdHRlc3RhdGlvbiwgWwogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfTk9ORSwKICAgICAgICAgICAgc2VsZjo6QVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0RJUkVDVCwKICAgICAgICAgICAgc2VsZjo6QVRURVNUQVRJT05fQ09OVkVZQU5DRV9QUkVGRVJFTkNFX0lORElSRUNULAogICAgICAgICAgICBzZWxmOjpBVFRFU1RBVElPTl9DT05WRVlBTkNFX1BSRUZFUkVOQ0VfRU5URVJQUklTRSwKICAgICAgICBdLCAnSW52YWxpZCBhdHRlc3RhdGlvbiBjb252ZXlhbmNlIG1vZGUnKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb24gPSAkYXR0ZXN0YXRpb247CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UnAoKTogUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ycDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlcigpOiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHViS2V5Q3JlZFBhcmFtcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHViS2V5Q3JlZFBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjbHVkZUNyZWRlbnRpYWxzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb24oKTogQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoZW50aWNhdG9yU2VsZWN0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RhdGlvbigpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBQdWJsaWNLZXlDcmVkZW50aWFsT3B0aW9ucwogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdycCcsICdJbnZhbGlkIGlucHV0LiAicnAiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdwdWJLZXlDcmVkUGFyYW1zJywgJ0ludmFsaWQgaW5wdXQuICJwdWJLZXlDcmVkUGFyYW1zIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvblsncHViS2V5Q3JlZFBhcmFtcyddLCAnSW52YWxpZCBpbnB1dC4gInB1YktleUNyZWRQYXJhbXMiIGlzIG5vdCBhbiBhcnJheS4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2NoYWxsZW5nZScsICdJbnZhbGlkIGlucHV0LiAiY2hhbGxlbmdlIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnYXR0ZXN0YXRpb24nLCAnSW52YWxpZCBpbnB1dC4gImF0dGVzdGF0aW9uIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndXNlcicsICdJbnZhbGlkIGlucHV0LiAidXNlciIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24nLCAnSW52YWxpZCBpbnB1dC4gImF1dGhlbnRpY2F0b3JTZWxlY3Rpb24iIGlzIG1pc3NpbmcuJyk7CgogICAgICAgICRwdWJLZXlDcmVkUGFyYW1zID0gW107CiAgICAgICAgZm9yZWFjaCAoJGpzb25bJ3B1YktleUNyZWRQYXJhbXMnXSBhcyAkcHViS2V5Q3JlZFBhcmFtKSB7CiAgICAgICAgICAgICRwdWJLZXlDcmVkUGFyYW1zW10gPSBQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVyczo6Y3JlYXRlRnJvbUFycmF5KCRwdWJLZXlDcmVkUGFyYW0pOwogICAgICAgIH0KICAgICAgICAkZXhjbHVkZUNyZWRlbnRpYWxzID0gW107CiAgICAgICAgaWYgKGlzc2V0KCRqc29uWydleGNsdWRlQ3JlZGVudGlhbHMnXSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGpzb25bJ2V4Y2x1ZGVDcmVkZW50aWFscyddIGFzICRleGNsdWRlQ3JlZGVudGlhbCkgewogICAgICAgICAgICAgICAgJGV4Y2x1ZGVDcmVkZW50aWFsc1tdID0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkZXhjbHVkZUNyZWRlbnRpYWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlKAogICAgICAgICAgICAgICAgUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5OjpjcmVhdGVGcm9tQXJyYXkoJGpzb25bJ3JwJ10pLAogICAgICAgICAgICAgICAgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk6OmNyZWF0ZUZyb21BcnJheSgkanNvblsndXNlciddKSwKICAgICAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRqc29uWydjaGFsbGVuZ2UnXSksCiAgICAgICAgICAgICAgICAkcHViS2V5Q3JlZFBhcmFtcwogICAgICAgICAgICApCiAgICAgICAgICAgIC0+ZXhjbHVkZUNyZWRlbnRpYWxzKCRleGNsdWRlQ3JlZGVudGlhbHMpCiAgICAgICAgICAgIC0+c2V0QXV0aGVudGljYXRvclNlbGVjdGlvbihBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE6OmNyZWF0ZUZyb21BcnJheSgkanNvblsnYXV0aGVudGljYXRvclNlbGVjdGlvbiddKSkKICAgICAgICAgICAgLT5zZXRBdHRlc3RhdGlvbigkanNvblsnYXR0ZXN0YXRpb24nXSkKICAgICAgICAgICAgLT5zZXRUaW1lb3V0KCRqc29uWyd0aW1lb3V0J10gPz8gbnVsbCkKICAgICAgICAgICAgLT5zZXRFeHRlbnNpb25zKGlzc2V0KCRqc29uWydleHRlbnNpb25zJ10pID8gQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOjpjcmVhdGVGcm9tQXJyYXkoJGpzb25bJ2V4dGVuc2lvbnMnXSkgOiBuZXcgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKCkpCiAgICAgICAgOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICdycCcgPT4gJHRoaXMtPnJwLT5qc29uU2VyaWFsaXplKCksCiAgICAgICAgICAgICdwdWJLZXlDcmVkUGFyYW1zJyA9PiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPnB1YktleUNyZWRQYXJhbXMpLAogICAgICAgICAgICAnY2hhbGxlbmdlJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y2hhbGxlbmdlKSwKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uJyA9PiAkdGhpcy0+YXR0ZXN0YXRpb24sCiAgICAgICAgICAgICd1c2VyJyA9PiAkdGhpcy0+dXNlci0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYXV0aGVudGljYXRvclNlbGVjdGlvbicgPT4gJHRoaXMtPmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmpzb25TZXJpYWxpemUoKSwKICAgICAgICBdOwoKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHRoaXMtPmV4Y2x1ZGVDcmVkZW50aWFscykpIHsKICAgICAgICAgICAgJGpzb25bJ2V4Y2x1ZGVDcmVkZW50aWFscyddID0gYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgJG9iamVjdCk6IGFycmF5IHsKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqZWN0LT5qc29uU2VyaWFsaXplKCk7CiAgICAgICAgICAgIH0sICR0aGlzLT5leGNsdWRlQ3JlZGVudGlhbHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgIT09ICR0aGlzLT5leHRlbnNpb25zLT5jb3VudCgpKSB7CiAgICAgICAgICAgICRqc29uWydleHRlbnNpb25zJ10gPSAkdGhpcy0+ZXh0ZW5zaW9uczsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+dGltZW91dCkgewogICAgICAgICAgICAkanNvblsndGltZW91dCddID0gJHRoaXMtPnRpbWVvdXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICBwdWJsaWMgY29uc3QgQ1JFREVOVElBTF9UWVBFX1BVQkxJQ19LRVkgPSAncHVibGljLWtleSc7CgogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX1VTQiA9ICd1c2InOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX05GQyA9ICduZmMnOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX0JMRSA9ICdibGUnOwogICAgcHVibGljIGNvbnN0IEFVVEhFTlRJQ0FUT1JfVFJBTlNQT1JUX0lOVEVSTkFMID0gJ2ludGVybmFsJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHJhbnNwb3J0czsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkdHJhbnNwb3J0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR0eXBlLCBzdHJpbmcgJGlkLCBhcnJheSAkdHJhbnNwb3J0cyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPmlkID0gJGlkOwogICAgICAgICR0aGlzLT50cmFuc3BvcnRzID0gJHRyYW5zcG9ydHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhbnNwb3J0cygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHJhbnNwb3J0czsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndHlwZScsICdJbnZhbGlkIGlucHV0LiAidHlwZSIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2lkJywgJ0ludmFsaWQgaW5wdXQuICJpZCIgaXMgbWlzc2luZy4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkanNvblsndHlwZSddLAogICAgICAgICAgICBCYXNlNjRVcmw6OmRlY29kZSgkanNvblsnaWQnXSksCiAgICAgICAgICAgICRqc29uWyd0cmFuc3BvcnRzJ10gPz8gW10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICd0eXBlJyA9PiAkdGhpcy0+dHlwZSwKICAgICAgICAgICAgJ2lkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+aWQpLAogICAgICAgIF07CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCR0aGlzLT50cmFuc3BvcnRzKSkgewogICAgICAgICAgICAkanNvblsndHJhbnNwb3J0cyddID0gJHRoaXMtPnRyYW5zcG9ydHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialDescriptorCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBcnJheUl0ZXJhdG9yOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgQ291bnRhYmxlOwp1c2UgSXRlcmF0b3I7CnVzZSBJdGVyYXRvckFnZ3JlZ2F0ZTsKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JDb2xsZWN0aW9uIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgQ291bnRhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXQogICAgICovCiAgICBwcml2YXRlICRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzWyRwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci0+Z2V0SWQoKV0gPSAkcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGlkKTogYm9vbAogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRpZCwgJHRoaXMtPnB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZShzdHJpbmcgJGlkKTogdm9pZAogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygkaWQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHVuc2V0KCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnNbJGlkXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPHN0cmluZywgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcigkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoaW50ICRtb2RlID0gQ09VTlRfTk9STUFMKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMsICRtb2RlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXlbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICByZXR1cm4gJG9iamVjdC0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0sICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkZGF0YSwgdHJ1ZSk7CiAgICAgICAgQXNzZXJ0aW9uOjppc0FycmF5KCRkYXRhLCAnSW52YWxpZCBkYXRhJyk7CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tQXJyYXkoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgc2VsZigpOwogICAgICAgIGZvcmVhY2ggKCRqc29uIGFzICRpdGVtKSB7CiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5hZGQoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkaXRlbSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CgphYnN0cmFjdCBjbGFzcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkICRpY29uOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsID9zdHJpbmcgJGljb24pCiAgICB7CiAgICAgICAgJHRoaXMtPm5hbWUgPSAkbmFtZTsKICAgICAgICAkdGhpcy0+aWNvbiA9ICRpY29uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWNvbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pY29uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGpzb24gPSBbCiAgICAgICAgICAgICduYW1lJyA9PiAkdGhpcy0+bmFtZSwKICAgICAgICBdOwogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+aWNvbikgewogICAgICAgICAgICAkanNvblsnaWNvbiddID0gJHRoaXMtPmljb247CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGpzb247CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIGZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHM7CnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIENCT1JcRGVjb2RlcjsKdXNlIENCT1JcTWFwT2JqZWN0Owp1c2UgQ0JPUlxPdGhlck9iamVjdFxPdGhlck9iamVjdE1hbmFnZXI7CnVzZSBDQk9SXFRhZ1xUYWdPYmplY3RNYW5hZ2VyOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gb3JkOwp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXE51bGxMb2dnZXI7CnVzZSBSYW1zZXlcVXVpZFxVdWlkOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKdXNlIGZ1bmN0aW9uIFNhZmVcc3ByaW50ZjsKdXNlIGZ1bmN0aW9uIFNhZmVcdW5wYWNrOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0xvYWRlcjsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIKewogICAgcHJpdmF0ZSBjb25zdCBGTEFHX0FUID0gMGIwMTAwMDAwMDsKICAgIHByaXZhdGUgY29uc3QgRkxBR19FRCA9IDBiMTAwMDAwMDA7CgogICAgLyoqCiAgICAgKiBAdmFyIEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyOwoKICAgIC8qKgogICAgICogQHZhciBEZWNvZGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGRlY29kZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIExvZ2dlckludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyICRhdHRlc3RhdGlvbk9iamVjdExvYWRlciwgP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJGxvZ2dlcikgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJsb2dnZXIiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TG9nZ2VyIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5kZWNvZGVyID0gbmV3IERlY29kZXIobmV3IFRhZ09iamVjdE1hbmFnZXIoKSwgbmV3IE90aGVyT2JqZWN0TWFuYWdlcigpKTsKICAgICAgICAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3RMb2FkZXIgPSAkYXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXIgPz8gbmV3IE51bGxMb2dnZXIoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShBdHRlc3RhdGlvbk9iamVjdExvYWRlciAkYXR0ZXN0YXRpb25PYmplY3RMb2FkZXIpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRhdHRlc3RhdGlvbk9iamVjdExvYWRlcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ2dlcihMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyID0gJGxvZ2dlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRBcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWwKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gbG9hZCBkYXRhIGZyb20gYW4gYXJyYXknLCBbJ2RhdGEnID0+ICRqc29uXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yZWFjaCAoWydpZCcsICdyYXdJZCcsICd0eXBlJ10gYXMgJGtleSkgewogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICRrZXksIHNwcmludGYoJ1RoZSBwYXJhbWV0ZXIgIiVzIiBpcyBtaXNzaW5nJywgJGtleSkpOwogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjpzdHJpbmcoJGpzb25bJGtleV0sIHNwcmludGYoJ1RoZSBwYXJhbWV0ZXIgIiVzIiBzaGFsbCBiZSBhIHN0cmluZycsICRrZXkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ3Jlc3BvbnNlJywgJ1RoZSBwYXJhbWV0ZXIgInJlc3BvbnNlIiBpcyBtaXNzaW5nJyk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkanNvblsncmVzcG9uc2UnXSwgJ1RoZSBwYXJhbWV0ZXIgInJlc3BvbnNlIiBzaGFsbCBiZSBhbiBhcnJheScpOwogICAgICAgICAgICBBc3NlcnRpb246OmVxKCRqc29uWyd0eXBlJ10sICdwdWJsaWMta2V5Jywgc3ByaW50ZignVW5zdXBwb3J0ZWQgdHlwZSAiJXMiJywgJGpzb25bJ3R5cGUnXSkpOwoKICAgICAgICAgICAgJGlkID0gQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJ2lkJ10pOwogICAgICAgICAgICAkcmF3SWQgPSBCYXNlNjRVcmw6OmRlY29kZSgkanNvblsncmF3SWQnXSk7CiAgICAgICAgICAgIEFzc2VydGlvbjo6dHJ1ZShoYXNoX2VxdWFscygkaWQsICRyYXdJZCkpOwoKICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSBuZXcgUHVibGljS2V5Q3JlZGVudGlhbCgKICAgICAgICAgICAgICAgICRqc29uWydpZCddLAogICAgICAgICAgICAgICAgJGpzb25bJ3R5cGUnXSwKICAgICAgICAgICAgICAgICRyYXdJZCwKICAgICAgICAgICAgICAgICR0aGlzLT5jcmVhdGVSZXNwb25zZSgkanNvblsncmVzcG9uc2UnXSkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+aW5mbygnVGhlIGRhdGEgaGFzIGJlZW4gbG9hZGVkJyk7CiAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPmRlYnVnKCdQdWJsaWMgS2V5IENyZWRlbnRpYWwnLCBbJ3B1YmxpY0tleUNyZWRlbnRpYWwnID0+ICRwdWJsaWNLZXlDcmVkZW50aWFsXSk7CgogICAgICAgICAgICByZXR1cm4gJHB1YmxpY0tleUNyZWRlbnRpYWw7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkJywgWwogICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbicgPT4gJHRocm93YWJsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICR0aHJvd2FibGU7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZGF0YSk6IFB1YmxpY0tleUNyZWRlbnRpYWwKICAgIHsKICAgICAgICAkdGhpcy0+bG9nZ2VyLT5pbmZvKCdUcnlpbmcgdG8gbG9hZCBkYXRhIGZyb20gYSBzdHJpbmcnLCBbJ2RhdGEnID0+ICRkYXRhXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGpzb24gPSBqc29uX2RlY29kZSgkZGF0YSwgdHJ1ZSk7CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvYWRBcnJheSgkanNvbik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPmxvZ2dlci0+ZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkJywgWwogICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbicgPT4gJHRocm93YWJsZSwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICR0aHJvd2FibGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJHJlc3BvbnNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYXJyYXkgJHJlc3BvbnNlKTogQXV0aGVudGljYXRvclJlc3BvbnNlCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJHJlc3BvbnNlLCAnY2xpZW50RGF0YUpTT04nLCAnSW52YWxpZCBkYXRhLiBUaGUgcGFyYW1ldGVyICJjbGllbnREYXRhSlNPTiIgaXMgbWlzc2luZycpOwogICAgICAgIEFzc2VydGlvbjo6c3RyaW5nKCRyZXNwb25zZVsnY2xpZW50RGF0YUpTT04nXSwgJ0ludmFsaWQgZGF0YS4gVGhlIHBhcmFtZXRlciAiY2xpZW50RGF0YUpTT04iIGlzIGludmFsaWQnKTsKICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgY2FzZSBhcnJheV9rZXlfZXhpc3RzKCdhdHRlc3RhdGlvbk9iamVjdCcsICRyZXNwb25zZSk6CiAgICAgICAgICAgICAgICBBc3NlcnRpb246OnN0cmluZygkcmVzcG9uc2VbJ2F0dGVzdGF0aW9uT2JqZWN0J10sICdJbnZhbGlkIGRhdGEuIFRoZSBwYXJhbWV0ZXIgImF0dGVzdGF0aW9uT2JqZWN0ICAgIiBpcyBpbnZhbGlkJyk7CiAgICAgICAgICAgICAgICAkYXR0ZXN0YXRpb25PYmplY3QgPSAkdGhpcy0+YXR0ZXN0YXRpb25PYmplY3RMb2FkZXItPmxvYWQoJHJlc3BvbnNlWydhdHRlc3RhdGlvbk9iamVjdCddKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKENvbGxlY3RlZENsaWVudERhdGE6OmNyZWF0ZUZvcm1Kc29uKCRyZXNwb25zZVsnY2xpZW50RGF0YUpTT04nXSksICRhdHRlc3RhdGlvbk9iamVjdCk7CiAgICAgICAgICAgIGNhc2UgYXJyYXlfa2V5X2V4aXN0cygnYXV0aGVudGljYXRvckRhdGEnLCAkcmVzcG9uc2UpICYmIGFycmF5X2tleV9leGlzdHMoJ3NpZ25hdHVyZScsICRyZXNwb25zZSk6CiAgICAgICAgICAgICAgICAkYXV0aERhdGEgPSBCYXNlNjRVcmw6OmRlY29kZSgkcmVzcG9uc2VbJ2F1dGhlbnRpY2F0b3JEYXRhJ10pOwoKICAgICAgICAgICAgICAgICRhdXRoRGF0YVN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0oJGF1dGhEYXRhKTsKICAgICAgICAgICAgICAgICRycF9pZF9oYXNoID0gJGF1dGhEYXRhU3RyZWFtLT5yZWFkKDMyKTsKICAgICAgICAgICAgICAgICRmbGFncyA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgxKTsKICAgICAgICAgICAgICAgICRzaWduQ291bnQgPSAkYXV0aERhdGFTdHJlYW0tPnJlYWQoNCk7CiAgICAgICAgICAgICAgICAkc2lnbkNvdW50ID0gdW5wYWNrKCdOJywgJHNpZ25Db3VudClbMV07CgogICAgICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEgPSBudWxsOwogICAgICAgICAgICAgICAgaWYgKDAgIT09IChvcmQoJGZsYWdzKSAmIHNlbGY6OkZMQUdfQVQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGFhZ3VpZCA9IFV1aWQ6OmZyb21CeXRlcygkYXV0aERhdGFTdHJlYW0tPnJlYWQoMTYpKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9ICRhdXRoRGF0YVN0cmVhbS0+cmVhZCgyKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbExlbmd0aCA9IHVucGFjaygnbicsICRjcmVkZW50aWFsTGVuZ3RoKVsxXTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbElkID0gJGF1dGhEYXRhU3RyZWFtLT5yZWFkKCRjcmVkZW50aWFsTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAkY3JlZGVudGlhbFB1YmxpY0tleSA9ICR0aGlzLT5kZWNvZGVyLT5kZWNvZGUoJGF1dGhEYXRhU3RyZWFtKTsKICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb246OmlzSW5zdGFuY2VPZigkY3JlZGVudGlhbFB1YmxpY0tleSwgTWFwT2JqZWN0OjpjbGFzcywgJ1RoZSBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBjcmVkZW50aWFsIHB1YmxpYyBrZXkuJyk7CiAgICAgICAgICAgICAgICAgICAgJGF0dGVzdGVkQ3JlZGVudGlhbERhdGEgPSBuZXcgQXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSgkYWFndWlkLCAkY3JlZGVudGlhbElkLCAoc3RyaW5nKSAkY3JlZGVudGlhbFB1YmxpY0tleSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGV4dGVuc2lvbiA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKG9yZCgkZmxhZ3MpICYgc2VsZjo6RkxBR19FRCkpIHsKICAgICAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uID0gJHRoaXMtPmRlY29kZXItPmRlY29kZSgkYXV0aERhdGFTdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICRleHRlbnNpb24gPSBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzTG9hZGVyOjpsb2FkKCRleHRlbnNpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQXNzZXJ0aW9uOjp0cnVlKCRhdXRoRGF0YVN0cmVhbS0+aXNFT0YoKSwgJ0ludmFsaWQgYXV0aGVudGljYXRpb24gZGF0YS4gUHJlc2VuY2Ugb2YgZXh0cmEgYnl0ZXMuJyk7CiAgICAgICAgICAgICAgICAkYXV0aERhdGFTdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgICAgICAgICAkYXV0aGVudGljYXRvckRhdGEgPSBuZXcgQXV0aGVudGljYXRvckRhdGEoJGF1dGhEYXRhLCAkcnBfaWRfaGFzaCwgJGZsYWdzLCAkc2lnbkNvdW50LCAkYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSwgJGV4dGVuc2lvbik7CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoCiAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGVkQ2xpZW50RGF0YTo6Y3JlYXRlRm9ybUpzb24oJHJlc3BvbnNlWydjbGllbnREYXRhSlNPTiddKSwKICAgICAgICAgICAgICAgICAgICAkYXV0aGVudGljYXRvckRhdGEsCiAgICAgICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJHJlc3BvbnNlWydzaWduYXR1cmUnXSksCiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlWyd1c2VySGFuZGxlJ10gPz8gbnVsbAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBjcmVhdGUgdGhlIHJlc3BvbnNlIG9iamVjdCcpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEpzb25TZXJpYWxpemFibGU7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb247CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOwoKYWJzdHJhY3QgY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbE9wdGlvbnMgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjaGFsbGVuZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludHxudWxsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdGltZW91dDsKCiAgICAvKioKICAgICAqIEB2YXIgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZXh0ZW5zaW9uczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRjaGFsbGVuZ2UsID9pbnQgJHRpbWVvdXQgPSBudWxsLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRpbWVvdXQpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoJ1RoZSBhcmd1bWVudCAidGltZW91dCIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDQuMC4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kICJzZXRUaW1lb3V0Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkZXh0ZW5zaW9ucykgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJleHRlbnNpb25zIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgImFkZEV4dGVuc2lvbiIgb3IgImFkZEV4dGVuc2lvbnMiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNoYWxsZW5nZSA9ICRjaGFsbGVuZ2U7CiAgICAgICAgJHRoaXMtPnNldFRpbWVvdXQoJHRpbWVvdXQpOwogICAgICAgICR0aGlzLT5leHRlbnNpb25zID0gJGV4dGVuc2lvbnMgPz8gbmV3IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KD9pbnQgJHRpbWVvdXQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnRpbWVvdXQgPSAkdGltZW91dDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRFeHRlbnNpb24oQXV0aGVudGljYXRpb25FeHRlbnNpb24gJGV4dGVuc2lvbik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9ucy0+YWRkKCRleHRlbnNpb24pOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQXV0aGVudGljYXRpb25FeHRlbnNpb25bXSAkZXh0ZW5zaW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRXh0ZW5zaW9ucyhhcnJheSAkZXh0ZW5zaW9ucyk6IHNlbGYKICAgIHsKICAgICAgICBmb3JlYWNoICgkZXh0ZW5zaW9ucyBhcyAkZXh0ZW5zaW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRFeHRlbnNpb24oJGV4dGVuc2lvbik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4dGVuc2lvbnMoQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5leHRlbnNpb25zID0gJGV4dGVuc2lvbnM7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbGxlbmdlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hhbGxlbmdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCk6ID9pbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRpbWVvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4dGVuc2lvbnMoKTogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zOwogICAgfQoKICAgIGFic3RyYWN0IHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVN0cmluZyhzdHJpbmcgJGRhdGEpOiBzZWxmOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGpzb24KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGpzb24pOiBzZWxmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialParameters.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgZnVuY3Rpb24gU2FmZVxqc29uX2RlY29kZTsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRhbGc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdHlwZSwgaW50ICRhbGcpCiAgICB7CiAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICAkdGhpcy0+YWxnID0gJGFsZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsZygpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsZzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsIHRydWUpOwogICAgICAgIEFzc2VydGlvbjo6aXNBcnJheSgkZGF0YSwgJ0ludmFsaWQgZGF0YScpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAndHlwZScsICdJbnZhbGlkIGlucHV0LiAidHlwZSIgaXMgbWlzc2luZy4nKTsKICAgICAgICBBc3NlcnRpb246OnN0cmluZygkanNvblsndHlwZSddLCAnSW52YWxpZCBpbnB1dC4gInR5cGUiIGlzIG5vdCBhIHN0cmluZy4nKTsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ2FsZycsICdJbnZhbGlkIGlucHV0LiAiYWxnIiBpcyBtaXNzaW5nLicpOwogICAgICAgIEFzc2VydGlvbjo6aW50ZWdlcigkanNvblsnYWxnJ10sICdJbnZhbGlkIGlucHV0LiAiYWxnIiBpcyBub3QgYW4gaW50ZWdlci4nKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAkanNvblsndHlwZSddLAogICAgICAgICAgICAkanNvblsnYWxnJ10KICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3R5cGUnID0+ICR0aGlzLT50eXBlLAogICAgICAgICAgICAnYWxnJyA9PiAkdGhpcy0+YWxnLAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialRequestOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgZnVuY3Rpb24gY291bnQ7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKCmNsYXNzIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCnsKICAgIHB1YmxpYyBjb25zdCBVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9SRVFVSVJFRCA9ICdyZXF1aXJlZCc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfUFJFRkVSUkVEID0gJ3ByZWZlcnJlZCc7CiAgICBwdWJsaWMgY29uc3QgVVNFUl9WRVJJRklDQVRJT05fUkVRVUlSRU1FTlRfRElTQ09VUkFHRUQgPSAnZGlzY291cmFnZWQnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRycElkOwoKICAgIC8qKgogICAgICogQHZhciBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdCiAgICAgKi8KICAgIHByaXZhdGUgJGFsbG93Q3JlZGVudGlhbHMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdICRhbGxvd0NyZWRlbnRpYWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGNoYWxsZW5nZSwgP2ludCAkdGltZW91dCA9IG51bGwsID9zdHJpbmcgJHJwSWQgPSBudWxsLCBhcnJheSAkYWxsb3dDcmVkZW50aWFscyA9IFtdLCA/c3RyaW5nICR1c2VyVmVyaWZpY2F0aW9uID0gbnVsbCwgP0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAkZXh0ZW5zaW9ucyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgIT09IGNvdW50KCRhbGxvd0NyZWRlbnRpYWxzKSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJhbGxvd0NyZWRlbnRpYWxzIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgImFkZEFsbG93ZWRDcmVkZW50aWFscyIgb3IgImFkZEFsbG93ZWRDcmVkZW50aWFsIi4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsICE9PSAkcnBJZCkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJycElkIiBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gNC4wLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgInNldFJwSWQiLicsIEVfVVNFUl9ERVBSRUNBVEVEKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgIEB0cmlnZ2VyX2Vycm9yKCdUaGUgYXJndW1lbnQgInVzZXJWZXJpZmljYXRpb24iIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0VXNlclZlcmlmaWNhdGlvbiIuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRjaGFsbGVuZ2UsICR0aW1lb3V0LCAkZXh0ZW5zaW9ucyk7CiAgICAgICAgJHRoaXMKICAgICAgICAgICAgLT5zZXRScElkKCRycElkKQogICAgICAgICAgICAtPmFsbG93Q3JlZGVudGlhbHMoJGFsbG93Q3JlZGVudGlhbHMpCiAgICAgICAgICAgIC0+c2V0VXNlclZlcmlmaWNhdGlvbigkdXNlclZlcmlmaWNhdGlvbikKICAgICAgICA7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nICRjaGFsbGVuZ2UpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRjaGFsbGVuZ2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRScElkKD9zdHJpbmcgJHJwSWQpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnJwSWQgPSAkcnBJZDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGxvd0NyZWRlbnRpYWwoUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgJGFsbG93Q3JlZGVudGlhbCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+YWxsb3dDcmVkZW50aWFsc1tdID0gJGFsbG93Q3JlZGVudGlhbDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGFsbG93Q3JlZGVudGlhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbG93Q3JlZGVudGlhbHMoYXJyYXkgJGFsbG93Q3JlZGVudGlhbHMpOiBzZWxmCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGFsbG93Q3JlZGVudGlhbHMgYXMgJGFsbG93Q3JlZGVudGlhbCkgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dDcmVkZW50aWFsKCRhbGxvd0NyZWRlbnRpYWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uKD9zdHJpbmcgJHVzZXJWZXJpZmljYXRpb24pOiBzZWxmCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR1c2VyVmVyaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5ycElkID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CiAgICAgICAgQXNzZXJ0aW9uOjppbkFycmF5KCR1c2VyVmVyaWZpY2F0aW9uLCBbCiAgICAgICAgICAgIHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX1JFUVVJUkVELAogICAgICAgICAgICBzZWxmOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQsCiAgICAgICAgICAgIHNlbGY6OlVTRVJfVkVSSUZJQ0FUSU9OX1JFUVVJUkVNRU5UX0RJU0NPVVJBR0VELAogICAgICAgIF0sICdJbnZhbGlkIHVzZXIgdmVyaWZpY2F0aW9uIHJlcXVpcmVtZW50Jyk7CiAgICAgICAgJHRoaXMtPnVzZXJWZXJpZmljYXRpb24gPSAkdXNlclZlcmlmaWNhdGlvbjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRScElkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJwSWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsbG93Q3JlZGVudGlhbHMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFsbG93Q3JlZGVudGlhbHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJWZXJpZmljYXRpb24oKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21TdHJpbmcoc3RyaW5nICRkYXRhKTogUHVibGljS2V5Q3JlZGVudGlhbE9wdGlvbnMKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IFB1YmxpY0tleUNyZWRlbnRpYWxPcHRpb25zCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdjaGFsbGVuZ2UnLCAnSW52YWxpZCBpbnB1dC4gImNoYWxsZW5nZSIgaXMgbWlzc2luZy4nKTsKCiAgICAgICAgJGFsbG93Q3JlZGVudGlhbHMgPSBbXTsKICAgICAgICAkYWxsb3dDcmVkZW50aWFsTGlzdCA9ICRqc29uWydhbGxvd0NyZWRlbnRpYWxzJ10gPz8gW107CiAgICAgICAgZm9yZWFjaCAoJGFsbG93Q3JlZGVudGlhbExpc3QgYXMgJGFsbG93Q3JlZGVudGlhbCkgewogICAgICAgICAgICAkYWxsb3dDcmVkZW50aWFsc1tdID0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I6OmNyZWF0ZUZyb21BcnJheSgkYWxsb3dDcmVkZW50aWFsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGUoQmFzZTY0VXJsOjpkZWNvZGUoJGpzb25bJ2NoYWxsZW5nZSddKSkKICAgICAgICAgICAgLT5zZXRScElkKCRqc29uWydycElkJ10gPz8gbnVsbCkKICAgICAgICAgICAgLT5hbGxvd0NyZWRlbnRpYWxzKCRhbGxvd0NyZWRlbnRpYWxzKQogICAgICAgICAgICAtPnNldFVzZXJWZXJpZmljYXRpb24oJGpzb25bJ3VzZXJWZXJpZmljYXRpb24nXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldFRpbWVvdXQoJGpzb25bJ3RpbWVvdXQnXSA/PyBudWxsKQogICAgICAgICAgICAtPnNldEV4dGVuc2lvbnMoaXNzZXQoJGpzb25bJ2V4dGVuc2lvbnMnXSkgPyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHM6OmNyZWF0ZUZyb21BcnJheSgkanNvblsnZXh0ZW5zaW9ucyddKSA6IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoKSkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICAkanNvbiA9IFsKICAgICAgICAgICAgJ2NoYWxsZW5nZScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNoYWxsZW5nZSksCiAgICAgICAgXTsKCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5ycElkKSB7CiAgICAgICAgICAgICRqc29uWydycElkJ10gPSAkdGhpcy0+cnBJZDsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+dXNlclZlcmlmaWNhdGlvbikgewogICAgICAgICAgICAkanNvblsndXNlclZlcmlmaWNhdGlvbiddID0gJHRoaXMtPnVzZXJWZXJpZmljYXRpb247CiAgICAgICAgfQoKICAgICAgICBpZiAoMCAhPT0gY291bnQoJHRoaXMtPmFsbG93Q3JlZGVudGlhbHMpKSB7CiAgICAgICAgICAgICRqc29uWydhbGxvd0NyZWRlbnRpYWxzJ10gPSBhcnJheV9tYXAoc3RhdGljIGZ1bmN0aW9uIChQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAkb2JqZWN0KTogYXJyYXkgewogICAgICAgICAgICAgICAgcmV0dXJuICRvYmplY3QtPmpzb25TZXJpYWxpemUoKTsKICAgICAgICAgICAgfSwgJHRoaXMtPmFsbG93Q3JlZGVudGlhbHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKDAgIT09ICR0aGlzLT5leHRlbnNpb25zLT5jb3VudCgpKSB7CiAgICAgICAgICAgICRqc29uWydleHRlbnNpb25zJ10gPSAkdGhpcy0+ZXh0ZW5zaW9ucy0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT50aW1lb3V0KSB7CiAgICAgICAgICAgICRqc29uWyd0aW1lb3V0J10gPSAkdGhpcy0+dGltZW91dDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialRpEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CgpjbGFzcyBQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGlkOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsID9zdHJpbmcgJGlkID0gbnVsbCwgP3N0cmluZyAkaWNvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbmFtZSwgJGljb24pOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ25hbWUnLCAnSW52YWxpZCBpbnB1dC4gIm5hbWUiIGlzIG1pc3NpbmcuJyk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGpzb25bJ25hbWUnXSwKICAgICAgICAgICAgJGpzb25bJ2lkJ10gPz8gbnVsbCwKICAgICAgICAgICAgJGpzb25bJ2ljb24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRqc29uID0gcGFyZW50Ojpqc29uU2VyaWFsaXplKCk7CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5pZCkgewogICAgICAgICAgICAkanNvblsnaWQnXSA9ICR0aGlzLT5pZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialSource.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIFJhbXNleVxVdWlkXFV1aWQ7CnVzZSBSYW1zZXlcVXVpZFxVdWlkSW50ZXJmYWNlOwp1c2UgZnVuY3Rpb24gU2FmZVxiYXNlNjRfZGVjb2RlOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwp1c2UgVGhyb3dhYmxlOwp1c2UgV2ViYXV0aG5cVHJ1c3RQYXRoXFRydXN0UGF0aDsKdXNlIFdlYmF1dGhuXFRydXN0UGF0aFxUcnVzdFBhdGhMb2FkZXI7CgovKioKICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4vI2lmYWNlLXBrY3JlZGVudGlhbAogKi8KY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHB1YmxpY0tleUNyZWRlbnRpYWxJZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nW10KICAgICAqLwogICAgcHJvdGVjdGVkICR0cmFuc3BvcnRzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRhdHRlc3RhdGlvblR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIFRydXN0UGF0aAogICAgICovCiAgICBwcm90ZWN0ZWQgJHRydXN0UGF0aDsKCiAgICAvKioKICAgICAqIEB2YXIgVXVpZEludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGFhZ3VpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY3JlZGVudGlhbFB1YmxpY0tleTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdXNlckhhbmRsZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkY291bnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgJG90aGVyVUk7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHRyYW5zcG9ydHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcHVibGljS2V5Q3JlZGVudGlhbElkLCBzdHJpbmcgJHR5cGUsIGFycmF5ICR0cmFuc3BvcnRzLCBzdHJpbmcgJGF0dGVzdGF0aW9uVHlwZSwgVHJ1c3RQYXRoICR0cnVzdFBhdGgsIFV1aWRJbnRlcmZhY2UgJGFhZ3VpZCwgc3RyaW5nICRjcmVkZW50aWFsUHVibGljS2V5LCBzdHJpbmcgJHVzZXJIYW5kbGUsIGludCAkY291bnRlciwgP2FycmF5ICRvdGhlclVJID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkID0gJHB1YmxpY0tleUNyZWRlbnRpYWxJZDsKICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOwogICAgICAgICR0aGlzLT50cmFuc3BvcnRzID0gJHRyYW5zcG9ydHM7CiAgICAgICAgJHRoaXMtPmFhZ3VpZCA9ICRhYWd1aWQ7CiAgICAgICAgJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkgPSAkY3JlZGVudGlhbFB1YmxpY0tleTsKICAgICAgICAkdGhpcy0+dXNlckhhbmRsZSA9ICR1c2VySGFuZGxlOwogICAgICAgICR0aGlzLT5jb3VudGVyID0gJGNvdW50ZXI7CiAgICAgICAgJHRoaXMtPmF0dGVzdGF0aW9uVHlwZSA9ICRhdHRlc3RhdGlvblR5cGU7CiAgICAgICAgJHRoaXMtPnRydXN0UGF0aCA9ICR0cnVzdFBhdGg7CiAgICAgICAgJHRoaXMtPm90aGVyVUkgPSAkb3RoZXJVSTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5Q3JlZGVudGlhbElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcigpOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgogICAgewogICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IoCiAgICAgICAgICAgICR0aGlzLT50eXBlLAogICAgICAgICAgICAkdGhpcy0+cHVibGljS2V5Q3JlZGVudGlhbElkLAogICAgICAgICAgICAkdGhpcy0+dHJhbnNwb3J0cwogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dGVzdGF0aW9uVHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJ1c3RQYXRoKCk6IFRydXN0UGF0aAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dHJ1c3RQYXRoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRlc3RlZENyZWRlbnRpYWxEYXRhKCk6IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEF0dGVzdGVkQ3JlZGVudGlhbERhdGEoCiAgICAgICAgICAgICR0aGlzLT5hYWd1aWQsCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsSWQsCiAgICAgICAgICAgICR0aGlzLT5jcmVkZW50aWFsUHVibGljS2V5CiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFuc3BvcnRzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc3BvcnRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBYWd1aWQoKTogVXVpZEludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWFndWlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVkZW50aWFsUHVibGljS2V5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlZGVudGlhbFB1YmxpY0tleTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckhhbmRsZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVzZXJIYW5kbGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvdW50ZXIoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb3VudGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb3VudGVyKGludCAkY291bnRlcik6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+Y291bnRlciA9ICRjb3VudGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdGhlclVJKCk6ID9hcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3RoZXJVSTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3RoZXJVSSg/YXJyYXkgJG90aGVyVUkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPm90aGVyVUkgPSAkb3RoZXJVSTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tQXJyYXkoYXJyYXkgJGRhdGEpOiBzZWxmCiAgICB7CiAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKGdldF9jbGFzc192YXJzKHNlbGY6OmNsYXNzKSk7CiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICBpZiAoJ290aGVyVUknID09PSAka2V5KSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkZGF0YSwgJGtleSwgc3ByaW50ZignVGhlIHBhcmFtZXRlciAiJXMiIGlzIG1pc3NpbmcnLCAka2V5KSk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIDM2ID09PSBtYl9zdHJsZW4oJGRhdGFbJ2FhZ3VpZCddLCAnOGJpdCcpOgogICAgICAgICAgICAgICAgJHV1aWQgPSBVdWlkOjpmcm9tU3RyaW5nKCRkYXRhWydhYWd1aWQnXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogLy8gS2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBmb3JtYXQKICAgICAgICAgICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZSgkZGF0YVsnYWFndWlkJ10sIHRydWUpOwogICAgICAgICAgICAgICAgJHV1aWQgPSBVdWlkOjpmcm9tQnl0ZXMoJGRlY29kZWQpOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ3B1YmxpY0tleUNyZWRlbnRpYWxJZCddKSwKICAgICAgICAgICAgICAgICRkYXRhWyd0eXBlJ10sCiAgICAgICAgICAgICAgICAkZGF0YVsndHJhbnNwb3J0cyddLAogICAgICAgICAgICAgICAgJGRhdGFbJ2F0dGVzdGF0aW9uVHlwZSddLAogICAgICAgICAgICAgICAgVHJ1c3RQYXRoTG9hZGVyOjpsb2FkVHJ1c3RQYXRoKCRkYXRhWyd0cnVzdFBhdGgnXSksCiAgICAgICAgICAgICAgICAkdXVpZCwKICAgICAgICAgICAgICAgIEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydjcmVkZW50aWFsUHVibGljS2V5J10pLAogICAgICAgICAgICAgICAgQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ3VzZXJIYW5kbGUnXSksCiAgICAgICAgICAgICAgICAkZGF0YVsnY291bnRlciddLAogICAgICAgICAgICAgICAgJGRhdGFbJ290aGVyVUknXSA/PyBudWxsCiAgICAgICAgICAgICk7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGRhdGEnLCAkdGhyb3dhYmxlLT5nZXRDb2RlKCksICR0aHJvd2FibGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdwdWJsaWNLZXlDcmVkZW50aWFsSWQnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsSWQpLAogICAgICAgICAgICAndHlwZScgPT4gJHRoaXMtPnR5cGUsCiAgICAgICAgICAgICd0cmFuc3BvcnRzJyA9PiAkdGhpcy0+dHJhbnNwb3J0cywKICAgICAgICAgICAgJ2F0dGVzdGF0aW9uVHlwZScgPT4gJHRoaXMtPmF0dGVzdGF0aW9uVHlwZSwKICAgICAgICAgICAgJ3RydXN0UGF0aCcgPT4gJHRoaXMtPnRydXN0UGF0aC0+anNvblNlcmlhbGl6ZSgpLAogICAgICAgICAgICAnYWFndWlkJyA9PiAkdGhpcy0+YWFndWlkLT50b1N0cmluZygpLAogICAgICAgICAgICAnY3JlZGVudGlhbFB1YmxpY0tleScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNyZWRlbnRpYWxQdWJsaWNLZXkpLAogICAgICAgICAgICAndXNlckhhbmRsZScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPnVzZXJIYW5kbGUpLAogICAgICAgICAgICAnY291bnRlcicgPT4gJHRoaXMtPmNvdW50ZXIsCiAgICAgICAgICAgICdvdGhlclVJJyA9PiAkdGhpcy0+b3RoZXJVSSwKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialSourceRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kT25lQnlDcmVkZW50aWFsSWQoc3RyaW5nICRwdWJsaWNLZXlDcmVkZW50aWFsSWQpOiA/UHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kQWxsRm9yVXNlckVudGl0eShQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkpOiBhcnJheTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZUNyZWRlbnRpYWxTb3VyY2UoUHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSAkcHVibGljS2V5Q3JlZGVudGlhbFNvdXJjZSk6IHZvaWQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/PublicKeyCredentialUserEntity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBmdW5jdGlvbiBTYWZlXGJhc2U2NF9kZWNvZGU7CnVzZSBmdW5jdGlvbiBTYWZlXGpzb25fZGVjb2RlOwoKY2xhc3MgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRpZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGlzcGxheU5hbWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkbmFtZSwgc3RyaW5nICRpZCwgc3RyaW5nICRkaXNwbGF5TmFtZSwgP3N0cmluZyAkaWNvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbmFtZSwgJGljb24pOwogICAgICAgIEFzc2VydGlvbjo6bWF4TGVuZ3RoKCRpZCwgNjQsICdVc2VyIElEIG1heCBsZW5ndGggaXMgNjQgYnl0ZXMnLCAnaWQnLCAnOGJpdCcpOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgICAgICAkdGhpcy0+ZGlzcGxheU5hbWUgPSAkZGlzcGxheU5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGlzcGxheU5hbWU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tU3RyaW5nKHN0cmluZyAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICBBc3NlcnRpb246OmlzQXJyYXkoJGRhdGEsICdJbnZhbGlkIGRhdGEnKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkanNvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICBBc3NlcnRpb246OmtleUV4aXN0cygkanNvbiwgJ25hbWUnLCAnSW52YWxpZCBpbnB1dC4gIm5hbWUiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdpZCcsICdJbnZhbGlkIGlucHV0LiAiaWQiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGpzb24sICdkaXNwbGF5TmFtZScsICdJbnZhbGlkIGlucHV0LiAiZGlzcGxheU5hbWUiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgJGlkID0gYmFzZTY0X2RlY29kZSgkanNvblsnaWQnXSwgdHJ1ZSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgJGpzb25bJ25hbWUnXSwKICAgICAgICAgICAgJGlkLAogICAgICAgICAgICAkanNvblsnZGlzcGxheU5hbWUnXSwKICAgICAgICAgICAgJGpzb25bJ2ljb24nXSA/PyBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgICRqc29uID0gcGFyZW50Ojpqc29uU2VyaWFsaXplKCk7CiAgICAgICAgJGpzb25bJ2lkJ10gPSBiYXNlNjRfZW5jb2RlKCR0aGlzLT5pZCk7CiAgICAgICAgJGpzb25bJ2Rpc3BsYXlOYW1lJ10gPSAkdGhpcy0+ZGlzcGxheU5hbWU7CgogICAgICAgIHJldHVybiAkanNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Server.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDb3NlXEFsZ29yaXRobVxBbGdvcml0aG07CnVzZSBDb3NlXEFsZ29yaXRobVxNYW5hZ2VyRmFjdG9yeTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFQ0RTQTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxFZERTQTsKdXNlIENvc2VcQWxnb3JpdGhtXFNpZ25hdHVyZVxSU0E7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXFJTMjU2Owp1c2UgUHNyXEh0dHBcQ2xpZW50XENsaWVudEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFBzclxMb2dcTnVsbExvZ2dlcjsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBbmRyb2lkU2FmZXR5TmV0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0Owp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyOwp1c2UgV2ViYXV0aG5cQXR0ZXN0YXRpb25TdGF0ZW1lbnRcRmlkb1UyRkF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydDsKdXNlIFdlYmF1dGhuXEF0dGVzdGF0aW9uU3RhdGVtZW50XE5vbmVBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxQYWNrZWRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdHRlc3RhdGlvblN0YXRlbWVudFxUUE1BdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQ7CnVzZSBXZWJhdXRoblxBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNcQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOwp1c2UgV2ViYXV0aG5cQXV0aGVudGljYXRpb25FeHRlbnNpb25zXEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwp1c2UgV2ViYXV0aG5cQ291bnRlclxDb3VudGVyQ2hlY2tlcjsKdXNlIFdlYmF1dGhuXE1ldGFkYXRhU2VydmljZVxNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CnVzZSBXZWJhdXRoblxUb2tlbkJpbmRpbmdcSWdub3JlVG9rZW5CaW5kaW5nSGFuZGxlcjsKdXNlIFdlYmF1dGhuXFRva2VuQmluZGluZ1xUb2tlbkJpbmRpbmdIYW5kbGVyOwoKY2xhc3MgU2VydmVyCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0aW1lb3V0ID0gNjAwMDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGNoYWxsZW5nZVNpemUgPSAzMjsKCiAgICAvKioKICAgICAqIEB2YXIgUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5CiAgICAgKi8KICAgIHByaXZhdGUgJHJwRW50aXR5OwoKICAgIC8qKgogICAgICogQHZhciBNYW5hZ2VyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRjb3NlQWxnb3JpdGhtTWFuYWdlckZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5CiAgICAgKi8KICAgIHByaXZhdGUgJHB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBUb2tlbkJpbmRpbmdIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHRva2VuQmluZGluZ0hhbmRsZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRzZWxlY3RlZEFsZ29yaXRobXM7CgogICAgLyoqCiAgICAgKiBAdmFyIE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKCiAgICAvKioKICAgICAqIEB2YXIgQ2xpZW50SW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaHR0cENsaWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZ29vZ2xlQXBpS2V5OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHJlcXVlc3RGYWN0b3J5OwoKICAgIC8qKgogICAgICogQHZhciBDb3VudGVyQ2hlY2tlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGNvdW50ZXJDaGVja2VyOwoKICAgIC8qKgogICAgICogQHZhciBMb2dnZXJJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSAkbG9nZ2VyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlICRzZWN1cmVkUmVseWluZ1BhcnR5SWQgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICRyZWx5aW5nUGFydHksIFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2VSZXBvc2l0b3J5ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwgP01ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSAkbWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSkgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcignVGhlIGFyZ3VtZW50ICJtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkiIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA0LjAuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCAic2V0TWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5Ii4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5ycEVudGl0eSA9ICRyZWx5aW5nUGFydHk7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9IG5ldyBOdWxsTG9nZ2VyKCk7CgogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnkgPSBuZXcgTWFuYWdlckZhY3RvcnkoKTsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJ1JTMScsIG5ldyBSU0FcUlMxKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlMyNTYnLCBuZXcgUlNBXFJTMjU2KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlMzODQnLCBuZXcgUlNBXFJTMzg0KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUlM1MTInLCBuZXcgUlNBXFJTNTEyKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFMyNTYnLCBuZXcgUlNBXFBTMjU2KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFMzODQnLCBuZXcgUlNBXFBTMzg0KCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnUFM1MTInLCBuZXcgUlNBXFBTNTEyKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnRVMyNTYnLCBuZXcgRUNEU0FcRVMyNTYoKSk7CiAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+YWRkKCdFUzI1NksnLCBuZXcgRUNEU0FcRVMyNTZLKCkpOwogICAgICAgICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmFkZCgnRVMzODQnLCBuZXcgRUNEU0FcRVMzODQoKSk7CiAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+YWRkKCdFUzUxMicsIG5ldyBFQ0RTQVxFUzUxMigpKTsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJ0VkMjU1MTknLCBuZXcgRWREU0FcRWQyNTUxOSgpKTsKCiAgICAgICAgJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyA9IFsnUlMyNTYnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVM1MTInLCAnRWQyNTUxOSddOwogICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeTsKICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlciA9IG5ldyBJZ25vcmVUb2tlbkJpbmRpbmdIYW5kbGVyKCk7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gbmV3IEV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyKCk7CiAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSA9ICRtZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeShNZXRhZGF0YVN0YXRlbWVudFJlcG9zaXRvcnkgJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bWV0YWRhdGFTdGF0ZW1lbnRSZXBvc2l0b3J5ID0gJG1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRzZWxlY3RlZEFsZ29yaXRobXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlbGVjdGVkQWxnb3JpdGhtcyhhcnJheSAkc2VsZWN0ZWRBbGdvcml0aG1zKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5zZWxlY3RlZEFsZ29yaXRobXMgPSAkc2VsZWN0ZWRBbGdvcml0aG1zOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFRva2VuQmluZGluZ0hhbmRsZXIoVG9rZW5CaW5kaW5nSGFuZGxlciAkdG9rZW5CaW5kaW5nSGFuZGxlcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+dG9rZW5CaW5kaW5nSGFuZGxlciA9ICR0b2tlbkJpbmRpbmdIYW5kbGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZEFsZ29yaXRobShzdHJpbmcgJGFsaWFzLCBBbGdvcml0aG0gJGFsZ29yaXRobSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJGFsaWFzLCAkYWxnb3JpdGhtKTsKICAgICAgICAkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zW10gPSAkYWxpYXM7CiAgICAgICAgJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyA9IGFycmF5X3VuaXF1ZSgkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlcihFeHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciAkZXh0ZW5zaW9uT3V0cHV0Q2hlY2tlckhhbmRsZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyID0gJGV4dGVuc2lvbk91dHB1dENoZWNrZXJIYW5kbGVyOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHNlY3VyZWRSZWx5aW5nUGFydHlJZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VjdXJlZFJlbHlpbmdQYXJ0eUlkKGFycmF5ICRzZWN1cmVkUmVseWluZ1BhcnR5SWQpOiBzZWxmCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjphbGxTdHJpbmcoJHNlY3VyZWRSZWx5aW5nUGFydHlJZCwgJ0ludmFsaWQgbGlzdC4gU2hhbGwgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKTsKICAgICAgICAkdGhpcy0+c2VjdXJlZFJlbHlpbmdQYXJ0eUlkID0gJHNlY3VyZWRSZWx5aW5nUGFydHlJZDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gJGV4Y2x1ZGVkUHVibGljS2V5RGVzY3JpcHRvcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyhQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlckVudGl0eSwgP3N0cmluZyAkYXR0ZXN0YXRpb25Nb2RlID0gbnVsbCwgYXJyYXkgJGV4Y2x1ZGVkUHVibGljS2V5RGVzY3JpcHRvcnMgPSBbXSwgP0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAkY3JpdGVyaWEgPSBudWxsLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCk6IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMKICAgIHsKICAgICAgICAkY29zZUFsZ29yaXRobU1hbmFnZXIgPSAkdGhpcy0+Y29zZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5jcmVhdGUoJHRoaXMtPnNlbGVjdGVkQWxnb3JpdGhtcyk7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzTGlzdCA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRjb3NlQWxnb3JpdGhtTWFuYWdlci0+YWxsKCkgYXMgJGFsZ29yaXRobSkgewogICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNMaXN0W10gPSBuZXcgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMoCiAgICAgICAgICAgICAgICBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjo6Q1JFREVOVElBTF9UWVBFX1BVQkxJQ19LRVksCiAgICAgICAgICAgICAgICAkYWxnb3JpdGhtOjppZGVudGlmaWVyKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGNyaXRlcmlhID0gJGNyaXRlcmlhID8/IG5ldyBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEoKTsKICAgICAgICAkZXh0ZW5zaW9ucyA9ICRleHRlbnNpb25zID8/IG5ldyBBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoKTsKICAgICAgICAkY2hhbGxlbmdlID0gcmFuZG9tX2J5dGVzKCR0aGlzLT5jaGFsbGVuZ2VTaXplKTsKCiAgICAgICAgcmV0dXJuIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICR0aGlzLT5ycEVudGl0eSwKICAgICAgICAgICAgICAgICR1c2VyRW50aXR5LAogICAgICAgICAgICAgICAgJGNoYWxsZW5nZSwKICAgICAgICAgICAgICAgICRwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVyc0xpc3QKICAgICAgICAgICAgKQogICAgICAgICAgICAtPmV4Y2x1ZGVDcmVkZW50aWFscygkZXhjbHVkZWRQdWJsaWNLZXlEZXNjcmlwdG9ycykKICAgICAgICAgICAgLT5zZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKCRjcml0ZXJpYSkKICAgICAgICAgICAgLT5zZXRBdHRlc3RhdGlvbigkYXR0ZXN0YXRpb25Nb2RlID8/IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkFUVEVTVEFUSU9OX0NPTlZFWUFOQ0VfUFJFRkVSRU5DRV9OT05FKQogICAgICAgICAgICAtPnNldEV4dGVuc2lvbnMoJGV4dGVuc2lvbnMpCiAgICAgICAgICAgIC0+c2V0VGltZW91dCgkdGhpcy0+dGltZW91dCkKICAgICAgICA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXSAkYWxsb3dlZFB1YmxpY0tleURlc2NyaXB0b3JzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZVB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyg/c3RyaW5nICR1c2VyVmVyaWZpY2F0aW9uID0gbnVsbCwgYXJyYXkgJGFsbG93ZWRQdWJsaWNLZXlEZXNjcmlwdG9ycyA9IFtdLCA/QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICRleHRlbnNpb25zID0gbnVsbCk6IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucwogICAgewogICAgICAgIHJldHVybiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmNyZWF0ZShyYW5kb21fYnl0ZXMoJHRoaXMtPmNoYWxsZW5nZVNpemUpKQogICAgICAgICAgICAtPnNldFJwSWQoJHRoaXMtPnJwRW50aXR5LT5nZXRJZCgpKQogICAgICAgICAgICAtPnNldFVzZXJWZXJpZmljYXRpb24oJHVzZXJWZXJpZmljYXRpb24gPz8gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpVU0VSX1ZFUklGSUNBVElPTl9SRVFVSVJFTUVOVF9QUkVGRVJSRUQpCiAgICAgICAgICAgIC0+YWxsb3dDcmVkZW50aWFscygkYWxsb3dlZFB1YmxpY0tleURlc2NyaXB0b3JzKQogICAgICAgICAgICAtPnNldFRpbWVvdXQoJHRoaXMtPnRpbWVvdXQpCiAgICAgICAgICAgIC0+c2V0RXh0ZW5zaW9ucygkZXh0ZW5zaW9ucyA/PyBuZXcgQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKCkpCiAgICAgICAgOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQW5kQ2hlY2tBdHRlc3RhdGlvblJlc3BvbnNlKHN0cmluZyAkZGF0YSwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAkcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkc2VydmVyUmVxdWVzdCk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICR0aGlzLT5nZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKCk7CiAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyID0gQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI6OmNyZWF0ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcikKICAgICAgICAgICAgLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcikKICAgICAgICA7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIgPSBQdWJsaWNLZXlDcmVkZW50aWFsTG9hZGVyOjpjcmVhdGUoJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyKQogICAgICAgICAgICAtPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKQogICAgICAgIDsKCiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSAkcHVibGljS2V5Q3JlZGVudGlhbExvYWRlci0+bG9hZCgkZGF0YSk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsLT5nZXRSZXNwb25zZSgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsIEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlOjpjbGFzcywgJ05vdCBhbiBhdXRoZW50aWNhdG9yIGF0dGVzdGF0aW9uIHJlc3BvbnNlJyk7CgogICAgICAgICRhdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZVZhbGlkYXRvciA9IG5ldyBBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZVZhbGlkYXRvcigKICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIsCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwKICAgICAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIsCiAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciwKICAgICAgICAgICAgJHRoaXMtPm1ldGFkYXRhU3RhdGVtZW50UmVwb3NpdG9yeQogICAgICAgICk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlVmFsaWRhdG9yLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcik7CgogICAgICAgIHJldHVybiAkYXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPmNoZWNrKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsICRwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCAkc2VydmVyUmVxdWVzdCwgJHRoaXMtPnNlY3VyZWRSZWx5aW5nUGFydHlJZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRBbmRDaGVja0Fzc2VydGlvblJlc3BvbnNlKHN0cmluZyAkZGF0YSwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICRwdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsID9QdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAkdXNlckVudGl0eSwgU2VydmVyUmVxdWVzdEludGVyZmFjZSAkc2VydmVyUmVxdWVzdCk6IFB1YmxpY0tleUNyZWRlbnRpYWxTb3VyY2UKICAgIHsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlciA9ICR0aGlzLT5nZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyKCk7CiAgICAgICAgJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyID0gQXR0ZXN0YXRpb25PYmplY3RMb2FkZXI6OmNyZWF0ZSgkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcikKICAgICAgICAgICAgLT5zZXRMb2dnZXIoJHRoaXMtPmxvZ2dlcikKICAgICAgICA7CiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxMb2FkZXIgPSBQdWJsaWNLZXlDcmVkZW50aWFsTG9hZGVyOjpjcmVhdGUoJGF0dGVzdGF0aW9uT2JqZWN0TG9hZGVyKQogICAgICAgICAgICAtPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKQogICAgICAgIDsKCiAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWwgPSAkcHVibGljS2V5Q3JlZGVudGlhbExvYWRlci0+bG9hZCgkZGF0YSk7CiAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSA9ICRwdWJsaWNLZXlDcmVkZW50aWFsLT5nZXRSZXNwb25zZSgpOwogICAgICAgIEFzc2VydGlvbjo6aXNJbnN0YW5jZU9mKCRhdXRoZW50aWNhdG9yUmVzcG9uc2UsIEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZTo6Y2xhc3MsICdOb3QgYW4gYXV0aGVudGljYXRvciBhc3NlcnRpb24gcmVzcG9uc2UnKTsKCiAgICAgICAgJGF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZVZhbGlkYXRvciA9IG5ldyBBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3IoCiAgICAgICAgICAgICR0aGlzLT5wdWJsaWNLZXlDcmVkZW50aWFsU291cmNlUmVwb3NpdG9yeSwKICAgICAgICAgICAgJHRoaXMtPnRva2VuQmluZGluZ0hhbmRsZXIsCiAgICAgICAgICAgICR0aGlzLT5leHRlbnNpb25PdXRwdXRDaGVja2VySGFuZGxlciwKICAgICAgICAgICAgJHRoaXMtPmNvc2VBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeS0+Y3JlYXRlKCR0aGlzLT5zZWxlY3RlZEFsZ29yaXRobXMpLAogICAgICAgICAgICAkdGhpcy0+Y291bnRlckNoZWNrZXIKICAgICAgICApOwogICAgICAgICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPnNldExvZ2dlcigkdGhpcy0+bG9nZ2VyKTsKCiAgICAgICAgcmV0dXJuICRhdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VWYWxpZGF0b3ItPmNoZWNrKAogICAgICAgICAgICAkcHVibGljS2V5Q3JlZGVudGlhbC0+Z2V0UmF3SWQoKSwKICAgICAgICAgICAgJGF1dGhlbnRpY2F0b3JSZXNwb25zZSwKICAgICAgICAgICAgJHB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucywKICAgICAgICAgICAgJHNlcnZlclJlcXVlc3QsCiAgICAgICAgICAgIG51bGwgIT09ICR1c2VyRW50aXR5ID8gJHVzZXJFbnRpdHktPmdldElkKCkgOiBudWxsLAogICAgICAgICAgICAkdGhpcy0+c2VjdXJlZFJlbHlpbmdQYXJ0eUlkCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q291bnRlckNoZWNrZXIoQ291bnRlckNoZWNrZXIgJGNvdW50ZXJDaGVja2VyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5jb3VudGVyQ2hlY2tlciA9ICRjb3VudGVyQ2hlY2tlcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2dnZXIoTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXI7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5mb3JjZUFuZHJvaWRTYWZldHlOZXRWZXJpZmljYXRpb24oQ2xpZW50SW50ZXJmYWNlICRjbGllbnQsIHN0cmluZyAkYXBpS2V5LCBSZXF1ZXN0RmFjdG9yeUludGVyZmFjZSAkcmVxdWVzdEZhY3RvcnkpOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSAkY2xpZW50OwogICAgICAgICR0aGlzLT5nb29nbGVBcGlLZXkgPSAkYXBpS2V5OwogICAgICAgICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSA9ICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcigpOiBBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyCiAgICB7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXIgPSBuZXcgQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcigpOwogICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5hZGQobmV3IE5vbmVBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoKSk7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZChuZXcgRmlkb1UyRkF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCgpKTsKICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKFJTMjU2OjpjbGFzcykgJiYgY2xhc3NfZXhpc3RzKEpXS0ZhY3Rvcnk6OmNsYXNzKSkgewogICAgICAgICAgICAkYW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCA9IG5ldyBBbmRyb2lkU2FmZXR5TmV0QXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0KCk7CiAgICAgICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+aHR0cENsaWVudCAmJiBudWxsICE9PSAkdGhpcy0+Z29vZ2xlQXBpS2V5ICYmIG51bGwgIT09ICR0aGlzLT5yZXF1ZXN0RmFjdG9yeSkgewogICAgICAgICAgICAgICAgJGFuZHJvaWRTYWZldHlOZXRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQKICAgICAgICAgICAgICAgICAgICAtPmVuYWJsZUFwaVZlcmlmaWNhdGlvbigkdGhpcy0+aHR0cENsaWVudCwgJHRoaXMtPmdvb2dsZUFwaUtleSwgJHRoaXMtPnJlcXVlc3RGYWN0b3J5KQogICAgICAgICAgICAgICAgICAgIC0+c2V0TGVld2F5KDIwMDApCiAgICAgICAgICAgICAgICAgICAgLT5zZXRNYXhBZ2UoNjAwMDApCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZCgkYW5kcm9pZFNhZmV0eU5ldEF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydCk7CiAgICAgICAgfQogICAgICAgICRhdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnRNYW5hZ2VyLT5hZGQobmV3IEFuZHJvaWRLZXlBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoKSk7CiAgICAgICAgJGF0dGVzdGF0aW9uU3RhdGVtZW50U3VwcG9ydE1hbmFnZXItPmFkZChuZXcgVFBNQXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0KCkpOwogICAgICAgICRjb3NlQWxnb3JpdGhtTWFuYWdlciA9ICR0aGlzLT5jb3NlQWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmNyZWF0ZSgkdGhpcy0+c2VsZWN0ZWRBbGdvcml0aG1zKTsKICAgICAgICAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlci0+YWRkKG5ldyBQYWNrZWRBdHRlc3RhdGlvblN0YXRlbWVudFN1cHBvcnQoJGNvc2VBbGdvcml0aG1NYW5hZ2VyKSk7CgogICAgICAgIHJldHVybiAkYXR0ZXN0YXRpb25TdGF0ZW1lbnRTdXBwb3J0TWFuYWdlcjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/StringStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuOwoKdXNlIEFzc2VydFxBc3NlcnRpb247CnVzZSBDQk9SXFN0cmVhbTsKdXNlIGZ1bmN0aW9uIFNhZmVcZmNsb3NlOwp1c2UgZnVuY3Rpb24gU2FmZVxmb3BlbjsKdXNlIGZ1bmN0aW9uIFNhZmVcZnJlYWQ7CnVzZSBmdW5jdGlvbiBTYWZlXGZ3cml0ZTsKdXNlIGZ1bmN0aW9uIFNhZmVccmV3aW5kOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKZmluYWwgY2xhc3MgU3RyaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtCnsKICAgIC8qKgogICAgICogQHZhciByZXNvdXJjZQogICAgICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkdG90YWxSZWFkID0gMDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRkYXRhKQogICAgewogICAgICAgICR0aGlzLT5sZW5ndGggPSBtYl9zdHJsZW4oJGRhdGEsICc4Yml0Jyk7CiAgICAgICAgJHJlc291cmNlID0gZm9wZW4oJ3BocDovL21lbW9yeScsICdyYisnKTsKICAgICAgICBmd3JpdGUoJHJlc291cmNlLCAkZGF0YSk7CiAgICAgICAgcmV3aW5kKCRyZXNvdXJjZSk7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkcmVzb3VyY2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoaW50ICRsZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoMCA9PT0gJGxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRyZWFkID0gZnJlYWQoJHRoaXMtPmRhdGEsICRsZW5ndGgpOwogICAgICAgICRieXRlc1JlYWQgPSBtYl9zdHJsZW4oJHJlYWQsICc4Yml0Jyk7CiAgICAgICAgQXNzZXJ0aW9uOjpsZW5ndGgoJHJlYWQsICRsZW5ndGgsIHNwcmludGYoJ091dCBvZiByYW5nZS4gRXhwZWN0ZWQ6ICVkLCByZWFkOiAlZC4nLCAkbGVuZ3RoLCAkYnl0ZXNSZWFkKSwgbnVsbCwgJzhiaXQnKTsKICAgICAgICAkdGhpcy0+dG90YWxSZWFkICs9ICRieXRlc1JlYWQ7CgogICAgICAgIHJldHVybiAkcmVhZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZAogICAgewogICAgICAgIGZjbG9zZSgkdGhpcy0+ZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRU9GKCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRvdGFsUmVhZCA9PT0gJHRoaXMtPmxlbmd0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/IgnoreTokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CgpmaW5hbCBjbGFzcyBJZ25vcmVUb2tlbkJpbmRpbmdIYW5kbGVyIGltcGxlbWVudHMgVG9rZW5CaW5kaW5nSGFuZGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soVG9rZW5CaW5kaW5nICR0b2tlbkJpbmRpbmcsIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiB2b2lkCiAgICB7CiAgICAgICAgLy9Eb2VzIG5vdGhpbmcKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/SecTokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgU2VjVG9rZW5CaW5kaW5nSGFuZGxlciBpbXBsZW1lbnRzIFRva2VuQmluZGluZ0hhbmRsZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKFRva2VuQmluZGluZyAkdG9rZW5CaW5kaW5nLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogdm9pZAogICAgewogICAgICAgIGlmIChUb2tlbkJpbmRpbmc6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgIT09ICR0b2tlbkJpbmRpbmctPmdldFN0YXR1cygpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIEFzc2VydGlvbjo6dHJ1ZSgkcmVxdWVzdC0+aGFzSGVhZGVyKCdTZWMtVG9rZW4tQmluZGluZycpLCAnVGhlIGhlYWRlciBwYXJhbWV0ZXIgIlNlYy1Ub2tlbi1CaW5kaW5nIiBpcyBtaXNzaW5nLicpOwogICAgICAgICR0b2tlbkJpbmRpbmdJZHMgPSAkcmVxdWVzdC0+Z2V0SGVhZGVyKCdTZWMtVG9rZW4tQmluZGluZycpOwogICAgICAgIEFzc2VydGlvbjo6Y291bnQoJHRva2VuQmluZGluZ0lkcywgMSwgJ1RoZSBoZWFkZXIgcGFyYW1ldGVyICJTZWMtVG9rZW4tQmluZGluZyIgaXMgaW52YWxpZC4nKTsKICAgICAgICAkdG9rZW5CaW5kaW5nSWQgPSByZXNldCgkdG9rZW5CaW5kaW5nSWRzKTsKICAgICAgICBBc3NlcnRpb246OmVxKCR0b2tlbkJpbmRpbmdJZCwgJHRva2VuQmluZGluZy0+Z2V0SWQoKSwgJ1RoZSBoZWFkZXIgcGFyYW1ldGVyICJTZWMtVG9rZW4tQmluZGluZyIgaXMgaW52YWxpZC4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBinding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBmdW5jdGlvbiBTYWZlXHNwcmludGY7CgpjbGFzcyBUb2tlbkJpbmRpbmcKewogICAgcHVibGljIGNvbnN0IFRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgPSAncHJlc2VudCc7CiAgICBwdWJsaWMgY29uc3QgVE9LRU5fQklORElOR19TVEFUVVNfU1VQUE9SVEVEID0gJ3N1cHBvcnRlZCc7CiAgICBwdWJsaWMgY29uc3QgVE9LRU5fQklORElOR19TVEFUVVNfTk9UX1NVUFBPUlRFRCA9ICdub3Qtc3VwcG9ydGVkJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkaWQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkc3RhdHVzLCA/c3RyaW5nICRpZCkKICAgIHsKICAgICAgICBBc3NlcnRpb246OmZhbHNlKHNlbGY6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgPT09ICRzdGF0dXMgJiYgbnVsbCA9PT0gJGlkLCAnVGhlIG1lbWJlciAiaWQiIGlzIHJlcXVpcmVkIHdoZW4gc3RhdHVzIGlzICJwcmVzZW50IicpOwogICAgICAgICR0aGlzLT5zdGF0dXMgPSAkc3RhdHVzOwogICAgICAgICR0aGlzLT5pZCA9ICRpZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZFtdICRqc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRm9ybUFycmF5KGFycmF5ICRqc29uKTogc2VsZgogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRqc29uLCAnc3RhdHVzJywgJ1RoZSBtZW1iZXIgInN0YXR1cyIgaXMgcmVxdWlyZWQnKTsKICAgICAgICAkc3RhdHVzID0gJGpzb25bJ3N0YXR1cyddOwogICAgICAgIEFzc2VydGlvbjo6aW5BcnJheSgKICAgICAgICAgICAgJHN0YXR1cywKICAgICAgICAgICAgc2VsZjo6Z2V0U3VwcG9ydGVkU3RhdHVzKCksCiAgICAgICAgICAgIHNwcmludGYoJ1RoZSBtZW1iZXIgInN0YXR1cyIgaXMgaW52YWxpZC4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICVzJywgaW1wbG9kZSgnLCAnLCBzZWxmOjpnZXRTdXBwb3J0ZWRTdGF0dXMoKSkpCiAgICAgICAgKTsKICAgICAgICAkaWQgPSBhcnJheV9rZXlfZXhpc3RzKCdpZCcsICRqc29uKSA/IEJhc2U2NFVybDo6ZGVjb2RlKCRqc29uWydpZCddKSA6IG51bGw7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkc3RhdHVzLCAkaWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRTdXBwb3J0ZWRTdGF0dXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBzZWxmOjpUT0tFTl9CSU5ESU5HX1NUQVRVU19QUkVTRU5ULAogICAgICAgICAgICBzZWxmOjpUT0tFTl9CSU5ESU5HX1NUQVRVU19TVVBQT1JURUQsCiAgICAgICAgICAgIHNlbGY6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX05PVF9TVVBQT1JURUQsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBindingHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2U7CgppbnRlcmZhY2UgVG9rZW5CaW5kaW5nSGFuZGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soVG9rZW5CaW5kaW5nICR0b2tlbkJpbmRpbmcsIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiB2b2lkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TokenBinding/TokenBindingNotSupportedHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRva2VuQmluZGluZzsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwoKZmluYWwgY2xhc3MgVG9rZW5CaW5kaW5nTm90U3VwcG9ydGVkSGFuZGxlciBpbXBsZW1lbnRzIFRva2VuQmluZGluZ0hhbmRsZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrKFRva2VuQmluZGluZyAkdG9rZW5CaW5kaW5nLCBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTogdm9pZAogICAgewogICAgICAgIEFzc2VydGlvbjo6dHJ1ZShUb2tlbkJpbmRpbmc6OlRPS0VOX0JJTkRJTkdfU1RBVFVTX1BSRVNFTlQgIT09ICR0b2tlbkJpbmRpbmctPmdldFN0YXR1cygpLCAnVG9rZW4gYmluZGluZyBub3Qgc3VwcG9ydGVkLicpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/CertificateTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKZmluYWwgY2xhc3MgQ2VydGlmaWNhdGVUcnVzdFBhdGggaW1wbGVtZW50cyBUcnVzdFBhdGgKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgJGNlcnRpZmljYXRlczsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkY2VydGlmaWNhdGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY2VydGlmaWNhdGVzKQogICAgewogICAgICAgICR0aGlzLT5jZXJ0aWZpY2F0ZXMgPSAkY2VydGlmaWNhdGVzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VydGlmaWNhdGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jZXJ0aWZpY2F0ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUFycmF5KGFycmF5ICRkYXRhKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd4NWMnLCAnVGhlIHRydXN0IHBhdGggdHlwZSBpcyBpbnZhbGlkJyk7CgogICAgICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVUcnVzdFBhdGgoJGRhdGFbJ3g1YyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0eXBlJyA9PiBzZWxmOjpjbGFzcywKICAgICAgICAgICAgJ3g1YycgPT4gJHRoaXMtPmNlcnRpZmljYXRlcywKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/EcdaaKeyIdTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBBc3NlcnRcQXNzZXJ0aW9uOwoKZmluYWwgY2xhc3MgRWNkYWFLZXlJZFRydXN0UGF0aCBpbXBsZW1lbnRzIFRydXN0UGF0aAp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGVjZGFhS2V5SWQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZWNkYWFLZXlJZCkKICAgIHsKICAgICAgICAkdGhpcy0+ZWNkYWFLZXlJZCA9ICRlY2RhYUtleUlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFY2RhYUtleUlkKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWNkYWFLZXlJZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAndHlwZScgPT4gc2VsZjo6Y2xhc3MsCiAgICAgICAgICAgICdlY2RhYUtleUlkJyA9PiAkdGhpcy0+ZWNkYWFLZXlJZCwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IFRydXN0UGF0aAogICAgewogICAgICAgIEFzc2VydGlvbjo6a2V5RXhpc3RzKCRkYXRhLCAnZWNkYWFLZXlJZCcsICdUaGUgdHJ1c3QgcGF0aCB0eXBlIGlzIGludmFsaWQnKTsKCiAgICAgICAgcmV0dXJuIG5ldyBFY2RhYUtleUlkVHJ1c3RQYXRoKCRkYXRhWydlY2RhYUtleUlkJ10pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/EmptyTrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCmZpbmFsIGNsYXNzIEVtcHR5VHJ1c3RQYXRoIGltcGxlbWVudHMgVHJ1c3RQYXRoCnsKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICd0eXBlJyA9PiBzZWxmOjpjbGFzcywKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IFRydXN0UGF0aAogICAgewogICAgICAgIHJldHVybiBuZXcgRW1wdHlUcnVzdFBhdGgoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/TrustPath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBKc29uU2VyaWFsaXphYmxlOwoKaW50ZXJmYWNlIFRydXN0UGF0aCBleHRlbmRzIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShhcnJheSAkZGF0YSk6IHNlbGY7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/TrustPath/TrustPathLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFRydXN0UGF0aDsKCnVzZSBmdW5jdGlvbiBhcnJheV9rZXlfZXhpc3RzOwp1c2UgQXNzZXJ0XEFzc2VydGlvbjsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgZnVuY3Rpb24gU2FmZVxjbGFzc19pbXBsZW1lbnRzOwp1c2UgZnVuY3Rpb24gU2FmZVxzcHJpbnRmOwoKYWJzdHJhY3QgY2xhc3MgVHJ1c3RQYXRoTG9hZGVyCnsKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkW10gJGRhdGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkVHJ1c3RQYXRoKGFycmF5ICRkYXRhKTogVHJ1c3RQYXRoCiAgICB7CiAgICAgICAgQXNzZXJ0aW9uOjprZXlFeGlzdHMoJGRhdGEsICd0eXBlJywgJ1RoZSB0cnVzdCBwYXRoIHR5cGUgaXMgbWlzc2luZycpOwogICAgICAgICR0eXBlID0gJGRhdGFbJ3R5cGUnXTsKICAgICAgICAkb2xkVHlwZXMgPSBzZWxmOjpvbGRUcnVzdFBhdGhUeXBlcygpOwogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgICBjYXNlIGFycmF5X2tleV9leGlzdHMoJHR5cGUsICRvbGRUeXBlcyk6CiAgICAgICAgICAgICAgICByZXR1cm4gJG9sZFR5cGVzWyR0eXBlXTo6Y3JlYXRlRnJvbUFycmF5KCRkYXRhKTsKICAgICAgICAgICAgY2FzZSBjbGFzc19leGlzdHMoJHR5cGUpOgogICAgICAgICAgICAgICAgJGltcGxlbWVudHMgPSBjbGFzc19pbXBsZW1lbnRzKCR0eXBlKTsKICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShUcnVzdFBhdGg6OmNsYXNzLCAkaW1wbGVtZW50cywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHR5cGU6OmNyZWF0ZUZyb21BcnJheSgkZGF0YSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBubyBicmVhawogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgdHJ1c3QgcGF0aCB0eXBlICIlcyIgaXMgbm90IHN1cHBvcnRlZCcsICRkYXRhWyd0eXBlJ10pKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG9sZFRydXN0UGF0aFR5cGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2VtcHR5JyA9PiBFbXB0eVRydXN0UGF0aDo6Y2xhc3MsCiAgICAgICAgICAgICdlY2RhYV9rZXlfaWQnID0+IEVjZGFhS2V5SWRUcnVzdFBhdGg6OmNsYXNzLAogICAgICAgICAgICAneDVjJyA9PiBDZXJ0aWZpY2F0ZVRydXN0UGF0aDo6Y2xhc3MsCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/U2FPublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBXZWJhdXRobjsKCnVzZSBDQk9SXEJ5dGVTdHJpbmdPYmplY3Q7CnVzZSBDQk9SXE1hcEl0ZW07CnVzZSBDQk9SXE1hcE9iamVjdDsKdXNlIENCT1JcTmVnYXRpdmVJbnRlZ2VyT2JqZWN0Owp1c2UgQ0JPUlxVbnNpZ25lZEludGVnZXJPYmplY3Q7CgpjbGFzcyBVMkZQdWJsaWNLZXkKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1UyRktleSgkcHVibGljS2V5KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkcHVibGljS2V5WzBdID09PSAiXHgwNCI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVDT1NFS2V5KCRwdWJsaWNLZXkpOiBzdHJpbmcKICAgIHsKCiAgICAgICAgJG1hcE9iamVjdCA9IG5ldyBNYXBPYmplY3QoWwogICAgICAgICAgICAxID0+IE1hcEl0ZW06OmNyZWF0ZSgKICAgICAgICAgICAgICAgIG5ldyBVbnNpZ25lZEludGVnZXJPYmplY3QoMSwgbnVsbCksCiAgICAgICAgICAgICAgICBuZXcgVW5zaWduZWRJbnRlZ2VyT2JqZWN0KDIsIG51bGwpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIDMgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IFVuc2lnbmVkSW50ZWdlck9iamVjdCgzLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBOZWdhdGl2ZUludGVnZXJPYmplY3QoNiwgbnVsbCkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLTEgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IE5lZ2F0aXZlSW50ZWdlck9iamVjdCgwLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBVbnNpZ25lZEludGVnZXJPYmplY3QoMSwgbnVsbCkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLTIgPT4gTWFwSXRlbTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgbmV3IE5lZ2F0aXZlSW50ZWdlck9iamVjdCgxLCBudWxsKSwKICAgICAgICAgICAgICAgIG5ldyBCeXRlU3RyaW5nT2JqZWN0KHN1YnN0cigkcHVibGljS2V5LCAxLCAzMikpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC0zID0+IE1hcEl0ZW06OmNyZWF0ZSgKICAgICAgICAgICAgICAgIG5ldyBOZWdhdGl2ZUludGVnZXJPYmplY3QoMiwgbnVsbCksCiAgICAgICAgICAgICAgICBuZXcgQnl0ZVN0cmluZ09iamVjdChzdWJzdHIoJHB1YmxpY0tleSwgMzMpKQogICAgICAgICAgICApLAogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gJG1hcE9iamVjdC0+X190b1N0cmluZygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-auth/webauthn-lib/src/Util/CoseSignatureFixer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIxIFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIFdlYmF1dGhuXFV0aWw7Cgp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXEVDRFNBOwp1c2UgQ29zZVxBbGdvcml0aG1cU2lnbmF0dXJlXFNpZ25hdHVyZTsKCi8qKgogKiBUaGlzIGNsYXNzIGZpeGVzIHRoZSBzaWduYXR1cmUgb2YgdGhlIEVDRFNBIGJhc2VkIGFsZ29yaXRobXMuCiAqCiAqIEBpbnRlcm5hbAogKgogKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi8jc2lnbmF0dXJlLWF0dGVzdGF0aW9uLXR5cGVzCiAqLwphYnN0cmFjdCBjbGFzcyBDb3NlU2lnbmF0dXJlRml4ZXIKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaXgoc3RyaW5nICRzaWduYXR1cmUsIFNpZ25hdHVyZSAkYWxnb3JpdGhtKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoICgkYWxnb3JpdGhtOjppZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgY2FzZSBFQ0RTQVxFUzI1Nks6OklEOgogICAgICAgICAgICBjYXNlIEVDRFNBXEVTMjU2OjpJRDoKICAgICAgICAgICAgICAgIGlmICg2NCA9PT0gbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gRUNEU0FcRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsIDY0KTsgLy9UT0RPOiBmaXggdGhpcyBoYXJkY29kZWQgdmFsdWUgYnkgYWRkaW5nIGEgZGVkaWNhdGVkIG1ldGhvZCBmb3IgdGhlIGFsZ29yaXRobXMKICAgICAgICAgICAgY2FzZSBFQ0RTQVxFUzM4NDo6SUQ6CiAgICAgICAgICAgICAgICBpZiAoOTYgPT09IG1iX3N0cmxlbigkc2lnbmF0dXJlLCAnOGJpdCcpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzaWduYXR1cmU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIEVDRFNBXEVDU2lnbmF0dXJlOjpmcm9tQXNuMSgkc2lnbmF0dXJlLCA5Nik7CiAgICAgICAgICAgIGNhc2UgRUNEU0FcRVM1MTI6OklEOgogICAgICAgICAgICAgICAgaWYgKDEzMiA9PT0gbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gRUNEU0FcRUNTaWduYXR1cmU6OmZyb21Bc24xKCRzaWduYXR1cmUsIDEzMik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZTsKICAgIH0KfQo=]]></data>
	</file>
</module>
